{
  "version": 3,
  "sources": ["../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/adapters.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/logger.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/connection_monitor.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/internal.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/connection.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/subscription.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/subscription_guarantor.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/subscriptions.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/consumer.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/index.js", "../../../node_modules/lodash/isArray.js", "../../../node_modules/lodash/_freeGlobal.js", "../../../node_modules/lodash/_root.js", "../../../node_modules/lodash/_Symbol.js", "../../../node_modules/lodash/_getRawTag.js", "../../../node_modules/lodash/_objectToString.js", "../../../node_modules/lodash/_baseGetTag.js", "../../../node_modules/lodash/isObjectLike.js", "../../../node_modules/lodash/isSymbol.js", "../../../node_modules/lodash/_isKey.js", "../../../node_modules/lodash/isObject.js", "../../../node_modules/lodash/isFunction.js", "../../../node_modules/lodash/_coreJsData.js", "../../../node_modules/lodash/_isMasked.js", "../../../node_modules/lodash/_toSource.js", "../../../node_modules/lodash/_baseIsNative.js", "../../../node_modules/lodash/_getValue.js", "../../../node_modules/lodash/_getNative.js", "../../../node_modules/lodash/_nativeCreate.js", "../../../node_modules/lodash/_hashClear.js", "../../../node_modules/lodash/_hashDelete.js", "../../../node_modules/lodash/_hashGet.js", "../../../node_modules/lodash/_hashHas.js", "../../../node_modules/lodash/_hashSet.js", "../../../node_modules/lodash/_Hash.js", "../../../node_modules/lodash/_listCacheClear.js", "../../../node_modules/lodash/eq.js", "../../../node_modules/lodash/_assocIndexOf.js", "../../../node_modules/lodash/_listCacheDelete.js", "../../../node_modules/lodash/_listCacheGet.js", "../../../node_modules/lodash/_listCacheHas.js", "../../../node_modules/lodash/_listCacheSet.js", "../../../node_modules/lodash/_ListCache.js", "../../../node_modules/lodash/_Map.js", "../../../node_modules/lodash/_mapCacheClear.js", "../../../node_modules/lodash/_isKeyable.js", "../../../node_modules/lodash/_getMapData.js", "../../../node_modules/lodash/_mapCacheDelete.js", "../../../node_modules/lodash/_mapCacheGet.js", "../../../node_modules/lodash/_mapCacheHas.js", "../../../node_modules/lodash/_mapCacheSet.js", "../../../node_modules/lodash/_MapCache.js", "../../../node_modules/lodash/memoize.js", "../../../node_modules/lodash/_memoizeCapped.js", "../../../node_modules/lodash/_stringToPath.js", "../../../node_modules/lodash/_arrayMap.js", "../../../node_modules/lodash/_baseToString.js", "../../../node_modules/lodash/toString.js", "../../../node_modules/lodash/_castPath.js", "../../../node_modules/lodash/_toKey.js", "../../../node_modules/lodash/_baseGet.js", "../../../node_modules/lodash/get.js", "../../../node_modules/lodash/_baseHas.js", "../../../node_modules/lodash/_baseIsArguments.js", "../../../node_modules/lodash/isArguments.js", "../../../node_modules/lodash/_isIndex.js", "../../../node_modules/lodash/isLength.js", "../../../node_modules/lodash/_hasPath.js", "../../../node_modules/lodash/has.js", "../../../node_modules/lodash/_stackClear.js", "../../../node_modules/lodash/_stackDelete.js", "../../../node_modules/lodash/_stackGet.js", "../../../node_modules/lodash/_stackHas.js", "../../../node_modules/lodash/_stackSet.js", "../../../node_modules/lodash/_Stack.js", "../../../node_modules/lodash/_defineProperty.js", "../../../node_modules/lodash/_baseAssignValue.js", "../../../node_modules/lodash/_assignMergeValue.js", "../../../node_modules/lodash/_createBaseFor.js", "../../../node_modules/lodash/_baseFor.js", "../../../node_modules/lodash/_cloneBuffer.js", "../../../node_modules/lodash/_Uint8Array.js", "../../../node_modules/lodash/_cloneArrayBuffer.js", "../../../node_modules/lodash/_cloneTypedArray.js", "../../../node_modules/lodash/_copyArray.js", "../../../node_modules/lodash/_baseCreate.js", "../../../node_modules/lodash/_overArg.js", "../../../node_modules/lodash/_getPrototype.js", "../../../node_modules/lodash/_isPrototype.js", "../../../node_modules/lodash/_initCloneObject.js", "../../../node_modules/lodash/isArrayLike.js", "../../../node_modules/lodash/isArrayLikeObject.js", "../../../node_modules/lodash/stubFalse.js", "../../../node_modules/lodash/isBuffer.js", "../../../node_modules/lodash/isPlainObject.js", "../../../node_modules/lodash/_baseIsTypedArray.js", "../../../node_modules/lodash/_baseUnary.js", "../../../node_modules/lodash/_nodeUtil.js", "../../../node_modules/lodash/isTypedArray.js", "../../../node_modules/lodash/_safeGet.js", "../../../node_modules/lodash/_assignValue.js", "../../../node_modules/lodash/_copyObject.js", "../../../node_modules/lodash/_baseTimes.js", "../../../node_modules/lodash/_arrayLikeKeys.js", "../../../node_modules/lodash/_nativeKeysIn.js", "../../../node_modules/lodash/_baseKeysIn.js", "../../../node_modules/lodash/keysIn.js", "../../../node_modules/lodash/toPlainObject.js", "../../../node_modules/lodash/_baseMergeDeep.js", "../../../node_modules/lodash/_baseMerge.js", "../../../node_modules/lodash/identity.js", "../../../node_modules/lodash/_apply.js", "../../../node_modules/lodash/_overRest.js", "../../../node_modules/lodash/constant.js", "../../../node_modules/lodash/_baseSetToString.js", "../../../node_modules/lodash/_shortOut.js", "../../../node_modules/lodash/_setToString.js", "../../../node_modules/lodash/_baseRest.js", "../../../node_modules/lodash/_isIterateeCall.js", "../../../node_modules/lodash/_createAssigner.js", "../../../node_modules/lodash/merge.js", "../../../node_modules/lodash/_setCacheAdd.js", "../../../node_modules/lodash/_setCacheHas.js", "../../../node_modules/lodash/_SetCache.js", "../../../node_modules/lodash/_baseFindIndex.js", "../../../node_modules/lodash/_baseIsNaN.js", "../../../node_modules/lodash/_strictIndexOf.js", "../../../node_modules/lodash/_baseIndexOf.js", "../../../node_modules/lodash/_arrayIncludes.js", "../../../node_modules/lodash/_arrayIncludesWith.js", "../../../node_modules/lodash/_cacheHas.js", "../../../node_modules/lodash/_Set.js", "../../../node_modules/lodash/noop.js", "../../../node_modules/lodash/_setToArray.js", "../../../node_modules/lodash/_createSet.js", "../../../node_modules/lodash/_baseUniq.js", "../../../node_modules/lodash/uniq.js", "../../../node_modules/lodash/_baseSlice.js", "../../../node_modules/lodash/_castSlice.js", "../../../node_modules/lodash/_hasUnicode.js", "../../../node_modules/lodash/_asciiToArray.js", "../../../node_modules/lodash/_unicodeToArray.js", "../../../node_modules/lodash/_stringToArray.js", "../../../node_modules/lodash/_createCaseFirst.js", "../../../node_modules/lodash/upperFirst.js", "../../../node_modules/lodash/capitalize.js", "../../../node_modules/lodash/_arrayReduce.js", "../../../node_modules/lodash/_basePropertyOf.js", "../../../node_modules/lodash/_deburrLetter.js", "../../../node_modules/lodash/deburr.js", "../../../node_modules/lodash/_asciiWords.js", "../../../node_modules/lodash/_hasUnicodeWord.js", "../../../node_modules/lodash/_unicodeWords.js", "../../../node_modules/lodash/words.js", "../../../node_modules/lodash/_createCompounder.js", "../../../node_modules/lodash/camelCase.js", "../../../node_modules/lodash/_baseRepeat.js", "../../../node_modules/lodash/_trimmedEndIndex.js", "../../../node_modules/lodash/_baseTrim.js", "../../../node_modules/lodash/toNumber.js", "../../../node_modules/lodash/toFinite.js", "../../../node_modules/lodash/toInteger.js", "../../../node_modules/lodash/repeat.js", "../../../node_modules/lodash/_arrayPush.js", "../../../node_modules/lodash/_isFlattenable.js", "../../../node_modules/lodash/_baseFlatten.js", "../../../node_modules/lodash/_arraySome.js", "../../../node_modules/lodash/_equalArrays.js", "../../../node_modules/lodash/_mapToArray.js", "../../../node_modules/lodash/_equalByTag.js", "../../../node_modules/lodash/_baseGetAllKeys.js", "../../../node_modules/lodash/_arrayFilter.js", "../../../node_modules/lodash/stubArray.js", "../../../node_modules/lodash/_getSymbols.js", "../../../node_modules/lodash/_nativeKeys.js", "../../../node_modules/lodash/_baseKeys.js", "../../../node_modules/lodash/keys.js", "../../../node_modules/lodash/_getAllKeys.js", "../../../node_modules/lodash/_equalObjects.js", "../../../node_modules/lodash/_DataView.js", "../../../node_modules/lodash/_Promise.js", "../../../node_modules/lodash/_WeakMap.js", "../../../node_modules/lodash/_getTag.js", "../../../node_modules/lodash/_baseIsEqualDeep.js", "../../../node_modules/lodash/_baseIsEqual.js", "../../../node_modules/lodash/_baseIsMatch.js", "../../../node_modules/lodash/_isStrictComparable.js", "../../../node_modules/lodash/_getMatchData.js", "../../../node_modules/lodash/_matchesStrictComparable.js", "../../../node_modules/lodash/_baseMatches.js", "../../../node_modules/lodash/_baseHasIn.js", "../../../node_modules/lodash/hasIn.js", "../../../node_modules/lodash/_baseMatchesProperty.js", "../../../node_modules/lodash/_baseProperty.js", "../../../node_modules/lodash/_basePropertyDeep.js", "../../../node_modules/lodash/property.js", "../../../node_modules/lodash/_baseIteratee.js", "../../../node_modules/lodash/_baseForOwn.js", "../../../node_modules/lodash/_createBaseEach.js", "../../../node_modules/lodash/_baseEach.js", "../../../node_modules/lodash/_baseMap.js", "../../../node_modules/lodash/_baseSortBy.js", "../../../node_modules/lodash/_compareAscending.js", "../../../node_modules/lodash/_compareMultiple.js", "../../../node_modules/lodash/_baseOrderBy.js", "../../../node_modules/lodash/sortBy.js", "../../../node_modules/lodash/_baseZipObject.js", "../../../node_modules/lodash/zipObject.js", "../../../node_modules/lodash/_baseRange.js", "../../../node_modules/lodash/_createRange.js", "../../../node_modules/lodash/range.js", "../../../node_modules/jquery/dist-module/jquery.module.js", "../../../node_modules/jquery/dist/wrappers/jquery.bundler-require-wrapper.js", "../../../node_modules/bootstrap-datepicker/dist/js/bootstrap-datepicker.js", "webpack://AutoNumeric/webpack/universalModuleDefinition", "webpack://AutoNumeric/webpack/bootstrap", "webpack://AutoNumeric/webpack/runtime/define%20property%20getters", "webpack://AutoNumeric/webpack/runtime/hasOwnProperty%20shorthand", "webpack://AutoNumeric/src/AutoNumericEnum.js", "webpack://AutoNumeric/src/AutoNumericHelper.js", "webpack://AutoNumeric/src/maths/Evaluator.js", "webpack://AutoNumeric/src/maths/ASTNode.js", "webpack://AutoNumeric/src/maths/Token.js", "webpack://AutoNumeric/src/maths/Lexer.js", "webpack://AutoNumeric/src/maths/Parser.js", "webpack://AutoNumeric/src/AutoNumeric.js", "webpack://AutoNumeric/src/AutoNumericOptions.js", "webpack://AutoNumeric/src/AutoNumericEvents.js", "webpack://AutoNumeric/src/AutoNumericDefaultSettings.js", "webpack://AutoNumeric/src/AutoNumericPredefinedOptions.js", "webpack://AutoNumeric/src/main.js", "../../../node_modules/hammerjs/hammer.js", "../../../node_modules/moment/moment.js", "../../../node_modules/daterangepicker/daterangepicker.js", "../../../node_modules/leaflet/src/core/Util.js", "../../../node_modules/leaflet/src/core/Class.js", "../../../node_modules/leaflet/src/core/Events.js", "../../../node_modules/leaflet/src/geometry/Point.js", "../../../node_modules/leaflet/src/geometry/Bounds.js", "../../../node_modules/leaflet/src/geo/LatLngBounds.js", "../../../node_modules/leaflet/src/geo/LatLng.js", "../../../node_modules/leaflet/src/geo/crs/CRS.js", "../../../node_modules/leaflet/src/geo/crs/CRS.Earth.js", "../../../node_modules/leaflet/src/geo/projection/Projection.SphericalMercator.js", "../../../node_modules/leaflet/src/geometry/Transformation.js", "../../../node_modules/leaflet/src/geo/crs/CRS.EPSG3857.js", "../../../node_modules/leaflet/src/layer/vector/SVG.Util.js", "../../../node_modules/leaflet/src/core/Browser.js", "../../../node_modules/leaflet/src/dom/DomEvent.Pointer.js", "../../../node_modules/leaflet/src/dom/DomEvent.DoubleTap.js", "../../../node_modules/leaflet/src/dom/DomUtil.js", "../../../node_modules/leaflet/src/dom/DomEvent.js", "../../../node_modules/leaflet/src/dom/PosAnimation.js", "../../../node_modules/leaflet/src/map/Map.js", "../../../node_modules/leaflet/src/control/Control.js", "../../../node_modules/leaflet/src/control/Control.Layers.js", "../../../node_modules/leaflet/src/control/Control.Zoom.js", "../../../node_modules/leaflet/src/control/Control.Scale.js", "../../../node_modules/leaflet/src/control/Control.Attribution.js", "../../../node_modules/leaflet/src/control/index.js", "../../../node_modules/leaflet/src/core/Handler.js", "../../../node_modules/leaflet/src/core/index.js", "../../../node_modules/leaflet/src/dom/Draggable.js", "../../../node_modules/leaflet/src/geometry/PolyUtil.js", "../../../node_modules/leaflet/src/geometry/LineUtil.js", "../../../node_modules/leaflet/src/geo/projection/Projection.LonLat.js", "../../../node_modules/leaflet/src/geo/projection/Projection.Mercator.js", "../../../node_modules/leaflet/src/geo/projection/index.js", "../../../node_modules/leaflet/src/geo/crs/CRS.EPSG3395.js", "../../../node_modules/leaflet/src/geo/crs/CRS.EPSG4326.js", "../../../node_modules/leaflet/src/geo/crs/CRS.Simple.js", "../../../node_modules/leaflet/src/geo/crs/index.js", "../../../node_modules/leaflet/src/layer/Layer.js", "../../../node_modules/leaflet/src/layer/LayerGroup.js", "../../../node_modules/leaflet/src/layer/FeatureGroup.js", "../../../node_modules/leaflet/src/layer/marker/Icon.js", "../../../node_modules/leaflet/src/layer/marker/Icon.Default.js", "../../../node_modules/leaflet/src/layer/marker/Marker.Drag.js", "../../../node_modules/leaflet/src/layer/marker/Marker.js", "../../../node_modules/leaflet/src/layer/vector/Path.js", "../../../node_modules/leaflet/src/layer/vector/CircleMarker.js", "../../../node_modules/leaflet/src/layer/vector/Circle.js", "../../../node_modules/leaflet/src/layer/vector/Polyline.js", "../../../node_modules/leaflet/src/layer/vector/Polygon.js", "../../../node_modules/leaflet/src/layer/GeoJSON.js", "../../../node_modules/leaflet/src/layer/ImageOverlay.js", "../../../node_modules/leaflet/src/layer/VideoOverlay.js", "../../../node_modules/leaflet/src/layer/SVGOverlay.js", "../../../node_modules/leaflet/src/layer/DivOverlay.js", "../../../node_modules/leaflet/src/layer/Popup.js", "../../../node_modules/leaflet/src/layer/Tooltip.js", "../../../node_modules/leaflet/src/layer/marker/DivIcon.js", "../../../node_modules/leaflet/src/layer/marker/index.js", "../../../node_modules/leaflet/src/layer/tile/GridLayer.js", "../../../node_modules/leaflet/src/layer/tile/TileLayer.js", "../../../node_modules/leaflet/src/layer/tile/TileLayer.WMS.js", "../../../node_modules/leaflet/src/layer/tile/index.js", "../../../node_modules/leaflet/src/layer/vector/Renderer.js", "../../../node_modules/leaflet/src/layer/vector/Canvas.js", "../../../node_modules/leaflet/src/layer/vector/SVG.VML.js", "../../../node_modules/leaflet/src/layer/vector/SVG.js", "../../../node_modules/leaflet/src/layer/vector/Renderer.getRenderer.js", "../../../node_modules/leaflet/src/layer/vector/Rectangle.js", "../../../node_modules/leaflet/src/layer/vector/index.js", "../../../node_modules/leaflet/src/layer/index.js", "../../../node_modules/leaflet/src/map/handler/Map.BoxZoom.js", "../../../node_modules/leaflet/src/map/handler/Map.DoubleClickZoom.js", "../../../node_modules/leaflet/src/map/handler/Map.Drag.js", "../../../node_modules/leaflet/src/map/handler/Map.Keyboard.js", "../../../node_modules/leaflet/src/map/handler/Map.ScrollWheelZoom.js", "../../../node_modules/leaflet/src/map/handler/Map.TapHold.js", "../../../node_modules/leaflet/src/map/handler/Map.TouchZoom.js", "../../../node_modules/leaflet/src/map/index.js", "../../../node_modules/braintree-web/dist/browser/index.js", "../../../node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js", "../../../node_modules/@hotwired/stimulus/dist/stimulus.js", "../../../node_modules/i18n-js/src/I18n.ts", "../../../node_modules/i18n-js/src/Locales.ts", "../../../node_modules/make-plural/plurals.mjs", "../../../node_modules/i18n-js/src/Pluralization.ts", "../../../node_modules/i18n-js/src/helpers/camelCaseKeys.ts", "../../../node_modules/i18n-js/src/helpers/isSet.ts", "../../../node_modules/i18n-js/src/helpers/createTranslationOptions.ts", "../../../node_modules/bignumber.js/bignumber.mjs", "../../../node_modules/i18n-js/src/helpers/expandRoundMode.ts", "../../../node_modules/i18n-js/src/helpers/formatNumber.ts", "../../../node_modules/i18n-js/src/helpers/roundNumber.ts", "../../../node_modules/i18n-js/src/helpers/parseBigNumber.ts", "../../../node_modules/i18n-js/src/helpers/getFullScope.ts", "../../../node_modules/i18n-js/src/helpers/inferType.ts", "../../../node_modules/i18n-js/src/helpers/interpolate.ts", "../../../node_modules/i18n-js/src/helpers/lookup.ts", "../../../node_modules/i18n-js/src/helpers/numberToDelimited.ts", "../../../node_modules/i18n-js/src/helpers/numberToHuman.ts", "../../../node_modules/i18n-js/src/helpers/numberToHumanSize.ts", "../../../node_modules/i18n-js/src/helpers/parseDate.ts", "../../../node_modules/i18n-js/src/helpers/pluralize.ts", "../../../node_modules/i18n-js/src/helpers/strftime.ts", "../../../node_modules/i18n-js/src/helpers/timeAgoInWords.ts", "../../../node_modules/i18n-js/src/MissingTranslation.ts", "../../../node_modules/local-time/app/assets/javascripts/local-time.es2017-esm.js", "../../javascript/controllers/application.js", "../../../node_modules/@popperjs/core/lib/index.js", "../../../node_modules/@popperjs/core/lib/enums.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js", "../../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js", "../../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js", "../../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js", "../../../node_modules/@popperjs/core/lib/utils/math.js", "../../../node_modules/@popperjs/core/lib/utils/userAgent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/contains.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js", "../../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js", "../../../node_modules/@popperjs/core/lib/utils/within.js", "../../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js", "../../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js", "../../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js", "../../../node_modules/@popperjs/core/lib/modifiers/arrow.js", "../../../node_modules/@popperjs/core/lib/utils/getVariation.js", "../../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js", "../../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js", "../../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js", "../../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js", "../../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js", "../../../node_modules/@popperjs/core/lib/utils/computeOffsets.js", "../../../node_modules/@popperjs/core/lib/utils/detectOverflow.js", "../../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js", "../../../node_modules/@popperjs/core/lib/modifiers/flip.js", "../../../node_modules/@popperjs/core/lib/modifiers/hide.js", "../../../node_modules/@popperjs/core/lib/modifiers/offset.js", "../../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js", "../../../node_modules/@popperjs/core/lib/utils/getAltAxis.js", "../../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js", "../../../node_modules/@popperjs/core/lib/utils/orderModifiers.js", "../../../node_modules/@popperjs/core/lib/utils/debounce.js", "../../../node_modules/@popperjs/core/lib/utils/mergeByName.js", "../../../node_modules/@popperjs/core/lib/createPopper.js", "../../../node_modules/@popperjs/core/lib/popper-lite.js", "../../../node_modules/@popperjs/core/lib/popper.js", "../../../node_modules/bootstrap/js/src/dom/data.js", "../../../node_modules/bootstrap/js/src/util/index.js", "../../../node_modules/bootstrap/js/src/dom/event-handler.js", "../../../node_modules/bootstrap/js/src/dom/manipulator.js", "../../../node_modules/bootstrap/js/src/util/config.js", "../../../node_modules/bootstrap/js/src/base-component.js", "../../../node_modules/bootstrap/js/src/dom/selector-engine.js", "../../../node_modules/bootstrap/js/src/util/component-functions.js", "../../../node_modules/bootstrap/js/src/alert.js", "../../../node_modules/bootstrap/js/src/button.js", "../../../node_modules/bootstrap/js/src/util/swipe.js", "../../../node_modules/bootstrap/js/src/carousel.js", "../../../node_modules/bootstrap/js/src/collapse.js", "../../../node_modules/bootstrap/js/src/dropdown.js", "../../../node_modules/bootstrap/js/src/util/backdrop.js", "../../../node_modules/bootstrap/js/src/util/focustrap.js", "../../../node_modules/bootstrap/js/src/util/scrollbar.js", "../../../node_modules/bootstrap/js/src/modal.js", "../../../node_modules/bootstrap/js/src/offcanvas.js", "../../../node_modules/bootstrap/js/src/util/sanitizer.js", "../../../node_modules/bootstrap/js/src/util/template-factory.js", "../../../node_modules/bootstrap/js/src/tooltip.js", "../../../node_modules/bootstrap/js/src/popover.js", "../../../node_modules/bootstrap/js/src/scrollspy.js", "../../../node_modules/bootstrap/js/src/tab.js", "../../../node_modules/bootstrap/js/src/toast.js", "../../javascript/controllers/admin/bank_feed_allocation_controller.js", "../../javascript/controllers/admin/bank_feed_group_candidates_controller.js", "../../javascript/controllers/admin/contact_id_controller.js", "../../../node_modules/intl-tel-input/dist/js/intlTelInputWithUtils.mjs", "../../javascript/controllers/admin/contact_id_translations_controller.js", "../../../node_modules/@kurkle/color/dist/color.esm.js", "../../../node_modules/chart.js/src/helpers/helpers.core.ts", "../../../node_modules/chart.js/src/helpers/helpers.math.ts", "../../../node_modules/chart.js/src/helpers/helpers.collection.ts", "../../../node_modules/chart.js/src/helpers/helpers.extras.ts", "../../../node_modules/chart.js/src/helpers/helpers.easing.ts", "../../../node_modules/chart.js/src/helpers/helpers.color.ts", "../../../node_modules/chart.js/src/core/core.animations.defaults.js", "../../../node_modules/chart.js/src/core/core.layouts.defaults.js", "../../../node_modules/chart.js/src/helpers/helpers.intl.ts", "../../../node_modules/chart.js/src/core/core.ticks.js", "../../../node_modules/chart.js/src/core/core.scale.defaults.js", "../../../node_modules/chart.js/src/core/core.defaults.js", "../../../node_modules/chart.js/src/helpers/helpers.canvas.ts", "../../../node_modules/chart.js/src/helpers/helpers.options.ts", "../../../node_modules/chart.js/src/helpers/helpers.config.ts", "../../../node_modules/chart.js/src/helpers/helpers.curve.ts", "../../../node_modules/chart.js/src/helpers/helpers.dom.ts", "../../../node_modules/chart.js/src/helpers/helpers.interpolation.ts", "../../../node_modules/chart.js/src/helpers/helpers.rtl.ts", "../../../node_modules/chart.js/src/helpers/helpers.segment.js", "../../../node_modules/chart.js/src/helpers/helpers.dataset.ts", "../../../node_modules/chart.js/src/core/core.animator.js", "../../../node_modules/chart.js/src/core/core.animation.js", "../../../node_modules/chart.js/src/core/core.animations.js", "../../../node_modules/chart.js/src/core/core.datasetController.js", "../../../node_modules/chart.js/src/controllers/controller.bar.js", "../../../node_modules/chart.js/src/controllers/controller.bubble.js", "../../../node_modules/chart.js/src/controllers/controller.doughnut.js", "../../../node_modules/chart.js/src/controllers/controller.line.js", "../../../node_modules/chart.js/src/controllers/controller.polarArea.js", "../../../node_modules/chart.js/src/controllers/controller.pie.js", "../../../node_modules/chart.js/src/controllers/controller.radar.js", "../../../node_modules/chart.js/src/controllers/controller.scatter.js", "../../../node_modules/chart.js/src/core/core.adapters.ts", "../../../node_modules/chart.js/src/core/core.interaction.js", "../../../node_modules/chart.js/src/core/core.layouts.js", "../../../node_modules/chart.js/src/platform/platform.base.js", "../../../node_modules/chart.js/src/platform/platform.basic.js", "../../../node_modules/chart.js/src/platform/platform.dom.js", "../../../node_modules/chart.js/src/platform/index.js", "../../../node_modules/chart.js/src/core/core.element.ts", "../../../node_modules/chart.js/src/core/core.scale.autoskip.js", "../../../node_modules/chart.js/src/core/core.scale.js", "../../../node_modules/chart.js/src/core/core.typedRegistry.js", "../../../node_modules/chart.js/src/core/core.registry.js", "../../../node_modules/chart.js/src/core/core.plugins.js", "../../../node_modules/chart.js/src/core/core.config.js", "../../../node_modules/chart.js/src/core/core.controller.js", "../../../node_modules/chart.js/src/elements/element.arc.ts", "../../../node_modules/chart.js/src/elements/element.line.js", "../../../node_modules/chart.js/src/elements/element.point.ts", "../../../node_modules/chart.js/src/elements/element.bar.js", "../../../node_modules/chart.js/src/plugins/plugin.colors.ts", "../../../node_modules/chart.js/src/plugins/plugin.decimation.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/filler.segment.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/filler.helper.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/filler.options.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/filler.target.stack.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/simpleArc.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/filler.target.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/filler.drawing.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/index.js", "../../../node_modules/chart.js/src/plugins/plugin.legend.js", "../../../node_modules/chart.js/src/plugins/plugin.title.js", "../../../node_modules/chart.js/src/plugins/plugin.subtitle.js", "../../../node_modules/chart.js/src/plugins/plugin.tooltip.js", "../../../node_modules/chart.js/src/scales/scale.category.js", "../../../node_modules/chart.js/src/scales/scale.linearbase.js", "../../../node_modules/chart.js/src/scales/scale.linear.js", "../../../node_modules/chart.js/src/scales/scale.logarithmic.js", "../../../node_modules/chart.js/src/scales/scale.radialLinear.js", "../../../node_modules/chart.js/src/scales/scale.time.js", "../../../node_modules/chart.js/src/scales/scale.timeseries.js", "../../../node_modules/chart.js/src/index.ts", "../../../node_modules/chart.js/auto/auto.js", "../../javascript/controllers/admin/firmware_graphing_controller.js", "../../javascript/controllers/admin/invoicing_controller.js", "../../../node_modules/luxon/src/errors.js", "../../../node_modules/luxon/src/impl/formats.js", "../../../node_modules/luxon/src/zone.js", "../../../node_modules/luxon/src/zones/systemZone.js", "../../../node_modules/luxon/src/zones/IANAZone.js", "../../../node_modules/luxon/src/impl/locale.js", "../../../node_modules/luxon/src/zones/fixedOffsetZone.js", "../../../node_modules/luxon/src/zones/invalidZone.js", "../../../node_modules/luxon/src/impl/zoneUtil.js", "../../../node_modules/luxon/src/impl/digits.js", "../../../node_modules/luxon/src/settings.js", "../../../node_modules/luxon/src/impl/invalid.js", "../../../node_modules/luxon/src/impl/conversions.js", "../../../node_modules/luxon/src/impl/util.js", "../../../node_modules/luxon/src/impl/english.js", "../../../node_modules/luxon/src/impl/formatter.js", "../../../node_modules/luxon/src/impl/regexParser.js", "../../../node_modules/luxon/src/duration.js", "../../../node_modules/luxon/src/interval.js", "../../../node_modules/luxon/src/info.js", "../../../node_modules/luxon/src/impl/diff.js", "../../../node_modules/luxon/src/impl/tokenParser.js", "../../../node_modules/luxon/src/datetime.js", "../../../node_modules/luxon/src/luxon.js", "../../../node_modules/chartjs-adapter-luxon/dist/chartjs-adapter-luxon.esm.js", "../../../node_modules/chartjs-plugin-zoom/dist/chartjs-plugin-zoom.esm.js", "../../javascript/controllers/admin/invoicing_graphing_controller.js", "../../javascript/controllers/admin/online_status_graphing_controller.js", "../../javascript/controllers/admin/packet_graphing_controller.js", "../../javascript/controllers/admin/pending_installers_controller.js", "../../javascript/controllers/admin/plans_graphing_controller.js", "../../javascript/controllers/admin/sia_graphing_controller.js", "../../javascript/controllers/admin/signal_graphing_controller.js", "../../javascript/controllers/admin/sites_controller.js", "../../javascript/controllers/call_trigger_row_controller.js", "../../javascript/controllers/call_triggers_controller.js", "../../javascript/controllers/camera_configuration_controller.js", "../../javascript/controllers/checkout_controller.js", "../../javascript/controllers/documentation_controller.js", "../../javascript/controllers/file_upload_controller.js", "../../javascript/controllers/graphing_controller.js", "../../javascript/controllers/installer_search_controller.js", "../../javascript/controllers/installer_users/account_recovery_controller.js", "../../javascript/controllers/layout_controller.js", "../../javascript/controllers/map_controller.js", "../../../node_modules/leaflet.fullscreen/dist/Control.FullScreen.js", "../../javascript/controllers/mobiles_controller.js", "../../../node_modules/@rails/actioncable/app/assets/javascripts/actioncable.esm.js", "../../javascript/channels/consumer.js", "../../javascript/controllers/panel_programming_import_controller.js", "../../javascript/controllers/panel_status_icon_controller.js", "../../javascript/controllers/password_visibility_controller.js", "../../javascript/controllers/payments_controller.js", "../../javascript/controllers/personal_reporting_controller.js", "../../javascript/controllers/phone_controller.js", "../../javascript/controllers/plans_controller.js", "../../../node_modules/intl-tel-input/dist/js/intlTelInput.mjs", "../../javascript/controllers/reporting_controller.js", "../../javascript/controllers/session_statistics_controller.js", "../../javascript/controllers/site_programming/expiry_date_controller.js", "../../javascript/controllers/site_programming/output_type_picker_controller.js", "../../javascript/controllers/site_programming/searchable_select_controller.js", "../../javascript/controllers/site_programming_controller.js", "../../javascript/controllers/sites/history_controller.js", "../../javascript/controllers/sites_controller.js", "../../javascript/controllers/smart_keyfob_button_function_controller.js", "../../javascript/controllers/smart_keyfobs_controller.js", "../../javascript/controllers/store_controller.js", "../../javascript/controllers/timezones_controller.js", "../../javascript/controllers/user_image_upload_controller.js", "../../javascript/controllers/users/account_recovery_controller.js", "../../javascript/controllers/users/customers_controller.js", "../../javascript/controllers/users/installers_controller.js", "../../javascript/controllers/users/users_controller.js", "../../javascript/controllers/users/validations_controller.js", "../../javascript/controllers/index.js", "../../javascript/components/bootstrap-formhelpers.js", "../../javascript/components/sorttable.js"],
  "sourcesContent": ["export default {\n  logger: typeof console !== \"undefined\" ? console : undefined,\n  WebSocket: typeof WebSocket !== \"undefined\" ? WebSocket : undefined,\n}\n", "import adapters from \"./adapters\"\n\n// The logger is disabled by default. You can enable it with:\n//\n//   ActionCable.logger.enabled = true\n//\n//   Example:\n//\n//   import * as ActionCable from '@rails/actioncable'\n//\n//   ActionCable.logger.enabled = true\n//   ActionCable.logger.log('Connection Established.')\n//\n\nexport default {\n  log(...messages) {\n    if (this.enabled) {\n      messages.push(Date.now())\n      adapters.logger.log(\"[ActionCable]\", ...messages)\n    }\n  },\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting\n// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.\n\nconst now = () => new Date().getTime()\n\nconst secondsSince = time => (now() - time) / 1000\n\nclass ConnectionMonitor {\n  constructor(connection) {\n    this.visibilityDidChange = this.visibilityDidChange.bind(this)\n    this.connection = connection\n    this.reconnectAttempts = 0\n  }\n\n  start() {\n    if (!this.isRunning()) {\n      this.startedAt = now()\n      delete this.stoppedAt\n      this.startPolling()\n      addEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`)\n    }\n  }\n\n  stop() {\n    if (this.isRunning()) {\n      this.stoppedAt = now()\n      this.stopPolling()\n      removeEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(\"ConnectionMonitor stopped\")\n    }\n  }\n\n  isRunning() {\n    return this.startedAt && !this.stoppedAt\n  }\n\n  recordMessage() {\n    this.pingedAt = now()\n  }\n\n  recordConnect() {\n    this.reconnectAttempts = 0\n    delete this.disconnectedAt\n    logger.log(\"ConnectionMonitor recorded connect\")\n  }\n\n  recordDisconnect() {\n    this.disconnectedAt = now()\n    logger.log(\"ConnectionMonitor recorded disconnect\")\n  }\n\n  // Private\n\n  startPolling() {\n    this.stopPolling()\n    this.poll()\n  }\n\n  stopPolling() {\n    clearTimeout(this.pollTimeout)\n  }\n\n  poll() {\n    this.pollTimeout = setTimeout(() => {\n      this.reconnectIfStale()\n      this.poll()\n    }\n    , this.getPollInterval())\n  }\n\n  getPollInterval() {\n    const { staleThreshold, reconnectionBackoffRate } = this.constructor\n    const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10))\n    const jitterMax = this.reconnectAttempts === 0 ? 1.0 : reconnectionBackoffRate\n    const jitter = jitterMax * Math.random()\n    return staleThreshold * 1000 * backoff * (1 + jitter)\n  }\n\n  reconnectIfStale() {\n    if (this.connectionIsStale()) {\n      logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`)\n      this.reconnectAttempts++\n      if (this.disconnectedRecently()) {\n        logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`)\n      } else {\n        logger.log(\"ConnectionMonitor reopening\")\n        this.connection.reopen()\n      }\n    }\n  }\n\n  get refreshedAt() {\n    return this.pingedAt ? this.pingedAt : this.startedAt\n  }\n\n  connectionIsStale() {\n    return secondsSince(this.refreshedAt) > this.constructor.staleThreshold\n  }\n\n  disconnectedRecently() {\n    return this.disconnectedAt && (secondsSince(this.disconnectedAt) < this.constructor.staleThreshold)\n  }\n\n  visibilityDidChange() {\n    if (document.visibilityState === \"visible\") {\n      setTimeout(() => {\n        if (this.connectionIsStale() || !this.connection.isOpen()) {\n          logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`)\n          this.connection.reopen()\n        }\n      }\n      , 200)\n    }\n  }\n\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\nConnectionMonitor.reconnectionBackoffRate = 0.15\n\nexport default ConnectionMonitor\n", "export default {\n  \"message_types\": {\n    \"welcome\": \"welcome\",\n    \"disconnect\": \"disconnect\",\n    \"ping\": \"ping\",\n    \"confirmation\": \"confirm_subscription\",\n    \"rejection\": \"reject_subscription\"\n  },\n  \"disconnect_reasons\": {\n    \"unauthorized\": \"unauthorized\",\n    \"invalid_request\": \"invalid_request\",\n    \"server_restart\": \"server_restart\",\n    \"remote\": \"remote\"\n  },\n  \"default_mount_path\": \"/cable\",\n  \"protocols\": [\n    \"actioncable-v1-json\",\n    \"actioncable-unsupported\"\n  ]\n}\n", "import adapters from \"./adapters\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\n\n// Encapsulate the cable connection held by the consumer. This is an internal class not intended for direct user manipulation.\n\nconst {message_types, protocols} = INTERNAL\nconst supportedProtocols = protocols.slice(0, protocols.length - 1)\n\nconst indexOf = [].indexOf\n\nclass Connection {\n  constructor(consumer) {\n    this.open = this.open.bind(this)\n    this.consumer = consumer\n    this.subscriptions = this.consumer.subscriptions\n    this.monitor = new ConnectionMonitor(this)\n    this.disconnected = true\n  }\n\n  send(data) {\n    if (this.isOpen()) {\n      this.webSocket.send(JSON.stringify(data))\n      return true\n    } else {\n      return false\n    }\n  }\n\n  open() {\n    if (this.isActive()) {\n      logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`)\n      return false\n    } else {\n      const socketProtocols = [...protocols, ...this.consumer.subprotocols || []]\n      logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`)\n      if (this.webSocket) { this.uninstallEventHandlers() }\n      this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols)\n      this.installEventHandlers()\n      this.monitor.start()\n      return true\n    }\n  }\n\n  close({allowReconnect} = {allowReconnect: true}) {\n    if (!allowReconnect) { this.monitor.stop() }\n    // Avoid closing websockets in a \"connecting\" state due to Safari 15.1+ bug. See: https://github.com/rails/rails/issues/43835#issuecomment-1002288478\n    if (this.isOpen()) {\n      return this.webSocket.close()\n    }\n  }\n\n  reopen() {\n    logger.log(`Reopening WebSocket, current state is ${this.getState()}`)\n    if (this.isActive()) {\n      try {\n        return this.close()\n      } catch (error) {\n        logger.log(\"Failed to reopen WebSocket\", error)\n      }\n      finally {\n        logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`)\n        setTimeout(this.open, this.constructor.reopenDelay)\n      }\n    } else {\n      return this.open()\n    }\n  }\n\n  getProtocol() {\n    if (this.webSocket) {\n      return this.webSocket.protocol\n    }\n  }\n\n  isOpen() {\n    return this.isState(\"open\")\n  }\n\n  isActive() {\n    return this.isState(\"open\", \"connecting\")\n  }\n\n  triedToReconnect() {\n    return this.monitor.reconnectAttempts > 0\n  }\n\n  // Private\n\n  isProtocolSupported() {\n    return indexOf.call(supportedProtocols, this.getProtocol()) >= 0\n  }\n\n  isState(...states) {\n    return indexOf.call(states, this.getState()) >= 0\n  }\n\n  getState() {\n    if (this.webSocket) {\n      for (let state in adapters.WebSocket) {\n        if (adapters.WebSocket[state] === this.webSocket.readyState) {\n          return state.toLowerCase()\n        }\n      }\n    }\n    return null\n  }\n\n  installEventHandlers() {\n    for (let eventName in this.events) {\n      const handler = this.events[eventName].bind(this)\n      this.webSocket[`on${eventName}`] = handler\n    }\n  }\n\n  uninstallEventHandlers() {\n    for (let eventName in this.events) {\n      this.webSocket[`on${eventName}`] = function() {}\n    }\n  }\n\n}\n\nConnection.reopenDelay = 500\n\nConnection.prototype.events = {\n  message(event) {\n    if (!this.isProtocolSupported()) { return }\n    const {identifier, message, reason, reconnect, type} = JSON.parse(event.data)\n    this.monitor.recordMessage()\n    switch (type) {\n      case message_types.welcome:\n        if (this.triedToReconnect()) {\n          this.reconnectAttempted = true\n        }\n        this.monitor.recordConnect()\n        return this.subscriptions.reload()\n      case message_types.disconnect:\n        logger.log(`Disconnecting. Reason: ${reason}`)\n        return this.close({allowReconnect: reconnect})\n      case message_types.ping:\n        return null\n      case message_types.confirmation:\n        this.subscriptions.confirmSubscription(identifier)\n        if (this.reconnectAttempted) {\n          this.reconnectAttempted = false\n          return this.subscriptions.notify(identifier, \"connected\", {reconnected: true})\n        } else {\n          return this.subscriptions.notify(identifier, \"connected\", {reconnected: false})\n        }\n      case message_types.rejection:\n        return this.subscriptions.reject(identifier)\n      default:\n        return this.subscriptions.notify(identifier, \"received\", message)\n    }\n  },\n\n  open() {\n    logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`)\n    this.disconnected = false\n    if (!this.isProtocolSupported()) {\n      logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\")\n      return this.close({allowReconnect: false})\n    }\n  },\n\n  close(event) {\n    logger.log(\"WebSocket onclose event\")\n    if (this.disconnected) { return }\n    this.disconnected = true\n    this.monitor.recordDisconnect()\n    return this.subscriptions.notifyAll(\"disconnected\", {willAttemptReconnect: this.monitor.isRunning()})\n  },\n\n  error() {\n    logger.log(\"WebSocket onerror event\")\n  }\n}\n\nexport default Connection\n", "// A new subscription is created through the ActionCable.Subscriptions instance available on the consumer.\n// It provides a number of callbacks and a method for calling remote procedure calls on the corresponding\n// Channel instance on the server side.\n//\n// An example demonstrates the basic functionality:\n//\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\", {\n//     connected() {\n//       // Called once the subscription has been successfully completed\n//     },\n//\n//     disconnected({ willAttemptReconnect: boolean }) {\n//       // Called when the client has disconnected with the server.\n//       // The object will have an `willAttemptReconnect` property which\n//       // says whether the client has the intention of attempting\n//       // to reconnect.\n//     },\n//\n//     appear() {\n//       this.perform('appear', {appearing_on: this.appearingOn()})\n//     },\n//\n//     away() {\n//       this.perform('away')\n//     },\n//\n//     appearingOn() {\n//       $('main').data('appearing-on')\n//     }\n//   })\n//\n// The methods #appear and #away forward their intent to the remote AppearanceChannel instance on the server\n// by calling the `perform` method with the first parameter being the action (which maps to AppearanceChannel#appear/away).\n// The second parameter is a hash that'll get JSON encoded and made available on the server in the data parameter.\n//\n// This is how the server component would look:\n//\n//   class AppearanceChannel < ApplicationActionCable::Channel\n//     def subscribed\n//       current_user.appear\n//     end\n//\n//     def unsubscribed\n//       current_user.disappear\n//     end\n//\n//     def appear(data)\n//       current_user.appear on: data['appearing_on']\n//     end\n//\n//     def away\n//       current_user.away\n//     end\n//   end\n//\n// The \"AppearanceChannel\" name is automatically mapped between the client-side subscription creation and the server-side Ruby class name.\n// The AppearanceChannel#appear/away public methods are exposed automatically to client-side invocation through the perform method.\n\nconst extend = function(object, properties) {\n  if (properties != null) {\n    for (let key in properties) {\n      const value = properties[key]\n      object[key] = value\n    }\n  }\n  return object\n}\n\nexport default class Subscription {\n  constructor(consumer, params = {}, mixin) {\n    this.consumer = consumer\n    this.identifier = JSON.stringify(params)\n    extend(this, mixin)\n  }\n\n  // Perform a channel action with the optional data passed as an attribute\n  perform(action, data = {}) {\n    data.action = action\n    return this.send(data)\n  }\n\n  send(data) {\n    return this.consumer.send({command: \"message\", identifier: this.identifier, data: JSON.stringify(data)})\n  }\n\n  unsubscribe() {\n    return this.consumer.subscriptions.remove(this)\n  }\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring channel subscribe command is confirmed, retrying until confirmation is received.\n// Internal class, not intended for direct user manipulation.\n\nclass SubscriptionGuarantor {\n  constructor(subscriptions) {\n    this.subscriptions = subscriptions\n    this.pendingSubscriptions = []\n  }\n\n  guarantee(subscription) {\n    if(this.pendingSubscriptions.indexOf(subscription) == -1){ \n      logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`)\n      this.pendingSubscriptions.push(subscription) \n    }\n    else {\n      logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`)\n    }\n    this.startGuaranteeing()\n  }\n\n  forget(subscription) {\n    logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`)\n    this.pendingSubscriptions = (this.pendingSubscriptions.filter((s) => s !== subscription))\n  }\n\n  startGuaranteeing() {\n    this.stopGuaranteeing()\n    this.retrySubscribing()\n  }\n  \n  stopGuaranteeing() {\n    clearTimeout(this.retryTimeout)\n  }\n\n  retrySubscribing() {\n    this.retryTimeout = setTimeout(() => {\n      if (this.subscriptions && typeof(this.subscriptions.subscribe) === \"function\") {\n        this.pendingSubscriptions.map((subscription) => {\n          logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`)\n          this.subscriptions.subscribe(subscription)\n        })\n      }\n    }\n    , 500)\n  }\n}\n\nexport default SubscriptionGuarantor", "import logger from \"./logger\"\nimport Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\n\n// Collection class for creating (and internally managing) channel subscriptions.\n// The only method intended to be triggered by the user is ActionCable.Subscriptions#create,\n// and it should be called through the consumer like so:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n\nexport default class Subscriptions {\n  constructor(consumer) {\n    this.consumer = consumer\n    this.guarantor = new SubscriptionGuarantor(this)\n    this.subscriptions = []\n  }\n\n  create(channelName, mixin) {\n    const channel = channelName\n    const params = typeof channel === \"object\" ? channel : {channel}\n    const subscription = new Subscription(this.consumer, params, mixin)\n    return this.add(subscription)\n  }\n\n  // Private\n\n  add(subscription) {\n    this.subscriptions.push(subscription)\n    this.consumer.ensureActiveConnection()\n    this.notify(subscription, \"initialized\")\n    this.subscribe(subscription)\n    return subscription\n  }\n\n  remove(subscription) {\n    this.forget(subscription)\n    if (!this.findAll(subscription.identifier).length) {\n      this.sendCommand(subscription, \"unsubscribe\")\n    }\n    return subscription\n  }\n\n  reject(identifier) {\n    return this.findAll(identifier).map((subscription) => {\n      this.forget(subscription)\n      this.notify(subscription, \"rejected\")\n      return subscription\n    })\n  }\n\n  forget(subscription) {\n    this.guarantor.forget(subscription)\n    this.subscriptions = (this.subscriptions.filter((s) => s !== subscription))\n    return subscription\n  }\n\n  findAll(identifier) {\n    return this.subscriptions.filter((s) => s.identifier === identifier)\n  }\n\n  reload() {\n    return this.subscriptions.map((subscription) =>\n      this.subscribe(subscription))\n  }\n\n  notifyAll(callbackName, ...args) {\n    return this.subscriptions.map((subscription) =>\n      this.notify(subscription, callbackName, ...args))\n  }\n\n  notify(subscription, callbackName, ...args) {\n    let subscriptions\n    if (typeof subscription === \"string\") {\n      subscriptions = this.findAll(subscription)\n    } else {\n      subscriptions = [subscription]\n    }\n\n    return subscriptions.map((subscription) =>\n      (typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined))\n  }\n\n  subscribe(subscription) {\n    if (this.sendCommand(subscription, \"subscribe\")) {\n      this.guarantor.guarantee(subscription)\n    }\n  }\n\n  confirmSubscription(identifier) {\n    logger.log(`Subscription confirmed ${identifier}`)\n    this.findAll(identifier).map((subscription) =>\n      this.guarantor.forget(subscription))\n  }\n\n  sendCommand(subscription, command) {\n    const {identifier} = subscription\n    return this.consumer.send({command, identifier})\n  }\n}\n", "import Connection from \"./connection\"\nimport Subscriptions from \"./subscriptions\"\n\n// The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,\n// the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.\n// The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription\n// method.\n//\n// The following example shows how this can be set up:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n//\n// When a consumer is created, it automatically connects with the server.\n//\n// To disconnect from the server, call\n//\n//   App.cable.disconnect()\n//\n// and to restart the connection:\n//\n//   App.cable.connect()\n//\n// Any channel subscriptions which existed prior to disconnecting will\n// automatically resubscribe.\n\nexport default class Consumer {\n  constructor(url) {\n    this._url = url\n    this.subscriptions = new Subscriptions(this)\n    this.connection = new Connection(this)\n    this.subprotocols = []\n  }\n\n  get url() {\n    return createWebSocketURL(this._url)\n  }\n\n  send(data) {\n    return this.connection.send(data)\n  }\n\n  connect() {\n    return this.connection.open()\n  }\n\n  disconnect() {\n    return this.connection.close({allowReconnect: false})\n  }\n\n  ensureActiveConnection() {\n    if (!this.connection.isActive()) {\n      return this.connection.open()\n    }\n  }\n\n  addSubProtocol(subprotocol) {\n    this.subprotocols = [...this.subprotocols, subprotocol]\n  }\n}\n\nexport function createWebSocketURL(url) {\n  if (typeof url === \"function\") {\n    url = url()\n  }\n\n  if (url && !/^wss?:/i.test(url)) {\n    const a = document.createElement(\"a\")\n    a.href = url\n    // Fix populating Location properties in IE. Otherwise, protocol will be blank.\n    a.href = a.href // eslint-disable-line\n    a.protocol = a.protocol.replace(\"http\", \"ws\")\n    return a.href\n  } else {\n    return url\n  }\n}\n", "import adapters from \"./adapters\"\nimport Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\nimport Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport Subscriptions from \"./subscriptions\"\n\nexport {\n  Connection,\n  ConnectionMonitor,\n  Consumer,\n  INTERNAL,\n  Subscription,\n  Subscriptions,\n  SubscriptionGuarantor,\n  adapters,\n  createWebSocketURL,\n  logger,\n}\n\nexport function createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n  return new Consumer(url)\n}\n\nexport function getConfig(name) {\n  const element = document.head.querySelector(`meta[name='action-cable-${name}']`)\n  if (element) {\n    return element.getAttribute(\"content\")\n  }\n}\n", "/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n", "/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n", "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n", "var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n", "var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n", "var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n", "/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n", "var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n", "var isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  if (isArray(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n      value == null || isSymbol(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n    (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n", "/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n", "var baseGetTag = require('./_baseGetTag'),\n    isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n", "var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n", "var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n", "/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nmodule.exports = toSource;\n", "var isFunction = require('./isFunction'),\n    isMasked = require('./_isMasked'),\n    isObject = require('./isObject'),\n    toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n", "/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n", "var baseIsNative = require('./_baseIsNative'),\n    getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n", "var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n", "var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nmodule.exports = hashClear;\n", "/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = hashDelete;\n", "var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n", "var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n", "var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nmodule.exports = hashSet;\n", "var hashClear = require('./_hashClear'),\n    hashDelete = require('./_hashDelete'),\n    hashGet = require('./_hashGet'),\n    hashHas = require('./_hashHas'),\n    hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n", "/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n", "/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n", "var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = assocIndexOf;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nmodule.exports = listCacheDelete;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n", "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nmodule.exports = listCacheSet;\n", "var listCacheClear = require('./_listCacheClear'),\n    listCacheDelete = require('./_listCacheDelete'),\n    listCacheGet = require('./_listCacheGet'),\n    listCacheHas = require('./_listCacheHas'),\n    listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n", "var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n", "var Hash = require('./_Hash'),\n    ListCache = require('./_ListCache'),\n    Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nmodule.exports = mapCacheClear;\n", "/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nmodule.exports = isKeyable;\n", "var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nmodule.exports = getMapData;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = mapCacheDelete;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n", "var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nmodule.exports = mapCacheSet;\n", "var mapCacheClear = require('./_mapCacheClear'),\n    mapCacheDelete = require('./_mapCacheDelete'),\n    mapCacheGet = require('./_mapCacheGet'),\n    mapCacheHas = require('./_mapCacheHas'),\n    mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n", "var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result) || cache;\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n", "var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n  var result = memoize(func, function(key) {\n    if (cache.size === MAX_MEMOIZE_SIZE) {\n      cache.clear();\n    }\n    return key;\n  });\n\n  var cache = result.cache;\n  return result;\n}\n\nmodule.exports = memoizeCapped;\n", "var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n  var result = [];\n  if (string.charCodeAt(0) === 46 /* . */) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, subString) {\n    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\nmodule.exports = stringToPath;\n", "/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nmodule.exports = arrayMap;\n", "var Symbol = require('./_Symbol'),\n    arrayMap = require('./_arrayMap'),\n    isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n", "var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n", "var isArray = require('./isArray'),\n    isKey = require('./_isKey'),\n    stringToPath = require('./_stringToPath'),\n    toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n  if (isArray(value)) {\n    return value;\n  }\n  return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n", "var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n", "var castPath = require('./_castPath'),\n    toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n  path = castPath(path, object);\n\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[toKey(path[index++])];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n", "var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n  var result = object == null ? undefined : baseGet(object, path);\n  return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n  return object != null && hasOwnProperty.call(object, key);\n}\n\nmodule.exports = baseHas;\n", "var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n", "var baseIsArguments = require('./_baseIsArguments'),\n    isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n", "var castPath = require('./_castPath'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isIndex = require('./_isIndex'),\n    isLength = require('./isLength'),\n    toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      result = false;\n\n  while (++index < length) {\n    var key = toKey(path[index]);\n    if (!(result = object != null && hasFunc(object, key))) {\n      break;\n    }\n    object = object[key];\n  }\n  if (result || ++index != length) {\n    return result;\n  }\n  length = object == null ? 0 : object.length;\n  return !!length && isLength(length) && isIndex(key, length) &&\n    (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n", "var baseHas = require('./_baseHas'),\n    hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n  return object != null && hasPath(object, path, baseHas);\n}\n\nmodule.exports = has;\n", "var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nmodule.exports = stackClear;\n", "/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nmodule.exports = stackDelete;\n", "/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n", "/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n", "var ListCache = require('./_ListCache'),\n    Map = require('./_Map'),\n    MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nmodule.exports = stackSet;\n", "var ListCache = require('./_ListCache'),\n    stackClear = require('./_stackClear'),\n    stackDelete = require('./_stackDelete'),\n    stackGet = require('./_stackGet'),\n    stackHas = require('./_stackHas'),\n    stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n", "var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n", "var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nmodule.exports = baseAssignValue;\n", "var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n  if ((value !== undefined && !eq(object[key], value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignMergeValue;\n", "/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\nmodule.exports = createBaseFor;\n", "var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n", "var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nmodule.exports = cloneBuffer;\n", "var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n", "var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n", "var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n", "/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nmodule.exports = copyArray;\n", "var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nmodule.exports = baseCreate;\n", "/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nmodule.exports = overArg;\n", "var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nmodule.exports = isPrototype;\n", "var baseCreate = require('./_baseCreate'),\n    getPrototype = require('./_getPrototype'),\n    isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nmodule.exports = initCloneObject;\n", "var isFunction = require('./isFunction'),\n    isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n", "var isArrayLike = require('./isArrayLike'),\n    isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n", "/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = stubFalse;\n", "var root = require('./_root'),\n    stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n", "var baseGetTag = require('./_baseGetTag'),\n    getPrototype = require('./_getPrototype'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n", "var baseGetTag = require('./_baseGetTag'),\n    isLength = require('./isLength'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n", "/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nmodule.exports = baseUnary;\n", "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n", "var baseIsTypedArray = require('./_baseIsTypedArray'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n", "/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n  if (key === 'constructor' && typeof object[key] === 'function') {\n    return;\n  }\n\n  if (key == '__proto__') {\n    return;\n  }\n\n  return object[key];\n}\n\nmodule.exports = safeGet;\n", "var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignValue;\n", "var assignValue = require('./_assignValue'),\n    baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nmodule.exports = copyObject;\n", "/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nmodule.exports = baseTimes;\n", "var baseTimes = require('./_baseTimes'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isIndex = require('./_isIndex'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayLikeKeys;\n", "/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = nativeKeysIn;\n", "var isObject = require('./isObject'),\n    isPrototype = require('./_isPrototype'),\n    nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeysIn;\n", "var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeysIn = require('./_baseKeysIn'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n", "var copyObject = require('./_copyObject'),\n    keysIn = require('./keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n  return copyObject(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n", "var assignMergeValue = require('./_assignMergeValue'),\n    cloneBuffer = require('./_cloneBuffer'),\n    cloneTypedArray = require('./_cloneTypedArray'),\n    copyArray = require('./_copyArray'),\n    initCloneObject = require('./_initCloneObject'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isArrayLikeObject = require('./isArrayLikeObject'),\n    isBuffer = require('./isBuffer'),\n    isFunction = require('./isFunction'),\n    isObject = require('./isObject'),\n    isPlainObject = require('./isPlainObject'),\n    isTypedArray = require('./isTypedArray'),\n    safeGet = require('./_safeGet'),\n    toPlainObject = require('./toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n  var objValue = safeGet(object, key),\n      srcValue = safeGet(source, key),\n      stacked = stack.get(srcValue);\n\n  if (stacked) {\n    assignMergeValue(object, key, stacked);\n    return;\n  }\n  var newValue = customizer\n    ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n    : undefined;\n\n  var isCommon = newValue === undefined;\n\n  if (isCommon) {\n    var isArr = isArray(srcValue),\n        isBuff = !isArr && isBuffer(srcValue),\n        isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n    newValue = srcValue;\n    if (isArr || isBuff || isTyped) {\n      if (isArray(objValue)) {\n        newValue = objValue;\n      }\n      else if (isArrayLikeObject(objValue)) {\n        newValue = copyArray(objValue);\n      }\n      else if (isBuff) {\n        isCommon = false;\n        newValue = cloneBuffer(srcValue, true);\n      }\n      else if (isTyped) {\n        isCommon = false;\n        newValue = cloneTypedArray(srcValue, true);\n      }\n      else {\n        newValue = [];\n      }\n    }\n    else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n      newValue = objValue;\n      if (isArguments(objValue)) {\n        newValue = toPlainObject(objValue);\n      }\n      else if (!isObject(objValue) || isFunction(objValue)) {\n        newValue = initCloneObject(srcValue);\n      }\n    }\n    else {\n      isCommon = false;\n    }\n  }\n  if (isCommon) {\n    // Recursively merge objects and arrays (susceptible to call stack limits).\n    stack.set(srcValue, newValue);\n    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n    stack['delete'](srcValue);\n  }\n  assignMergeValue(object, key, newValue);\n}\n\nmodule.exports = baseMergeDeep;\n", "var Stack = require('./_Stack'),\n    assignMergeValue = require('./_assignMergeValue'),\n    baseFor = require('./_baseFor'),\n    baseMergeDeep = require('./_baseMergeDeep'),\n    isObject = require('./isObject'),\n    keysIn = require('./keysIn'),\n    safeGet = require('./_safeGet');\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n  if (object === source) {\n    return;\n  }\n  baseFor(source, function(srcValue, key) {\n    stack || (stack = new Stack);\n    if (isObject(srcValue)) {\n      baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n    }\n    else {\n      var newValue = customizer\n        ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      if (newValue === undefined) {\n        newValue = srcValue;\n      }\n      assignMergeValue(object, key, newValue);\n    }\n  }, keysIn);\n}\n\nmodule.exports = baseMerge;\n", "/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = identity;\n", "/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n", "var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\n\nmodule.exports = overRest;\n", "/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\n\nmodule.exports = constant;\n", "var constant = require('./constant'),\n    defineProperty = require('./_defineProperty'),\n    identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant(string),\n    'writable': true\n  });\n};\n\nmodule.exports = baseSetToString;\n", "/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n    HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\n\nmodule.exports = shortOut;\n", "var baseSetToString = require('./_baseSetToString'),\n    shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n", "var identity = require('./identity'),\n    overRest = require('./_overRest'),\n    setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n  return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n", "var eq = require('./eq'),\n    isArrayLike = require('./isArrayLike'),\n    isIndex = require('./_isIndex'),\n    isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\nmodule.exports = isIterateeCall;\n", "var baseRest = require('./_baseRest'),\n    isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return baseRest(function(object, sources) {\n    var index = -1,\n        length = sources.length,\n        customizer = length > 1 ? sources[length - 1] : undefined,\n        guard = length > 2 ? sources[2] : undefined;\n\n    customizer = (assigner.length > 3 && typeof customizer == 'function')\n      ? (length--, customizer)\n      : undefined;\n\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, index, customizer);\n      }\n    }\n    return object;\n  });\n}\n\nmodule.exports = createAssigner;\n", "var baseMerge = require('./_baseMerge'),\n    createAssigner = require('./_createAssigner');\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n *   'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n *   'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n  baseMerge(object, source, srcIndex);\n});\n\nmodule.exports = merge;\n", "/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\nmodule.exports = setCacheAdd;\n", "/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n", "var MapCache = require('./_MapCache'),\n    setCacheAdd = require('./_setCacheAdd'),\n    setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values == null ? 0 : values.length;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n", "/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n  var length = array.length,\n      index = fromIndex + (fromRight ? 1 : -1);\n\n  while ((fromRight ? index-- : ++index < length)) {\n    if (predicate(array[index], index, array)) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = baseFindIndex;\n", "/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n  return value !== value;\n}\n\nmodule.exports = baseIsNaN;\n", "/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n  var index = fromIndex - 1,\n      length = array.length;\n\n  while (++index < length) {\n    if (array[index] === value) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = strictIndexOf;\n", "var baseFindIndex = require('./_baseFindIndex'),\n    baseIsNaN = require('./_baseIsNaN'),\n    strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n  return value === value\n    ? strictIndexOf(array, value, fromIndex)\n    : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n", "var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n  var length = array == null ? 0 : array.length;\n  return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n", "/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (comparator(value, array[index])) {\n      return true;\n    }\n  }\n  return false;\n}\n\nmodule.exports = arrayIncludesWith;\n", "/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n", "var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n", "/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n  // No operation performed.\n}\n\nmodule.exports = noop;\n", "/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\nmodule.exports = setToArray;\n", "var Set = require('./_Set'),\n    noop = require('./noop'),\n    setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n  return new Set(values);\n};\n\nmodule.exports = createSet;\n", "var SetCache = require('./_SetCache'),\n    arrayIncludes = require('./_arrayIncludes'),\n    arrayIncludesWith = require('./_arrayIncludesWith'),\n    cacheHas = require('./_cacheHas'),\n    createSet = require('./_createSet'),\n    setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n  var index = -1,\n      includes = arrayIncludes,\n      length = array.length,\n      isCommon = true,\n      result = [],\n      seen = result;\n\n  if (comparator) {\n    isCommon = false;\n    includes = arrayIncludesWith;\n  }\n  else if (length >= LARGE_ARRAY_SIZE) {\n    var set = iteratee ? null : createSet(array);\n    if (set) {\n      return setToArray(set);\n    }\n    isCommon = false;\n    includes = cacheHas;\n    seen = new SetCache;\n  }\n  else {\n    seen = iteratee ? [] : result;\n  }\n  outer:\n  while (++index < length) {\n    var value = array[index],\n        computed = iteratee ? iteratee(value) : value;\n\n    value = (comparator || value !== 0) ? value : 0;\n    if (isCommon && computed === computed) {\n      var seenIndex = seen.length;\n      while (seenIndex--) {\n        if (seen[seenIndex] === computed) {\n          continue outer;\n        }\n      }\n      if (iteratee) {\n        seen.push(computed);\n      }\n      result.push(value);\n    }\n    else if (!includes(seen, computed, comparator)) {\n      if (seen !== result) {\n        seen.push(computed);\n      }\n      result.push(value);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseUniq;\n", "var baseUniq = require('./_baseUniq');\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n  return (array && array.length) ? baseUniq(array) : [];\n}\n\nmodule.exports = uniq;\n", "/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = end > length ? length : end;\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\nmodule.exports = baseSlice;\n", "var baseSlice = require('./_baseSlice');\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n  var length = array.length;\n  end = end === undefined ? length : end;\n  return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nmodule.exports = castSlice;\n", "/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** 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/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n  return reHasUnicode.test(string);\n}\n\nmodule.exports = hasUnicode;\n", "/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n  return string.split('');\n}\n\nmodule.exports = asciiToArray;\n", "/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n    rsCombo = '[' + rsComboRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n  return string.match(reUnicode) || [];\n}\n\nmodule.exports = unicodeToArray;\n", "var asciiToArray = require('./_asciiToArray'),\n    hasUnicode = require('./_hasUnicode'),\n    unicodeToArray = require('./_unicodeToArray');\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n  return hasUnicode(string)\n    ? unicodeToArray(string)\n    : asciiToArray(string);\n}\n\nmodule.exports = stringToArray;\n", "var castSlice = require('./_castSlice'),\n    hasUnicode = require('./_hasUnicode'),\n    stringToArray = require('./_stringToArray'),\n    toString = require('./toString');\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n  return function(string) {\n    string = toString(string);\n\n    var strSymbols = hasUnicode(string)\n      ? stringToArray(string)\n      : undefined;\n\n    var chr = strSymbols\n      ? strSymbols[0]\n      : string.charAt(0);\n\n    var trailing = strSymbols\n      ? castSlice(strSymbols, 1).join('')\n      : string.slice(1);\n\n    return chr[methodName]() + trailing;\n  };\n}\n\nmodule.exports = createCaseFirst;\n", "var createCaseFirst = require('./_createCaseFirst');\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\nmodule.exports = upperFirst;\n", "var toString = require('./toString'),\n    upperFirst = require('./upperFirst');\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n  return upperFirst(toString(string).toLowerCase());\n}\n\nmodule.exports = capitalize;\n", "/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n *  the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  if (initAccum && length) {\n    accumulator = array[++index];\n  }\n  while (++index < length) {\n    accumulator = iteratee(accumulator, array[index], index, array);\n  }\n  return accumulator;\n}\n\nmodule.exports = arrayReduce;\n", "/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n  return function(key) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nmodule.exports = basePropertyOf;\n", "var basePropertyOf = require('./_basePropertyOf');\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n  // Latin-1 Supplement block.\n  '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n  '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n  '\\xc7': 'C',  '\\xe7': 'c',\n  '\\xd0': 'D',  '\\xf0': 'd',\n  '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n  '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n  '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n  '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n  '\\xd1': 'N',  '\\xf1': 'n',\n  '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n  '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n  '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n  '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n  '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n  '\\xc6': 'Ae', '\\xe6': 'ae',\n  '\\xde': 'Th', '\\xfe': 'th',\n  '\\xdf': 'ss',\n  // Latin Extended-A block.\n  '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n  '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n  '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n  '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n  '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n  '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n  '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n  '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n  '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n  '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n  '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n  '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n  '\\u0134': 'J',  '\\u0135': 'j',\n  '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n  '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n  '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n  '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n  '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n  '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n  '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n  '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n  '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n  '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n  '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n  '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n  '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n  '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n  '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n  '\\u0174': 'W',  '\\u0175': 'w',\n  '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n  '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n  '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n  '\\u0132': 'IJ', '\\u0133': 'ij',\n  '\\u0152': 'Oe', '\\u0153': 'oe',\n  '\\u0149': \"'n\", '\\u017f': 's'\n};\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\nmodule.exports = deburrLetter;\n", "var deburrLetter = require('./_deburrLetter'),\n    toString = require('./toString');\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;\n\n/** Used to compose unicode capture groups. */\nvar rsCombo = '[' + rsComboRange + ']';\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('d\u00E9j\u00E0 vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n  string = toString(string);\n  return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\nmodule.exports = deburr;\n", "/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n  return string.match(reAsciiWord) || [];\n}\n\nmodule.exports = asciiWords;\n", "/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n  return reHasUnicodeWord.test(string);\n}\n\nmodule.exports = hasUnicodeWord;\n", "/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsDingbatRange = '\\\\u2700-\\\\u27bf',\n    rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n    rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n    rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n    rsPunctuationRange = '\\\\u2000-\\\\u206f',\n    rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n    rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n    rsVarRange = '\\\\ufe0e\\\\ufe0f',\n    rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n    rsBreak = '[' + rsBreakRange + ']',\n    rsCombo = '[' + rsComboRange + ']',\n    rsDigits = '\\\\d+',\n    rsDingbat = '[' + rsDingbatRange + ']',\n    rsLower = '[' + rsLowerRange + ']',\n    rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsUpper = '[' + rsUpperRange + ']',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n    rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n    rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n    rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n    reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n    rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n  rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n  rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n  rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n  rsUpper + '+' + rsOptContrUpper,\n  rsOrdUpper,\n  rsOrdLower,\n  rsDigits,\n  rsEmoji\n].join('|'), 'g');\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n  return string.match(reUnicodeWord) || [];\n}\n\nmodule.exports = unicodeWords;\n", "var asciiWords = require('./_asciiWords'),\n    hasUnicodeWord = require('./_hasUnicodeWord'),\n    toString = require('./toString'),\n    unicodeWords = require('./_unicodeWords');\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n  string = toString(string);\n  pattern = guard ? undefined : pattern;\n\n  if (pattern === undefined) {\n    return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n  }\n  return string.match(pattern) || [];\n}\n\nmodule.exports = words;\n", "var arrayReduce = require('./_arrayReduce'),\n    deburr = require('./deburr'),\n    words = require('./words');\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\";\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n  return function(string) {\n    return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n  };\n}\n\nmodule.exports = createCompounder;\n", "var capitalize = require('./capitalize'),\n    createCompounder = require('./_createCompounder');\n\n/**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\nvar camelCase = createCompounder(function(result, word, index) {\n  word = word.toLowerCase();\n  return result + (index ? capitalize(word) : word);\n});\n\nmodule.exports = camelCase;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeFloor = Math.floor;\n\n/**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\nfunction baseRepeat(string, n) {\n  var result = '';\n  if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n    return result;\n  }\n  // Leverage the exponentiation by squaring algorithm for a faster repeat.\n  // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n  do {\n    if (n % 2) {\n      result += string;\n    }\n    n = nativeFloor(n / 2);\n    if (n) {\n      string += string;\n    }\n  } while (n);\n\n  return result;\n}\n\nmodule.exports = baseRepeat;\n", "/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nmodule.exports = trimmedEndIndex;\n", "var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nmodule.exports = baseTrim;\n", "var baseTrim = require('./_baseTrim'),\n    isObject = require('./isObject'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = baseTrim(value);\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n", "var toNumber = require('./toNumber');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n    MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n  if (!value) {\n    return value === 0 ? value : 0;\n  }\n  value = toNumber(value);\n  if (value === INFINITY || value === -INFINITY) {\n    var sign = (value < 0 ? -1 : 1);\n    return sign * MAX_INTEGER;\n  }\n  return value === value ? value : 0;\n}\n\nmodule.exports = toFinite;\n", "var toFinite = require('./toFinite');\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n  var result = toFinite(value),\n      remainder = result % 1;\n\n  return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nmodule.exports = toInteger;\n", "var baseRepeat = require('./_baseRepeat'),\n    isIterateeCall = require('./_isIterateeCall'),\n    toInteger = require('./toInteger'),\n    toString = require('./toString');\n\n/**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\nfunction repeat(string, n, guard) {\n  if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n    n = 1;\n  } else {\n    n = toInteger(n);\n  }\n  return baseRepeat(toString(string), n);\n}\n\nmodule.exports = repeat;\n", "/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nmodule.exports = arrayPush;\n", "var Symbol = require('./_Symbol'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n  return isArray(value) || isArguments(value) ||\n    !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n", "var arrayPush = require('./_arrayPush'),\n    isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n  var index = -1,\n      length = array.length;\n\n  predicate || (predicate = isFlattenable);\n  result || (result = []);\n\n  while (++index < length) {\n    var value = array[index];\n    if (depth > 0 && predicate(value)) {\n      if (depth > 1) {\n        // Recursively flatten arrays (susceptible to call stack limits).\n        baseFlatten(value, depth - 1, predicate, isStrict, result);\n      } else {\n        arrayPush(result, value);\n      }\n    } else if (!isStrict) {\n      result[result.length] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseFlatten;\n", "/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nmodule.exports = arraySome;\n", "var SetCache = require('./_SetCache'),\n    arraySome = require('./_arraySome'),\n    cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Check that cyclic values are equal.\n  var arrStacked = stack.get(array);\n  var othStacked = stack.get(other);\n  if (arrStacked && othStacked) {\n    return arrStacked == other && othStacked == array;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n  stack.set(array, other);\n  stack.set(other, array);\n\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, arrValue, index, other, array, stack)\n        : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== undefined) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (seen) {\n      if (!arraySome(other, function(othValue, othIndex) {\n            if (!cacheHas(seen, othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n              return seen.push(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, bitmask, customizer, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\nmodule.exports = equalArrays;\n", "/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\nmodule.exports = mapToArray;\n", "var Symbol = require('./_Symbol'),\n    Uint8Array = require('./_Uint8Array'),\n    eq = require('./eq'),\n    equalArrays = require('./_equalArrays'),\n    mapToArray = require('./_mapToArray'),\n    setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if ((object.byteLength != other.byteLength) ||\n          (object.byteOffset != other.byteOffset)) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n\n    case arrayBufferTag:\n      if ((object.byteLength != other.byteLength) ||\n          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n        return false;\n      }\n      return true;\n\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      // Coerce booleans to `1` or `0` and dates to milliseconds.\n      // Invalid dates are coerced to `NaN`.\n      return eq(+object, +other);\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings, primitives and objects,\n      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n      // for more details.\n      return object == (other + '');\n\n    case mapTag:\n      var convert = mapToArray;\n\n    case setTag:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n      convert || (convert = setToArray);\n\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n      stack['delete'](object);\n      return result;\n\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\n\nmodule.exports = equalByTag;\n", "var arrayPush = require('./_arrayPush'),\n    isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n", "/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayFilter;\n", "/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nmodule.exports = stubArray;\n", "var arrayFilter = require('./_arrayFilter'),\n    stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nmodule.exports = getSymbols;\n", "var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n", "var isPrototype = require('./_isPrototype'),\n    nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeys;\n", "var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeys = require('./_baseKeys'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n", "var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbols = require('./_getSymbols'),\n    keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n", "var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      objProps = getAllKeys(object),\n      objLength = objProps.length,\n      othProps = getAllKeys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  // Check that cyclic values are equal.\n  var objStacked = stack.get(object);\n  var othStacked = stack.get(other);\n  if (objStacked && othStacked) {\n    return objStacked == other && othStacked == object;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, objValue, key, other, object, stack)\n        : customizer(objValue, othValue, key, object, other, stack);\n    }\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(compared === undefined\n          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n          : compared\n        )) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack['delete'](object);\n  stack['delete'](other);\n  return result;\n}\n\nmodule.exports = equalObjects;\n", "var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n", "var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n", "var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n", "var DataView = require('./_DataView'),\n    Map = require('./_Map'),\n    Promise = require('./_Promise'),\n    Set = require('./_Set'),\n    WeakMap = require('./_WeakMap'),\n    baseGetTag = require('./_baseGetTag'),\n    toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\nmodule.exports = getTag;\n", "var Stack = require('./_Stack'),\n    equalArrays = require('./_equalArrays'),\n    equalByTag = require('./_equalByTag'),\n    equalObjects = require('./_equalObjects'),\n    getTag = require('./_getTag'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = objIsArr ? arrayTag : getTag(object),\n      othTag = othIsArr ? arrayTag : getTag(other);\n\n  objTag = objTag == argsTag ? objectTag : objTag;\n  othTag = othTag == argsTag ? objectTag : othTag;\n\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && isBuffer(object)) {\n    if (!isBuffer(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object,\n          othUnwrapped = othIsWrapped ? other.value() : other;\n\n      stack || (stack = new Stack);\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n", "var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n    isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Unordered comparison\n *  2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n", "var Stack = require('./_Stack'),\n    baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n  var index = matchData.length,\n      length = index,\n      noCustomizer = !customizer;\n\n  if (object == null) {\n    return !length;\n  }\n  object = Object(object);\n  while (index--) {\n    var data = matchData[index];\n    if ((noCustomizer && data[2])\n          ? data[1] !== object[data[0]]\n          : !(data[0] in object)\n        ) {\n      return false;\n    }\n  }\n  while (++index < length) {\n    data = matchData[index];\n    var key = data[0],\n        objValue = object[key],\n        srcValue = data[1];\n\n    if (noCustomizer && data[2]) {\n      if (objValue === undefined && !(key in object)) {\n        return false;\n      }\n    } else {\n      var stack = new Stack;\n      if (customizer) {\n        var result = customizer(objValue, srcValue, key, object, source, stack);\n      }\n      if (!(result === undefined\n            ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n            : result\n          )) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\nmodule.exports = baseIsMatch;\n", "var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n  return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n", "var isStrictComparable = require('./_isStrictComparable'),\n    keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n  var result = keys(object),\n      length = result.length;\n\n  while (length--) {\n    var key = result[length],\n        value = object[key];\n\n    result[length] = [key, value, isStrictComparable(value)];\n  }\n  return result;\n}\n\nmodule.exports = getMatchData;\n", "/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    return object[key] === srcValue &&\n      (srcValue !== undefined || (key in Object(object)));\n  };\n}\n\nmodule.exports = matchesStrictComparable;\n", "var baseIsMatch = require('./_baseIsMatch'),\n    getMatchData = require('./_getMatchData'),\n    matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n  }\n  return function(object) {\n    return object === source || baseIsMatch(object, source, matchData);\n  };\n}\n\nmodule.exports = baseMatches;\n", "/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n  return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n", "var baseHasIn = require('./_baseHasIn'),\n    hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n  return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n", "var baseIsEqual = require('./_baseIsEqual'),\n    get = require('./get'),\n    hasIn = require('./hasIn'),\n    isKey = require('./_isKey'),\n    isStrictComparable = require('./_isStrictComparable'),\n    matchesStrictComparable = require('./_matchesStrictComparable'),\n    toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n  if (isKey(path) && isStrictComparable(srcValue)) {\n    return matchesStrictComparable(toKey(path), srcValue);\n  }\n  return function(object) {\n    var objValue = get(object, path);\n    return (objValue === undefined && objValue === srcValue)\n      ? hasIn(object, path)\n      : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n  };\n}\n\nmodule.exports = baseMatchesProperty;\n", "/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nmodule.exports = baseProperty;\n", "var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n  return function(object) {\n    return baseGet(object, path);\n  };\n}\n\nmodule.exports = basePropertyDeep;\n", "var baseProperty = require('./_baseProperty'),\n    basePropertyDeep = require('./_basePropertyDeep'),\n    isKey = require('./_isKey'),\n    toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': 2 } },\n *   { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n", "var baseMatches = require('./_baseMatches'),\n    baseMatchesProperty = require('./_baseMatchesProperty'),\n    identity = require('./identity'),\n    isArray = require('./isArray'),\n    property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n  if (typeof value == 'function') {\n    return value;\n  }\n  if (value == null) {\n    return identity;\n  }\n  if (typeof value == 'object') {\n    return isArray(value)\n      ? baseMatchesProperty(value[0], value[1])\n      : baseMatches(value);\n  }\n  return property(value);\n}\n\nmodule.exports = baseIteratee;\n", "var baseFor = require('./_baseFor'),\n    keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n", "var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    if (collection == null) {\n      return collection;\n    }\n    if (!isArrayLike(collection)) {\n      return eachFunc(collection, iteratee);\n    }\n    var length = collection.length,\n        index = fromRight ? length : -1,\n        iterable = Object(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\nmodule.exports = createBaseEach;\n", "var baseForOwn = require('./_baseForOwn'),\n    createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n", "var baseEach = require('./_baseEach'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n  var index = -1,\n      result = isArrayLike(collection) ? Array(collection.length) : [];\n\n  baseEach(collection, function(value, key, collection) {\n    result[++index] = iteratee(value, key, collection);\n  });\n  return result;\n}\n\nmodule.exports = baseMap;\n", "/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n  var length = array.length;\n\n  array.sort(comparer);\n  while (length--) {\n    array[length] = array[length].value;\n  }\n  return array;\n}\n\nmodule.exports = baseSortBy;\n", "var isSymbol = require('./isSymbol');\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n  if (value !== other) {\n    var valIsDefined = value !== undefined,\n        valIsNull = value === null,\n        valIsReflexive = value === value,\n        valIsSymbol = isSymbol(value);\n\n    var othIsDefined = other !== undefined,\n        othIsNull = other === null,\n        othIsReflexive = other === other,\n        othIsSymbol = isSymbol(other);\n\n    if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n        (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n        (valIsNull && othIsDefined && othIsReflexive) ||\n        (!valIsDefined && othIsReflexive) ||\n        !valIsReflexive) {\n      return 1;\n    }\n    if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n        (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n        (othIsNull && valIsDefined && valIsReflexive) ||\n        (!othIsDefined && valIsReflexive) ||\n        !othIsReflexive) {\n      return -1;\n    }\n  }\n  return 0;\n}\n\nmodule.exports = compareAscending;\n", "var compareAscending = require('./_compareAscending');\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n  var index = -1,\n      objCriteria = object.criteria,\n      othCriteria = other.criteria,\n      length = objCriteria.length,\n      ordersLength = orders.length;\n\n  while (++index < length) {\n    var result = compareAscending(objCriteria[index], othCriteria[index]);\n    if (result) {\n      if (index >= ordersLength) {\n        return result;\n      }\n      var order = orders[index];\n      return result * (order == 'desc' ? -1 : 1);\n    }\n  }\n  // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n  // that causes it, under certain circumstances, to provide the same value for\n  // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n  // for more details.\n  //\n  // This also ensures a stable sort in V8 and other engines.\n  // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n  return object.index - other.index;\n}\n\nmodule.exports = compareMultiple;\n", "var arrayMap = require('./_arrayMap'),\n    baseGet = require('./_baseGet'),\n    baseIteratee = require('./_baseIteratee'),\n    baseMap = require('./_baseMap'),\n    baseSortBy = require('./_baseSortBy'),\n    baseUnary = require('./_baseUnary'),\n    compareMultiple = require('./_compareMultiple'),\n    identity = require('./identity'),\n    isArray = require('./isArray');\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n  if (iteratees.length) {\n    iteratees = arrayMap(iteratees, function(iteratee) {\n      if (isArray(iteratee)) {\n        return function(value) {\n          return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n        }\n      }\n      return iteratee;\n    });\n  } else {\n    iteratees = [identity];\n  }\n\n  var index = -1;\n  iteratees = arrayMap(iteratees, baseUnary(baseIteratee));\n\n  var result = baseMap(collection, function(value, key, collection) {\n    var criteria = arrayMap(iteratees, function(iteratee) {\n      return iteratee(value);\n    });\n    return { 'criteria': criteria, 'index': ++index, 'value': value };\n  });\n\n  return baseSortBy(result, function(object, other) {\n    return compareMultiple(object, other, orders);\n  });\n}\n\nmodule.exports = baseOrderBy;\n", "var baseFlatten = require('./_baseFlatten'),\n    baseOrderBy = require('./_baseOrderBy'),\n    baseRest = require('./_baseRest'),\n    isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n *  The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n *   { 'user': 'fred',   'age': 48 },\n *   { 'user': 'barney', 'age': 36 },\n *   { 'user': 'fred',   'age': 30 },\n *   { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n  if (collection == null) {\n    return [];\n  }\n  var length = iteratees.length;\n  if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n    iteratees = [];\n  } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n    iteratees = [iteratees[0]];\n  }\n  return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nmodule.exports = sortBy;\n", "/**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\nfunction baseZipObject(props, values, assignFunc) {\n  var index = -1,\n      length = props.length,\n      valsLength = values.length,\n      result = {};\n\n  while (++index < length) {\n    var value = index < valsLength ? values[index] : undefined;\n    assignFunc(result, props[index], value);\n  }\n  return result;\n}\n\nmodule.exports = baseZipObject;\n", "var assignValue = require('./_assignValue'),\n    baseZipObject = require('./_baseZipObject');\n\n/**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\nfunction zipObject(props, values) {\n  return baseZipObject(props || [], values || [], assignValue);\n}\n\nmodule.exports = zipObject;\n", "/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil,\n    nativeMax = Math.max;\n\n/**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nfunction baseRange(start, end, step, fromRight) {\n  var index = -1,\n      length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n      result = Array(length);\n\n  while (length--) {\n    result[fromRight ? length : ++index] = start;\n    start += step;\n  }\n  return result;\n}\n\nmodule.exports = baseRange;\n", "var baseRange = require('./_baseRange'),\n    isIterateeCall = require('./_isIterateeCall'),\n    toFinite = require('./toFinite');\n\n/**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\nfunction createRange(fromRight) {\n  return function(start, end, step) {\n    if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n      end = step = undefined;\n    }\n    // Ensure the sign of `-0` is preserved.\n    start = toFinite(start);\n    if (end === undefined) {\n      end = start;\n      start = 0;\n    } else {\n      end = toFinite(end);\n    }\n    step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n    return baseRange(start, end, step, fromRight);\n  };\n}\n\nmodule.exports = createRange;\n", "var createRange = require('./_createRange');\n\n/**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\nvar range = createRange();\n\nmodule.exports = range;\n", "/*!\n * jQuery JavaScript Library v4.0.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.com/license/\n *\n * Date: 2026-01-18T00:20Z\n */\n// For ECMAScript module environments where a proper `window`\n// is present, execute the factory and get jQuery.\nfunction jQueryFactory( window, noGlobal ) {\n\nif ( typeof window === \"undefined\" || !window.document ) {\n\tthrow new Error( \"jQuery requires a window with a document\" );\n}\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\n// Support: IE 11+\n// IE doesn't have Array#flat; provide a fallback.\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\n// [[Class]] -> type pairs\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\n// All support tests are defined in their respective modules.\nvar support = {};\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction isArrayLike( obj ) {\n\n\tvar length = !!obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( typeof obj === \"function\" || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\nvar document$1 = window.document;\n\nvar preservedScriptAttributes = {\n\ttype: true,\n\tsrc: true,\n\tnonce: true,\n\tnoModule: true\n};\n\nfunction DOMEval( code, node, doc ) {\n\tdoc = doc || document$1;\n\n\tvar i,\n\t\tscript = doc.createElement( \"script\" );\n\n\tscript.text = code;\n\tfor ( i in preservedScriptAttributes ) {\n\t\tif ( node && node[ i ] ) {\n\t\t\tscript[ i ] = node[ i ];\n\t\t}\n\t}\n\n\tif ( doc.head.appendChild( script ).parentNode ) {\n\t\tscript.parentNode.removeChild( script );\n\t}\n}\n\nvar version = \"4.0.0\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t}\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && typeof target !== \"function\" ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Note: an element does not contain itself\n\tcontains: function( a, b ) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains( bup ) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t) );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction nodeName( elem, name ) {\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n}\n\nvar pop = arr.pop;\n\n// https://www.w3.org/TR/css3-selectors/#whitespace\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\nvar isIE = document$1.documentMode;\n\nvar rbuggyQSA = isIE && new RegExp(\n\n\t// Support: IE 9 - 11+\n\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\":enabled|:disabled|\" +\n\n\t// Support: IE 11+\n\t// IE 11 doesn't find elements on a `[name='']` query in some cases.\n\t// Adding a temporary attribute to the document before the selection works\n\t// around the issue.\n\t\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\twhitespace + \"*(?:''|\\\"\\\")\"\n\n);\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\nvar identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\";\n\nvar rleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" +\n\twhitespace + \")\" + whitespace + \"*\" );\n\nvar rdescend = new RegExp( whitespace + \"|>\" );\n\nvar rsibling = /[+~]/;\n\nvar documentElement$1 = document$1.documentElement;\n\n// Support: IE 9 - 11+\n// IE requires a prefix.\nvar matches = documentElement$1.matches || documentElement$1.msMatchesSelector;\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > jQuery.expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\nvar attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t// Operator (capture 2)\n\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\twhitespace + \"*\\\\]\";\n\nvar pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t// 2. simple (capture 6)\n\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t// 3. anything else (capture 2)\n\t\".*\" +\n\t\")\\\\)|)\";\n\nvar filterMatchExpr = {\n\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\tATTR: new RegExp( \"^\" + attributes ),\n\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\tCHILD: new RegExp(\n\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" )\n};\n\nvar rpseudo = new RegExp( pseudos );\n\n// CSS escapes\n// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\nvar runescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\nfunction unescapeSelector( sel ) {\n\treturn sel.replace( runescape, funescape );\n}\n\nfunction selectorError( msg ) {\n\tjQuery.error( \"Syntax error, unrecognized expression: \" + msg );\n}\n\nvar rcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" );\n\nvar tokenCache = createCache();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = jQuery.expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in filterMatchExpr ) {\n\t\t\tif ( ( match = jQuery.expr.match[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tselectorError( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nvar preFilter = {\n\tATTR: function( match ) {\n\t\tmatch[ 1 ] = unescapeSelector( match[ 1 ] );\n\n\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\tmatch[ 3 ] = unescapeSelector( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" );\n\n\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t}\n\n\t\treturn match.slice( 0, 4 );\n\t},\n\n\tCHILD: function( match ) {\n\n\t\t/* matches from filterMatchExpr[\"CHILD\"]\n\t\t\t1 type (only|nth|...)\n\t\t\t2 what (child|of-type)\n\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t5 sign of xn-component\n\t\t\t6 x of xn-component\n\t\t\t7 sign of y-component\n\t\t\t8 y of y-component\n\t\t*/\n\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t// nth-* requires argument\n\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\tselectorError( match[ 0 ] );\n\t\t\t}\n\n\t\t\t// numeric x and y parameters for jQuery.expr.filter.CHILD\n\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t);\n\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t// other types prohibit arguments\n\t\t} else if ( match[ 3 ] ) {\n\t\t\tselectorError( match[ 0 ] );\n\t\t}\n\n\t\treturn match;\n\t},\n\n\tPSEUDO: function( match ) {\n\t\tvar excess,\n\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\tif ( filterMatchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Accept quoted arguments as-is\n\t\tif ( match[ 3 ] ) {\n\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t// Strip excess characters from unquoted arguments\n\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t// Get excess from tokenize (recursively)\n\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t// advance to the next closing parenthesis\n\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) -\n\t\t\t\tunquoted.length ) ) {\n\n\t\t\t// excess is a negative index\n\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t}\n\n\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\treturn match.slice( 0, 3 );\n\t}\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nfunction access( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n}\n\n// Only count HTML whitespace\n// Other whitespace should count in values\n// https://infra.spec.whatwg.org/#ascii-whitespace\nvar rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ||\n\n\t\t\t\t// For compat with previous handling of boolean attributes,\n\t\t\t\t// remove when `false` passed. For ARIA attributes -\n\t\t\t\t// many of which recognize a `\"false\"` value - continue to\n\t\t\t\t// set the `\"false\"` value as jQuery <4 did.\n\t\t\t\t( value === false && name.toLowerCase().indexOf( \"aria-\" ) !== 0 ) ) {\n\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = elem.getAttribute( name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Support: IE <=11+\n// An input loses its value after becoming a radio\nif ( isIE ) {\n\tjQuery.attrHooks.type = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( value === \"radio\" && nodeName( elem, \"input\" ) ) {\n\t\t\t\tvar val = elem.value;\n\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\tif ( val ) {\n\t\t\t\t\telem.value = val;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n}\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nvar sort = arr.sort;\n\nvar splice = arr.splice;\n\nvar hasDuplicate;\n\n// Document order sorting\nfunction sortOrder( a, b ) {\n\n\t// Flag for duplicate removal\n\tif ( a === b ) {\n\t\thasDuplicate = true;\n\t\treturn 0;\n\t}\n\n\t// Sort on method existence if only one input has compareDocumentPosition\n\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\tif ( compare ) {\n\t\treturn compare;\n\t}\n\n\t// Calculate position if both inputs belong to the same document\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\ta.compareDocumentPosition( b ) :\n\n\t\t// Otherwise we know they are disconnected\n\t\t1;\n\n\t// Disconnected nodes\n\tif ( compare & 1 ) {\n\n\t\t// Choose the first element that is related to the document\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( a == document$1 || a.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, a ) ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( b == document$1 || b.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, b ) ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Maintain original order\n\t\treturn 0;\n\t}\n\n\treturn compare & 4 ? -1 : 1;\n}\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\thasDuplicate = false;\n\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nvar i,\n\toutermostContext,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\n\t// Instance-specific data\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\n\t// Regular expressions\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = jQuery.extend( {\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t}, filterMatchExpr ),\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr$1.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tjQuery.contains( context, elem ) ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// Outside of IE, if we're not changing the context we can\n\t\t\t\t\t// use :scope instead of an ID.\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || isIE ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = jQuery.expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === jQuery.expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ jQuery.expando ] = true;\n\treturn fn;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : document$1;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 ) {\n\t\treturn;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: IE 9 - 11+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( isIE && document$1 != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\treturn matches.call( elem, expr );\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\njQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tfind: {\n\t\tID: function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t},\n\n\t\tCLASS: function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: preFilter,\n\n\tfilter: {\n\t\tID: function( id ) {\n\t\t\tvar attrId = unescapeSelector( id );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t},\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = unescapeSelector( nodeNameSelector ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = jQuery.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t( parent[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t( elem[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar fn = jQuery.expr.pseudos[ pseudo ] ||\n\t\t\t\tjQuery.expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\tselectorError( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ jQuery.expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ jQuery.expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = unescapeSelector( text );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tselectorError( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = unescapeSelector( lang ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( isIE && elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !jQuery.expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\";\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\njQuery.expr.pseudos.nth = jQuery.expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tjQuery.expr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tjQuery.expr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = jQuery.expr.pseudos;\njQuery.expr.setFilters = new setFilters();\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ jQuery.expando ] || ( elem[ jQuery.expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ jQuery.expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ jQuery.expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = jQuery.expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || jQuery.expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = jQuery.expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = jQuery.expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ jQuery.expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( jQuery.expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && jQuery.expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 );\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ jQuery.expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML &&\n\t\t\t\tjQuery.expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( jQuery.expr.find.ID(\n\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( jQuery.expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = jQuery.expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// Initialize against the default document\nsetDocument();\n\njQuery.find = find;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfunction dir( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n}\n\nfunction siblings( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n}\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n// rsingleTag matches a string consisting of a single HTML element with no attributes\n// and captures the element's name\nvar rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\nfunction isObviousHtml( input ) {\n\treturn input[ 0 ] === \"<\" &&\n\t\tinput[ input.length - 1 ] === \">\" &&\n\t\tinput.length >= 3;\n}\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( typeof qualifier === \"function\" ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n// Initialize a jQuery object\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( typeof selector === \"function\" ) {\n\t\t\treturn rootjQuery.ready !== undefined ?\n\t\t\t\trootjQuery.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\n\t\t} else {\n\n\t\t\t// Handle obvious HTML strings\n\t\t\tmatch = selector + \"\";\n\t\t\tif ( isObviousHtml( match ) ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip\n\t\t\t\t// the regex check. This also handles browser-supported HTML wrappers\n\t\t\t\t// like TrustedHTML.\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t// Handle HTML strings or selectors\n\t\t\t} else if ( typeof selector === \"string\" ) {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t} else {\n\t\t\t\treturn jQuery.makeArray( selector, this );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t// Note: match[1] may be a string or a TrustedHTML wrapper\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document$1,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( typeof this[ match ] === \"function\" ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document$1.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr) & $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\t\t}\n\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document$1 );\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11+\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( typeof arg === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && typeof( method = value.promise ) === \"function\" ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && typeof( method = value.then ) === \"function\" ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\t\treject( value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tcatch: function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = typeof fns[ tuple[ 4 ] ] === \"function\" &&\n\t\t\t\t\t\t\t\tfns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && typeof returned.promise === \"function\" ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( typeof then === \"function\" ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onProgress === \"function\" ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onFulfilled === \"function\" ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onRejected === \"function\" ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\ttypeof( resolveValues[ i ] && resolveValues[ i ].then ) === \"function\" ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\tif ( error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn(\n\t\t\t\"jQuery.Deferred exception\",\n\t\t\terror,\n\t\t\tasyncError\n\t\t);\n\t}\n};\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document$1, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument$1.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\nif ( document$1.readyState !== \"loading\" ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument$1.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n// Matches dashed string for camelizing\nvar rdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase\nfunction camelCase( string ) {\n\treturn string.replace( rdashAlpha, fcamelCase );\n}\n\n/**\n * Determines whether an object can have data\n */\nfunction acceptData( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n}\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\n\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.set( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.set( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\nvar pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\n// isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n// through the CSS cascade), which is useful in deciding whether or not to make it visible.\n// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n// * A hidden ancestor does not force an element to be classified as hidden.\n// * Being disconnected from the document does not force an element to be classified as hidden.\n// These differences improve the behavior of .toggle() et al. when applied to elements that are\n// detached or contained within hidden ancestors (gh-2404, gh-2863).\nfunction isHiddenWithinTree( elem, el ) {\n\n\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\n\t// Inline style trumps all\n\treturn elem.style.display === \"none\" ||\n\t\telem.style.display === \"\" &&\n\t\tjQuery.css( elem, \"display\" ) === \"none\";\n}\n\nvar ralphaStart = /^[a-z]/,\n\n\t// The regex visualized:\n\t//\n\t//                         /----------\\\n\t//                        |            |    /-------\\\n\t//                        |  / Top  \\  |   |         |\n\t//         /--- Border ---+-| Right  |-+---+- Width -+---\\\n\t//        |                 | Bottom |                    |\n\t//        |                  \\ Left /                     |\n\t//        |                                               |\n\t//        |                              /----------\\     |\n\t//        |          /-------------\\    |            |    |- END\n\t//        |         |               |   |  / Top  \\  |    |\n\t//        |         |  / Margin  \\  |   | | Right  | |    |\n\t//        |---------+-|           |-+---+-| Bottom |-+----|\n\t//        |            \\ Padding /         \\ Left /       |\n\t// BEGIN -|                                               |\n\t//        |                /---------\\                    |\n\t//        |               |           |                   |\n\t//        |               |  / Min \\  |    / Width  \\     |\n\t//         \\--------------+-|       |-+---|          |---/\n\t//                           \\ Max /       \\ Height /\n\trautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;\n\nfunction isAutoPx( prop ) {\n\n\t// The first test is used to ensure that:\n\t// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).\n\t// 2. The prop is not empty.\n\treturn ralphaStart.test( prop ) &&\n\t\trautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );\n}\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( isAutoPx( prop ) ? \"px\" : \"\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( !isAutoPx( prop ) || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54 - 66+\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/;\n\n// Convert dashed to camelCase, handle vendor prefixes.\n// Used by the css & effects modules.\n// Support: IE <=9 - 11+\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction cssCamelCase( string ) {\n\treturn camelCase( string.replace( rmsPrefix, \"ms-\" ) );\n}\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\nvar isAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t},\n\tcomposed = { composed: true };\n\n// Support: IE 9 - 11+\n// Check attachment across shadow DOM boundaries when possible (gh-3504).\n// Provide a fallback for browsers without Shadow DOM v1 support.\nif ( !documentElement$1.getRootNode ) {\n\tisAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t};\n}\n\n// rtagName captures the name from the first start tag in a string of HTML\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\nvar rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n\nvar wrapMap = {\n\n\t// Table parts need to be wrapped with `<table>` or they're\n\t// stripped to their contents when put in a div.\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do, so we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ \"table\" ],\n\tcol: [ \"colgroup\", \"table\" ],\n\ttr: [ \"tbody\", \"table\" ],\n\ttd: [ \"tr\", \"tbody\", \"table\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\n\t\t// Use slice to snapshot the live collection from gEBTN\n\t\tret = arr.slice.call( context.getElementsByTagName( tag || \"*\" ) );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\nvar rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" && ( elem.nodeType || isArrayLike( elem ) ) ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || arr;\n\n\t\t\t\t// Create wrappers & descend into them.\n\t\t\t\tj = wrap.length;\n\t\t\t\twhile ( --j > -1 ) {\n\t\t\t\t\ttmp = tmp.appendChild( context.createElement( wrap[ j ] ) );\n\t\t\t\t}\n\n\t\t\t\ttmp.innerHTML = jQuery.htmlPrefilter( elem );\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\tif ( valueIsFunction ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.get( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce,\n\t\t\t\t\t\t\t\t\tcrossOrigin: node.crossOrigin\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent, node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nvar rcheckableType = /^(?:checkbox|radio)$/i;\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement$1, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: Firefox <=42 - 66+\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11+\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: typeof hook === \"function\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: jQuery.extend( Object.create( null ), {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\t\t\t\tif ( event.result !== undefined ) {\n\n\t\t\t\t\t// Setting `event.originalEvent.returnValue` in modern\n\t\t\t\t\t// browsers does the same as just calling `preventDefault()`,\n\t\t\t\t\t// the browsers ignore the value anyway.\n\t\t\t\t\t// Incidentally, IE 11 is the only browser from our supported\n\t\t\t\t\t// ones which respects the value returned from a `beforeunload`\n\t\t\t\t\t// handler attached by `addEventListener`; other browsers do\n\t\t\t\t\t// so only for inline handlers, so not setting the value\n\t\t\t\t\t// directly shouldn't reduce any functionality.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} )\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\t// This controller function is invoked under multiple circumstances,\n\t\t\t// differentiated by the stored value in `saved`:\n\t\t\t// 1. For an outer synthetic `.trigger()`ed event (detected by\n\t\t\t//    `event.isTrigger & 1` and non-array `saved`), it records arguments\n\t\t\t//    as an array and fires an [inner] native event to prompt state\n\t\t\t//    changes that should be observed by registered listeners (such as\n\t\t\t//    checkbox toggling and focus updating), then clears the stored value.\n\t\t\t// 2. For an [inner] native event (detected by `saved` being\n\t\t\t//    an array), it triggers an inner synthetic event, records the\n\t\t\t//    result, and preempts propagation to further jQuery listeners.\n\t\t\t// 3. For an inner synthetic event (detected by `event.isTrigger & 1` and\n\t\t\t//    array `saved`), it prevents double-propagation of surrogate events\n\t\t\t//    but otherwise allows everything to proceed (particularly including\n\t\t\t//    further listeners).\n\t\t\t// Possible `saved` data shapes: `[...], `{ value }`, `false`.\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object),\n\t\t\t\t\t// so this array will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is\n\t\t\t\t\t\t// blurred by clicking outside of it, it invokes the handler\n\t\t\t\t\t\t// synchronously. If that handler calls `.remove()` on\n\t\t\t\t\t\t// the element, the data is cleared, leaving `result`\n\t\t\t\t\t\t// undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling\n\t\t\t\t// surrogate (focus or blur), assume that the surrogate already\n\t\t\t\t// propagated from triggering the native event and prevent that\n\t\t\t\t// from happening again here.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order.\n\t\t\t// Fire an inner synthetic event with the original arguments.\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\t\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\tthis.target = src.target;\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\t// Support: IE 11+\n\t// Attach a single focusin/focusout handler on the document while someone wants focus/blur.\n\t// This is because the former are synchronous in IE while the latter are async. In other\n\t// browsers, all those handlers are invoked synchronously.\n\tfunction focusMappedHandler( nativeEvent ) {\n\n\t\t// `eventHandle` would already wrap the event, but we need to change the `type` here.\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\tevent.isSimulated = true;\n\n\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t// invoking the handler at the lower level.\n\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t// by this point.\n\t\t\tdataPriv.get( this, \"handle\" )( event );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\nvar\n\n\t// Support: IE <=10 - 11+\n\t// In IE using regex groups here causes severe slowdowns.\n\trnoInnerhtml = /<script|<style|<link/i;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar type, i, l,\n\t\tevents = dataPriv.get( src, \"events\" );\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( events ) {\n\t\tdataPriv.remove( dest, \"handle events\" );\n\t\tfor ( type in events ) {\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tdataUser.set( dest, jQuery.extend( {}, dataUser.get( src ) ) );\n\t}\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( isIE && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\n\t\t\t\t// Support: IE <=11+\n\t\t\t\t// IE fails to set the defaultValue to the correct value when\n\t\t\t\t// cloning textareas.\n\t\t\t\tif ( nodeName( destElements[ i ], \"textarea\" ) ) {\n\t\t\t\t\tdestElements[ i ].defaultValue = srcElements[ i ].defaultValue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\t\t\tpush.apply( ret, elems );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\nfunction getStyles( elem ) {\n\n\t// Support: IE <=11+ (trac-14150)\n\t// In IE popup's `window` is the opener window which makes `window.getComputedStyle( elem )`\n\t// break. Using `elem.ownerDocument.defaultView` avoids the issue.\n\tvar view = elem.ownerDocument.defaultView;\n\n\t// `document.implementation.createHTMLDocument( \"\" )` has a `null` `defaultView`\n\t// property; check `defaultView` truthiness to fallback to window in such a case.\n\tif ( !view ) {\n\t\tview = window;\n\t}\n\n\treturn view.getComputedStyle( elem );\n}\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\nfunction swap( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n}\n\nfunction curCSS( elem, name, computed ) {\n\tvar ret,\n\t\tisCustomProp = rcustomProp.test( name );\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for `.css('--customProperty')` (gh-3144)\n\tif ( computed ) {\n\n\t\t// A fallback to direct property access is needed as `computed`, being\n\t\t// the output of `getComputedStyle`, contains camelCased keys and\n\t\t// `getPropertyValue` requires kebab-case ones.\n\t\t//\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105 - 135+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document$1.createElement( \"div\" ).style;\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped vendor prefixed property\nfunction finalPropName( name ) {\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorPropName( name ) || name;\n}\n\nvar reliableTrDimensionsVal, reliableColDimensionsVal,\n\ttable = document$1.createElement( \"table\" );\n\n// Executing table tests requires only one layout, so they're executed\n// at the same time to save the second computation.\nfunction computeTableStyleTests() {\n\tif (\n\n\t\t// This is a singleton, we need to execute it only once\n\t\t!table ||\n\n\t\t// Finish early in limited (non-browser) environments\n\t\t!table.style\n\t) {\n\t\treturn;\n\t}\n\n\tvar trStyle,\n\t\tcol = document$1.createElement( \"col\" ),\n\t\ttr = document$1.createElement( \"tr\" ),\n\t\ttd = document$1.createElement( \"td\" );\n\n\ttable.style.cssText = \"position:absolute;left:-11111px;\" +\n\t\t\"border-collapse:separate;border-spacing:0\";\n\ttr.style.cssText = \"box-sizing:content-box;border:1px solid;height:1px\";\n\ttd.style.cssText = \"height:9px;width:9px;padding:0\";\n\n\tcol.span = 2;\n\n\tdocumentElement$1\n\t\t.appendChild( table )\n\t\t.appendChild( col )\n\t\t.parentNode\n\t\t.appendChild( tr )\n\t\t.appendChild( td )\n\t\t.parentNode\n\t\t.appendChild( td.cloneNode( true ) );\n\n\t// Don't run until window is visible\n\tif ( table.offsetWidth === 0 ) {\n\t\tdocumentElement$1.removeChild( table );\n\t\treturn;\n\t}\n\n\ttrStyle = window.getComputedStyle( tr );\n\n\t// Support: Firefox 135+\n\t// Firefox always reports computed width as if `span` was 1.\n\t// Support: Safari 18.3+\n\t// In Safari, computed width for columns is always 0.\n\t// In both these browsers, using `offsetWidth` solves the issue.\n\t// Support: IE 11+\n\t// In IE, `<col>` computed width is `\"auto\"` unless `width` is set\n\t// explicitly via CSS so measurements there remain incorrect. Because of\n\t// the lack of a proper workaround, we accept this limitation, treating\n\t// IE as passing the test.\n\treliableColDimensionsVal = isIE || Math.round( parseFloat(\n\t\twindow.getComputedStyle( col ).width )\n\t) === 18;\n\n\t// Support: IE 10 - 11+\n\t// IE misreports `getComputedStyle` of table rows with width/height\n\t// set in CSS while `offset*` properties report correct values.\n\t// Support: Firefox 70 - 135+\n\t// Only Firefox includes border widths\n\t// in computed dimensions for table rows. (gh-4529)\n\treliableTrDimensionsVal = Math.round( parseFloat( trStyle.height ) +\n\t\tparseFloat( trStyle.borderTopWidth ) +\n\t\tparseFloat( trStyle.borderBottomWidth ) ) === tr.offsetHeight;\n\n\tdocumentElement$1.removeChild( table );\n\n\t// Nullify the table so it wouldn't be stored in the memory;\n\t// it will also be a sign that checks were already performed.\n\ttable = null;\n}\n\njQuery.extend( support, {\n\treliableTrDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableTrDimensionsVal;\n\t},\n\n\treliableColDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableColDimensionsVal;\n\t}\n} );\n\nvar cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = isIE || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\tif (\n\t\t(\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\t\t( isIE && isBorderBox ) ||\n\n\t\t\t( !support.reliableColDimensions() && nodeName( elem, \"col\" ) ) ||\n\n\t\t\t( !support.reliableTrDimensions() && nodeName( elem, \"tr\" ) )\n\t\t) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the value is a number, add `px` for certain CSS properties\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( isAutoPx( origName ) ? \"px\" : \"\" );\n\t\t\t}\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// background-* props of a cloned element affect the source element (trac-8908)\n\t\t\tif ( isIE && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Elements with `display: none` can have dimension info if\n\t\t\t\t// we invisibly show them.\n\t\t\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tisBorderBox = extra &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( isAutoPx( prop ) ? \"px\" : \"\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document$1.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, 13 );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.set( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\tanim.done( function() {\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = cssCamelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\tpercent = 1 - ( remaining / animation.duration || 0 ),\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( typeof result.stop === \"function\" ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( typeof animation.opts.start === \"function\" ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( typeof props === \"function\" ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || easing ||\n\t\t\ttypeof speed === \"function\" && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && typeof easing !== \"function\" && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( typeof opt.old === \"function\" ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = elem.getAttribute( \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\n\t\t\t\t\t// href-less anchor's `tabIndex` property value is `0` and\n\t\t\t\t\t// the `tabindex` attribute value: `null`. We want `-1`.\n\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11+\n// Accessing the selectedIndex property forces the browser to respect\n// setting selected on the option. The getter ensures a default option\n// is selected when in an optgroup. ESLint rule \"no-unused-expressions\"\n// is disabled for this code since it considers such accessions noop.\nif ( isIE ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// Strip and collapse whitespace according to HTML spec\n// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\nfunction stripAndCollapse( value ) {\n\tvar tokens = value.match( rnothtmlwhite ) || [];\n\treturn tokens.join( \" \" );\n}\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( option.selected &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery( option ).val(), values ) > -1\n\t\t\t\t\t) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\nif ( isIE ) {\n\tjQuery.valHooks.option = {\n\t\tget: function( elem ) {\n\n\t\t\tvar val = elem.getAttribute( \"value\" );\n\t\t\treturn val != null ?\n\t\t\t\tval :\n\n\t\t\t\t// Support: IE <=10 - 11+\n\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t}\n\t};\n}\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n} );\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document$1 ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document$1;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document$1 ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && typeof elem[ type ] === \"function\" && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = /\\?/;\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11+\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = typeof valueOrFunction === \"function\" ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document$1.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( typeof func === \"function\" ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\n\t\t\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t\t\t// `getResponseHeader( key )` in IE doesn't combine all header\n\t\t\t\t\t\t\t\t// values for the provided key into a single result with values\n\t\t\t\t\t\t\t\t// joined by commas as other browsers do. Instead, it returns\n\t\t\t\t\t\t\t\t// them on separate lines.\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document$1.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11+\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an ESM-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" +\n\t\t\t\t\t( nonce.guid++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted.\n\t\t// Handle the null callback placeholder.\n\t\tif ( typeof data === \"function\" || data === null ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\tscriptAttrs: options.crossOrigin ? { \"crossOrigin\": options.crossOrigin } : undefined,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( typeof html === \"function\" ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( typeof html === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = typeof html === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\njQuery.ajaxSettings.xhr = function() {\n\treturn new window.XMLHttpRequest();\n};\n\nvar xhrSuccessStatus = {\n\n\t// File protocol always yields status code 0, assume 200\n\t0: 200\n};\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback;\n\n\treturn {\n\t\tsend: function( headers, complete ) {\n\t\t\tvar i,\n\t\t\t\txhr = options.xhr();\n\n\t\t\txhr.open(\n\t\t\t\toptions.type,\n\t\t\t\toptions.url,\n\t\t\t\toptions.async,\n\t\t\t\toptions.username,\n\t\t\t\toptions.password\n\t\t\t);\n\n\t\t\t// Apply custom fields if provided\n\t\t\tif ( options.xhrFields ) {\n\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mime type if needed\n\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t}\n\n\t\t\t// X-Requested-With header\n\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\t// Set headers\n\t\t\tfor ( i in headers ) {\n\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t}\n\n\t\t\t// Callback\n\t\t\tcallback = function( type ) {\n\t\t\t\treturn function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null;\n\n\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) === \"text\" ?\n\t\t\t\t\t\t\t\t\t{ text: xhr.responseText } :\n\t\t\t\t\t\t\t\t\t{ binary: xhr.response },\n\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t// Listen to events\n\t\t\txhr.onload = callback();\n\t\t\txhr.onabort = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t// Create the abort callback\n\t\t\tcallback = callback( \"abort\" );\n\n\t\t\ttry {\n\n\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tabort: function() {\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n} );\n\nfunction canUseScriptTag( s ) {\n\n\t// A script tag can only be used for async, cross domain or forced-by-attrs requests.\n\t// Requests with headers cannot use a script tag. However, when both `scriptAttrs` &\n\t// `headers` options are specified, both are impossible to satisfy together; we\n\t// prefer `scriptAttrs` then.\n\t// Sync requests remain handled differently to preserve strict script ordering.\n\treturn s.scriptAttrs || (\n\t\t!s.headers &&\n\t\t(\n\t\t\ts.crossDomain ||\n\n\t\t\t// When dealing with JSONP (`s.dataTypes` include \"json\" then)\n\t\t\t// don't use a script tag so that error responses still may have\n\t\t\t// `responseJSON` set. Continue using a script tag for JSONP requests that:\n\t\t\t//   * are cross-domain as AJAX requests won't work without a CORS setup\n\t\t\t//   * have `scriptAttrs` set as that's a script-only functionality\n\t\t\t// Note that this means JSONP requests violate strict CSP script-src settings.\n\t\t\t// A proper solution is to migrate from using JSONP to a CORS setup.\n\t\t\t( s.async && jQuery.inArray( \"json\", s.dataTypes ) < 0 )\n\t\t)\n\t);\n}\n\n// Install script dataType. Don't specify `contents.script` so that an explicit\n// `dataType: \"script\"` is required (see gh-2432, gh-4822)\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\n\t// These types of requests are handled via a script tag\n\t// so force their methods to GET.\n\tif ( canUseScriptTag( s ) ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\tif ( canUseScriptTag( s ) ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument$1.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Get callback name, remembering preexisting value associated with it\n\tcallbackName = s.jsonpCallback = typeof s.jsonpCallback === \"function\" ?\n\t\ts.jsonpCallback() :\n\t\ts.jsonpCallback;\n\n\t// Insert callback into url or form data\n\tif ( jsonProp ) {\n\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t} else if ( s.jsonp !== false ) {\n\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t}\n\n\t// Use data converter to retrieve json after script execution\n\ts.converters[ \"script json\" ] = function() {\n\t\tif ( !responseContainer ) {\n\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t}\n\t\treturn responseContainer[ 0 ];\n\t};\n\n\t// Force json dataType\n\ts.dataTypes[ 0 ] = \"json\";\n\n\t// Install callback\n\toverwritten = window[ callbackName ];\n\twindow[ callbackName ] = function() {\n\t\tresponseContainer = arguments;\n\t};\n\n\t// Clean-up function (fires after converters)\n\tjqXHR.always( function() {\n\n\t\t// If previous value didn't exist - remove it\n\t\tif ( overwritten === undefined ) {\n\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t// Otherwise restore preexisting value\n\t\t} else {\n\t\t\twindow[ callbackName ] = overwritten;\n\t\t}\n\n\t\t// Save back as free\n\t\tif ( s[ callbackName ] ) {\n\n\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t// Save the callback name for future use\n\t\t\toldCallbacks.push( callbackName );\n\t\t}\n\n\t\t// Call if it was a function and we have a response\n\t\tif ( responseContainer && typeof overwritten === \"function\" ) {\n\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t}\n\n\t\tresponseContainer = overwritten = undefined;\n\t} );\n\n\t// Delegate to script\n\treturn \"script\";\n} );\n\njQuery.ajaxPrefilter( function( s, origOptions ) {\n\n\t// Binary data needs to be passed to XHR as-is without stringification.\n\tif ( typeof s.data !== \"string\" && !jQuery.isPlainObject( s.data ) &&\n\t\t\t!Array.isArray( s.data ) &&\n\n\t\t\t// Don't disable data processing if explicitly set by the user.\n\t\t\t!( \"processData\" in origOptions ) ) {\n\t\ts.processData = false;\n\t}\n\n\t// `Content-Type` for requests with `FormData` bodies needs to be set\n\t// by the browser as it needs to append the `boundary` it generated.\n\tif ( s.data instanceof window.FormData ) {\n\t\ts.contentType = false;\n\t}\n} );\n\n// Argument \"data\" should be string of html or a TrustedHTML wrapper of obvious HTML\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" && !isObviousHtml( data + \"\" ) ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using DOMParser\n\t\tcontext = ( new window.DOMParser() )\n\t\t\t.parseFromString( \"\", \"text/html\" );\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( typeof params === \"function\" ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( typeof options === \"function\" ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11+\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\toffsetParent !== doc.documentElement &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.offsetParent || doc.documentElement;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) !== \"static\" ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement$1;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this\n\t\t\t.on( \"mouseenter\", fnOver )\n\t\t\t.on( \"mouseleave\", fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( typeof fn !== \"function\" ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\n\njQuery.expr[ \":\" ] = jQuery.expr.filters = jQuery.expr.pseudos;\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (trac-7102#comment:10, gh-557)\n// and CommonJS for browser emulators (trac-13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\nreturn jQuery;\n\n}\n\nvar jQuery = jQueryFactory( window, true );\n\nexport { jQuery, jQuery as $ };\n\nexport default jQuery;\n", "\"use strict\";\n\n// Bundlers are able to synchronously require an ESM module from a CommonJS one.\nconst { jQuery } = require( \"../../dist-module/jquery.module.js\" );\nmodule.exports = jQuery;\n", "/*!\n * Datepicker for Bootstrap v1.10.1 (https://github.com/uxsolutions/bootstrap-datepicker)\n *\n * Licensed under the Apache License v2.0 (https://www.apache.org/licenses/LICENSE-2.0)\n */\n\n(function(factory){\n    if (typeof define === 'function' && define.amd) {\n        define(['jquery'], factory);\n    } else if (typeof exports === 'object') {\n        factory(require('jquery'));\n    } else {\n        factory(jQuery);\n    }\n}(function($, undefined){\n\tfunction UTCDate(){\n\t\treturn new Date(Date.UTC.apply(Date, arguments));\n\t}\n\tfunction UTCToday(){\n\t\tvar today = new Date();\n\t\treturn UTCDate(today.getFullYear(), today.getMonth(), today.getDate());\n\t}\n\tfunction isUTCEquals(date1, date2) {\n\t\treturn (\n\t\t\tdate1.getUTCFullYear() === date2.getUTCFullYear() &&\n\t\t\tdate1.getUTCMonth() === date2.getUTCMonth() &&\n\t\t\tdate1.getUTCDate() === date2.getUTCDate()\n\t\t);\n\t}\n\tfunction alias(method, deprecationMsg){\n\t\treturn function(){\n\t\t\tif (deprecationMsg !== undefined) {\n\t\t\t\t$.fn.datepicker.deprecated(deprecationMsg);\n\t\t\t}\n\n\t\t\treturn this[method].apply(this, arguments);\n\t\t};\n\t}\n\tfunction isValidDate(d) {\n\t\treturn d && !isNaN(d.getTime());\n\t}\n\n\tvar DateArray = (function(){\n\t\tvar extras = {\n\t\t\tget: function(i){\n\t\t\t\treturn this.slice(i)[0];\n\t\t\t},\n\t\t\tcontains: function(d){\n\t\t\t\t// Array.indexOf is not cross-browser;\n\t\t\t\t// $.inArray doesn't work with Dates\n\t\t\t\tvar val = d && d.valueOf();\n\t\t\t\tfor (var i=0, l=this.length; i < l; i++)\n          // Use date arithmetic to allow dates with different times to match\n          if (0 <= this[i].valueOf() - val && this[i].valueOf() - val < 1000*60*60*24)\n\t\t\t\t\t\treturn i;\n\t\t\t\treturn -1;\n\t\t\t},\n\t\t\tremove: function(i){\n\t\t\t\tthis.splice(i,1);\n\t\t\t},\n\t\t\treplace: function(new_array){\n\t\t\t\tif (!new_array)\n\t\t\t\t\treturn;\n\t\t\t\tif (!Array.isArray(new_array))\n\t\t\t\t\tnew_array = [new_array];\n\t\t\t\tthis.clear();\n\t\t\t\tthis.push.apply(this, new_array);\n\t\t\t},\n\t\t\tclear: function(){\n\t\t\t\tthis.length = 0;\n\t\t\t},\n\t\t\tcopy: function(){\n\t\t\t\tvar a = new DateArray();\n\t\t\t\ta.replace(this);\n\t\t\t\treturn a;\n\t\t\t}\n\t\t};\n\n\t\treturn function(){\n\t\t\tvar a = [];\n\t\t\ta.push.apply(a, arguments);\n\t\t\t$.extend(a, extras);\n\t\t\treturn a;\n\t\t};\n\t})();\n\n\n\t// Picker object\n\n\tvar Datepicker = function(element, options){\n\t\t$.data(element, 'datepicker', this);\n\n\t\tthis._events = [];\n\t\tthis._secondaryEvents = [];\n\n\t\tthis._process_options(options);\n\n\t\tthis.dates = new DateArray();\n\t\tthis.viewDate = this.o.defaultViewDate;\n\t\tthis.focusDate = null;\n\n\t\tthis.element = $(element);\n\t\tthis.isInput = this.element.is('input');\n\t\tthis.inputField = this.isInput ? this.element : this.element.find('input');\n\t\tthis.component = this.element.hasClass('date') ? this.element.find('.add-on, .input-group-addon, .input-group-append, .input-group-prepend, .btn') : false;\n\t\tif (this.component && this.component.length === 0){\n\t\t\tthis.component = false;\n    }\n\n\t\tif (this.o.isInline === null){\n\t\t\tthis.isInline = !this.component && !this.isInput;\n\t\t} else {\n\t\t\tthis.isInline = this.o.isInline;\n\t\t}\n\n\t\tthis.picker = $(DPGlobal.template);\n\n\t\t// Checking templates and inserting\n\t\tif (this._check_template(this.o.templates.leftArrow)) {\n\t\t\tthis.picker.find('.prev').html(this.o.templates.leftArrow);\n\t\t}\n\n\t\tif (this._check_template(this.o.templates.rightArrow)) {\n\t\t\tthis.picker.find('.next').html(this.o.templates.rightArrow);\n\t\t}\n\n\t\tthis._buildEvents();\n\t\tthis._attachEvents();\n\n\t\tif (this.isInline){\n\t\t\tthis.picker.addClass('datepicker-inline').appendTo(this.element);\n\t\t}\n\t\telse {\n\t\t\tthis.picker.addClass('datepicker-dropdown dropdown-menu');\n\t\t}\n\n\t\tif (this.o.rtl){\n\t\t\tthis.picker.addClass('datepicker-rtl');\n\t\t}\n\n\t\tif (this.o.calendarWeeks) {\n\t\t\tthis.picker.find('.datepicker-days .datepicker-switch, thead .datepicker-title, tfoot .today, tfoot .clear')\n\t\t\t\t.attr('colspan', function(i, val){\n\t\t\t\t\treturn Number(val) + 1;\n\t\t\t\t});\n\t\t}\n\n\t\tthis._process_options({\n\t\t\tstartDate: this._o.startDate,\n\t\t\tendDate: this._o.endDate,\n\t\t\tdaysOfWeekDisabled: this.o.daysOfWeekDisabled,\n\t\t\tdaysOfWeekHighlighted: this.o.daysOfWeekHighlighted,\n\t\t\tdatesDisabled: this.o.datesDisabled\n\t\t});\n\n\t\tthis._allow_update = false;\n\t\tthis.setViewMode(this.o.startView);\n\t\tthis._allow_update = true;\n\n\t\tthis.fillDow();\n\t\tthis.fillMonths();\n\n\t\tthis.update();\n\n\t\tif (this.isInline){\n\t\t\tthis.show();\n\t\t}\n\t};\n\n\tDatepicker.prototype = {\n\t\tconstructor: Datepicker,\n\n\t\t_resolveViewName: function(view){\n\t\t\t$.each(DPGlobal.viewModes, function(i, viewMode){\n\t\t\t\tif (view === i || $.inArray(view, viewMode.names) !== -1){\n\t\t\t\t\tview = i;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn view;\n\t\t},\n\n\t\t_resolveDaysOfWeek: function(daysOfWeek){\n\t\t\tif (!Array.isArray(daysOfWeek))\n\t\t\t\tdaysOfWeek = daysOfWeek.split(/[,\\s]*/);\n\t\t\treturn $.map(daysOfWeek, Number);\n\t\t},\n\n\t\t_check_template: function(tmp){\n\t\t\ttry {\n\t\t\t\t// If empty\n\t\t\t\tif (tmp === undefined || tmp === \"\") {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// If no html, everything ok\n\t\t\t\tif ((tmp.match(/[<>]/g) || []).length <= 0) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t// Checking if html is fine\n\t\t\t\tvar jDom = $(tmp);\n\t\t\t\treturn jDom.length > 0;\n\t\t\t}\n\t\t\tcatch (ex) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t_process_options: function(opts){\n\t\t\t// Store raw options for reference\n\t\t\tthis._o = $.extend({}, this._o, opts);\n\t\t\t// Processed options\n\t\t\tvar o = this.o = $.extend({}, this._o);\n\n\t\t\t// Check if \"de-DE\" style date is available, if not language should\n\t\t\t// fallback to 2 letter code eg \"de\"\n\t\t\tvar lang = o.language;\n\t\t\tif (!dates[lang]){\n\t\t\t\tlang = lang.split('-')[0];\n\t\t\t\tif (!dates[lang])\n\t\t\t\t\tlang = defaults.language;\n\t\t\t}\n\t\t\to.language = lang;\n\n\t\t\t// Retrieve view index from any aliases\n\t\t\to.startView = this._resolveViewName(o.startView);\n\t\t\to.minViewMode = this._resolveViewName(o.minViewMode);\n\t\t\to.maxViewMode = this._resolveViewName(o.maxViewMode);\n\n\t\t\t// Check view is between min and max\n\t\t\to.startView = Math.max(this.o.minViewMode, Math.min(this.o.maxViewMode, o.startView));\n\n\t\t\t// true, false, or Number > 0\n\t\t\tif (o.multidate !== true){\n\t\t\t\to.multidate = Number(o.multidate) || false;\n\t\t\t\tif (o.multidate !== false)\n\t\t\t\t\to.multidate = Math.max(0, o.multidate);\n\t\t\t}\n\t\t\to.multidateSeparator = String(o.multidateSeparator);\n\n\t\t\to.weekStart %= 7;\n\t\t\to.weekEnd = (o.weekStart + 6) % 7;\n\n\t\t\tvar format = DPGlobal.parseFormat(o.format);\n\t\t\tif (o.startDate !== -Infinity){\n\t\t\t\tif (!!o.startDate){\n\t\t\t\t\tif (o.startDate instanceof Date)\n\t\t\t\t\t\to.startDate = this._local_to_utc(this._zero_time(o.startDate));\n\t\t\t\t\telse\n\t\t\t\t\t\to.startDate = DPGlobal.parseDate(o.startDate, format, o.language, o.assumeNearbyYear);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\to.startDate = -Infinity;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (o.endDate !== Infinity){\n\t\t\t\tif (!!o.endDate){\n\t\t\t\t\tif (o.endDate instanceof Date)\n\t\t\t\t\t\to.endDate = this._local_to_utc(this._zero_time(o.endDate));\n\t\t\t\t\telse\n\t\t\t\t\t\to.endDate = DPGlobal.parseDate(o.endDate, format, o.language, o.assumeNearbyYear);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\to.endDate = Infinity;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\to.daysOfWeekDisabled = this._resolveDaysOfWeek(o.daysOfWeekDisabled||[]);\n\t\t\to.daysOfWeekHighlighted = this._resolveDaysOfWeek(o.daysOfWeekHighlighted||[]);\n\n\t\t\to.datesDisabled = o.datesDisabled||[];\n\t\t\tif (!Array.isArray(o.datesDisabled)) {\n\t\t\t\to.datesDisabled = o.datesDisabled.split(',');\n\t\t\t}\n\t\t\to.datesDisabled = $.map(o.datesDisabled, function(d){\n\t\t\t\treturn DPGlobal.parseDate(d, format, o.language, o.assumeNearbyYear);\n\t\t\t});\n\n\t\t\tvar plc = String(o.orientation).toLowerCase().split(/\\s+/g),\n\t\t\t\t_plc = o.orientation.toLowerCase();\n\t\t\tplc = $.grep(plc, function(word){\n\t\t\t\treturn /^auto|left|right|top|bottom$/.test(word);\n\t\t\t});\n\t\t\to.orientation = {x: 'auto', y: 'auto'};\n\t\t\tif (!_plc || _plc === 'auto')\n\t\t\t\t; // no action\n\t\t\telse if (plc.length === 1){\n\t\t\t\tswitch (plc[0]){\n\t\t\t\t\tcase 'top':\n\t\t\t\t\tcase 'bottom':\n\t\t\t\t\t\to.orientation.y = plc[0];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'left':\n\t\t\t\t\tcase 'right':\n\t\t\t\t\t\to.orientation.x = plc[0];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_plc = $.grep(plc, function(word){\n\t\t\t\t\treturn /^left|right$/.test(word);\n\t\t\t\t});\n\t\t\t\to.orientation.x = _plc[0] || 'auto';\n\n\t\t\t\t_plc = $.grep(plc, function(word){\n\t\t\t\t\treturn /^top|bottom$/.test(word);\n\t\t\t\t});\n\t\t\t\to.orientation.y = _plc[0] || 'auto';\n\t\t\t}\n\t\t\tif (o.defaultViewDate instanceof Date || typeof o.defaultViewDate === 'string') {\n\t\t\t\to.defaultViewDate = DPGlobal.parseDate(o.defaultViewDate, format, o.language, o.assumeNearbyYear);\n\t\t\t} else if (o.defaultViewDate) {\n\t\t\t\tvar year = o.defaultViewDate.year || new Date().getFullYear();\n\t\t\t\tvar month = o.defaultViewDate.month || 0;\n\t\t\t\tvar day = o.defaultViewDate.day || 1;\n\t\t\t\to.defaultViewDate = UTCDate(year, month, day);\n\t\t\t} else {\n\t\t\t\to.defaultViewDate = UTCToday();\n\t\t\t}\n\t\t},\n\t\t_applyEvents: function(evs){\n\t\t\tfor (var i=0, el, ch, ev; i < evs.length; i++){\n\t\t\t\tel = evs[i][0];\n\t\t\t\tif (evs[i].length === 2){\n\t\t\t\t\tch = undefined;\n\t\t\t\t\tev = evs[i][1];\n\t\t\t\t} else if (evs[i].length === 3){\n\t\t\t\t\tch = evs[i][1];\n\t\t\t\t\tev = evs[i][2];\n\t\t\t\t}\n\t\t\t\tel.on(ev, ch);\n\t\t\t}\n\t\t},\n\t\t_unapplyEvents: function(evs){\n\t\t\tfor (var i=0, el, ev, ch; i < evs.length; i++){\n\t\t\t\tel = evs[i][0];\n\t\t\t\tif (evs[i].length === 2){\n\t\t\t\t\tch = undefined;\n\t\t\t\t\tev = evs[i][1];\n\t\t\t\t} else if (evs[i].length === 3){\n\t\t\t\t\tch = evs[i][1];\n\t\t\t\t\tev = evs[i][2];\n\t\t\t\t}\n\t\t\t\tel.off(ev, ch);\n\t\t\t}\n\t\t},\n\t\t_buildEvents: function(){\n            var events = {\n                keyup: $.proxy(function(e){\n                    if ($.inArray(e.keyCode, [27, 37, 39, 38, 40, 32, 13, 9]) === -1)\n                        this.update();\n                }, this),\n                keydown: $.proxy(this.keydown, this),\n                paste: $.proxy(this.paste, this)\n            };\n\n            if (this.o.showOnFocus === true) {\n                events.focus = $.proxy(this.show, this);\n            }\n\n            if (this.isInput) { // single input\n                this._events = [\n                    [this.element, events]\n                ];\n            }\n            // component: input + button\n            else if (this.component && this.inputField.length) {\n                this._events = [\n                    // For components that are not readonly, allow keyboard nav\n                    [this.inputField, events],\n                    [this.component, {\n                        click: $.proxy(this.show, this)\n                    }]\n                ];\n            }\n\t\t\telse {\n\t\t\t\tthis._events = [\n\t\t\t\t\t[this.element, {\n\t\t\t\t\t\tclick: $.proxy(this.show, this),\n\t\t\t\t\t\tkeydown: $.proxy(this.keydown, this)\n\t\t\t\t\t}]\n\t\t\t\t];\n\t\t\t}\n\t\t\tthis._events.push(\n\t\t\t\t// Component: listen for blur on element descendants\n\t\t\t\t[this.element, '*', {\n\t\t\t\t\tblur: $.proxy(function(e){\n\t\t\t\t\t\tthis._focused_from = e.target;\n\t\t\t\t\t}, this)\n\t\t\t\t}],\n\t\t\t\t// Input: listen for blur on element\n\t\t\t\t[this.element, {\n\t\t\t\t\tblur: $.proxy(function(e){\n\t\t\t\t\t\tthis._focused_from = e.target;\n\t\t\t\t\t}, this)\n\t\t\t\t}]\n\t\t\t);\n\n\t\t\tif (this.o.immediateUpdates) {\n\t\t\t\t// Trigger input updates immediately on changed year/month\n\t\t\t\tthis._events.push([this.element, {\n\t\t\t\t\t'changeYear changeMonth': $.proxy(function(e){\n\t\t\t\t\t\tthis.update(e.date);\n\t\t\t\t\t}, this)\n\t\t\t\t}]);\n\t\t\t}\n\n\t\t\tthis._secondaryEvents = [\n\t\t\t\t[this.picker, {\n\t\t\t\t\tclick: $.proxy(this.click, this)\n\t\t\t\t}],\n\t\t\t\t[this.picker, '.prev, .next', {\n\t\t\t\t\tclick: $.proxy(this.navArrowsClick, this)\n\t\t\t\t}],\n\t\t\t\t[this.picker, '.day:not(.disabled)', {\n\t\t\t\t\tclick: $.proxy(this.dayCellClick, this)\n\t\t\t\t}],\n\t\t\t\t[$(window), {\n\t\t\t\t\tresize: $.proxy(this.place, this)\n\t\t\t\t}],\n\t\t\t\t[$(document), {\n\t\t\t\t\t'mousedown touchstart': $.proxy(function(e){\n\t\t\t\t\t\t// Clicked outside the datepicker, hide it\n\t\t\t\t\t\tif (!(\n\t\t\t\t\t\t\tthis.element.is(e.target) ||\n\t\t\t\t\t\t\tthis.element.find(e.target).length ||\n\t\t\t\t\t\t\tthis.picker.is(e.target) ||\n\t\t\t\t\t\t\tthis.picker.find(e.target).length ||\n\t\t\t\t\t\t\tthis.isInline\n\t\t\t\t\t\t)){\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this)\n\t\t\t\t}]\n\t\t\t];\n\t\t},\n\t\t_attachEvents: function(){\n\t\t\tthis._detachEvents();\n\t\t\tthis._applyEvents(this._events);\n\t\t},\n\t\t_detachEvents: function(){\n\t\t\tthis._unapplyEvents(this._events);\n\t\t},\n\t\t_attachSecondaryEvents: function(){\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis._applyEvents(this._secondaryEvents);\n\t\t},\n\t\t_detachSecondaryEvents: function(){\n\t\t\tthis._unapplyEvents(this._secondaryEvents);\n\t\t},\n\t\t_trigger: function(event, altdate){\n\t\t\tvar date = altdate || this.dates.get(-1),\n\t\t\t\tlocal_date = this._utc_to_local(date);\n\n\t\t\tthis.element.trigger({\n\t\t\t\ttype: event,\n\t\t\t\tdate: local_date,\n\t\t\t\tviewMode: this.viewMode,\n\t\t\t\tdates: $.map(this.dates, this._utc_to_local),\n\t\t\t\tformat: $.proxy(function(ix, format){\n\t\t\t\t\tif (arguments.length === 0){\n\t\t\t\t\t\tix = this.dates.length - 1;\n\t\t\t\t\t\tformat = this.o.format;\n\t\t\t\t\t} else if (typeof ix === 'string'){\n\t\t\t\t\t\tformat = ix;\n\t\t\t\t\t\tix = this.dates.length - 1;\n\t\t\t\t\t}\n\t\t\t\t\tformat = format || this.o.format;\n\t\t\t\t\tvar date = this.dates.get(ix);\n\t\t\t\t\treturn DPGlobal.formatDate(date, format, this.o.language);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t},\n\n\t\tshow: function(){\n\t\t\tif (this.inputField.is(':disabled') || (this.inputField.prop('readonly') && this.o.enableOnReadonly === false))\n\t\t\t\treturn;\n\t\t\tif (!this.isInline)\n\t\t\t\tthis.picker.appendTo(this.o.container);\n\t\t\tthis.place();\n\t\t\tthis.picker.show();\n\t\t\tthis._attachSecondaryEvents();\n\t\t\tthis._trigger('show');\n\t\t\tif ((window.navigator.msMaxTouchPoints || 'ontouchstart' in document) && this.o.disableTouchKeyboard) {\n\t\t\t\t$(this.element).blur();\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\thide: function(){\n\t\t\tif (this.isInline || !this.picker.is(':visible'))\n\t\t\t\treturn this;\n\t\t\tthis.focusDate = null;\n\t\t\tthis.picker.hide().detach();\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis.setViewMode(this.o.startView);\n\n\t\t\tif (this.o.forceParse && this.inputField.val())\n\t\t\t\tthis.setValue();\n\t\t\tthis._trigger('hide');\n\t\t\treturn this;\n\t\t},\n\n\t\tdestroy: function(){\n\t\t\tthis.hide();\n\t\t\tthis._detachEvents();\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis.picker.remove();\n\t\t\tdelete this.element.data().datepicker;\n\t\t\tif (!this.isInput){\n\t\t\t\tdelete this.element.data().date;\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\tpaste: function(e){\n\t\t\tvar dateString;\n\t\t\tif (e.originalEvent.clipboardData && e.originalEvent.clipboardData.types\n\t\t\t\t&& $.inArray('text/plain', e.originalEvent.clipboardData.types) !== -1) {\n\t\t\t\tdateString = e.originalEvent.clipboardData.getData('text/plain');\n\t\t\t} else if (window.clipboardData) {\n\t\t\t\tdateString = window.clipboardData.getData('Text');\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.setDate(dateString);\n\t\t\tthis.update();\n\t\t\te.preventDefault();\n\t\t},\n\n\t\t_utc_to_local: function(utc){\n\t\t\tif (!utc) {\n\t\t\t\treturn utc;\n\t\t\t}\n\n\t\t\tvar local = new Date(utc.getTime() + (utc.getTimezoneOffset() * 60000));\n\n\t\t\tif (local.getTimezoneOffset() !== utc.getTimezoneOffset()) {\n\t\t\t\tlocal = new Date(utc.getTime() + (local.getTimezoneOffset() * 60000));\n\t\t\t}\n\n\t\t\treturn local;\n\t\t},\n\t\t_local_to_utc: function(local){\n\t\t\treturn local && new Date(local.getTime() - (local.getTimezoneOffset()*60000));\n\t\t},\n\t\t_zero_time: function(local){\n\t\t\treturn local && new Date(local.getFullYear(), local.getMonth(), local.getDate());\n\t\t},\n\t\t_zero_utc_time: function(utc){\n\t\t\treturn utc && UTCDate(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate());\n\t\t},\n\n\t\tgetDates: function(){\n\t\t\treturn $.map(this.dates, this._utc_to_local);\n\t\t},\n\n\t\tgetUTCDates: function(){\n\t\t\treturn $.map(this.dates, function(d){\n\t\t\t\treturn new Date(d);\n\t\t\t});\n\t\t},\n\n\t\tgetDate: function(){\n\t\t\treturn this._utc_to_local(this.getUTCDate());\n\t\t},\n\n\t\tgetUTCDate: function(){\n\t\t\tvar selected_date = this.dates.get(-1);\n\t\t\tif (selected_date !== undefined) {\n\t\t\t\treturn new Date(selected_date);\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\n\t\tclearDates: function(){\n\t\t\tthis.inputField.val('');\n\t\t\tthis._trigger('changeDate');\n\t\t\tthis.update();\n\t\t\tif (this.o.autoclose) {\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t},\n\n\t\tsetDates: function(){\n\t\t\tvar args = Array.isArray(arguments[0]) ? arguments[0] : arguments;\n\t\t\tthis.update.apply(this, args);\n\t\t\tthis._trigger('changeDate');\n\t\t\tthis.setValue();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetUTCDates: function(){\n\t\t\tvar args = Array.isArray(arguments[0]) ? arguments[0] : arguments;\n\t\t\tthis.setDates.apply(this, $.map(args, this._utc_to_local));\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDate: alias('setDates'),\n\t\tsetUTCDate: alias('setUTCDates'),\n\t\tremove: alias('destroy', 'Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead'),\n\n\t\tsetValue: function(){\n\t\t\tvar formatted = this.getFormattedDate();\n\t\t\tthis.inputField.val(formatted);\n\t\t\treturn this;\n\t\t},\n\n\t\tgetFormattedDate: function(format){\n\t\t\tif (format === undefined)\n\t\t\t\tformat = this.o.format;\n\n\t\t\tvar lang = this.o.language;\n\t\t\treturn $.map(this.dates, function(d){\n\t\t\t\treturn DPGlobal.formatDate(d, format, lang);\n\t\t\t}).join(this.o.multidateSeparator);\n\t\t},\n\n\t\tgetStartDate: function(){\n\t\t\treturn this.o.startDate;\n\t\t},\n\n\t\tsetStartDate: function(startDate){\n\t\t\tthis._process_options({startDate: startDate});\n\t\t\tthis.update();\n\t\t\tthis.updateNavArrows();\n\t\t\treturn this;\n\t\t},\n\n\t\tgetEndDate: function(){\n\t\t\treturn this.o.endDate;\n\t\t},\n\n\t\tsetEndDate: function(endDate){\n\t\t\tthis._process_options({endDate: endDate});\n\t\t\tthis.update();\n\t\t\tthis.updateNavArrows();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDaysOfWeekDisabled: function(daysOfWeekDisabled){\n\t\t\tthis._process_options({daysOfWeekDisabled: daysOfWeekDisabled});\n\t\t\tthis.update();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDaysOfWeekHighlighted: function(daysOfWeekHighlighted){\n\t\t\tthis._process_options({daysOfWeekHighlighted: daysOfWeekHighlighted});\n\t\t\tthis.update();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDatesDisabled: function(datesDisabled){\n\t\t\tthis._process_options({datesDisabled: datesDisabled});\n\t\t\tthis.update();\n\t\t\treturn this;\n\t\t},\n\n\t\tplace: function(){\n\t\t\tif (this.isInline)\n\t\t\t\treturn this;\n\t\t\tvar calendarWidth = this.picker.outerWidth(),\n\t\t\t\tcalendarHeight = this.picker.outerHeight(),\n\t\t\t\tvisualPadding = 10,\n\t\t\t\tcontainer = $(this.o.container),\n\t\t\t\twindowWidth = container.width(),\n\t\t\t\tscrollTop = this.o.container === 'body' ? $(document).scrollTop() : container.scrollTop(),\n\t\t\t\tappendOffset = container.offset();\n\n\t\t\tvar parentsZindex = [0];\n\t\t\tthis.element.parents().each(function(){\n\t\t\t\tvar itemZIndex = $(this).css('z-index');\n\t\t\t\tif (itemZIndex !== 'auto' && Number(itemZIndex) !== 0) parentsZindex.push(Number(itemZIndex));\n\t\t\t});\n\t\t\tvar zIndex = Math.max.apply(Math, parentsZindex) + this.o.zIndexOffset;\n\t\t\tvar offset = this.component ? this.component.parent().offset() : this.element.offset();\n\t\t\tvar height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(false);\n\t\t\tvar width = this.component ? this.component.outerWidth(true) : this.element.outerWidth(false);\n\t\t\tvar left = offset.left - appendOffset.left;\n\t\t\tvar top = offset.top - appendOffset.top;\n\n\t\t\tif (this.o.container !== 'body') {\n\t\t\t\ttop += scrollTop;\n\t\t\t}\n\n\t\t\tthis.picker.removeClass(\n\t\t\t\t'datepicker-orient-top datepicker-orient-bottom '+\n\t\t\t\t'datepicker-orient-right datepicker-orient-left'\n\t\t\t);\n\n\t\t\tif (this.o.orientation.x !== 'auto'){\n\t\t\t\tthis.picker.addClass('datepicker-orient-' + this.o.orientation.x);\n\t\t\t\tif (this.o.orientation.x === 'right')\n\t\t\t\t\tleft -= calendarWidth - width;\n\t\t\t}\n\t\t\t// auto x orientation is best-placement: if it crosses a window\n\t\t\t// edge, fudge it sideways\n\t\t\telse {\n\t\t\t\tif (offset.left < 0) {\n\t\t\t\t\t// component is outside the window on the left side. Move it into visible range\n\t\t\t\t\tthis.picker.addClass('datepicker-orient-left');\n\t\t\t\t\tleft -= offset.left - visualPadding;\n\t\t\t\t} else if (left + calendarWidth > windowWidth) {\n\t\t\t\t\t// the calendar passes the widow right edge. Align it to component right side\n\t\t\t\t\tthis.picker.addClass('datepicker-orient-right');\n\t\t\t\t\tleft += width - calendarWidth;\n\t\t\t\t} else {\n\t\t\t\t\tif (this.o.rtl) {\n\t\t\t\t\t\t// Default to right\n\t\t\t\t\t\tthis.picker.addClass('datepicker-orient-right');\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Default to left\n\t\t\t\t\t\tthis.picker.addClass('datepicker-orient-left');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// auto y orientation is best-situation: top or bottom, no fudging,\n\t\t\t// decision based on which shows more of the calendar\n\t\t\tvar yorient = this.o.orientation.y,\n\t\t\t\ttop_overflow;\n\t\t\tif (yorient === 'auto'){\n\t\t\t\ttop_overflow = -scrollTop + top - calendarHeight;\n\t\t\t\tyorient = top_overflow < 0 ? 'bottom' : 'top';\n\t\t\t}\n\n\t\t\tthis.picker.addClass('datepicker-orient-' + yorient);\n\t\t\tif (yorient === 'top')\n\t\t\t\ttop -= calendarHeight + parseInt(this.picker.css('padding-top'));\n\t\t\telse\n\t\t\t\ttop += height;\n\n\t\t\tif (this.o.rtl) {\n\t\t\t\tvar right = windowWidth - (left + width);\n\t\t\t\tthis.picker.css({\n\t\t\t\t\ttop: top,\n\t\t\t\t\tright: right,\n\t\t\t\t\tzIndex: zIndex\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.picker.css({\n\t\t\t\t\ttop: top,\n\t\t\t\t\tleft: left,\n\t\t\t\t\tzIndex: zIndex\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\t_allow_update: true,\n\t\tupdate: function(){\n\t\t\tif (!this._allow_update)\n\t\t\t\treturn this;\n\n\t\t\tvar oldDates = this.dates.copy(),\n\t\t\t\tdates = [],\n\t\t\t\tfromArgs = false;\n\t\t\tif (arguments.length){\n\t\t\t\t$.each(arguments, $.proxy(function(i, date){\n\t\t\t\t\tif (date instanceof Date)\n\t\t\t\t\t\tdate = this._local_to_utc(date);\n\t\t\t\t\tdates.push(date);\n\t\t\t\t}, this));\n\t\t\t\tfromArgs = true;\n\t\t\t} else {\n\t\t\t\tdates = this.isInput\n\t\t\t\t\t\t? this.element.val()\n\t\t\t\t\t\t: this.element.data('date') || this.inputField.val();\n\t\t\t\tif (dates && this.o.multidate)\n\t\t\t\t\tdates = dates.split(this.o.multidateSeparator);\n\t\t\t\telse\n\t\t\t\t\tdates = [dates];\n\t\t\t\tdelete this.element.data().date;\n\t\t\t}\n\n\t\t\tdates = $.map(dates, $.proxy(function(date){\n\t\t\t\treturn DPGlobal.parseDate(date, this.o.format, this.o.language, this.o.assumeNearbyYear);\n\t\t\t}, this));\n\t\t\tdates = $.grep(dates, $.proxy(function(date){\n\t\t\t\treturn (\n\t\t\t\t\t!this.dateWithinRange(date) ||\n\t\t\t\t\t!date\n\t\t\t\t);\n\t\t\t}, this), true);\n\t\t\tthis.dates.replace(dates);\n\n\t\t\tif (this.o.updateViewDate) {\n\t\t\t\tif (this.dates.length)\n\t\t\t\t\tthis.viewDate = new Date(this.dates.get(-1));\n\t\t\t\telse if (this.viewDate < this.o.startDate)\n\t\t\t\t\tthis.viewDate = new Date(this.o.startDate);\n\t\t\t\telse if (this.viewDate > this.o.endDate)\n\t\t\t\t\tthis.viewDate = new Date(this.o.endDate);\n\t\t\t\telse\n\t\t\t\t\tthis.viewDate = this.o.defaultViewDate;\n\t\t\t}\n\n\t\t\tif (fromArgs){\n\t\t\t\t// setting date by clicking\n\t\t\t\tthis.setValue();\n\t\t\t\tthis.element.change();\n\t\t\t}\n\t\t\telse if (this.dates.length){\n\t\t\t\t// setting date by typing\n\t\t\t\tif (String(oldDates) !== String(this.dates) && fromArgs) {\n\t\t\t\t\tthis._trigger('changeDate');\n\t\t\t\t\tthis.element.change();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!this.dates.length && oldDates.length) {\n\t\t\t\tthis._trigger('clearDate');\n\t\t\t\tthis.element.change();\n\t\t\t}\n\n\t\t\tthis.fill();\n\t\t\treturn this;\n\t\t},\n\n\t\tfillDow: function(){\n      if (this.o.showWeekDays) {\n\t\t\tvar dowCnt = this.o.weekStart,\n\t\t\t\thtml = '<tr>';\n\t\t\tif (this.o.calendarWeeks){\n\t\t\t\thtml += '<th class=\"cw\">&#160;</th>';\n\t\t\t}\n\t\t\twhile (dowCnt < this.o.weekStart + 7){\n\t\t\t\thtml += '<th class=\"dow';\n        if ($.inArray(dowCnt, this.o.daysOfWeekDisabled) !== -1)\n          html += ' disabled';\n        html += '\">'+dates[this.o.language].daysMin[(dowCnt++)%7]+'</th>';\n\t\t\t}\n\t\t\thtml += '</tr>';\n\t\t\tthis.picker.find('.datepicker-days thead').append(html);\n      }\n\t\t},\n\n\t\tfillMonths: function(){\n      var localDate = this._utc_to_local(this.viewDate);\n\t\t\tvar html = '';\n\t\t\tvar focused;\n\t\t\tfor (var i = 0; i < 12; i++){\n\t\t\t\tfocused = localDate && localDate.getMonth() === i ? ' focused' : '';\n\t\t\t\thtml += '<span class=\"month' + focused + '\">' + dates[this.o.language].monthsShort[i] + '</span>';\n\t\t\t}\n\t\t\tthis.picker.find('.datepicker-months td').html(html);\n\t\t},\n\n\t\tsetRange: function(range){\n\t\t\tif (!range || !range.length)\n\t\t\t\tdelete this.range;\n\t\t\telse\n\t\t\t\tthis.range = $.map(range, function(d){\n\t\t\t\t\treturn d.valueOf();\n\t\t\t\t});\n\t\t\tthis.fill();\n\t\t},\n\n\t\tgetClassNames: function(date){\n\t\t\tvar cls = [],\n\t\t\t\tyear = this.viewDate.getUTCFullYear(),\n\t\t\t\tmonth = this.viewDate.getUTCMonth(),\n\t\t\t\ttoday = UTCToday();\n\t\t\tif (date.getUTCFullYear() < year || (date.getUTCFullYear() === year && date.getUTCMonth() < month)){\n\t\t\t\tcls.push('old');\n\t\t\t} else if (date.getUTCFullYear() > year || (date.getUTCFullYear() === year && date.getUTCMonth() > month)){\n\t\t\t\tcls.push('new');\n\t\t\t}\n\t\t\tif (this.focusDate && date.valueOf() === this.focusDate.valueOf())\n\t\t\t\tcls.push('focused');\n\t\t\t// Compare internal UTC date with UTC today, not local today\n\t\t\tif (this.o.todayHighlight && isUTCEquals(date, today)) {\n\t\t\t\tcls.push('today');\n\t\t\t}\n\t\t\tif (this.dates.contains(date) !== -1)\n\t\t\t\tcls.push('active');\n\t\t\tif (!this.dateWithinRange(date)){\n\t\t\t\tcls.push('disabled');\n\t\t\t}\n\t\t\tif (this.dateIsDisabled(date)){\n\t\t\t\tcls.push('disabled', 'disabled-date');\n\t\t\t}\n\t\t\tif ($.inArray(date.getUTCDay(), this.o.daysOfWeekHighlighted) !== -1){\n\t\t\t\tcls.push('highlighted');\n\t\t\t}\n\n\t\t\tif (this.range){\n\t\t\t\tif (date > this.range[0] && date < this.range[this.range.length-1]){\n\t\t\t\t\tcls.push('range');\n\t\t\t\t}\n\t\t\t\tif ($.inArray(date.valueOf(), this.range) !== -1){\n\t\t\t\t\tcls.push('selected');\n\t\t\t\t}\n\t\t\t\tif (date.valueOf() === this.range[0]){\n          cls.push('range-start');\n        }\n        if (date.valueOf() === this.range[this.range.length-1]){\n          cls.push('range-end');\n        }\n\t\t\t}\n\t\t\treturn cls;\n\t\t},\n\n\t\t_fill_yearsView: function(selector, cssClass, factor, year, startYear, endYear, beforeFn){\n\t\t\tvar html = '';\n\t\t\tvar step = factor / 10;\n\t\t\tvar view = this.picker.find(selector);\n\t\t\tvar startVal = Math.floor(year / factor) * factor;\n\t\t\tvar endVal = startVal + step * 9;\n\t\t\tvar focusedVal = Math.floor(this.viewDate.getFullYear() / step) * step;\n\t\t\tvar selected = $.map(this.dates, function(d){\n\t\t\t\treturn Math.floor(d.getUTCFullYear() / step) * step;\n\t\t\t});\n\n\t\t\tvar classes, tooltip, before;\n\t\t\tfor (var currVal = startVal - step; currVal <= endVal + step; currVal += step) {\n\t\t\t\tclasses = [cssClass];\n\t\t\t\ttooltip = null;\n\n\t\t\t\tif (currVal === startVal - step) {\n\t\t\t\t\tclasses.push('old');\n\t\t\t\t} else if (currVal === endVal + step) {\n\t\t\t\t\tclasses.push('new');\n\t\t\t\t}\n\t\t\t\tif ($.inArray(currVal, selected) !== -1) {\n\t\t\t\t\tclasses.push('active');\n\t\t\t\t}\n\t\t\t\tif (currVal < startYear || currVal > endYear) {\n\t\t\t\t\tclasses.push('disabled');\n\t\t\t\t}\n\t\t\t\tif (currVal === focusedVal) {\n\t\t\t\t  classes.push('focused');\n        }\n\n\t\t\t\tif (beforeFn !== $.noop) {\n\t\t\t\t\tbefore = beforeFn(new Date(currVal, 0, 1));\n\t\t\t\t\tif (before === undefined) {\n\t\t\t\t\t\tbefore = {};\n\t\t\t\t\t} else if (typeof before === 'boolean') {\n\t\t\t\t\t\tbefore = {enabled: before};\n\t\t\t\t\t} else if (typeof before === 'string') {\n\t\t\t\t\t\tbefore = {classes: before};\n\t\t\t\t\t}\n\t\t\t\t\tif (before.enabled === false) {\n\t\t\t\t\t\tclasses.push('disabled');\n\t\t\t\t\t}\n\t\t\t\t\tif (before.classes) {\n\t\t\t\t\t\tclasses = classes.concat(before.classes.split(/\\s+/));\n\t\t\t\t\t}\n\t\t\t\t\tif (before.tooltip) {\n\t\t\t\t\t\ttooltip = before.tooltip;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\thtml += '<span class=\"' + classes.join(' ') + '\"' + (tooltip ? ' title=\"' + tooltip + '\"' : '') + '>' + currVal + '</span>';\n\t\t\t}\n\n\t\t\tview.find('.datepicker-switch').text(startVal + '-' + endVal);\n\t\t\tview.find('td').html(html);\n\t\t},\n\n\t\tfill: function(){\n\t\t\tvar d = new Date(this.viewDate),\n\t\t\t\tyear = d.getUTCFullYear(),\n\t\t\t\tmonth = d.getUTCMonth(),\n\t\t\t\tstartYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,\n\t\t\t\tstartMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,\n\t\t\t\tendYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,\n\t\t\t\tendMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,\n\t\t\t\ttodaytxt = dates[this.o.language].today || dates['en'].today || '',\n\t\t\t\tcleartxt = dates[this.o.language].clear || dates['en'].clear || '',\n        titleFormat = dates[this.o.language].titleFormat || dates['en'].titleFormat,\n        todayDate = UTCToday(),\n        titleBtnVisible = (this.o.todayBtn === true || this.o.todayBtn === 'linked') && todayDate >= this.o.startDate && todayDate <= this.o.endDate && !this.weekOfDateIsDisabled(todayDate),\n\t\t\t\ttooltip,\n\t\t\t\tbefore;\n\t\t\tif (isNaN(year) || isNaN(month))\n\t\t\t\treturn;\n\t\t\tthis.picker.find('.datepicker-days .datepicker-switch')\n\t\t\t\t\t\t.text(DPGlobal.formatDate(d, titleFormat, this.o.language));\n\t\t\tthis.picker.find('tfoot .today')\n\t\t\t\t\t\t.text(todaytxt)\n            .css('display', titleBtnVisible ? 'table-cell' : 'none');\n\t\t\tthis.picker.find('tfoot .clear')\n\t\t\t\t\t\t.text(cleartxt)\n\t\t\t\t\t\t.css('display', this.o.clearBtn === true ? 'table-cell' : 'none');\n\t\t\tthis.picker.find('thead .datepicker-title')\n\t\t\t\t\t\t.text(this.o.title)\n\t\t\t\t\t\t.css('display', typeof this.o.title === 'string' && this.o.title !== '' ? 'table-cell' : 'none');\n\t\t\tthis.updateNavArrows();\n\t\t\tthis.fillMonths();\n\t\t\tvar prevMonth = UTCDate(year, month, 0),\n\t\t\t\tday = prevMonth.getUTCDate();\n\t\t\tprevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7)%7);\n\t\t\tvar nextMonth = new Date(prevMonth);\n\t\t\tif (prevMonth.getUTCFullYear() < 100){\n        nextMonth.setUTCFullYear(prevMonth.getUTCFullYear());\n      }\n\t\t\tnextMonth.setUTCDate(nextMonth.getUTCDate() + 42);\n\t\t\tnextMonth = nextMonth.valueOf();\n\t\t\tvar html = [];\n\t\t\tvar weekDay, clsName;\n\t\t\twhile (prevMonth.valueOf() < nextMonth){\n\t\t\t\tweekDay = prevMonth.getUTCDay();\n\t\t\t\tif (weekDay === this.o.weekStart){\n\t\t\t\t\thtml.push('<tr>');\n\t\t\t\t\tif (this.o.calendarWeeks){\n\t\t\t\t\t\t// ISO 8601: First week contains first thursday.\n\t\t\t\t\t\t// ISO also states week starts on Monday, but we can be more abstract here.\n\t\t\t\t\t\tvar\n\t\t\t\t\t\t\t// Start of current week: based on weekstart/current date\n\t\t\t\t\t\t\tws = new Date(+prevMonth + (this.o.weekStart - weekDay - 7) % 7 * 864e5),\n\t\t\t\t\t\t\t// Thursday of this week\n\t\t\t\t\t\t\tth = new Date(Number(ws) + (7 + 4 - ws.getUTCDay()) % 7 * 864e5),\n\t\t\t\t\t\t\t// First Thursday of year, year from thursday\n\t\t\t\t\t\t\tyth = new Date(Number(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay()) % 7 * 864e5),\n\t\t\t\t\t\t\t// Calendar week: ms between thursdays, div ms per day, div 7 days\n\t\t\t\t\t\t\tcalWeek = (th - yth) / 864e5 / 7 + 1;\n\t\t\t\t\t\thtml.push('<td class=\"cw\">'+ calWeek +'</td>');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tclsName = this.getClassNames(prevMonth);\n\t\t\t\tclsName.push('day');\n\n\t\t\t\tvar content = prevMonth.getUTCDate();\n\n\t\t\t\tif (this.o.beforeShowDay !== $.noop){\n\t\t\t\t\tbefore = this.o.beforeShowDay(this._utc_to_local(prevMonth));\n\t\t\t\t\tif (before === undefined)\n\t\t\t\t\t\tbefore = {};\n\t\t\t\t\telse if (typeof before === 'boolean')\n\t\t\t\t\t\tbefore = {enabled: before};\n\t\t\t\t\telse if (typeof before === 'string')\n\t\t\t\t\t\tbefore = {classes: before};\n\t\t\t\t\tif (before.enabled === false)\n\t\t\t\t\t\tclsName.push('disabled');\n\t\t\t\t\tif (before.classes)\n\t\t\t\t\t\tclsName = clsName.concat(before.classes.split(/\\s+/));\n\t\t\t\t\tif (before.tooltip)\n\t\t\t\t\t\ttooltip = before.tooltip;\n\t\t\t\t\tif (before.content)\n\t\t\t\t\t\tcontent = before.content;\n\t\t\t\t}\n\n\t\t\t\t//Check if uniqueSort exists (supported by jquery >=1.12 and >=2.2)\n\t\t\t\t//Fallback to unique function for older jquery versions\n\t\t\t\tif (typeof $.uniqueSort === \"function\") {\n\t\t\t\t\tclsName = $.uniqueSort(clsName);\n\t\t\t\t} else {\n\t\t\t\t\tclsName = $.unique(clsName);\n\t\t\t\t}\n\n\t\t\t\thtml.push('<td class=\"'+clsName.join(' ')+'\"' + (tooltip ? ' title=\"'+tooltip+'\"' : '') + ' data-date=\"' + prevMonth.getTime().toString() + '\">' + content + '</td>');\n\t\t\t\ttooltip = null;\n\t\t\t\tif (weekDay === this.o.weekEnd){\n\t\t\t\t\thtml.push('</tr>');\n\t\t\t\t}\n\t\t\t\tprevMonth.setUTCDate(prevMonth.getUTCDate() + 1);\n\t\t\t}\n\t\t\tthis.picker.find('.datepicker-days tbody').html(html.join(''));\n\n\t\t\tvar monthsTitle = dates[this.o.language].monthsTitle || dates['en'].monthsTitle || 'Months';\n\t\t\tvar months = this.picker.find('.datepicker-months')\n\t\t\t\t\t\t.find('.datepicker-switch')\n\t\t\t\t\t\t\t.text(this.o.maxViewMode < 2 ? monthsTitle : year)\n\t\t\t\t\t\t\t.end()\n\t\t\t\t\t\t.find('tbody span').removeClass('active');\n\n\t\t\t$.each(this.dates, function(i, d){\n\t\t\t\tif (d.getUTCFullYear() === year)\n\t\t\t\t\tmonths.eq(d.getUTCMonth()).addClass('active');\n\t\t\t});\n\n\t\t\tif (year < startYear || year > endYear){\n\t\t\t\tmonths.addClass('disabled');\n\t\t\t}\n\t\t\tif (year === startYear){\n\t\t\t\tmonths.slice(0, startMonth).addClass('disabled');\n\t\t\t}\n\t\t\tif (year === endYear){\n\t\t\t\tmonths.slice(endMonth+1).addClass('disabled');\n\t\t\t}\n\n\t\t\tif (this.o.beforeShowMonth !== $.noop){\n\t\t\t\tvar that = this;\n\t\t\t\t$.each(months, function(i, month){\n          var moDate = new Date(year, i, 1);\n          var before = that.o.beforeShowMonth(moDate);\n\t\t\t\t\tif (before === undefined)\n\t\t\t\t\t\tbefore = {};\n\t\t\t\t\telse if (typeof before === 'boolean')\n\t\t\t\t\t\tbefore = {enabled: before};\n\t\t\t\t\telse if (typeof before === 'string')\n\t\t\t\t\t\tbefore = {classes: before};\n\t\t\t\t\tif (before.enabled === false && !$(month).hasClass('disabled'))\n\t\t\t\t\t    $(month).addClass('disabled');\n\t\t\t\t\tif (before.classes)\n\t\t\t\t\t    $(month).addClass(before.classes);\n\t\t\t\t\tif (before.tooltip)\n\t\t\t\t\t    $(month).prop('title', before.tooltip);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Generating decade/years picker\n\t\t\tthis._fill_yearsView(\n\t\t\t\t'.datepicker-years',\n\t\t\t\t'year',\n\t\t\t\t10,\n\t\t\t\tyear,\n\t\t\t\tstartYear,\n\t\t\t\tendYear,\n\t\t\t\tthis.o.beforeShowYear\n\t\t\t);\n\n\t\t\t// Generating century/decades picker\n\t\t\tthis._fill_yearsView(\n\t\t\t\t'.datepicker-decades',\n\t\t\t\t'decade',\n\t\t\t\t100,\n\t\t\t\tyear,\n\t\t\t\tstartYear,\n\t\t\t\tendYear,\n\t\t\t\tthis.o.beforeShowDecade\n\t\t\t);\n\n\t\t\t// Generating millennium/centuries picker\n\t\t\tthis._fill_yearsView(\n\t\t\t\t'.datepicker-centuries',\n\t\t\t\t'century',\n\t\t\t\t1000,\n\t\t\t\tyear,\n\t\t\t\tstartYear,\n\t\t\t\tendYear,\n\t\t\t\tthis.o.beforeShowCentury\n\t\t\t);\n\t\t},\n\n\t\tupdateNavArrows: function(){\n\t\t\tif (!this._allow_update)\n\t\t\t\treturn;\n\n\t\t\tvar d = new Date(this.viewDate),\n\t\t\t\tyear = d.getUTCFullYear(),\n\t\t\t\tmonth = d.getUTCMonth(),\n\t\t\t\tstartYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,\n\t\t\t\tstartMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,\n\t\t\t\tendYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,\n\t\t\t\tendMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,\n\t\t\t\tprevIsDisabled,\n\t\t\t\tnextIsDisabled,\n\t\t\t\tfactor = 1;\n\t\t\tswitch (this.viewMode){\n\t\t\t\tcase 4:\n\t\t\t\t\tfactor *= 10;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 3:\n\t\t\t\t\tfactor *= 10;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 2:\n\t\t\t\t\tfactor *= 10;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 1:\n\t\t\t\t\tprevIsDisabled = Math.floor(year / factor) * factor <= startYear;\n\t\t\t\t\tnextIsDisabled = Math.floor(year / factor) * factor + factor > endYear;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0:\n\t\t\t\t\tprevIsDisabled = year <= startYear && month <= startMonth;\n\t\t\t\t\tnextIsDisabled = year >= endYear && month >= endMonth;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.picker.find('.prev').toggleClass('disabled', prevIsDisabled);\n\t\t\tthis.picker.find('.next').toggleClass('disabled', nextIsDisabled);\n\t\t},\n\n\t\tclick: function(e){\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\tvar target, dir, day, year, month;\n\t\t\ttarget = $(e.target);\n\n\t\t\t// Clicked on the switch\n\t\t\tif (target.hasClass('datepicker-switch') && this.viewMode !== this.o.maxViewMode){\n\t\t\t\tthis.setViewMode(this.viewMode + 1);\n\t\t\t}\n\n\t\t\t// Clicked on today button\n\t\t\tif (target.hasClass('today') && !target.hasClass('day')){\n\t\t\t\tthis.setViewMode(0);\n\t\t\t\tthis._setDate(UTCToday(), this.o.todayBtn === 'linked' ? null : 'view');\n\t\t\t}\n\n\t\t\t// Clicked on clear button\n\t\t\tif (target.hasClass('clear')){\n\t\t\t\tthis.clearDates();\n\t\t\t}\n\n\t\t\tif (!target.hasClass('disabled')){\n\t\t\t\t// Clicked on a month, year, decade, century\n\t\t\t\tif (target.hasClass('month')\n\t\t\t\t\t\t|| target.hasClass('year')\n\t\t\t\t\t\t|| target.hasClass('decade')\n\t\t\t\t\t\t|| target.hasClass('century')) {\n\t\t\t\t\tthis.viewDate.setUTCDate(1);\n\n\t\t\t\t\tday = 1;\n\t\t\t\t\tif (this.viewMode === 1){\n\t\t\t\t\t\tmonth = target.parent().find('span').index(target);\n\t\t\t\t\t\tyear = this.viewDate.getUTCFullYear();\n\t\t\t\t\t\tthis.viewDate.setUTCMonth(month);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmonth = 0;\n\t\t\t\t\t\tyear = Number(target.text());\n\t\t\t\t\t\tthis.viewDate.setUTCFullYear(year);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._trigger(DPGlobal.viewModes[this.viewMode - 1].e, this.viewDate);\n\n\t\t\t\t\tif (this.viewMode === this.o.minViewMode){\n\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.setViewMode(this.viewMode - 1);\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.picker.is(':visible') && this._focused_from){\n\t\t\t\tthis._focused_from.focus();\n\t\t\t}\n\t\t\tdelete this._focused_from;\n\t\t},\n\n\t\tdayCellClick: function(e){\n\t\t\tvar $target = $(e.currentTarget);\n\t\t\tvar timestamp = $target.data('date');\n\t\t\tvar date = new Date(timestamp);\n\n\t\t\tif (this.o.updateViewDate) {\n\t\t\t\tif (date.getUTCFullYear() !== this.viewDate.getUTCFullYear()) {\n\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\n\t\t\t\t}\n\n\t\t\t\tif (date.getUTCMonth() !== this.viewDate.getUTCMonth()) {\n\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._setDate(date);\n\t\t},\n\n\t\t// Clicked on prev or next\n\t\tnavArrowsClick: function(e){\n\t\t\tvar $target = $(e.currentTarget);\n\t\t\tvar dir = $target.hasClass('prev') ? -1 : 1;\n\t\t\tif (this.viewMode !== 0){\n\t\t\t\tdir *= DPGlobal.viewModes[this.viewMode].navStep * 12;\n\t\t\t}\n\t\t\tthis.viewDate = this.moveMonth(this.viewDate, dir);\n\t\t\tthis._trigger(DPGlobal.viewModes[this.viewMode].e, this.viewDate);\n\t\t\tthis.fill();\n\t\t},\n\n\t\t_toggle_multidate: function(date){\n\t\t\tvar ix = this.dates.contains(date);\n\t\t\tif (!date){\n\t\t\t\tthis.dates.clear();\n\t\t\t}\n\n\t\t\tif (ix !== -1){\n\t\t\t\tif (this.o.multidate === true || this.o.multidate > 1 || this.o.toggleActive){\n\t\t\t\t\tthis.dates.remove(ix);\n\t\t\t\t}\n\t\t\t} else if (this.o.multidate === false) {\n\t\t\t\tthis.dates.clear();\n\t\t\t\tthis.dates.push(date);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.dates.push(date);\n\t\t\t}\n\n\t\t\tif (typeof this.o.multidate === 'number')\n\t\t\t\twhile (this.dates.length > this.o.multidate)\n\t\t\t\t\tthis.dates.remove(0);\n\t\t},\n\n\t\t_setDate: function(date, which){\n\t\t\tif (!which || which === 'date')\n\t\t\t\tthis._toggle_multidate(date && new Date(date));\n\t\t\tif ((!which && this.o.updateViewDate) || which === 'view')\n\t\t\t\tthis.viewDate = date && new Date(date);\n\n\t\t\tthis.fill();\n\t\t\tthis.setValue();\n\t\t\tif (!which || which !== 'view') {\n\t\t\t\tthis._trigger('changeDate');\n\t\t\t}\n\t\t\tthis.inputField.trigger('change');\n\t\t\tif (this.o.autoclose && (!which || which === 'date')){\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t},\n\n\t\tmoveDay: function(date, dir){\n\t\t\tvar newDate = new Date(date);\n\t\t\tnewDate.setUTCDate(date.getUTCDate() + dir);\n\n\t\t\treturn newDate;\n\t\t},\n\n\t\tmoveWeek: function(date, dir){\n\t\t\treturn this.moveDay(date, dir * 7);\n\t\t},\n\n\t\tmoveMonth: function(date, dir){\n\t\t\tif (!isValidDate(date))\n\t\t\t\treturn this.o.defaultViewDate;\n\t\t\tif (!dir)\n\t\t\t\treturn date;\n\t\t\tvar new_date = new Date(date.valueOf()),\n\t\t\t\tday = new_date.getUTCDate(),\n\t\t\t\tmonth = new_date.getUTCMonth(),\n\t\t\t\tmag = Math.abs(dir),\n\t\t\t\tnew_month, test;\n\t\t\tdir = dir > 0 ? 1 : -1;\n\t\t\tif (mag === 1){\n\t\t\t\ttest = dir === -1\n\t\t\t\t\t// If going back one month, make sure month is not current month\n\t\t\t\t\t// (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)\n\t\t\t\t\t? function(){\n\t\t\t\t\t\treturn new_date.getUTCMonth() === month;\n\t\t\t\t\t}\n\t\t\t\t\t// If going forward one month, make sure month is as expected\n\t\t\t\t\t// (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)\n\t\t\t\t\t: function(){\n\t\t\t\t\t\treturn new_date.getUTCMonth() !== new_month;\n\t\t\t\t\t};\n\t\t\t\tnew_month = month + dir;\n\t\t\t\tnew_date.setUTCMonth(new_month);\n\t\t\t\t// Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11\n\t\t\t\tnew_month = (new_month + 12) % 12;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// For magnitudes >1, move one month at a time...\n\t\t\t\tfor (var i=0; i < mag; i++)\n\t\t\t\t\t// ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...\n\t\t\t\t\tnew_date = this.moveMonth(new_date, dir);\n\t\t\t\t// ...then reset the day, keeping it in the new month\n\t\t\t\tnew_month = new_date.getUTCMonth();\n\t\t\t\tnew_date.setUTCDate(day);\n\t\t\t\ttest = function(){\n\t\t\t\t\treturn new_month !== new_date.getUTCMonth();\n\t\t\t\t};\n\t\t\t}\n\t\t\t// Common date-resetting loop -- if date is beyond end of month, make it\n\t\t\t// end of month\n\t\t\twhile (test()){\n\t\t\t\tnew_date.setUTCDate(--day);\n\t\t\t\tnew_date.setUTCMonth(new_month);\n\t\t\t}\n\t\t\treturn new_date;\n\t\t},\n\n\t\tmoveYear: function(date, dir){\n\t\t\treturn this.moveMonth(date, dir*12);\n\t\t},\n\n\t\tmoveAvailableDate: function(date, dir, fn){\n\t\t\tdo {\n\t\t\t\tdate = this[fn](date, dir);\n\n\t\t\t\tif (!this.dateWithinRange(date))\n\t\t\t\t\treturn false;\n\n\t\t\t\tfn = 'moveDay';\n\t\t\t}\n\t\t\twhile (this.dateIsDisabled(date));\n\n\t\t\treturn date;\n\t\t},\n\n\t\tweekOfDateIsDisabled: function(date){\n\t\t\treturn $.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1;\n\t\t},\n\n\t\tdateIsDisabled: function(date){\n\t\t\treturn (\n\t\t\t\tthis.weekOfDateIsDisabled(date) ||\n\t\t\t\t$.grep(this.o.datesDisabled, function(d){\n\t\t\t\t\treturn isUTCEquals(date, d);\n\t\t\t\t}).length > 0\n\t\t\t);\n\t\t},\n\n\t\tdateWithinRange: function(date){\n\t\t\treturn date >= this.o.startDate && date <= this.o.endDate;\n\t\t},\n\n\t\tkeydown: function(e){\n\t\t\tif (!this.picker.is(':visible')){\n\t\t\t\tif (e.keyCode === 40 || e.keyCode === 27) { // allow down to re-show picker\n\t\t\t\t\tthis.show();\n\t\t\t\t\te.stopPropagation();\n        }\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar dateChanged = false,\n\t\t\t\tdir, newViewDate,\n\t\t\t\tfocusDate = this.focusDate || this.viewDate;\n\t\t\tswitch (e.keyCode){\n\t\t\t\tcase 27: // escape\n\t\t\t\t\tif (this.focusDate){\n\t\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.hide();\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 37: // left\n\t\t\t\tcase 38: // up\n\t\t\t\tcase 39: // right\n\t\t\t\tcase 40: // down\n\t\t\t\t\tif (!this.o.keyboardNavigation || this.o.daysOfWeekDisabled.length === 7)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdir = e.keyCode === 37 || e.keyCode === 38 ? -1 : 1;\n          if (this.viewMode === 0) {\n  \t\t\t\t\tif (e.ctrlKey){\n  \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');\n\n  \t\t\t\t\t\tif (newViewDate)\n  \t\t\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\n  \t\t\t\t\t} else if (e.shiftKey){\n  \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');\n\n  \t\t\t\t\t\tif (newViewDate)\n  \t\t\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\n  \t\t\t\t\t} else if (e.keyCode === 37 || e.keyCode === 39){\n  \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveDay');\n  \t\t\t\t\t} else if (!this.weekOfDateIsDisabled(focusDate)){\n  \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveWeek');\n  \t\t\t\t\t}\n          } else if (this.viewMode === 1) {\n            if (e.keyCode === 38 || e.keyCode === 40) {\n              dir = dir * 4;\n            }\n            newViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');\n          } else if (this.viewMode === 2) {\n            if (e.keyCode === 38 || e.keyCode === 40) {\n              dir = dir * 4;\n            }\n            newViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');\n          }\n\t\t\t\t\tif (newViewDate){\n\t\t\t\t\t\tthis.focusDate = this.viewDate = newViewDate;\n\t\t\t\t\t\tthis.setValue();\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 13: // enter\n\t\t\t\t\tif (!this.o.forceParse)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tfocusDate = this.focusDate || this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tif (this.o.keyboardNavigation) {\n\t\t\t\t\t\tthis._toggle_multidate(focusDate);\n\t\t\t\t\t\tdateChanged = true;\n\t\t\t\t\t}\n\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tthis.setValue();\n\t\t\t\t\tthis.fill();\n\t\t\t\t\tif (this.picker.is(':visible')){\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tif (this.o.autoclose)\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 9: // tab\n\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tthis.fill();\n\t\t\t\t\tthis.hide();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (dateChanged){\n\t\t\t\tif (this.dates.length)\n\t\t\t\t\tthis._trigger('changeDate');\n\t\t\t\telse\n\t\t\t\t\tthis._trigger('clearDate');\n\t\t\t\tthis.inputField.trigger('change');\n\t\t\t}\n\t\t},\n\n\t\tsetViewMode: function(viewMode){\n\t\t\tthis.viewMode = viewMode;\n\t\t\tthis.picker\n\t\t\t\t.children('div')\n\t\t\t\t.hide()\n\t\t\t\t.filter('.datepicker-' + DPGlobal.viewModes[this.viewMode].clsName)\n\t\t\t\t\t.show();\n\t\t\tthis.updateNavArrows();\n      this._trigger('changeViewMode', new Date(this.viewDate));\n\t\t}\n\t};\n\n\tvar DateRangePicker = function(element, options){\n\t\t$.data(element, 'datepicker', this);\n\t\tthis.element = $(element);\n\t\tthis.inputs = $.map(options.inputs, function(i){\n\t\t\treturn i.jquery ? i[0] : i;\n\t\t});\n\t\tdelete options.inputs;\n\n\t\tthis.keepEmptyValues = options.keepEmptyValues;\n\t\tdelete options.keepEmptyValues;\n\n\t\tdatepickerPlugin.call($(this.inputs), options)\n\t\t\t.on('changeDate', $.proxy(this.dateUpdated, this));\n\n\t\tthis.pickers = $.map(this.inputs, function(i){\n\t\t\treturn $.data(i, 'datepicker');\n\t\t});\n\t\tthis.updateDates();\n\t};\n\tDateRangePicker.prototype = {\n\t\tupdateDates: function(){\n\t\t\tthis.dates = $.map(this.pickers, function(i){\n\t\t\t\treturn i.getUTCDate();\n\t\t\t});\n\t\t\tthis.updateRanges();\n\t\t},\n\t\tupdateRanges: function(){\n\t\t\tvar range = $.map(this.dates, function(d){\n\t\t\t\treturn d.valueOf();\n\t\t\t});\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tp.setRange(range);\n\t\t\t});\n\t\t},\n\t\tclearDates: function(){\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tp.clearDates();\n\t\t\t});\n\t\t},\n\t\tdateUpdated: function(e){\n\t\t\t// `this.updating` is a workaround for preventing infinite recursion\n\t\t\t// between `changeDate` triggering and `setUTCDate` calling.  Until\n\t\t\t// there is a better mechanism.\n\t\t\tif (this.updating)\n\t\t\t\treturn;\n\t\t\tthis.updating = true;\n\n\t\t\tvar dp = $.data(e.target, 'datepicker');\n\n\t\t\tif (dp === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar new_date = dp.getUTCDate(),\n\t\t\t\tkeep_empty_values = this.keepEmptyValues,\n\t\t\t\ti = $.inArray(e.target, this.inputs),\n\t\t\t\tj = i - 1,\n\t\t\t\tk = i + 1,\n\t\t\t\tl = this.inputs.length;\n\t\t\tif (i === -1)\n\t\t\t\treturn;\n\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tif (!p.getUTCDate() && (p === dp || !keep_empty_values))\n\t\t\t\t\tp.setUTCDate(new_date);\n\t\t\t});\n\n\t\t\tif (new_date < this.dates[j]){\n\t\t\t\t// Date being moved earlier/left\n\t\t\t\twhile (j >= 0 && new_date < this.dates[j] && (this.pickers[j].element.val() || \"\").length > 0) {\n\t\t\t\t\tthis.pickers[j--].setUTCDate(new_date);\n\t\t\t\t}\n\t\t\t} else if (new_date > this.dates[k]){\n\t\t\t\t// Date being moved later/right\n\t\t\t\twhile (k < l && new_date > this.dates[k] && (this.pickers[k].element.val() || \"\").length > 0) {\n\t\t\t\t\tthis.pickers[k++].setUTCDate(new_date);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.updateDates();\n\n\t\t\tdelete this.updating;\n\t\t},\n\t\tdestroy: function(){\n\t\t\t$.map(this.pickers, function(p){ p.destroy(); });\n\t\t\t$(this.inputs).off('changeDate', this.dateUpdated);\n\t\t\tdelete this.element.data().datepicker;\n\t\t},\n\t\tremove: alias('destroy', 'Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead')\n\t};\n\n\tfunction opts_from_el(el, prefix){\n\t\t// Derive options from element data-attrs\n\t\tvar data = $(el).data(),\n\t\t\tout = {}, inkey,\n\t\t\treplace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])');\n\t\tprefix = new RegExp('^' + prefix.toLowerCase());\n\t\tfunction re_lower(_,a){\n\t\t\treturn a.toLowerCase();\n\t\t}\n\t\tfor (var key in data)\n\t\t\tif (prefix.test(key)){\n\t\t\t\tinkey = key.replace(replace, re_lower);\n\t\t\t\tout[inkey] = data[key];\n\t\t\t}\n\t\treturn out;\n\t}\n\n\tfunction opts_from_locale(lang){\n\t\t// Derive options from locale plugins\n\t\tvar out = {};\n\t\t// Check if \"de-DE\" style date is available, if not language should\n\t\t// fallback to 2 letter code eg \"de\"\n\t\tif (!dates[lang]){\n\t\t\tlang = lang.split('-')[0];\n\t\t\tif (!dates[lang])\n\t\t\t\treturn;\n\t\t}\n\t\tvar d = dates[lang];\n\t\t$.each(locale_opts, function(i,k){\n\t\t\tif (k in d)\n\t\t\t\tout[k] = d[k];\n\t\t});\n\t\treturn out;\n\t}\n\n\tvar old = $.fn.datepicker;\n\tvar datepickerPlugin = function(option){\n\t\tvar args = Array.apply(null, arguments);\n\t\targs.shift();\n\t\tvar internal_return;\n\t\tthis.each(function(){\n\t\t\tvar $this = $(this),\n\t\t\t\tdata = $this.data('datepicker'),\n\t\t\t\toptions = typeof option === 'object' && option;\n\t\t\tif (!data){\n\t\t\t\tvar elopts = opts_from_el(this, 'date'),\n\t\t\t\t\t// Preliminary otions\n\t\t\t\t\txopts = $.extend({}, defaults, elopts, options),\n\t\t\t\t\tlocopts = opts_from_locale(xopts.language),\n\t\t\t\t\t// Options priority: js args, data-attrs, locales, defaults\n\t\t\t\t\topts = $.extend({}, defaults, locopts, elopts, options);\n\t\t\t\tif ($this.hasClass('input-daterange') || opts.inputs){\n\t\t\t\t\t$.extend(opts, {\n\t\t\t\t\t\tinputs: opts.inputs || $this.find('input').toArray()\n\t\t\t\t\t});\n\t\t\t\t\tdata = new DateRangePicker(this, opts);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdata = new Datepicker(this, opts);\n\t\t\t\t}\n\t\t\t\t$this.data('datepicker', data);\n\t\t\t}\n\t\t\tif (typeof option === 'string' && typeof data[option] === 'function'){\n\t\t\t\tinternal_return = data[option].apply(data, args);\n\t\t\t}\n\t\t});\n\n\t\tif (\n\t\t\tinternal_return === undefined ||\n\t\t\tinternal_return instanceof Datepicker ||\n\t\t\tinternal_return instanceof DateRangePicker\n\t\t)\n\t\t\treturn this;\n\n\t\tif (this.length > 1)\n\t\t\tthrow new Error('Using only allowed for the collection of a single element (' + option + ' function)');\n\t\telse\n\t\t\treturn internal_return;\n\t};\n\t$.fn.datepicker = datepickerPlugin;\n\n\tvar defaults = $.fn.datepicker.defaults = {\n\t\tassumeNearbyYear: false,\n\t\tautoclose: false,\n\t\tbeforeShowDay: $.noop,\n\t\tbeforeShowMonth: $.noop,\n\t\tbeforeShowYear: $.noop,\n\t\tbeforeShowDecade: $.noop,\n\t\tbeforeShowCentury: $.noop,\n\t\tcalendarWeeks: false,\n\t\tclearBtn: false,\n\t\ttoggleActive: false,\n\t\tdaysOfWeekDisabled: [],\n\t\tdaysOfWeekHighlighted: [],\n\t\tdatesDisabled: [],\n\t\tendDate: Infinity,\n\t\tforceParse: true,\n\t\tformat: 'mm/dd/yyyy',\n\t\tisInline: null,\n\t\tkeepEmptyValues: false,\n\t\tkeyboardNavigation: true,\n\t\tlanguage: 'en',\n\t\tminViewMode: 0,\n\t\tmaxViewMode: 4,\n\t\tmultidate: false,\n\t\tmultidateSeparator: ',',\n\t\torientation: \"auto\",\n\t\trtl: false,\n\t\tstartDate: -Infinity,\n\t\tstartView: 0,\n\t\ttodayBtn: false,\n\t\ttodayHighlight: false,\n\t\tupdateViewDate: true,\n\t\tweekStart: 0,\n\t\tdisableTouchKeyboard: false,\n\t\tenableOnReadonly: true,\n\t\tshowOnFocus: true,\n\t\tzIndexOffset: 10,\n\t\tcontainer: 'body',\n\t\timmediateUpdates: false,\n\t\ttitle: '',\n\t\ttemplates: {\n\t\t\tleftArrow: '&#x00AB;',\n\t\t\trightArrow: '&#x00BB;'\n\t\t},\n    showWeekDays: true\n\t};\n\tvar locale_opts = $.fn.datepicker.locale_opts = [\n\t\t'format',\n\t\t'rtl',\n\t\t'weekStart'\n\t];\n\t$.fn.datepicker.Constructor = Datepicker;\n\tvar dates = $.fn.datepicker.dates = {\n\t\ten: {\n\t\t\tdays: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n\t\t\tdaysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n\t\t\tdaysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n\t\t\tmonths: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n\t\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n\t\t\ttoday: \"Today\",\n\t\t\tclear: \"Clear\",\n\t\t\ttitleFormat: \"MM yyyy\"\n\t\t}\n\t};\n\n\tvar DPGlobal = {\n\t\tviewModes: [\n\t\t\t{\n\t\t\t\tnames: ['days', 'month'],\n\t\t\t\tclsName: 'days',\n\t\t\t\te: 'changeMonth'\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['months', 'year'],\n\t\t\t\tclsName: 'months',\n\t\t\t\te: 'changeYear',\n\t\t\t\tnavStep: 1\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['years', 'decade'],\n\t\t\t\tclsName: 'years',\n\t\t\t\te: 'changeDecade',\n\t\t\t\tnavStep: 10\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['decades', 'century'],\n\t\t\t\tclsName: 'decades',\n\t\t\t\te: 'changeCentury',\n\t\t\t\tnavStep: 100\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['centuries', 'millennium'],\n\t\t\t\tclsName: 'centuries',\n\t\t\t\te: 'changeMillennium',\n\t\t\t\tnavStep: 1000\n\t\t\t}\n\t\t],\n\t\tvalidParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,\n\t\tnonpunctuation: /[^ -\\/:-@\\u5e74\\u6708\\u65e5\\[-`{-~\\t\\n\\r]+/g,\n\t\tparseFormat: function(format){\n\t\t\tif (typeof format.toValue === 'function' && typeof format.toDisplay === 'function')\n                return format;\n            // IE treats \\0 as a string end in inputs (truncating the value),\n\t\t\t// so it's a bad format delimiter, anyway\n\t\t\tvar separators = format.replace(this.validParts, '\\0').split('\\0'),\n\t\t\t\tparts = format.match(this.validParts);\n\t\t\tif (!separators || !separators.length || !parts || parts.length === 0){\n\t\t\t\tthrow new Error(\"Invalid date format.\");\n\t\t\t}\n\t\t\treturn {separators: separators, parts: parts};\n\t\t},\n\t\tparseDate: function(date, format, language, assumeNearby){\n\t\t\tif (!date)\n\t\t\t\treturn undefined;\n\t\t\tif (date instanceof Date)\n\t\t\t\treturn date;\n\t\t\tif (typeof format === 'string')\n\t\t\t\tformat = DPGlobal.parseFormat(format);\n\t\t\tif (format.toValue)\n\t\t\t\treturn format.toValue(date, format, language);\n\t\t\tvar fn_map = {\n\t\t\t\t\td: 'moveDay',\n\t\t\t\t\tm: 'moveMonth',\n\t\t\t\t\tw: 'moveWeek',\n\t\t\t\t\ty: 'moveYear'\n\t\t\t\t},\n\t\t\t\tdateAliases = {\n\t\t\t\t\tyesterday: '-1d',\n\t\t\t\t\ttoday: '+0d',\n\t\t\t\t\ttomorrow: '+1d'\n\t\t\t\t},\n\t\t\t\tparts, part, dir, i, fn;\n\t\t\tif (date in dateAliases){\n\t\t\t\tdate = dateAliases[date];\n\t\t\t}\n\t\t\tif (/^[\\-+]\\d+[dmwy]([\\s,]+[\\-+]\\d+[dmwy])*$/i.test(date)){\n\t\t\t\tparts = date.match(/([\\-+]\\d+)([dmwy])/gi);\n\t\t\t\tdate = new Date();\n\t\t\t\tfor (i=0; i < parts.length; i++){\n\t\t\t\t\tpart = parts[i].match(/([\\-+]\\d+)([dmwy])/i);\n\t\t\t\t\tdir = Number(part[1]);\n\t\t\t\t\tfn = fn_map[part[2].toLowerCase()];\n\t\t\t\t\tdate = Datepicker.prototype[fn](date, dir);\n\t\t\t\t}\n\t\t\t\treturn Datepicker.prototype._zero_utc_time(date);\n\t\t\t}\n\n\t\t\tparts = date && date.match(this.nonpunctuation) || [];\n\n\t\t\tfunction applyNearbyYear(year, threshold){\n\t\t\t\tif (threshold === true)\n\t\t\t\t\tthreshold = 10;\n\n\t\t\t\t// if year is 2 digits or less, than the user most likely is trying to get a recent century\n\t\t\t\tif (year < 100){\n\t\t\t\t\tyear += 2000;\n\t\t\t\t\t// if the new year is more than threshold years in advance, use last century\n\t\t\t\t\tif (year > ((new Date()).getFullYear()+threshold)){\n\t\t\t\t\t\tyear -= 100;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn year;\n\t\t\t}\n\n\t\t\tvar parsed = {},\n\t\t\t\tsetters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'],\n\t\t\t\tsetters_map = {\n\t\t\t\t\tyyyy: function(d,v){\n\t\t\t\t\t\treturn d.setUTCFullYear(assumeNearby ? applyNearbyYear(v, assumeNearby) : v);\n\t\t\t\t\t},\n\t\t\t\t\tm: function(d,v){\n\t\t\t\t\t\tif (isNaN(d))\n\t\t\t\t\t\t\treturn d;\n\t\t\t\t\t\tv -= 1;\n\t\t\t\t\t\twhile (v < 0) v += 12;\n\t\t\t\t\t\tv %= 12;\n\t\t\t\t\t\td.setUTCMonth(v);\n\t\t\t\t\t\twhile (d.getUTCMonth() !== v)\n\t\t\t\t\t\t\td.setUTCDate(d.getUTCDate()-1);\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t},\n\t\t\t\t\td: function(d,v){\n\t\t\t\t\t\treturn d.setUTCDate(v);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tval, filtered;\n\t\t\tsetters_map['yy'] = setters_map['yyyy'];\n\t\t\tsetters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];\n\t\t\tsetters_map['dd'] = setters_map['d'];\n\t\t\tdate = UTCToday();\n\t\t\tvar fparts = format.parts.slice();\n\t\t\t// Remove noop parts\n\t\t\tif (parts.length !== fparts.length){\n\t\t\t\tfparts = $(fparts).filter(function(i,p){\n\t\t\t\t\treturn $.inArray(p, setters_order) !== -1;\n\t\t\t\t}).toArray();\n\t\t\t}\n\t\t\t// Process remainder\n\t\t\tfunction match_part(){\n\t\t\t\tvar m = this.slice(0, parts[i].length),\n\t\t\t\t\tp = parts[i].slice(0, m.length);\n\t\t\t\treturn m.toLowerCase() === p.toLowerCase();\n\t\t\t}\n\t\t\tif (parts.length === fparts.length){\n\t\t\t\tvar cnt;\n\t\t\t\tfor (i=0, cnt = fparts.length; i < cnt; i++){\n\t\t\t\t\tval = parseInt(parts[i], 10);\n\t\t\t\t\tpart = fparts[i];\n\t\t\t\t\tif (isNaN(val)){\n\t\t\t\t\t\tswitch (part){\n\t\t\t\t\t\t\tcase 'MM':\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].months).filter(match_part);\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].months) + 1;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'M':\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].monthsShort).filter(match_part);\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].monthsShort) + 1;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tparsed[part] = val;\n\t\t\t\t}\n\t\t\t\tvar _date, s;\n\t\t\t\tfor (i=0; i < setters_order.length; i++){\n\t\t\t\t\ts = setters_order[i];\n\t\t\t\t\tif (s in parsed && !isNaN(parsed[s])){\n\t\t\t\t\t\t_date = new Date(date);\n\t\t\t\t\t\tsetters_map[s](_date, parsed[s]);\n\t\t\t\t\t\tif (!isNaN(_date))\n\t\t\t\t\t\t\tdate = _date;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn date;\n\t\t},\n\t\tformatDate: function(date, format, language){\n\t\t\tif (!date)\n\t\t\t\treturn '';\n\t\t\tif (typeof format === 'string')\n\t\t\t\tformat = DPGlobal.parseFormat(format);\n\t\t\tif (format.toDisplay)\n                return format.toDisplay(date, format, language);\n            var val = {\n\t\t\t\td: date.getUTCDate(),\n\t\t\t\tD: dates[language].daysShort[date.getUTCDay()],\n\t\t\t\tDD: dates[language].days[date.getUTCDay()],\n\t\t\t\tm: date.getUTCMonth() + 1,\n\t\t\t\tM: dates[language].monthsShort[date.getUTCMonth()],\n\t\t\t\tMM: dates[language].months[date.getUTCMonth()],\n\t\t\t\tyy: date.getUTCFullYear().toString().substring(2),\n\t\t\t\tyyyy: date.getUTCFullYear()\n\t\t\t};\n\t\t\tval.dd = (val.d < 10 ? '0' : '') + val.d;\n\t\t\tval.mm = (val.m < 10 ? '0' : '') + val.m;\n\t\t\tdate = [];\n\t\t\tvar seps = $.extend([], format.separators);\n\t\t\tfor (var i=0, cnt = format.parts.length; i <= cnt; i++){\n\t\t\t\tif (seps.length)\n\t\t\t\t\tdate.push(seps.shift());\n\t\t\t\tdate.push(val[format.parts[i]]);\n\t\t\t}\n\t\t\treturn date.join('');\n\t\t},\n\t\theadTemplate: '<thead>'+\n\t\t\t              '<tr>'+\n\t\t\t                '<th colspan=\"7\" class=\"datepicker-title\"></th>'+\n\t\t\t              '</tr>'+\n\t\t\t\t\t\t\t'<tr>'+\n\t\t\t\t\t\t\t\t'<th class=\"prev\">'+defaults.templates.leftArrow+'</th>'+\n\t\t\t\t\t\t\t\t'<th colspan=\"5\" class=\"datepicker-switch\"></th>'+\n\t\t\t\t\t\t\t\t'<th class=\"next\">'+defaults.templates.rightArrow+'</th>'+\n\t\t\t\t\t\t\t'</tr>'+\n\t\t\t\t\t\t'</thead>',\n\t\tcontTemplate: '<tbody><tr><td colspan=\"7\"></td></tr></tbody>',\n\t\tfootTemplate: '<tfoot>'+\n\t\t\t\t\t\t\t'<tr>'+\n\t\t\t\t\t\t\t\t'<th colspan=\"7\" class=\"today\"></th>'+\n\t\t\t\t\t\t\t'</tr>'+\n\t\t\t\t\t\t\t'<tr>'+\n\t\t\t\t\t\t\t\t'<th colspan=\"7\" class=\"clear\"></th>'+\n\t\t\t\t\t\t\t'</tr>'+\n\t\t\t\t\t\t'</tfoot>'\n\t};\n\tDPGlobal.template = '<div class=\"datepicker\">'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-days\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\t'<tbody></tbody>'+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-months\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-years\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-decades\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-centuries\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t'</div>';\n\n\t$.fn.datepicker.DPGlobal = DPGlobal;\n\n\n\t/* DATEPICKER NO CONFLICT\n\t* =================== */\n\n\t$.fn.datepicker.noConflict = function(){\n\t\t$.fn.datepicker = old;\n\t\treturn this;\n\t};\n\n\t/* DATEPICKER VERSION\n\t * =================== */\n\t$.fn.datepicker.version = '1.10.1';\n\n\t$.fn.datepicker.deprecated = function(msg){\n\t\tvar console = window.console;\n\t\tif (console && console.warn) {\n\t\t\tconsole.warn('DEPRECATED: ' + msg);\n\t\t}\n\t};\n\n\n\t/* DATEPICKER DATA-API\n\t* ================== */\n\n\t$(document).on(\n\t\t'focus.datepicker.data-api click.datepicker.data-api',\n\t\t'[data-provide=\"datepicker\"]',\n\t\tfunction(e){\n\t\t\tvar $this = $(this);\n\t\t\tif ($this.data('datepicker'))\n\t\t\t\treturn;\n\t\t\te.preventDefault();\n\t\t\t// component click requires us to explicitly show it\n\t\t\tdatepickerPlugin.call($this, 'show');\n\t\t}\n\t);\n\t$(function(){\n\t\tdatepickerPlugin.call($('[data-provide=\"datepicker-inline\"]'));\n\t});\n\n}));\n", "(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"AutoNumeric\"] = factory();\n\telse\n\t\troot[\"AutoNumeric\"] = factory();\n})(this, () => {\nreturn ", "// The require scope\nvar __webpack_require__ = {};\n\n", "// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};", "__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))", "/**\n * Enumerations for AutoNumeric.js\n * @author Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n * @copyright © 2023 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * Object that store the helper enumerations\n * @type {{ allowedTagList: [string], keyCode: {}, fromCharCodeKeyCode: [string], keyName: {} }}\n */\nconst AutoNumericEnum = {};\n\n/**\n * List of allowed tag on which autoNumeric can be used.\n */\nAutoNumericEnum.allowedTagList = [\n    'b',\n    'caption',\n    'cite',\n    'code',\n    'const',\n    'dd',\n    'del',\n    'div',\n    'dfn',\n    'dt',\n    'em',\n    'h1',\n    'h2',\n    'h3',\n    'h4',\n    'h5',\n    'h6',\n    'input',\n    'ins',\n    'kdb',\n    'label',\n    'li',\n    'option',\n    'output',\n    'p',\n    'q',\n    's',\n    'sample',\n    'span',\n    'strong',\n    'td',\n    'th',\n    'u',\n];\nObject.freeze(AutoNumericEnum.allowedTagList);\nObject.defineProperty(AutoNumericEnum, 'allowedTagList', { configurable: false, writable: false });\n\n/**\n * This object is the reverse of `keyCode`, and is used to translate the key code to named keys when no valid characters can be obtained by `String.fromCharCode`.\n * This object keys correspond to the `event.keyCode` number, and returns the corresponding key name (à la event.key)\n */\nAutoNumericEnum.fromCharCodeKeyCode = {\n    0  : 'LaunchCalculator',\n    8  : 'Backspace',\n    9  : 'Tab',\n    13 : 'Enter',\n    16 : 'Shift',\n    17 : 'Ctrl',\n    18 : 'Alt',\n    19 : 'Pause',\n    20 : 'CapsLock',\n    27 : 'Escape',\n    32 : ' ',\n    33 : 'PageUp',\n    34 : 'PageDown',\n    35 : 'End',\n    36 : 'Home',\n    37 : 'ArrowLeft',\n    38 : 'ArrowUp',\n    39 : 'ArrowRight',\n    40 : 'ArrowDown',\n    45 : 'Insert',\n    46 : 'Delete',\n    48 : '0',\n    49 : '1',\n    50 : '2',\n    51 : '3',\n    52 : '4',\n    53 : '5',\n    54 : '6',\n    55 : '7',\n    56 : '8',\n    57 : '9',\n    // 65: 'a',\n    // 66: 'b',\n    // 67: 'c',\n    // 68: 'd',\n    // 69: 'e',\n    // 70: 'f',\n    // 71: 'g',\n    // 72: 'h',\n    // 73: 'i',\n    // 74: 'j',\n    // 75: 'k',\n    // 76: 'l',\n    // 77: 'm',\n    // 78: 'n',\n    // 79: 'o',\n    // 80: 'p',\n    // 81: 'q',\n    // 82: 'r',\n    // 83: 's',\n    // 84: 't',\n    // 85: 'u',\n    // 86: 'v',\n    // 87: 'w',\n    // 88: 'x',\n    // 89: 'y',\n    // 90: 'z',\n    91 : 'OS', // Note: Firefox and Chrome reports 'OS' instead of 'OSLeft'\n    92 : 'OSRight',\n    93 : 'ContextMenu',\n    96 : '0',\n    97 : '1',\n    98 : '2',\n    99 : '3',\n    100: '4',\n    101: '5',\n    102: '6',\n    103: '7',\n    104: '8',\n    105: '9',\n    106: '*',\n    107: '+',\n    109: '-', // The 'NumpadSubtract' code\n    110: '.',\n    111: '/',\n    112: 'F1',\n    113: 'F2',\n    114: 'F3',\n    115: 'F4',\n    116: 'F5',\n    117: 'F6',\n    118: 'F7',\n    119: 'F8',\n    120: 'F9',\n    121: 'F10',\n    122: 'F11',\n    123: 'F12',\n    144: 'NumLock',\n    145: 'ScrollLock',\n    173: '-', // The 'Minus' sign on Firefox. This is only needed when using the Selenium bot though.\n    182: 'MyComputer',\n    183: 'MyCalculator',\n    186: ';',\n    187: '=',\n    188: ',',\n    189: '-', // The 'Minus' sign on all other browsers\n    190: '.',\n    191: '/',\n    192: '`',\n    219: '[',\n    220: '\\\\',\n    221: ']',\n    222: '\\'',\n    224: 'Meta',\n    225: 'AltGraph',\n};\nObject.freeze(AutoNumericEnum.fromCharCodeKeyCode);\nObject.defineProperty(AutoNumericEnum, 'fromCharCodeKeyCode', { configurable: false, writable: false });\n\n/**\n * Wrapper variable that hold named keyboard keys with their respective key name (as set in KeyboardEvent.key).\n * Those names are listed here :\n * @link https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values\n */\nAutoNumericEnum.keyName = {\n    // Special values\n    Unidentified  : 'Unidentified',\n    AndroidDefault: 'AndroidDefault',\n\n    // Modifier keys\n    Alt       : 'Alt',\n    AltGr     : 'AltGraph',\n    CapsLock  : 'CapsLock', // Under Chrome, e.key is empty for CapsLock\n    Ctrl      : 'Control',\n    Fn        : 'Fn',\n    FnLock    : 'FnLock',\n    Hyper     : 'Hyper', // 'OS' under Firefox\n    Meta      : 'Meta',\n    OSLeft    : 'OS',\n    OSRight   : 'OS',\n    Command   : 'OS',\n    NumLock   : 'NumLock',\n    ScrollLock: 'ScrollLock',\n    Shift     : 'Shift',\n    Super     : 'Super', // 'OS' under Firefox\n    Symbol    : 'Symbol',\n    SymbolLock: 'SymbolLock',\n\n    // Whitespace keys\n    Enter: 'Enter',\n    Tab  : 'Tab',\n    Space: ' ', // 'Spacebar' for Firefox <37, and IE9\n\n    // Navigation keys\n    LeftArrow : 'ArrowLeft', // 'Left' for Firefox <=36, and IE9\n    UpArrow   : 'ArrowUp', // 'Up' for Firefox <=36, and IE9\n    RightArrow: 'ArrowRight', // 'Right' for Firefox <=36, and IE9\n    DownArrow : 'ArrowDown', // 'Down' for Firefox <=36, and IE9\n    End       : 'End',\n    Home      : 'Home',\n    PageUp    : 'PageUp',\n    PageDown  : 'PageDown',\n\n    // Editing keys\n    Backspace: 'Backspace',\n    Clear    : 'Clear',\n    Copy     : 'Copy',\n    CrSel    : 'CrSel', // 'Crsel' for Firefox <=36, and IE9\n    Cut      : 'Cut',\n    Delete   : 'Delete', // 'Del' for Firefox <=36, and IE9\n    EraseEof : 'EraseEof',\n    ExSel    : 'ExSel', // 'Exsel' for Firefox <=36, and IE9\n    Insert   : 'Insert',\n    Paste    : 'Paste',\n    Redo     : 'Redo',\n    Undo     : 'Undo',\n\n    // UI keys\n    Accept     : 'Accept',\n    Again      : 'Again',\n    Attn       : 'Attn', // 'Unidentified' for Firefox, Chrome, and IE9 ('KanaMode' when using the Japanese keyboard layout)\n    Cancel     : 'Cancel',\n    ContextMenu: 'ContextMenu', // 'Apps' for Firefox <=36, and IE9\n    Esc        : 'Escape', // 'Esc' for Firefox <=36, and IE9\n    Execute    : 'Execute',\n    Find       : 'Find',\n    Finish     : 'Finish', // 'Unidentified' for Firefox, Chrome, and IE9 ('Katakana' when using the Japanese keyboard layout)\n    Help       : 'Help',\n    Pause      : 'Pause',\n    Play       : 'Play',\n    Props      : 'Props',\n    Select     : 'Select',\n    ZoomIn     : 'ZoomIn',\n    ZoomOut    : 'ZoomOut',\n\n    // Device keys\n    BrightnessDown: 'BrightnessDown',\n    BrightnessUp  : 'BrightnessUp',\n    Eject         : 'Eject',\n    LogOff        : 'LogOff',\n    Power         : 'Power',\n    PowerOff      : 'PowerOff',\n    PrintScreen   : 'PrintScreen',\n    Hibernate     : 'Hibernate', // 'Unidentified' for Firefox <=37\n    Standby       : 'Standby', // 'Unidentified' for Firefox <=36, and IE9\n    WakeUp        : 'WakeUp',\n\n    // IME and composition keys\n    Compose: 'Compose',\n    Dead   : 'Dead',\n\n    // Function keys\n    F1 : 'F1',\n    F2 : 'F2',\n    F3 : 'F3',\n    F4 : 'F4',\n    F5 : 'F5',\n    F6 : 'F6',\n    F7 : 'F7',\n    F8 : 'F8',\n    F9 : 'F9',\n    F10: 'F10',\n    F11: 'F11',\n    F12: 'F12',\n\n    // Document keys\n    Print: 'Print',\n\n    // 'Normal' keys\n    num0            : '0',\n    num1            : '1',\n    num2            : '2',\n    num3            : '3',\n    num4            : '4',\n    num5            : '5',\n    num6            : '6',\n    num7            : '7',\n    num8            : '8',\n    num9            : '9',\n    a               : 'a',\n    b               : 'b',\n    c               : 'c',\n    d               : 'd',\n    e               : 'e',\n    f               : 'f',\n    g               : 'g',\n    h               : 'h',\n    i               : 'i',\n    j               : 'j',\n    k               : 'k',\n    l               : 'l',\n    m               : 'm',\n    n               : 'n',\n    o               : 'o',\n    p               : 'p',\n    q               : 'q',\n    r               : 'r',\n    s               : 's',\n    t               : 't',\n    u               : 'u',\n    v               : 'v',\n    w               : 'w',\n    x               : 'x',\n    y               : 'y',\n    z               : 'z',\n    A               : 'A',\n    B               : 'B',\n    C               : 'C',\n    D               : 'D',\n    E               : 'E',\n    F               : 'F',\n    G               : 'G',\n    H               : 'H',\n    I               : 'I',\n    J               : 'J',\n    K               : 'K',\n    L               : 'L',\n    M               : 'M',\n    N               : 'N',\n    O               : 'O',\n    P               : 'P',\n    Q               : 'Q',\n    R               : 'R',\n    S               : 'S',\n    T               : 'T',\n    U               : 'U',\n    V               : 'V',\n    W               : 'W',\n    X               : 'X',\n    Y               : 'Y',\n    Z               : 'Z',\n    Semicolon       : ';',\n    Equal           : '=',\n    Comma           : ',',\n    Hyphen          : '-',\n    Minus           : '-',\n    Plus            : '+',\n    Dot             : '.',\n    Slash           : '/',\n    Backquote       : '`',\n    LeftParenthesis : '(',\n    RightParenthesis: ')',\n    LeftBracket     : '[',\n    RightBracket    : ']',\n    Backslash       : '\\\\',\n    Quote           : '\\'',\n\n    // Numeric keypad keys\n    numpad0                       : '0',\n    numpad1                       : '1',\n    numpad2                       : '2',\n    numpad3                       : '3',\n    numpad4                       : '4',\n    numpad5                       : '5',\n    numpad6                       : '6',\n    numpad7                       : '7',\n    numpad8                       : '8',\n    numpad9                       : '9',\n    NumpadDot                     : '.',\n    NumpadDotAlt                  : ',', // Modern browsers automatically adapt the character sent by this key to the decimal character of the current language\n    NumpadMultiply                : '*',\n    NumpadPlus                    : '+',\n    NumpadMinus                   : '-',\n    NumpadSubtract                : '-',\n    NumpadSlash                   : '/',\n    NumpadDotObsoleteBrowsers     : 'Decimal',\n    NumpadMultiplyObsoleteBrowsers: 'Multiply',\n    NumpadPlusObsoleteBrowsers    : 'Add',\n    NumpadMinusObsoleteBrowsers   : 'Subtract',\n    NumpadSlashObsoleteBrowsers   : 'Divide',\n\n    // Special arrays for quicker tests\n    _allFnKeys           : ['F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'F10', 'F11', 'F12'],\n    _someNonPrintableKeys: ['Tab', 'Enter', 'Shift', 'ShiftLeft', 'ShiftRight', 'Control', 'ControlLeft', 'ControlRight', 'Alt', 'AltLeft', 'AltRight', 'Pause', 'CapsLock', 'Escape'],\n    _directionKeys       : ['PageUp', 'PageDown', 'End', 'Home', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowUp'],\n};\nObject.freeze(AutoNumericEnum.keyName._allFnKeys);\nObject.freeze(AutoNumericEnum.keyName._someNonPrintableKeys);\nObject.freeze(AutoNumericEnum.keyName._directionKeys);\nObject.freeze(AutoNumericEnum.keyName);\nObject.defineProperty(AutoNumericEnum, 'keyName', { configurable: false, writable: false });\n\nObject.freeze(AutoNumericEnum);\n\nexport default AutoNumericEnum;\n", "/**\n * Helper functions for AutoNumeric.js\n * @author Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n * @copyright © 2023 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport AutoNumericEnum from './AutoNumericEnum';\n\n/**\n * Static class that holds all the helper functions autoNumeric uses.\n * Note : none of the functions in there are aware of any autoNumeric internals (which means there are no references to autoNumeric-specific info like options names or data structures).\n */\nexport default class AutoNumericHelper {\n    /**\n     * Return `true` if the `value` is null\n     *\n     * @static\n     * @param {*} value The value to test\n     * @returns {boolean} Return `true` if the `value` is null, FALSE otherwise\n     */\n    static isNull(value) {\n        return value === null;\n    }\n\n    /**\n     * Return `true` if the `value` is undefined\n     *\n     * @static\n     * @param {*} value The value to test\n     * @returns {boolean} Return `true` if the `value` is undefined, FALSE otherwise\n     */\n    static isUndefined(value) {\n        return value === void(0);\n    }\n\n    /**\n     * Return `true` if the `value` is undefined, null or empty\n     *\n     * @param {*} value\n     * @returns {boolean}\n     */\n    static isUndefinedOrNullOrEmpty(value) {\n        return value === null || value === void(0) || '' === value;\n    }\n\n    /**\n     * Return `true` if the given parameter is a String\n     *\n     * @param {*} str\n     * @returns {boolean}\n     */\n    static isString(str) {\n        return (typeof str === 'string' || str instanceof String);\n    }\n    /**\n     * Return `true` if the `value` is an empty string ''\n     *\n     * @static\n     * @param {*} value The value to test\n     * @returns {boolean} Return `true` if the `value` is an empty string '', FALSE otherwise\n     */\n    static isEmptyString(value) {\n        return value === '';\n    }\n\n    /**\n     * Return `true` if the parameter is a boolean\n     *\n     * @static\n     * @param {*} value\n     * @returns {boolean}\n     */\n    static isBoolean(value) {\n        return typeof(value) === 'boolean';\n    }\n\n    /**\n     * Return `true` if the parameter is a string 'true' or 'false'\n     *\n     * This function accepts any cases for those strings.\n     * @param {string} value\n     * @returns {boolean}\n     */\n    static isTrueOrFalseString(value) {\n        const lowercaseValue = String(value).toLowerCase();\n        return lowercaseValue === 'true' || lowercaseValue === 'false';\n    }\n\n    /**\n     * Return `true` if the parameter is an object\n     *\n     * @param {*} reference\n     * @returns {boolean}\n     */\n    static isObject(reference) {\n        return typeof reference === 'object' && reference !== null && !Array.isArray(reference);\n    }\n\n    /**\n     * Return `true` if the given object is empty\n     * cf. http://stackoverflow.com/questions/679915/how-do-i-test-for-an-empty-javascript-object and http://jsperf.com/empty-object-test\n     *\n     * @param {object} obj\n     * @returns {boolean}\n     */\n    static isEmptyObj(obj) {\n        for (const prop in obj) {\n            if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    /**\n     * Return `true` if the parameter is a real number (and not a numeric string).\n     *\n     * @param {*} n\n     * @returns {boolean}\n     */\n    static isNumberStrict(n) {\n        return typeof n === 'number';\n    }\n\n    /**\n     * Return `true` if the parameter is a number (or a number written as a string).\n     *\n     * @param {*} n\n     * @returns {boolean}\n     */\n    static isNumber(n) {\n        return !this.isArray(n) && !isNaN(parseFloat(n)) && isFinite(n);\n    }\n\n    /**\n     * Return `true` if the given character is a number (0 to 9)\n     *\n     * @param {char} char\n     * @returns {boolean}\n     */\n    static isDigit(char) {\n        return /\\d/.test(char);\n    }\n\n    /**\n     * Return `true` if the parameter is a number (or a number written as a string).\n     * This version also accepts Arabic and Persian numbers.\n     *\n     * @param {*} n\n     * @returns {boolean}\n     */\n    static isNumberOrArabic(n) {\n        const latinConvertedNumber = this.arabicToLatinNumbers(n, false, true, true);\n        return this.isNumber(latinConvertedNumber);\n    }\n\n    /**\n     * Return `true` if the parameter is an integer (and not a float).\n     *\n     * @param {*} n\n     * @returns {boolean}\n     */\n    static isInt(n) {\n        return typeof n === 'number' && parseFloat(n) === parseInt(n, 10) && !isNaN(n);\n    }\n\n    /**\n     * Return `true` if the parameter is a function.\n     *\n     * @param {function} func\n     * @returns {boolean}\n     */\n    static isFunction(func) {\n        return typeof func === 'function';\n    }\n\n    /**\n     * Return `true` is the string `str` contains the string `needle`\n     * Note: this function does not coerce the parameters types\n     *\n     * @param {string} str\n     * @param {string} needle\n     * @returns {boolean}\n     */\n    static contains(str, needle) {\n        //TODO Use `Array.prototype.includes()` when available (cf. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes)\n        if (!this.isString(str) || !this.isString(needle) || str === '' || needle === '') {\n            return false;\n        }\n\n        return str.indexOf(needle) !== -1;\n    }\n\n    /**\n     * Return `true` if the `needle` is in the array\n     *\n     * @param {*} needle\n     * @param {Array} array\n     * @returns {boolean}\n     */\n    static isInArray(needle, array) {\n        if (!this.isArray(array) || array === [] || this.isUndefined(needle)) {\n            return false;\n        }\n\n        return array.indexOf(needle) !== -1;\n    }\n\n    /**\n     * Return `true` if the parameter is an Array\n     * //TODO Replace this by the default `Array.isArray()` function?\n     *\n     * @param {*} arr\n     * @throws Error\n     * @returns {*|boolean}\n     */\n    static isArray(arr) {\n        if (Object.prototype.toString.call([]) === '[object Array]') { // Make sure an array has a class attribute of [object Array]\n            // Test passed, now check if is an Array\n            return Array.isArray(arr) || (typeof arr === 'object' && Object.prototype.toString.call(arr) === '[object Array]');\n        }\n        else {\n            throw new Error('toString message changed for Object Array'); // Verify that the string returned by `toString` does not change in the future (cf. http://stackoverflow.com/a/8365215)\n        }\n    }\n\n    /**\n     * Return `true` if the parameter is a DOM element\n     * cf. http://stackoverflow.com/a/4754104/2834898\n     *\n     * @param {*} obj\n     * @returns {boolean}\n     */\n    static isElement(obj) {\n        // return !!(obj && obj.nodeName);\n        // return obj && 'nodeType' in obj;\n        // return obj instanceof Element || obj instanceof HTMLInputElement || obj instanceof HTMLElement;\n        if (typeof Element === 'undefined') {\n            // This test is needed in environnements where the Element object does not exist (ie. in web workers)\n            return false;\n        }\n\n        return obj instanceof Element;\n    }\n\n    /**\n     * Return `true` in the given DOM element is an <input>.\n     *\n     * @param {HTMLElement|HTMLInputElement} domElement\n     * @returns {boolean}\n     * @private\n     */\n    static isInputElement(domElement) {\n        return this.isElement(domElement) && domElement.tagName.toLowerCase() === 'input';\n    }\n\n    /**\n     * Return `true` if the parameter is a string that represents a float number, and that number has a decimal part\n     *\n     * @param {string} str\n     * @returns {boolean}\n     */\n    // static hasDecimals(str) {\n    //     const [, decimalPart] = str.split('.');\n    //     return !isUndefined(decimalPart);\n    // }\n\n    /**\n     * Return the number of decimal places if the parameter is a string that represents a float number, and that number has a decimal part.\n     *\n     * @param {string} str\n     * @returns {int}\n     */\n    static decimalPlaces(str) {\n        const [, decimalPart] = str.split('.');\n        if (!this.isUndefined(decimalPart)) {\n            return decimalPart.length;\n        }\n\n        return 0;\n    }\n\n    /**\n     * Return the index of the first non-zero decimal place in the given value.\n     * The index starts after the decimal point, if any, and begins at '1'.\n     * If no decimal places are found in the value, this function returns `0`.\n     *\n     * @example\n     * indexFirstNonZeroDecimalPlace('0.00') -> 0\n     * indexFirstNonZeroDecimalPlace('1.00') -> 0\n     * indexFirstNonZeroDecimalPlace('0.12') -> 1\n     * indexFirstNonZeroDecimalPlace('0.1234') -> 1\n     * indexFirstNonZeroDecimalPlace('0.01234') -> 2\n     * indexFirstNonZeroDecimalPlace('0.001234') -> 3\n     * indexFirstNonZeroDecimalPlace('0.0001234') -> 4\n     *\n     * @param {number} value\n     * @returns {Number|number}\n     */\n    static indexFirstNonZeroDecimalPlace(value) {\n        const [, decimalPart] = String(Math.abs(value)).split('.');\n\n        if (this.isUndefined(decimalPart)) {\n            return 0;\n        }\n\n        let result = decimalPart.lastIndexOf('0');\n        if (result === -1) {\n            result = 0;\n        } else {\n            result += 2;\n        }\n\n        return result;\n    }\n\n    /**\n     * Return the code for the key used to generate the given event.\n     *\n     * @param {Event} event\n     * @returns {string|Number}\n     */\n    static keyCodeNumber(event) {\n        // `event.keyCode` and `event.which` are deprecated, `KeyboardEvent.key` (https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key) must be used now\n        // Also, do note that Firefox generate a 'keypress' event (e.keyCode === 0) for the keys that do not print a character (ie. 'Insert', 'Delete', 'Fn' keys, 'PageUp', 'PageDown' etc.). 'Shift' on the other hand does not generate a keypress event.\n        return (typeof event.which === 'undefined')?event.keyCode:event.which;\n    }\n\n    /**\n     * Return the character from the event key code.\n     * If the KeyboardEvent does not represent a printable character, then the key name is used (ie. 'Meta', 'Shift', 'F1', etc.)\n     * @example character(50) => '2'\n     *\n     * @param {KeyboardEvent} event\n     * @returns {string}\n     */\n    static character(event) {\n        let result;\n        if (event.key === 'Unidentified' || event.key === void(0) || this.isSeleniumBot()) {\n            //XXX The selenium geckodriver does not understand `event.key`, hence when using it, we need to rely on the old deprecated `keyCode` attribute, cf. upstream issue https://github.com/mozilla/geckodriver/issues/440\n            // Use the old deprecated keyCode property, if the new `key` one is not supported\n            const keyCode = this.keyCodeNumber(event);\n            if (keyCode === 229) { // Android Chrome returns the same keycode number 229 for all keys pressed\n                return AutoNumericEnum.keyName.AndroidDefault;\n            }\n\n            const potentialResult = AutoNumericEnum.fromCharCodeKeyCode[keyCode];\n            if (!AutoNumericHelper.isUndefinedOrNullOrEmpty(potentialResult)) {\n                // Since `String.fromCharCode` do not return named keys for some keys ('Escape' and 'Enter' for instance), we convert the characters to the key names\n                result = potentialResult;\n            } else {\n                result = String.fromCharCode(keyCode);\n            }\n        } else {\n            switch (event.key) {\n                // Manages all the special cases for obsolete browsers that return the non-standard names\n                case 'Add':\n                    result = AutoNumericEnum.keyName.NumpadPlus;\n                    break;\n                case 'Apps':\n                    result = AutoNumericEnum.keyName.ContextMenu;\n                    break;\n                case 'Crsel':\n                    result = AutoNumericEnum.keyName.CrSel;\n                    break;\n                case 'Decimal':\n                    if (event.char) {\n                        // this fixes #602\n                        result = event.char;\n                    } else {\n                        result = AutoNumericEnum.keyName.NumpadDot;\n                    }\n                    break;\n                case 'Del':\n                    result = AutoNumericEnum.keyName.Delete;\n                    break;\n                case 'Divide':\n                    result = AutoNumericEnum.keyName.NumpadSlash;\n                    break;\n                case 'Down':\n                    result = AutoNumericEnum.keyName.DownArrow;\n                    break;\n                case 'Esc':\n                    result = AutoNumericEnum.keyName.Esc;\n                    break;\n                case 'Exsel':\n                    result = AutoNumericEnum.keyName.ExSel;\n                    break;\n                case 'Left':\n                    result = AutoNumericEnum.keyName.LeftArrow;\n                    break;\n                case 'Meta':\n                case 'Super':\n                    result = AutoNumericEnum.keyName.OSLeft;\n                    break;\n                case 'Multiply':\n                    result = AutoNumericEnum.keyName.NumpadMultiply;\n                    break;\n                case 'Right':\n                    result = AutoNumericEnum.keyName.RightArrow;\n                    break;\n                case 'Spacebar':\n                    result = AutoNumericEnum.keyName.Space;\n                    break;\n                case 'Subtract':\n                    result = AutoNumericEnum.keyName.NumpadMinus;\n                    break;\n                case 'Up':\n                    result = AutoNumericEnum.keyName.UpArrow;\n                    break;\n                default:\n                    // The normal case\n                    result = event.key;\n            }\n        }\n\n        return result;\n    }\n\n    /**\n     * Return an object containing the name and version of the current browser.\n     * @example `browserVersion()` => { name: 'Firefox', version: '42' }\n     * Based on http://stackoverflow.com/a/38080051/2834898\n     *\n     * @returns {{ name: string, version: string }}\n     */\n    static browser() {\n        const ua = navigator.userAgent;\n        let tem;\n        let M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];\n\n        if (/trident/i.test(M[1])) {\n            tem = /\\brv[ :]+(\\d+)/g.exec(ua) || [];\n            return { name: 'ie', version: (tem[1] || '') };\n        }\n\n        if (M[1] === 'Chrome') {\n            tem = ua.match(/\\b(OPR|Edge)\\/(\\d+)/);\n            if (tem !== null) {\n                return { name: tem[1].replace('OPR', 'opera'), version: tem[2] };\n            }\n        }\n\n        M = M[2]?[M[1], M[2]]:[navigator.appName, navigator.appVersion, '-?'];\n        if ((tem = ua.match(/version\\/(\\d+)/i)) !== null) {\n            M.splice(1, 1, tem[1]);\n        }\n\n        return { name: M[0].toLowerCase(), version: M[1] };\n    }\n\n    /**\n     * Check if the browser is controlled by Selenium.\n     * Note: This only works within the geckodriver.\n     * cf. http://stackoverflow.com/questions/33225947/can-a-website-detect-when-you-are-using-selenium-with-chromedriver\n     *\n     * @returns {boolean}\n     */\n    static isSeleniumBot() {\n        // noinspection JSUnresolvedVariable\n        return window.navigator.webdriver === true;\n    }\n\n    /**\n     * Return `true` if the given number is negative, or if the given string contains a negative sign :\n     * - everywhere in the string (by default), or\n     * - on the first character only if the `checkEverywhere` parameter is set to `false`.\n     *\n     * Note: `-0` is not a negative number since it's equal to `0`.\n     *\n     * @param {number|string} numberOrNumericString A Number, or a number represented by a string\n     * @param {string} negativeSignCharacter The single character that represent the negative sign\n     * @param {boolean} checkEverywhere If TRUE, then the negative sign is search everywhere in the numeric string (this is needed for instance if the string is '1234.56-')\n     * @returns {boolean}\n     */\n    static isNegative(numberOrNumericString, negativeSignCharacter = '-', checkEverywhere = true) {\n        if (numberOrNumericString === negativeSignCharacter) {\n            return true;\n        }\n\n        if (numberOrNumericString === '') {\n            return false;\n        }\n\n        if (AutoNumericHelper.isNumber(numberOrNumericString)) {\n            return numberOrNumericString < 0;\n        }\n\n        if (checkEverywhere) {\n            return this.contains(numberOrNumericString, negativeSignCharacter);\n        }\n\n        return this.isNegativeStrict(numberOrNumericString, negativeSignCharacter);\n    }\n\n    /**\n     * Return `true` if the given string contains a negative sign on the first character (on the far left).\n     *\n     * @example isNegativeStrict('1234.56')     => false\n     * @example isNegativeStrict('1234.56-')    => false\n     * @example isNegativeStrict('-1234.56')    => true\n     * @example isNegativeStrict('-1,234.56 €') => true\n     *\n     * @param {string} numericString\n     * @param {string} negativeSignCharacter The single character that represent the negative sign\n     * @returns {boolean}\n     */\n    static isNegativeStrict(numericString, negativeSignCharacter = '-') {\n        return numericString.charAt(0) === negativeSignCharacter;\n    }\n\n    /**\n     * Return `true` if the very first character is the opening bracket, and if the rest of the `valueString` also has the closing bracket.\n     *\n     * @param {string} valueString\n     * @param {string} leftBracket\n     * @param {string} rightBracket\n     * @returns {boolean}\n     */\n    static isNegativeWithBrackets(valueString, leftBracket, rightBracket) {\n        return valueString.charAt(0) === leftBracket && this.contains(valueString, rightBracket);\n    }\n\n    /**\n     * Return `true` if the formatted or unformatted numeric string represent the value 0 (ie. '0,00 €'), or is empty (' €').\n     * This works since we test if there are any numbers from 1 to 9 in the string. If there is none, then the number is zero (or the string is empty).\n     *\n     * @param {string} numericString\n     * @returns {boolean}\n     */\n    static isZeroOrHasNoValue(numericString) {\n        return !(/[1-9]/g).test(numericString);\n    }\n\n    /**\n     * Return the negative version of the value (represented as a string) given as a parameter.\n     * The numeric string is a valid Javascript number when typecast to a `Number`.\n     *\n     * @param {string} value\n     * @returns {*}\n     */\n    static setRawNegativeSign(value) {\n        if (!this.isNegativeStrict(value, '-')) {\n            return `-${value}`;\n        }\n\n        return value;\n    }\n\n    /**\n     * Replace the character at the position `index` in the string `string` by the character(s) `newCharacter`.\n     *\n     * @param {string} string\n     * @param {int} index\n     * @param {string} newCharacter\n     * @returns {string}\n     */\n    static replaceCharAt(string, index, newCharacter) {\n        return `${string.substr(0, index)}${newCharacter}${string.substr(index + newCharacter.length)}`;\n    }\n\n    /**\n     * Return the value clamped to the nearest minimum/maximum value, as defined in the settings.\n     *\n     * @param {string|number} value\n     * @param {object} settings\n     * @returns {number}\n     */\n    static clampToRangeLimits(value, settings) {\n        //XXX This function always assume `settings.minimumValue` is lower than `settings.maximumValue`\n        return Math.max(settings.minimumValue, Math.min(settings.maximumValue, value));\n    }\n\n    /**\n     * Return the number of number or dot characters on the left side of the caret, in a formatted number.\n     *\n     * @param {string} formattedNumberString\n     * @param {int} caretPosition This must be a positive integer\n     * @param {string} decimalCharacter\n     * @returns {number}\n     */\n    static countNumberCharactersOnTheCaretLeftSide(formattedNumberString, caretPosition, decimalCharacter) {\n        // Here we count the dot and report it as a number character too, since it will 'stay' in the Javascript number when unformatted\n        const numberDotOrNegativeSign = new RegExp(`[0-9${decimalCharacter}-]`); // No need to escape the decimal character here, since it's in `[]`\n\n        let numberDotAndNegativeSignCount = 0;\n        for (let i = 0; i < caretPosition; i++) {\n            // Test if the character is a number, a dot or an hyphen. If it is, count it, otherwise ignore it\n            if (numberDotOrNegativeSign.test(formattedNumberString[i])) {\n                numberDotAndNegativeSignCount++;\n            }\n        }\n\n        return numberDotAndNegativeSignCount;\n    }\n\n    /**\n     * Walk the `formattedNumberString` from left to right, one char by one, counting the `formattedNumberStringIndex`.\n     * If the char is in the `rawNumberString` (starting at index 0), then `rawNumberStringIndex++`, and continue until\n     * there is no more characters in `rawNumberString`) or that `rawNumberStringIndex === caretPositionInRawValue`.\n     * When you stop, the `formattedNumberStringIndex` is the position where the caret should be set.\n     *\n     * @example\n     * 1234567|89.01   : position 7 (rawNumberString)\n     * 123.456.7|89,01 : position 9 (formattedNumberString)\n     *\n     * @param {string} rawNumberString\n     * @param {int} caretPositionInRawValue\n     * @param {string} formattedNumberString\n     * @param {string} decimalCharacter\n     * @returns {*}\n     */\n    static findCaretPositionInFormattedNumber(rawNumberString, caretPositionInRawValue, formattedNumberString, decimalCharacter) {\n        const formattedNumberStringSize = formattedNumberString.length;\n        const rawNumberStringSize = rawNumberString.length;\n\n        let formattedNumberStringIndex;\n        let rawNumberStringIndex = 0;\n        for (formattedNumberStringIndex = 0;\n            formattedNumberStringIndex < formattedNumberStringSize &&\n            rawNumberStringIndex < rawNumberStringSize &&\n            rawNumberStringIndex < caretPositionInRawValue;\n            formattedNumberStringIndex++) {\n            if (rawNumberString[rawNumberStringIndex] === formattedNumberString[formattedNumberStringIndex] ||\n                (rawNumberString[rawNumberStringIndex] === '.' && formattedNumberString[formattedNumberStringIndex] === decimalCharacter)) {\n                rawNumberStringIndex++;\n            }\n        }\n\n        return formattedNumberStringIndex;\n    }\n\n    /**\n     * Count the number of occurrence of the given character, in the given text.\n     *\n     * @param {string} character\n     * @param {string} text\n     * @returns {number}\n     */\n    static countCharInText(character, text) {\n        let charCounter = 0;\n        for (let i = 0; i < text.length; i++) {\n            if (text[i] === character) {\n                charCounter++;\n            }\n        }\n\n        return charCounter;\n    }\n\n    /**\n     * Return the index that can be used to set the caret position.\n     * This takes into account that the position is starting at '0', not 1.\n     *\n     * @param {int} characterCount\n     * @returns {number}\n     */\n    static convertCharacterCountToIndexPosition(characterCount) {\n        return Math.max(characterCount, characterCount - 1);\n    }\n\n    /**\n     * Cross browser routine for getting selected range/cursor position.\n     * Note: this also works with edge cases like contenteditable-enabled elements, and hidden inputs.\n     *\n     * @param {HTMLInputElement|EventTarget} element\n     * @returns {{}}\n     */\n    static getElementSelection(element) {\n        const position = {};\n\n        let isSelectionStartUndefined;\n        try {\n            isSelectionStartUndefined = this.isUndefined(element.selectionStart);\n        } catch (error) {\n            isSelectionStartUndefined = false;\n        }\n\n        try {\n            if (isSelectionStartUndefined) {\n                const selection = window.getSelection();\n                const selectionInfo = selection.getRangeAt(0);\n                position.start = selectionInfo.startOffset;\n                position.end = selectionInfo.endOffset;\n                position.length = position.end - position.start;\n            } else {\n                position.start = element.selectionStart;\n                position.end = element.selectionEnd;\n                position.length = position.end - position.start;\n            }\n        } catch (error) {\n            // Manages the cases where :\n            // - the 'contenteditable' elements that have no selections\n            // - the <input> element is of type 'hidden'\n            position.start = 0;\n            position.end = 0;\n            position.length = 0;\n        }\n\n        return position;\n    }\n\n    /**\n     * Cross browser routine for setting selected range/cursor position\n     *\n     * @param {HTMLInputElement|EventTarget} element\n     * @param {int} start\n     * @param {int|null} end\n     */\n    static setElementSelection(element, start, end = null) {\n        if (this.isUndefinedOrNullOrEmpty(end)) {\n            end = start;\n        }\n\n        if (this.isInputElement(element)) {\n            element.setSelectionRange(start, end);\n        } else if (!AutoNumericHelper.isNull(element.firstChild)) {\n            const range = document.createRange();\n            range.setStart(element.firstChild, start);\n            range.setEnd(element.firstChild, end);\n            const selection = window.getSelection();\n            selection.removeAllRanges();\n            selection.addRange(range);\n        }\n    }\n\n    /**\n     * Function that throw error messages\n     *\n     * @param {string} message\n     * @throws\n     */\n    static throwError(message) {\n        throw new Error(message);\n    }\n\n    /**\n     * Function that display a warning messages, according to the debug level.\n     *\n     * @param {string} message\n     * @param {boolean} showWarning If FALSE, then the warning message is not displayed\n     */\n    static warning(message, showWarning = true) {\n        if (showWarning) {\n            /* eslint no-console: 0 */\n            console.warn(`Warning: ${message}`);\n        }\n    }\n\n    /**\n     * Return `true` if the given event is an instance of WheelEvent\n     *\n     * @static\n     * @param {event} event The event to test\n     * @returns {boolean} Return `true` if the event is an instance of WheelEvent, FALSE otherwise\n    */\n    static isWheelEvent(event) {\n        return event instanceof WheelEvent;\n    }\n\n    /**\n     * Return `true` if the given event is a wheelup event\n     *\n     * @param {WheelEvent} wheelEvent\n     * @returns {boolean}\n     */\n    static isWheelUpEvent(wheelEvent) {\n        if (!this.isWheelEvent(wheelEvent) || this.isUndefinedOrNullOrEmpty(wheelEvent.deltaY)) {\n            this.throwError(`The event passed as a parameter is not a valid wheel event, '${wheelEvent.type}' given.`);\n        }\n\n        return wheelEvent.deltaY < 0;\n    }\n\n    /**\n     * Return `true` if the given event is a wheeldown event\n     *\n     * @param {WheelEvent} wheelEvent\n     * @returns {boolean}\n     */\n    static isWheelDownEvent(wheelEvent) {\n        if (!this.isWheelEvent(wheelEvent) || this.isUndefinedOrNullOrEmpty(wheelEvent.deltaY)) {\n            this.throwError(`The event passed as a parameter is not a valid wheel event, '${wheelEvent.type}' given.`);\n        }\n\n        return wheelEvent.deltaY > 0;\n    }\n\n    /**\n     * Return `true` if the given event is an instance of WheelEvent and the deltaY value is equal to zero\n     *\n     * @param {WheelEvent} wheelEvent The event to test\n     * @returns {boolean} Return `true` if the event is an instance of WheelEvent and the deltaY value is equal to zero, FALSE otherwise\n     */\n    static isWheelEventWithZeroDeltaY(wheelEvent) {\n        return this.isWheelEvent(wheelEvent) && !this.isUndefinedOrNullOrEmpty(wheelEvent.deltaY) && wheelEvent.deltaY === 0;\n    }\n\n    /**\n     * Return the given raw value truncated at the given number of decimal places `decimalPlaces`.\n     * This function does not round the value.\n     *\n     * @example\n     * forceDecimalPlaces(123.45678, 0) -> '123.45678'\n     * forceDecimalPlaces(123.45678, 1) -> '123.4'\n     * forceDecimalPlaces(123.45678, 2) -> '123.45'\n     * forceDecimalPlaces(123.45678, 3) -> '123.456'\n     *\n     * @param {number} value\n     * @param {int} decimalPlaces\n     * @returns {number|string}\n     */\n    static forceDecimalPlaces(value, decimalPlaces) {\n        // We could make sure `decimalPlaces` is an integer and positive, but we'll leave that to the dev calling this function.\n        const [integerPart, decimalPart] = String(value).split('.');\n        if (!decimalPart) {\n            return value;\n        }\n\n        return `${integerPart}.${decimalPart.substr(0, decimalPlaces)}`;\n    }\n\n    /**\n     * Return the 'nearest rounded' value, according to the given step size.\n     * @example roundToNearest(264789, 10000)) => 260000\n     *\n     * @param {number} value\n     * @param {number} stepPlace\n     * @returns {*}\n     */\n    static roundToNearest(value, stepPlace = 1000) {\n        if (0 === value) {\n            return 0;\n        }\n\n        if (stepPlace === 0) {\n            this.throwError('The `stepPlace` used to round is equal to `0`. This value must not be equal to zero.');\n        }\n\n        return Math.round(value / stepPlace) * stepPlace;\n    }\n\n    /**\n     * Return the 'nearest rounded' value by automatically adding or subtracting the calculated offset to the initial value.\n     * This is done without having to pass a step to this function, and based on the size of the given `value`.\n     *\n     * @example                    Calculated offset\n     *           1 ->           1 (1)\n     *          14 ->          10 (10)\n     *         143 ->         140 (10)\n     *       1.278 ->       1.300 (100)\n     *      28.456 ->      28.500 (100)\n     *     276.345 ->     276.000 (1.000)\n     *   4.534.061 ->   4.530.000 (10.000)\n     *  66.723.844 ->  66.700.000 (100.000)\n     * 257.833.411 -> 258.000.000 (1.000.000)\n     *\n     *                           Initial   Added   Offset\n     * 2 decimalPlacesRawValue : 1.12   -> 2.00   (1)\n     * 3 decimalPlacesRawValue : 1.123  -> 2.000  (1)\n     *\n     * Special case when the `value` to round is between -1 and 1, excluded :\n     * @example\n     *     Number of             Initial   Result  Calculated\n     *     decimal places        value     (add)   offset\n     * 2 decimalPlacesRawValue : 0.12   -> 0.13    (0.01) : Math.pow(10, -2)\n     * 2 decimalPlacesRawValue : 0.01   -> 0.02    (0.01)\n     * 2 decimalPlacesRawValue : 0.00   -> 0.01    (0.01)\n     *\n     * 3 decimalPlacesRawValue : 0.123  -> 0.133   (0.01)  : Math.pow(10, -2)\n     * 3 decimalPlacesRawValue : 0.012  -> 0.013   (0.001) : Math.pow(10, -3)\n     * 3 decimalPlacesRawValue : 0.001  -> 0.001   (0.001)\n     * 3 decimalPlacesRawValue : 0.000  -> 0.001   (0.001)\n     *\n     * 4 decimalPlacesRawValue : 0.4123 -> 0.4200  (0.01)   : Math.pow(10, -2)\n     * 4 decimalPlacesRawValue : 0.0412 -> 0.0420  (0.001)  : Math.pow(10, -3)\n     * 4 decimalPlacesRawValue : 0.0041 -> 0.0042  (0.0001) : Math.pow(10, -4)\n     * 4 decimalPlacesRawValue : 0.0004 -> 0.0005  (0.0001)\n     * 4 decimalPlacesRawValue : 0.0000 -> 0.0001  (0.0001)\n     *\n     * @param {number} value\n     * @param {boolean} isAddition\n     * @param {int} decimalPlacesRawValue The precision needed by the `rawValue`\n     * @returns {*}\n     */\n    static modifyAndRoundToNearestAuto(value, isAddition, decimalPlacesRawValue) {\n        value = Number(this.forceDecimalPlaces(value, decimalPlacesRawValue)); // Make sure that '0.13000000001' is converted to the number of rawValue decimal places '0.13'\n\n        const absValue = Math.abs(value);\n        if (absValue >= 0 && absValue < 1) {\n            const rawValueMinimumOffset = Math.pow(10, -decimalPlacesRawValue);\n            if (value === 0) {\n                // 4 decimalPlacesRawValue : 0.0000 -> 0.0001 (0.0001)\n                return (isAddition)?rawValueMinimumOffset:-rawValueMinimumOffset;\n            }\n\n            let offset;\n            const minimumOffsetFirstDecimalPlaceIndex = decimalPlacesRawValue;\n            // Find where is the first non-zero decimal places\n            const indexFirstNonZeroDecimalPlace = this.indexFirstNonZeroDecimalPlace(value);\n            if (indexFirstNonZeroDecimalPlace >= minimumOffsetFirstDecimalPlaceIndex - 1) {\n                /* 4 decimalPlacesRawValue : 0.0041 -> 0.0042 (0.0001) : Math.pow(10, -4)\n                 * 4 decimalPlacesRawValue : 0.0004 -> 0.0005 (0.0001)\n                 */\n                offset = rawValueMinimumOffset;\n            } else {\n                offset = Math.pow(10, -(indexFirstNonZeroDecimalPlace + 1));\n            }\n\n            let result;\n            if (isAddition) {\n                result = value + offset;\n            } else {\n                result = value - offset;\n            }\n\n            return this.roundToNearest(result, offset);\n        } else {\n            // For values >= 1\n            value = parseInt(value, 10);\n            const lengthValue = Math.abs(value).toString().length; // `Math.abs()` is needed here to omit the negative sign '-' in case of a negative value\n\n            let pow;\n            switch (lengthValue) {\n                // Special cases for small numbers\n                case 1:\n                    pow = 0;\n                    break;\n                case 2:\n                case 3:\n                    pow = 1;\n                    break;\n                case 4:\n                case 5:\n                    pow = 2;\n                    break;\n                // Default behavior\n                default:\n                    pow = lengthValue - 3;\n            }\n            const offset = Math.pow(10, pow);\n\n            let result;\n            if (isAddition) {\n                result = value + offset;\n            } else {\n                result = value - offset;\n            }\n\n            if (result <= 10 && result >= -10) {\n                return result;\n            }\n\n            return this.roundToNearest(result, offset);\n        }\n    }\n\n    /**\n     * Return the 'nearest rounded' value automatically by adding the calculated offset to the initial value.\n     * This will limit the result to the given number of decimal places `decimalPlacesLimit`.\n     *\n     * @param {number} value\n     * @param {int} decimalPlacesLimit\n     * @returns {*}\n     */\n    static addAndRoundToNearestAuto(value, decimalPlacesLimit) {\n        return this.modifyAndRoundToNearestAuto(value, true, decimalPlacesLimit);\n    }\n\n    /**\n     * Return the 'nearest rounded' value automatically by subtracting the calculated offset to the initial value.\n     * This will limit the result to the given number of decimal places `decimalPlacesLimit`.\n     *\n     * @param {number} value\n     * @param {int} decimalPlacesLimit\n     * @returns {*}\n     */\n    static subtractAndRoundToNearestAuto(value, decimalPlacesLimit) {\n        return this.modifyAndRoundToNearestAuto(value, false, decimalPlacesLimit);\n    }\n\n    /**\n     * Take an arabic number as a string and return a javascript number.\n     * By default, this function does not try to convert the arabic decimal and thousand separator characters.\n     * This returns `NaN` is the conversion is not possible.\n     * Based on http://stackoverflow.com/a/17025392/2834898\n     *\n     * @param {string} arabicNumbers\n     * @param {boolean} returnANumber If `true`, return a Number, otherwise return a String\n     * @param {boolean} parseDecimalCharacter\n     * @param {boolean} parseThousandSeparator\n     * @returns {string|number|NaN}\n     */\n    static arabicToLatinNumbers(arabicNumbers, returnANumber = true, parseDecimalCharacter = false, parseThousandSeparator = false) {\n        if (this.isNull(arabicNumbers)) {\n            return arabicNumbers;\n        }\n\n        let result = arabicNumbers.toString();\n        if (result === '') {\n            return arabicNumbers;\n        }\n\n        if (result.match(/[٠١٢٣٤٥٦٧٨٩۴۵۶]/g) === null) {\n            // If no Arabic/Persian numbers are found, return the numeric string or number directly\n            if (returnANumber) {\n                result = Number(result);\n            }\n\n            return result;\n        }\n\n        if (parseDecimalCharacter) {\n            result = result.replace(/٫/, '.'); // Decimal character\n        }\n\n        if (parseThousandSeparator) {\n            result = result.replace(/٬/g, ''); // Thousand separator\n        }\n\n        // Replace the numbers only\n        result = result.replace(/[٠١٢٣٤٥٦٧٨٩]/g, d => d.charCodeAt(0) - 1632) // Arabic numbers\n            .replace(/[۰۱۲۳۴۵۶۷۸۹]/g, d => d.charCodeAt(0) - 1776); // Persian numbers\n\n        // `NaN` has precedence over the string `'NaN'`\n        const resultAsNumber = Number(result);\n        if (isNaN(resultAsNumber)) {\n            return resultAsNumber;\n        }\n\n        if (returnANumber) {\n            result = resultAsNumber;\n        }\n\n        return result;\n    }\n\n    /**\n     * Create a custom event and immediately sent it from the given element.\n     * By default, if no element is given, the event is thrown from `document`.\n     *\n     * @param {string} eventName\n     * @param {HTMLElement|HTMLDocument|EventTarget} element\n     * @param {object} detail\n     * @param {boolean} bubbles Set to `true` if the event must bubble up\n     * @param {boolean} cancelable Set to `true` if the event must be cancelable\n     */\n    static triggerEvent(eventName, element = document, detail = null, bubbles = true, cancelable = true) {\n        let event;\n        if (window.CustomEvent) {\n            event = new CustomEvent(eventName, { detail, bubbles , cancelable }); // This is not supported by default by IE ; We use the polyfill for IE9 and later.\n        } else {\n            event = document.createEvent('CustomEvent');\n            event.initCustomEvent(eventName, bubbles, cancelable, { detail });\n        }\n\n        element.dispatchEvent(event);\n    }\n\n    /**\n     * Function to parse minimumValue, maximumValue & the input value to prepare for testing to determine if the value falls within the min / max range.\n     * Return an object example: minimumValue: \"999999999999999.99\" returns the following \"{s: -1, e: 12, c: Array[15]}\".\n     *\n     * This function is adapted from Big.js https://github.com/MikeMcl/big.js/. Many thanks to Mike.\n     *\n     * @param {number|string} value A numeric value.\n     * @returns {{}}\n     */\n    static parseStr(value) {\n        if (AutoNumericHelper.isUndefinedOrNullOrEmpty(value)) {\n            return { s: 1, e: 0, c: [0] }; // Return the representation for null/undefined\n        }\n\n        const result = {}; // A Big number instance.\n        let e;\n        let i;\n        let nL;\n        let j;\n\n        // Minus zero?\n        if (value === 0 && 1 / value < 0) {\n            value = '-0';\n        }\n\n        // Determine sign. 1 positive, -1 negative\n        value = value.toString();\n        if (this.isNegativeStrict(value, '-')) {\n            value = value.slice(1);\n            result.s = -1;\n        } else {\n            result.s = 1;\n        }\n\n        // Decimal point?\n        e = value.indexOf('.');\n        if (e > -1) {\n            value = value.replace('.', '');\n        }\n\n        // Length of string if no decimal character\n        if (e < 0) {\n            // Integer\n            e = value.length;\n        }\n\n        // Determine leading zeros\n        i = (value.search(/[1-9]/i) === -1) ? value.length : value.search(/[1-9]/i);\n        nL = value.length;\n        if (i === nL) {\n            // Zero\n            result.e = 0;\n            result.c = [0];\n        } else {\n            // Determine trailing zeros\n            for (j = nL - 1; value.charAt(j) === '0'; j -= 1) {\n                nL -= 1;\n            }\n            nL -= 1;\n\n            // Decimal location\n            result.e = e - i - 1;\n            result.c = [];\n\n            // Convert string to array of digits without leading/trailing zeros\n            for (e = 0; i <= nL; i += 1) {\n                result.c[e] = +value.charAt(i);\n                e += 1;\n            }\n        }\n\n        return result;\n    }\n\n    /**\n     * Function to test if the input value falls with the Min / Max settings.\n     * This uses the parsed strings for the above parseStr function.\n     *\n     * This function is adapted from Big.js https://github.com/MikeMcl/big.js/. Many thanks to Mike.\n     *\n     * @param {object} y Big number instance\n     * @param {object} x Big number instance\n     * @returns {*}\n     */\n    static testMinMax(y, x) {\n        const xc = x.c;\n        const yc = y.c;\n        let i = x.s;\n        let j = y.s;\n        let k = x.e;\n        let l = y.e;\n\n        // Either zero?\n        if (!xc[0] || !yc[0]) {\n            let result;\n            if (!xc[0]) {\n                result = !yc[0]?0:-j;\n            } else {\n                result = i;\n            }\n            return result;\n        }\n\n        // Signs differ?\n        if (i !== j) {\n            return i;\n        }\n        const xNeg = i < 0;\n\n        // Compare exponents\n        if (k !== l) {\n            return (k > l ^ xNeg)?1:-1;\n        }\n        i = -1;\n        k = xc.length;\n        l = yc.length;\n        j = (k < l) ? k : l;\n\n        // Compare digit by digit\n        for (i += 1; i < j; i += 1) {\n            if (xc[i] !== yc[i]) {\n                return (xc[i] > yc[i] ^ xNeg)?1:-1;\n            }\n        }\n\n        // Compare lengths\n        let result;\n        if (k === l) {\n            result = 0;\n        } else {\n            result = (k > l ^ xNeg)?1:-1;\n        }\n\n        return result;\n    }\n\n    /**\n     * Generate a random string.\n     * cf. http://stackoverflow.com/a/8084248/2834898\n     *\n     * @param {Number} strLength Length of the generated string (in character count)\n     * @returns {string}\n     */\n    static randomString(strLength = 5) {\n        return Math.random()\n            .toString(36)\n            .substr(2, strLength);\n    }\n\n    /**\n     * Return the DOM element when passed either a DOM element or a selector string.\n     *\n     * @param {HTMLElement|string} domElementOrSelector\n     * @returns {HTMLElement}\n     */\n    static domElement(domElementOrSelector) {\n        let domElement;\n        if (AutoNumericHelper.isString(domElementOrSelector)) {\n            domElement = document.querySelector(domElementOrSelector);\n        } else {\n            domElement = domElementOrSelector;\n        }\n\n        return domElement;\n    }\n\n    /**\n     * Retrieve the current element value.\n     *\n     * @param {HTMLElement|HTMLInputElement|EventTarget} element\n     * @returns {number|string|null}\n     */\n    static getElementValue(element) {\n        if (element.tagName.toLowerCase() === 'input') {\n            return element.value;\n        }\n\n        return this.text(element);\n    }\n\n    /**\n     * Modify the element value directly.\n     *\n     * @param {HTMLElement|HTMLInputElement} element\n     * @param {number|string|null} value\n     */\n    static setElementValue(element, value = null) {\n        if (element.tagName.toLowerCase() === 'input') {\n            element.value = value;\n        } else {\n            element.textContent = value;\n        }\n    }\n\n    /**\n     * Set the invalid state for the given element.\n     * A custom message can be passed as the second argument.\n     * Note: This does not work with contenteditable elements\n     *\n     * @param {HTMLElement|HTMLInputElement} element\n     * @param {string|null} message\n     * @throws Error\n     */\n    static setInvalidState(element, message = 'Invalid') {\n        if (message === '' || this.isNull(message)) this.throwError('Cannot set the invalid state with an empty message.');\n\n        element.setCustomValidity(message);\n    }\n\n    /**\n     * Set the valid state for the given element.\n     * Note: This does not work with contenteditable elements\n     *\n     * @param {HTMLElement|HTMLInputElement} element\n     */\n    static setValidState(element) {\n        element.setCustomValidity('');\n    }\n\n    /**\n     * This clone the given object, and return it.\n     * WARNING: This does not do a deep cloning.\n     * cf. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Examples\n     * //TODO Add a `deep` option to clone object with more than one depth\n     *\n     * @param {object} obj\n     * @returns {object}\n     */\n    static cloneObject(obj) {\n        return Object.assign({}, obj);\n    }\n\n    /**\n     * Return a 'camelized' version of the given string.\n     * By default, this assume that :\n     * - the separators are hyphens '-',\n     * - the 'data-' string should be removed, and\n     * - that the very first word should not be capitalized.\n     *\n     * @example camelize('data-currency-symbol') => 'currencySymbol'\n     *\n     * @param {string} str Text to camelize\n     * @param {string} separator Character that separate each word\n     * @param {boolean} removeData If set to `true`, remove the `data-` part that you can find on some html attributes\n     * @param {boolean} skipFirstWord If set to `true`, do not capitalize the very first word\n     * @returns {string|null}\n     */\n    static camelize(str, separator = '-', removeData = true, skipFirstWord = true) {\n        if (this.isNull(str)) {\n            return null;\n        }\n\n        if (removeData) {\n            str = str.replace(/^data-/, '');\n        }\n\n        // Cut the string into words\n        const words = str.split(separator);\n\n        // Capitalize each word\n        let result = words.map(word => `${word.charAt(0).toUpperCase()}${word.slice(1)}`);\n\n        // Then concatenate them back\n        result = result.join('');\n\n        if (skipFirstWord) {\n            // Skip the very first letter\n            result = `${result.charAt(0).toLowerCase()}${result.slice(1)}`;\n        }\n\n        return result;\n    }\n\n    /**\n     * Return the text component of the given DOM element.\n     *\n     * @param {Element} domElement\n     * @returns {string}\n     */\n    static text(domElement) {\n        const nodeType = domElement.nodeType;\n\n        let result;\n        // cf. https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\n        if (nodeType === Node.ELEMENT_NODE ||\n            nodeType === Node.DOCUMENT_NODE ||\n            nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n            result = domElement.textContent;\n        } else if (nodeType === Node.TEXT_NODE) {\n            result = domElement.nodeValue;\n        } else {\n            result = '';\n        }\n\n        return result;\n    }\n\n    /**\n     * Set the text content of the given DOM element.\n     * @param {Element} domElement\n     * @param {string} text\n     */\n    static setText(domElement, text) {\n        const nodeType = domElement.nodeType;\n        if (nodeType === Node.ELEMENT_NODE ||\n            nodeType === Node.DOCUMENT_NODE ||\n            nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n            domElement.textContent = text;\n        }\n        //TODO Display a warning if that function does not do anything?\n    }\n\n    /**\n     * Filter out the given `arr` array with the elements found in `excludedElements`.\n     * This returns a new array and does not modify the source.\n     * cf. verification here : http://codepen.io/AnotherLinuxUser/pen/XpvrMg?editors=0012\n     *\n     * @param {Array} arr\n     * @param {Array} excludedElements\n     * @returns {*|Array.<T>}\n     */\n    static filterOut(arr, excludedElements) {\n        return arr.filter(element => !this.isInArray(element, excludedElements));\n    }\n\n    /**\n     * Remove the trailing zeros in the decimal part of a number.\n     *\n     * @param {string} numericString\n     * @returns {*}\n     */\n    static trimPaddedZerosFromDecimalPlaces(numericString) {\n        numericString = String(numericString);\n        if (numericString === '') {\n            return '';\n        }\n\n        const [integerPart, decimalPart] = numericString.split('.');\n        if (this.isUndefinedOrNullOrEmpty(decimalPart)) {\n            return integerPart;\n        }\n\n        const trimmedDecimalPart = decimalPart.replace(/0+$/g, '');\n\n        let result;\n        if (trimmedDecimalPart === '') {\n            result = integerPart;\n        } else {\n            result = `${integerPart}.${trimmedDecimalPart}`;\n        }\n\n        return result;\n    }\n\n    /**\n     * Return the top-most hovered item by the mouse cursor.\n     *\n     * @returns {*}\n     */\n    static getHoveredElement() {\n        const hoveredElements = [...document.querySelectorAll(':hover')];\n        return hoveredElements[hoveredElements.length - 1];\n    }\n\n    /**\n     * Return the given array trimmed to the given length.\n     * @example arrayTrim([1, 2, 3, 4], 2) -> [1, 2]\n     *\n     * @param {Array} array\n     * @param {Number} length\n     * @returns {*}\n     */\n    static arrayTrim(array, length) {\n        const arrLength = array.length;\n        if (arrLength === 0 || length > arrLength) {\n            // Also manage the case where `length` is higher than the current length\n            return array;\n        }\n\n        if (length < 0) {\n            return [];\n        }\n\n        array.length = parseInt(length, 10);\n\n        return array;\n    }\n\n    /**\n     * Merge all the given arrays by keeping only unique elements, and return an array with de-duplicated values.\n     * cf. http://stackoverflow.com/a/27664971/2834898\n     *\n     * @param {...array} arrays\n     * @returns {[*]}\n     */\n    static arrayUnique(...arrays) {\n        return [...new Set([].concat(...arrays))];\n    }\n\n    /**\n     * Merge all the given Maps by keeping only unique elements, and return a new Map with de-duplicated keys.\n     *\n     * @param {...Map} mapObjects\n     * @returns {Map}\n     */\n    static mergeMaps(...mapObjects) {\n        return new Map(mapObjects.reduce((as, b) => as.concat([...b]), []));\n    }\n\n    /**\n     * Search the given `value` in the object `obj`, and return the very first key it finds\n     *\n     * @param {object} obj\n     * @param {string|number} value\n     * @returns {*|null}\n     */\n    static objectKeyLookup(obj, value) {\n        const result = Object.entries(obj).find(array => array[1] === value);\n        let key = null;\n        if (result !== void(0)) {\n            key = result[0];\n        }\n\n        return key;\n    }\n\n    /**\n     * Insert the single character `char` in the string `str` at the given position `index`\n     *\n     * @param {string} str\n     * @param {string} char\n     * @param {int} index\n     * @returns {string}\n     */\n    static insertAt(str, char, index) {\n        str = String(str);\n\n        if (index > str.length) {\n            throw new Error(`The given index is out of the string range.`);\n        }\n\n        if (char.length !== 1) {\n            throw new Error('The given string `char` should be only one character long.');\n        }\n\n        if (str === '' && index === 0) {\n            return char;\n        }\n\n        return `${str.slice(0, index)}${char}${str.slice(index)}`;\n    }\n\n    /**\n     * Convert the given scientific notation to the 'expanded' decimal notation\n     *\n     * @example scientificToDecimal('-123.4567e-6') returns '-0.0001234567'\n     *\n     * @param {number|string} val\n     * @returns {number|string}\n     */\n    static scientificToDecimal(val) {\n        // Check that the val is a Number\n        const numericValue = Number(val);\n        if (isNaN(numericValue)) {\n            return NaN;\n        }\n\n        // Check if the number is in a scientific notation\n        val                = String(val);\n        const isScientific = this.contains(val, 'e') || this.contains(val, 'E');\n\n        if (!isScientific) {\n            return val;\n        }\n\n        // Convert the scientific notation to a numeric string\n        let [value, exponent] = val.split(/e/i);\n        const isNegative = value < 0;\n        if (isNegative) {\n            value = value.replace('-', '');\n        }\n\n        const isNegativeExponent = +exponent < 0;\n        if (isNegativeExponent) {\n            exponent = exponent.replace('-', ''); // Remove the negative sign\n        }\n\n        const [int, float] = value.split(/\\./);\n\n        let result;\n        if (isNegativeExponent) {\n            if (int.length > exponent) {\n                // Place the decimal point at the int length count minus exponent\n                result = this.insertAt(int, '.', int.length - exponent);\n            } else {\n                // If that decimal point is greater than the int length, pad with zeros (ie. Number('-123.4567e-6') --> -0.0001234567)\n                result = `0.${'0'.repeat(exponent - int.length)}${int}`;\n            }\n\n            result = `${result}${float?float:''}`;\n        } else { // Positive exponent\n            if (float) {\n                value = `${int}${float}`; // Remove the '.', if any\n                if (exponent < float.length) {\n                    result = this.insertAt(value, '.', +exponent + int.length);\n                } else {\n                    result = `${value}${'0'.repeat(exponent - float.length)}`;\n                }\n            } else {\n                value = value.replace('.', ''); // Single case where val is '1.e4'\n                result = `${value}${'0'.repeat(Number(exponent))}`;\n            }\n        }\n\n        if (isNegative) {\n            // Put back the negative sign, if any\n            result = `-${result}`;\n        }\n\n        return result;\n    }\n}\n", "/**\n * Math expression tokenizer/parser/evaluator functions for autoNumeric.js\n *\n * @author Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n * @copyright © 2019 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * Recursively evaluate the abstract syntax tree (AST) and return the result for the given sub-tree\n */\nexport default class Evaluator {\n    constructor(ast) {\n        if (ast === null) {\n            throw new Error(`Invalid AST`);\n        }\n\n        // return this.evaluate(ast);\n    }\n\n    evaluate(subtree) {\n        if (subtree === void(0) || subtree === null) {\n            throw new Error(`Invalid AST sub-tree`);\n        }\n\n        if (subtree.type === 'number') {\n            return subtree.value;\n        } else if (subtree.type === 'unaryMinus') {\n            return -this.evaluate(subtree.left);\n        } else {\n            const left  = this.evaluate(subtree.left);\n            const right = this.evaluate(subtree.right);\n\n            switch (subtree.type) {\n                case 'op_+':\n                    return Number(left) + Number(right);\n                case 'op_-':\n                    return left - right;\n                case 'op_*':\n                    return left * right;\n                case 'op_/':\n                    return left / right;\n                default :\n                    throw new Error(`Invalid operator '${subtree.type}'`);\n            }\n        }\n    }\n}\n", "/**\n * Math expression tokenizer/parser/evaluator functions for autoNumeric.js\n *\n * @author Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n * @copyright © 2019 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * The Abstract Syntax Tree node\n *\n * Each node carries the node information such as type (operator type), value (if it's a leaf), and the left and right branches\n */\nexport default class ASTNode {\n    /*\n    constructor() {\n        // this.type = void(0);\n        // this.value = 0;\n        // this.left = null;\n        // this.right = null;\n    }\n    */\n\n    static createNode(type, left, right) {\n        const node = new ASTNode();\n        node.type = type;\n        node.left = left;\n        node.right = right;\n\n        return node;\n    }\n\n    static createUnaryNode(left) {\n        const node = new ASTNode();\n        node.type = 'unaryMinus';\n        node.left = left;\n        node.right = null;\n\n        return node;\n    }\n\n    static createLeaf(value) {\n        const node = new ASTNode();\n        node.type = 'number';\n        node.value = value;\n\n        return node;\n    }\n}\n", "/**\n * Math expression tokenizer/parser/evaluator functions for autoNumeric.js\n *\n * @author Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n * @copyright © 2019 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * Data structure used by the Lexer and Parser classes\n */\nexport default class Token {\n    constructor(type, value, symbol) {\n        this.type = type;\n        this.value = value;\n        this.symbol = symbol;\n    }\n}\n", "/**\n * Math expression tokenizer/parser/evaluator functions for autoNumeric.js\n *\n * @author Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n * @copyright © 2019 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport AutoNumericHelper from '../AutoNumericHelper';\nimport Token             from './Token';\n\nexport default class Lexer {\n    constructor(text) {\n        this.text  = text;\n        this.textLength = text.length;\n        this.index = 0;\n        this.token = new Token('Error', 0, 0);\n    }\n\n    /**\n     * Ignore white spaces and increment the index count until a non-space character is found\n     * @private\n     */\n    _skipSpaces() {\n        while (this.text[this.index] === ' ' && this.index <= this.textLength) {\n            this.index++;\n        }\n    }\n\n    /**\n     * Return the current index\n     *\n     * @returns {number}\n     */\n    getIndex() {\n        return this.index;\n    }\n\n    /**\n     * Return the next token object\n     *\n     * @param {string} decimalCharacter The decimal character to use in the float numbers\n     * @returns {Token}\n     */\n    getNextToken(decimalCharacter = '.') {\n        this._skipSpaces();\n\n        // Test for the end of text\n        if (this.textLength === this.index) {\n            this.token.type = 'EOT'; // End of text\n\n            return this.token;\n        }\n\n        // If the current character is a digit read a number\n        if (AutoNumericHelper.isDigit(this.text[this.index])) {\n            this.token.type  = 'num';\n            this.token.value = this._getNumber(decimalCharacter);\n\n            return this.token;\n        }\n\n        // Check if the current character is an operator or parentheses\n        this.token.type = 'Error';\n        switch (this.text[this.index]) {\n            case '+': this.token.type = '+'; break;\n            case '-': this.token.type = '-'; break;\n            case '*': this.token.type = '*'; break;\n            case '/': this.token.type = '/'; break;\n            case '(': this.token.type = '('; break;\n            case ')': this.token.type = ')'; break;\n        }\n\n        if (this.token.type !== 'Error') {\n            this.token.symbol = this.text[this.index];\n            this.index++;\n        } else {\n            throw new Error(`Unexpected token '${this.token.symbol}' at position '${this.token.index}' in the token function`);\n        }\n\n        return this.token;\n    }\n\n    /**\n     * Return the integer or float number starting from the `this.index` string index\n     *\n     * @param {string} decimalCharacter The decimal character to use in the float numbers\n     *\n     * @returns {string}\n     * @private\n     */\n    _getNumber(decimalCharacter) {\n        this._skipSpaces();\n\n        const startIndex = this.index;\n        while (this.index <= this.textLength && AutoNumericHelper.isDigit(this.text[this.index])) { // Integer part\n            this.index++;\n        }\n\n        if (this.text[this.index] === decimalCharacter) {\n            this.index++;\n        }\n\n        while (this.index <= this.textLength && AutoNumericHelper.isDigit(this.text[this.index])) { // Decimal part, if any\n            this.index++;\n        }\n\n        if (this.index === startIndex) {\n            throw new Error(`No number has been found while it was expected`);\n        }\n\n        // Convert the localized float number to a Javascript number\n        return this.text.substring(startIndex, this.index).replace(decimalCharacter, '.');\n    }\n}\n", "/**\n * Math expression tokenizer/parser/evaluator functions for autoNumeric.js\n *\n * @author Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n * @copyright © 2019 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport ASTNode from './ASTNode';\nimport Lexer   from './Lexer';\n\n/**\n * Math expression parser using the shunting-yard algorithm\n *\n * This implements the following BNF grammar:\n * EXP       -> TERM MORE_EXP\n * MORE_EXP  -> + TERM MORE_EXP |\n *              - TERM MORE_EXP |\n *              epsilon\n * TERM      -> FACTOR MORE_TERM\n * MORE_TERM -> * FACTOR MORE_TERM |\n *              / FACTOR MORE_TERM |\n *              epsilon\n * FACTOR    -> number |\n *             ( EXP ) |\n *             - FACTOR\n */\nexport default class Parser {\n    /**\n     * Parse the given string, and generate an abstract syntax tree (AST) from the math expression\n     *\n     * @param {string} text\n     * @param {string} customDecimalCharacter The custom decimal character to use in floats\n     * @returns {ASTNode}\n     */\n    constructor(text, customDecimalCharacter = '.') {\n        this.text = text;\n        this.decimalCharacter = customDecimalCharacter;\n        this.lexer = new Lexer(text);\n        this.token = this.lexer.getNextToken(this.decimalCharacter);\n\n        return this._exp();\n    }\n\n    _exp() {\n        const termNode = this._term();\n        const exprNode = this._moreExp();\n\n        //TODO Do not create an 'empty' node where this is added to 0\n        return ASTNode.createNode('op_+', termNode, exprNode);\n    }\n\n    _moreExp() {\n        let termNode;\n        let exprNode;\n        switch (this.token.type) {\n            case '+':\n                this.token = this.lexer.getNextToken(this.decimalCharacter);\n                termNode = this._term();\n                exprNode = this._moreExp();\n\n                return ASTNode.createNode('op_+', exprNode, termNode);\n            case '-':\n                this.token = this.lexer.getNextToken(this.decimalCharacter);\n                termNode = this._term();\n                exprNode = this._moreExp();\n\n                return ASTNode.createNode('op_-', exprNode, termNode);\n        }\n\n        return ASTNode.createLeaf(0);\n    }\n\n    _term() {\n        const factorNode = this._factor();\n        const termsNode = this._moreTerms();\n\n        //TODO Do not create an 'empty' node where this is multiplied by 1\n        return ASTNode.createNode('op_*', factorNode, termsNode);\n    }\n\n    _moreTerms() {\n        let factorNode;\n        let termsNode;\n        switch (this.token.type) {\n            case '*':\n                this.token = this.lexer.getNextToken(this.decimalCharacter);\n                factorNode = this._factor();\n                termsNode = this._moreTerms();\n\n                return ASTNode.createNode('op_*', termsNode, factorNode);\n            case '/':\n                this.token = this.lexer.getNextToken(this.decimalCharacter);\n                factorNode = this._factor();\n                termsNode = this._moreTerms();\n\n                return ASTNode.createNode('op_/', termsNode, factorNode);\n        }\n\n        return ASTNode.createLeaf(1);\n    }\n\n    _factor() {\n        let expression;\n        let factor;\n        let value;\n        switch (this.token.type) {\n            case 'num':\n                value = this.token.value;\n                this.token = this.lexer.getNextToken(this.decimalCharacter);\n\n                return ASTNode.createLeaf(value);\n            case '-':\n                this.token = this.lexer.getNextToken(this.decimalCharacter);\n                factor = this._factor();\n\n                return ASTNode.createUnaryNode(factor);\n            case '(':\n                this.token = this.lexer.getNextToken(this.decimalCharacter);\n                expression = this._exp();\n                this._match(')');\n\n                return expression;\n            default: {\n                throw new Error(`Unexpected token '${this.token.symbol}' with type '${this.token.type}' at position '${this.token.index}' in the factor function`);\n            }\n        }\n    }\n\n    _match(expected) {\n        const index = this.lexer.getIndex() - 1;\n        if (this.text[index] === expected) {\n            this.token = this.lexer.getNextToken(this.decimalCharacter);\n        } else {\n            throw new Error(`Unexpected token '${this.token.symbol}' at position '${index}' in the match function`);\n        }\n    }\n}\n", "/**\n *               AutoNumeric.js\n *\n * @version      4.10.9\n * @date         2025-09-03 UTC 09:00\n *\n * @authors      2016-2025 Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n *               2009-2016 Bob Knothe <bob.knothe@gmail.com>\n * @contributors Sokolov Yura and others, cf. AUTHORS\n * @copyright    Alexandre Bonneau & Robert J. Knothe\n * @since        2009-08-09\n *\n * @summary      AutoNumeric is a standalone Javascript library\n *               that provides live *as-you-type* formatting for\n *               international numbers and currencies.\n *\n * @link         http://autonumeric.org\n * @docs         https://docs.autonumeric.org\n *\n *               Note : Some functions are borrowed from big.js\n * @see          https://github.com/MikeMcl/big.js/\n *\n * Please report any bugs to https://github.com/autoNumeric/autoNumeric\n *\n * @license      Released under the MIT License\n * @link         http://www.opensource.org/licenses/mit-license.php\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\n//TODO Prevent having to enter relative path in the js files (i.e. using `./AutoNumericHelper` instead of just `AutoNumericHelper`) (cf. http://moduscreate.com/es6-es2015-import-no-relative-path-webpack/)\nimport AutoNumericHelper from './AutoNumericHelper';\nimport AutoNumericEnum   from './AutoNumericEnum';\nimport Evaluator         from './maths/Evaluator';\nimport Parser            from './maths/Parser';\n\n/**\n * Class declaration for the AutoNumeric object.\n *\n * An AutoNumeric element is an object wrapper that keeps a reference to the DOM element it manages (usually an <input> one), and provides autoNumeric-specific variables and functions.\n */\nexport default class AutoNumeric {\n    static options; // Those static declarations are only used by the IDE, to prevent error messages not finding those fields declarations\n    static events;\n    static defaultSettings;\n    static predefinedOptions;\n\n    /**\n     * Return the autoNumeric version number (for debugging purpose)\n     *\n     * @returns {string}\n     */\n    static version() {\n        return '4.10.9';\n    }\n\n    /**\n     * Initialize the AutoNumeric object onto the given DOM element, and attach the settings and related event listeners to it.\n     * The options passed as a parameter is an object that contains the settings (i.e. {digitGroupSeparator: \".\", decimalCharacter: \",\", currencySymbol: '€ '})\n     *\n     * @example\n     * anElement = new AutoNumeric(domElement); // With the default options\n     * anElement = new AutoNumeric(domElement, { options }); // With one option object\n     * anElement = new AutoNumeric(domElement, 'euroPos'); // With a named pre-defined string\n     * anElement = new AutoNumeric(domElement, [{ options1 }, 'euroPos', { options2 }]); // With multiple option objects (the latest option overwriting the previous ones)\n     * anElement = new AutoNumeric(domElement, null, { options }); // With one option object, and a failed initial value\n     * anElement = new AutoNumeric(domElement).french(); // With one pre-defined language object\n     * anElement = new AutoNumeric(domElement).french({ options });// With one pre-defined language object and additional options that will override the defaults\n     *\n     * // ...or init and set the value in one call :\n     * anElement = new AutoNumeric(domElement, 12345.789); // With the default options, and an initial value\n     * anElement = new AutoNumeric(domElement, 12345.789, { options });\n     * anElement = new AutoNumeric(domElement, '12345.789', { options });\n     * anElement = new AutoNumeric(domElement, 12345.789, 'euroPos');\n     * anElement = new AutoNumeric(domElement, 12345.789, [{ options1 }, 'euroPos', { options2 }]);\n     * anElement = new AutoNumeric(domElement, 12345.789).french({ options });\n     * anElement = new AutoNumeric(domElement, 12345.789, { options }).french({ options }); // Not really helpful, but possible\n     *\n     * // The AutoNumeric constructor class can also accept a string as a css selector. Under the hood this use `QuerySelector` and limit itself to only the first element it finds.\n     * anElement = new AutoNumeric('.myCssClass > input');\n     * anElement = new AutoNumeric('.myCssClass > input', { options });\n     * anElement = new AutoNumeric('.myCssClass > input', 'euroPos');\n     * anElement = new AutoNumeric('.myCssClass > input', [{ options1 }, 'euroPos', { options2 }]);\n     * anElement = new AutoNumeric('.myCssClass > input', 12345.789);\n     * anElement = new AutoNumeric('.myCssClass > input', 12345.789, { options });\n     * anElement = new AutoNumeric('.myCssClass > input', 12345.789, 'euroPos');\n     * anElement = new AutoNumeric('.myCssClass > input', 12345.789, [{ options1 }, 'euroPos', { options2 }]);\n     * anElement = new AutoNumeric('.myCssClass > input', null, { options }); // With a failed initial value\n     * anElement = new AutoNumeric('.myCssClass > input', 12345.789).french({ options });\n     *\n     * @param {object|Array|number|string} arg1\n     * @param {object|Array|number|string|null} arg2\n     * @param {object|Array|number|string|null} arg3\n     * @throws\n     */\n    constructor(arg1 = null, arg2 = null, arg3 = null) {\n        // --------------------------------------------------------\n        // -------------- Initialization\n        // Initialize the arguments\n        const { domElement, initialValue, userOptions } = AutoNumeric._setArgumentsValues(arg1, arg2, arg3);\n\n        // Initialize the element\n        this.domElement = domElement;\n\n        // Generate the settings\n        this.defaultRawValue = ''; // The default raw value to set when initializing an AutoNumeric object\n        this._setSettings(userOptions, false);\n        //TODO If `styleRules` is not null, add by default a class 'autoNumeric' that adds transition to color, background-color, border-color properties\n        // Check if the DOM element is supported\n        this._checkElement();\n\n        // Store the additional attributes inside the AutoNumeric object\n        // Note: This variable is needed and not a duplicate of `initialValueOnFirstKeydown` nor `valueOnFocus` since it serves a different purpose and has a different lifecycle\n        this.savedCancellableValue = null;\n\n        // Initialize the undo/redo variables\n        this.historyTable = []; // Keep track of *all* valid states of the element value\n        this.historyTableIndex = -1; // Pointer to the current undo/redo state. This will be set to '0' during initialization since it first adds itself.\n        this.onGoingRedo = false; // Variable that keeps track if a 'redo' is ongoing (in order to prevent an 'undo' to be launch when releasing the shift key before the ctrl key after a 'redo' shortcut)\n\n        // Initialize the parent form element, if any\n        this.parentForm = this._getParentForm();\n\n        // Set the initial value if it exists and if the `formatOnPageLoad` option will allow it\n        if (!this.runOnce && this.settings.formatOnPageLoad) {\n            // Format the element value if needed\n            this._formatDefaultValueOnPageLoad(initialValue);\n        } else {\n            // Otherwise set the `rawValue` and the element value, but do not format the latter yet\n            let valueToSet;\n            if (AutoNumericHelper.isNull(initialValue)) {\n                switch (this.settings.emptyInputBehavior) {\n                    case AutoNumeric.options.emptyInputBehavior.min:\n                        valueToSet = this.settings.minimumValue;\n                        break;\n                    case AutoNumeric.options.emptyInputBehavior.max:\n                        valueToSet = this.settings.maximumValue;\n                        break;\n                    case AutoNumeric.options.emptyInputBehavior.zero:\n                        valueToSet = '0';\n                        break;\n                    case AutoNumeric.options.emptyInputBehavior.focus:\n                    case AutoNumeric.options.emptyInputBehavior.press:\n                    case AutoNumeric.options.emptyInputBehavior.always:\n                        valueToSet = '';\n                        break;\n                    // It's possible to set the `null` value as the initial value\n                    case AutoNumeric.options.emptyInputBehavior.null:\n                        valueToSet = null;\n                        break;\n                    // When `emptyInputBehavior` is a number or a string representing a number\n                    default :\n                        valueToSet = this.settings.emptyInputBehavior;\n                }\n            } else {\n                valueToSet = initialValue;\n            }\n\n            this._setElementAndRawValue(valueToSet);\n        }\n\n        this.runOnce = true;\n\n        // Add the events listeners only on input or editable elements\n        this.hasEventListeners = false;\n        if (this.isInputElement || this.isContentEditable) {\n            if (!this.settings.noEventListeners) {\n                //XXX Here we make sure the global list is created after creating the event listeners, to only create the event listeners on `document` once\n                this._createEventListeners();\n            }\n\n            this._setWritePermissions(true);\n        }\n\n        // Save the initial values (html attribute + element.value) for the pristine test\n        this._saveInitialValues(initialValue);\n        \n        // Set up the data for the persistent storage solution (i.e. sessionStorage)\n        this.storageNamePrefix = 'AUTO_'; // The prefix for the raw value storage name variable can be modified here\n        this._setPersistentStorageName();\n\n        // --------------------------------------------------------\n        // -------------- Tracking\n        this.validState = true; // Keep track if the element is in the valid state\n        this.isFocused = false; // Keep track if the element is currently focused\n        this.isWheelEvent = false; // Keep track if a mouse wheel event is currently ongoing\n        this.isDropEvent = false; // Keep track if a drop event is currently ongoing\n        this.isEditing = false; // Keep track if the user is currently editing the element\n        this.rawValueOnFocus = void(0); // Keep track of the rawValue (needed to define if a change event must be sent on blur or enter key)\n        // Watch any external changes to the element value/textContent/nodeValue and `set()` the new value so that it gets formatted/saved in the history\n        this.internalModification = false; // This is temporarily set to `true` only when the AutoNumeric object does update the element value\n        this.attributeToWatch = this._getAttributeToWatch();\n        this.getterSetter = Object.getOwnPropertyDescriptor(this.domElement.__proto__, this.attributeToWatch);\n        this._addWatcher();\n\n        if (this.settings.createLocalList) {\n            // Keep track of every AutoNumeric elements that this object initialized\n            this._createLocalList();\n        }\n\n        // Keep track of all AutoNumeric elements in the current web page\n        this.constructor._addToGlobalList(this);\n\n        // --------------------------------------------------------\n        // -------------- Methods\n        // Create the global functions\n        this.global = {\n            /**\n             * Set the same given element value for each element in the local AutoNumeric element list, and format those elements immediately\n             *\n             * @param {number|string} newValue The value must be a number or a numeric string\n             * @param {object} options A settings object that will override the current settings. Note: the update is done only if the `newValue` is defined.\n             */\n            set: (newValue, options = null) => {\n                this.autoNumericLocalList.forEach(aNObject => {\n                    aNObject.set(newValue, options);\n                });\n            },\n\n            /**\n             * Set the value given value directly as the DOM element value, without formatting it beforehand.\n             * This sets the same unformatted value for each element in the local AutoNumeric element list.\n             *\n             * @param {number|string} value\n             * @param {object} options\n             */\n            setUnformatted: (value, options = null) => {\n                this.autoNumericLocalList.forEach(aNObject => {\n                    aNObject.setUnformatted(value, options);\n                });\n            },\n\n            /**\n             * This is an alias of the `getNumericString()` function, and should not be used anymore.\n             *\n             * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n             * @returns {Array<string>}\n             * @deprecated\n             */\n            get: (callback = null) => {\n                const result = [];\n                this.autoNumericLocalList.forEach(aNObject => {\n                    result.push(aNObject.get());\n                });\n                this._executeCallback(result, callback);\n\n                return result;\n            },\n\n            /**\n             * Return an array of the unformatted values (as a string) of each AutoNumeric element of the local AutoNumeric element list\n             *\n             * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n             * @returns {Array<string>}\n             */\n            getNumericString: (callback = null) => {\n                const result = [];\n                this.autoNumericLocalList.forEach(aNObject => {\n                    result.push(aNObject.getNumericString());\n                });\n                this._executeCallback(result, callback);\n\n                return result;\n            },\n\n            /**\n             * Return an array of the current formatted values (as a string) of each AutoNumeric element of the local AutoNumeric element list\n             *\n             * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n             * @returns {Array<string>}\n             */\n            getFormatted: (callback = null) => {\n                const result = [];\n                this.autoNumericLocalList.forEach(aNObject => {\n                    result.push(aNObject.getFormatted());\n                });\n                this._executeCallback(result, callback);\n\n                return result;\n            },\n\n            /**\n             * Return an array of the element unformatted values (as a real Javascript number), for each element of the local AutoNumeric element list\n             *\n             * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n             * @returns {Array<number>}\n             */\n            getNumber: (callback = null) => {\n                const result = [];\n                this.autoNumericLocalList.forEach(aNObject => {\n                    result.push(aNObject.getNumber());\n                });\n                this._executeCallback(result, callback);\n\n                return result;\n            },\n\n            /**\n             * Returns the unformatted values (following the `outputFormat` setting) of each element of the local AutoNumeric element list into an array\n             *\n             * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n             * @returns {Array<string>}\n             */\n            getLocalized: (callback = null) => {\n                const result = [];\n                this.autoNumericLocalList.forEach(aNObject => {\n                    result.push(aNObject.getLocalized());\n                });\n                this._executeCallback(result, callback);\n\n                return result;\n            },\n\n            /**\n             * Force each element of the local AutoNumeric element list to reformat its value\n             */\n            reformat: () => {\n                this.autoNumericLocalList.forEach(aNObject => {\n                    aNObject.reformat();\n                });\n            },\n\n            /**\n             * Remove the formatting and keep only the raw unformatted value (as a numericString) in each element of the local AutoNumeric element list\n             */\n            unformat: () => {\n                this.autoNumericLocalList.forEach(aNObject => {\n                    aNObject.unformat();\n                });\n            },\n\n            /**\n             * Remove the formatting and keep only the localized unformatted value in the element, with the option to override the default outputFormat if needed\n             *\n             * @param {null|string} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n             */\n            unformatLocalized: (forcedOutputFormat = null) => {\n                this.autoNumericLocalList.forEach(aNObject => {\n                    aNObject.unformatLocalized(forcedOutputFormat);\n                });\n            },\n\n            /**\n             * Updates the AutoNumeric settings, and immediately format the elements accordingly, for each element of the local AutoNumeric element list\n             *\n             * @param {object} newOptions This can be either one or more option objects\n             */\n            update: (...newOptions) => {\n                this.autoNumericLocalList.forEach(aNObject => {\n                    aNObject.update(...newOptions);\n                });\n            },\n\n            /**\n             * Return `true` if *all* the autoNumeric-managed elements are pristine, if their raw value hasn't changed.\n             * By default, this returns `true` if the raw unformatted value is still the same even if the formatted one has changed (due to a configuration update for instance).\n             *\n             * @param {boolean} checkOnlyRawValue If set to `true`, the pristine value is done on the raw unformatted value, not the formatted one. If set to `false`, this also checks that the formatted value hasn't changed.\n             * @returns {boolean}\n             */\n            isPristine: (checkOnlyRawValue = true) => {\n                let isPristine = true;\n                this.autoNumericLocalList.forEach(aNObject => {\n                    if (isPristine && !aNObject.isPristine(checkOnlyRawValue)) {\n                        isPristine = false;\n                    }\n                });\n\n                return isPristine;\n            },\n\n            /**\n             * Execute the `clear()` method on each AutoNumeric object in the local AutoNumeric element list\n             *\n             * @param {boolean} forceClearAll\n             */\n            clear: (forceClearAll = false) => {\n                this.autoNumericLocalList.forEach(aNObject => {\n                    aNObject.clear(forceClearAll);\n                });\n            },\n\n            /**\n             * Execute the `remove()` method on each AutoNumeric object in the local AutoNumeric element list\n             */\n            remove: () => {\n                this.autoNumericLocalList.forEach(aNObject => {\n                    aNObject.remove();\n                });\n            },\n\n            /**\n             * Execute the `wipe()` method on each AutoNumeric object in the local AutoNumeric element list\n             */\n            wipe: () => {\n                this.autoNumericLocalList.forEach(aNObject => {\n                    aNObject.wipe();\n                });\n            },\n\n            /**\n             * Execute the `nuke()` method on each AutoNumeric object in the local AutoNumeric element list\n             */\n            nuke: () => {\n                this.autoNumericLocalList.forEach(aNObject => {\n                    aNObject.nuke();\n                });\n            },\n\n            /**\n             * Return `true` if the given AutoNumeric object (or DOM element) is in the local AutoNumeric element list\n             *\n             * @param {HTMLElement|HTMLInputElement|AutoNumeric} domElementOrAutoNumericObject\n             * @returns {*}\n             */\n            has: domElementOrAutoNumericObject => {\n                let result;\n                if (domElementOrAutoNumericObject instanceof AutoNumeric) {\n                    result = this.autoNumericLocalList.has(domElementOrAutoNumericObject.node());\n                } else {\n                    result = this.autoNumericLocalList.has(domElementOrAutoNumericObject);\n                }\n\n                return result;\n            },\n\n            /**\n             * Add an existing AutoNumeric object (or DOM element) to the local AutoNumeric element list, using the DOM element as the key.\n             * This manages the case where `addObject` is used on an AutoNumeric object that already has multiple elements in its local list.\n             *\n             * @param {HTMLElement|HTMLInputElement|AutoNumeric} domElementOrAutoNumericObject\n             */\n            addObject: domElementOrAutoNumericObject => {\n                // Start with the same data, whatever the user passed as arguments\n                let domElement;\n                let otherAutoNumericObject;\n                if (domElementOrAutoNumericObject instanceof AutoNumeric) {\n                    domElement = domElementOrAutoNumericObject.node();\n                    otherAutoNumericObject = domElementOrAutoNumericObject;\n                } else {\n                    domElement = domElementOrAutoNumericObject;\n                    otherAutoNumericObject = AutoNumeric.getAutoNumericElement(domElement);\n                }\n\n                // Check if the current autoNumeric object has a local list\n                if (!this._hasLocalList()) {\n                    this._createLocalList();\n                }\n\n                // Check if the other autoNumeric object has a local list...\n                let otherANLocalList = otherAutoNumericObject._getLocalList();\n                if (otherANLocalList.size === 0) {\n                    // Special case if the other AutoNumeric object has an empty local list, then populate itself to it\n                    otherAutoNumericObject._createLocalList();\n                    otherANLocalList = otherAutoNumericObject._getLocalList(); // Update the other local list\n                }\n\n                let mergedLocalLists;\n                if (otherANLocalList instanceof Map) {\n                    // ...If it does, merge the local lists together\n                    mergedLocalLists = AutoNumericHelper.mergeMaps(this._getLocalList(), otherANLocalList);\n                } else {\n                    // ...If not, just set the current local list onto the other AutoNumeric object\n                    // We need to specify the AutoNumeric object, otherwise the `_addToLocalList` function would not correctly add the AutoNumeric object since we would not have a reference to it, but a reference to the current AutoNumeric object on which is called this method.\n                    this._addToLocalList(domElement, otherAutoNumericObject);\n                    mergedLocalLists = this._getLocalList();\n                }\n\n                // Update the resulting list, on all the objects of that local list (so that we can indifferently use `init()` on any object belonging to that list)\n                mergedLocalLists.forEach(aNObject => {\n                    aNObject._setLocalList(mergedLocalLists);\n                });\n            },\n\n            /**\n             * Remove the given AutoNumeric object (or DOM element) from the local AutoNumeric element list, using the DOM element as the key.\n             * If this function attempts to remove the current AutoNumeric object from the local list, a warning is shown, but the deletion is still done.\n             *\n             * Special cases :\n             * - If the current object removes itself, then it's removed from the shared local list, then a new empty local list is used/created\n             * - If another object remove this object, then a local list with only this object is used/created\n             *\n             * @param {HTMLElement|HTMLInputElement|AutoNumeric} domElementOrAutoNumericObject\n             * @param {boolean} keepCurrentANObject If set to `false`, then the function will also remove the current AutoNumeric object if asked, otherwise it will ignore it and print a warning message\n             */\n            removeObject: (domElementOrAutoNumericObject, keepCurrentANObject = false) => {\n                // Start with the same data, whatever the user passed as arguments\n                let domElement;\n                let otherAutoNumericObject;\n                if (domElementOrAutoNumericObject instanceof AutoNumeric) {\n                    domElement = domElementOrAutoNumericObject.node();\n                    otherAutoNumericObject = domElementOrAutoNumericObject;\n                } else {\n                    domElement = domElementOrAutoNumericObject;\n                    otherAutoNumericObject = AutoNumeric.getAutoNumericElement(domElement);\n                }\n\n                // Remove the other object from the local list\n                const initialCompleteLocalList = this.autoNumericLocalList;\n                this.autoNumericLocalList.delete(domElement);\n\n                // Update the local list for all objects in it\n                initialCompleteLocalList.forEach(aNObject => {\n                    aNObject._setLocalList(this.autoNumericLocalList);\n                });\n\n                if (!keepCurrentANObject && domElement === this.node()) {\n                    // This object is removed by itself\n                    // Empty the object local list\n                    otherAutoNumericObject._setLocalList(new Map);\n                } else {\n                    // This object is removed by another object\n                    // Set the local list for the removed object, with only this object in it\n                    otherAutoNumericObject._createLocalList();\n                }\n            },\n\n            /**\n             * Remove all elements from the shared list, effectively emptying it.\n             * This is the equivalent of calling `detach()` on each of its elements.\n             *\n             * @param {boolean} keepEachANObjectInItsOwnList If set to `true`, then instead of completely emptying the local list of each AutoNumeric objects, each one of those keeps itself in its own local list\n             */\n            empty: (keepEachANObjectInItsOwnList = false) => {\n                const initialCompleteLocalList = this.autoNumericLocalList;\n\n                // Update the local list for all objects in it\n                initialCompleteLocalList.forEach(aNObject => {\n                    if (keepEachANObjectInItsOwnList) {\n                        aNObject._createLocalList();\n                    } else {\n                        aNObject._setLocalList(new Map);\n                    }\n                });\n            },\n\n            /**\n             * Return an array containing all the AutoNumeric DOM elements that have been initialized by each other\n             *\n             * @returns {Array<HTMLElement>}\n             */\n            elements: () => {\n                const result = [];\n                this.autoNumericLocalList.forEach(aNObject => {\n                    result.push(aNObject.node());\n                });\n\n                return result;\n            },\n\n            /**\n             * Return the `Map` object directly\n             * @returns {Map}\n             */\n            getList: () => this.autoNumericLocalList,\n\n            /**\n             * Return the number of element in the local AutoNumeric element list\n             * @returns {number}\n             */\n            size: () => this.autoNumericLocalList.size,\n        };\n\n        // Create the functions that will allow to change each setting one by one\n        /**\n         * For each option, we define if we need to reformat the element content (does changing the options should change the way its value is displayed?).\n         * If yes, then we use the `update()` for force a reformat, otherwise, we just update the `settings` object.\n         */\n        this.options = {\n            /**\n             * Reset any options set previously, by overwriting them with the default settings\n             *\n             * @returns {AutoNumeric}\n             */\n            reset                        : () => {\n                //TODO Add a `settings` parameter so that the user can reset to a specific set of settings. This is different than update since it drops any non-default settings before using those new settings.\n                this.settings = { rawValue : this.defaultRawValue }; // Here we pass the default rawValue in order to prevent showing a warning that we try to set an `undefined` value\n                this.update(AutoNumeric.defaultSettings);\n\n                return this;\n            },\n            allowDecimalPadding          : allowDecimalPadding => {\n                this.update({ allowDecimalPadding });\n\n                return this;\n            },\n            alwaysAllowDecimalCharacter  : alwaysAllowDecimalCharacter => { //FIXME Test this\n                this.update({ alwaysAllowDecimalCharacter });\n\n                return this;\n            },\n            caretPositionOnFocus         : caretPositionOnFocus => { //FIXME test this\n                this.settings.caretPositionOnFocus = caretPositionOnFocus;\n\n                return this;\n            },\n            createLocalList              : createLocalList => {\n                this.settings.createLocalList = createLocalList;\n\n                // Delete the local list when this is set to `false`, create it if this is set to `true` and there is not pre-existing list\n                if (this.settings.createLocalList) {\n                    if (!this._hasLocalList()) {\n                        this._createLocalList();\n                    }\n                } else {\n                    this._deleteLocalList();\n                }\n\n                return this;\n            },\n            currencySymbol               : currencySymbol => {\n                this.update({ currencySymbol });\n\n                return this;\n            },\n            currencySymbolPlacement      : currencySymbolPlacement => {\n                this.update({ currencySymbolPlacement });\n\n                return this;\n            },\n            decimalCharacter             : decimalCharacter => {\n                this.update({ decimalCharacter });\n\n                return this;\n            },\n            decimalCharacterAlternative  : decimalCharacterAlternative => {\n                this.settings.decimalCharacterAlternative = decimalCharacterAlternative;\n\n                return this;\n            },\n            /**\n             * Update the decimal places globally, which means this override any previously set number of decimal shown on focus, on blur, or in the raw value.\n             *\n             * @param {int} decimalPlaces\n             * @returns {AutoNumeric}\n             */\n            decimalPlaces                : decimalPlaces => {\n                AutoNumericHelper.warning('Using `options.decimalPlaces()` instead of calling the specific `options.decimalPlacesRawValue()`, `options.decimalPlacesShownOnFocus()` and `options.decimalPlacesShownOnBlur()` methods will reset those options.\\nPlease call the specific methods if you do not want to reset those.', this.settings.showWarnings);\n                this.update({ decimalPlaces });\n\n                return this;\n            },\n            decimalPlacesRawValue        : decimalPlacesRawValue => { //FIXME test this\n                this.update({ decimalPlacesRawValue });\n\n                return this;\n            },\n            decimalPlacesShownOnBlur     : decimalPlacesShownOnBlur => {\n                this.update({ decimalPlacesShownOnBlur });\n\n                return this;\n            },\n            decimalPlacesShownOnFocus    : decimalPlacesShownOnFocus => {\n                this.update({ decimalPlacesShownOnFocus });\n\n                return this;\n            },\n            defaultValueOverride         : defaultValueOverride => {\n                this.update({ defaultValueOverride });\n\n                return this;\n            },\n            digitalGroupSpacing          : digitalGroupSpacing => {\n                this.update({ digitalGroupSpacing });\n\n                return this;\n            },\n            digitGroupSeparator          : digitGroupSeparator => {\n                this.update({ digitGroupSeparator });\n\n                return this;\n            },\n            divisorWhenUnfocused         : divisorWhenUnfocused => {\n                this.update({ divisorWhenUnfocused });\n\n                return this;\n            },\n            emptyInputBehavior           : emptyInputBehavior => {\n                if (this.rawValue === null && emptyInputBehavior !== AutoNumeric.options.emptyInputBehavior.null) {\n                    // Special case : if the current `rawValue` is `null` and the `emptyInputBehavior` is changed to something else than `'null'`, then it makes that `rawValue` invalid.\n                    // Here we can either prevent the option update and throw an error, or still accept the option update and update the value from `null` to `''`.\n                    // We cannot keep `rawValue` to `null` since if `emptyInputBehavior` is not set to `null`, lots of function assume `rawValue` is a string.\n                    AutoNumericHelper.warning(`You are trying to modify the \\`emptyInputBehavior\\` option to something different than \\`'null'\\` (${emptyInputBehavior}), but the element raw value is currently set to \\`null\\`. This would result in an invalid \\`rawValue\\`. In order to fix that, the element value has been changed to the empty string \\`''\\`.`, this.settings.showWarnings);\n                    this.rawValue = '';\n                }\n\n                this.update({ emptyInputBehavior });\n\n                return this;\n            },\n            eventBubbles                 : eventBubbles => {\n                this.settings.eventBubbles = eventBubbles;\n\n                return this;\n            },\n            eventIsCancelable            : eventIsCancelable => {\n                this.settings.eventIsCancelable = eventIsCancelable;\n\n                return this;\n            },\n            failOnUnknownOption          : failOnUnknownOption => {\n                this.settings.failOnUnknownOption = failOnUnknownOption; //TODO test this with unit tests\n\n                return this;\n            },\n            formatOnPageLoad             : formatOnPageLoad => {\n                this.settings.formatOnPageLoad = formatOnPageLoad; //TODO test this with unit tests\n\n                return this;\n            },\n            formulaMode                  : formulaMode => {\n                this.settings.formulaMode = formulaMode; //TODO test this with unit tests\n\n                return this;\n            },\n            historySize                  : historySize => {\n                this.settings.historySize = historySize;\n\n                return this;\n            },\n            invalidClass                 : invalidClass => {\n                this.settings.invalidClass = invalidClass; //TODO test this with unit tests\n\n                return this;\n            },\n            isCancellable                : isCancellable => {\n                this.settings.isCancellable = isCancellable; //TODO test this with unit tests\n\n                return this;\n            },\n            leadingZero                  : leadingZero => {\n                this.update({ leadingZero });\n\n                return this;\n            },\n            maximumValue                 : maximumValue => {\n                this.update({ maximumValue });\n\n                return this;\n            },\n            minimumValue                 : minimumValue => {\n                this.update({ minimumValue });\n\n                return this;\n            },\n            modifyValueOnUpDownArrow     : modifyValueOnUpDownArrow => {\n                this.settings.modifyValueOnUpDownArrow = modifyValueOnUpDownArrow; //TODO test this with unit tests\n\n                return this;\n            },\n            modifyValueOnWheel           : modifyValueOnWheel => {\n                this.settings.modifyValueOnWheel = modifyValueOnWheel; //TODO test this with unit tests\n\n                return this;\n            },\n            negativeBracketsTypeOnBlur   : negativeBracketsTypeOnBlur => {\n                this.update({ negativeBracketsTypeOnBlur });\n\n                return this;\n            },\n            negativePositiveSignPlacement: negativePositiveSignPlacement => {\n                this.update({ negativePositiveSignPlacement });\n\n                return this;\n            },\n            negativeSignCharacter        : negativeSignCharacter => {\n                this.update({ negativeSignCharacter });\n\n                return this;\n            },\n            negativePositiveSignBehavior : negativePositiveSignBehavior => {\n                this.settings.negativePositiveSignBehavior = negativePositiveSignBehavior; //TODO test this with unit tests\n\n                return this;\n            },\n            noEventListeners             : noEventListeners => { //TODO test this with unit tests\n                if (noEventListeners === AutoNumeric.options.noEventListeners.noEvents && this.settings.noEventListeners === AutoNumeric.options.noEventListeners.addEvents) {\n                    // Remove the events once\n                    this._removeEventListeners();\n                }\n\n                this.update({ noEventListeners });\n\n                return this;\n            },\n            onInvalidPaste               : onInvalidPaste => {\n                this.settings.onInvalidPaste = onInvalidPaste; //TODO test this with unit tests\n\n                return this;\n            },\n            outputFormat                 : outputFormat => {\n                this.settings.outputFormat = outputFormat;\n\n                return this;\n            },\n            overrideMinMaxLimits         : overrideMinMaxLimits => {\n                this.update({ overrideMinMaxLimits });\n\n                return this;\n            },\n            positiveSignCharacter        : positiveSignCharacter => {\n                this.update({ positiveSignCharacter });\n\n                return this;\n            },\n            rawValueDivisor              : rawValueDivisor => {\n                this.update({ rawValueDivisor });\n\n                return this;\n            },\n            readOnly                     : readOnly => {\n                // When changing the readOnly attribute, the raw and formatted values do not change, so no need to call the costly 'update()` method\n                this.settings.readOnly = readOnly;\n                this._setWritePermissions();\n\n                return this;\n            },\n            roundingMethod               : roundingMethod => {\n                this.update({ roundingMethod });\n\n                return this;\n            },\n            saveValueToSessionStorage    : saveValueToSessionStorage => {\n                this.update({ saveValueToSessionStorage });\n\n                return this;\n            },\n            symbolWhenUnfocused          : symbolWhenUnfocused => {\n                this.update({ symbolWhenUnfocused });\n\n                return this;\n            },\n            selectNumberOnly             : selectNumberOnly => {\n                this.settings.selectNumberOnly = selectNumberOnly; //TODO test this with unit tests\n\n                return this;\n            },\n            selectOnFocus                : selectOnFocus => {\n                this.settings.selectOnFocus = selectOnFocus; //TODO test this with unit tests\n\n                return this;\n            },\n            serializeSpaces              : serializeSpaces => {\n                this.settings.serializeSpaces = serializeSpaces; //TODO test this with unit tests\n\n                return this;\n            },\n            showOnlyNumbersOnFocus       : showOnlyNumbersOnFocus => {\n                this.update({ showOnlyNumbersOnFocus });\n\n                return this;\n            },\n            showPositiveSign             : showPositiveSign => {\n                this.update({ showPositiveSign });\n\n                return this;\n            },\n            showWarnings                 : showWarnings => {\n                this.settings.showWarnings = showWarnings; //TODO test this with unit tests\n\n                return this;\n            },\n            styleRules                   : styleRules => {\n                this.update({ styleRules });\n\n                return this;\n            },\n            suffixText                   : suffixText => {\n                this.update({ suffixText });\n\n                return this;\n            },\n            unformatOnHover              : unformatOnHover => {\n                this.settings.unformatOnHover = unformatOnHover; //TODO test this with unit tests\n\n                return this;\n            },\n            unformatOnSubmit             : unformatOnSubmit => {\n                this.settings.unformatOnSubmit = unformatOnSubmit; //TODO test this with unit tests\n\n                return this;\n            },\n            upDownStep                   : upDownStep => {\n                this.settings.upDownStep = upDownStep; //TODO test this with unit tests\n\n                return this;\n            },\n            valuesToStrings              : valuesToStrings => {\n                this.update({ valuesToStrings });\n\n                return this;\n            },\n            watchExternalChanges         : watchExternalChanges => { //TODO test this with unit tests\n                this.update({ watchExternalChanges });\n\n                return this;\n            },\n            wheelOn                      : wheelOn => {\n                this.settings.wheelOn = wheelOn; //TODO test this with unit tests\n\n                return this;\n            },\n            wheelStep                    : wheelStep => {\n                this.settings.wheelStep = wheelStep; //TODO test this with unit tests\n\n                return this;\n            },\n        };\n\n        // Once the autoNumeric element has been initialized, broadcast that message with additional info.\n        // Note: When using `AutoNumeric.multiple()`, one event is sent *per* element initialized\n        this._triggerEvent(AutoNumeric.events.initialized, this.domElement, {\n            newValue   : AutoNumericHelper.getElementValue(this.domElement),\n            newRawValue: this.rawValue,\n            error      : null,\n            aNElement  : this,\n        });\n    }\n\n    /**\n     * Take the parameters given to the AutoNumeric object, and output the three variables that are needed to finish initializing it :\n     * - domElement : The target DOM element\n     * - initialValue : The initial value, or `null` if none is given\n     * - userOptions : The option object\n     *\n     * @param {object|Array|number|string} arg1\n     * @param {object|Array|number|string|null} arg2\n     * @param {object|Array|number|string|null} arg3\n     * @returns {{domElement: *, initialValue: *, userOptions: *}}\n     * @throws\n     * @private\n     */\n    static _setArgumentsValues(arg1, arg2, arg3) {\n        // Basic check on the argument count\n        if (AutoNumericHelper.isNull(arg1)) {\n            AutoNumericHelper.throwError('At least one valid parameter is needed in order to initialize an AutoNumeric object');\n        }\n\n        // Prepare the arguments in order to create the AutoNumeric object with the right values\n        // Test the argument types\n        const isArg1Element = AutoNumericHelper.isElement(arg1);\n        const isArg1String = AutoNumericHelper.isString(arg1);\n\n        const isArg2Object = AutoNumericHelper.isObject(arg2);\n        const isArg2Array = Array.isArray(arg2) && arg2.length > 0;\n        const isArg2Number = AutoNumericHelper.isNumberOrArabic(arg2) || arg2 === '';\n        const isArg2PreDefinedOptionName = this._isPreDefinedOptionValid(arg2);\n        const isArg2Null = AutoNumericHelper.isNull(arg2);\n        const isArg2EmptyString = AutoNumericHelper.isEmptyString(arg2);\n\n        const isArg3Object = AutoNumericHelper.isObject(arg3);\n        const isArg3Array = Array.isArray(arg3) && arg3.length > 0;\n        const isArg3Null = AutoNumericHelper.isNull(arg3);\n        const isArg3PreDefinedOptionName = this._isPreDefinedOptionValid(arg3);\n\n        // Given the parameters passed, sort the data and return a stable state before the initialization\n        let domElement;\n        let userOptions;\n        let initialValue;\n\n        //TODO Simplify those tests -->\n        if (isArg1Element && isArg2Null && isArg3Null) {\n            // new AutoNumeric(domElement); // With the default options\n            domElement = arg1;\n            initialValue = null;\n            userOptions = null;\n        } else if (isArg1Element && isArg2Number && isArg3Null) {\n            // new AutoNumeric(domElement, 12345.789); // With the default options, and an initial value\n            // new AutoNumeric(domElement, '12345.789');\n            domElement = arg1;\n            initialValue = arg2;\n            userOptions = null;\n        } else if (isArg1Element && isArg2Object && isArg3Null) {\n            // new AutoNumeric(domElement, { options }); // With one option object\n            domElement = arg1;\n            initialValue = null;\n            userOptions = arg2;\n        } else if (isArg1Element && isArg2PreDefinedOptionName && isArg3Null) {\n            // new AutoNumeric(domElement, 'euroPos'); // With one pre-defined option name\n            domElement = arg1;\n            initialValue = null;\n            userOptions = this._getOptionObject(arg2);\n        } else if (isArg1Element && isArg2Array && isArg3Null) {\n            // new AutoNumeric(domElement, [{ options1 }, { options2 }]); // With multiple option objects (the latest option overwriting the previous ones)\n            domElement = arg1;\n            initialValue = null;\n            userOptions = this.mergeOptions(arg2);\n        } else if (isArg1Element && (isArg2Null || isArg2EmptyString) && isArg3Object) {\n            // new AutoNumeric(domElement, null, { options }); // With one option object\n            domElement = arg1;\n            initialValue = null;\n            userOptions = arg3;\n        } else if (isArg1Element && (isArg2Null || isArg2EmptyString) && isArg3Array) {\n            // new AutoNumeric(domElement, null, [{ options1 }, { options2 }]); // With multiple option objects\n            domElement = arg1;\n            initialValue = null;\n            userOptions = this.mergeOptions(arg3);\n        } else if (isArg1String && isArg2Null && isArg3Null) {\n            // new AutoNumeric('.myCssClass > input');\n            domElement = document.querySelector(arg1);\n            initialValue = null;\n            userOptions = null;\n        } else if (isArg1String && isArg2Object && isArg3Null) {\n            // new AutoNumeric('.myCssClass > input', { options });\n            domElement = document.querySelector(arg1);\n            initialValue = null;\n            userOptions = arg2;\n        } else if (isArg1String && isArg2PreDefinedOptionName && isArg3Null) {\n            // new AutoNumeric('.myCssClass > input', 'euroPos');\n            domElement = document.querySelector(arg1);\n            initialValue = null;\n            userOptions = this._getOptionObject(arg2);\n        } else if (isArg1String && isArg2Array && isArg3Null) {\n            // new AutoNumeric('.myCssClass > input', [{ options1 }, { options2 }]); // With multiple option objects\n            domElement = document.querySelector(arg1);\n            initialValue = null;\n            userOptions = this.mergeOptions(arg2);\n        } else if (isArg1String && (isArg2Null || isArg2EmptyString) && isArg3Object) {\n            // new AutoNumeric('.myCssClass > input', null, { options });\n            domElement = document.querySelector(arg1);\n            initialValue = null;\n            userOptions = arg3;\n        } else if (isArg1String && (isArg2Null || isArg2EmptyString) && isArg3Array) {\n            // new AutoNumeric('.myCssClass > input', null, [{ options1 }, { options2 }]); // With multiple option objects\n            domElement = document.querySelector(arg1);\n            initialValue = null;\n            userOptions = this.mergeOptions(arg3);\n        } else if (isArg1String && isArg2Number && isArg3Null) {\n            // new AutoNumeric('.myCssClass > input', 12345.789);\n            // new AutoNumeric('.myCssClass > input', '12345.789');\n            // new AutoNumeric('.myCssClass > input', '');\n            domElement = document.querySelector(arg1);\n            initialValue = arg2;\n            userOptions = null;\n        } else if (isArg1String && isArg2Number && isArg3Object) {\n            // new AutoNumeric('.myCssClass > input', 12345.789, { options });\n            // new AutoNumeric('.myCssClass > input', '12345.789', { options });\n            // new AutoNumeric('.myCssClass > input', '', { options });\n            domElement = document.querySelector(arg1);\n            initialValue = arg2;\n            userOptions = arg3;\n        } else if (isArg1String && isArg2Number && isArg3PreDefinedOptionName) {\n            // new AutoNumeric('.myCssClass > input', 12345.789, 'euroPos');\n            // new AutoNumeric('.myCssClass > input', '12345.789', 'euroPos');\n            // new AutoNumeric('.myCssClass > input', '', 'euroPos');\n            domElement = document.querySelector(arg1);\n            initialValue = arg2;\n            userOptions = this._getOptionObject(arg3);\n        } else if (isArg1String && isArg2Number && isArg3Array) {\n            // new AutoNumeric('.myCssClass > input', 12345.789, [{ options1 }, 'euroPos', { options2 }]);\n            // new AutoNumeric('.myCssClass > input', '12345.789', [{ options1 }, 'euroPos', { options2 }]);\n            // new AutoNumeric('.myCssClass > input', '', [{ options1 }, 'euroPos', { options2 }]);\n            domElement = document.querySelector(arg1);\n            initialValue = arg2;\n            userOptions = this.mergeOptions(arg3);\n        } else if (isArg1Element && isArg2Number && isArg3Object) {\n            // new AutoNumeric(domElement, 12345.789, { options });\n            // new AutoNumeric(domElement, '12345.789', { options });\n            // new AutoNumeric(domElement, '', { options });\n            domElement = arg1;\n            initialValue = arg2;\n            userOptions = arg3;\n        } else if (isArg1Element && isArg2Number && isArg3PreDefinedOptionName) {\n            // new AutoNumeric(domElement, 12345.789, 'euroPos');\n            // new AutoNumeric(domElement, '12345.789', 'euroPos');\n            // new AutoNumeric(domElement, '', 'euroPos');\n            domElement = arg1;\n            initialValue = arg2;\n            userOptions = this._getOptionObject(arg3);\n        } else if (isArg1Element && isArg2Number && isArg3Array) {\n            // new AutoNumeric(domElement, 12345.789, [{ options1 }, { options2 }]);\n            // new AutoNumeric(domElement, '12345.789', [{ options1 }, { options2 }]);\n            // new AutoNumeric(domElement, '', [{ options1 }, { options2 }]);\n            domElement = arg1;\n            initialValue = arg2;\n            userOptions = this.mergeOptions(arg3);\n        } else {\n            AutoNumericHelper.throwError(`The parameters given to the AutoNumeric object are not valid, '${arg1}', '${arg2}' and '${arg3}' given.`);\n        }\n\n        if (AutoNumericHelper.isNull(domElement)) {\n            AutoNumericHelper.throwError(`The selector '${arg1}' did not select any valid DOM element. Please check on which element you called AutoNumeric.`);\n        }\n\n        return { domElement, initialValue, userOptions };\n    }\n\n    /**\n     * Merge the option objects found in the given array `optionsArray`.\n     * If a `string` is found, then we try to get the related pre-defined option using that string as its name.\n     * When merging the options, the latest option overwrite any previously set. This allows to fine tune a pre-defined option for instance.\n     *\n     * @param {Array<object|string>} optionsArray\n     * @returns {{}}\n     */\n    static mergeOptions(optionsArray) {\n        // This allows the user to use multiple options (strings or objects) in an array, and overwrite the previous one with the next option element ; this is useful to tune the wanted format\n        const mergedOptions = {};\n        optionsArray.forEach(optionObjectOrPredefinedOptionString => {\n            Object.assign(mergedOptions, this._getOptionObject(optionObjectOrPredefinedOptionString));\n        });\n\n        return mergedOptions;\n    }\n\n    /**\n     * Return `true` if the given pre-defined option name is an attribute of the `AutoNumeric.predefinedOptions` object\n     *\n     * @param {string} preDefinedOptionName\n     * @returns {boolean}\n     * @private\n     */\n    static _isPreDefinedOptionValid(preDefinedOptionName) {\n        return Object.prototype.hasOwnProperty.call(AutoNumeric.predefinedOptions, preDefinedOptionName);\n    }\n\n    /**\n     * Return an option object based on the given parameter.\n     * If `optionObjectOrPredefinedName` is as string, then we retrieve the pre-defined option object, if it's an object, we use it as is.\n     *\n     * @param {object|string} optionObjectOrPredefinedName\n     * @returns {object}\n     */\n    static _getOptionObject(optionObjectOrPredefinedName) {\n        let options;\n        if (AutoNumericHelper.isString(optionObjectOrPredefinedName)) {\n            options = AutoNumeric.getPredefinedOptions()[optionObjectOrPredefinedName];\n            if (options === void(0) || options === null) {\n                // If the given pre-defined name does not exist, warn that something is wrong, and continue the execution of the initialization\n                AutoNumericHelper.warning(`The given pre-defined option [${optionObjectOrPredefinedName}] is not recognized by autoNumeric. Please check that pre-defined option name.`, true);\n            }\n        } else { // A `settings` object\n            options = optionObjectOrPredefinedName;\n        }\n\n        return options;\n    }\n\n    /**\n     * Save the initial element values for later use in the pristine test.\n     * Those values are :\n     * - the html attribute (i.e. <input value='42'>), and\n     * - the script `value` (i.e. `let domElement.value`)\n     *\n     * @param {null|number|string} initialValue\n     * @private\n     */\n    _saveInitialValues(initialValue) {\n        // Keep the very first initial values (in the html attribute and set by the script). This is needed to check if the element is pristine.\n        // Save the html attribute 'value'\n        this.initialValueHtmlAttribute = AutoNumericHelper.scientificToDecimal(this.domElement.getAttribute('value'));\n        if (AutoNumericHelper.isNull(this.initialValueHtmlAttribute)) {\n            // Set the default empty value attribute instead of `null`, since if the initial value is null, the empty string is used\n            this.initialValueHtmlAttribute = '';\n        }\n\n        // Save the 'script' value\n        this.initialValue = initialValue;\n        if (AutoNumericHelper.isNull(this.initialValue)) {\n            // Same as above\n            this.initialValue = '';\n        }\n    }\n\n    /**\n     * Generate all the event listeners for the given DOM element\n     * @private\n     */\n    _createEventListeners() {\n        this.formulaMode = false;\n        this.compositioning = false;\n        // Create references to the event handler functions, so we can then cleanly remove those listeners if needed\n        // That would not be possible if we used closures directly in the event handler declarations\n        this._onFocusInFunc = e => { this._onFocusIn(e); };\n        this._onFocusInAndMouseEnterFunc = e => { this._onFocusInAndMouseEnter(e); };\n        this._onFocusFunc = () => { this._onFocus(); };\n        this._onKeydownFunc = e => { this._onKeydown(e); };\n        this._onKeypressFunc = e => { this._onKeypress(e); };\n        this._onKeyupFunc = e => { this._onKeyup(e); };\n        this._onFocusOutAndMouseLeaveFunc = e => { this._onFocusOutAndMouseLeave(e); };\n        this._onPasteFunc = e => { this._onPaste(e); };\n        this._onWheelFunc = e => { this._onWheel(e); };\n        this._onDropFunc = e => { this._onDrop(e); };\n        this._onKeydownGlobalFunc = e => { this._onKeydownGlobal(e); };\n        this._onKeyupGlobalFunc = e => { this._onKeyupGlobal(e); };\n        this._onCompositionstartFunc = e => { this._onCompositionstart(e); };\n        this._onCompositionendFunc = e => { this._onCompositionend(e); };\n\n        // Add the event listeners\n        this.domElement.addEventListener('focusin', this._onFocusInFunc, false);\n        this.domElement.addEventListener('focus', this._onFocusInAndMouseEnterFunc, false);\n        this.domElement.addEventListener('focus', this._onFocusFunc, false);\n        this.domElement.addEventListener('mouseenter', this._onFocusInAndMouseEnterFunc, false);\n        this.domElement.addEventListener('keydown', this._onKeydownFunc, false);\n        this.domElement.addEventListener('keypress', this._onKeypressFunc, false);\n        this.domElement.addEventListener('keyup', this._onKeyupFunc, false);\n        this.domElement.addEventListener('blur', this._onFocusOutAndMouseLeaveFunc, false);\n        this.domElement.addEventListener('mouseleave', this._onFocusOutAndMouseLeaveFunc, false);\n        this.domElement.addEventListener('paste', this._onPasteFunc, false);\n        this.domElement.addEventListener('wheel', this._onWheelFunc, false);\n        this.domElement.addEventListener('drop', this._onDropFunc, false);\n        this.domElement.addEventListener('compositionstart', this._onCompositionstartFunc, false);\n        this.domElement.addEventListener('compositionend', this._onCompositionendFunc, false);\n        this._setupFormListener();\n\n        // Keep track if the event listeners have been initialized on this object\n        this.hasEventListeners = true;\n\n        // Create one global event listener for the keyup event on the document object, which will be shared by all the autoNumeric elements\n        if (!AutoNumeric._doesGlobalListExists()) {\n            document.addEventListener('keydown', this._onKeydownGlobalFunc, false);\n            document.addEventListener('keyup', this._onKeyupGlobalFunc, false);\n        }\n    }\n\n    /**\n     * Remove all the autoNumeric-related event listeners for the given DOM element\n     * @private\n     */\n    _removeEventListeners() {\n        this.domElement.removeEventListener('focusin', this._onFocusInFunc, false);\n        this.domElement.removeEventListener('focus', this._onFocusInAndMouseEnterFunc, false);\n        this.domElement.removeEventListener('focus', this._onFocusFunc, false);\n        this.domElement.removeEventListener('mouseenter', this._onFocusInAndMouseEnterFunc, false);\n        this.domElement.removeEventListener('blur', this._onFocusOutAndMouseLeaveFunc, false);\n        this.domElement.removeEventListener('mouseleave', this._onFocusOutAndMouseLeaveFunc, false);\n        this.domElement.removeEventListener('keydown', this._onKeydownFunc, false);\n        this.domElement.removeEventListener('keypress', this._onKeypressFunc, false);\n        this.domElement.removeEventListener('keyup', this._onKeyupFunc, false);\n        this.domElement.removeEventListener('paste', this._onPasteFunc, false);\n        this.domElement.removeEventListener('wheel', this._onWheelFunc, false);\n        this.domElement.removeEventListener('drop', this._onDropFunc, false);\n        this.domElement.removeEventListener('compositionstart', this._onCompositionstartFunc, false);\n        this.domElement.removeEventListener('compositionend', this._onCompositionendFunc, false);\n        this._removeFormListener();\n\n        // Keep track if the event listeners have been initialized on this object\n        this.hasEventListeners = false;\n\n        document.removeEventListener('keydown', this._onKeydownGlobalFunc, false);\n        document.removeEventListener('keyup', this._onKeyupGlobalFunc, false);\n    }\n\n    /**\n     * Toggle the event listeners according to the `noEventListeners` option, if those were not activated/deactivated before\n     * @private\n     */\n    _updateEventListeners() {\n        if (!this.settings.noEventListeners && !this.hasEventListeners) {\n            // Special case where an update is done on an element that did not activate its event listeners in the first place\n            // i.e. when an element is first created with `contenteditable=\"false\"`, then an update is done with `anElement.french()`\n            this._createEventListeners();\n        }\n\n        if (this.settings.noEventListeners && this.hasEventListeners) {\n            this._removeEventListeners();\n        }\n    }\n\n    /**\n     * Mark the parent <form> so that other AutoNumeric object will not add more listeners.\n     * Add a counter so that when removing the AutoNumeric object, we only remove the submit listener if that count is equal to 0.\n     * Also keep a reference to the 'submit' event handler function to be able to remove that handler later if the `_removeFormListener()` function is called from another AutoNumeric object.\n     *\n     * @private\n     */\n    _setupFormListener() {\n        if (!AutoNumericHelper.isNull(this.parentForm)) {\n            // Set up the handler function\n            this._onFormSubmitFunc = () => { this._onFormSubmit(); };\n            this._onFormResetFunc = () => { this._onFormReset(); };\n\n            // Check if the parent form already has the AutoNumeric mark\n            if (this._hasParentFormCounter()) {\n                this._incrementParentFormCounter();\n            } else {\n                // If not, add the counter\n                this._initializeFormCounterToOne();\n                // And add the submit and reset event listeners\n                this.parentForm.addEventListener('submit', this._onFormSubmitFunc, false);\n                this.parentForm.addEventListener('reset', this._onFormResetFunc, false);\n                // Also keep a reference to the handler function so that we can remove it later\n                this._storeFormHandlerFunction();\n            }\n        }\n    }\n\n    /**\n     * Remove the form 'submit' event listener, as well as the `dataset` info (`anCount` and `anFormHandler`) from the parent form, only when there are only one AutoNumeric child element left in that <form>.\n     * Otherwise, decrement the `anCount`.\n     *\n     * @private\n     */\n    _removeFormListener() {\n        if (!AutoNumericHelper.isNull(this.parentForm)) {\n            // Check the parent form counter value\n            const anCount = this._getParentFormCounter();\n\n            if (anCount === 1) {\n                // If it's 1, remove the listeners\n                this.parentForm.removeEventListener('submit', this._getFormHandlerFunction().submitFn, false);\n                this.parentForm.removeEventListener('reset', this._getFormHandlerFunction().resetFn, false);\n                // Also remove the dataset info\n                this._removeFormDataSetInfo();\n            } else if (anCount > 1) {\n                // Otherwise if it's >1 decrement the counter\n                this._decrementParentFormCounter();\n            } else {\n                // If it's <1, throw an error\n                AutoNumericHelper.throwError(`The AutoNumeric object count on the form is incoherent.`);\n            }\n        }\n    }\n\n    /**\n     * Return `true` if the parent form has the form counter attribute\n     *\n     * @returns {boolean}\n     * @private\n     */\n    _hasParentFormCounter() {\n        return 'anCount' in this.parentForm.dataset;\n    }\n\n    /**\n     * Return the count of AutoNumeric form children\n     *\n     * @returns {number}\n     * @private\n     */\n    _getParentFormCounter() {\n        return Number(this.parentForm.dataset.anCount);\n    }\n\n    /**\n     * Set the count of AutoNumeric form children to 1 for the given form element, or if none are passed, the current `this.parentForm` one.\n     *\n     * @param {HTMLFormElement|null} formElement\n     * @private\n     */\n    _initializeFormCounterToOne(formElement = null) {\n        this._getFormElement(formElement).dataset.anCount = 1;\n    }\n\n    /**\n     * Increment the AutoNumeric form children count for the given form element, or if none are passed, the current `this.parentForm` one.\n     *\n     * @param {HTMLFormElement|null} formElement\n     * @private\n     */\n    _incrementParentFormCounter(formElement = null) {\n        this._getFormElement(formElement).dataset.anCount++;\n    }\n\n    /**\n     * Decrement the AutoNumeric form children count for the current `this.parentForm` form element.\n     *\n     * @private\n     */\n    _decrementParentFormCounter() {\n        this.parentForm.dataset.anCount--;\n    }\n\n    /**\n     * Return `true` if the global form handler list exists on the `window` object.\n     *\n     * @returns {boolean}\n     * @private\n     */\n    static _doesFormHandlerListExists() {\n        const type = typeof window.aNFormHandlerMap;\n\n        return type !== 'undefined' && type === 'object';\n    }\n\n    /**\n     * Create the global form handler list on the `window` object.\n     *\n     * @private\n     */\n    static _createFormHandlerList() {\n        window.aNFormHandlerMap = new Map(); // I would have used a `WeakMap` here, but that does not allow using non-object for keys\n    }\n\n    /**\n     * Return `true` if the given form element, or if none are passed, the current `this.parentForm` one has a form handler name.\n     *\n     * @param {HTMLFormElement|null} formElement\n     * @returns {boolean}\n     * @private\n     */\n    _hasFormHandlerFunction(formElement = null) {\n        return 'anFormHandler' in this._getFormElement(formElement).dataset;\n    }\n\n    /**\n     * Return the given form element, or defaults to `this.parentForm` if no argument is passed.\n     *\n     * @param {HTMLFormElement|null} formElement\n     * @returns {*}\n     * @private\n     */\n    _getFormElement(formElement = null) {\n        let formElementToUse;\n        if (!AutoNumericHelper.isNull(formElement)) {\n            formElementToUse = formElement;\n        } else {\n            formElementToUse = this.parentForm;\n        }\n\n        return formElementToUse;\n    }\n\n    /**\n     * Generate a form handler unique name and store it in the global form handler list.\n     * This also save that name in the dataset of the given form element.\n     *\n     * @param {HTMLFormElement|null} formElement\n     * @private\n     */\n    _storeFormHandlerFunction(formElement = null) {\n        // Create the weakMap if it does not exist\n        if (!this.constructor._doesFormHandlerListExists()) {\n            this.constructor._createFormHandlerList();\n        }\n\n        // Generate a unique name and save it in the form dataset\n        const formHandlerName = AutoNumericHelper.randomString();\n        this._getFormElement(formElement).dataset.anFormHandler = formHandlerName;\n\n        // Add the form handler name and handle function reference to the WeakMap\n        window.aNFormHandlerMap.set(formHandlerName, { submitFn: this._onFormSubmitFunc, resetFn: this._onFormResetFunc });\n    }\n\n    /**\n     * Return the form handler key name from the parent form element, for the global form handler list.\n     *\n     * @returns {string|*}\n     * @private\n     */\n    _getFormHandlerKey() {\n        if (!this._hasFormHandlerFunction()) {\n            AutoNumericHelper.throwError(`Unable to retrieve the form handler name`);\n        }\n\n        const formHandlerName = this.parentForm.dataset.anFormHandler;\n        if (formHandlerName === '') {\n            AutoNumericHelper.throwError(`The form handler name is invalid`);\n        }\n\n        return formHandlerName;\n    }\n\n    /**\n     * Return the 'submit' event handler function used for the parent form.\n     *\n     * @returns {function}\n     * @private\n     */\n    _getFormHandlerFunction() {\n        const formHandlerName = this._getFormHandlerKey();\n\n        return window.aNFormHandlerMap.get(formHandlerName);\n    }\n\n    /**\n     * Remove the dataset attributes `data-an-count` and `data-an-form-handler` from the parent form element.\n     *\n     * @private\n     */\n    _removeFormDataSetInfo() {\n        // Just in case, set the counter to 0\n        this._decrementParentFormCounter();\n        // Remove the form handler function from the FormHandlerFunction Map\n        window.aNFormHandlerMap.delete(this._getFormHandlerKey());\n        // Lastly, remove the dataset attributes\n        this.parentForm.removeAttribute('data-an-count');\n        this.parentForm.removeAttribute('data-an-form-handler');\n    }\n\n    /**\n     * Set the DOM element write permissions according to the current settings, by setting the `readonly` or `contenteditable` attributes depending on its tag type.\n     * If the `useHtmlAttribute` parameter is set to `true`, then the `readonly` html attribute is used and has precedence over the `readOnly` option to set the element as read-only.\n     *\n     * @param {boolean} useHtmlAttribute If set to `true`, then the write permissions are set by taking into account the html 'readonly' attribute, even if the `readOnly` option is set to false\n     * @private\n     */\n    _setWritePermissions(useHtmlAttribute = false) {\n        if ((useHtmlAttribute && this.domElement.readOnly) || this.settings.readOnly) {\n            this._setReadOnly();\n        } else {\n            this._setReadWrite();\n        }\n    }\n\n    /**\n     * Set the element to be read-only.\n     * If the DOM element tag is not an `input`, then it `contenteditable` attribute is set to `false`.\n     *\n     * @private\n     */\n    _setReadOnly() {\n        if (this.isInputElement) {\n            this.domElement.readOnly = true;\n        } else {\n            this.domElement.setAttribute('contenteditable', false);\n        }\n    }\n\n    /**\n     * Set the element to be read-write.\n     *\n     * @private\n     */\n    _setReadWrite() {\n        if (this.isInputElement) {\n            this.domElement.readOnly = false;\n        } else {\n            this.domElement.setAttribute('contenteditable', true);\n        }\n    }\n\n    /**\n     * Add a watcher so that any external change to the AutoNumeric-managed element would be detected.\n     * As soon as such change is detected, AutoNumeric then tries to `set()` the value so that it gets formatted and stored in the history.\n     * //XXX For now, this only works when watching the `value` attribute, not the `textContent` one\n     * @private\n     */\n    _addWatcher() {\n        // `getterSetter` can be undefined when a non-input element is used\n        if (!AutoNumericHelper.isUndefined(this.getterSetter)) {\n            const { set: setter, get: getter } = this.getterSetter;\n            Object.defineProperty(this.domElement, this.attributeToWatch, {\n                configurable: true, // This is needed in some rare cases\n                get         : () => getter.call(this.domElement),\n                set         : val => {\n                    setter.call(this.domElement, val);\n                    // Only `set()` the value if the modification comes from an external source\n                    if (this.settings.watchExternalChanges && !this.internalModification) {\n                        this.set(val);\n                    }\n                },\n            });\n        }\n\n        //FIXME The code above fails for the `textContent` attribute since `this.getterSetter` is undefined when using `getOwnPropertyDescriptor()`\n        /* //XXX The code below *almost* work for the textContent, but breaks some unit tests\n        this.valueWatched = this.domElement[this.attributeToWatch];\n        Object.defineProperty(this.domElement, this.attributeToWatch, {\n            configurable: true, // This is needed in some rare cases\n            get         : () => this.valueWatched,\n            set         : val => {\n                this.valueWatched = val;\n                // Only `set()` the value if the modification comes from an external source\n                if (this.settings.watchExternalChanges && !this.internalModification) {\n                    this.set(val);\n                }\n            },\n        });\n        */\n    }\n\n    /**\n     * Remove the watcher on the AutoNumeric-managed element\n     * Note: This needs to be called when the AutoNumeric element is 'removed', otherwise the getter/setter stays on the DOM element and that can lead to problem if the user initialize another AutoNumeric object on it.\n     * @private\n     */\n    _removeWatcher() {\n        // `getterSetter` can be undefined when a non-input element is used\n        if (!AutoNumericHelper.isUndefined(this.getterSetter)) {\n            const { set: setter, get: getter } = this.getterSetter;\n            Object.defineProperty(this.domElement, this.attributeToWatch, {\n                configurable: true, // This is needed in some rare cases\n                get         : () => getter.call(this.domElement),\n                set         : val => {\n                    setter.call(this.domElement, val);\n                },\n            });\n        }\n\n        //FIXME The code above fails for the `textContent` attribute since `this.getterSetter` is undefined when using `getOwnPropertyDescriptor()`\n        /* //XXX The code below *almost* work for the textContent, but breaks some unit tests\n        this.valueWatched = this.domElement[this.attributeToWatch];\n        Object.defineProperty(this.domElement, this.attributeToWatch, {\n            configurable: true, // This is needed in some rare cases\n            get         : () => this.valueWatched,\n            set         : val => {\n                this.valueWatched = val;\n            },\n        });\n        */\n    }\n\n    /**\n     * Return the name of the object attribute that store the current formatted data in the DOM element.\n     *\n     * @returns {string}\n     * @private\n     */\n    _getAttributeToWatch() {\n        let attributeToWatch;\n        if (this.isInputElement) {\n            attributeToWatch = 'value';\n        } else {\n            const nodeType = this.domElement.nodeType;\n            if (nodeType === Node.ELEMENT_NODE ||\n                nodeType === Node.DOCUMENT_NODE ||\n                nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n                attributeToWatch = 'textContent';\n            } else if (nodeType === Node.TEXT_NODE) {\n                attributeToWatch = 'nodeValue';\n            }\n        }\n\n        return attributeToWatch;\n    }\n\n    /**\n     * Save the current raw value into the history table, along with the selection information.\n     *\n     * If the user has done some undos and tries to enter:\n     * - a new and different number than the 'next' state, this drops the rest of the history table\n     * - the very same number that result in the same rawValue as the 'next' state, we only move the history table pointer to the next state\n     *\n     * @private\n     */\n    _historyTableAdd() {\n        //TODO Add a `this.settings.saveSelectionsIntoHistory` option to prevent saving the selections (in order to gain performance)\n        const isEmptyHistoryTable = this.historyTable.length === 0;\n        // Only add a new value if it's different from the previous one (to prevent infinitely adding values on mouseover for instance)\n        if (isEmptyHistoryTable || this.rawValue !== this._historyTableCurrentValueUsed()) {\n            // Trim the history table if the user changed the value of an intermediary state\n            let addNewHistoryState = true;\n            if (!isEmptyHistoryTable) {\n                // If some undo has been done and the user type the exact same data than the next entry after the current history pointer, do not drop the rest of the 'redo' list, and just advance the historyTableIndex\n                const nextHistoryStateIndex = this.historyTableIndex + 1;\n                if (nextHistoryStateIndex < this.historyTable.length && this.rawValue === this.historyTable[nextHistoryStateIndex].value) {\n                    // If the character input result in the same state as the next one, do not remove the next history states nor add a new one\n                    addNewHistoryState = false;\n                } else {\n                    // First remove anything that is after the current index\n                    AutoNumericHelper.arrayTrim(this.historyTable, this.historyTableIndex + 1);\n                }\n            }\n\n            // Update the history pointer\n            this.historyTableIndex++;\n\n            // Add the new history state, if needed\n            if (addNewHistoryState) {\n                // Save the selection info\n                const selection = AutoNumericHelper.getElementSelection(this.domElement);\n                this.selectionStart = selection.start;\n                this.selectionEnd = selection.end;\n\n                // Then add the new raw value\n                this.historyTable.push({\n                    // Save the rawValue and selection start/end\n                    value: this.rawValue,\n                    // The selection for this element is temporary, and will be updated when the next history state will be recorded.\n                    // That way, we are always sure we save the last caret or selection positions just before the value is changed. Otherwise, we would only save those positions when the value is first changed, and would not take into account that the user could move the caret around afterward.\n                    // For instance, this is needed if the user change the element value, and immediately undo it ; if he then does a redo, he'll see the value and the right selection\n                    // To sum up; The selection position are not always +1 character, since it could also be '2' if a group separator is added when entering one character. That's why the current history state caret/selection position is updated on each `keyup` event.\n                    start: this.selectionStart + 1, // Here we add one since the user added one character too\n                    end  : this.selectionEnd + 1,\n                });\n\n                // Update the selection in the previous entry, in order to keep track of the updated caret/selection positions\n                if (this.historyTable.length > 1) {\n                    this.historyTable[this.historyTableIndex - 1].start = this.selectionStart;\n                    this.historyTable[this.historyTableIndex - 1].end = this.selectionEnd;\n                }\n            }\n\n            // Limit the history table size according to the `historySize` option\n            if (this.historyTable.length > this.settings.historySize) {\n                this._historyTableForget();\n            }\n        }\n    }\n\n    /**\n     * Debug function for the history table\n     * @private\n     */\n    /*\n    _debugHistoryTable() {\n        let i = 0;\n        let mark;\n        this.historyTable.forEach(history => {\n            if (this.historyTableIndex === i) {\n                mark = '> ';\n            } else {\n                mark = '';\n            }\n            console.log(`${mark}${i++}: ${history.value} ${history.start}|${history.end} [onGoingRedo: ${this.onGoingRedo}]`); //DEBUG\n        });\n    }\n    */\n\n    /**\n     * 'Undo' or 'Redo' the last/next user entry in the history table.\n     * This does not modify the history table, only the pointer to the current state.\n     *\n     * @param {boolean} undo If set to `true`, then this function does an 'Undo', otherwise it does a 'Redo'\n     * @private\n     */\n    _historyTableUndoOrRedo(undo = true) {\n        let check;\n        if (undo) {\n            // Only 'undo' if there are some info to undo\n            check = this.historyTableIndex > 0;\n            if (check) {\n                this.historyTableIndex--;\n            }\n        } else {\n            // Only 'redo' if there are some info to redo at the end of the history table\n            check = this.historyTableIndex + 1 < this.historyTable.length;\n            if (check) {\n                this.historyTableIndex++;\n            }\n        }\n\n        if (check) {\n            // Set the value back\n            const undoInfo = this.historyTable[this.historyTableIndex];\n            this.set(undoInfo.value, null, false); // next or previous raw value\n\n            // Set the selection back\n            AutoNumericHelper.setElementSelection(this.domElement, undoInfo.start, undoInfo.end);\n        }\n    }\n\n    /**\n     * 'Undo' the last user entry by going back one entry in the history table.\n     * This keeps the following entries in order to allow for a 'redo'.\n     * This does not modify the history table, only the pointer to the current state.\n     * @private\n     */\n    _historyTableUndo() {\n        this._historyTableUndoOrRedo(true);\n    }\n\n    /**\n     * 'Redo' the next user entry in the history table.\n     * This does not modify the history table, only the pointer to the current state.\n     * @private\n     */\n    _historyTableRedo() {\n        this._historyTableUndoOrRedo(false);\n    }\n\n    /**\n     * Reset the history table to its initial state, and select the value.\n     * @private\n     */\n    /*\n    resetHistoryTable() { //FIXME Test this\n        this.set(this.rawValue, null, false);\n        this.select();\n        const selection = AutoNumericHelper.getElementSelection(this.domElement);\n        this.historyTableIndex = 0;\n        this.historyTable = [{\n            // Save the rawValue and selection start/end\n            value: this.rawValue,\n            start: selection.start,\n            end  : selection.end,\n        }];\n    }\n    */\n\n    /**\n     * Make the history table forget its first N elements, shifting its indexes in the process.\n     * `N` being given as the `numberOfEntriesToForget` parameter.\n     *\n     * @param {Number} numberOfEntriesToForget\n     * @returns {object|Array<object>} The discarded objects, in an Array.\n     * @private\n     */\n    _historyTableForget(numberOfEntriesToForget = 1) {\n        const shiftedAway = [];\n        for (let i = 0; i < numberOfEntriesToForget; i++) {\n            shiftedAway.push(this.historyTable.shift());\n            // Update the history table index accordingly\n            this.historyTableIndex--;\n            if (this.historyTableIndex < 0) {\n                // In case this function is called more times than there is states in the history table\n                this.historyTableIndex = 0;\n            }\n        }\n\n        if (shiftedAway.length === 1) {\n            return shiftedAway[0];\n        }\n\n        return shiftedAway;\n    }\n\n    /**\n     * Return the currently used value from the history table.\n     *\n     * @returns {string|number}\n     * @private\n     */\n    _historyTableCurrentValueUsed() {\n        let indexToUse = this.historyTableIndex;\n        if (indexToUse < 0) {\n            indexToUse = 0;\n        }\n\n        let result;\n        if (AutoNumericHelper.isUndefinedOrNullOrEmpty(this.historyTable[indexToUse])) {\n            result = '';\n        } else {\n            result = this.historyTable[indexToUse].value;\n        }\n\n        return result;\n    }\n\n    /**\n     * Parse the `styleRules` option and run the test for each given rules, either pre-defined ones like `positive`, `negative` and `ranges`, or user defined callbacks within the `userDefined` attribute.\n     * @private\n     */\n    _parseStyleRules() {\n        if (AutoNumericHelper.isUndefinedOrNullOrEmpty(this.settings.styleRules) || this.rawValue === '') {\n            return;\n        }\n\n        // 'positive' attribute\n        if (!AutoNumericHelper.isUndefinedOrNullOrEmpty(this.settings.styleRules.positive)) {\n            if (this.rawValue >= 0) {\n                this._addCSSClass(this.settings.styleRules.positive);\n            } else {\n                this._removeCSSClass(this.settings.styleRules.positive);\n            }\n        }\n\n        // 'negative' attribute\n        if (!AutoNumericHelper.isUndefinedOrNullOrEmpty(this.settings.styleRules.negative)) {\n            if (this.rawValue < 0) {\n                this._addCSSClass(this.settings.styleRules.negative);\n            } else {\n                this._removeCSSClass(this.settings.styleRules.negative);\n            }\n        }\n\n        // 'ranges' attribute\n        if (!AutoNumericHelper.isUndefinedOrNullOrEmpty(this.settings.styleRules.ranges) && this.settings.styleRules.ranges.length !== 0) {\n            this.settings.styleRules.ranges.forEach(range => {\n                if (this.rawValue >= range.min && this.rawValue < range.max) {\n                    this._addCSSClass(range.class);\n                } else {\n                    this._removeCSSClass(range.class);\n                }\n            });\n        }\n\n        // 'userDefined' attribute\n        //TODO Also pass the old raw value as a parameter, and not only the new raw value\n        if (!AutoNumericHelper.isUndefinedOrNullOrEmpty(this.settings.styleRules.userDefined) && this.settings.styleRules.userDefined.length !== 0) {\n            this.settings.styleRules.userDefined.forEach(userObject => {\n                if (AutoNumericHelper.isFunction(userObject.callback)) {\n                    // Test for the type of the `classes` attribute, which changes the function behavior\n                    if (AutoNumericHelper.isString(userObject.classes)) {\n                        // If 'classes' is a string, set it if `true`, remove it if `false`\n                        if (userObject.callback(this.rawValue)) {\n                            this._addCSSClass(userObject.classes);\n                        } else {\n                            this._removeCSSClass(userObject.classes);\n                        }\n                    } else if (AutoNumericHelper.isArray(userObject.classes)) {\n                        if (userObject.classes.length === 2) {\n                            // If 'classes' is an array with only 2 elements, set the first class if `true`, the second if `false`\n                            if (userObject.callback(this.rawValue)) {\n                                this._addCSSClass(userObject.classes[0]);\n                                this._removeCSSClass(userObject.classes[1]);\n                            } else {\n                                this._removeCSSClass(userObject.classes[0]);\n                                this._addCSSClass(userObject.classes[1]);\n                            }\n                        } else if (userObject.classes.length > 2) {\n                            // The callback returns an array of indexes to use on the `classes` array\n                            const callbackResult = userObject.callback(this.rawValue);\n                            if (AutoNumericHelper.isArray(callbackResult)) {\n                                // If multiple indexes are returned\n                                userObject.classes.forEach((userClass, index) => {\n                                    if (AutoNumericHelper.isInArray(index, callbackResult)) {\n                                        this._addCSSClass(userClass);\n                                    } else {\n                                        this._removeCSSClass(userClass);\n                                    }\n                                });\n                            } else if (AutoNumericHelper.isInt(callbackResult)) {\n                                // If only one index is returned\n                                userObject.classes.forEach((userClass, index) => {\n                                    if (index === callbackResult) {\n                                        this._addCSSClass(userClass);\n                                    } else {\n                                        this._removeCSSClass(userClass);\n                                    }\n                                });\n                            } else if (AutoNumericHelper.isNull(callbackResult)) {\n                                // Remove all the classes\n                                userObject.classes.forEach(userClass => {\n                                    this._removeCSSClass(userClass);\n                                });\n                            } else {\n                                AutoNumericHelper.throwError(`The callback result is not an array nor a valid array index, ${typeof callbackResult} given.`);\n                            }\n                        } else {\n                            AutoNumericHelper.throwError('The classes attribute is not valid for the `styleRules` option.');\n                        }\n                    } else if (AutoNumericHelper.isUndefinedOrNullOrEmpty(userObject.classes)) {\n                        // If 'classes' is `undefined` or `null`, then the callback is called with the AutoNumeric object passed as a parameter\n                        userObject.callback(this);\n                    } else {\n                        AutoNumericHelper.throwError('The callback/classes structure is not valid for the `styleRules` option.');\n                    }\n                } else {\n                    AutoNumericHelper.warning(`The given \\`styleRules\\` callback is not a function, ${typeof userObject.callback} given.`, this.settings.showWarnings);\n                }\n            });\n        }\n    }\n\n    /**\n     * Add the given CSS class to the DOM element.\n     *\n     * @param {string} cssClassName\n     * @private\n     */\n    _addCSSClass(cssClassName) {\n        this.domElement.classList.add(cssClassName);\n    }\n\n    /**\n     * Remove the given CSS class from the DOM element.\n     *\n     * @param {string} cssClassName\n     * @private\n     */\n    _removeCSSClass(cssClassName) {\n        this.domElement.classList.remove(cssClassName);\n    }\n\n    // Those are the public function available on each autoNumeric-managed element\n\n    /**\n     * Method that updates the AutoNumeric settings, and immediately format the element accordingly.\n     * The options passed as parameter(s) is either one or many objects that each contains some settings, i.e. :\n     * {\n     *     digitGroupSeparator: \".\",\n     *     decimalCharacter: \",\",\n     *     currencySymbol: '€ ',\n     * }\n     * If multiple options are passed, the latter overwrite the previous ones.\n     *\n     * Note: If the new settings are not validated, or the call to `set()` fails, then the previous valid settings are reverted back to.\n     *\n     * @example anElement.update({ options }) // Updates the settings\n     * @example anElement.update({ options1 }, { options2 }) // Updates the settings with multiple option objects\n     * @example anElement.update([{ options1 }, { options2 }]) // Updates the settings with multiple option objects in a single array\n     *\n     * @param {object|string|array} newOptions\n     * @returns {AutoNumeric}\n     */\n    update(...newOptions) {\n        if (Array.isArray(newOptions) && Array.isArray(newOptions[0])) {\n            // Allows to pass a single array of options\n            newOptions = newOptions[0];\n        }\n\n        // Keep a copy of the original settings before changing them, in case they do not validate correctly, so we can switch back to them\n        const originalSettings = AutoNumericHelper.cloneObject(this.settings); //TODO Check that the `styleRules` option is correctly cloned (due to depth cloning limitation)\n\n        // Store the current unformatted input value\n        const numericString = this.rawValue;\n\n        // Generate a single option object with the settings from the latter overwriting those from the former\n        let optionsToUse = {};\n        if (AutoNumericHelper.isUndefinedOrNullOrEmpty(newOptions) || newOptions.length === 0) {\n            optionsToUse = null;\n        } else if (newOptions.length >= 1) {\n            newOptions.forEach(optionObject => {\n                if (this.constructor._isPreDefinedOptionValid(optionObject)) {\n                    // The option object is a predefined option name (i.e. 'euro')\n                    optionObject = this.constructor._getOptionObject(optionObject);\n                }\n\n                Object.assign(optionsToUse, optionObject);\n            });\n        }\n\n        // Update the settings\n        try {\n            this._setSettings(optionsToUse, true);\n            this._setWritePermissions(); // Update the read/write permissions\n            this._updateEventListeners();\n\n            // Reformat the input value with the new settings\n            // Note: we always `set`, even when `numericString` is the empty string '', since `emptyInputBehavior` (set to `always` or `zero`) can change how the empty input is formatted\n            this.set(numericString);\n        } catch (error) {\n            // If the settings validation fails, then we switch back to the previous valid settings\n            this._setSettings(originalSettings, true); // `_setSettings()` is used here instead of directly doing `this.settings = originalSettings;` since lots of side variables are calculated from the settings, and we need to get those back to their previous state. Note: `_setSettings()` is called in the 'update' mode in order to correctly set back the `originalDecimalPlacesRawValue` value.\n            AutoNumericHelper.throwError(`Unable to update the settings, those are invalid: [${error}]`);\n\n            return this;\n        }\n\n        return this;\n    }\n\n    /**\n     * Return the options object containing all the current autoNumeric settings in effect.\n     * You can then directly access each option by using its name : `anElement.getSettings().optionNameAutoCompleted`.\n     *\n     * @example\n     * anElement.getSettings()\n     * anElement.getSettings().decimalCharacter // Return the decimalCharacter setting as a string - any valid option name can be used\n     *\n     * @returns {object}\n     */\n    getSettings() {\n        return this.settings;\n    }\n\n    /**\n     * Set the given element value, and format it immediately.\n     * Additionally, this `set()` method can accept options that will be merged into the current AutoNumeric element, taking precedence over any previous settings.\n     *\n     * @example anElement.set('12345.67') // Formats the value\n     * @example anElement.set(12345.67) // Formats the value\n     * @example anElement.set(12345.67, { decimalCharacter : ',' }) // Update the settings and formats the value in one go\n     * @example anElement.northAmerican().set('$12,345.67') // Set an already formatted value (this does not _exactly_ respect the currency symbol/negative placements, but only remove all non-numbers characters, according to the ones given in the settings)\n     * @example anElement.set(null) // Set the rawValue and element value to `null`\n     *\n     * @param {number|string|null} newValue The value must be a Number, a numeric string or `null` (if `emptyInputBehavior` is set to `'null'`)\n     * @param {object} options A settings object that will override the current settings. Note: the update is done only if the `newValue` is defined.\n     * @param {boolean} saveChangeToHistory If set to `true`, then the change is recorded in the history table\n     * @returns {AutoNumeric}\n     * @throws\n     */\n    set(newValue, options = null, saveChangeToHistory = true) {\n        //TODO Add the `saveSettings` options. If `true`, then when `options` is passed, then it overwrite the current `this.settings`. If `false` the `options` are only used once and `this.settings` is not modified\n        if (AutoNumericHelper.isUndefined(newValue)) {\n            AutoNumericHelper.warning(`You are trying to set an 'undefined' value ; an error could have occurred.`, this.settings.showWarnings);\n            return this;\n        }\n\n        // The options update is done only if the `newValue` is not `undefined`\n        if (!AutoNumericHelper.isNull(options)) {\n            this._setSettings(options, true); // We do not call `update` here since this would call `set` too\n        }\n\n        if (newValue === null && this.settings.emptyInputBehavior !== AutoNumeric.options.emptyInputBehavior.null) {\n            AutoNumericHelper.warning(`You are trying to set the \\`null\\` value while the \\`emptyInputBehavior\\` option is set to ${this.settings.emptyInputBehavior}. If you want to be able to set the \\`null\\` value, you need to change the 'emptyInputBehavior' option to \\`'null'\\`.`, this.settings.showWarnings);\n            return this;\n        }\n\n        let value;\n        if (newValue === null) {\n            //TODO Merge this into a global `if (newValue === null) {` test, with the test above\n            // Here this.settings.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior.null\n            this._setElementAndRawValue(null, null, saveChangeToHistory);\n            this._saveValueToPersistentStorage();\n\n            return this;\n        }\n\n        value = this.constructor._toNumericValue(newValue, this.settings);\n        if (isNaN(Number(value))) {\n            //TODO Do not modify the element value if the newValue results in `NaN`. Make sure the settings, if modified, are revert back too.\n            AutoNumericHelper.warning(`The value you are trying to set results in \\`NaN\\`. The element value is set to the empty string instead.`, this.settings.showWarnings);\n            this.setValue('', saveChangeToHistory);\n\n            return this;\n        }\n\n        if (value === '') {\n            switch (this.settings.emptyInputBehavior) {\n                case AutoNumeric.options.emptyInputBehavior.zero:\n                    value = 0;\n                    break;\n                case AutoNumeric.options.emptyInputBehavior.min:\n                    value = this.settings.minimumValue;\n                    break;\n                case AutoNumeric.options.emptyInputBehavior.max:\n                    value = this.settings.maximumValue;\n                    break;\n                default:\n                    if (AutoNumericHelper.isNumber(this.settings.emptyInputBehavior)) {\n                        value = Number(this.settings.emptyInputBehavior);\n                    }\n            }\n        }\n\n        if (value !== '') {\n            const [minTest, maxTest] = this.constructor._checkIfInRangeWithOverrideOption(value, this.settings);\n\n            // Modify the formatted value if the rawValue is found in the `valuesToStrings` option\n            if (minTest && maxTest && this.settings.valuesToStrings && this._checkValuesToStrings(value)) {\n                // Set the raw value normally, and the formatted value with the corresponding string\n                this._setElementAndRawValue(this.settings.valuesToStrings[value], value, saveChangeToHistory);\n                this._saveValueToPersistentStorage();\n\n                return this;\n            }\n\n            // This test is needed by the `showPositiveSign` option\n            const isZero = AutoNumericHelper.isZeroOrHasNoValue(value);\n            if (isZero) {\n                value = '0';\n            }\n\n            if (minTest && maxTest) {\n                let forcedRawValue = this.constructor._roundRawValue(value, this.settings);\n                forcedRawValue = this._trimLeadingAndTrailingZeros(forcedRawValue.replace(this.settings.decimalCharacter, '.')); // Move the `setRawValue` call after the `setElementValue` one\n                value = this._getRawValueToFormat(value); // Multiply the raw value to obtain the formatted value\n\n                // Round the given value according to the object state (focused/unfocused)\n                if (this.isFocused) {\n                    value = this.constructor._roundFormattedValueShownOnFocus(value, this.settings);\n                } else {\n                    if (this.settings.divisorWhenUnfocused) {\n                        value = value / this.settings.divisorWhenUnfocused;\n                        value = value.toString();\n                    }\n\n                    value = this.constructor._roundFormattedValueShownOnBlur(value, this.settings);\n                }\n\n                value = this.constructor._modifyNegativeSignAndDecimalCharacterForFormattedValue(value, this.settings);\n                value = this.constructor._addGroupSeparators(value, this.settings, this.isFocused, this.rawValue, forcedRawValue);\n                if (!this.isFocused && this.settings.symbolWhenUnfocused) {\n                    value = `${value}${this.settings.symbolWhenUnfocused}`;\n                }\n\n                if (this.settings.decimalPlacesShownOnFocus || this.settings.divisorWhenUnfocused) {\n                    this._saveValueToPersistentStorage();\n                }\n\n                this._setElementAndRawValue(value, forcedRawValue, saveChangeToHistory);\n\n                // Special case when the user is allowed to enter invalid numbers outside the min/max range\n                this._setValidOrInvalidState(forcedRawValue);\n\n                return this;\n            } else {\n                this._triggerRangeEvents(minTest, maxTest);\n                AutoNumericHelper.throwError(`The value [${value}] being set falls outside of the minimumValue [${this.settings.minimumValue}] and maximumValue [${this.settings.maximumValue}] range set for this element`);\n\n                this._removeValueFromPersistentStorage();\n                this.setValue('', saveChangeToHistory); //TODO Shouldn't we just drop that faulty newValue and keep the previous one? This is behind a `throwError()` call anyway..\n\n                return this;\n            }\n        } else {\n            // Here, `value` equal the empty string `''`\n            let result;\n            if (this.settings.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior.always) {\n                // Keep the currency symbol as per emptyInputBehavior\n                result = this.settings.currencySymbol;\n            } else {\n                result = '';\n            }\n\n            this._setElementAndRawValue(result, '', saveChangeToHistory);\n\n            return this;\n        }\n    }\n\n    /**\n     * Set the given value directly as the DOM element value, without formatting it beforehand.\n     * You can also set the value and update the setting in one go (the value will again not be formatted immediately).\n     *\n     * @param {number|string} value\n     * @param {object} options\n     * @returns {AutoNumeric}\n     * @throws\n     */\n    setUnformatted(value, options = null) {\n        //TODO Should we use `AutoNumeric.unformat()` here and set the unformatted result in case `value` is formatted?\n        if (value === null || AutoNumericHelper.isUndefined(value)) {\n            return this;\n        }\n\n        // The options update is done only if the `value` is not null\n        if (!AutoNumericHelper.isNull(options)) {\n            this._setSettings(options, true); // We do not call `update` here since this would call `set` too\n        }\n\n        const strippedValue = this.constructor._removeBrackets(value, this.settings);\n        const normalizedValue = this.constructor._stripAllNonNumberCharacters(strippedValue, this.settings, true, this.isFocused);\n        if (!AutoNumericHelper.isNumber(normalizedValue)) {\n            AutoNumericHelper.throwError(`The value is not a valid one, it's not a numeric string nor a recognized currency.`);\n        }\n\n        if (this.constructor._isWithinRangeWithOverrideOption(normalizedValue, this.settings)) {\n            // If the `normalizedValue` is in the range\n            this.setValue(value);\n        } else {\n            AutoNumericHelper.throwError(`The value is out of the range limits [${this.settings.minimumValue}, ${this.settings.maximumValue}].`);\n        }\n\n        return this;\n    }\n\n    /**\n     * Set the given value directly as the DOM element value, without formatting it beforehand, and without checking its validity.\n     * This also updates the `rawValue` with the given `newValue`, without checking it too ; if it's not formatted like a number recognized by Javascript, this *will* likely make other AutoNumeric methods fail.\n     *\n     * @param {string|number|null} newValue The new value to set on the element\n     * @param {boolean} saveChangeToHistory If set to `true`, then the change is recorded in the history array, otherwise it is not\n     * @returns {AutoNumeric}\n     */\n    setValue(newValue, saveChangeToHistory = true) {\n        this._setElementAndRawValue(newValue, saveChangeToHistory);\n\n        return this;\n    }\n\n    /**\n     * Save the raw value inside the AutoNumeric object.\n     *\n     * @param {number|string|null} rawValue The numeric value as understood by Javascript like a `Number`\n     * @param {boolean} saveChangeToHistory If set to `true`, then the change is recorded in the history array, otherwise it is not\n     * @private\n     */\n    _setRawValue(rawValue, saveChangeToHistory = true) {\n        // Only set the raw value if the given value is different from the current one\n        if (this.rawValue !== rawValue) { //TODO Manage the case where one value is a string while the other is a number?\n            const oldRawValue = this.rawValue;\n            // Update the raw value\n            this.rawValue = rawValue; // By default, if the `rawValue` is changed programmatically\n\n            if ((!AutoNumericHelper.isNull(this.settings.rawValueDivisor) && this.settings.rawValueDivisor !== 0) && // Only divide if the `rawValueDivisor` option is set\n                rawValue !== '' && rawValue !== null && // Do not modify the `rawValue` if it's an empty string or null\n                this._isUserManuallyEditingTheValue()) { // If the user is manually changing the element value\n                this.rawValue /= this.settings.rawValueDivisor;\n            }\n\n            // Broadcast the `rawValueModified` event since the `rawValue` has been modified\n            this._triggerEvent(AutoNumeric.events.rawValueModified, this.domElement, {\n                oldRawValue,\n                newRawValue: this.rawValue,\n                isPristine : this.isPristine(true),\n                error      : null,\n                aNElement  : this,\n            });\n\n            // Change the element style or use the relevant callbacks\n            this._parseStyleRules();\n\n            if (saveChangeToHistory) {\n                // Save in the history the last known raw value and formatted result selection\n                window.requestAnimationFrame(() => this._historyTableAdd()); // The use of `requestAnimationFrame` fixes PR #731 by avoiding \"Forced reflow\"\n            }\n        }\n    }\n\n    /**\n     * Set the given value on the DOM element, without affecting the `rawValue`.\n     * This sends an 'autoNumeric:formatted' event if the new value is different from the old one.\n     *\n     * @param {number|string} newElementValue\n     * @param {boolean} sendFormattedEvent If set to `true`, then the `AutoNumeric.events.formatted` event is sent if the value has changed\n     * @returns {AutoNumeric}\n     * @private\n     */\n    _setElementValue(newElementValue, sendFormattedEvent = true) {\n        //TODO Use an internal attribute to track the current value of the element `formattedValue` (like its counterpart `rawValue`). This would allow us to avoid calling `getElementValue` many times\n        const oldElementValue = AutoNumericHelper.getElementValue(this.domElement);\n\n        // Only update the value if it's different from the current one\n        if (newElementValue !== oldElementValue) {\n            this.internalModification = true;\n            AutoNumericHelper.setElementValue(this.domElement, newElementValue);\n            this.internalModification = false;\n\n            if (sendFormattedEvent) {\n                this._triggerEvent(AutoNumeric.events.formatted, this.domElement, {\n                    oldValue   : oldElementValue,\n                    newValue   : newElementValue,\n                    oldRawValue: this.rawValue,\n                    newRawValue: this.rawValue,\n                    isPristine : this.isPristine(false),\n                    error      : null,\n                    aNElement  : this,\n                });\n            }\n        }\n\n        return this;\n    }\n\n    /**\n     * Set the given value on the DOM element, and the raw value on `this.rawValue`, if both are given.\n     * If only one value is given, then both the DOM element value and the raw value are set with that value.\n     * The third argument `saveChangeToHistory` defines if the change should be recorded in the history array.\n     * Note: if the second argument `rawValue` is a boolean, we consider that is really is the `saveChangeToHistory` argument.\n     *\n     * @param {number|string|null} newElementValue\n     * @param {number|string|null|boolean} rawValue\n     * @param {boolean} saveChangeToHistory\n     * @returns {AutoNumeric}\n     * @private\n     */\n    _setElementAndRawValue(newElementValue, rawValue = null, saveChangeToHistory = true) {\n        if (AutoNumericHelper.isNull(rawValue)) {\n            rawValue = newElementValue;\n        } else if (AutoNumericHelper.isBoolean(rawValue)) {\n            saveChangeToHistory = rawValue;\n            rawValue = newElementValue;\n        }\n\n        //XXX The order here is important ; the value should first be set on the element, then and only then we should update the raw value\n        // In the `set()` function, we make sure to call `_setRawValue` *after* `setElementValue` so that if `_setRawValue` calls a callback that modify the `rawValue`, then the new value is set correctly (after `setElementValue` briefly set its value first)\n        this._setElementValue(newElementValue);\n        this._setRawValue(rawValue, saveChangeToHistory);\n\n        return this;\n    }\n\n    /**\n     * Return the multiplied raw value with the `rawValueDivisor`.\n     * This is used to display different values between the raw and formatted values.\n     *\n     * @param {number|string|null} rawValue The numeric value as understood by Javascript like a `Number`\n     * @returns {number|string|null}\n     * @private\n     */\n    _getRawValueToFormat(rawValue) {\n        let rawValueForTheElementValue;\n        if ((!AutoNumericHelper.isNull(this.settings.rawValueDivisor) && this.settings.rawValueDivisor !== 0) && // Only multiply if the `rawValueDivisor` option is set\n            rawValue !== '' && rawValue !== null) { // Do not modify the `rawValue` if it's an empty string or null\n            // !this._isUserManuallyEditingTheValue()) { // If the user is NOT manually changing the element value, but that is done programmatically\n            rawValueForTheElementValue = rawValue * this.settings.rawValueDivisor;\n        } else {\n            rawValueForTheElementValue = rawValue;\n        }\n\n        return rawValueForTheElementValue;\n    }\n\n    /**\n     * Check if the given value has a corresponding key in the `valuesToStrings` option object.\n     *\n     * @param {number|string} value\n     * @returns {boolean} Returns `true` if such a key is found.\n     * @private\n     */\n    _checkValuesToStrings(value) {\n        return this.constructor._checkValuesToStringsArray(value, this.valuesToStringsKeys);\n    }\n\n    /**\n     * Check if the given value has a corresponding key in the `stringsArray` array.\n     *\n     * @param {number|string} key\n     * @param {array} stringsArray Array where the `key` is checked against its keys\n     * @returns {boolean} Returns `true` if such a key is found.\n     * @private\n     */\n    static _checkValuesToStringsArray(key, stringsArray) {\n        return AutoNumericHelper.isInArray(String(key), stringsArray);\n    }\n\n    /**\n     * Static helper for checking if the given `key` is found in the settings' `valuesToStrings` option object.\n     *\n     * @param {number|string} key\n     * @param {object} settings\n     * @returns {boolean}\n     * @private\n     */\n    static _checkValuesToStringsSettings(key, settings) {\n        return this._checkValuesToStringsArray(key, Object.keys(settings.valuesToStrings));\n    }\n\n    /**\n     * Static helper for checking if the given `value` is found in the settings' `valuesToStrings` option object.\n     *\n     * @param {number|string} value\n     * @param {object} settings\n     * @returns {boolean}\n     * @private\n     */\n    static _checkStringsToValuesSettings(value, settings) {\n        return this._checkValuesToStringsArray(value, Object.values(settings.valuesToStrings));\n    }\n\n    /**\n     * Return `true` if the user is currently modifying the element value manually.\n     *\n     * @returns {boolean}\n     * @private\n     */\n    _isUserManuallyEditingTheValue() {\n        // return (this.isFocused && this.isEditing) || this.isWheelEvent || this.isDropEvent;\n        return (this.isFocused && this.isEditing) || this.isDropEvent;\n    }\n\n    /**\n     * Execute the given callback function using the given result as its first parameter, and the AutoNumeric object as its second.\n     *\n     * @param {number|string|Array|null} result\n     * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n     * @private\n     */\n    _executeCallback(result, callback) {\n        if (!AutoNumericHelper.isNull(callback) && AutoNumericHelper.isFunction(callback)) {\n            callback(result, this);\n        }\n    }\n\n    /**\n     * Trigger the given event on the given element with the given detail.\n     * This takes into account the `eventBubbles` and `eventIsCancelable` options.\n     *\n     * @param {string} eventName\n     * @param {HTMLElement|HTMLDocument|EventTarget} element\n     * @param {object} detail\n     * @private\n     */\n    _triggerEvent(eventName, element = document, detail = null) {\n        AutoNumericHelper.triggerEvent(eventName, element, detail, this.settings.eventBubbles, this.settings.eventIsCancelable);\n    }\n\n    /**\n     * Alias of the `getNumericString()` function.\n     * Developers should use one of the more explicit function names to get what they want :\n     * - a numeric string : `getNumericString()`\n     * - a formatted string : `getFormatted()`\n     * - a number : `getNumber()`, or\n     * - a localized numeric string : `getLocalized()`\n     *\n     * @usage anElement.get();\n     *\n     * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n     *\n     * @deprecated\n     * @returns {string|null}\n     */\n    get(callback = null) {\n        return this.getNumericString(callback);\n    }\n\n    /**\n     * Return the unformatted value as a string.\n     * This can also return `null` if `rawValue` is null.\n     *\n     * @usage anElement.getNumericString();\n     *\n     * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n     *\n     * @returns {string|null}\n     */\n    getNumericString(callback = null) {\n        let result;\n        if (AutoNumericHelper.isNull(this.rawValue)) {\n            result = null;\n        } else {\n            // Always return a numeric string\n            // The following statement gets rid of the trailing zeros in the decimal places since the current method does not pad decimals\n            result = AutoNumericHelper.trimPaddedZerosFromDecimalPlaces(this.rawValue);\n        }\n\n        this._executeCallback(result, callback);\n\n        return result;\n    }\n\n    /**\n     * Return the current formatted value of the AutoNumeric element as a string\n     *\n     * @usage anElement.getFormatted()\n     *\n     * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n     *\n     * @returns {string}\n     */\n    getFormatted(callback = null) {\n        if (!('value' in this.domElement || 'textContent' in this.domElement)) {\n            // Make sure `.value` or `.textContent` exists before trying to access those properties\n            AutoNumericHelper.throwError('Unable to get the formatted string from the element.');\n        }\n\n        const result = AutoNumericHelper.getElementValue(this.domElement);\n        this._executeCallback(result, callback);\n\n        return result;\n    }\n\n    /**\n     * Return the element unformatted value as a real Javascript number.\n     * Warning: This can lead to precision problems with big numbers that should be stored as strings.\n     *\n     * @usage anElement.getNumber()\n     *\n     * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n     *\n     * @returns {number|null}\n     */\n    getNumber(callback = null) {\n        let result;\n        if (this.rawValue === null) {\n            result = null;\n        } else {\n            result = this.constructor._toLocale(this.getNumericString(), 'number', this.settings);\n        }\n\n        this._executeCallback(result, callback);\n\n        return result;\n    }\n\n    /**\n     * Returns the unformatted value, but following the `outputFormat` setting, which means the output can either be :\n     * - a string (that could or could not represent a number (i.e. \"12345,67-\")), or\n     * - a plain number (if the setting 'number' is used).\n     *\n     * By default, the returned values are an ISO numeric string \"1234.56\" or \"-1234.56\" where the decimal character is a period.\n     * Check the \"outputFormat\" option definition for more details.\n     *\n     * @usage anElement.getLocalized();\n     *\n     * @param {null|string|function} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n     * @param {function|null} callback If a callback is passed, then the result is passed to it as its first argument, and the AutoNumeric object has its second\n     *\n     * @returns {*}\n     */\n    getLocalized(forcedOutputFormat = null, callback = null) {\n        // First, check if only a callback has been passed, and if so, sanitize the parameters\n        if (AutoNumericHelper.isFunction(forcedOutputFormat) && AutoNumericHelper.isNull(callback)) {\n            callback = forcedOutputFormat;\n            forcedOutputFormat = null;\n        }\n\n        // Then get the localized value\n        let value;\n        if (AutoNumericHelper.isEmptyString(this.rawValue)) {\n            value = '';\n        } else {\n            // Here I use `this.rawValue` instead of `this.getNumericString()` since the current input value could be unformatted with a localization (i.e. '1234567,89-').\n            // I also convert the rawValue to a number, then back to a string in order to drop the decimal part if the rawValue is an integer.\n            value = ''+Number(this.rawValue);\n        }\n\n        if (value !== '' && Number(value) === 0 && this.settings.leadingZero !== AutoNumeric.options.leadingZero.keep) {\n            value = '0';\n        }\n\n        let outputFormatToUse;\n        if (AutoNumericHelper.isNull(forcedOutputFormat)) {\n            outputFormatToUse = this.settings.outputFormat;\n        } else {\n            outputFormatToUse = forcedOutputFormat;\n        }\n\n        const result = this.constructor._toLocale(value, outputFormatToUse, this.settings);\n        this._executeCallback(result, callback);\n\n        return result;\n    }\n\n    /**\n     * Force the element to reformat its value again (just in case the formatting has been lost).\n     * This can be used right after a form submission for instance (after a previous call to `unformat`).\n     *\n     * @example anElement.reformat()\n     *\n     * @returns {AutoNumeric}\n     */\n    reformat() {\n        // `this.rawValue` is used instead of `this.domElement.value` because when the content is `unformatLocalized`, it can become a string that cannot be converted to a number easily\n        this.set(this.rawValue);\n\n        return this;\n    }\n\n    /**\n     * Remove the formatting and keep only the raw unformatted value in the element (as a numericString)\n     * Note: this is loosely based on the previous 'unSet()' function\n     *\n     * By default, values are returned as ISO numeric strings (i.e. \"1234.56\" or \"-1234.56\"), where the decimal character is a period.\n     * @example anElement.unformat()\n     *\n     * @returns {AutoNumeric}\n     */\n    unformat() {\n        this._setElementValue(this.getNumericString());\n\n        return this;\n    }\n\n    /**\n     * Remove the formatting and keep only the localized unformatted value in the element, with the option to override the default outputFormat if needed\n     *\n     * Locale formats are supported \"1234.56-\" or \"1234,56\" or \"-1234,56 or \"1234,56-\", or even plain numbers.\n     * Take a look at the `outputFormat` option definition in the default settings for more details.\n     *\n     * @param {null|string} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n     * @returns {AutoNumeric}\n     */\n    unformatLocalized(forcedOutputFormat = null) {\n        this._setElementValue(this.getLocalized(forcedOutputFormat));\n\n        return this;\n    }\n\n    /**\n     * Return `true` if the current value is the same as when the element got initialized.\n     * Note: By default, this returns `true` if the raw unformatted value is still the same even if the formatted one has changed (due to a configuration update for instance).\n     * In order to test if the formatted value is the same (which means neither the raw value nor the settings have been changed), then you must pass `false` as its argument.\n     *\n     * @param {boolean} checkOnlyRawValue If set to `true`, the pristine value is done on the raw unformatted value, not the formatted one.  If set to `false`, this also checks that the formatted value hasn't changed.\n     * @returns {boolean}\n     */\n    isPristine(checkOnlyRawValue = true) {\n        let result;\n        if (checkOnlyRawValue) {\n            result = this.initialValue === this.getNumericString();\n        } else {\n            result = this.initialValueHtmlAttribute === this.getFormatted();\n        }\n\n        return result;\n    }\n\n    /**\n     * Select the formatted element content, based on the `selectNumberOnly` option\n     *\n     * @returns {AutoNumeric}\n     */\n    select() {\n        if (this.settings.selectNumberOnly) {\n            this.selectNumber();\n        } else {\n            this._defaultSelectAll();\n        }\n\n        return this;\n    }\n\n    /**\n     * Select the whole element content (including the currency symbol).\n     * @private\n     */\n    _defaultSelectAll() {\n        AutoNumericHelper.setElementSelection(this.domElement, 0, AutoNumericHelper.getElementValue(this.domElement).length);\n    }\n\n    /**\n     * Select only the numbers in the formatted element content, leaving out the currency symbol, whatever the value of the `selectNumberOnly` option\n     *\n     * @returns {AutoNumeric}\n     */\n    selectNumber() {\n        //TODO Make sure the selection is ok when showPositiveSign is set to `true` (select the negative sign, but not the positive one)\n        const unformattedValue = AutoNumericHelper.getElementValue(this.domElement);\n        const valueLen = unformattedValue.length;\n        const currencySymbolSize = this.settings.currencySymbol.length;\n        const currencySymbolPlacement = this.settings.currencySymbolPlacement;\n        const negLen = (!AutoNumericHelper.isNegative(unformattedValue, this.settings.negativeSignCharacter))?0:1;\n        const suffixTextLen = this.settings.suffixText.length;\n\n        let start;\n        if (currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n            start = 0;\n        } else if (this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.left &&\n            negLen === 1 && currencySymbolSize > 0) {\n            start = currencySymbolSize + 1;\n        } else {\n            start = currencySymbolSize;\n        }\n\n        let end;\n        if (currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix) {\n            end = valueLen - suffixTextLen;\n        } else {\n            switch (this.settings.negativePositiveSignPlacement) {\n                case AutoNumeric.options.negativePositiveSignPlacement.left:\n                    end = valueLen - (suffixTextLen + currencySymbolSize);\n                    break;\n                case AutoNumeric.options.negativePositiveSignPlacement.right:\n                    if (currencySymbolSize > 0) {\n                        end = valueLen - (currencySymbolSize + negLen + suffixTextLen);\n                    } else {\n                        end = valueLen - (currencySymbolSize + suffixTextLen);\n                    }\n                    break;\n                default :\n                    end = valueLen - (currencySymbolSize + suffixTextLen);\n            }\n        }\n\n        AutoNumericHelper.setElementSelection(this.domElement, start, end);\n\n        return this;\n    }\n\n    /**\n     * Select only the integer part in the formatted element content, whatever the value of `selectNumberOnly`\n     *\n     * @returns {AutoNumeric}\n     */\n    selectInteger() {\n        let start = 0;\n        const isPositive = this.rawValue >= 0;\n\n        // Negative or positive sign, if any\n        if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix ||\n            (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix &&\n            (this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.prefix ||\n            this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.none))) {\n            if ((this.settings.showPositiveSign && isPositive) ||  // This only exclude the positive sign from being selected\n                (!isPositive && this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix && this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.left)) { // And this excludes the negative sign from being selected in this special case : '-€ 1.234,57suffixText'\n                start = start + 1;\n            }\n        }\n\n        // Currency symbol\n        if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix) {\n            start = start + this.settings.currencySymbol.length;\n        }\n\n        // Calculate the selection end position\n        const elementValue = AutoNumericHelper.getElementValue(this.domElement);\n        let end = elementValue.indexOf(this.settings.decimalCharacter);\n        if (end === -1) {\n            // No decimal character found\n            if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n                end = elementValue.length - this.settings.currencySymbol.length;\n            } else {\n                end = elementValue.length;\n            }\n\n            // Trailing negative sign\n            if (!isPositive &&\n                (this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.suffix ||\n                this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix)) {\n                end = end - 1;\n            }\n\n            // Avoid selecting the suffix test\n            end = end - this.settings.suffixText.length;\n        }\n\n        AutoNumericHelper.setElementSelection(this.domElement, start, end);\n\n        return this;\n    }\n\n    /**\n     * Select only the decimal part in the formatted element content, whatever the value of `selectNumberOnly`\n     * Multiple cases are possible :\n     * +1.234,57suffixText\n     *\n     * € +1.234,57suffixText\n     * +€ 1.234,57suffixText\n     * € 1.234,57+suffixText\n     *\n     * 1.234,57+ €suffixText\n     * 1.234,57 €+suffixText\n     * +1.234,57 €suffixText\n     *\n     * @returns {AutoNumeric}\n     */\n    selectDecimal() {\n        let start = AutoNumericHelper.getElementValue(this.domElement).indexOf(this.settings.decimalCharacter);\n        let end;\n\n        if (start === -1) {\n            // The decimal character has not been found, we deselect all\n            start = 0;\n            end = 0;\n        } else {\n            // A decimal character has been found\n            start = start + 1; // We add 1 to exclude the decimal character from the selection\n\n            let decimalCount;\n            if (this.isFocused) {\n                decimalCount = this.settings.decimalPlacesShownOnFocus;\n            } else {\n                decimalCount = this.settings.decimalPlacesShownOnBlur;\n            }\n\n            end = start + Number(decimalCount);\n        }\n\n        AutoNumericHelper.setElementSelection(this.domElement, start, end);\n\n        return this;\n    }\n\n    /**\n     * Return the DOM element reference of the autoNumeric-managed element\n     *\n     * @returns {HTMLElement|HTMLInputElement}\n     */\n    node() {\n        return this.domElement;\n    }\n\n    /**\n     * Return the DOM element reference of the parent node of the autoNumeric-managed element\n     *\n     * @returns {HTMLElement|HTMLInputElement|Node}\n     */\n    parent() {\n        return this.domElement.parentNode;\n    }\n\n    /**\n     * Detach the current AutoNumeric element from the shared local 'init' list.\n     * This means any changes made on that local shared list will not be transmitted to that element anymore.\n     * Note : The user can provide another AutoNumeric element, and detach this one instead of the current one.\n     *\n     * @param {AutoNumeric} otherAnElement\n     * @returns {AutoNumeric}\n     */\n    detach(otherAnElement = null) { //FIXME test this\n        let domElementToDetach;\n        if (!AutoNumericHelper.isNull(otherAnElement)) {\n            domElementToDetach = otherAnElement.node();\n        } else {\n            domElementToDetach = this.domElement;\n        }\n\n        this._removeFromLocalList(domElementToDetach); //FIXME What happens if the selected dom element does not exist in the list?\n\n        return this;\n    }\n\n    /**\n     * Attach the given AutoNumeric element to the shared local 'init' list.\n     * When doing that, by default the DOM content is left untouched.\n     * The user can force a reformat with the new shared list options by passing a second argument to `true`.\n     *\n     * @param {AutoNumeric} otherAnElement\n     * @param {boolean} reFormat\n     * @returns {AutoNumeric}\n     */\n    attach(otherAnElement, reFormat = true) { //FIXME test this\n        this._addToLocalList(otherAnElement.node()); //FIXME Should we make sure the element is not already in the list?\n        if (reFormat) {\n            otherAnElement.update(this.settings);\n        }\n\n        return this;\n    }\n\n    /**\n     * Format and return the given value, or set the formatted value into the given DOM element if one is passed as an argument.\n     * By default, this use the current element settings.\n     * The user can override any option of its choosing by passing an option object.\n     *\n     * @param {number|HTMLElement|HTMLInputElement} valueOrElement\n     * @param {null|object} optionOverride\n     * @returns {string|null}\n     */\n    formatOther(valueOrElement, optionOverride = null) { //FIXME test this\n        return this._formatOrUnformatOther(true, valueOrElement, optionOverride);\n    }\n\n    /**\n     * Unformat and return the raw numeric string corresponding to the given value, or directly set the unformatted value into the given DOM element if one is passed as an argument.\n     * By default, this use the current element settings.\n     * The user can override any option of its choosing by passing an option object.\n\n     * @param {string|HTMLElement|HTMLInputElement} stringOrElement\n     * @param {null|object} optionOverride\n     * @returns {string|null}\n     */\n    unformatOther(stringOrElement, optionOverride = null) { //FIXME test this\n        return this._formatOrUnformatOther(false, stringOrElement, optionOverride);\n    }\n\n    /**\n     * Method that either format or unformat the value of another element.\n     *\n     * - Format and return the given value, or set the formatted value into the given DOM element if one is passed as an argument.\n     * - Unformat and return the raw numeric string corresponding to the given value, or directly set the unformatted value into the given DOM element if one is passed as an argument.\n     *\n     * By default, this use the current element settings.\n     * The user can override any option of its choosing by passing an option object.\n     *\n     * @param {boolean} isFormatting If set to `true`, then the method formats, otherwise if set to `false`, it unformats\n     * @param {number|string|HTMLElement|HTMLInputElement} valueOrStringOrElement\n     * @param {null|object} optionOverride\n     * @returns {string|null}\n     * @private\n     */\n    _formatOrUnformatOther(isFormatting, valueOrStringOrElement, optionOverride = null) { //FIXME test this\n        // If the user wants to override the current element settings temporarily\n        let settingsToUse;\n        if (!AutoNumericHelper.isNull(optionOverride)) {\n            settingsToUse = this._cloneAndMergeSettings(optionOverride);\n        } else {\n            settingsToUse = this.settings;\n        }\n\n        // Then the unformatting is done...\n        let result;\n        if (AutoNumericHelper.isElement(valueOrStringOrElement)) {\n            // ...either directly on the DOM element value\n            const elementValue = AutoNumericHelper.getElementValue(valueOrStringOrElement);\n            if (isFormatting) {\n                result = AutoNumeric.format(elementValue, settingsToUse);\n            }\n            else {\n                result = AutoNumeric.unformat(elementValue, settingsToUse);\n            }\n\n            AutoNumericHelper.setElementValue(valueOrStringOrElement, result); //TODO Use `unformatAndSet` and `formatAndSet`instead\n\n            return null;\n        }\n\n        // ...or on the given value\n        if (isFormatting) {\n            result = AutoNumeric.format(valueOrStringOrElement, settingsToUse);\n        }\n        else {\n            result = AutoNumeric.unformat(valueOrStringOrElement, settingsToUse);\n        }\n\n        return result;\n    }\n\n    /**\n     * Use the current AutoNumeric element settings to initialize the DOM element(s) given as a parameter.\n     * Doing so will *link* the AutoNumeric elements together since they will share the same local AutoNumeric element list.\n     * (cf. prototype pattern : https://en.wikipedia.org/wiki/Prototype_pattern)\n     *\n     * You can `init` either a single DOM element (in that case an AutoNumeric object will be returned), or an array of DOM elements or a string that will be used as a CSS selector. In the latter cases, an array of AutoNumeric objects will then be returned (or an empty array if nothing gets selected by the CSS selector).\n     *\n     * Use case : Once you have an AutoNumeric element already setup correctly with the right options, you can use it as many times you want to initialize as many other DOM elements as needed.\n     * Note : this works only on elements that can be managed by autoNumeric.\n     *\n     * @param {HTMLElement|HTMLInputElement|Array<HTMLElement|HTMLInputElement>|string} domElementOrArrayOrString\n     * @param {boolean} attached If set to `false`, then the newly generated AutoNumeric element will not share the same local element list\n     * @returns {AutoNumeric|[AutoNumeric]}\n     */\n    init(domElementOrArrayOrString, attached = true) {\n        let returnASingleAutoNumericObject = false; // By default, this function returns an array of AutoNumeric objects\n        let domElementsArray = [];\n        if (AutoNumericHelper.isString(domElementOrArrayOrString)) {\n            domElementsArray = [...document.querySelectorAll(domElementOrArrayOrString)]; // Convert a NodeList to an Array\n        } else if (AutoNumericHelper.isElement(domElementOrArrayOrString)) {\n            domElementsArray.push(domElementOrArrayOrString);\n            returnASingleAutoNumericObject = true; // Special case when only one DOM element is passed as a parameter\n        } else if (AutoNumericHelper.isArray(domElementOrArrayOrString)) {\n            domElementsArray = domElementOrArrayOrString;\n        } else {\n            AutoNumericHelper.throwError(`The given parameters to the 'init' function are invalid.`);\n        }\n\n        if (domElementsArray.length === 0) {\n            AutoNumericHelper.warning(`No valid DOM elements were given hence no AutoNumeric object were instantiated.`, true);\n\n            return [];\n        }\n\n        const currentLocalList = this._getLocalList();\n        const autoNumericObjectsArray = [];\n\n        // Instantiate (and link depending on `attached`) each AutoNumeric objects\n        domElementsArray.forEach(domElement => {\n            // Initialize the new AutoNumeric element\n            const originalCreateLocalListSetting = this.settings.createLocalList;\n            if (attached) {\n                // Temporary variable to know if we should create the local list during the initialization (since we'll remove it afterward)\n                this.settings.createLocalList = false;\n            }\n\n            const newAutoNumericElement =  new AutoNumeric(domElement, AutoNumericHelper.getElementValue(domElement), this.settings);\n\n            // Set the common shared local list if needed\n            // If the user wants to create a detached new AutoNumeric element, then skip the following step that bind the two elements together by default\n            if (attached) {\n                // 1) Set the local list reference to point to the initializer's one\n                newAutoNumericElement._setLocalList(currentLocalList);\n\n                // 2) Add the new element to that existing list\n                this._addToLocalList(domElement, newAutoNumericElement); // Here we use the *new* AutoNumeric object reference to add to the local list, since we'll need the reference to `this` in the methods to points to that new AutoNumeric object.\n                this.settings.createLocalList = originalCreateLocalListSetting;\n            }\n\n            autoNumericObjectsArray.push(newAutoNumericElement);\n        });\n\n        if (returnASingleAutoNumericObject) {\n            // If a single DOM element was used as the parameter, then we return an AutoNumeric object directly\n            return autoNumericObjectsArray[0];\n        }\n\n        // ...otherwise we return an Array of AutoNumeric objects\n        return autoNumericObjectsArray;\n    }\n\n    /**\n     * Reset the element value either to the empty string '', or the currency sign, depending on the `emptyInputBehavior` option value.\n     * If you set the `forceClearAll` argument to `true`, then the `emptyInputBehavior` option is overridden and the whole input is clear, including any currency sign.\n     *\n     * @param {boolean} forceClearAll\n     * @returns {AutoNumeric}\n     */\n    clear(forceClearAll = false) {\n        if (forceClearAll) {\n            const temporaryForcedOptions = {\n                emptyInputBehavior: AutoNumeric.options.emptyInputBehavior.focus,\n            };\n            this.set('', temporaryForcedOptions);\n        } else {\n            this.set('');\n        }\n\n        return this;\n    }\n\n    /**\n     * Remove the autoNumeric data and event listeners from the element, but keep the element content intact.\n     * This also clears the value from sessionStorage (or cookie, depending on browser supports).\n     * Note: this does not remove the formatting.\n     *\n     * @example anElement.remove()\n     */\n    remove() {\n        this._removeValueFromPersistentStorage();\n        this._removeEventListeners();\n        this._removeWatcher();\n\n        // Also remove the element from the local AutoNumeric list\n        this._removeFromLocalList(this.domElement);\n        // Also remove the element from the global AutoNumeric list\n        this.constructor._removeFromGlobalList(this);\n    }\n\n    /**\n     * Remove the autoNumeric data and event listeners from the element, and reset its value to the empty string ''.\n     * This also clears the value from sessionStorage (or cookie, depending on browser supports).\n     *\n     * @example anElement.wipe()\n     */\n    wipe() {\n        this._setElementValue('', false); // Do not send the 'AutoNumeric.events.formatted' event when wiping an AutoNumeric object\n        this.remove();\n    }\n\n    /**\n     * Remove the autoNumeric data and event listeners from the element, and delete the DOM element altogether\n     */\n    nuke() {\n        this.remove();\n        // Remove the element from the DOM\n        this.domElement.parentNode.removeChild(this.domElement);\n    }\n\n\n    // Special functions that really work on the parent <form> element, instead of the <input> element itself\n\n    /**\n     * Return a reference to the parent <form> element if it exists, otherwise return `null`.\n     * If the parent form element as already been found, this directly return a reference to it.\n     * However, you can force AutoNumeric to search again for its reference by passing `true` as a parameter to this method.\n     * This method updates the `this.parentForm` attribute.\n     *\n     * In either case, whenever a new parent form is set for the current AutoNumeric element, we make sure to update the anCount and anFormHandler attributes on both the old form and the new one (for instance in case the user moved the input elements with `appendChild()` since AutoNumeric cannot not detect that).\n     *\n     * @param {boolean} forceSearch If set to `true`, the parent form is searched again, even if `this.parentForm` is already set.\n     *\n     * @returns {HTMLFormElement|null}\n     */\n    form(forceSearch = false) {\n        if (forceSearch || AutoNumericHelper.isUndefinedOrNullOrEmpty(this.parentForm)) {\n            const newParentForm = this._getParentForm();\n            if (!AutoNumericHelper.isNull(newParentForm) && newParentForm !== this.parentForm) {\n                // If the current parent form exists and is different from the previous parent form\n\n                // Search for all the AutoNumeric elements in the old parent form\n                const oldANChildren = this._getFormAutoNumericChildren(this.parentForm);\n                // Update the anCount with the correct number of AutoNumeric elements\n                this.parentForm.dataset.anCount = oldANChildren.length;\n\n                // Check if the new parent form already has a anFormHandler name\n                if (this._hasFormHandlerFunction(newParentForm)) {\n                    this._incrementParentFormCounter(newParentForm); // Increment its counter\n                } else {\n                    // Create one and set the anCount to 1\n                    this._storeFormHandlerFunction(newParentForm);\n                    this._initializeFormCounterToOne(newParentForm);\n                }\n            }\n\n            this.parentForm = newParentForm;\n        }\n\n        return this.parentForm;\n    }\n\n    /**\n     * Returns an array of the AutoNumeric-managed elements for the given form element is passed, otherwise for the current `this.parentForm` element.\n     * This search for <input> elements, as well as contenteditable non-input tag ones. This also search for elements outside the `form` elements.\n     *\n     * @param {HTMLFormElement|null} formElement\n     *\n     * @returns {Array.<HTMLInputElement>}\n     * @private\n     */\n    _getFormAutoNumericChildren(formElement) {\n        // Search for all the child AutoNumeric elements in that parent form\n        const inputElementsList = [...formElement.elements]; //XXX `.elements` here only returns the form's inputs, not the other child elements that could be contenteditable\n        const nonInputContentEditableElementsList = this._getContenteditableElements(formElement); // Get the contenteditable elements inside and outside the form element\n        const elementsList = AutoNumericHelper.arrayUnique(inputElementsList, nonInputContentEditableElementsList);\n\n        return elementsList.filter(element => this.constructor.isManagedByAutoNumeric(element));\n    }\n\n    /**\n     * Returns an array of the non-input contenteditable elements linked to the given form element.\n     * Two types of elements are possible, either located inside the form element, or outside.\n     * For the outside elements, this only works if the form element has a defined id and that id is referenced on the non-input element as the `form` attribute.\n     * If no elements can be found, then an empty array is returned.\n     *\n     * @param {HTMLFormElement|null} formElement\n     *\n     * @returns {Array.<HTMLInputElement>}\n     * @private\n     */\n    _getContenteditableElements(formElement) {\n        if (AutoNumericHelper.isUndefinedOrNullOrEmpty(formElement) || !formElement.hasAttribute('id')) {\n            return [];\n        }\n        const elementsInside = [...formElement.querySelectorAll('[contenteditable=true]')];\n        const elementsOutside = [...document.querySelectorAll(`*:not(input)[form=${formElement.getAttribute('id')}][contenteditable=true]`)];\n\n        return AutoNumericHelper.arrayUnique(elementsInside, elementsOutside);\n    }\n\n    /**\n     * Returns a reference to the parent <form> element if it exists, otherwise return `null`.\n     *\n     * @returns {HTMLFormElement|null}\n     * @private\n     */\n    _getParentForm() {\n        if (!AutoNumericHelper.isUndefined(this.domElement.form)) return this.domElement.form; // This catches input elements outside the form element\n\n        if (this.domElement.tagName.toLowerCase() === 'body') {\n            return null;\n        }\n\n        let node = this.domElement;\n        let tagName;\n        do {\n            node = node.parentNode;\n            if (AutoNumericHelper.isNull(node)) {\n                // Special case when using templates with frameworks like Vue.js, where the input element can be 'detached' when initializing the DOM structure\n                return null;\n            }\n\n            if (node.tagName) {\n                tagName = node.tagName.toLowerCase();\n            } else {\n                tagName = '';\n            }\n\n            if (tagName === 'body') {\n                // Get out of the loop if we get up to the `<body>` element\n                break;\n            }\n        } while (tagName !== 'form');\n\n        if (tagName === 'form') {\n            return node;\n        } else {\n            return null;\n        }\n    }\n\n    /**\n     * Return a string in standard URL-encoded notation with the form input values being unformatted.\n     * This string can be used as a query for instance.\n     *\n     * @returns {string}\n     */\n    formNumericString() {\n        return this.constructor._serializeNumericString(this.form(), this.settings.serializeSpaces);\n    }\n\n    /**\n     * Return a string in standard URL-encoded notation with the form input values being formatted.\n     *\n     * @returns {string}\n     */\n    formFormatted() {\n        return this.constructor._serializeFormatted(this.form(), this.settings.serializeSpaces);\n    }\n\n    /**\n     * Return a string in standard URL-encoded notation with the form input values, with localized values.\n     * The default output format can be overridden by passing the option as a parameter.\n     *\n     * @param {null|string} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n     * @returns {string}\n     */\n    formLocalized(forcedOutputFormat = null) {\n        let outputFormatToUse;\n        if (AutoNumericHelper.isNull(forcedOutputFormat)) {\n            outputFormatToUse = this.settings.outputFormat;\n        } else {\n            outputFormatToUse = forcedOutputFormat;\n        }\n\n        return this.constructor._serializeLocalized(this.form(), this.settings.serializeSpaces, outputFormatToUse);\n    }\n\n    /**\n     * Return an array containing an object for each form <input> element.\n     * Those objects are of the following structure `{ name: foo, value: '42' }`, where the `name` is the DOM element name, and the `value` is an unformatted numeric string.\n     *\n     * @returns {Array}\n     */\n    formArrayNumericString() {\n        return this.constructor._serializeNumericStringArray(this.form(), this.settings.serializeSpaces);\n    }\n\n    /**\n     * Return an array containing an object for each form <input> element.\n     * Those objects are of the following structure `{ name: foo, value: '42' }`, where the `name` is the DOM element name, and the `value` is the formatted string.\n     *\n     * @returns {Array}\n     */\n    formArrayFormatted() {\n        return this.constructor._serializeFormattedArray(this.form(), this.settings.serializeSpaces);\n    }\n\n    /**\n     * Return an array containing an object for each form <input> element.\n     * Those objects are of the following structure `{ name: foo, value: '42' }`, where the `name` is the DOM element name, and the `value` is the localized numeric string.\n     *\n     * @param {null|string} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n     * @returns {Array}\n     */\n    formArrayLocalized(forcedOutputFormat = null) {\n        let outputFormatToUse;\n        if (AutoNumericHelper.isNull(forcedOutputFormat)) {\n            outputFormatToUse = this.settings.outputFormat;\n        } else {\n            outputFormatToUse = forcedOutputFormat;\n        }\n\n        return this.constructor._serializeLocalizedArray(this.form(), this.settings.serializeSpaces, outputFormatToUse);\n    }\n\n    /**\n     * Return a JSON string containing an object representing the form input values.\n     * This is based on the result of the `formArrayNumericString()` function.\n     *\n     * @returns {string}\n     */\n    formJsonNumericString() {\n        return JSON.stringify(this.formArrayNumericString());\n    }\n\n    /**\n     * Return a JSON string containing an object representing the form input values.\n     * This is based on the result of the `formArrayFormatted()` function.\n     *\n     * @returns {string}\n     */\n    formJsonFormatted() {\n        return JSON.stringify(this.formArrayFormatted());\n    }\n\n    /**\n     * Return a JSON string containing an object representing the form input values.\n     * This is based on the result of the `formArrayLocalized()` function.\n     *\n     * @param {null|string} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n     * @returns {string}\n     */\n    formJsonLocalized(forcedOutputFormat = null) {\n        return JSON.stringify(this.formArrayLocalized(forcedOutputFormat));\n    }\n\n    /**\n     * Unformat all the autoNumeric-managed elements that are a child of the parent <form> element of this DOM element, to numeric strings\n     *\n     * @returns {AutoNumeric}\n     */\n    formUnformat() { //FIXME test this\n        const inputs = this.constructor._getChildANInputElement(this.form());\n        inputs.forEach(input => {\n            AutoNumeric.getAutoNumericElement(input).unformat();\n        });\n\n        return this;\n    }\n\n    /**\n     * Unformat all the autoNumeric-managed elements that are a child of the parent <form> element of this DOM element, to localized strings\n     *\n     * @returns {AutoNumeric}\n     */\n    formUnformatLocalized() { //FIXME test this\n        const inputs = this.constructor._getChildANInputElement(this.form());\n        inputs.forEach(input => {\n            AutoNumeric.getAutoNumericElement(input).unformatLocalized();\n        });\n\n        return this;\n    }\n\n    /**\n     * Reformat all the autoNumeric-managed elements that are a child of the parent <form> element of this DOM element\n     *\n     * @returns {AutoNumeric}\n     */\n    formReformat() { //FIXME test this\n        const inputs = this.constructor._getChildANInputElement(this.form());\n        inputs.forEach(input => {\n            AutoNumeric.getAutoNumericElement(input).reformat();\n        });\n\n        return this;\n    }\n\n    /**\n     * Convert the input values to numeric strings, submit the form, then reformat those back.\n     * The function can either take a callback, or not. If it doesn't, the default `form.submit()` function will be called.\n     * Otherwise, it runs `callback(value)` with `value` being equal to the result of `formNumericString()`.\n     *\n     * @param {function|null} callback\n     * @returns {AutoNumeric}\n     */\n    formSubmitNumericString(callback = null) { //FIXME test this\n        if (AutoNumericHelper.isNull(callback)) {\n            this.formUnformat();\n            this.form().submit();\n            this.formReformat();\n        } else if (AutoNumericHelper.isFunction(callback)) {\n            callback(this.formNumericString());\n        } else {\n            AutoNumericHelper.throwError(`The given callback is not a function.`);\n        }\n\n        return this;\n    }\n\n    /**\n     * Submit the form with the current formatted values.\n     * The function can either take a callback, or not. If it doesn't, the default `form.submit()` function will be called.\n     * Otherwise, it runs `callback(value)` with `value` being equal to the result of `formFormatted()`.\n     *\n     * @param {function|null} callback\n     * @returns {AutoNumeric}\n     */\n    formSubmitFormatted(callback = null) { //FIXME test this\n        if (AutoNumericHelper.isNull(callback)) {\n            this.form().submit();\n        } else if (AutoNumericHelper.isFunction(callback)) {\n            callback(this.formFormatted());\n        } else {\n            AutoNumericHelper.throwError(`The given callback is not a function.`);\n        }\n\n        return this;\n    }\n\n    /**\n     * Convert the input values to localized strings, submit the form, then reformat those back.\n     * The function can either take a callback, or not. If it doesn't, the default `form.submit()` function will be called.\n     * Otherwise, it runs `callback(value)` with `value` being equal to the result of `formLocalized()`.\n     *\n     * @param {null|string} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n     * @param {function|null} callback\n     * @returns {AutoNumeric}\n     */\n    formSubmitLocalized(forcedOutputFormat = null, callback = null) { //FIXME test this\n        if (AutoNumericHelper.isNull(callback)) {\n            this.formUnformatLocalized();\n            this.form().submit();\n            this.formReformat();\n        } else if (AutoNumericHelper.isFunction(callback)) {\n            callback(this.formLocalized(forcedOutputFormat));\n        } else {\n            AutoNumericHelper.throwError(`The given callback is not a function.`);\n        }\n\n        return this;\n    }\n\n    /**\n     * Generate an array of numeric strings from the `<input>` elements, and pass it to the given callback.\n     * Under the hood, the array is generated via a call to `formArrayNumericString()`.\n     *\n     * @param {function} callback\n     * @returns {AutoNumeric}\n     */\n    formSubmitArrayNumericString(callback) { //FIXME test this\n        if (AutoNumericHelper.isFunction(callback)) {\n            callback(this.formArrayNumericString());\n        } else {\n            AutoNumericHelper.throwError(`The given callback is not a function.`);\n        }\n\n        return this;\n    }\n\n    /**\n     * Generate an array of the current formatted values from the `<input>` elements, and pass it to the given callback.\n     * Under the hood, the array is generated via a call to `formArrayFormatted()`.\n     *\n     * @param {function} callback\n     * @returns {AutoNumeric}\n     */\n    formSubmitArrayFormatted(callback) { //FIXME test this\n        if (AutoNumericHelper.isFunction(callback)) {\n            callback(this.formArrayFormatted());\n        } else {\n            AutoNumericHelper.throwError(`The given callback is not a function.`);\n        }\n\n        return this;\n    }\n\n    /**\n     * Generate an array of localized strings from the `<input>` elements, and pass it to the given callback.\n     * Under the hood, the array is generated via a call to `formArrayLocalized()`.\n     *\n     * @param {function} callback\n     * @param {null|string} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n     * @returns {AutoNumeric}\n     */\n    formSubmitArrayLocalized(callback, forcedOutputFormat = null) { //FIXME test this\n        if (AutoNumericHelper.isFunction(callback)) {\n            callback(this.formArrayLocalized(forcedOutputFormat));\n        } else {\n            AutoNumericHelper.throwError(`The given callback is not a function.`);\n        }\n\n        return this;\n    }\n\n    /**\n     * Generate a JSON string with the numeric strings values from the `<input>` elements, and pass it to the given callback.\n     * Under the hood, the array is generated via a call to `formJsonNumericString()`.\n     *\n     * @param {function} callback\n     * @returns {AutoNumeric}\n     */\n    formSubmitJsonNumericString(callback) { //FIXME test this\n        if (AutoNumericHelper.isFunction(callback)) {\n            callback(this.formJsonNumericString());\n        } else {\n            AutoNumericHelper.throwError(`The given callback is not a function.`);\n        }\n\n        return this;\n    }\n\n    /**\n     * Generate a JSON string with the current formatted values from the `<input>` elements, and pass it to the given callback.\n     * Under the hood, the array is generated via a call to `formJsonFormatted()`.\n     *\n     * @param {function} callback\n     * @returns {AutoNumeric}\n     */\n    formSubmitJsonFormatted(callback) { //FIXME test this\n        if (AutoNumericHelper.isFunction(callback)) {\n            callback(this.formJsonFormatted());\n        } else {\n            AutoNumericHelper.throwError(`The given callback is not a function.`);\n        }\n\n        return this;\n    }\n\n    /**\n     * Generate a JSON string with the localized strings values from the `<input>` elements, and pass it to the given callback.\n     * Under the hood, the array is generated via a call to `formJsonLocalized()`.\n     *\n     * @param {function} callback\n     * @param {null|string} forcedOutputFormat If set to something different from `null`, then this is used as an overriding outputFormat option\n     * @returns {AutoNumeric}\n     */\n    formSubmitJsonLocalized(callback, forcedOutputFormat = null) { //FIXME test this\n        if (AutoNumericHelper.isFunction(callback)) {\n            callback(this.formJsonLocalized(forcedOutputFormat));\n        } else {\n            AutoNumericHelper.throwError(`The given callback is not a function.`);\n        }\n\n        return this;\n    }\n\n    /**\n     * Unformat the given AutoNumeric element, and update the `hoveredWithAlt` variable.\n     *\n     * @param {AutoNumeric} anElement\n     * @private\n     */\n    static _unformatAltHovered(anElement) {\n        anElement.hoveredWithAlt = true;\n        anElement.unformat();\n    }\n\n    /**\n     * Reformat the given AutoNumeric element, and update the `hoveredWithAlt` variable.\n     *\n     * @param {AutoNumeric} anElement\n     * @private\n     */\n    static _reformatAltHovered(anElement) {\n        anElement.hoveredWithAlt = false;\n        anElement.reformat();\n    }\n\n    /**\n     * Return an array of autoNumeric elements, child of the <form> element passed as a parameter.\n     *\n     * @param {HTMLElement} formNode\n     * @returns {Array}\n     * @private\n     */\n    static _getChildANInputElement(formNode) { //FIXME test this\n        const inputList = formNode.getElementsByTagName('input');\n\n        // Loop this list and keep only the inputs that are managed by AutoNumeric\n        const autoNumericInputs = [];\n        const inputElements = Array.prototype.slice.call(inputList, 0);\n        inputElements.forEach(input => {\n            if (this.test(input)) {\n                autoNumericInputs.push(input);\n            }\n        });\n\n        return autoNumericInputs;\n    }\n\n    // Static methods\n    /**\n     * Test if the given DOM element, or the element selected by the given selector string is already managed by AutoNumeric (if it has been initialized on the current page).\n     *\n     * @param {HTMLElement|string} domElementOrSelector Accepts either directly a DOM element to test, or a string selector (that will return one and only one element, if any)\n     * @returns {boolean}\n     */\n    static test(domElementOrSelector) {\n        return this._isInGlobalList(AutoNumericHelper.domElement(domElementOrSelector));\n    }\n\n    /**\n     * Create a WeakMap with the given name.\n     *\n     * @param {string} weakMapName\n     * @private\n     */\n    static _createWeakMap(weakMapName) {\n        window[weakMapName] = new WeakMap();\n    }\n\n    /**\n     * Create a list of all the AutoNumeric elements that are initialized on the current page.\n     * This is needed in order to determine if a given dom element is already managed by autoNumeric.\n     * This uses a WeakMap in order to limit potential garbage collection problems.\n     * (cf. my tests on http://codepen.io/AnotherLinuxUser/pen/pRQGaM?editors=1011)\n     * @private\n     */\n    static _createGlobalList() {\n        // The check that this global list does not exist already is done in the add and remove functions already\n        this.autoNumericGlobalListName = 'autoNumericGlobalList'; //XXX This looks weird to set a variable on `this.` in a static method, but that really declare that variable like a static property\n        // Note: I should not get any memory leaks for referencing the DOM element in the `value`, this DOM element also being the `key`, according to the spec : http://www.ecma-international.org/ecma-262/6.0/#sec-weakmap-objects\n        this._createWeakMap(this.autoNumericGlobalListName);\n    }\n\n    /**\n     * Return `true` if the global AutoNumeric element list exists.\n     *\n     * @returns {boolean}\n     * @private\n     */\n    static _doesGlobalListExists() {\n        const type = typeof window[this.autoNumericGlobalListName];\n        return type !== 'undefined' &&\n               type === 'object';\n    }\n\n    /**\n     * Add the given object to the global AutoNumeric element list.\n     *\n     * @param {AutoNumeric} autoNumericObject\n     * @private\n     */\n    static _addToGlobalList(autoNumericObject) {\n        if (!this._doesGlobalListExists()) {\n            this._createGlobalList();\n        }\n\n        const domElement = autoNumericObject.node();\n        // This checks if the object is not already in the global list before adding it.\n        // This could happen if an AutoNumeric element is initialized, then the DOM element is removed directly via `removeChild` (hence the reference does not get removed from the global list), then it get recreated and initialized again\n        if (this._isInGlobalList(domElement)) {\n            if (this._getFromGlobalList(domElement) === this) {\n                // Do not add this AutoNumeric object again since it's already in that global list\n                return;\n            } else {\n                // Print a warning to warn that the domElement already has a reference in the global map (but we cannot for sure starts deleting those old references since they could still be used by another AutoNumeric object)\n                AutoNumericHelper.warning(`A reference to the DOM element you just initialized already exists in the global AutoNumeric element list. Please make sure to not initialize the same DOM element multiple times.`, autoNumericObject.getSettings().showWarnings);\n            }\n        }\n\n        window[this.autoNumericGlobalListName].set(domElement, autoNumericObject);\n    }\n\n    /**\n     * Remove the given object from the global AutoNumeric element list.\n     *\n     * @param {AutoNumeric} autoNumericObject\n     * @private\n     */\n    static _removeFromGlobalList(autoNumericObject) { //FIXME test this\n        if (this._doesGlobalListExists()) {\n            window[this.autoNumericGlobalListName].delete(autoNumericObject.node());\n        }\n    }\n\n    /**\n     * Return the value associated to the key `domElement` passed as a parameter.\n     * The value is the AutoNumeric object that manages the DOM element `domElement`.\n     *\n     * @param {HTMLElement|HTMLInputElement} domElement\n     * @returns {null|AutoNumeric}\n     * @private\n     */\n    static _getFromGlobalList(domElement) { //FIXME test this\n        if (this._doesGlobalListExists()) {\n            return window[this.autoNumericGlobalListName].get(domElement);\n        }\n\n        return null;\n    }\n\n    /**\n     * Check if the given DOM element is in the global AutoNumeric element list.\n     *\n     * @param {HTMLElement|HTMLInputElement} domElement\n     * @returns {boolean}\n     * @private\n     */\n    static _isInGlobalList(domElement) { //FIXME test this\n        if (!this._doesGlobalListExists()) {\n            return false;\n        }\n\n        return window[this.autoNumericGlobalListName].has(domElement);\n    }\n\n    /**\n     * Create a `Map` that will store all the autoNumeric elements that are initialized from this current element.\n     * @private\n     */\n    _createLocalList() {\n        this.autoNumericLocalList = new Map();\n        this._addToLocalList(this.domElement);\n    }\n\n    /**\n     * In some rare cases, you could want to delete the local list generated during the element initialization (in order to use another one instead for instance).\n     * @private\n     */\n    _deleteLocalList() {\n        delete this.autoNumericLocalList;\n    }\n\n    /**\n     * Set the local list with the given Map object.\n     *\n     * @param {Map} localList\n     * @private\n     */\n    _setLocalList(localList) {\n        this.autoNumericLocalList = localList;\n    }\n\n    /**\n     * Return the local list Map object.\n     *\n     * @returns {*|Map}\n     * @private\n     */\n    _getLocalList() {\n        return this.autoNumericLocalList;\n    }\n\n    /**\n     * Return `true` if the AutoNumeric object has a local list defined already and has at least one element in it (itself usually).\n     *\n     * @returns {boolean}\n     * @private\n     */\n    _hasLocalList() {\n        return this.autoNumericLocalList instanceof Map && this.autoNumericLocalList.size !== 0;\n    }\n\n    /**\n     * Add the given object to the local autoNumeric element list.\n     * Note: in order to keep a coherent list, we only add DOM elements in it, not the autoNumeric object.\n     *\n     * @param {HTMLElement|HTMLInputElement} domElement\n     * @param {AutoNumeric} autoNumericObject A reference to the AutoNumeric object that manage the given DOM element\n     * @throws\n     * @private\n     */\n    _addToLocalList(domElement, autoNumericObject = null) {\n        if (AutoNumericHelper.isNull(autoNumericObject)) {\n            autoNumericObject = this;\n        }\n\n        if (!AutoNumericHelper.isUndefined(this.autoNumericLocalList)) {\n            this.autoNumericLocalList.set(domElement, autoNumericObject); // Use the DOM element as key, and the AutoNumeric object as the value\n        } else {\n            AutoNumericHelper.throwError(`The local list provided does not exists when trying to add an element. [${this.autoNumericLocalList}] given.`);\n        }\n    }\n\n    /**\n     * Remove the given object from the local autoNumeric element list.\n     *\n     * @param {HTMLElement|HTMLInputElement} domElement\n     * @private\n     */\n    _removeFromLocalList(domElement) {\n        if (!AutoNumericHelper.isUndefined(this.autoNumericLocalList)) {\n            this.autoNumericLocalList.delete(domElement);\n        } else if (this.settings.createLocalList) {\n            AutoNumericHelper.throwError(`The local list provided does not exists when trying to remove an element. [${this.autoNumericLocalList}] given.`);\n        }\n    }\n\n    /**\n     * Merge the `newSettings` given as parameters into the current element settings.\n     *\n     * WARNING: Using `Object.assign()` here means the merge is not recursive and only one depth is merged.\n     * cf. http://stackoverflow.com/a/39188108/2834898\n     * cf. tests on http://codepen.io/AnotherLinuxUser/pen/KaJORq?editors=0011\n     *\n     * @param {object} newSettings\n     * @private\n     */\n    _mergeSettings(...newSettings) {\n        Object.assign(this.settings, ...newSettings);\n    }\n\n    /**\n     * Return a new object with the current element settings merged with the new settings.\n     *\n     * @param {object} newSettings\n     * @returns {object}\n     * @private\n     */\n    _cloneAndMergeSettings(...newSettings) {\n        const result = {};\n        Object.assign(result, this.settings, ...newSettings);\n\n        return result;\n    }\n\n    /**\n     * Validate the given option object.\n     * If the options are valid, this function returns nothing, otherwise if the options are invalid, this function throws an error.\n     *\n     * This tests if the options are not conflicting and are well formatted.\n     * This function is lenient since it only tests the settings properties ; it ignores any other properties the options object could have.\n     *\n     * @param {*} userOptions\n     * @param {Boolean} shouldExtendDefaultOptions If `true`, then this function will extend the `userOptions` passed by the user, with the default options.\n     * @param {object|null} originalOptions The user can pass the original options (and not the one that are generated from the default settings and the various usability corrections), in order to add compatibility and conflicts checks.\n     * @throws Error This throws if the `userOptions` are not valid\n     */\n    static validate(userOptions, shouldExtendDefaultOptions = true, originalOptions = null) {\n        if (AutoNumericHelper.isUndefinedOrNullOrEmpty(userOptions) || !AutoNumericHelper.isObject(userOptions)) {\n            AutoNumericHelper.throwError(`The userOptions are invalid ; it should be a valid object, [${userOptions}] given.`);\n        }\n\n        const isOriginalOptionAnObject = AutoNumericHelper.isObject(originalOptions);\n        if (!isOriginalOptionAnObject && !AutoNumericHelper.isNull(originalOptions)) {\n            AutoNumericHelper.throwError(`The 'originalOptions' parameter is invalid ; it should either be a valid option object or \\`null\\`, [${userOptions}] given.`);\n        }\n\n        // If the user used old options, we convert them to new ones\n        if (!AutoNumericHelper.isNull(userOptions)) {\n            this._convertOldOptionsToNewOnes(userOptions);\n        }\n\n        // The user can choose if the `userOptions` has already been extended with the default options, or not\n        let options;\n        if (shouldExtendDefaultOptions) {\n            options = Object.assign({}, this.getDefaultConfig(), userOptions);\n        } else {\n            options = userOptions;\n        }\n\n        // First things first, we test that the `showWarnings` option is valid\n        if (!AutoNumericHelper.isTrueOrFalseString(options.showWarnings) && !AutoNumericHelper.isBoolean(options.showWarnings)) {\n            AutoNumericHelper.throwError(`The debug option 'showWarnings' is invalid ; it should be either 'true' or 'false', [${options.showWarnings}] given.`);\n        }\n\n        // Define the regular expressions needed for the following tests\n        const testPositiveInteger = /^[0-9]+$/;\n        const testNumericalCharacters = /[0-9]+/;\n        // const testFloatAndPossibleNegativeSign = /^-?[0-9]+(\\.?[0-9]+)$/;\n        const testFloatOrIntegerAndPossibleNegativeSign = /^-?[0-9]+(\\.?[0-9]+)?$/;\n        const testPositiveFloatOrInteger = /^[0-9]+(\\.?[0-9]+)?$/;\n\n        // Then tests the options individually\n        if (!AutoNumericHelper.isTrueOrFalseString(options.allowDecimalPadding) &&\n            !AutoNumericHelper.isBoolean(options.allowDecimalPadding) &&\n            options.allowDecimalPadding !== AutoNumeric.options.allowDecimalPadding.floats &&\n            !(AutoNumericHelper.isNumber(options.allowDecimalPadding) && options.allowDecimalPadding > 0)) {\n            AutoNumericHelper.throwError(`The decimal padding option 'allowDecimalPadding' is invalid ; it should either be \\`false\\`, \\`true\\`, \\`'floats'\\` or a positive integer superior to 0, [${options.allowDecimalPadding}] given.`);\n        }\n     \n        if (AutoNumericHelper.isNumber(options.allowDecimalPadding) && options.allowDecimalPadding > options.decimalPlaces) {\n            AutoNumericHelper.warning(`Setting 'allowDecimalPadding' to a number [${options.allowDecimalPadding}] superior to the current 'decimalPlaces' settings [${options.decimalPlaces}] is useless, since the padding will not be shown.`, options.showWarnings);\n        }\n\n        if ((options.allowDecimalPadding === AutoNumeric.options.allowDecimalPadding.never ||\n            options.allowDecimalPadding === 'false') &&\n            (options.decimalPlaces !== AutoNumeric.options.decimalPlaces.none ||\n            options.decimalPlacesShownOnBlur !== AutoNumeric.options.decimalPlacesShownOnBlur.none ||\n            options.decimalPlacesShownOnFocus !== AutoNumeric.options.decimalPlacesShownOnFocus.none)) {\n            AutoNumericHelper.warning(`Setting 'allowDecimalPadding' to [${options.allowDecimalPadding}] will override the current 'decimalPlaces*' settings [${options.decimalPlaces}, ${options.decimalPlacesShownOnBlur} and ${options.decimalPlacesShownOnFocus}].`, options.showWarnings);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.alwaysAllowDecimalCharacter) &&\n            !AutoNumericHelper.isBoolean(options.alwaysAllowDecimalCharacter)) {\n            AutoNumericHelper.throwError(`The option 'alwaysAllowDecimalCharacter' is invalid ; it should either be \\`true\\` or \\`false\\`, [${options.alwaysAllowDecimalCharacter}] given.`);\n        }\n\n        if (!AutoNumericHelper.isNull(options.caretPositionOnFocus) && !AutoNumericHelper.isInArray(options.caretPositionOnFocus, [\n            AutoNumeric.options.caretPositionOnFocus.start,\n            AutoNumeric.options.caretPositionOnFocus.end,\n            AutoNumeric.options.caretPositionOnFocus.decimalLeft,\n            AutoNumeric.options.caretPositionOnFocus.decimalRight,\n        ])) {\n            AutoNumericHelper.throwError(`The display on empty string option 'caretPositionOnFocus' is invalid ; it should either be \\`null\\`, 'focus', 'press', 'always' or 'zero', [${options.caretPositionOnFocus}] given.`);\n        }\n\n        // Special case here for `caretPositionOnFocus` and `selectOnFocus` where we need to check the original non-tempered version of the options in order to check for conflicts, since using the default settings remove those and would prevent us warning the user that his option object is not correct.\n        let optionsToUse;\n        if (isOriginalOptionAnObject) {\n            optionsToUse = originalOptions;\n        } else {\n            optionsToUse = this._correctCaretPositionOnFocusAndSelectOnFocusOptions(userOptions);\n        }\n\n        if (!AutoNumericHelper.isNull(optionsToUse) &&\n            ((optionsToUse.caretPositionOnFocus !== AutoNumeric.options.caretPositionOnFocus.doNoForceCaretPosition &&\n            optionsToUse.selectOnFocus === AutoNumeric.options.selectOnFocus.select))) {\n            AutoNumericHelper.warning(`The 'selectOnFocus' option is set to 'select', which is in conflict with the 'caretPositionOnFocus' which is set to '${optionsToUse.caretPositionOnFocus}'. As a result, if this has been called when instantiating an AutoNumeric object, the 'selectOnFocus' option is forced to 'doNotSelect'.`, options.showWarnings);\n        }\n\n        if (!AutoNumericHelper.isInArray(options.digitGroupSeparator, [\n            AutoNumeric.options.digitGroupSeparator.comma,\n            AutoNumeric.options.digitGroupSeparator.dot,\n            AutoNumeric.options.digitGroupSeparator.normalSpace,\n            AutoNumeric.options.digitGroupSeparator.thinSpace,\n            AutoNumeric.options.digitGroupSeparator.narrowNoBreakSpace,\n            AutoNumeric.options.digitGroupSeparator.noBreakSpace,\n            AutoNumeric.options.digitGroupSeparator.noSeparator,\n            AutoNumeric.options.digitGroupSeparator.apostrophe,\n            AutoNumeric.options.digitGroupSeparator.arabicThousandsSeparator,\n            AutoNumeric.options.digitGroupSeparator.dotAbove,\n            AutoNumeric.options.digitGroupSeparator.privateUseTwo,\n        ])) {\n            AutoNumericHelper.throwError(`The thousand separator character option 'digitGroupSeparator' is invalid ; it should be ',', '.', '٬', '˙', \"'\", '\\u0092', ' ', '\\u2009', '\\u202f', '\\u00a0' or empty (''), [${options.digitGroupSeparator}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.showOnlyNumbersOnFocus) && !AutoNumericHelper.isBoolean(options.showOnlyNumbersOnFocus)) {\n            AutoNumericHelper.throwError(`The 'showOnlyNumbersOnFocus' option is invalid ; it should be either 'true' or 'false', [${options.showOnlyNumbersOnFocus}] given.`);\n        }\n\n        if (!AutoNumericHelper.isInArray(options.digitalGroupSpacing, [\n            AutoNumeric.options.digitalGroupSpacing.two,\n            AutoNumeric.options.digitalGroupSpacing.twoThree,\n            AutoNumeric.options.digitalGroupSpacing.twoScaled,\n            AutoNumeric.options.digitalGroupSpacing.three,\n            AutoNumeric.options.digitalGroupSpacing.four,\n        ]) && !(options.digitalGroupSpacing >= 2 && options.digitalGroupSpacing <= 4)) {\n            AutoNumericHelper.throwError(`The grouping separator option for thousands 'digitalGroupSpacing' is invalid ; it should be '2', '2t', '2s', '3', or '4', [${options.digitalGroupSpacing}] given.`);\n        }\n\n        if (!AutoNumericHelper.isInArray(options.decimalCharacter, [\n            AutoNumeric.options.decimalCharacter.comma,\n            AutoNumeric.options.decimalCharacter.dot,\n            AutoNumeric.options.decimalCharacter.middleDot,\n            AutoNumeric.options.decimalCharacter.arabicDecimalSeparator,\n            AutoNumeric.options.decimalCharacter.decimalSeparatorKeySymbol,\n        ])) {\n            AutoNumericHelper.throwError(`The decimal separator character option 'decimalCharacter' is invalid ; it should be '.', ',', '·', '⎖' or '٫', [${options.decimalCharacter}] given.`);\n        }\n\n        // Checks if the decimal and thousand characters are the same\n        if (options.decimalCharacter === options.digitGroupSeparator) {\n            AutoNumericHelper.throwError(`autoNumeric will not function properly when the decimal character 'decimalCharacter' [${options.decimalCharacter}] and the thousand separator 'digitGroupSeparator' [${options.digitGroupSeparator}] are the same character.`);\n        }\n\n        if (!AutoNumericHelper.isNull(options.decimalCharacterAlternative) && !AutoNumericHelper.isString(options.decimalCharacterAlternative)) {\n            AutoNumericHelper.throwError(`The alternate decimal separator character option 'decimalCharacterAlternative' is invalid ; it should be a string, [${options.decimalCharacterAlternative}] given.`);\n        }\n\n        if (options.currencySymbol !== '' && !AutoNumericHelper.isString(options.currencySymbol)) {\n            AutoNumericHelper.throwError(`The currency symbol option 'currencySymbol' is invalid ; it should be a string, [${options.currencySymbol}] given.`);\n        }\n\n        if (!AutoNumericHelper.isInArray(options.currencySymbolPlacement, [\n            AutoNumeric.options.currencySymbolPlacement.prefix,\n            AutoNumeric.options.currencySymbolPlacement.suffix,\n        ])) {\n            AutoNumericHelper.throwError(`The placement of the currency sign option 'currencySymbolPlacement' is invalid ; it should either be 'p' (prefix) or 's' (suffix), [${options.currencySymbolPlacement}] given.`);\n        }\n\n        if (!AutoNumericHelper.isInArray(options.negativePositiveSignPlacement, [\n            AutoNumeric.options.negativePositiveSignPlacement.prefix,\n            AutoNumeric.options.negativePositiveSignPlacement.suffix,\n            AutoNumeric.options.negativePositiveSignPlacement.left,\n            AutoNumeric.options.negativePositiveSignPlacement.right,\n            AutoNumeric.options.negativePositiveSignPlacement.none,\n        ])) {\n            AutoNumericHelper.throwError(`The placement of the negative sign option 'negativePositiveSignPlacement' is invalid ; it should either be 'p' (prefix), 's' (suffix), 'l' (left), 'r' (right) or 'null', [${options.negativePositiveSignPlacement}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.showPositiveSign) && !AutoNumericHelper.isBoolean(options.showPositiveSign)) {\n            AutoNumericHelper.throwError(`The show positive sign option 'showPositiveSign' is invalid ; it should be either 'true' or 'false', [${options.showPositiveSign}] given.`);\n        }\n\n        if (!AutoNumericHelper.isString(options.suffixText) || (options.suffixText !== '' && (AutoNumericHelper.isNegative(options.suffixText, options.negativeSignCharacter) || testNumericalCharacters.test(options.suffixText)))) {\n            AutoNumericHelper.throwError(`The additional suffix option 'suffixText' is invalid ; it should not contains the negative sign '${options.negativeSignCharacter}' nor any numerical characters, [${options.suffixText}] given.`);\n        }\n\n        if (!AutoNumericHelper.isString(options.negativeSignCharacter) ||\n            options.negativeSignCharacter.length !== 1 ||\n            AutoNumericHelper.isUndefinedOrNullOrEmpty(options.negativeSignCharacter) ||\n            testNumericalCharacters.test(options.negativeSignCharacter)) {\n            AutoNumericHelper.throwError(`The negative sign character option 'negativeSignCharacter' is invalid ; it should be a single character, and cannot be any numerical characters, [${options.negativeSignCharacter}] given.`);\n        }\n\n        if (!AutoNumericHelper.isString(options.positiveSignCharacter) ||\n            options.positiveSignCharacter.length !== 1 ||\n            AutoNumericHelper.isUndefinedOrNullOrEmpty(options.positiveSignCharacter) ||\n            testNumericalCharacters.test(options.positiveSignCharacter)) {\n            AutoNumericHelper.throwError(`The positive sign character option 'positiveSignCharacter' is invalid ; it should be a single character, and cannot be any numerical characters, [${options.positiveSignCharacter}] given.\\nIf you want to show the positive sign character, you need to set the \\`showPositiveSign\\` option to \\`true\\`.`);\n        }\n\n        if (options.negativeSignCharacter === options.positiveSignCharacter) {\n            AutoNumericHelper.throwError(`The positive 'positiveSignCharacter' and negative 'negativeSignCharacter' sign characters cannot be identical ; [${options.negativeSignCharacter}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.negativePositiveSignBehavior) && !AutoNumericHelper.isBoolean(options.negativePositiveSignBehavior)) {\n            AutoNumericHelper.throwError(`The option 'negativePositiveSignBehavior' is invalid ; it should be either 'true' or 'false', [${options.negativePositiveSignBehavior}] given.`);\n        }\n\n        const [leftBracket, rightBracket] = AutoNumericHelper.isNull(options.negativeBracketsTypeOnBlur)?['', '']:options.negativeBracketsTypeOnBlur.split(',');\n        if (AutoNumericHelper.contains(options.digitGroupSeparator, options.negativeSignCharacter) ||\n            AutoNumericHelper.contains(options.decimalCharacter, options.negativeSignCharacter) ||\n            AutoNumericHelper.contains(options.decimalCharacterAlternative, options.negativeSignCharacter) ||\n            AutoNumericHelper.contains(leftBracket, options.negativeSignCharacter) ||\n            AutoNumericHelper.contains(rightBracket, options.negativeSignCharacter) ||\n            AutoNumericHelper.contains(options.suffixText, options.negativeSignCharacter)) {\n            AutoNumericHelper.throwError(`The negative sign character option 'negativeSignCharacter' is invalid ; it should not be equal or a part of the digit separator, the decimal character, the decimal character alternative, the negative brackets or the suffix text, [${options.negativeSignCharacter}] given.`);\n        }\n\n        if (AutoNumericHelper.contains(options.digitGroupSeparator, options.positiveSignCharacter) ||\n            AutoNumericHelper.contains(options.decimalCharacter, options.positiveSignCharacter) ||\n            AutoNumericHelper.contains(options.decimalCharacterAlternative, options.positiveSignCharacter) ||\n            AutoNumericHelper.contains(leftBracket, options.positiveSignCharacter) ||\n            AutoNumericHelper.contains(rightBracket, options.positiveSignCharacter) ||\n            AutoNumericHelper.contains(options.suffixText, options.positiveSignCharacter)) {\n            AutoNumericHelper.throwError(`The positive sign character option 'positiveSignCharacter' is invalid ; it should not be equal or a part of the digit separator, the decimal character, the decimal character alternative, the negative brackets or the suffix text, [${options.positiveSignCharacter}] given.`);\n        }\n\n        if (!AutoNumericHelper.isNull(options.overrideMinMaxLimits) && !AutoNumericHelper.isInArray(options.overrideMinMaxLimits, [\n            AutoNumeric.options.overrideMinMaxLimits.ceiling,\n            AutoNumeric.options.overrideMinMaxLimits.floor,\n            AutoNumeric.options.overrideMinMaxLimits.ignore,\n            AutoNumeric.options.overrideMinMaxLimits.invalid,\n        ])) {\n            AutoNumericHelper.throwError(`The override min & max limits option 'overrideMinMaxLimits' is invalid ; it should either be 'ceiling', 'floor', 'ignore' or 'invalid', [${options.overrideMinMaxLimits}] given.`);\n        }\n\n        if ((options.overrideMinMaxLimits !== AutoNumeric.options.overrideMinMaxLimits.invalid && options.overrideMinMaxLimits !== AutoNumeric.options.overrideMinMaxLimits.ignore) &&\n            (options.minimumValue > 0 || options.maximumValue < 0)) {\n            AutoNumericHelper.warning(`You've set a \\`minimumValue\\` or a \\`maximumValue\\` excluding the value \\`0\\`. AutoNumeric will force the users to always have a valid value in the input, hence preventing them to clear the field. If you want to allow for temporary invalid values (i.e. out-of-range), you should use the 'invalid' option for the 'overrideMinMaxLimits' setting.`);\n        }\n\n        if (!AutoNumericHelper.isString(options.maximumValue) || !testFloatOrIntegerAndPossibleNegativeSign.test(options.maximumValue)) {\n            AutoNumericHelper.throwError(`The maximum possible value option 'maximumValue' is invalid ; it should be a string that represents a positive or negative number, [${options.maximumValue}] given.`);\n        }\n\n        if (!AutoNumericHelper.isString(options.minimumValue) || !testFloatOrIntegerAndPossibleNegativeSign.test(options.minimumValue)) {\n            AutoNumericHelper.throwError(`The minimum possible value option 'minimumValue' is invalid ; it should be a string that represents a positive or negative number, [${options.minimumValue}] given.`);\n        }\n\n        if (parseFloat(options.minimumValue) > parseFloat(options.maximumValue)) {\n            AutoNumericHelper.throwError(`The minimum possible value option is greater than the maximum possible value option ; 'minimumValue' [${options.minimumValue}] should be smaller than 'maximumValue' [${options.maximumValue}].`);\n        }\n\n        if (!((AutoNumericHelper.isInt(options.decimalPlaces) && options.decimalPlaces >= 0) || // If integer option\n            (AutoNumericHelper.isString(options.decimalPlaces) && testPositiveInteger.test(options.decimalPlaces))) // If string option\n        ) {\n            AutoNumericHelper.throwError(`The number of decimal places option 'decimalPlaces' is invalid ; it should be a positive integer, [${options.decimalPlaces}] given.`);\n        }\n\n        if (!(AutoNumericHelper.isNull(options.decimalPlacesRawValue) ||\n            (AutoNumericHelper.isInt(options.decimalPlacesRawValue) && options.decimalPlacesRawValue >= 0) || // If integer option\n            (AutoNumericHelper.isString(options.decimalPlacesRawValue) && testPositiveInteger.test(options.decimalPlacesRawValue))) // If string option\n        ) {\n            AutoNumericHelper.throwError(`The number of decimal places for the raw value option 'decimalPlacesRawValue' is invalid ; it should be a positive integer or \\`null\\`, [${options.decimalPlacesRawValue}] given.`);\n        }\n\n        // Checks if the number of decimal places for the raw value is lower than the `decimalPlaces`, `decimalPlacesShownOnFocus` and/or `decimalPlacesShownOnBlur` options\n        this._validateDecimalPlacesRawValue(options);\n\n        if (!AutoNumericHelper.isNull(options.decimalPlacesShownOnFocus) &&\n            !testPositiveInteger.test(String(options.decimalPlacesShownOnFocus))) {\n            AutoNumericHelper.throwError(`The number of expanded decimal places option 'decimalPlacesShownOnFocus' is invalid ; it should be a positive integer or \\`null\\`, [${options.decimalPlacesShownOnFocus}] given.`);\n        }\n\n        // Checks if the extended decimal places \"decimalPlacesShownOnFocus\" is greater than the decimal places number `decimalPlaces`\n        if (!AutoNumericHelper.isNull(options.decimalPlacesShownOnFocus) && Number(options.decimalPlaces) > Number(options.decimalPlacesShownOnFocus)) {\n            AutoNumericHelper.warning(`The extended decimal places 'decimalPlacesShownOnFocus' [${options.decimalPlacesShownOnFocus}] should be greater than the 'decimalPlaces' [${options.decimalPlaces}] value. Currently, this will limit the ability of your user to manually change some of the decimal places. Do you really want to do that?`, options.showWarnings);\n        }\n\n        if (!AutoNumericHelper.isNull(options.divisorWhenUnfocused) &&\n            !testPositiveFloatOrInteger.test(options.divisorWhenUnfocused) ||\n            options.divisorWhenUnfocused === 0 || options.divisorWhenUnfocused === '0' ||\n            options.divisorWhenUnfocused === 1 || options.divisorWhenUnfocused === '1') {\n            AutoNumericHelper.throwError(`The divisor option 'divisorWhenUnfocused' is invalid ; it should be a positive number higher than one, preferably an integer, [${options.divisorWhenUnfocused}] given.`);\n        }\n\n        if (!AutoNumericHelper.isNull(options.decimalPlacesShownOnBlur) && !testPositiveInteger.test(options.decimalPlacesShownOnBlur)) {\n            AutoNumericHelper.throwError(`The number of decimals shown when unfocused option 'decimalPlacesShownOnBlur' is invalid ; it should be a positive integer or \\`null\\`, [${options.decimalPlacesShownOnBlur}] given.`);\n        }\n\n        if (!AutoNumericHelper.isNull(options.symbolWhenUnfocused) && !AutoNumericHelper.isString(options.symbolWhenUnfocused)) {\n            AutoNumericHelper.throwError(`The symbol to show when unfocused option 'symbolWhenUnfocused' is invalid ; it should be a string, [${options.symbolWhenUnfocused}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.saveValueToSessionStorage) && !AutoNumericHelper.isBoolean(options.saveValueToSessionStorage)) {\n            AutoNumericHelper.throwError(`The save to session storage option 'saveValueToSessionStorage' is invalid ; it should be either 'true' or 'false', [${options.saveValueToSessionStorage}] given.`);\n        }\n\n        if (!AutoNumericHelper.isInArray(options.onInvalidPaste, [\n            AutoNumeric.options.onInvalidPaste.error,\n            AutoNumeric.options.onInvalidPaste.ignore,\n            AutoNumeric.options.onInvalidPaste.clamp,\n            AutoNumeric.options.onInvalidPaste.truncate,\n            AutoNumeric.options.onInvalidPaste.replace,\n        ])) {\n            AutoNumericHelper.throwError(`The paste behavior option 'onInvalidPaste' is invalid ; it should either be 'error', 'ignore', 'clamp', 'truncate' or 'replace' (cf. documentation), [${options.onInvalidPaste}] given.`);\n        }\n\n        if (!AutoNumericHelper.isInArray(options.roundingMethod, [\n            AutoNumeric.options.roundingMethod.halfUpSymmetric,\n            AutoNumeric.options.roundingMethod.halfUpAsymmetric,\n            AutoNumeric.options.roundingMethod.halfDownSymmetric,\n            AutoNumeric.options.roundingMethod.halfDownAsymmetric,\n            AutoNumeric.options.roundingMethod.halfEvenBankersRounding,\n            AutoNumeric.options.roundingMethod.upRoundAwayFromZero,\n            AutoNumeric.options.roundingMethod.downRoundTowardZero,\n            AutoNumeric.options.roundingMethod.toCeilingTowardPositiveInfinity,\n            AutoNumeric.options.roundingMethod.toFloorTowardNegativeInfinity,\n            AutoNumeric.options.roundingMethod.toNearest05,\n            AutoNumeric.options.roundingMethod.toNearest05Alt,\n            AutoNumeric.options.roundingMethod.upToNext05,\n            AutoNumeric.options.roundingMethod.downToNext05,\n        ])) {\n            AutoNumericHelper.throwError(`The rounding method option 'roundingMethod' is invalid ; it should either be 'S', 'A', 's', 'a', 'B', 'U', 'D', 'C', 'F', 'N05', 'CHF', 'U05' or 'D05' (cf. documentation), [${options.roundingMethod}] given.`);\n        }\n\n        if (!AutoNumericHelper.isNull(options.negativeBracketsTypeOnBlur) && !AutoNumericHelper.isInArray(options.negativeBracketsTypeOnBlur, [\n            AutoNumeric.options.negativeBracketsTypeOnBlur.parentheses,\n            AutoNumeric.options.negativeBracketsTypeOnBlur.brackets,\n            AutoNumeric.options.negativeBracketsTypeOnBlur.chevrons,\n            AutoNumeric.options.negativeBracketsTypeOnBlur.curlyBraces,\n            AutoNumeric.options.negativeBracketsTypeOnBlur.angleBrackets,\n            AutoNumeric.options.negativeBracketsTypeOnBlur.japaneseQuotationMarks,\n            AutoNumeric.options.negativeBracketsTypeOnBlur.halfBrackets,\n            AutoNumeric.options.negativeBracketsTypeOnBlur.whiteSquareBrackets,\n            AutoNumeric.options.negativeBracketsTypeOnBlur.quotationMarks,\n            AutoNumeric.options.negativeBracketsTypeOnBlur.guillemets,\n        ])) {\n            AutoNumericHelper.throwError(`The brackets for negative values option 'negativeBracketsTypeOnBlur' is invalid ; it should either be '(,)', '[,]', '<,>', '{,}', '〈,〉', '｢,｣', '⸤,⸥', '⟦,⟧', '‹,›' or '«,»', [${options.negativeBracketsTypeOnBlur}] given.`);\n        }\n\n        if (!(AutoNumericHelper.isString(options.emptyInputBehavior) || AutoNumericHelper.isNumber(options.emptyInputBehavior)) ||\n            !(AutoNumericHelper.isInArray(options.emptyInputBehavior, [\n                AutoNumeric.options.emptyInputBehavior.focus,\n                AutoNumeric.options.emptyInputBehavior.press,\n                AutoNumeric.options.emptyInputBehavior.always,\n                AutoNumeric.options.emptyInputBehavior.min,\n                AutoNumeric.options.emptyInputBehavior.max,\n                AutoNumeric.options.emptyInputBehavior.zero,\n                AutoNumeric.options.emptyInputBehavior.null,\n            ]) || testFloatOrIntegerAndPossibleNegativeSign.test(options.emptyInputBehavior))) {\n            AutoNumericHelper.throwError(`The display on empty string option 'emptyInputBehavior' is invalid ; it should either be 'focus', 'press', 'always', 'min', 'max', 'zero', 'null', a number, or a string that represents a number, [${options.emptyInputBehavior}] given.`);\n        }\n\n        if (options.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior.zero &&\n            (options.minimumValue > 0 || options.maximumValue < 0)) {\n            AutoNumericHelper.throwError(`The 'emptyInputBehavior' option is set to 'zero', but this value is outside of the range defined by 'minimumValue' and 'maximumValue' [${options.minimumValue}, ${options.maximumValue}].`);\n        }\n\n        if (testFloatOrIntegerAndPossibleNegativeSign.test(String(options.emptyInputBehavior))) {\n            if (!this._isWithinRangeWithOverrideOption(options.emptyInputBehavior, options)) {\n                AutoNumericHelper.throwError(`The 'emptyInputBehavior' option is set to a number or a string that represents a number, but its value [${options.emptyInputBehavior}] is outside of the range defined by the 'minimumValue' and 'maximumValue' options [${options.minimumValue}, ${options.maximumValue}].`);\n            }\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.eventBubbles) && !AutoNumericHelper.isBoolean(options.eventBubbles)) {\n            AutoNumericHelper.throwError(`The event bubbles option 'eventBubbles' is invalid ; it should be either 'true' or 'false', [${options.eventBubbles}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.eventIsCancelable) && !AutoNumericHelper.isBoolean(options.eventIsCancelable)) {\n            AutoNumericHelper.throwError(`The event is cancelable option 'eventIsCancelable' is invalid ; it should be either 'true' or 'false', [${options.eventIsCancelable}] given.`);\n        }\n\n        if (AutoNumericHelper.isBoolean(options.invalidClass) || !/^-?[_a-zA-Z]+[_a-zA-Z0-9-]*$/.test(options.invalidClass)) { //TODO Make sure this covers all the CSS class names\n            AutoNumericHelper.throwError(`The name of the 'invalidClass' option is not a valid CSS class name ; it should not be empty, and should follow the '^-?[_a-zA-Z]+[_a-zA-Z0-9-]*$' regex, [${options.invalidClass}] given.`);\n        }\n\n        if (!AutoNumericHelper.isInArray(options.leadingZero, [\n            AutoNumeric.options.leadingZero.allow,\n            AutoNumeric.options.leadingZero.deny,\n            AutoNumeric.options.leadingZero.keep,\n        ])) {\n            AutoNumericHelper.throwError(`The leading zero behavior option 'leadingZero' is invalid ; it should either be 'allow', 'deny' or 'keep', [${options.leadingZero}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.formatOnPageLoad) && !AutoNumericHelper.isBoolean(options.formatOnPageLoad)) {\n            AutoNumericHelper.throwError(`The format on initialization option 'formatOnPageLoad' is invalid ; it should be either 'true' or 'false', [${options.formatOnPageLoad}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.formulaMode) && !AutoNumericHelper.isBoolean(options.formulaMode)) {\n            AutoNumericHelper.throwError(`The formula mode option 'formulaMode' is invalid ; it should be either 'true' or 'false', [${options.formulaMode}] given.`);\n        }\n\n        if (!testPositiveInteger.test(options.historySize) || options.historySize === 0) {\n            AutoNumericHelper.throwError(`The history size option 'historySize' is invalid ; it should be a positive integer, [${options.historySize}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.selectNumberOnly) && !AutoNumericHelper.isBoolean(options.selectNumberOnly)) {\n            AutoNumericHelper.throwError(`The select number only option 'selectNumberOnly' is invalid ; it should be either 'true' or 'false', [${options.selectNumberOnly}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.selectOnFocus) && !AutoNumericHelper.isBoolean(options.selectOnFocus)) {\n            AutoNumericHelper.throwError(`The select on focus option 'selectOnFocus' is invalid ; it should be either 'true' or 'false', [${options.selectOnFocus}] given.`);\n        }\n\n        if (!AutoNumericHelper.isNull(options.defaultValueOverride) && (options.defaultValueOverride !== '' && !testFloatOrIntegerAndPossibleNegativeSign.test(options.defaultValueOverride))) {\n            AutoNumericHelper.throwError(`The unformatted default value option 'defaultValueOverride' is invalid ; it should be a string that represents a positive or negative number, [${options.defaultValueOverride}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.unformatOnSubmit) && !AutoNumericHelper.isBoolean(options.unformatOnSubmit)) {\n            AutoNumericHelper.throwError(`The remove formatting on submit option 'unformatOnSubmit' is invalid ; it should be either 'true' or 'false', [${options.unformatOnSubmit}] given.`);\n        }\n\n        if (!AutoNumericHelper.isNull(options.valuesToStrings) &&\n            !(AutoNumericHelper.isObject(options.valuesToStrings))) {\n            AutoNumericHelper.throwError(`The option 'valuesToStrings' is invalid ; it should be an object, ideally with 'key -> value' entries, [${options.valuesToStrings}] given.`);\n        }\n\n        if (!AutoNumericHelper.isNull(options.outputFormat) && !AutoNumericHelper.isInArray(options.outputFormat, [\n            AutoNumeric.options.outputFormat.string,\n            AutoNumeric.options.outputFormat.number,\n            AutoNumeric.options.outputFormat.dot,\n            AutoNumeric.options.outputFormat.negativeDot,\n            AutoNumeric.options.outputFormat.comma,\n            AutoNumeric.options.outputFormat.negativeComma,\n            AutoNumeric.options.outputFormat.dotNegative,\n            AutoNumeric.options.outputFormat.commaNegative,\n        ])) {\n            AutoNumericHelper.throwError(`The custom locale format option 'outputFormat' is invalid ; it should either be null, 'string', 'number', '.', '-.', ',', '-,', '.-' or ',-', [${options.outputFormat}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.isCancellable) && !AutoNumericHelper.isBoolean(options.isCancellable)) {\n            AutoNumericHelper.throwError(`The cancellable behavior option 'isCancellable' is invalid ; it should be either 'true' or 'false', [${options.isCancellable}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.modifyValueOnUpDownArrow) && !AutoNumericHelper.isBoolean(options.modifyValueOnUpDownArrow)) {\n            AutoNumericHelper.throwError(`The increment/decrement on up and down arrow keys 'modifyValueOnUpDownArrow' is invalid ; it should be either 'true' or 'false', [${options.modifyValueOnUpDownArrow}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.modifyValueOnWheel) && !AutoNumericHelper.isBoolean(options.modifyValueOnWheel)) {\n            AutoNumericHelper.throwError(`The increment/decrement on mouse wheel option 'modifyValueOnWheel' is invalid ; it should be either 'true' or 'false', [${options.modifyValueOnWheel}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.watchExternalChanges) && !AutoNumericHelper.isBoolean(options.watchExternalChanges)) {\n            AutoNumericHelper.throwError(`The option 'watchExternalChanges' is invalid ; it should be either 'true' or 'false', [${options.watchExternalChanges}] given.`);\n        }\n\n        if (!AutoNumericHelper.isInArray(options.wheelOn, [\n            AutoNumeric.options.wheelOn.focus,\n            AutoNumeric.options.wheelOn.hover,\n        ])) {\n            AutoNumericHelper.throwError(`The wheel behavior option 'wheelOn' is invalid ; it should either be 'focus' or 'hover', [${options.wheelOn}] given.`);\n        }\n\n        if (!(AutoNumericHelper.isString(options.upDownStep) || AutoNumericHelper.isNumber(options.upDownStep)) ||\n            (options.upDownStep !== 'progressive' && !testPositiveFloatOrInteger.test(options.upDownStep)) ||\n            Number(options.upDownStep) === 0) {\n            // A step equal to '0' is rejected\n            AutoNumericHelper.throwError(`The up/down arrow step value option 'upDownStep' is invalid ; it should either be the string 'progressive', or a number or a string that represents a positive number (excluding zero), [${options.upDownStep}] given.`);\n        }\n\n        if (!(AutoNumericHelper.isString(options.wheelStep) || AutoNumericHelper.isNumber(options.wheelStep)) ||\n            (options.wheelStep !== 'progressive' && !testPositiveFloatOrInteger.test(options.wheelStep)) ||\n            Number(options.wheelStep) === 0) {\n            // A step equal to '0' is rejected\n            AutoNumericHelper.throwError(`The wheel step value option 'wheelStep' is invalid ; it should either be the string 'progressive', or a number or a string that represents a positive number (excluding zero), [${options.wheelStep}] given.`);\n        }\n\n        if (!AutoNumericHelper.isInArray(options.serializeSpaces, [\n            AutoNumeric.options.serializeSpaces.plus,\n            AutoNumeric.options.serializeSpaces.percent,\n        ])) {\n            AutoNumericHelper.throwError(`The space replacement character option 'serializeSpaces' is invalid ; it should either be '+' or '%20', [${options.serializeSpaces}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.noEventListeners) && !AutoNumericHelper.isBoolean(options.noEventListeners)) {\n            AutoNumericHelper.throwError(`The option 'noEventListeners' that prevent the creation of event listeners is invalid ; it should be either 'true' or 'false', [${options.noEventListeners}] given.`);\n        }\n\n        if (!AutoNumericHelper.isNull(options.styleRules) &&\n            !(AutoNumericHelper.isObject(options.styleRules) &&\n            ((Object.prototype.hasOwnProperty.call(options.styleRules, 'positive') ||\n            Object.prototype.hasOwnProperty.call(options.styleRules, 'negative') ||\n            Object.prototype.hasOwnProperty.call(options.styleRules, 'ranges') ||\n            Object.prototype.hasOwnProperty.call(options.styleRules, 'userDefined'))))) {\n            AutoNumericHelper.throwError(`The option 'styleRules' is invalid ; it should be a correctly structured object, with one or more 'positive', 'negative', 'ranges' or 'userDefined' attributes, [${options.styleRules}] given.`);\n        }\n\n        // Deeper tests of the `styleRules` object : Check that the callback, if defined, is a function\n        if (!AutoNumericHelper.isNull(options.styleRules) &&\n            Object.prototype.hasOwnProperty.call(options.styleRules, 'userDefined') &&\n            !AutoNumericHelper.isNull(options.styleRules.userDefined)) {\n            options.styleRules.userDefined.forEach(rule => {\n                if (Object.prototype.hasOwnProperty.call(rule, 'callback') && !AutoNumericHelper.isFunction(rule.callback)) {\n                    AutoNumericHelper.throwError(`The callback defined in the \\`userDefined\\` attribute is not a function, ${typeof rule.callback} given.`);\n                }\n            });\n        }\n\n        if (!AutoNumericHelper.isNull(options.rawValueDivisor) &&\n            !testPositiveFloatOrInteger.test(options.rawValueDivisor) ||\n            options.rawValueDivisor === 0 || options.rawValueDivisor === '0' ||\n            options.rawValueDivisor === 1 || options.rawValueDivisor === '1') {\n            AutoNumericHelper.throwError(`The raw value divisor option 'rawValueDivisor' is invalid ; it should be a positive number higher than one, preferably an integer, [${options.rawValueDivisor}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.readOnly) && !AutoNumericHelper.isBoolean(options.readOnly)) {\n            AutoNumericHelper.throwError(`The option 'readOnly' is invalid ; it should be either 'true' or 'false', [${options.readOnly}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.unformatOnHover) && !AutoNumericHelper.isBoolean(options.unformatOnHover)) {\n            AutoNumericHelper.throwError(`The option 'unformatOnHover' is invalid ; it should be either 'true' or 'false', [${options.unformatOnHover}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.failOnUnknownOption) && !AutoNumericHelper.isBoolean(options.failOnUnknownOption)) {\n            AutoNumericHelper.throwError(`The debug option 'failOnUnknownOption' is invalid ; it should be either 'true' or 'false', [${options.failOnUnknownOption}] given.`);\n        }\n\n        if (!AutoNumericHelper.isTrueOrFalseString(options.createLocalList) && !AutoNumericHelper.isBoolean(options.createLocalList)) {\n            AutoNumericHelper.throwError(`The debug option 'createLocalList' is invalid ; it should be either 'true' or 'false', [${options.createLocalList}] given.`);\n        }\n    }\n\n    /**\n     * Check the `decimalPlaces*` options and output the relevant warnings if some of those will get overwritten during the initialization or settings update.\n     *\n     * @param {object} options\n     * @private\n     */\n    static _validateDecimalPlacesRawValue(options) {\n        // Checks if the number of decimal places for the raw value is lower than the `decimalPlaces`, `decimalPlacesShownOnFocus` and/or `decimalPlacesShownOnBlur` options\n        if (!AutoNumericHelper.isNull(options.decimalPlacesRawValue)) {\n            if (options.decimalPlacesRawValue < options.decimalPlaces) {\n                AutoNumericHelper.warning(`The number of decimal places to store in the raw value [${options.decimalPlacesRawValue}] is lower than the ones to display [${options.decimalPlaces}]. This will likely confuse your users.\nTo solve that, you'd need to either set \\`decimalPlacesRawValue\\` to \\`null\\`, or set a number of decimal places for the raw value equal of bigger than \\`decimalPlaces\\`.`, options.showWarnings);\n            }\n\n            if (options.decimalPlacesRawValue < options.decimalPlacesShownOnFocus) {\n                AutoNumericHelper.warning(`The number of decimal places to store in the raw value [${options.decimalPlacesRawValue}] is lower than the ones shown on focus [${options.decimalPlacesShownOnFocus}]. This will likely confuse your users.\nTo solve that, you'd need to either set \\`decimalPlacesRawValue\\` to \\`null\\`, or set a number of decimal places for the raw value equal of bigger than \\`decimalPlacesShownOnFocus\\`.`, options.showWarnings);\n            }\n\n            if (options.decimalPlacesRawValue < options.decimalPlacesShownOnBlur) {\n                AutoNumericHelper.warning(`The number of decimal places to store in the raw value [${options.decimalPlacesRawValue}] is lower than the ones shown when unfocused [${options.decimalPlacesShownOnBlur}]. This will likely confuse your users.\nTo solve that, you'd need to either set \\`decimalPlacesRawValue\\` to \\`null\\`, or set a number of decimal places for the raw value equal of bigger than \\`decimalPlacesShownOnBlur\\`.`, options.showWarnings);\n            }\n        }\n    }\n\n    /**\n     * Return `true` if the settings/options are valid, `false` otherwise.\n     *\n     * @param {object} options\n     * @returns {boolean}\n     */\n    static areSettingsValid(options) {\n        let isValid = true;\n        try {\n            this.validate(options, true);\n        } catch (error) {\n            isValid = false;\n        }\n\n        return isValid;\n    }\n\n    /**\n     * Return the default autoNumeric settings.\n     *\n     * @returns {object}\n     */\n    static getDefaultConfig() {\n        return AutoNumeric.defaultSettings;\n    }\n\n    /**\n     * Return all the predefined language options in one object.\n     * You can also access a specific language object directly by using `AutoNumeric.getPredefinedOptions().French` for instance.\n     *\n     * @returns {object}\n     */\n    static getPredefinedOptions() {\n        return AutoNumeric.predefinedOptions;\n    }\n\n    /**\n     * Analyse the given array `options` and return a single 'merged' option objet.\n     * `options` can be `null`, or an array of an option objects, or an array containing another array of option objects / strings (pre-defined option names)\n     *\n     * @param {null|Array<object|string|Array<string|object>>} options\n     * @returns {null|object}\n     * @private\n     */\n    static _generateOptionsObjectFromOptionsArray(options) {\n        let optionsResult;\n        if (AutoNumericHelper.isUndefinedOrNullOrEmpty(options) || options.length === 0) {\n            optionsResult = null;\n        } else {\n            optionsResult = {};\n            if (options.length === 1 && Array.isArray(options[0])) {\n                options[0].forEach(optionObject => {\n                    // Using `_getOptionObject()` allows using pre-defined names in the `options` array\n                    Object.assign(optionsResult, this._getOptionObject(optionObject));\n                });\n            } else if (options.length >= 1) {\n                options.forEach(optionObject => {\n                    Object.assign(optionsResult, this._getOptionObject(optionObject));\n                });\n            }\n        }\n\n        return optionsResult;\n    }\n\n    /**\n     * Format the given number (or numeric string) with the given options. This returns the formatted value as a string.\n     * This can also format the given DOM element value with the given options and returns the formatted value as a string.\n     * Note : This function does *not* update that element value with the newly formatted value.\n     * This basically allows to get the formatted value without first having to initialize an AutoNumeric object.\n     *\n     * @param {number|string|HTMLElement|HTMLInputElement} numericStringOrDomElement A number, or a string that represent a javascript number, or a DOM element\n     * @param {object|null} options Multiple objects can be passed, the latter overwriting the settings from the former ones\n     * @returns {string|null}\n     */\n    static format(numericStringOrDomElement, ...options) {\n        if (AutoNumericHelper.isUndefined(numericStringOrDomElement) || numericStringOrDomElement === null) {\n            return null;\n        }\n\n        // Retrieve the value to format\n        let value;\n        if (AutoNumericHelper.isElement(numericStringOrDomElement)) {\n            value = AutoNumericHelper.getElementValue(numericStringOrDomElement);\n        } else {\n            value = numericStringOrDomElement;\n        }\n\n        if (!AutoNumericHelper.isString(value) && !AutoNumericHelper.isNumber(value)) {\n            AutoNumericHelper.throwError(`The value \"${value}\" being \"set\" is not numeric and therefore cannot be used appropriately.`);\n        }\n\n        // Manage options\n        const optionsToUse = this._generateOptionsObjectFromOptionsArray(options);\n\n        // Initiate a very basic settings object\n        const settings = Object.assign({}, this.getDefaultConfig(), optionsToUse);\n        settings.isNegativeSignAllowed = value < 0;\n        settings.isPositiveSignAllowed = value >= 0;\n        this._setBrackets(settings);\n\n        const regex = {};\n        this._cachesUsualRegularExpressions(settings, regex); // This is needed by `_stripAllNonNumberCharactersExceptCustomDecimalChar` that uses those regex\n\n        // Check the validity of the `value` parameter\n        // Convert the value to a numeric string, stripping unnecessary characters in the process\n        let valueString = this._toNumericValue(value, settings);\n        if (isNaN(Number(valueString))) {\n            AutoNumericHelper.throwError(`The value [${valueString}] that you are trying to format is not a recognized number.`);\n        }\n\n        // Check if the given valueString is valid\n        if (!this._isWithinRangeWithOverrideOption(valueString, settings)) {\n            // Throw a custom event\n            AutoNumericHelper.triggerEvent(AutoNumeric.events.formatted, document, {\n                oldValue   : null,\n                newValue   : null,\n                oldRawValue: null,\n                newRawValue: null,\n                isPristine : null,\n                error      : 'Range test failed',\n                aNElement  : null,\n            }, true, true);\n            AutoNumericHelper.throwError(`The value [${valueString}] being set falls outside of the minimumValue [${settings.minimumValue}] and maximumValue [${settings.maximumValue}] range set for this element`);\n        }\n\n        // Directly format any `valuesToStrings` values, if found\n        if (settings.valuesToStrings && this._checkValuesToStringsSettings(value, settings)) {\n            return settings.valuesToStrings[value];\n        }\n\n        // Generate the `negativePositiveSignPlacement` option as needed\n        this._correctNegativePositiveSignPlacementOption(settings);\n        // Calculate the needed decimal places\n        this._calculateDecimalPlacesOnInit(settings);\n\n        // Multiply the raw value with `rawValueDivisor` if defined\n        if ((!AutoNumericHelper.isUndefinedOrNullOrEmpty(settings.rawValueDivisor) && settings.rawValueDivisor !== 0) && // Only divide if the `rawValueDivisor` option is set\n            valueString !== '' && valueString !== null) { // Do not modify the `valueString` if it's an empty string or null\n            valueString *= settings.rawValueDivisor;\n        }\n\n        // Everything is ok, proceed to rounding, formatting and grouping\n        valueString = this._roundFormattedValueShownOnFocus(valueString, settings);\n        valueString = this._modifyNegativeSignAndDecimalCharacterForFormattedValue(valueString, settings);\n        valueString = this._addGroupSeparators(valueString, settings, false, valueString);\n\n        return valueString;\n    }\n\n    /**\n     * Format the given DOM element value, and set the resulting value back as the element value.\n     *\n     * @param {HTMLElement|HTMLInputElement} domElement\n     * @param {object} options\n     * @returns {string|null}\n     */\n    static formatAndSet(domElement, options = null) { //FIXME test this\n        const formattedValue = this.format(domElement, options);\n        AutoNumericHelper.setElementValue(domElement, formattedValue);\n\n        return formattedValue;\n    }\n\n    /**\n     * Unformat the given formatted string with the given options. This returns a numeric string.\n     * It can also unformat the given DOM element value with the given options and returns the unformatted numeric string.\n     * Note: This does *not* update that element value.\n     * This basically allows to get the unformatted value without first having to initialize an AutoNumeric object.\n     *\n     * @param {string|number|HTMLElement|HTMLInputElement} numericStringOrDomElement A number, or a string that represent a javascript number, or a DOM element\n     * @param {object|null} options Multiple objects can be passed, the latter overwriting the settings from the former ones\n     * @returns {string|number|NaN}\n     */\n    static unformat(numericStringOrDomElement, ...options) {\n        if (AutoNumericHelper.isNumberStrict(numericStringOrDomElement)) {\n            // Giving an unformatted value should return the same unformatted value, whatever the options passed as a parameter\n            return numericStringOrDomElement;\n        }\n\n        // Retrieve the value to unformat\n        let value;\n        if (AutoNumericHelper.isElement(numericStringOrDomElement)) {\n            value = AutoNumericHelper.getElementValue(numericStringOrDomElement);\n        } else {\n            value = numericStringOrDomElement;\n        }\n\n        if (value === '') {\n            // This allows to be coherent when serializing forms with empty inputs. Fix issue #512.\n            return '';\n        }\n\n        if (AutoNumericHelper.isUndefined(value) || value === null) {\n            return null;\n        }\n\n        if (AutoNumericHelper.isArray(value) || AutoNumericHelper.isObject(value)) {\n            // Check the validity of the `value` parameter\n            AutoNumericHelper.throwError(`A number or a string representing a number is needed to be able to unformat it, [${value}] given.`);\n        }\n\n        // Manage options\n        const optionsToUse = this._generateOptionsObjectFromOptionsArray(options);\n\n        // Generate the settings\n        const settings = Object.assign({}, this.getDefaultConfig(), optionsToUse);\n        settings.isNegativeSignAllowed = false;\n        settings.isPositiveSignAllowed = true;\n        value = value.toString();\n\n        // Directly unformat any `valuesToStrings` values, if found\n        if (settings.valuesToStrings && this._checkStringsToValuesSettings(value, settings)) {\n            return AutoNumericHelper.objectKeyLookup(settings.valuesToStrings, value);\n        }\n\n        // This checks if a negative sign is anywhere in the `value`, not just on the very first character (i.e. '12345.67-')\n        if (AutoNumericHelper.isNegative(value, settings.negativeSignCharacter)) {\n            settings.isNegativeSignAllowed = true;\n            settings.isPositiveSignAllowed = false;\n        } else if (!AutoNumericHelper.isNull(settings.negativeBracketsTypeOnBlur)) {\n            [settings.firstBracket, settings.lastBracket] = settings.negativeBracketsTypeOnBlur.split(',');\n            if (value.charAt(0) === settings.firstBracket &&\n                value.charAt(value.length - 1) === settings.lastBracket) {\n                settings.isNegativeSignAllowed = true;\n                settings.isPositiveSignAllowed = false;\n                value = this._removeBrackets(value, settings, false);\n            }\n        }\n\n        value = this._convertToNumericString(value, settings);\n        if (AutoNumericHelper.isNumber(Number(value))) { // In case of numbers with the scientific notation (#757)\n            value = AutoNumericHelper.scientificToDecimal(value);\n        }\n\n        const unwantedCharacters = new RegExp(`[^+-0123456789.]`, 'gi');\n        if (unwantedCharacters.test(value)) {\n            return NaN;\n        }\n\n        // Generate the `negativePositiveSignPlacement` option as needed\n        this._correctNegativePositiveSignPlacementOption(settings);\n        // Calculate the needed decimal places\n        if (settings.decimalPlacesRawValue) { // `originalDecimalPlacesRawValue` needs to be defined\n            settings.originalDecimalPlacesRawValue = settings.decimalPlacesRawValue;\n        } else {\n            settings.originalDecimalPlacesRawValue = settings.decimalPlaces;\n        }\n\n        this._calculateDecimalPlacesOnInit(settings);\n\n        // Divide the raw value with `rawValueDivisor` if defined\n        if ((!AutoNumericHelper.isUndefinedOrNullOrEmpty(settings.rawValueDivisor) && settings.rawValueDivisor !== 0) && // Only divide if the `rawValueDivisor` option is set\n            value !== '' && value !== null) { // Do not modify the `value` if it's an empty string or null\n            value /= settings.rawValueDivisor;\n        }\n\n        value = this._roundRawValue(value, settings);\n        value = value.replace(settings.decimalCharacter, '.'); // Here we need to convert back the decimal character to a period since `_roundValue` adds it in some cases\n        value = this._toLocale(value, settings.outputFormat, settings);\n\n        return value;\n    }\n\n    /**\n     * Unformat the given DOM element value, and set the resulting value back as the element value.\n     *\n     * @param {HTMLElement|HTMLInputElement} domElement\n     * @param {object} options\n     * @returns {*}\n     */\n    static unformatAndSet(domElement, options = null) { //FIXME test this\n        const unformattedValue = this.unformat(domElement, options);\n        AutoNumericHelper.setElementValue(domElement, unformattedValue);\n\n        return unformattedValue;\n    }\n\n    /**\n     * Unformat and localize the given formatted string with the given options. This returns a numeric string.\n     * It can also unformat and localize the given DOM element value with the given options and returns the unformatted numeric string.\n     * Note: This does *not* update that element value.\n     * This basically allows to get the localized value without first having to initialize an AutoNumeric object.\n     *\n     * @param {string|number|HTMLElement|HTMLInputElement} numericStringOrDomElement\n     * @param {object} settings\n     * @returns {*}\n     */\n    static localize(numericStringOrDomElement, settings = null) {\n        let value;\n        if (AutoNumericHelper.isElement(numericStringOrDomElement)) {\n            value = AutoNumericHelper.getElementValue(numericStringOrDomElement);\n        } else {\n            value = numericStringOrDomElement;\n        }\n\n        if (value === '') {\n            // This allows to be coherent when serializing forms with empty inputs. Fix issue #512.\n            return '';\n        }\n\n        if (AutoNumericHelper.isNull(settings)) {\n            settings = AutoNumeric.defaultSettings;\n        }\n\n        value = this.unformat(value, settings);\n\n        //XXX The following code is pretty close to the one you can find in `getLocalized()`, but different enough so we won't refactor it.\n        if (Number(value) === 0 && settings.leadingZero !== AutoNumeric.options.leadingZero.keep) {\n            value = '0';\n        }\n\n        let outputFormatToUse;\n        if (AutoNumericHelper.isNull(settings)) {\n            outputFormatToUse = settings.outputFormat;\n        } else {\n            outputFormatToUse = AutoNumeric.defaultSettings.outputFormat;\n        }\n\n        return this._toLocale(value, outputFormatToUse, settings);\n    }\n\n    static localizeAndSet(domElement, options = null) { //FIXME test this\n        const localizedValue = this.localize(domElement, options);\n        AutoNumericHelper.setElementValue(domElement, localizedValue);\n\n        return localizedValue;\n    }\n\n    /**\n     * Return `true` if the given DOM element has an AutoNumeric object that manages it.\n     * This function also accepts a selector string.\n     *\n     * @param {HTMLElement|string} domElementOrSelector Accepts either directly a DOM element to test, or a string selector (that will return one and only one element, if any)\n     * @returns {boolean}\n     */\n    static isManagedByAutoNumeric(domElementOrSelector) { //FIXME test this\n        return this._isInGlobalList(AutoNumericHelper.domElement(domElementOrSelector));\n    }\n\n    /**\n     * Return the AutoNumeric object that manages the given DOM element.\n     * This function also accepts a selector string.\n     *\n     * @param {HTMLElement|string} domElementOrSelector Accepts either directly a DOM element to test, or a string selector (that will return one and only one element, if any)\n     * @returns {null|AutoNumeric}\n     */\n    static getAutoNumericElement(domElementOrSelector) {\n        const domElement = AutoNumericHelper.domElement(domElementOrSelector);\n\n        if (!this.isManagedByAutoNumeric(domElement)) {\n            return null;\n        }\n\n        return this._getFromGlobalList(domElement);\n    }\n\n    /**\n     * Set the given element value, and format it immediately.\n     * Return `null` if no AutoNumeric object is found, else, return the AutoNumeric object.\n     *\n     * @param {HTMLElement|string} domElementOrSelector Either a DOM element reference, or a selector string can be used\n     * @param {number|string|null} newValue The value must be a Number, a numeric string or `null` (if `emptyInputBehavior` is set to `'null'`)\n     * @param {object} options A settings object that will override the current settings. Note: the update is done only if the `newValue` is defined.\n     * @param {boolean} saveChangeToHistory If set to `true`, then the change is recorded in the history table\n     * @returns {AutoNumeric|null}\n     */\n    static set(domElementOrSelector, newValue, options = null, saveChangeToHistory = true) {\n        const domElement = AutoNumericHelper.domElement(domElementOrSelector);\n\n        if (!this.isManagedByAutoNumeric(domElement)) {\n            let showWarnings;\n            if (!AutoNumericHelper.isNull(options) && Object.prototype.hasOwnProperty.call(options, 'showWarnings')) {\n                showWarnings = options.showWarnings;\n            } else {\n                showWarnings = true;\n            }\n\n            AutoNumericHelper.warning(`Impossible to find an AutoNumeric object for the given DOM element or selector.`, showWarnings);\n\n            return null;\n        }\n\n        return this.getAutoNumericElement(domElement).set(newValue, options, saveChangeToHistory);\n    }\n\n    /**\n     * Return the unformatted value as a string from the given DOM element or query selector.\n     * This can also return `null` if `rawValue` is null.\n     *\n     * @param {HTMLElement|string} domElementOrSelector\n     * @param {function|null} callback\n     * @returns {string|null}\n     */\n    static getNumericString(domElementOrSelector, callback = null) {\n        return this._get(domElementOrSelector, 'getNumericString', callback);\n    }\n\n    /**\n     * Return the current formatted value of the AutoNumeric element as a string, from the given DOM element or query selector.\n     *\n     * @param {HTMLElement|string} domElementOrSelector\n     * @param {function|null} callback\n     * @returns {string}\n     */\n    static getFormatted(domElementOrSelector, callback = null) {\n        return this._get(domElementOrSelector, 'getFormatted', callback);\n    }\n\n    /**\n     * Return the element unformatted value as a real Javascript number, from the given DOM element or query selector.\n     * Warning: This can lead to precision problems with big numbers that should be stored as strings.\n     *\n     * @param {HTMLElement|string} domElementOrSelector\n     * @param {function|null} callback\n     * @returns {number|null}\n     */\n    static getNumber(domElementOrSelector, callback = null) {\n        return this._get(domElementOrSelector, 'getNumber', callback);\n    }\n\n    /**\n     * DRY the code between the static `get*` functions\n     *\n     * @param {HTMLElement|string} domElementOrSelector\n     * @param {string} getFunction The name of the non-static `get*` function as a string\n     * @param {function|null} callback\n     * @returns {*}\n     * @private\n     */\n    static _get(domElementOrSelector, getFunction, callback = null) {\n        const domElement = AutoNumericHelper.domElement(domElementOrSelector);\n\n        if (!this.isManagedByAutoNumeric(domElement)) {\n            AutoNumericHelper.throwError(`Impossible to find an AutoNumeric object for the given DOM element or selector.`);\n        }\n\n        return this.getAutoNumericElement(domElement)[getFunction](callback);\n    }\n\n    /**\n     * Returns the unformatted value following the `outputFormat` setting, from the given DOM element or query selector.\n     * See the non-static `getLocalized()` method documentation for more details.\n     *\n     * @param {HTMLElement|string} domElementOrSelector\n     * @param {null|string|function} forcedOutputFormat\n     * @param {function|null} callback\n     * @returns {*}\n     */\n    static getLocalized(domElementOrSelector, forcedOutputFormat = null, callback = null) {\n        const domElement = AutoNumericHelper.domElement(domElementOrSelector);\n\n        if (!this.isManagedByAutoNumeric(domElement)) {\n            AutoNumericHelper.throwError(`Impossible to find an AutoNumeric object for the given DOM element or selector.`);\n        }\n\n        return this.getAutoNumericElement(domElement).getLocalized(forcedOutputFormat, callback);\n    }\n\n    // Pre-defined options can be called to update the current default options with their specificities\n    //XXX A better way would be to not initialize first, but that's not possible since `new` is called first and we do not pass the language options (i.e. `French`) to the constructor\n\n    /**\n     * Update the AutoNumeric object with the predefined options, and possibly some option overrides.\n     *\n     * @param {object} predefinedOption\n     * @param {object} optionOverride\n     * @private\n     * @returns {AutoNumeric}\n     */\n    _updatePredefinedOptions(predefinedOption, optionOverride = null) {\n        if (!AutoNumericHelper.isNull(optionOverride)) {\n            this._mergeSettings(predefinedOption, optionOverride);\n            this.update(this.settings);\n        } else {\n            this.update(predefinedOption);\n        }\n\n        return this;\n    }\n\n    /**\n     * Update the settings to use the French pre-defined language options.\n     * Those pre-defined options can be overridden by passing an option object as a parameter.\n     *\n     * @param {object} optionOverride\n     * @returns {AutoNumeric}\n     */\n    french(optionOverride = null) {\n        this._updatePredefinedOptions(AutoNumeric.getPredefinedOptions().French, optionOverride);\n\n        return this;\n    }\n\n    /**\n     * Update the settings to use the North American pre-defined language options.\n     * Those pre-defined options can be overridden by passing an option object as a parameter.\n     *\n     * @param {object} optionOverride\n     * @returns {AutoNumeric}\n     */\n    northAmerican(optionOverride = null) {\n        this._updatePredefinedOptions(AutoNumeric.getPredefinedOptions().NorthAmerican, optionOverride);\n\n        return this;\n    }\n\n    /**\n     * Update the settings to use the British pre-defined language options.\n     * Those pre-defined options can be overridden by passing an option object as a parameter.\n     *\n     * @param {object} optionOverride\n     * @returns {AutoNumeric}\n     */\n    british(optionOverride = null) {\n        this._updatePredefinedOptions(AutoNumeric.getPredefinedOptions().British, optionOverride);\n\n        return this;\n    }\n\n    /**\n     * Update the settings to use the Swiss pre-defined language options.\n     * Those pre-defined options can be overridden by passing an option object as a parameter.\n     *\n     * @param {object} optionOverride\n     * @returns {AutoNumeric}\n     */\n    swiss(optionOverride = null) {\n        this._updatePredefinedOptions(AutoNumeric.getPredefinedOptions().Swiss, optionOverride);\n\n        return this;\n    }\n\n    /**\n     * Update the settings to use the Japanese pre-defined language options.\n     * Those pre-defined options can be overridden by passing an option object as a parameter.\n     *\n     * @param {object} optionOverride\n     * @returns {AutoNumeric}\n     */\n    japanese(optionOverride = null) {\n        this._updatePredefinedOptions(AutoNumeric.getPredefinedOptions().Japanese, optionOverride);\n\n        return this;\n    }\n\n    /**\n     * Update the settings to use the Spanish pre-defined language options.\n     * Those pre-defined options can be overridden by passing an option object as a parameter.\n     *\n     * @param {object} optionOverride\n     * @returns {AutoNumeric}\n     */\n    spanish(optionOverride = null) {\n        this._updatePredefinedOptions(AutoNumeric.getPredefinedOptions().Spanish, optionOverride);\n\n        return this;\n    }\n\n    /**\n     * Update the settings to use the Chinese pre-defined language options.\n     * Those pre-defined options can be overridden by passing an option object as a parameter.\n     *\n     * @param {object} optionOverride\n     * @returns {AutoNumeric}\n     */\n    chinese(optionOverride = null) {\n        this._updatePredefinedOptions(AutoNumeric.getPredefinedOptions().Chinese, optionOverride);\n\n        return this;\n    }\n\n    /**\n     * Update the settings to use the Brazilian pre-defined language options.\n     * Those pre-defined options can be overridden by passing an option object as a parameter.\n     *\n     * @param {object} optionOverride\n     * @returns {AutoNumeric}\n     */\n    brazilian(optionOverride = null) {\n        this._updatePredefinedOptions(AutoNumeric.getPredefinedOptions().Brazilian, optionOverride);\n\n        return this;\n    }\n\n\n    // Internal private functions\n    /**\n     * Run any callbacks found in the settings object in order to set the settings value back.\n     * Any parameter can have a callback defined.\n     * The callback takes the current AutoNumeric element as the first argument, and the key name as the second.\n     * @example callback(this, 'currencySymbol')\n     */\n    _runCallbacksFoundInTheSettingsObject() { //FIXME test this\n        // Loops through the this.settings object (option array) to find the following\n        for (const key in this.settings) {\n            if (Object.prototype.hasOwnProperty.call(this.settings, key)) {\n                const value = this.settings[key];\n\n                if (typeof value === 'function') {\n                    this.settings[key] = value(this, key);\n                } else {\n                    // Calls the attached function from the html5 data. For instance: <tag data-currency-symbol=\"functionName\"></tag>\n                    let htmlAttribute = '';\n                    if (key in this.domElement.dataset) {\n                        htmlAttribute = this.domElement.dataset[key];\n                    }\n\n                    htmlAttribute = AutoNumericHelper.camelize(htmlAttribute);\n                    if (typeof this.settings[htmlAttribute] === 'function') {\n                        this.settings[key] = htmlAttribute(this, key);\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * Keep track if the settings configuration leads to a trailing negative sign (only when the raw value is negative), so we do not have to test the settings values every time we need to know that.\n     * `isTrailingNegative` is set to `true` if the settings result in a trailing negative character, `false` otherwise.\n     * Note: This returns `true` even if the raw value is positive.\n     * @private\n     */\n    _setTrailingNegativeSignInfo() {\n        this.isTrailingNegative = (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix && this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.suffix) ||\n        (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix &&\n        (this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.left || this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.right));\n    }\n\n    /**\n     * Strip all the unwanted non-number characters.\n     * However, it does not reorder the localized negative sign.\n     *\n     * @param {string} s\n     * @param {object} settings\n     * @param {boolean} stripZeros If set to `false`, then the leading zero(s) are not stripped, otherwise if set to `true`, the `leadingZero` option is followed\n     * @param {boolean} isFocused If the element is focused, then this is `true`\n     * @returns {string}\n     * @private\n     */\n    static _stripAllNonNumberCharacters(s, settings, stripZeros, isFocused) {\n        return this._stripAllNonNumberCharactersExceptCustomDecimalChar(s, settings, stripZeros, isFocused).replace(settings.decimalCharacter, '.');\n    }\n\n    /**\n     * Strip all unwanted non-number characters except the custom decimal character.\n     *\n     * It converts the custom negative sign and removes the positive sign (custom or not).\n     * This keeps :\n     * - the numbers,\n     * - the normal negative sign '-' if any,\n     * - and the *custom* decimal character.\n     *\n     * @param {string} s\n     * @param {object} settings\n     * @param {boolean} stripZeros If set to `false`, then the leading zero(s) are not stripped, otherwise if set to `true`, the `leadingZero` option is followed\n     * @param {boolean} isFocused If the element is focused, then this is `true`\n     * @returns {string|*}\n     */\n    static _stripAllNonNumberCharactersExceptCustomDecimalChar(s, settings, stripZeros, isFocused) {\n        //XXX Note; this function is static since we need to pass a `settings` object when calling the static `AutoNumeric.format()` method\n        //TODO This function is called 10 times (sic!) on each key input, couldn't we lower that number? cf. issue #325\n        s = this._normalizeCurrencySuffixAndNegativeSignCharacters(s, settings);\n\n        // Then remove all the characters that are not numbers, the normal negative sign '-', or the custom decimal character (note: this also remove any custom positive sign)\n        s = s.replace(settings.allowedAutoStrip, '');\n\n        // Get only number string\n        const m = s.match(settings.numRegAutoStrip);\n        s = m ? [m[1], m[2], m[3]].join('') : '';\n\n        if (settings.leadingZero === AutoNumeric.options.leadingZero.allow || settings.leadingZero === AutoNumeric.options.leadingZero.keep) {\n            let negativeSign = '';\n            const [integerPart, decimalPart] = s.split(settings.decimalCharacter);\n            let modifiedIntegerPart = integerPart;\n            if (AutoNumericHelper.contains(modifiedIntegerPart, settings.negativeSignCharacter)) {\n                negativeSign = settings.negativeSignCharacter;\n                modifiedIntegerPart = modifiedIntegerPart.replace(settings.negativeSignCharacter, '');\n            }\n\n            // Strip leading zero on positive value if needed\n            if (negativeSign === '' && modifiedIntegerPart.length > settings.mIntPos && modifiedIntegerPart.charAt(0) === '0') {\n                modifiedIntegerPart = modifiedIntegerPart.slice(1);\n            }\n\n            // Strip leading zero on negative value if needed\n            if (negativeSign !== '' && modifiedIntegerPart.length > settings.mIntNeg && modifiedIntegerPart.charAt(0) === '0') {\n                modifiedIntegerPart = modifiedIntegerPart.slice(1);\n            }\n\n            s = `${negativeSign}${modifiedIntegerPart}${AutoNumericHelper.isUndefined(decimalPart)?'':settings.decimalCharacter + decimalPart}`;\n        }\n\n        if ((stripZeros && settings.leadingZero === AutoNumeric.options.leadingZero.deny) ||\n            (!isFocused && settings.leadingZero === AutoNumeric.options.leadingZero.allow)) {\n            s = s.replace(settings.stripReg, '$1$2');\n        }\n\n        return s;\n    }\n\n    /**\n     * Sets or removes brackets on negative values, depending on the focus state, which is passed as `isFocused`.\n     * The focus state is 'stored' in that object property.\n     *\n     * @param {string} value\n     * @param {object} settings\n     * @param {boolean} isFocused\n     * @returns {*}\n     */\n    static _toggleNegativeBracket(value, settings, isFocused) {\n        //XXX Note; this function is static since we need to pass a `settings` object when calling the static `AutoNumeric.format()` method\n        let result;\n        if (isFocused) {\n            result = this._removeBrackets(value, settings);\n        } else {\n            result = this._addBrackets(value, settings);\n        }\n\n        return result;\n    }\n\n    /**\n     * Add the bracket types specified in the `settings` object, to the given string `value`.\n     *\n     * @param {string} value\n     * @param {object} settings\n     * @returns {string}\n     * @private\n     */\n    static _addBrackets(value, settings) {\n        if (AutoNumericHelper.isNull(settings.negativeBracketsTypeOnBlur)) {\n            return value;\n        }\n\n        return `${settings.firstBracket}${value.replace(settings.negativeSignCharacter, '')}${settings.lastBracket}`;\n    }\n\n    /**\n     * Remove the bracket types specified in the `settings` object, from the given string `value`.\n     *\n     * @param {string} value\n     * @param {object} settings\n     * @param {boolean} rearrangeSignsAndValueOrder If set to `true`, then only the brackets are remove and a negative sign is added, without reordering the negative sign, currency symbol and value according to the settings.\n     * @returns {string}\n     * @private\n     */\n    static _removeBrackets(value, settings, rearrangeSignsAndValueOrder = true) {\n        let result;\n        if (!AutoNumericHelper.isNull(settings.negativeBracketsTypeOnBlur) && value.charAt(0) === settings.firstBracket) {\n            // Remove the brackets if they are present\n            result = value.replace(settings.firstBracket, '');\n            result = result.replace(settings.lastBracket, '');\n\n            // Add back the negative sign at the right place\n            if (rearrangeSignsAndValueOrder) {\n                // First we need to remove the currency symbol from the value, since we want to be able to add back the negative sign at the right place (including between the value and the currency sign)\n                result = result.replace(settings.currencySymbol, '');\n                result = this._mergeCurrencySignNegativePositiveSignAndValue(result, settings, true, false); //TODO This assume the value is negative and non-empty. Is this always the case?\n            } else {\n                // Here we only want to add the negative sign since we removed the brackets, without reordering\n                result = `${settings.negativeSignCharacter}${result}`;\n            }\n        } else {\n            result = value;\n        }\n\n        return result;\n    }\n\n    /**\n     * Analyze the `negativeBracketsTypeOnBlur` options and keep track of the first and last bracket characters to use.\n     *\n     * @param {object} settings\n     * @private\n     */\n    static _setBrackets(settings) {\n        if (AutoNumericHelper.isNull(settings.negativeBracketsTypeOnBlur)) {\n            settings.firstBracket = '';\n            settings.lastBracket  = '';\n        } else {\n            // Use temporary variables to fix the MS Edge destructuring issue (see pull request #564)\n            const [firstBracket, lastBracket] = settings.negativeBracketsTypeOnBlur.split(',');\n            settings.firstBracket = firstBracket;\n            settings.lastBracket = lastBracket;\n        }\n    }\n\n    /**\n     * Return a number as a numeric string that can be typecast to a Number that Javascript will understand.\n     *\n     * This function returns the given string by stripping:\n     * - the currency sign (currencySymbol),\n     * - the grouping separators (digitalGroupSpacing),\n     * - the suffix text (suffixText),\n     * - the positive sign (positiveSignCharacter),\n     * - the brackets if any,\n     * - by replacing the negative sign character with a hyphen,\n     * - and by replacing the decimal character (decimalCharacter) by a dot.\n     *\n     * Lastly, it also put the negative sign back to its normal position if needed.\n     * Bonus; it converts any arabic numbers found to the latin ones.\n     *\n     * @param {string} s\n     * @param {object} settings\n     * @returns {string|void|*}\n     */\n    static _convertToNumericString(s, settings) {\n        // Remove the custom brackets\n        s = this._removeBrackets(s, settings, false);\n        s = this._normalizeCurrencySuffixAndNegativeSignCharacters(s, settings);\n\n        // Remove the grouping separators (thousands separators usually)\n        s = s.replace(new RegExp(`[${settings.digitGroupSeparator}]`, 'g'), '');\n\n        // Replace the decimal character by a dot\n        if (settings.decimalCharacter !== '.') {\n            s = s.replace(settings.decimalCharacter, '.');\n        }\n\n        // Move the trailing negative sign, if any, to the usual leftmost position\n        if (AutoNumericHelper.isNegative(s) && s.lastIndexOf('-') === s.length - 1) {\n            s = s.replace('-', '');\n            s = `-${s}`;\n        }\n\n        // Replace the custom positive sign\n        if (settings.showPositiveSign) {\n            s = s.replace(settings.positiveSignCharacter, '');\n        }\n\n        // Convert arabic numbers to latin ones, if any\n        const convertToNumber = settings.leadingZero !== AutoNumeric.options.leadingZero.keep;\n        const temp = AutoNumericHelper.arabicToLatinNumbers(s, convertToNumber, false, false);\n        if (!isNaN(temp)) {\n            s = temp.toString();\n        }\n\n        return s;\n    }\n\n    /**\n     * Removes the currency symbol and the suffix text from the given string, and replace the custom negative sign with a hyphen.\n     *\n     * @param {string} s\n     * @param {object} settings\n     * @returns {string | *}\n     * @private\n     */\n    static _normalizeCurrencySuffixAndNegativeSignCharacters(s, settings) {\n        s = String(s); // Typecast to a string, in case that the given value is a number\n\n        // Remove the currency symbol\n        if (settings.currencySymbol !== AutoNumeric.options.currencySymbol.none) {\n            s = s.replace(settings.currencySymbol, '');\n        }\n\n        // Remove the suffixText\n        if (settings.suffixText !== AutoNumeric.options.suffixText.none) {\n            s = s.replace(settings.suffixText, '');\n        }\n\n        // Replace the custom negative sign with a hyphen\n        if (settings.negativeSignCharacter !== AutoNumeric.options.negativeSignCharacter.hyphen) {\n            s = s.replace(settings.negativeSignCharacter, '-');\n        }\n\n        return s;\n    }\n\n    /**\n     * Converts the ISO numeric string to the locale decimal and minus sign placement.\n     * See the \"outputFormat\" option definition for more details.\n     * Note: If the `outputFormat` is set to a number, the custom `negativeSignCharacter` is ignored.\n     *\n     * @param {string|null} value The unformatted value\n     * @param {string|null} locale\n     * @param {object} settings\n     * @returns {*}\n     */\n    static _toLocale(value, locale, settings) {\n        if (AutoNumericHelper.isNull(locale) || locale === AutoNumeric.options.outputFormat.string) {\n            return value;\n        }\n\n        let result;\n        switch (locale) {\n            case AutoNumeric.options.outputFormat.number:\n                result = Number(value);\n                break;\n            case AutoNumeric.options.outputFormat.dotNegative:\n                result = AutoNumericHelper.isNegative(value) ? value.replace('-', '') + '-' : value;\n                break;\n            case AutoNumeric.options.outputFormat.comma:\n            case AutoNumeric.options.outputFormat.negativeComma:\n                result = value.replace('.', ',');\n                break;\n            case AutoNumeric.options.outputFormat.commaNegative:\n                result = value.replace('.', ',');\n                result = AutoNumericHelper.isNegative(result) ? result.replace('-', '') + '-' : result;\n                break;\n            // The default case\n            case AutoNumeric.options.outputFormat.dot:\n            case AutoNumeric.options.outputFormat.negativeDot:\n                result = value;\n                break;\n            default :\n                AutoNumericHelper.throwError(`The given outputFormat [${locale}] option is not recognized.`);\n        }\n\n        if (locale !== AutoNumeric.options.outputFormat.number && settings.negativeSignCharacter !== '-') {\n            // Modify the default minus sign with the custom one, if any\n            result = result.replace('-', settings.negativeSignCharacter);\n        }\n\n        return result;\n    }\n\n    /**\n     * Modify the negative sign and the decimal character of the given string value to a hyphen (-) and a dot (.) in order to make that value 'typecastable' to a real number.\n     *\n     * @param {string} s The formatted value\n     * @returns {string} The value with the 'normal' minus sign and decimal character\n     */\n    _modifyNegativeSignAndDecimalCharacterForRawValue(s) {\n        if (this.settings.decimalCharacter !== '.') {\n            s = s.replace(this.settings.decimalCharacter, '.');\n        }\n\n        if (this.settings.negativeSignCharacter !== '-' && this.settings.isNegativeSignAllowed) {\n            s = s.replace(this.settings.negativeSignCharacter, '-');\n        }\n\n        if (!s.match(/\\d/)) {\n            // The default value returned by `get` is not formatted with decimals\n            s += '0';\n        }\n\n        return s;\n    }\n\n    /**\n     * Modify the negative sign and the decimal character to use those defined in the settings.\n     *\n     * @param {string} s\n     * @param {object} settings\n     * @returns {string}\n     */\n    static _modifyNegativeSignAndDecimalCharacterForFormattedValue(s, settings) {\n        //XXX Note; this function is static since we need to pass a `settings` object when calling the static `AutoNumeric.format()` method\n        if (settings.negativeSignCharacter !== '-') {\n            s = s.replace('-', settings.negativeSignCharacter);\n        }\n\n        if (settings.decimalCharacter !== '.') {\n            s = s.replace('.', settings.decimalCharacter);\n        }\n\n        return s;\n    }\n\n    /**\n     * Return `true` if the given value is empty or is equal to the negative sign character defined in the given settings.\n     *\n     * @param {string} value\n     * @param {object} settings\n     * @returns {boolean}\n     * @private\n     */\n    static _isElementValueEmptyOrOnlyTheNegativeSign(value, settings) {\n        return value === '' || value === settings.negativeSignCharacter;\n    }\n\n    /**\n     * Return the value with the currency symbol and the suffix text ordered according to the given settings.\n     *\n     * @param {string} value\n     * @param {object} settings\n     * @param {boolean} signOnEmpty\n     * @returns {*}\n     * @private\n     */\n    static _orderValueCurrencySymbolAndSuffixText(value, settings, signOnEmpty) {\n        let result;\n        if (settings.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior.always || signOnEmpty) {\n            switch (settings.negativePositiveSignPlacement) {\n                case AutoNumeric.options.negativePositiveSignPlacement.left:\n                case AutoNumeric.options.negativePositiveSignPlacement.prefix:\n                case AutoNumeric.options.negativePositiveSignPlacement.none:\n                    result = value + settings.currencySymbol + settings.suffixText;\n                    break;\n                default :\n                    result = settings.currencySymbol + value + settings.suffixText;\n            }\n        } else {\n            result = value;\n        }\n\n        return result;\n    }\n\n    /**\n     * Modify the input value by adding the group separators, as defined in the settings, and the negative brackets if needed.\n     *\n     * @param {string} inputValue The formatted value (i.e. with the `decimalCharacter` defined in the settings, not the raw value)\n     * @param {object} settings\n     * @param {boolean} isFocused\n     * @param {number|string|null} currentRawValue The object current raw value (`this.rawValue`)\n     * @param {number|string|null} forcedRawValue If this is set, then this rawValue is used instead of the one passed through the `settings` object. This is useful is some very specific cases where we need to set the raw value *after* settings the formatted value, using the `_addGroupSeparators()` method.\n     * @returns {*}\n     */\n    static _addGroupSeparators(inputValue, settings, isFocused, currentRawValue, forcedRawValue = null) {\n        //TODO Test if `inputValue` === '', and return '' directly if that's the case,\n        //XXX Note; this function is static since we need to pass a `settings` object when calling the static `AutoNumeric.format()` method\n        let isValueNegative;\n        if (!AutoNumericHelper.isNull(forcedRawValue)) {\n            // Prefer directly testing if the raw value is negative in order for the test to be more performant than manipulating the formatted value\n            isValueNegative = forcedRawValue < 0;\n        } else {\n            isValueNegative = AutoNumericHelper.isNegative(inputValue, settings.negativeSignCharacter) || AutoNumericHelper.isNegativeWithBrackets(inputValue, settings.firstBracket, settings.lastBracket); // Test if the value is negative before removing the negative sign\n        }\n\n        inputValue = this._stripAllNonNumberCharactersExceptCustomDecimalChar(inputValue, settings, false, isFocused);\n\n        if (this._isElementValueEmptyOrOnlyTheNegativeSign(inputValue, settings)) {\n            return this._orderValueCurrencySymbolAndSuffixText(inputValue, settings, true);\n        }\n\n        const isZeroOrHasNoValue = AutoNumericHelper.isZeroOrHasNoValue(inputValue);\n\n        // Temporarily remove the negative sign if present\n        if (isValueNegative) {\n            inputValue = inputValue.replace('-', ''); // At this point the `inputValue` has been normalized with a 'normal' negative sign `'-'` //TODO Check that comment validity, since `_stripAllNonNumberCharactersExceptCustomDecimalChar` *does not* convert the negative sign\n        }\n\n        // Splits the string at the decimal string\n        let [integerPart, decimalPart] = inputValue.split(settings.decimalCharacter);\n        if (settings.decimalCharacterAlternative && AutoNumericHelper.isUndefined(decimalPart)) {\n            [integerPart, decimalPart] = inputValue.split(settings.decimalCharacterAlternative);\n        }\n\n        if (settings.digitGroupSeparator !== '') {\n            settings.digitalGroupSpacing = settings.digitalGroupSpacing.toString();\n            let digitalGroup;\n            switch (settings.digitalGroupSpacing) {\n                case AutoNumeric.options.digitalGroupSpacing.twoThree:\n                    digitalGroup = /(\\d)((\\d)(\\d{2}?)+)$/;\n                    break;\n                case AutoNumeric.options.digitalGroupSpacing.twoScaled:\n                    digitalGroup = /(\\d)((?:\\d{2}){0,2}\\d{3}(?:(?:\\d{2}){2}\\d{3})*?)$/;\n                    break;\n                case AutoNumeric.options.digitalGroupSpacing.two:\n                case AutoNumeric.options.digitalGroupSpacing.three:\n                case AutoNumeric.options.digitalGroupSpacing.four:\n                default :\n                    digitalGroup = new RegExp(`(\\\\d)((\\\\d{${settings.digitalGroupSpacing}}?)+)$`);\n            }\n\n            // Re-inserts the thousand separator via a regular expression\n            while (digitalGroup.test(integerPart)) {\n                integerPart = integerPart.replace(digitalGroup, `$1${settings.digitGroupSeparator}$2`);\n            }\n        }\n\n        // Find out how many decimal places should be kept, depending on the object state (isFocused)\n        let decimalPlacesToRoundTo;\n        if (isFocused) {\n            decimalPlacesToRoundTo = settings.decimalPlacesShownOnFocus;\n        } else {\n            decimalPlacesToRoundTo = settings.decimalPlacesShownOnBlur;\n        }\n\n        if (decimalPlacesToRoundTo !== 0 && !AutoNumericHelper.isUndefined(decimalPart)) {\n            if (decimalPart.length > decimalPlacesToRoundTo) {\n                // Trim the excessive number of decimal places\n                decimalPart = decimalPart.substring(0, decimalPlacesToRoundTo);\n            }\n\n            // Joins the whole number with the decimal value\n            inputValue = `${integerPart}${settings.decimalCharacter}${decimalPart}`;\n        } else {\n            // Otherwise if it's an integer\n            inputValue = integerPart;\n        }\n\n        // Add back the negative/positive sign and the currency symbol, at the right positions\n        inputValue = AutoNumeric._mergeCurrencySignNegativePositiveSignAndValue(inputValue, settings, isValueNegative, isZeroOrHasNoValue); //TODO this function is called again in `_toggleNegativeBracket` if the brackets are removed; let's DRY this\n\n        if (AutoNumericHelper.isNull(forcedRawValue)) {\n            // If the raw value is not forced, use the default one from the settings object\n            forcedRawValue = currentRawValue;\n        }\n\n        // Toggle the negative sign and brackets\n        if (settings.negativeBracketsTypeOnBlur !== null && (forcedRawValue < 0 || AutoNumericHelper.isNegativeStrict(inputValue, settings.negativeSignCharacter))) {\n            inputValue = this._toggleNegativeBracket(inputValue, settings, isFocused);\n        }\n\n        let result;\n        if (settings.suffixText) {\n            result = `${inputValue}${settings.suffixText}`;\n        } else {\n            result = inputValue;\n        }\n\n        return result;\n    }\n\n    /**\n     * Return a semi-formatted string where the input value, the negative or positive sign, and the currency symbol are stitched together at the right positions, using the options set in the `settings` object.\n     * Note : the `inputValue` is usually not a numeric string since the grouping symbols are already added to it at this point.\n     *\n     * @param {string} inputValue\n     * @param {object} settings\n     * @param {boolean} isValueNegative\n     * @param {boolean} isZeroOrHasNoValue\n     * @returns {*}\n     * @throws\n     * @private\n     */\n    static _mergeCurrencySignNegativePositiveSignAndValue(inputValue, settings, isValueNegative, isZeroOrHasNoValue) {\n        let signToUse = '';\n        if (isValueNegative) {\n            signToUse = settings.negativeSignCharacter;\n        } else if (settings.showPositiveSign && !isZeroOrHasNoValue) {\n            signToUse = settings.positiveSignCharacter;\n        }\n\n        let result;\n        if (settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix) {\n            if (settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none &&\n                (isValueNegative || (!isValueNegative && settings.showPositiveSign && !isZeroOrHasNoValue))) {\n                switch (settings.negativePositiveSignPlacement) {\n                    case AutoNumeric.options.negativePositiveSignPlacement.prefix:\n                    case AutoNumeric.options.negativePositiveSignPlacement.left:\n                        result = `${signToUse}${settings.currencySymbol}${inputValue}`;\n                        break;\n                    case AutoNumeric.options.negativePositiveSignPlacement.right:\n                        result = `${settings.currencySymbol}${signToUse}${inputValue}`;\n                        break;\n                    case AutoNumeric.options.negativePositiveSignPlacement.suffix:\n                        result = `${settings.currencySymbol}${inputValue}${signToUse}`;\n                        break;\n                }\n            } else {\n                result = settings.currencySymbol + inputValue;\n            }\n        } else if (settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n            if (settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none &&\n                (isValueNegative || (!isValueNegative && settings.showPositiveSign && !isZeroOrHasNoValue))) {\n                switch (settings.negativePositiveSignPlacement) {\n                    case AutoNumeric.options.negativePositiveSignPlacement.suffix:\n                    case AutoNumeric.options.negativePositiveSignPlacement.right:\n                        result = `${inputValue}${settings.currencySymbol}${signToUse}`;\n                        break;\n                    case AutoNumeric.options.negativePositiveSignPlacement.left:\n                        result = `${inputValue}${signToUse}${settings.currencySymbol}`;\n                        break;\n                    case AutoNumeric.options.negativePositiveSignPlacement.prefix:\n                        result = `${signToUse}${inputValue}${settings.currencySymbol}`;\n                        break;\n                }\n            } else {\n                result = inputValue + settings.currencySymbol;\n            }\n        }\n\n        return result;\n    }\n\n    /**\n     * Calculate where to put the caret position on focus if the element content is not selected.\n     * This calculation is affected by the `caretPositionOnFocus` option which can be either `null`, `'start'`, `'end'`, `'decimalLeft'` or 'decimalRight'`, and will decide where to put the caret (on the left or right of the value or the decimal character, respectively) :\n     * - `null` : the caret position is not forced\n     * - `'start'` : the caret is positioned on the left hand side of the value\n     * - `'end'` : the caret is positioned on the right hand side of the value\n     * - `'decimalLeft'` : the caret is positioned on the left side of the decimal character\n     * - `'decimalRight'` : the caret is positioned on the right side of the decimal character\n     *\n     * @param {string} value The formatted string stripped of the currency symbol and negative/positive sign\n     * @returns {number}\n     * @throws\n     * @private\n     */\n    _initialCaretPosition(value) {\n        if (AutoNumericHelper.isNull(this.settings.caretPositionOnFocus) &&\n            this.settings.selectOnFocus === AutoNumeric.options.selectOnFocus.doNotSelect) {\n            AutoNumericHelper.throwError('`_initialCaretPosition()` should never be called when the `caretPositionOnFocus` option is `null`.');\n        }\n\n        const isValueNegative = this.rawValue < 0;\n        const isZeroOrHasNoValue = AutoNumericHelper.isZeroOrHasNoValue(value);\n        const totalLength = value.length;\n\n        let valueSize = 0;\n        let integerSize = 0;\n        let hasDecimalChar = false;\n        let offsetDecimalChar = 0;\n        if (this.settings.caretPositionOnFocus !== AutoNumeric.options.caretPositionOnFocus.start) {\n            value = value.replace(this.settings.negativeSignCharacter, '');\n            value = value.replace(this.settings.positiveSignCharacter, '');\n            value = value.replace(this.settings.currencySymbol, '');\n            valueSize = value.length;\n            hasDecimalChar = AutoNumericHelper.contains(value, this.settings.decimalCharacter);\n\n            if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.decimalLeft ||\n                this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.decimalRight) {\n                if (hasDecimalChar) {\n                    integerSize = value.indexOf(this.settings.decimalCharacter);\n                    offsetDecimalChar = this.settings.decimalCharacter.length;\n                } else {\n                    integerSize = valueSize;\n                    offsetDecimalChar = 0;\n                }\n            }\n        }\n\n        let signToUse = '';\n        if (isValueNegative) {\n            signToUse = this.settings.negativeSignCharacter;\n        } else if (this.settings.showPositiveSign && !isZeroOrHasNoValue) {\n            signToUse = this.settings.positiveSignCharacter;\n        }\n\n        const positiveNegativeSignSize = signToUse.length;\n        const currencySymbolSize = this.settings.currencySymbol.length;\n\n        // Calculate the caret position based on `currencySymbolPlacement`, `negativePositiveSignPlacement` and `caretPositionOnFocus`\n        let caretPosition;\n        if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix) {\n            if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.start) {\n                if (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none &&\n                    (isValueNegative || (!isValueNegative && this.settings.showPositiveSign && !isZeroOrHasNoValue))) {\n                    switch (this.settings.negativePositiveSignPlacement) {\n                        case AutoNumeric.options.negativePositiveSignPlacement.prefix: // +€|12.34\n                        case AutoNumeric.options.negativePositiveSignPlacement.left:   // +€|12.34\n                        case AutoNumeric.options.negativePositiveSignPlacement.right:  // €+|12.34\n                            caretPosition = positiveNegativeSignSize + currencySymbolSize;\n                            break;\n                        case AutoNumeric.options.negativePositiveSignPlacement.suffix: // €|12.34+\n                            caretPosition = currencySymbolSize;\n                            break;\n                    }\n                } else {                                                               // €|12.34\n                    caretPosition = currencySymbolSize;\n                }\n            } else if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.end) {\n                if (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none &&\n                    (isValueNegative || (!isValueNegative && this.settings.showPositiveSign && !isZeroOrHasNoValue))) {\n                    switch (this.settings.negativePositiveSignPlacement) {\n                        case AutoNumeric.options.negativePositiveSignPlacement.prefix: // +€12.34|\n                        case AutoNumeric.options.negativePositiveSignPlacement.left:   // +€12.34|\n                        case AutoNumeric.options.negativePositiveSignPlacement.right:  // €+12.34|\n                            caretPosition = totalLength;\n                            break;\n                        case AutoNumeric.options.negativePositiveSignPlacement.suffix: // €12.34|+\n                            caretPosition = currencySymbolSize + valueSize;\n                            break;\n                    }\n                } else {                                                               // €12.34|\n                    caretPosition = totalLength;\n                }\n            } else if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.decimalLeft) {\n                if (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none &&\n                    (isValueNegative || (!isValueNegative && this.settings.showPositiveSign && !isZeroOrHasNoValue))) {\n                    switch (this.settings.negativePositiveSignPlacement) {\n                        case AutoNumeric.options.negativePositiveSignPlacement.prefix: // +€12|.34\n                        case AutoNumeric.options.negativePositiveSignPlacement.left:   // +€12|.34\n                        case AutoNumeric.options.negativePositiveSignPlacement.right:  // €+12|.34\n                            caretPosition = positiveNegativeSignSize + currencySymbolSize + integerSize;\n                            break;\n                        case AutoNumeric.options.negativePositiveSignPlacement.suffix: // €12|.34+\n                            caretPosition = currencySymbolSize + integerSize;\n                            break;\n                    }\n                } else {                                                               // €12|.34\n                    caretPosition = currencySymbolSize + integerSize;\n                }\n            } else if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.decimalRight) {\n                if (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none &&\n                    (isValueNegative || (!isValueNegative && this.settings.showPositiveSign && !isZeroOrHasNoValue))) {\n                    switch (this.settings.negativePositiveSignPlacement) {\n                        case AutoNumeric.options.negativePositiveSignPlacement.prefix: // +€12.|34\n                        case AutoNumeric.options.negativePositiveSignPlacement.left:   // +€12.|34\n                        case AutoNumeric.options.negativePositiveSignPlacement.right:  // €+12.|34\n                            caretPosition = positiveNegativeSignSize + currencySymbolSize + integerSize + offsetDecimalChar;\n                            break;\n                        case AutoNumeric.options.negativePositiveSignPlacement.suffix: // €12.|34+\n                            caretPosition = currencySymbolSize + integerSize + offsetDecimalChar;\n                            break;\n                    }\n                } else {                                                               // €12.|34\n                    caretPosition = currencySymbolSize + integerSize + offsetDecimalChar;\n                }\n            }\n        } else if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n            if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.start) {\n                if (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none &&\n                    (isValueNegative || (!isValueNegative && this.settings.showPositiveSign && !isZeroOrHasNoValue))) {\n                    switch (this.settings.negativePositiveSignPlacement) {\n                        case AutoNumeric.options.negativePositiveSignPlacement.suffix: // |12.34€+\n                        case AutoNumeric.options.negativePositiveSignPlacement.right:  // |12.34€+\n                        case AutoNumeric.options.negativePositiveSignPlacement.left:   // |12.34+€\n                            caretPosition = 0;\n                            break;\n                        case AutoNumeric.options.negativePositiveSignPlacement.prefix: // +|12.34€\n                            caretPosition = positiveNegativeSignSize;\n                            break;\n                    }\n                } else {                                                               // |12.34€\n                    caretPosition = 0;\n                }\n            } else if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.end) {\n                if (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none &&\n                    (isValueNegative || (!isValueNegative && this.settings.showPositiveSign && !isZeroOrHasNoValue))) {\n                    switch (this.settings.negativePositiveSignPlacement) {\n                        case AutoNumeric.options.negativePositiveSignPlacement.suffix: // 12.34|€+\n                        case AutoNumeric.options.negativePositiveSignPlacement.right:  // 12.34|€+\n                        case AutoNumeric.options.negativePositiveSignPlacement.left:   // 12.34|+€\n                            caretPosition = valueSize;\n                            break;\n                        case AutoNumeric.options.negativePositiveSignPlacement.prefix: // +12.34|€\n                            caretPosition = positiveNegativeSignSize + valueSize;\n                            break;\n                    }\n                } else {                                                               // 12.34|€\n                    caretPosition = valueSize;\n                }\n            } else if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.decimalLeft) {\n                if (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none &&\n                    (isValueNegative || (!isValueNegative && this.settings.showPositiveSign && !isZeroOrHasNoValue))) {\n                    switch (this.settings.negativePositiveSignPlacement) {\n                        case AutoNumeric.options.negativePositiveSignPlacement.suffix: // 12|.34€+\n                        case AutoNumeric.options.negativePositiveSignPlacement.right:  // 12|.34€+\n                        case AutoNumeric.options.negativePositiveSignPlacement.left:   // 12|.34+€\n                            caretPosition = integerSize;\n                            break;\n                        case AutoNumeric.options.negativePositiveSignPlacement.prefix: // +12|.34€\n                            caretPosition = positiveNegativeSignSize + integerSize;\n                            break;\n                    }\n                } else {                                                               // 12|.34€\n                    caretPosition = integerSize;\n                }\n            } else if (this.settings.caretPositionOnFocus === AutoNumeric.options.caretPositionOnFocus.decimalRight) {\n                if (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.none &&\n                    (isValueNegative || (!isValueNegative && this.settings.showPositiveSign && !isZeroOrHasNoValue))) {\n                    switch (this.settings.negativePositiveSignPlacement) {\n                        case AutoNumeric.options.negativePositiveSignPlacement.suffix: // 12.|34€+\n                        case AutoNumeric.options.negativePositiveSignPlacement.right:  // 12.|34€+\n                        case AutoNumeric.options.negativePositiveSignPlacement.left:   // 12.|34+€\n                            caretPosition = integerSize + offsetDecimalChar;\n                            break;\n                        case AutoNumeric.options.negativePositiveSignPlacement.prefix: // +12.|34€\n                            caretPosition = positiveNegativeSignSize + integerSize + offsetDecimalChar;\n                            break;\n                    }\n                } else {                                                               // 12.|34€\n                    caretPosition = integerSize + offsetDecimalChar;\n                }\n            }\n        }\n\n        return caretPosition;\n    }\n\n    /**\n     * Truncate the trailing zeroes to the given number of decimal places\n     *\n     * @param {string} roundedInputValue\n     * @param {int} decimalPlacesNeeded The number of decimal places to keep\n     * @returns {string}\n     */\n    static _truncateZeros(roundedInputValue, decimalPlacesNeeded) {\n        let regex;\n        switch (decimalPlacesNeeded) {\n            case 0:\n                // Prevents padding - removes trailing zeros until the first significant digit is encountered\n                regex = /(\\.(?:\\d*[1-9])?)0*$/;\n                break;\n            case 1:\n                // Allows padding when decimalPlacesNeeded equals one - leaves one zero trailing the decimal character\n                regex = /(\\.\\d(?:\\d*[1-9])?)0*$/;\n                break;\n            default :\n                // Removes superfluous zeros after the decimalPlacesNeeded length\n                regex = new RegExp(`(\\\\.\\\\d{${decimalPlacesNeeded}}(?:\\\\d*[1-9])?)0*`);\n        }\n\n        // If there are no decimal places, we don't need a decimal point at the end\n        roundedInputValue = roundedInputValue.replace(regex, '$1');\n        if (decimalPlacesNeeded === 0) {\n            roundedInputValue = roundedInputValue.replace(/\\.$/, '');\n        }\n\n        return roundedInputValue;\n    }\n\n    /**\n     * Round the given `value` with the number of decimal places to keep for the raw value.\n     *\n     * @param {string|null} value An unformatted numeric value\n     * @param {object} settings\n     * @returns {*}\n     * @private\n     */\n    static _roundRawValue(value, settings) {\n        return this._roundValue(value, settings, settings.decimalPlacesRawValue);\n    }\n\n    /**\n     * Round the given `value` with the number of decimal places to show for the element if focused.\n     *\n     * @param {string|null} value An unformatted numeric value\n     * @param {object} settings\n     * @returns {*}\n     * @private\n     */\n    static _roundFormattedValueShownOnFocus(value, settings) {\n        return this._roundValue(value, settings, Number(settings.decimalPlacesShownOnFocus));\n    }\n\n    /**\n     * Round the given `value` with the number of decimal places to show for the element if unfocused.\n     *\n     * @param {string|null} value An unformatted numeric value\n     * @param {object} settings\n     * @returns {*}\n     * @private\n     */\n    static _roundFormattedValueShownOnBlur(value, settings) {\n        return this._roundValue(value, settings, Number(settings.decimalPlacesShownOnBlur));\n    }\n\n    /**\n     * Round the given `value` with the number of decimal places to show for the element based on the value of isFocused.\n     *\n     * @param {string|null} value An unformatted numeric value\n     * @param {object} settings\n     * @param {boolean} isFocused\n     * @returns {*}\n     * @private\n     */\n    static _roundFormattedValueShownOnFocusOrBlur(value, settings, isFocused) {\n        if (isFocused) {\n            return this._roundFormattedValueShownOnFocus(value, settings);\n        } else {\n            return this._roundFormattedValueShownOnBlur(value, settings);\n        }\n    }\n\n    /**\n     * Round the input value using the rounding method defined in the settings.\n     * This function accepts multiple rounding methods. See the documentation for more details about those.\n     *\n     * Note : This is handled as text since JavaScript math functions can return inaccurate values.\n     *\n     * @param {string|null} inputValue An unformatted numeric value\n     * @param {object} settings\n     * @param {int} decimalPlacesToRoundTo\n     * @returns {*}\n     */\n    static _roundValue(inputValue, settings, decimalPlacesToRoundTo) {\n        //XXX Note; this function is static since we need to pass a `settings` object when calling the static `AutoNumeric.format()` method\n        if (AutoNumericHelper.isNull(inputValue)) {\n            // Prevent rounding a `null` value\n            return inputValue;\n        }\n\n        //TODO Divide this function to make it easier to understand\n        inputValue = (inputValue === '') ? '0' : inputValue.toString();\n        if (settings.roundingMethod === AutoNumeric.options.roundingMethod.toNearest05 ||\n            settings.roundingMethod === AutoNumeric.options.roundingMethod.toNearest05Alt ||\n            settings.roundingMethod === AutoNumeric.options.roundingMethod.upToNext05 ||\n            settings.roundingMethod === AutoNumeric.options.roundingMethod.downToNext05) {\n            return this._roundCloseTo05(inputValue, settings);\n        }\n\n        const [negativeSign, preparedValue] = AutoNumeric._prepareValueForRounding(inputValue, settings);\n        inputValue = preparedValue;\n\n        const decimalCharacterPosition = inputValue.lastIndexOf('.');\n        const inputValueHasNoDot = decimalCharacterPosition === -1; // No dot character is found in the `inputValue`\n        const [integerPart, decimalPart] = inputValue.split('.'); // Here the decimal character is always a period '.'\n        const hasDecimals = decimalPart > 0;\n\n        // If no decimals are detected\n        if (!hasDecimals &&\n            (settings.allowDecimalPadding === AutoNumeric.options.allowDecimalPadding.never ||\n            settings.allowDecimalPadding === AutoNumeric.options.allowDecimalPadding.floats)) {\n            // If the value decimalPart is only one or more zeroes, then it needs to be removed from the resulting string (cf. issue #652)\n            return (Number(inputValue) === 0) ? integerPart : `${negativeSign}${integerPart}`;\n        }\n\n        // Else there are some decimal places that may need to be rounded\n        // Sets the truncate zero method\n        let temporaryDecimalPlacesOverride;\n        if (settings.allowDecimalPadding === AutoNumeric.options.allowDecimalPadding.always ||\n            settings.allowDecimalPadding === AutoNumeric.options.allowDecimalPadding.floats) {\n            temporaryDecimalPlacesOverride = decimalPlacesToRoundTo;\n        } else if (settings.allowDecimalPadding > 0) {\n            temporaryDecimalPlacesOverride = settings.allowDecimalPadding;\n        } else {\n            temporaryDecimalPlacesOverride = 0;\n        }\n\n        // Define the decimal position to use (use the very last position if there are no dot in the initial inputValue)\n        const decimalPositionToUse = inputValueHasNoDot ? inputValue.length - 1 : decimalCharacterPosition;\n        // Checks decimal places to determine if rounding is required\n        let checkDecimalPlaces = (inputValue.length - 1) - decimalPositionToUse;\n        let inputValueRounded = '';\n\n        // Check if no rounding is required\n        if (checkDecimalPlaces <= decimalPlacesToRoundTo) {\n            // Check if we need to pad with zeros\n            inputValueRounded = inputValue;\n            if (checkDecimalPlaces < temporaryDecimalPlacesOverride) {\n                if (inputValueHasNoDot) {\n                    inputValueRounded = `${inputValueRounded}${settings.decimalCharacter}`;\n                }\n\n                let zeros = '000000'; //TODO Change that string with a longer one to prevent having to loop numerous times in the next `while` statement?\n                while (checkDecimalPlaces < temporaryDecimalPlacesOverride) {\n                    zeros = zeros.substring(0, temporaryDecimalPlacesOverride - checkDecimalPlaces);\n                    inputValueRounded += zeros;\n                    checkDecimalPlaces += zeros.length;\n                }\n            } else if (checkDecimalPlaces > temporaryDecimalPlacesOverride) {\n                inputValueRounded = this._truncateZeros(inputValueRounded, temporaryDecimalPlacesOverride);\n            } else if (checkDecimalPlaces === 0 && temporaryDecimalPlacesOverride === 0) {\n                // Remove any trailing dot, if any\n                inputValueRounded = inputValueRounded.replace(/\\.$/, '');\n            }\n\n            return (Number(inputValueRounded) === 0) ? inputValueRounded : `${negativeSign}${inputValueRounded}`;\n        }\n\n        // Rounded length of the string after rounding\n        let roundedStrLength;\n        if (inputValueHasNoDot) {\n            roundedStrLength = decimalPlacesToRoundTo - 1;\n        } else {\n            roundedStrLength = Number(decimalPlacesToRoundTo) + Number(decimalCharacterPosition);\n        }\n\n        const lastDigit = Number(inputValue.charAt(roundedStrLength + 1));\n        let inputValueArray = inputValue.substring(0, roundedStrLength + 1).split('');\n        let odd;\n        if (inputValue.charAt(roundedStrLength) === '.') {\n            odd = inputValue.charAt(roundedStrLength - 1) % 2;\n        } else {\n            odd = inputValue.charAt(roundedStrLength) % 2;\n        }\n\n        if (this._shouldRoundUp(lastDigit, settings, negativeSign, odd)) {\n            // Round up the last digit if required, and continue until no more 9's are found\n            for (let i = (inputValueArray.length - 1); i >= 0; i -= 1) {\n                if (inputValueArray[i] !== '.') {\n                    inputValueArray[i] = +inputValueArray[i] + 1;\n                    if (inputValueArray[i] < 10) {\n                        break;\n                    }\n\n                    if (i > 0) {\n                        inputValueArray[i] = '0';\n                    }\n                }\n            }\n        }\n\n        // Reconstruct the string, converting any 10's to 0's\n        inputValueArray = inputValueArray.slice(0, roundedStrLength + 1);\n\n        // Return the rounded value\n        inputValueRounded = this._truncateZeros(inputValueArray.join(''), temporaryDecimalPlacesOverride);\n\n        return (Number(inputValueRounded) === 0) ? inputValueRounded : `${negativeSign}${inputValueRounded}`;\n    }\n\n    /**\n     * Round the `value` when the rounding method deals with '.05'\n     *\n     * @param {string} value\n     * @param {object} settings\n     * @returns {string}\n     * @private\n     */\n    static _roundCloseTo05(value, settings) {\n        switch (settings.roundingMethod) {\n            case AutoNumeric.options.roundingMethod.toNearest05:\n            case AutoNumeric.options.roundingMethod.toNearest05Alt:\n                value = (Math.round(value * 20) / 20).toString();\n                break;\n            case AutoNumeric.options.roundingMethod.upToNext05:\n                value = (Math.ceil(value * 20) / 20).toString();\n                break;\n            default :\n                value = (Math.floor(value * 20) / 20).toString();\n        }\n\n        let result;\n        if (!AutoNumericHelper.contains(value, '.')) {\n            result = value + '.00';\n        } else if (value.length - value.indexOf('.') < 3) {\n            result = value + '0';\n        } else {\n            result = value;\n        }\n\n        return result;\n    }\n\n    /**\n     * Modify the given `value` in order to make it usable for the rest of the rounding function.\n     * This convert the `value` to a positive one, trim any leading zeros and make sure it does not start with a leading dot.\n     *\n     * @param {string} value The unformatted value\n     * @param {object} settings\n     * @returns {[string, string]}\n     * @private\n     */\n    static _prepareValueForRounding(value, settings) {\n        // Checks if `inputValue` is a negative value\n        let negativeSign = '';\n        if (AutoNumericHelper.isNegativeStrict(value, '-')) { // The value being unformatted, we check for the minus sign\n            negativeSign = '-';\n\n            // Removes the negative sign that will be added back later if required\n            value = value.replace('-', '');\n        }\n\n        // Append a zero if the first character is not a digit (then it is likely a dot)\n        if (!value.match(/^\\d/)) {\n            value = `0${value}`;\n        }\n\n        // Determines if the value is equal to zero. If it is, remove the negative sign\n        if (Number(value) === 0) {\n            negativeSign = '';\n        }\n\n        // Trims leading zero's as needed\n        if ((Number(value) > 0 && settings.leadingZero !== AutoNumeric.options.leadingZero.keep) ||\n            (value.length > 0 && settings.leadingZero === AutoNumeric.options.leadingZero.allow)) {\n            value = value.replace(/^0*(\\d)/, '$1');\n        }\n\n        return [negativeSign, value];\n    }\n\n    /**\n     * Return `true` if a round up should be done given the last digit, the settings and other information about the value.\n     *\n     * @param {number} lastDigit\n     * @param {object} settings\n     * @param {string} negativeSign This variable comes from `_prepareValueForRounding()`, which return `'-'` if the initial value was negative\n     * @param {number} odd\n     * @returns {boolean}\n     * @private\n     */\n    static _shouldRoundUp(lastDigit, settings, negativeSign, odd) {\n        return (lastDigit > 4 && settings.roundingMethod === AutoNumeric.options.roundingMethod.halfUpSymmetric)                                     || // Round half up symmetric\n            (lastDigit > 4 && settings.roundingMethod === AutoNumeric.options.roundingMethod.halfUpAsymmetric && negativeSign === '')                || // Round half up asymmetric positive values\n            (lastDigit > 5 && settings.roundingMethod === AutoNumeric.options.roundingMethod.halfUpAsymmetric && negativeSign === '-')               || // Round half up asymmetric negative values\n            (lastDigit > 5 && settings.roundingMethod === AutoNumeric.options.roundingMethod.halfDownSymmetric)                                      || // Round half down symmetric\n            (lastDigit > 5 && settings.roundingMethod === AutoNumeric.options.roundingMethod.halfDownAsymmetric && negativeSign === '')              || // Round half down asymmetric positive values\n            (lastDigit > 4 && settings.roundingMethod === AutoNumeric.options.roundingMethod.halfDownAsymmetric && negativeSign === '-')             || // Round half down asymmetric negative values\n            (lastDigit > 5 && settings.roundingMethod === AutoNumeric.options.roundingMethod.halfEvenBankersRounding)                                ||\n            (lastDigit === 5 && settings.roundingMethod === AutoNumeric.options.roundingMethod.halfEvenBankersRounding && odd === 1)                 ||\n            (lastDigit > 0 && settings.roundingMethod === AutoNumeric.options.roundingMethod.toCeilingTowardPositiveInfinity && negativeSign === '') ||\n            (lastDigit > 0 && settings.roundingMethod === AutoNumeric.options.roundingMethod.toFloorTowardNegativeInfinity && negativeSign === '-')  ||\n            (lastDigit > 0 && settings.roundingMethod === AutoNumeric.options.roundingMethod.upRoundAwayFromZero);                                      // Round up away from zero\n    }\n\n    /**\n     * Truncates the decimal part of a number to the given number of decimal places `decimalPlacesToRoundTo`.\n     *\n     * @param {string} value\n     * @param {object} settings\n     * @param {boolean} isPaste\n     * @param {int} decimalPlacesToRoundTo\n     * @returns {*}\n     */\n    static _truncateDecimalPlaces(value, settings, isPaste, decimalPlacesToRoundTo) {\n        if (isPaste) {\n            value = this._roundFormattedValueShownOnFocus(value, settings);\n        }\n\n        const [integerPart, decimalPart] = value.split(settings.decimalCharacter);\n\n        // Truncate the decimal part to the satisfying length since we would round it anyway\n        if (decimalPart && decimalPart.length > decimalPlacesToRoundTo) {\n            if (decimalPlacesToRoundTo > 0) {\n                const modifiedDecimalPart = decimalPart.substring(0, decimalPlacesToRoundTo);\n                value = `${integerPart}${settings.decimalCharacter}${modifiedDecimalPart}`;\n            } else {\n                value = integerPart;\n            }\n        }\n\n        return value;\n    }\n\n    /**\n     * Check if the given value is within the `minimumValue` and `maximumValue` range, while using the override options set with `overrideMinMaxLimits`.\n     * The minimum and maximum limit test results are returned in an array like `[isMinimumLimitRespected, isMaximumLimitRespected]`.\n     *\n     * @param {string} value\n     * @param {object} settings\n     * @returns {[boolean, boolean]}\n     */\n    static _checkIfInRangeWithOverrideOption(value, settings) {\n        if ((AutoNumericHelper.isNull(value) && settings.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior.null) || // When the `null` value is accepted as the `rawValue`, the limits are ignored\n            settings.overrideMinMaxLimits === AutoNumeric.options.overrideMinMaxLimits.ignore ||\n            settings.overrideMinMaxLimits === AutoNumeric.options.overrideMinMaxLimits.invalid) {\n            return [true, true];\n        }\n\n        value = value.toString();\n        value = value.replace(',', '.');\n        const minParse = AutoNumericHelper.parseStr(settings.minimumValue);\n        const maxParse = AutoNumericHelper.parseStr(settings.maximumValue);\n        const valParse = AutoNumericHelper.parseStr(value);\n\n        let result;\n        switch (settings.overrideMinMaxLimits) {\n            case AutoNumeric.options.overrideMinMaxLimits.floor:\n                result = [AutoNumericHelper.testMinMax(minParse, valParse) > -1, true];\n                break;\n            case AutoNumeric.options.overrideMinMaxLimits.ceiling:\n                result = [true, AutoNumericHelper.testMinMax(maxParse, valParse) < 1];\n                break;\n            default:\n                result = [AutoNumericHelper.testMinMax(minParse, valParse) > -1, AutoNumericHelper.testMinMax(maxParse, valParse) < 1];\n        }\n\n        return result;\n    }\n\n    /**\n     * Returns `true` if the given value is within the `minimumValue` and `maximumValue` limits, while using the override options set with `overrideMinMaxLimits`, `false` otherwise\n     *\n     * @param {string} value\n     * @param {object} settings\n     * @returns {boolean}\n     * @private\n     */\n    static _isWithinRangeWithOverrideOption(value, settings) {\n        const [minTest, maxTest] = this._checkIfInRangeWithOverrideOption(value, settings);\n\n        return minTest && maxTest;\n    }\n\n    /**\n     * Helper function that prepares the value string for the min/max test\n     *\n     * @param {string} value\n     * @returns {{}}\n     * @private\n     */\n    static _cleanValueForRangeParse(value) {\n        if (!AutoNumericHelper.isNull(value)) {\n            value = value.toString().replace(',', '.');\n        }\n\n        return AutoNumericHelper.parseStr(value);\n    }\n\n    /**\n     * Returns `true` is the value is superior or equal to the `minimumValue` limit, discarding any override options\n     *\n     * @param {string} value\n     * @param {object} settings\n     * @returns {boolean}\n     * @private\n     */\n    static _isMinimumRangeRespected(value, settings) {\n        return AutoNumericHelper.testMinMax(AutoNumericHelper.parseStr(settings.minimumValue), this._cleanValueForRangeParse(value)) > -1;\n    }\n\n    /**\n     * Returns `true` is the value is inferior or equal to the `maximumValue` limit, discarding any override options\n     *\n     * @param {string} value\n     * @param {object} settings\n     * @returns {boolean}\n     * @private\n     */\n    static _isMaximumRangeRespected(value, settings) {\n        return AutoNumericHelper.testMinMax(AutoNumericHelper.parseStr(settings.maximumValue), this._cleanValueForRangeParse(value)) < 1;\n    }\n\n    /**\n     * Helper function that triggers the range events if they are needed\n     *\n     * @param {boolean} minTest\n     * @param {boolean} maxTest\n     * @private\n     */\n    _triggerRangeEvents(minTest, maxTest) {\n        if (!minTest) {\n            this._triggerEvent(AutoNumeric.events.minRangeExceeded, this.domElement);\n        }\n\n        if (!maxTest) {\n            this._triggerEvent(AutoNumeric.events.maxRangeExceeded, this.domElement);\n        }\n    }\n\n    /**\n     * Set the invalid state on the AutoNumeric element.\n     * If the element is not an input, and therefore a contenteditable-enabled element, its validity state cannot be changed.\n     * In that case, the invalid css class defined with the `settings.invalidClass` option is added to the element.\n     * The 'autoNumeric:invalidValue' event is always sent when this function is called.\n     *\n     * @private\n     */\n    _setInvalidState() {\n        if (this.isInputElement) {\n            AutoNumericHelper.setInvalidState(this.domElement);\n        } else {\n            this._addCSSClass(this.settings.invalidClass);\n        }\n\n        this._triggerEvent(AutoNumeric.events.invalidValue, this.domElement);\n        this.validState = false;\n    }\n\n    /**\n     * Set the valid state on the AutoNumeric element.\n     * If the element is not an input, and therefore a contenteditable-enabled element, its validity state cannot be changed.\n     * In that case, the invalid css class defined with the `settings.invalidClass` option is removed.\n     * The 'autoNumeric:correctedValue' event is sent if the element state is invalid when this is called.\n     *\n     * @private\n     */\n    _setValidState() {\n        if (this.isInputElement) {\n            AutoNumericHelper.setValidState(this.domElement);\n        } else {\n            this._removeCSSClass(this.settings.invalidClass);\n        }\n\n        if (!this.validState) {\n            this._triggerEvent(AutoNumeric.events.correctedValue, this.domElement);\n        }\n\n        this.validState = true;\n    }\n\n    /**\n     * Sets the valid or invalid state on the DOM element, if the value is within the range set by the minimum and maximum value\n     *\n     * @param {string} value\n     * @private\n     */\n    _setValidOrInvalidState(value) {\n        if (this.settings.overrideMinMaxLimits === AutoNumeric.options.overrideMinMaxLimits.invalid) {\n            const minRangeOk = this.constructor._isMinimumRangeRespected(value, this.settings);\n            const maxRangeOk = this.constructor._isMaximumRangeRespected(value, this.settings);\n\n            if (minRangeOk && maxRangeOk) {\n                this._setValidState();\n            } else {\n                this._setInvalidState();\n            }\n\n            this._triggerRangeEvents(minRangeOk, maxRangeOk);\n        }\n    }\n\n    /**\n     * Original settings saved for use when the `decimalPlacesShownOnFocus` and `showOnlyNumbersOnFocus` options are used.\n     * Those original settings are used exclusively in the `focusin` and `focusout` event handlers.\n     */\n    _keepAnOriginalSettingsCopy() {\n        this.originalDigitGroupSeparator = this.settings.digitGroupSeparator;\n        this.originalCurrencySymbol      = this.settings.currencySymbol;\n        this.originalSuffixText          = this.settings.suffixText;\n    }\n\n    /**\n     * Removes any zeros in excess in the front and back of the given `value`, according to the `settings`.\n     * This also manages the cases where the decimal point is on the far left or far right of the `value`.\n     *\n     * @param {string} value\n     * @returns {string|null}\n     */\n    _trimLeadingAndTrailingZeros(value) {\n        // Return the empty string is the value is already empty. This prevents converting that value to '0'.\n        if (value === '' || value === null) {\n            return value;\n        }\n\n        if (this.settings.leadingZero !== AutoNumeric.options.leadingZero.keep) {\n            if (Number(value) === 0) {\n                // Return '0' if the value is zero\n                return '0';\n            }\n\n            // Trim the leading zeros, while leaving one zero to the left of the decimal point if needed\n            value = value.replace(/^(-)?0+(?=\\d)/g,'$1');\n        }\n\n        //TODO remove this from that function and use `trimPaddedZerosFromDecimalPlaces()` instead\n        // Trim the trailing zeros after the last decimal place not being a zero (i.e. 1.2300 -> 1.23)\n        if (AutoNumericHelper.contains(value, '.')) {\n            value = value.replace(/(\\.[0-9]*?)0+$/, '$1');\n        }\n\n        // Remove any trailing decimal point\n        value = value.replace(/\\.$/, '');\n\n        return value;\n    }\n\n    /**\n     * Generate the name for the persistent stored data variable\n     * @private\n     */\n    _setPersistentStorageName() {\n        if (this.settings.saveValueToSessionStorage) {\n            if (this.domElement.name !== '' && !AutoNumericHelper.isUndefined(this.domElement.name)) {\n                this.rawValueStorageName = `${this.storageNamePrefix}${decodeURIComponent(this.domElement.name)}`;\n            } else {\n                this.rawValueStorageName = `${this.storageNamePrefix}${this.domElement.id}`;\n            }\n        }\n    }\n\n    /**\n     * Save the raw Value into sessionStorage or a cookie depending on what the browser is supporting.\n     * @private\n     */\n    _saveValueToPersistentStorage() {\n        if (this.settings.saveValueToSessionStorage) {\n            sessionStorage.setItem(this.rawValueStorageName, this.rawValue);\n        }\n    }\n\n    /**\n     * Retrieve the raw value from sessionStorage or the cookie depending on what the browser is supporting.\n     *\n     * @returns {*}\n     * @private\n     */\n    _getValueFromPersistentStorage() {\n        if (this.settings.saveValueToSessionStorage) {\n            return sessionStorage.getItem(this.rawValueStorageName);\n        }\n\n        AutoNumericHelper.warning('`_getValueFromPersistentStorage()` is called but `settings.saveValueToSessionStorage` is false. There must be an error that needs fixing.', this.settings.showWarnings);\n\n        return null;\n    }\n\n    /**\n     * Remove the raw value data from sessionStorage or the cookie depending on what the browser is supporting.\n     * @private\n     */\n    _removeValueFromPersistentStorage() {\n        if (this.settings.saveValueToSessionStorage) {\n            sessionStorage.removeItem(this.rawValueStorageName);\n        }\n    }\n\n    /**\n     * Get the default value from the html `value` attribute.\n     * Return the empty string if such attribute is not found.\n     *\n     * @param {HTMLElement} domElement\n     *\n     * @returns {string}\n     * @private\n     */\n    _getDefaultValue(domElement) {\n        // Get the default html value\n        // Note: we do not use the simpler `return domElement.defaultValue;` code since the given domElement can sometime be a `contenteditable` element which does not support the `defaultValue` attribute.\n        const value = domElement.getAttribute('value');\n\n        if (AutoNumericHelper.isNull(value)) {\n            return '';\n        }\n\n        return value;\n    }\n\n    /**\n     * Handler for 'focusin' and 'mouseenter' events\n     * On focusin, multiple things happens :\n     * - If `Alt` is pressed, unformat\n     * - Remove the separators if `showOnlyNumbersOnFocus` is set\n     * - Depending on `emptyInputBehavior`, reformat the empty formatted value\n     * - Display the correct number of decimal places (on focus/blur)\n     * - Place the caret correctly if the element is empty\n     *\n     * Note: On focusin, the `rawValue` is never changed. Only the formatted value can be modified.\n     *\n     * @param {KeyboardEvent|MouseEvent} e\n     * @private\n     */\n    _onFocusInAndMouseEnter(e) {\n        //TODO Create separate handlers for the focus and mouseenter events\n        this.isEditing = false; // Just in case no `keyUp` event have been sent (i.e. if the user lost the focus from the current window while typing)\n\n        if (!this.formulaMode && this.settings.unformatOnHover && e.type === 'mouseenter' && e.altKey) {\n            this.constructor._unformatAltHovered(this);\n\n            return;\n        }\n\n        if (e.type === 'focus') { //TODO Move that back to the 'focus' event handler when the separation between the 'focus' and 'mouseenter' handler will be done\n            // Keep track if the element is currently focused\n            this.isFocused = true;\n            this.rawValueOnFocus = this.rawValue; // Keep track of the initial rawValue. This is needed to define if a change event must be dispatched later\n        }\n\n        if (e.type === 'focus' && this.settings.unformatOnHover && this.hoveredWithAlt) {\n            this.constructor._reformatAltHovered(this);\n        }\n\n        if (e.type === 'focus' || e.type === 'mouseenter' && !this.isFocused) {\n            let elementValueToSet = null; // Store the value we want to set on the element, and only call `_setElementValue()` once\n\n            if (this.settings.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior.focus &&\n                this.rawValue < 0 && this.settings.negativeBracketsTypeOnBlur !== null && this.settings.isNegativeSignAllowed) { //FIXME this is called a second time in _addGroupSeparators too. Prevent this, if possible.\n                // Only remove the brackets if the value is negative\n                elementValueToSet = this.constructor._removeBrackets(AutoNumericHelper.getElementValue(this.domElement), this.settings);\n                //FIXME The element value is set here, why continue and set it again later in that same parent logic block?\n            }\n\n            // Use the `rawValue`, multiplied by `rawValueDivisor` if defined\n            const rawValueToFormat = this._getRawValueToFormat(this.rawValue);\n\n            // Modify the element value according to the number of decimal places to show on focus or the `showOnlyNumbersOnFocus` option\n            if (rawValueToFormat !== '') {\n                // Round the given value according to the object state (focus/unfocused)\n                const roundedValue = this.constructor._roundFormattedValueShownOnFocusOrBlur(rawValueToFormat, this.settings, this.isFocused);\n\n                if (this.settings.showOnlyNumbersOnFocus === AutoNumeric.options.showOnlyNumbersOnFocus.onlyNumbers) {\n                    //TODO Use a `this.settingsOverride` object instead of modifying the `this.settings` object\n                    this.settings.digitGroupSeparator = '';\n                    this.settings.currencySymbol      = '';\n                    this.settings.suffixText          = '';\n                    elementValueToSet = roundedValue.replace('.', this.settings.decimalCharacter);\n                } else {\n                    let formattedValue;\n                    if (AutoNumericHelper.isNull(roundedValue)) {\n                        formattedValue = '';\n                    } else {\n                        formattedValue = this.constructor._addGroupSeparators(roundedValue.replace('.', this.settings.decimalCharacter), this.settings, this.isFocused, rawValueToFormat);\n                    }\n\n                    elementValueToSet = formattedValue;\n                }\n            }\n\n            // In order to send a 'native' change event when blurring the input, we need to first store the initial input value on focus.\n            if (AutoNumericHelper.isNull(elementValueToSet)) {\n                this.valueOnFocus = '';\n            } else {\n                this.valueOnFocus = elementValueToSet;\n            }\n\n            this.lastVal = this.valueOnFocus;\n            const isEmptyValue = this.constructor._isElementValueEmptyOrOnlyTheNegativeSign(this.valueOnFocus, this.settings);\n            const orderedValue = this.constructor._orderValueCurrencySymbolAndSuffixText(this.valueOnFocus, this.settings, true); // This displays the currency sign on hover even if the rawValue is empty\n            const orderedValueTest = (isEmptyValue && orderedValue !== '') && this.settings.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior.focus;\n            if (orderedValueTest) {\n                elementValueToSet = orderedValue;\n            }\n\n            if (!AutoNumericHelper.isNull(elementValueToSet)) {\n                this._setElementValue(elementValueToSet);\n            }\n\n            if (orderedValueTest && orderedValue === this.settings.currencySymbol && this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n                // If there is a currency symbol and its on the right hand side, then we place the caret accordingly on the far left side\n                AutoNumericHelper.setElementSelection(e.target, 0);\n            }\n        }\n    }\n\n    /**\n     * Handler for the 'focus' event.\n     * We update the info of the focused state in the `this.isFocused` variable when the element gets focused.\n     * @private\n     */\n    _onFocus() {\n        if (this.settings.isCancellable) {\n            // Save the current unformatted value for later use by the 'cancellable' feature\n            this._saveCancellableValue();\n        }\n    }\n\n    /**\n     * Handler for the 'focusin' event.\n     * This is called before the 'focus' event, and is necessary to change the selection on focus under Firefox for instance.\n     *\n     * @param {Event} e\n     * @private\n     */\n    _onFocusIn(e) {\n        if (this.settings.selectOnFocus) {\n            // The whole input content is selected on focus (following the `selectOnFocus` and `selectNumberOnly` options)\n            //XXX Firefox <47 does not respect this selection...Oh well.\n            this.select();\n        } else {\n            // Or we decide where to put the caret using the `caretPositionOnFocus` option\n            if (!AutoNumericHelper.isNull(this.settings.caretPositionOnFocus)) {\n                AutoNumericHelper.setElementSelection(e.target, this._initialCaretPosition(AutoNumericHelper.getElementValue(this.domElement)));\n            }\n        }\n    }\n\n    /**\n     * Enter the special 'formula mode' where users can enter a math expression that will be evaluated on blur and `enter`\n     * @private\n     */\n    _enterFormulaMode() {\n        if (this.settings.formulaMode) {\n            this.formulaMode = true; // 'Deactivate' the normal event listeners behavior\n            // Clear the input and add a '=' sign to it\n            AutoNumericHelper.setElementValue(this.domElement, '=');\n            // Put the caret after the `=` character\n            AutoNumericHelper.setElementSelection(this.domElement, 1);\n        }\n    }\n\n    /**\n     * Exit the formula mode\n     * Tries to parse and evaluate the math expression, then `set()` the result if it's correct, otherwise reformat with the previous `rawValue`\n     * @private\n     */\n    _exitFormulaMode() {\n        // Parse the formula\n        let formula = AutoNumericHelper.getElementValue(this.domElement);\n        formula     = formula.replace(/^\\s*=/, ''); // Remove all the leading whitespaces and the equal sign from the formula\n        let result;\n        try {\n            const ast = new Parser(formula, this.settings.decimalCharacter);\n            result    = (new Evaluator()).evaluate(ast);\n        } catch (e) {\n            // Error when parsing the math expression\n            this._triggerEvent(AutoNumeric.events.invalidFormula, this.domElement, {\n                formula,\n                aNElement: this,\n            });\n            this.reformat();\n            this.formulaMode = false;\n\n            return;\n        }\n\n        // The math expression is correctly parsed\n        this._triggerEvent(AutoNumeric.events.validFormula, this.domElement, {\n            formula,\n            result,\n            aNElement: this,\n        });\n        this.set(result); // Note: we can have a valid formula, but an invalid value (i.e. out of the min/max range)\n        this.formulaMode = false;\n    }\n\n    /**\n     * Returns `true` if the non-printable key is accepted in formula mode\n     *\n     * @returns {boolean}\n     * @private\n     */\n    _acceptNonPrintableKeysInFormulaMode() {\n        return this.eventKey === AutoNumericEnum.keyName.Backspace || this.eventKey === AutoNumericEnum.keyName.Delete ||\n            this.eventKey === AutoNumericEnum.keyName.LeftArrow || this.eventKey === AutoNumericEnum.keyName.RightArrow ||\n            this.eventKey === AutoNumericEnum.keyName.Home || this.eventKey === AutoNumericEnum.keyName.End;\n    }\n\n    /**\n     * Handler for 'keydown' events.\n     * The user just started pushing any key, hence one event is sent.\n     *\n     * Note :\n     * By default a 'normal' input output those events in the right order when inputting a character key (i.e. 'a') :\n     * - keydown\n     * - keypress\n     * - input\n     * - keyup\n     *\n     * ...when inputting a modifier key (i.e. 'ctrl') :\n     * - keydown\n     * - keyup\n     *\n     * If 'delete' or 'backspace' are entered 'normally', the following events are sent :\n     * - keydown\n     * - input\n     * - keyup\n     *\n     * If 'delete' or 'backspace' are entered continuously (with the key still pressed), the following events are sent :\n     * - keydown\n     * - input\n     * [- keydown\n     * - input] x times\n     * - keyup\n     *\n     * If 'enter' is entered and the value has not changed, the following events are sent :\n     * - keydown\n     * - keypress\n     * - keyup\n     *\n     * If 'enter' is entered and the value has been changed, the following events are sent :\n     * - keydown\n     * - keypress\n     * - change\n     * - keyup\n     *\n     * When a paste is done, the following events are sent :\n     * - input (if paste is done with the mouse)\n     *\n     * - keydown (if paste is done with ctrl+v)\n     * - keydown\n     * - input\n     * - keyup\n     * - keyup\n     *\n     * @param {KeyboardEvent} e\n     */\n    _onKeydown(e) {\n        if (this.compositioning) {\n            return;\n        }\n        this.formatted = false; // Keep track if the element has been formatted already. If that's the case, prevent further format calculations.\n        this.isEditing = true; // Keep track if the user is currently editing the element manually\n\n        if (!this.formulaMode && !this.isFocused && this.settings.unformatOnHover && e.altKey && this.domElement === AutoNumericHelper.getHoveredElement()) {\n            // Here I prevent calling _unformatAltHovered if the element is already focused, since the global 'keydown' listener will pick it up as well\n            this.constructor._unformatAltHovered(this);\n\n            return;\n        }\n\n        this._updateEventKeyInfo(e);\n\n        this.keydownEventCounter += 1; // Every time the keydown event is caught, increment the counter to keep track if the key is continuously pressed\n        if (this.keydownEventCounter === 1) {\n            this.initialValueOnFirstKeydown = AutoNumericHelper.getElementValue(e.target); // This is needed in `onKeyup()` to check if the value as changed during the key press\n            this.initialRawValueOnFirstKeydown = this.rawValue;\n        }\n\n        if (this.formulaMode) {\n            if (this.eventKey === AutoNumericEnum.keyName.Esc) { // Cancel the formula\n                this.formulaMode = false;\n                this.reformat();\n\n                return;\n            }\n\n            if (this.eventKey === AutoNumericEnum.keyName.Enter) { // Calculate the formula\n                this._exitFormulaMode();\n\n                return;\n            }\n\n            // Accept the backspace, delete, arrow, home and end keys\n            if (this._acceptNonPrintableKeysInFormulaMode()) {\n                return;\n            }\n\n            //TODO Manage the undo/redo events *while* editing a math expression\n            //TODO Manage the cut/paste events *while* editing a math expression\n        } else {\n            if (this.eventKey === AutoNumericEnum.keyName.Equal) {\n                this._enterFormulaMode();\n\n                return;\n            }\n\n            if (this.settings.modifyValueOnUpDownArrow &&\n                (this.eventKey === AutoNumericEnum.keyName.UpArrow || this.eventKey === AutoNumericEnum.keyName.DownArrow)) {\n                this.upDownArrowAction(e);\n\n                return;\n            }\n        }\n\n        if (this.domElement.readOnly || this.settings.readOnly || this.domElement.disabled) {\n            this.processed = true;\n\n            return;\n        }\n\n        if (this.eventKey === AutoNumericEnum.keyName.Esc) {\n            //XXX The default 'Escape' key behavior differs between Firefox and Chrome, Firefox already having a built-in 'cancellable-like' feature. This is why we call `e.preventDefault()` here instead of just when `isCancellable` is set to `true`. This allow us to keep the same behavior across browsers.\n            e.preventDefault();\n\n            if (this.settings.isCancellable) {\n                // If the user wants to cancel his modifications:\n                // We set back the saved value\n                if (this.rawValue !== this.savedCancellableValue) {\n                    // Do not set the value again if it has not changed\n                    this.set(this.savedCancellableValue);\n                    // And we need to send an 'input' event when setting back the initial value in order to make other scripts aware of the value change...\n                    this._triggerEvent(AutoNumeric.events.native.input, e.target);\n                }\n            }\n\n            // ...and lastly we update the caret selection, even if the option `isCancellable` is false\n            this.select();\n            //TODO Add an option to select either the integer or decimal part with `Esc`\n        }\n\n        // The \"enter\" key throws a `change` event if the raw value has changed since the `focus` event\n        let targetValue = AutoNumericHelper.getElementValue(e.target);\n        if (this.eventKey === AutoNumericEnum.keyName.Enter && this.rawValue !== this.rawValueOnFocus) {\n            this._triggerEvent(AutoNumeric.events.native.change, e.target);\n            this.valueOnFocus = targetValue;\n            this.rawValueOnFocus = this.rawValue;\n\n            if (this.settings.isCancellable) {\n                // If the user activated the 'cancellable' feature, we save the validated value when 'Enter' is hit\n                this._saveCancellableValue();\n            }\n        }\n\n        this._updateInternalProperties(e);\n\n        if (this._processNonPrintableKeysAndShortcuts(e)) {\n            this.processed = true;\n\n            return;\n        }\n\n        // Check if the key is a delete/backspace key\n        if (this.eventKey === AutoNumericEnum.keyName.Backspace || this.eventKey === AutoNumericEnum.keyName.Delete) {\n            const isDeletionAllowed = this._processCharacterDeletion(e); // Because backspace and delete only triggers keydown and keyup events, not keypress\n            this.processed = true;\n            if (!isDeletionAllowed) {\n                // Prevent the deletion if `overrideMinMaxLimits` option is `doNotOverride` and the result goes out of the allowed range\n                e.preventDefault();\n\n                return;\n            }\n\n            this._formatValue(e);\n\n            // If and only if the resulting value has changed after that backspace/delete, then we have to send an 'input' event like browsers normally do.\n            targetValue = AutoNumericHelper.getElementValue(e.target); // Update the value since it could have been changed during the deletion\n            if ((targetValue !== this.lastVal) && this.throwInput) {\n                // Throw an input event when a character deletion is detected\n                this._triggerEvent(AutoNumeric.events.native.input, e.target);\n                e.preventDefault(); // ...and immediately prevent the browser to delete a second character\n            }\n\n            this.lastVal = targetValue;\n            this.throwInput = true;\n        }\n    }\n\n    /**\n     * Handler for 'keypress' events.\n     * The user is still pressing the key, which will output a character (i.e. '2') continuously until he releases the key.\n     * Note: 'keypress' events are not sent for delete keys like Backspace/Delete.\n     *\n     * @param {KeyboardEvent} e\n     */\n    _onKeypress(e) {\n        if (this.compositioning) {\n            return;\n        }\n        if (this.formulaMode) {\n            // Accept the backspace, delete, arrow, home and end keys\n            if (this._acceptNonPrintableKeysInFormulaMode()) {\n                return;\n            }\n\n            //TODO Prevent keys to be entered on the left-hand side of the '=' sign?...Or just let the user see what they are wrongly doing?\n            if (this.settings.formulaChars.test(this.eventKey)) { // Accept the custom decimal character too\n                return; // Accept the key in the formula (and do not accept the '=' character here again)\n            } else {\n                e.preventDefault(); // Reject the key\n            }\n\n            return;\n        }\n\n        if (this.eventKey === AutoNumericEnum.keyName.Insert) {\n            return;\n        }\n\n        const processed = this.processed;\n        this._updateInternalProperties(e);\n\n        if (this._processNonPrintableKeysAndShortcuts(e)) {\n            return;\n        }\n\n        if (processed) {\n            e.preventDefault();\n\n            return;\n        }\n\n        const isCharacterInsertionAllowed = this._processCharacterInsertion();\n        if (isCharacterInsertionAllowed) {\n            this._formatValue(e);\n            const targetValue = AutoNumericHelper.getElementValue(e.target);\n            if ((targetValue !== this.lastVal) && this.throwInput) {\n                // Throws input event on adding a character\n                this._triggerEvent(AutoNumeric.events.native.input, e.target);\n                e.preventDefault(); // ...and immediately prevent the browser to add a second character\n            } else {\n                if ((this.eventKey === this.settings.decimalCharacter || this.eventKey === this.settings.decimalCharacterAlternative) &&\n                    (AutoNumericHelper.getElementSelection(e.target).start === AutoNumericHelper.getElementSelection(e.target).end) &&\n                    AutoNumericHelper.getElementSelection(e.target).start === targetValue.indexOf(this.settings.decimalCharacter)) {\n                    const position = AutoNumericHelper.getElementSelection(e.target).start + 1;\n                    AutoNumericHelper.setElementSelection(e.target, position);\n                }\n\n                e.preventDefault();\n            }\n\n            this.lastVal = AutoNumericHelper.getElementValue(e.target);\n            this.throwInput = true;\n\n            this._setValidOrInvalidState(this.rawValue); // Updates the valid state as soon as the number is entered (in the case where the user keeps pressing the number key)\n\n            return;\n        }\n\n        e.preventDefault();\n    }\n\n    /**\n     * Handler for 'keyup' events.\n     * The user just released any key, hence one event is sent.\n     *\n     * @param {KeyboardEvent} e\n     */\n    _onKeyup(e) {\n        if (this.compositioning) {\n            return;\n        }\n        this.isEditing = false;\n        this.keydownEventCounter = 0; // Reset the keydown events counter\n\n        if (this.formulaMode) {\n            return;\n        }\n\n        if (this.settings.isCancellable && this.eventKey === AutoNumericEnum.keyName.Esc) {\n            // If the user wants to cancel its modifications, we drop the 'keyup' event for the Esc key\n            e.preventDefault();\n\n            return;\n        }\n\n        // Manage the undo/redo events\n        this._updateEventKeyInfo(e); // Fixes #761, where the Ctrl key is not correctly detected during undo/redo since this.eventKey was not updated from 'Z' to 'Control'\n        if (this.eventKey === AutoNumericEnum.keyName.Z || this.eventKey === AutoNumericEnum.keyName.z) {\n            if (e.ctrlKey && e.shiftKey) {\n                // Redo\n                e.preventDefault();\n                this._historyTableRedo();\n                this._triggerEvent(AutoNumeric.events.native.input, e.target); //TODO instead of adding the event here, generate it from the `_historyTableRedo()` function?\n                this.onGoingRedo = true;\n\n                // if lastVal is updated in the undo branch, it should be update here too, otherwise backspace could delete two chars (enter 1234, ctrl-z, ctrl-y, backspace)\n                this.lastVal = AutoNumericHelper.getElementValue(e.target);\n                this.throwInput = true;\n\n                return;\n            } else if (e.ctrlKey && !e.shiftKey) {\n                if (this.onGoingRedo) {\n                    // Prevent an 'undo' to be launched when releasing the shift key before the ctrl key after a 'redo' shortcut\n                    this.onGoingRedo = false;\n                } else {\n                    e.preventDefault();\n                    // Undo\n                    this._historyTableUndo();\n                    this._triggerEvent(AutoNumeric.events.native.input, e.target); //TODO instead of adding the event here, generate it from the `_historyTableRedo()` function?\n\n                    // lastVal should be updated to properly detect change in the delete/backspace handler above\n                    this.lastVal = AutoNumericHelper.getElementValue(e.target);\n                    this.throwInput = true;\n\n                    return;\n                }\n            }\n        } else if ((this.eventKey === AutoNumericEnum.keyName.Y || this.eventKey === AutoNumericEnum.keyName.y) && e.ctrlKey) {\n            // Redo\n            e.preventDefault();\n            this._historyTableRedo();\n            this._triggerEvent(AutoNumeric.events.native.input, e.target); //TODO instead of adding the event here, generate it from the `_historyTableRedo()` function?\n            this.onGoingRedo = true;\n\n            // if lastVal is updated in the undo branch, it should be update here too, otherwise backspace could delete two chars (enter 1234, ctrl-z, ctrl-y, backspace)\n            this.lastVal = AutoNumericHelper.getElementValue(e.target);\n            this.throwInput = true;\n\n            return;\n        }\n\n        if (this.onGoingRedo && (e.ctrlKey || e.shiftKey)) {\n            // Special case where if the user has entered `Control+Shift+z`, then release `z`, keeping `Control` or `Shift` pressed, then `this.onGoingRedo` is never changed back to `false` when the user release `Control` or `Shift`\n            this.onGoingRedo = false;\n        }\n\n        // Manage the Cut event\n        // Also handle the Ctrl-Del event on windows (Delete words to the right of the cursor) \n        if (((e.ctrlKey || e.metaKey) && (this.eventKey === AutoNumericEnum.keyName.X || this.eventKey === AutoNumericEnum.keyName.x)) ||\n            (e.ctrlKey && this.eventKey === AutoNumericEnum.keyName.Delete)) {\n            // Save the caret position at the start of the selection\n            const caretPosition = AutoNumericHelper.getElementSelection(this.domElement).start;\n            // Convert the remaining 'formatted' numbers in a Js number\n            const cutNumber = this.constructor._toNumericValue(AutoNumericHelper.getElementValue(e.target), this.settings);\n            // Try to set that value with `set()`\n            this.set(cutNumber);\n            // Set back the initial caret position\n            this._setCaretPosition(caretPosition);\n            \n            // update lastVal to detect change in delete/backspace handler\n            this.lastVal = AutoNumericHelper.getElementValue(e.target);\n        }\n\n        // Manage the reformat when hovered with the Alt key pressed\n        if (this.eventKey === AutoNumericEnum.keyName.Alt && this.settings.unformatOnHover && this.hoveredWithAlt) {\n            this.constructor._reformatAltHovered(this);\n\n            return;\n        }\n\n        // Manage the Backspace and Delete keys when used in combination with the control key (fix #656)\n        if ((e.ctrlKey || e.metaKey) && (this.eventKey === AutoNumericEnum.keyName.Backspace || this.eventKey === AutoNumericEnum.keyName.Delete)) {\n            const targetValue = AutoNumericHelper.getElementValue(e.target);\n            this._setRawValue(this._formatOrUnformatOther(false, targetValue));\n\n            return;\n        }\n\n        this._updateInternalProperties(e);\n\n        const skip = this._processNonPrintableKeysAndShortcuts(e);\n        delete this.valuePartsBeforePaste;\n        const targetValue = AutoNumericHelper.getElementValue(e.target);\n        if (skip || targetValue === '' && this.initialValueOnFirstKeydown === '') { // If the user enters skippable keys, or keeps deleting/backspacing into the empty input, no 'formatted' event are sent (cf. issue #621)\n            return;\n        }\n\n        // Added to properly place the caret when only the currency sign is present\n        if (targetValue === this.settings.currencySymbol) {\n            if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n                AutoNumericHelper.setElementSelection(e.target, 0);\n            } else {\n                AutoNumericHelper.setElementSelection(e.target, this.settings.currencySymbol.length);\n            }\n        } else if (this.eventKey === AutoNumericEnum.keyName.Tab) {\n            AutoNumericHelper.setElementSelection(e.target, 0, targetValue.length);\n        }\n\n        if ((targetValue === this.settings.suffixText) ||\n            (this.rawValue === '' && this.settings.currencySymbol !== '' && this.settings.suffixText !== '')) {\n            AutoNumericHelper.setElementSelection(e.target, 0);\n        }\n\n        // Saves the extended decimal to preserve the data when navigating away from the page\n        if (this.settings.decimalPlacesShownOnFocus !== null) {\n            this._saveValueToPersistentStorage();\n        }\n\n        if (!this.formatted) {  //TODO Is this line needed? Considering that onKeydown and onKeypress both finish by setting it to false...\n            this._formatValue(e);\n        }\n\n        this._setValidOrInvalidState(this.rawValue);\n\n        // Force the `rawValue` update on Android Chrome\n        this._saveRawValueForAndroid();\n\n        // If the input value has changed during the key press event chain, an event is sent to alert that a formatting has been done (cf. Issue #187)\n        if (targetValue !== this.initialValueOnFirstKeydown) { // Checking the value that were saved after the very first keydown event ensure that the 'formatted' event will be sent even if the user continuously press the Delete/Backspace key\n            this._triggerEvent(AutoNumeric.events.formatted, e.target, {\n                oldValue   : this.initialValueOnFirstKeydown,\n                newValue   : targetValue,\n                oldRawValue: this.initialRawValueOnFirstKeydown,\n                newRawValue: this.rawValue,\n                isPristine : this.isPristine(false),\n                error      : null,\n                aNElement  : this,\n            });\n        }\n\n        // Update the selection of the current element of the history table\n        if (this.historyTable.length > 1) {\n            const selection = AutoNumericHelper.getElementSelection(this.domElement);\n            this.selectionStart = selection.start;\n            this.selectionEnd = selection.end;\n            this.historyTable[this.historyTableIndex].start = this.selectionStart;\n            this.historyTable[this.historyTableIndex].end = this.selectionEnd;\n        }\n    }\n\n    /**\n     * On Android Chrome, the `rawValue` is not updated when the user changes the input value.\n     * This function updates the `rawValue` accordingly.\n     * @private\n     */\n    _saveRawValueForAndroid() {\n        if (this.eventKey === AutoNumericEnum.keyName.AndroidDefault) {\n            let normalizedValue = this.constructor._stripAllNonNumberCharactersExceptCustomDecimalChar(this.getFormatted(), this.settings, true, this.isFocused);\n            normalizedValue = this.constructor._convertToNumericString(normalizedValue, this.settings);\n\n            this._setRawValue(normalizedValue);\n        }\n    }\n\n    /**\n     * Handler for 'focusout' events\n     * On focusout, multiple things happens :\n     * - The element value is formatted back if the `Alt` key was pressed,\n     * - The element value is formatted back if `showOnlyNumbersOnFocus` was set to only show numbers,\n     * - The element value is multiplied by `rawValueDivisor` on `blur`\n     *\n     * Note: On focusout, the `rawValue` is never changed. Only the formatted value can be modified.\n     *\n     * @param {Event} e\n     */\n    _onFocusOutAndMouseLeave(e) {\n        //TODO Create separate handlers for blur and mouseleave\n        this.isEditing = false; // Just in case no `keyUp` event have been sent (if the user lost the focus on the window while typing)\n\n        if (e.type === 'mouseleave' && this.formulaMode) {\n            return;\n        }\n\n        //FIXME Do not call `set()` if the current raw value is the same as the one we are trying to set (currently, on focus out, `set()` is always called, even if the value has not changed\n        if (this.settings.unformatOnHover && e.type === 'mouseleave' && this.hoveredWithAlt) {\n            this.constructor._reformatAltHovered(this);\n\n            return;\n        }\n\n        if ((e.type === 'mouseleave' && !this.isFocused) || e.type === 'blur') {\n            if (e.type === 'blur' && this.formulaMode) {\n                this._exitFormulaMode();\n            }\n\n            this._saveValueToPersistentStorage();\n            if (this.settings.showOnlyNumbersOnFocus === AutoNumeric.options.showOnlyNumbersOnFocus.onlyNumbers) {\n                this.settings.digitGroupSeparator = this.originalDigitGroupSeparator;\n                this.settings.currencySymbol = this.originalCurrencySymbol;\n                this.settings.suffixText = this.originalSuffixText;\n            }\n\n            // Use the rawValue, multiplied by `rawValueDivisor` if defined\n            const rawValueToFormat = this._getRawValueToFormat(this.rawValue);\n            const isRawValueNull = AutoNumericHelper.isNull(rawValueToFormat);\n            const [minTest, maxTest] = this.constructor._checkIfInRangeWithOverrideOption(rawValueToFormat, this.settings);\n\n            // Directly set the formatted value if the `rawValue` is found in `valuesToStrings`\n            let elementValueIsAlreadySet = false;\n            if (rawValueToFormat !== '' && !isRawValueNull) {\n                this._triggerRangeEvents(minTest, maxTest);\n\n                if (this.settings.valuesToStrings && this._checkValuesToStrings(rawValueToFormat)) {\n                    // Set the formatted value with the corresponding string\n                    this._setElementValue(this.settings.valuesToStrings[rawValueToFormat]);\n                    elementValueIsAlreadySet = true;\n                }\n            }\n\n            // Only generate the formatted value if no `valuesToStrings` have been found\n            if (!elementValueIsAlreadySet) {\n                let value;\n                if (isRawValueNull || rawValueToFormat === '') {\n                    value = rawValueToFormat;\n                } else {\n                    value = String(rawValueToFormat);\n                }\n\n                if (rawValueToFormat !== '' && !isRawValueNull) {\n                    if (minTest && maxTest && !this.constructor._isElementValueEmptyOrOnlyTheNegativeSign(rawValueToFormat, this.settings)) {\n                        value = this._modifyNegativeSignAndDecimalCharacterForRawValue(value);\n\n                        if (this.settings.divisorWhenUnfocused && !AutoNumericHelper.isNull(value)) {\n                            value = value / this.settings.divisorWhenUnfocused;\n                            value = value.toString();\n                        }\n\n                        value = this.constructor._roundFormattedValueShownOnBlur(value, this.settings);\n                        value = this.constructor._modifyNegativeSignAndDecimalCharacterForFormattedValue(value, this.settings);\n                    } else {\n                        this._triggerRangeEvents(minTest, maxTest);\n                    }\n                } else if (rawValueToFormat === '') {\n                    switch (this.settings.emptyInputBehavior) {\n                        case AutoNumeric.options.emptyInputBehavior.zero:\n                            this._setRawValue('0');\n                            value = this.constructor._roundValue('0', this.settings, 0); \n                            break;\n                        case AutoNumeric.options.emptyInputBehavior.min:\n                            this._setRawValue(this.settings.minimumValue);\n                            value = this.constructor._roundFormattedValueShownOnFocusOrBlur(this.settings.minimumValue, this.settings, this.isFocused); \n                            break;\n                        case AutoNumeric.options.emptyInputBehavior.max:\n                            this._setRawValue(this.settings.maximumValue);\n                            value = this.constructor._roundFormattedValueShownOnFocusOrBlur(this.settings.maximumValue, this.settings, this.isFocused); \n                            break;\n                        default:\n                            if (AutoNumericHelper.isNumber(this.settings.emptyInputBehavior)) {\n                                this._setRawValue(this.settings.emptyInputBehavior);\n                                value = this.constructor._roundFormattedValueShownOnFocusOrBlur(this.settings.emptyInputBehavior, this.settings, this.isFocused);\n                            }\n                    }\n                }\n\n                let groupedValue = this.constructor._orderValueCurrencySymbolAndSuffixText(value, this.settings, false);\n                if (!(this.constructor._isElementValueEmptyOrOnlyTheNegativeSign(value, this.settings) ||\n                        (isRawValueNull && this.settings.emptyInputBehavior === AutoNumeric.options.emptyInputBehavior.null))) {\n                    groupedValue = this.constructor._addGroupSeparators(value, this.settings, false, rawValueToFormat);\n                }\n\n                // Testing for `allowDecimalPadding.never` or `allowDecimalPadding.floats` is needed to make sure we do not keep a trailing decimalCharacter (like '500.') in the element, since the raw value would still be a correctly formatted integer ('500')\n                if (groupedValue !== rawValueToFormat ||\n                    rawValueToFormat === '' || // This make sure we get rid on any currency symbol or suffix that might have been added on focus\n                    this.settings.allowDecimalPadding === AutoNumeric.options.allowDecimalPadding.never ||\n                    this.settings.allowDecimalPadding === AutoNumeric.options.allowDecimalPadding.floats) {\n                    if (this.settings.symbolWhenUnfocused && rawValueToFormat !== '' && rawValueToFormat !== null) {\n                        groupedValue = `${groupedValue}${this.settings.symbolWhenUnfocused}`;\n                    }\n\n                    this._setElementValue(groupedValue);\n                }\n            }\n\n            this._setValidOrInvalidState(this.rawValue);\n\n            if (e.type === 'blur') {\n                //TODO Create separate handlers for blur and mouseleave, really.\n                this._onBlur(e);\n            }\n        }\n    }\n\n    /**\n     * Handler for 'paste' event\n     *\n     * @param {Event|ClipboardEvent} e\n     */\n    _onPaste(e) {\n        //FIXME When pasting '000' on a thousand group selection, the whole selection gets deleted, and only one '0' is pasted (cf. issue #302)\n        // The event is prevented by default, since otherwise the user would be able to paste invalid characters into the input\n        e.preventDefault();\n\n        if (this.settings.readOnly || this.domElement.readOnly || this.domElement.disabled) {\n            // Do not allow pasting in a readonly element (fix issue #505)\n            return;\n        }\n\n        let rawPastedText;\n        if (e.clipboardData && e.clipboardData.getData) {\n            rawPastedText = e.clipboardData.getData('text/plain');\n        } else {\n            AutoNumericHelper.throwError('Unable to retrieve the pasted value. Please use a modern browser (i.e. Firefox or Chromium).');\n        }\n\n        // Fix for firefox paste handling on `contenteditable` elements where `e.target` is the text node, not the element\n        let eventTarget;\n        if (!e.target.tagName) {\n            eventTarget = e.explicitOriginalTarget;\n        } else {\n            eventTarget = e.target;\n        }\n\n        // 0. Special case if the user has selected all the input text before pasting\n        const initialFormattedValue = AutoNumericHelper.getElementValue(eventTarget);\n        const selectionStart = eventTarget.selectionStart || 0;\n        const selectionEnd = eventTarget.selectionEnd || 0;\n        const selectionSize = selectionEnd - selectionStart;\n\n        if (selectionSize === initialFormattedValue.length) { // If all the element text is selected\n            //TODO Refactor this with the tests below\n            // Since the whole element content will be replaced, no need to complicate things and directly test for the validity of the pasted content, then set the `rawValue` and caret position (fix issue #482)\n            // 1. Strip all thousand separators, brackets and currency sign, and convert the decimal character to a dot\n            const untranslatedPastedText = this._preparePastedText(rawPastedText);\n            const pastedRawValue = AutoNumericHelper.arabicToLatinNumbers(untranslatedPastedText, false, false, false); // Allow pasting arabic numbers\n\n            // 2. Check that the paste is a valid number once it has been normalized to a raw value\n            if (pastedRawValue === '.' || pastedRawValue === '' || (pastedRawValue !== '.' && !AutoNumericHelper.isNumber(pastedRawValue))) {\n                this.formatted = true; // This prevents the `keyup` event on the `v` key during a paste to try to format an empty value.\n                // If the user tries to paste a single decimal character (that has been translated to '.' already) or the empty value, ignore the paste\n                if (this.settings.onInvalidPaste === AutoNumeric.options.onInvalidPaste.error) {\n                    AutoNumericHelper.throwError(`The pasted value '${rawPastedText}' is not a valid paste content.`);\n                }\n\n                return;\n            }\n\n            // 3. Then try to set it as the new value. The `set()` method will run the additional tests (i.e. limits) as needed.\n            this.set(pastedRawValue);\n            this.formatted = true;\n\n            // 4. On a 'normal' non-autoNumeric input, an `input` event is sent when a paste is done. We mimic that.\n            this._triggerEvent(AutoNumeric.events.native.input, eventTarget);\n\n            this.lastVal = AutoNumericHelper.getElementValue(eventTarget);  // fix the 'input event sometimes not raised' issue after value is pasted into an empty input\n\n            // 5. Return since the job is done\n            return;\n        }\n\n        // 1. Check if the paste has a negative sign (only if it's the first character), and store that information for later use\n        const isPasteNegative = AutoNumericHelper.isNegativeStrict(rawPastedText, this.settings.negativeSignCharacter);\n        if (isPasteNegative) {\n            // 1a. Remove the negative sign from the pasted text\n            rawPastedText = rawPastedText.slice(1, rawPastedText.length); //TODO This can lead to an empty rawPastedText if only the negative sign character is pasted. This then complains about not being a valid paste content. Define which behaviour we want when this happens, then implement the solution.\n        }\n\n        // 2. Strip all thousand separators, brackets and currency sign, and convert the decimal character to a dot\n        const untranslatedPastedText = this._preparePastedText(rawPastedText);\n\n        let pastedText;\n        if (untranslatedPastedText === '.') {\n            // Special case : If the user tries to paste a single decimal character (that has been translated to '.' already)\n            pastedText = '.';\n        } else {\n            // Normal case\n            // Allow pasting arabic numbers\n            pastedText = AutoNumericHelper.arabicToLatinNumbers(untranslatedPastedText, false, false, false);\n        }\n\n        // 3. Test if the paste is valid (only has numbers and eventually a decimal character). If it's not valid, stop here.\n        if (pastedText !== '.' && (!AutoNumericHelper.isNumber(pastedText) || pastedText === '')) {\n            this.formatted = true; // This prevents the `keyup` event on the `v` key during a paste to try to format an empty value (fix issue #484)\n            if (this.settings.onInvalidPaste === AutoNumeric.options.onInvalidPaste.error) {\n                AutoNumericHelper.throwError(`The pasted value '${rawPastedText}' is not a valid paste content.`);\n            }\n\n            return;\n        }\n\n        // 4. Calculate the paste result\n        let caretPositionOnInitialTextAfterPasting;\n        let isInitialValueNegative = AutoNumericHelper.isNegativeStrict(this.getNumericString(), this.settings.negativeSignCharacter);\n        let isPasteNegativeAndInitialValueIsPositive;\n        let result;\n\n        // If the pasted content is negative, then the result will be negative too\n        if (isPasteNegative && !isInitialValueNegative) {\n            isInitialValueNegative = true;\n            isPasteNegativeAndInitialValueIsPositive = true;\n        }\n        else {\n            isPasteNegativeAndInitialValueIsPositive = false;\n        }\n\n        // 1. Generate the unformatted result\n        const leftFormattedPart  = initialFormattedValue.slice(0, selectionStart);\n        const rightFormattedPart = initialFormattedValue.slice(selectionEnd, initialFormattedValue.length);\n\n        if (selectionStart !== selectionEnd) {\n            // a. If there is a selection, remove the selected part, and return the left and right part\n            result = this._preparePastedText(leftFormattedPart + rightFormattedPart);\n        } else {\n            // b. Else if this is only one caret (and therefore no selection), then return the left and right part\n            result = this._preparePastedText(initialFormattedValue);\n        }\n\n        // Add back the negative sign if needed\n        if (isInitialValueNegative) {\n            result = AutoNumericHelper.setRawNegativeSign(result);\n        }\n\n        // Build the unformatted result string\n        caretPositionOnInitialTextAfterPasting = AutoNumericHelper.convertCharacterCountToIndexPosition(AutoNumericHelper.countNumberCharactersOnTheCaretLeftSide(initialFormattedValue, selectionStart, this.settings.decimalCharacter));\n        if (isPasteNegativeAndInitialValueIsPositive) {\n            // If the initial paste is negative and the initial value is not, then I must offset the caret position by one place to the right to take the additional hyphen into account\n            caretPositionOnInitialTextAfterPasting++;\n            //TODO Quid if the negative sign is not on the left (negativePositiveSignPlacement and currencySymbolPlacement)?\n            //TODO Quid if the positive sign is shown?\n        }\n\n        let leftPart  = result.slice(0, caretPositionOnInitialTextAfterPasting);\n        let rightPart = result.slice(caretPositionOnInitialTextAfterPasting, result.length);\n        let leftPartContainedADot = false;\n        if (pastedText === '.') {\n            if (AutoNumericHelper.contains(leftPart, '.')) {\n                // If I remove a dot here, then I need to update the caret position (decrement it by 1) when positioning it\n                // To do so, we keep that info in order to modify the caret position later\n                leftPartContainedADot = true;\n                leftPart              = leftPart.replace('.', '');\n            }\n\n            rightPart = rightPart.replace('.', '');\n        }\n\n        // Manage the case where a negative number is pasted onto another negative number that is entirely selected (cf. issue #593)\n        let negativePasteOnNegativeNumber = false;\n        if (leftPart === '' && rightPart === '-') {\n            leftPart = '-';\n            rightPart = '';\n            // When pasting a negative number on a negative number, we need to offset the caret position one place to the right to take into account the negative sign\n            negativePasteOnNegativeNumber = true;\n        }\n\n        // -- Here, we are good to go to continue on the same basis for each value of the `onInvalidPaste` option\n\n        switch (this.settings.onInvalidPaste) {\n            /* 4a. Truncate paste behavior:\n             * Insert as many numbers as possible on the right hand side of the caret from the pasted text content, until the input reach its range limit.\n             * If there is more characters in the clipboard once a limit is reached, drop the extraneous characters.\n             * Otherwise paste all the numbers from the clipboard.\n             * While doing so, we check if the result is within the minimum and maximum values allowed, and stop as soon as we encounter one of those.\n             *\n             * 4b. Replace paste behavior:\n             * Idem than the 'truncate' paste behavior, except that when a range limit is hit, we try to replace the subsequent initial numbers with the pasted ones, until we hit the range limit a second (and last) time, or we run out of numbers to paste\n             */\n            /* eslint no-case-declarations: 0 */\n            case AutoNumeric.options.onInvalidPaste.truncate:\n            case AutoNumeric.options.onInvalidPaste.replace:\n                // c. Add numbers one by one at the caret position, while testing if the result is valid and within the range of the minimum and maximum value\n                //    Continue until you either run out of numbers to paste, or that you get out of the range limits\n                const minParse = AutoNumericHelper.parseStr(this.settings.minimumValue);\n                const maxParse = AutoNumericHelper.parseStr(this.settings.maximumValue);\n                let lastGoodKnownResult = result; // This is set as the default, in case we do not add even one number\n                let pastedTextIndex = 0;\n                let modifiedLeftPart = leftPart;\n\n                while (pastedTextIndex < pastedText.length) {\n                    // Modify the result with another pasted character\n                    modifiedLeftPart += pastedText[pastedTextIndex];\n                    result = modifiedLeftPart + rightPart;\n\n                    // Check the range limits\n                    if (!this.constructor._checkIfInRange(result, minParse, maxParse)) {\n                        // The result is out of the range limits, stop the loop here\n                        break;\n                    }\n\n                    // Save the last good known result\n                    lastGoodKnownResult = result;\n\n                    // Update the local variables for the next loop\n                    pastedTextIndex++;\n                }\n\n                // Update the last caret position where to insert a new number\n                caretPositionOnInitialTextAfterPasting += pastedTextIndex;\n                if (negativePasteOnNegativeNumber) caretPositionOnInitialTextAfterPasting++;\n\n                //XXX Here we have the result for the `truncate` option\n                if (this.settings.onInvalidPaste === AutoNumeric.options.onInvalidPaste.truncate) {\n                    //TODO If the user as defined a truncate callback and there are still some numbers (that will be dropped), then call this callback with the initial paste as well as the remaining numbers\n                    result = lastGoodKnownResult;\n\n                    if (leftPartContainedADot) {\n                        // If a dot has been removed for the part on the left of the caret, we decrement the caret index position\n                        caretPositionOnInitialTextAfterPasting--;\n                    }\n                    break;\n                }\n                //XXX ...else we need to continue modifying the result for the 'replace' option\n\n                // d. Until there are numbers to paste, replace the initial numbers one by one, and still do the range test.\n                //    Stop when you have no more numbers to paste, or if you are out of the range limits.\n                //    If you do get to the range limits, use the previous known good value within those limits.\n                //    Note: The numbers are replaced one by one, in the integer then decimal part, while ignoring the decimal character\n                //TODO What should happen if the user try to paste a decimal number? Should we override the current initial decimal character in favor of this new one? If we do, then we have to recalculate the vMin/vMax from the start in order to take into account this new decimal character position..\n                let lastGoodKnownResultIndex = caretPositionOnInitialTextAfterPasting;\n                const lastGoodKnownResultSize = lastGoodKnownResult.length;\n\n                while (pastedTextIndex < pastedText.length && lastGoodKnownResultIndex < lastGoodKnownResultSize) {\n                    if (lastGoodKnownResult[lastGoodKnownResultIndex] === '.') {\n                        // We skip the decimal character 'replacement'. That way, we do not change the decimal character position regarding the remaining numbers.\n                        lastGoodKnownResultIndex++;\n                        continue;\n                    }\n\n                    // This replaces one character at a time\n                    result = AutoNumericHelper.replaceCharAt(lastGoodKnownResult, lastGoodKnownResultIndex, pastedText[pastedTextIndex]);\n\n                    // Check the range limits\n                    if (!this.constructor._checkIfInRange(result, minParse, maxParse)) {\n                        // The result is out of the range limits, stop the loop here\n                        break;\n                    }\n\n                    // Save the last good known result\n                    lastGoodKnownResult = result;\n\n                    // Update the local variables for the next loop\n                    pastedTextIndex++;\n                    lastGoodKnownResultIndex++;\n                }\n\n                // Update the last caret position where to insert a new number\n                caretPositionOnInitialTextAfterPasting = lastGoodKnownResultIndex;\n\n                if (leftPartContainedADot) {\n                    // If a dot has been removed for the part on the left of the caret, we decrement the caret index position\n                    caretPositionOnInitialTextAfterPasting--;\n                }\n\n                result = lastGoodKnownResult;\n\n                break;\n            /* 4c. Normal paste behavior:\n             * Insert the pasted number inside the current unformatted text, at the correct caret position or selection\n             */\n            case AutoNumeric.options.onInvalidPaste.error:\n            case AutoNumeric.options.onInvalidPaste.ignore:\n            case AutoNumeric.options.onInvalidPaste.clamp:\n            default:\n                // Generate the unformatted result\n                result = `${leftPart}${pastedText}${rightPart}`;\n\n                // 2. Calculate the caret position in the unformatted value, for later use\n                if (selectionStart === selectionEnd) {\n                    // There is no selection, then the caret position is set after the pasted text\n                    const indexWherePastedTextHasBeenInserted = AutoNumericHelper.convertCharacterCountToIndexPosition(AutoNumericHelper.countNumberCharactersOnTheCaretLeftSide(initialFormattedValue, selectionStart, this.settings.decimalCharacter));\n                    caretPositionOnInitialTextAfterPasting = indexWherePastedTextHasBeenInserted + pastedText.length; // I must not count the characters that have been removed from the pasted text (i.e. '.')\n                } else if (rightPart === '') {\n                    // If the user selected from the caret position to the end of the input (on the far right)\n                    caretPositionOnInitialTextAfterPasting = AutoNumericHelper.convertCharacterCountToIndexPosition(AutoNumericHelper.countNumberCharactersOnTheCaretLeftSide(initialFormattedValue, selectionStart, this.settings.decimalCharacter)) + pastedText.length;\n                    if (negativePasteOnNegativeNumber) caretPositionOnInitialTextAfterPasting++;\n                } else {\n                    // Usual case\n                    const indexSelectionEndInRawValue = AutoNumericHelper.convertCharacterCountToIndexPosition(AutoNumericHelper.countNumberCharactersOnTheCaretLeftSide(initialFormattedValue, selectionEnd, this.settings.decimalCharacter));\n\n                    // Here I must not count the characters that have been removed from the pasted text (i.e. '.'), or the thousand separators in the initial selected text\n                    const selectedText = AutoNumericHelper.getElementValue(eventTarget).slice(selectionStart, selectionEnd);\n                    caretPositionOnInitialTextAfterPasting = indexSelectionEndInRawValue - selectionSize + AutoNumericHelper.countCharInText(this.settings.digitGroupSeparator, selectedText) + pastedText.length;\n                }\n\n                // Modify the caret position for special cases, only if the whole input has not been selected\n                if (isPasteNegativeAndInitialValueIsPositive) {\n                    // If the pasted value has a negative sign ('-'), but the initial value does not, offset the index by one\n                    caretPositionOnInitialTextAfterPasting++;\n                }\n\n                if (leftPartContainedADot) {\n                    // If a dot has been removed for the part on the left of the caret, we decrement the caret index position\n                    caretPositionOnInitialTextAfterPasting--;\n                }\n        }\n\n        // 5. Check if the result is a valid number, if not, drop the paste and do nothing.\n        if (!AutoNumericHelper.isNumber(result) || result === '') {\n            if (this.settings.onInvalidPaste === AutoNumeric.options.onInvalidPaste.error) {\n                AutoNumericHelper.throwError(`The pasted value '${rawPastedText}' would result into an invalid content '${result}'.`); //TODO Should we send a warning instead of throwing an error?\n                //TODO This is not DRY ; refactor with above\n            }\n            return;\n        }\n\n        // 6. If it's a valid number, check if it falls inside the minimum and maximum value. If this fails, modify the value following this procedure :\n        /*\n         * If 'error' (this is the default) :\n         *      - Normal paste behavior.\n         *      - Try to set the new value, if it fails, then throw an error in the console.\n         *      - Do not change the input value, do not change the current selection.\n         * If 'ignore' :\n         *      - Normal paste behavior.\n         *      - Try to set the new value, if it fails, do nothing more.\n         *      - Do not change the input value, do not change the current selection.\n         * If 'clamp' :\n         *      - Normal paste behavior.\n         *      - Try to set the new value, if it fails, set the value to the minimum or maximum limit, whichever is closest to the\n         *        paste result.\n         *      - Change the caret position to be positioned on the left hand side of the decimal character.\n         * If 'truncate' :\n         *      - Truncate paste behavior.\n         *      - Try to set the new value, until it fails (if the result is out of the min and max value limits).\n         *      - Drop the remaining non-pasted numbers, and keep the last known non-failing result.\n         *      - Change the caret position to be positioned after the last pasted character.\n         * If 'replace' :\n         *      - Replace paste behavior.\n         *      - Try to set the new value, until it fails (if the result is out of the min and max value limits).\n         *      - Then try to replace as many numbers as possible with the pasted ones. Once it fails, keep the last known non-failing result.\n         *      - Change the caret position to be positioned after the last pasted character.\n         */\n        let valueHasBeenSet = false;\n        let valueHasBeenClamped = false;\n        try {\n            this.set(result);\n            valueHasBeenSet = true;\n        } catch (error) {\n            let clampedValue;\n            switch (this.settings.onInvalidPaste) {\n                case AutoNumeric.options.onInvalidPaste.clamp:\n                    clampedValue = AutoNumericHelper.clampToRangeLimits(result, this.settings);\n                    try {\n                        this.set(clampedValue);\n                    } catch (error) {\n                        AutoNumericHelper.throwError(`Fatal error: Unable to set the clamped value '${clampedValue}'.`);\n                    }\n\n                    valueHasBeenClamped = true;\n                    valueHasBeenSet = true;\n                    result = clampedValue; // This is used only for setting the caret position later\n                    break;\n                case AutoNumeric.options.onInvalidPaste.error:\n                case AutoNumeric.options.onInvalidPaste.truncate:\n                case AutoNumeric.options.onInvalidPaste.replace:\n                    // Throw an error message\n                    AutoNumericHelper.throwError(`The pasted value '${rawPastedText}' results in a value '${result}' that is outside of the minimum [${this.settings.minimumValue}] and maximum [${this.settings.maximumValue}] value range.`);\n                // Fall through\n                case AutoNumeric.options.onInvalidPaste.ignore:\n                // Do nothing\n                // Fall through\n                default :\n                    return; // ...and nothing else should be changed\n            }\n        }\n\n        // 7. Then lastly, set the caret position at the right logical place\n        const targetValue = AutoNumericHelper.getElementValue(eventTarget);\n        let caretPositionInFormattedNumber;\n        if (valueHasBeenSet) {\n            switch (this.settings.onInvalidPaste) {\n                case AutoNumeric.options.onInvalidPaste.clamp:\n                    if (valueHasBeenClamped) {\n                        if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n                            AutoNumericHelper.setElementSelection(eventTarget, targetValue.length - this.settings.currencySymbol.length); // This puts the caret on the right of the last decimal place\n                        } else {\n                            AutoNumericHelper.setElementSelection(eventTarget, targetValue.length); // ...and this on the far right\n                        }\n\n                        break;\n                    } // else if the value has not been clamped, the default behavior is used...\n                // falls through\n                case AutoNumeric.options.onInvalidPaste.error:\n                case AutoNumeric.options.onInvalidPaste.ignore:\n                case AutoNumeric.options.onInvalidPaste.truncate:\n                case AutoNumeric.options.onInvalidPaste.replace:\n                default :\n                    // Whenever one or multiple characters are pasted, this means we have to manage the potential thousand separators that could be added by the formatting\n                    caretPositionInFormattedNumber = AutoNumericHelper.findCaretPositionInFormattedNumber(result, caretPositionOnInitialTextAfterPasting, targetValue, this.settings.decimalCharacter);\n                    AutoNumericHelper.setElementSelection(eventTarget, caretPositionInFormattedNumber);\n            }\n        }\n\n        // 8. We make sure we send an input event only if the result is different from the initial value before the paste\n        if (valueHasBeenSet && initialFormattedValue !== targetValue) {\n            // On a 'normal' non-autoNumeric input, an `input` event is sent when a paste is done. We mimic that.\n            this._triggerEvent(AutoNumeric.events.native.input, eventTarget);\n            this.lastVal = targetValue;  // update it to avoid deleting an extra char when the pasted content is selected and removed by hitting backspace (see also _onKeyDown)\n        }\n    }\n\n    /**\n     * When focusing out of the input, we check if the value has changed, and if it has, then we send a `change` event (since the native one would have been prevented by `e.preventDefault()` called in the other event listeners).\n     * We also update the info of the focused state in the `this.isFocused` variable.\n     *\n     * @param {Event} e\n     */\n    _onBlur(e) {\n        // Keep track if the element is currently focused\n        this.isFocused = false;\n        // Keep track if the user is currently editing the element\n        this.isEditing = false;\n\n        // Send a `change` event if the raw value has been changed since the last focus or 'enter' validation\n        if (AutoNumericHelper.trimPaddedZerosFromDecimalPlaces(this.rawValue) !== AutoNumericHelper.trimPaddedZerosFromDecimalPlaces(this.rawValueOnFocus)) {\n            this._triggerEvent(AutoNumeric.events.native.change, e.target);\n        }\n\n        this.rawValueOnFocus = void(0); // Reset the tracker\n    }\n\n    /**\n     * Helper function that DRY the similar behaviors of the mousewheel and up/down arrow keys, which increment/decrement the element value, either by a fixed value, or using the 'progressive' heuristic\n     *\n     * @param {WheelEvent|KeyboardEvent} e The `wheel` or keyboard event\n     * @param {boolean} isUp Defines if the event should increment the value\n     * @param {boolean} isDown Defines if the event should decrement the value\n     * @param {string|number} step The step to be applied to the increment/decrement action\n     * @private\n     */\n    _wheelAndUpDownActions(e, isUp, isDown, step) {\n        // 0) First, save the caret position so we can set it back once the value has been changed\n        const selectionStart = e.target.selectionStart || 0;\n        const selectionEnd = e.target.selectionEnd || 0;\n\n        // 1) Get the unformatted value\n        const currentUnformattedValue = this.rawValue;\n\n        let result;\n        if (AutoNumericHelper.isUndefinedOrNullOrEmpty(currentUnformattedValue)) {\n            // If by default the input is empty, start at '0'\n            if (this.settings.minimumValue > 0 || this.settings.maximumValue < 0) {\n                // or if '0' is not between min and max value, 'minimumValue' if the user does a wheelup, 'maximumValue' if the user does a wheeldown\n                if (isUp) {\n                    result = this.settings.minimumValue;\n                } else {\n                    result = this.settings.maximumValue;\n                }\n            } else {\n                result = 0;\n            }\n        } else {\n            result = currentUnformattedValue;\n        }\n\n        result = +result; // Typecast to a number needed for the following addition/subtraction\n\n        // 2) Increment/Decrement the value\n        // But first, choose the increment/decrement method ; fixed or progressive\n        if (AutoNumericHelper.isNumber(step)) {\n            const stepToUse = +step; // Typecast to a number needed for the following addition/subtraction\n            // Fixed method\n            // This is the simplest method, where a fixed offset in added/subtracted from the current value\n            if (isUp) { // Increment\n                result += stepToUse;\n            } else if (isDown) { // Decrement\n                result -= stepToUse;\n            }\n        } else {\n            // Progressive method\n            // For this method, we calculate an offset that is in relation to the size of the current number (using only the integer part size).\n            // The bigger the number, the bigger the offset (usually the number count in the integer part minus 3, except for small numbers where a different behavior is better for the user experience).\n            //TODO Known limitation : The progressive method does not play well with numbers between 0 and 1 where to modify the decimal places the rawValue first has to go from '1' to '0'\n            if (isUp) { // Increment\n                result = AutoNumericHelper.addAndRoundToNearestAuto(result, this.settings.decimalPlacesRawValue);\n            } else if (isDown) { // Decrement\n                result = AutoNumericHelper.subtractAndRoundToNearestAuto(result, this.settings.decimalPlacesRawValue);\n            }\n        }\n\n        // 3) Set the new value so it gets formatted\n        // First clamp the result if needed\n        result = AutoNumericHelper.clampToRangeLimits(result, this.settings);\n        if (result !== +currentUnformattedValue) {\n            // Only 'set' the value if it has changed. For instance 'set' should not happen if the user hits a limit and continue to try to go past it since we clamp the value.\n            this.set(result);\n\n            // Since we changed the input value, we send a native `input` event\n            this._triggerEvent(AutoNumeric.events.native.input, e.target);\n        }\n\n        //XXX Do not prevent if the value is not modified? From a UX point of view, preventing the wheel event when the user use it on top of an autoNumeric element should always be done, even if the value does not change. Perhaps that could affect other scripts relying on this event to be sent though.\n        e.preventDefault(); // We prevent the page to scroll while we increment/decrement the value\n\n        // 4) Finally, we set back the caret position/selection\n        // There is no need to take into account the fact that the number count could be different at the end of the wheel event ; it would be too complex and most of the time unreliable\n        this._setSelection(selectionStart, selectionEnd);\n    }\n\n    /**\n     * Handler for up and down arrow keys\n     * Increment or decrement the element value according to the `upDownStep` option chosen\n     *\n     * @param {KeyboardEvent} e\n     */\n    upDownArrowAction(e) {\n        if (this.formulaMode ||\n            this.settings.readOnly || this.domElement.readOnly || this.domElement.disabled) {\n            return;\n        }\n\n        let isUp = false;\n        let isDown = false;\n        if (this.eventKey === AutoNumericEnum.keyName.UpArrow) {\n            isUp = true;\n        } else if (this.eventKey === AutoNumericEnum.keyName.DownArrow) {\n            isDown = true;\n        } else {\n            AutoNumericHelper.throwError('Something has gone wrong since neither an Up or Down arrow key is detected, but the function was still called!');\n        }\n\n        this._wheelAndUpDownActions(e, isUp, isDown, this.settings.upDownStep);\n    }\n\n    /**\n     * Handler for 'wheel' event\n     *\n     * @param {WheelEvent} e\n     */\n    _onWheel(e) {\n        if (this.formulaMode) {\n            return;\n        }\n\n        if (this.settings.readOnly || this.domElement.readOnly || this.domElement.disabled) {\n            // Do not allow scrolling in a readonly element (fix issue #541)\n            return;\n        }\n\n        if (this.settings.modifyValueOnWheel) {\n            if (this.settings.wheelOn === AutoNumeric.options.wheelOn.focus) {\n                if (this.isFocused) {\n                    if (!e.shiftKey) {\n                        this.wheelAction(e);\n                    }\n                } else if (e.shiftKey) {\n                    this.wheelAction(e);\n                }\n            } else if (this.settings.wheelOn === AutoNumeric.options.wheelOn.hover) {\n                if (!e.shiftKey) {\n                    this.wheelAction(e);\n                } else {\n                    // Note: When not `defaultPrevented`, Shift + mouse wheel is reserved by the browsers for horizontal scrolling.\n                    // Hence, using the Shift key with the `wheelOn` 'hover' option will only scroll the page if we prevent the default behavior\n                    e.preventDefault(); // Do not scroll horizontally\n\n                    // Scroll vertically\n                    window.scrollBy(0, AutoNumericHelper.isNegativeStrict(String(e.deltaY))?-50:50); // `e.deltaY` is usually too small compared to how the page is scrolled. That's why we use a fixed offset.\n                }\n            } else {\n                AutoNumericHelper.throwError('Unknown `wheelOn` option.');\n            }\n        }\n    }\n\n    /**\n     * Increment or decrement the element value according to the `wheelStep` option chosen\n     *\n     * @param {WheelEvent} e The `wheel` event\n     */\n    wheelAction(e) {\n        this.isWheelEvent = true; // Keep the info that we are currently managing a mouse wheel event\n\n        let isUp = false;\n        let isDown = false;\n        let isDeltaYZero = false;\n        if (AutoNumericHelper.isWheelUpEvent(e)) {\n            isUp = true;\n        } else if (AutoNumericHelper.isWheelDownEvent(e)) {\n            isDown = true;\n        } else if (AutoNumericHelper.isWheelEventWithZeroDeltaY(e)) {\n            // Ignore that event (maybe call e.preventDefault() ?), fixes issue #776\n            isDeltaYZero = true;\n        } else {\n            AutoNumericHelper.throwError(`The event is not a 'wheel' event.`);\n        }\n\n        if (!isDeltaYZero) {\n            this._wheelAndUpDownActions(e, isUp, isDown, this.settings.wheelStep);\n        }\n\n        this.isWheelEvent = false; // Set back the mouse wheel indicator to its default\n    }\n\n    /**\n     * Handler for 'drop' event\n     *\n     * @param {DragEvent} e\n     */\n    _onDrop(e) {\n        if (this.formulaMode) { // Dropping while in formula mode shouldn't be possible. This is done 'just in case'\n            return;\n        }\n\n        // Note: by default browsers already prevent the drop on readOnly and disabled elements\n        this.isDropEvent = true;\n        e.preventDefault();\n\n        const droppedText = e.dataTransfer.getData('text/plain');\n        const cleanedValue = this.unformatOther(droppedText);\n        const previousValue = this.rawValue;\n        this.set(cleanedValue);\n        this.isDropEvent = false;\n\n        // Test if a change event must be sent (if the dropped value is different from before)\n        const newValue = this.constructor._toNumericValue(cleanedValue, this.settings);\n        if (!isNaN(Number(newValue))) {\n            if (AutoNumericHelper.trimPaddedZerosFromDecimalPlaces(previousValue) !== AutoNumericHelper.trimPaddedZerosFromDecimalPlaces(newValue)) {\n                this._triggerEvent(AutoNumeric.events.native.change, this.domElement);\n            }\n        }\n    }\n\n    /**\n     * Handler for 'submit' events happening on the parent <form> element.\n     * If `unformatOnSubmit` is set to `true`, the element value is first unformatted before the form is submitted.\n     *\n     * @returns {boolean}\n     */\n    _onFormSubmit() {\n        // Search for all the AutoNumeric children of the form element and call the `_unformatOnSubmit()` function\n        const inputElements = this._getFormAutoNumericChildren(this.parentForm);\n        const aNElements = inputElements.map(aNElement => this.constructor.getAutoNumericElement(aNElement));\n        aNElements.forEach(aNElement => aNElement._unformatOnSubmit());\n\n        return true;\n    }\n\n    /**\n     * Handler for 'reset' events caught on the parent <form> element.\n     * When such event is detected, then every child AutoNumeric elements must format their default value that the browser is forcing upon them.\n     *\n     * @private\n     */\n    _onFormReset() {\n        const inputElements = this._getFormAutoNumericChildren(this.parentForm);\n        const aNElements = inputElements.map(aNElement => this.constructor.getAutoNumericElement(aNElement));\n        // Tell all the AutoNumeric children to format their default value\n        aNElements.forEach(aNElement => {\n            const val = this._getDefaultValue(aNElement.node());\n            // aNElement.set(val); //XXX If I use that line, the format is first correctly done, but the form reset is still not finished and will overwrite the formatting. This is why we need to use the following setTimeout line.\n            setTimeout(() => aNElement.set(val), 0); //XXX This is an ugly hack, but it seems to be the accepted answer to this problem (https://stackoverflow.com/a/8152960/2834898). This is sad. Do note that I use '0ms' here since using `setTimeout` will push that code on the event stack, and as soon as the reset will be finished, this will be run (see https://stackoverflow.com/a/23987283/2834898).\n        });\n    }\n\n    /**\n     * Unformat the element value according to the `unformatOnSubmit` option\n     *\n     * @private\n     */\n    _unformatOnSubmit() {\n        if (this.settings.unformatOnSubmit) {\n            this._setElementValue(this.rawValue);\n        }\n    }\n\n    /**\n     * Listen for the `alt` key keydown event globally, and if the event is caught, unformat the AutoNumeric element that is hovered by the mouse.\n     *\n     * @param {KeyboardEvent} e\n     * @private\n     */\n    _onKeydownGlobal(e) {\n        //TODO Find a way to keep the caret position between the alt keyup/keydown states\n        if (AutoNumericHelper.character(e) === AutoNumericEnum.keyName.Alt) {\n            const hoveredElement = AutoNumericHelper.getHoveredElement();\n            if (AutoNumeric.isManagedByAutoNumeric(hoveredElement)) {\n                const anElement = AutoNumeric.getAutoNumericElement(hoveredElement);\n                if (!anElement.formulaMode && anElement.settings.unformatOnHover) {\n                    this.constructor._unformatAltHovered(anElement);\n                }\n            }\n        }\n    }\n\n    /**\n     * Listen for the `alt` key keyup event globally, and if the event is caught, reformat the AutoNumeric element that is hovered by the mouse.\n     *\n     * @param {KeyboardEvent} e\n     * @private\n     */\n    _onKeyupGlobal(e) {\n        if (AutoNumericHelper.character(e) === AutoNumericEnum.keyName.Alt) {\n            const hoveredElement = AutoNumericHelper.getHoveredElement();\n            if (AutoNumeric.isManagedByAutoNumeric(hoveredElement)) {\n                const anElement = AutoNumeric.getAutoNumericElement(hoveredElement);\n                if (anElement.formulaMode || !anElement.settings.unformatOnHover) {\n                    return;\n                }\n\n                this.constructor._reformatAltHovered(anElement);\n            }\n        }\n    }\n\n    /**\n     * Handler for 'compositionstart' events. \n     * \n     * When using IME (Input Method Editor) to input characters, the browser will fire a 'compositionstart' event when the user starts typing in the IME,\n     * and a 'compositionend' event when the user has finished typing and the characters are committed.\n     * During the composition, the value is not yet formatted, and the user can still change the input.\n     *\n     * @param {CompositionEvent} e\n     * @private\n     */\n    _onCompositionstart(e) { // eslint-disable-line no-unused-vars\n        // prepare internal state for trigger format on compositionend\n        const eventInitDict = { key: AutoNumericEnum.keyName.Space, which: '32', keyCode: '32' };\n        const keydownEvent = new KeyboardEvent('keydown', eventInitDict);\n        e.target.dispatchEvent(keydownEvent);\n\n        this.compositioning = true;\n    }\n\n    /**\n     * Handler for 'compositionend' events.\n     * \n     * @param {CompositionEvent} e\n     * @private\n     */\n    _onCompositionend(e) {\n        this.compositioning = false;\n\n        // Trigger format\n        const eventInitDict = { key: AutoNumericEnum.keyName.Space, which: '32', keyCode: '32' };\n        const keypressEvent = new KeyboardEvent('keypress', eventInitDict);\n        e.target.dispatchEvent(keypressEvent);\n        const keyupEvent = new KeyboardEvent('keyup', eventInitDict);\n        e.target.dispatchEvent(keyupEvent);\n    }\n\n    /**\n     * Return `true` if the DOM element is supported by autoNumeric.\n     * A supported element is an element whitelisted in the `allowedTagList`.\n     *\n     * @returns {boolean}\n     * @private\n     */\n    _isElementTagSupported() {\n        if (!AutoNumericHelper.isElement(this.domElement)) {\n            AutoNumericHelper.throwError(`The DOM element is not valid, ${this.domElement} given.`);\n        }\n\n        return AutoNumericHelper.isInArray(this.domElement.tagName.toLowerCase(), this.allowedTagList);\n    }\n\n    /**\n     * Return `true` in the DOM element is an <input>.\n     *\n     * @returns {boolean}\n     * @private\n     */\n    _isInputElement() {\n        return this.domElement.tagName.toLowerCase() === 'input';\n    }\n\n    /**\n     * Return `true` if the input type is supported by AutoNumeric\n     *\n     * @returns {boolean}\n     * @throws\n     */\n    _isInputTypeSupported() {\n        return (this.domElement.type === 'text' ||\n                this.domElement.type === 'hidden' ||\n                this.domElement.type === 'tel' ||\n                AutoNumericHelper.isUndefinedOrNullOrEmpty(this.domElement.type));\n    }\n\n    /**\n     * Check if the DOM element is supported by autoNumeric.\n     * A supported element is either an <input> element with the correct 'type' attribute, or a tag whitelisted in the `allowedTagList` array.\n     * If the check fails, this method throws.\n     * This function also sets the info `this.isInputElement` which keep tracks if the DOM element is an <input> or not, and the `this.isContentEditable` if the element has the `contenteditable` attribute set to `true` initially.\n     *\n     * @throws\n     * @private\n     */\n    _checkElement() {\n        const currentElementTag = this.domElement.tagName.toLowerCase();\n\n        if (!this._isElementTagSupported()) {\n            AutoNumericHelper.throwError(`The <${currentElementTag}> tag is not supported by autoNumeric`);\n        }\n\n        if (this._isInputElement()) {\n            if (!this._isInputTypeSupported()) {\n                AutoNumericHelper.throwError(`The input type \"${this.domElement.type}\" is not supported by autoNumeric`);\n            }\n\n            this.isInputElement = true;\n        } else {\n            this.isInputElement = false;\n            this.isContentEditable = this._isContentEditable(this.domElement);\n        }\n    }\n\n    /**\n     * Returns `true` if the given DOM element is a contenteditable one (set to `true`)\n     *\n     * @param {HTMLElement} domElement\n     * @returns {boolean}\n     */\n    _isContentEditable(domElement) {\n        return domElement.hasAttribute('contenteditable') && domElement.getAttribute('contenteditable') === 'true';\n    }\n\n    /**\n     * Formats the default value on page load.\n     * This is called only if the `formatOnPageLoad` option is set to `true`.\n     *\n     * @param {number|string|null} forcedInitialValue The value that should be used for initialization, in place on the eventual html one\n     */\n    _formatDefaultValueOnPageLoad(forcedInitialValue = null) {\n        let setValue = true;\n        let currentValue;\n        if (!AutoNumericHelper.isNull(forcedInitialValue)) {\n            currentValue = forcedInitialValue;\n        } else {\n            // Make sure the initial value does not have any superfluous whitespaces around it (Fix issue #479)\n            currentValue = AutoNumericHelper.getElementValue(this.domElement).trim();\n            // Correct the DOM attribute in case some whitespaces were present\n            this.domElement.setAttribute('value', currentValue);\n        }\n\n        if (this.isInputElement || this.isContentEditable) {\n            /*\n             * If the input value has been set by the dev, but not directly as an attribute in the html, then it takes\n             * precedence and should get formatted during the initialization (if this input value is a valid number and that the\n             * developer wants it formatted on init (cf. the `settings.formatOnPageLoad` option)).\n             * Note; this is true whatever the developer has set for `data-default-value-override` in the html (asp.net users).\n             *\n             * In other words : if `defaultValueOverride` is not null, it means the developer is trying to prevent postback problems.\n             * But if `input.value` is set to a number, and the html `value` attribute is not set, then it means the dev has\n             * changed the input value, and then it means we should not overwrite his own decision to do so.\n             * Hence, if `defaultValueOverride` is not null, but `input.value` is a number and `this.domElement.hasAttribute('value')`\n             * is false, we should ignore `defaultValueOverride` altogether.\n             */\n            const unLocalizedCurrentValue = this.constructor._toNumericValue(currentValue, this.settings); // This allows to use a localized value on startup\n            if (!this.domElement.hasAttribute('value') || this.domElement.getAttribute('value') === '') {\n                // Check if the `value` is valid or not\n                if (!isNaN(Number(unLocalizedCurrentValue)) && Infinity !== unLocalizedCurrentValue) {\n                    this.set(unLocalizedCurrentValue);\n                    setValue = false;\n                } else {\n                    // If not, inform the developer that nothing usable has been provided\n                    AutoNumericHelper.throwError(`The value [${currentValue}] used in the input is not a valid value autoNumeric can work with.`);\n                }\n            } else {\n                /* Checks for :\n                 * - page reload from back button, and\n                 * - ASP.net form post back\n                 *      The following HTML data attribute is REQUIRED (data-an-default=\"same value as the value attribute\")\n                 *      example: <asp:TextBox runat=\"server\" id=\"someID\" text=\"1234.56\" data-an-default=\"1234.56\">\n                 */\n                if ((this.settings.defaultValueOverride !== null && this.settings.defaultValueOverride.toString() !== currentValue) ||\n                    (this.settings.defaultValueOverride === null && currentValue !== '' && currentValue !== this.domElement.getAttribute('value')) ||\n                    (currentValue !== '' && this.domElement.getAttribute('type') === 'hidden' && !AutoNumericHelper.isNumber(unLocalizedCurrentValue))) {\n                    if (this.settings.saveValueToSessionStorage && (this.settings.decimalPlacesShownOnFocus !== null || this.settings.divisorWhenUnfocused)) {\n                        this._setRawValue(this._getValueFromPersistentStorage());\n                    }\n\n                    // If the decimalPlacesShownOnFocus value should NOT be saved in sessionStorage\n                    if (!this.settings.saveValueToSessionStorage) {\n                        const toStrip = this.constructor._removeBrackets(currentValue, this.settings);\n                        if ((this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.suffix ||\n                            (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.prefix && this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix)) &&\n                            this.settings.negativeSignCharacter !== '' &&\n                            AutoNumericHelper.isNegative(currentValue, this.settings.negativeSignCharacter)) {\n                            this._setRawValue(`-${this.constructor._stripAllNonNumberCharacters(toStrip, this.settings, true, this.isFocused)}`);\n                        } else {\n                            this._setRawValue(this.constructor._stripAllNonNumberCharacters(toStrip, this.settings, true, this.isFocused));\n                        }\n                    }\n\n                    setValue = false;\n                }\n            }\n\n            if (currentValue === '') {\n                switch (this.settings.emptyInputBehavior) {\n                    case AutoNumeric.options.emptyInputBehavior.focus:\n                    case AutoNumeric.options.emptyInputBehavior.press:\n                        break;\n                    case AutoNumeric.options.emptyInputBehavior.always:\n                        this._setElementValue(this.settings.currencySymbol);\n                        break;\n                    case AutoNumeric.options.emptyInputBehavior.min:\n                        this.set(this.settings.minimumValue);\n                        break;\n                    case AutoNumeric.options.emptyInputBehavior.max:\n                        this.set(this.settings.maximumValue);\n                        break;\n                    case AutoNumeric.options.emptyInputBehavior.zero:\n                        this.set('0');\n                        break;\n                    // It's possible to set the `null` value as the initial value\n                    case AutoNumeric.options.emptyInputBehavior.null:\n                        this.set(null);\n                        break;\n                    // When `emptyInputBehavior` is a number or a string representing a number\n                    default:\n                        this.set(this.settings.emptyInputBehavior);\n                }\n            } else if (setValue && currentValue === this.domElement.getAttribute('value')) {\n                this.set(currentValue);\n            }\n        } else if (this.settings.defaultValueOverride === null ||\n            this.settings.defaultValueOverride === currentValue) {\n            this.set(currentValue);\n        }\n    }\n\n    /**\n     * Enhance the user experience by modifying the default `negativePositiveSignPlacement` option depending on `currencySymbol` and `currencySymbolPlacement`.\n     *\n     * If the user has not set the placement of the negative sign (`negativePositiveSignPlacement`), but has set a currency symbol (`currencySymbol`),\n     * then we modify the default value of `negativePositiveSignPlacement` in order to keep the resulting output logical by default :\n     * - \"$-1,234.56\" instead of \"-$1,234.56\" ({currencySymbol: \"$\", negativePositiveSignPlacement: \"r\"})\n     * - \"-1,234.56$\" instead of \"1,234.56-$\" ({currencySymbol: \"$\", currencySymbolPlacement: \"s\", negativePositiveSignPlacement: \"p\"})\n     *\n     * @param {object} settings\n     */\n    static _correctNegativePositiveSignPlacementOption(settings) {\n        //XXX Note; this function is static since we need to pass a `settings` object when calling the static `AutoNumeric.format()` method\n        // If negativePositiveSignPlacement is already set, we do not overwrite it\n        if (!AutoNumericHelper.isNull(settings.negativePositiveSignPlacement)) {\n            return;\n        }\n\n        if (!AutoNumericHelper.isUndefined(settings) &&\n            AutoNumericHelper.isUndefinedOrNullOrEmpty(settings.negativePositiveSignPlacement) &&\n            !AutoNumericHelper.isUndefinedOrNullOrEmpty(settings.currencySymbol)) {\n            switch (settings.currencySymbolPlacement) {\n                case AutoNumeric.options.currencySymbolPlacement.suffix:\n                    settings.negativePositiveSignPlacement = AutoNumeric.options.negativePositiveSignPlacement.prefix; // Default -1,234.56 €\n                    break;\n                case AutoNumeric.options.currencySymbolPlacement.prefix:\n                    settings.negativePositiveSignPlacement = AutoNumeric.options.negativePositiveSignPlacement.left; // Default -$1,234.56\n                    break;\n                default :\n                //\n            }\n        } else {\n            // Sets the default value if `negativePositiveSignPlacement` is `null`\n            settings.negativePositiveSignPlacement = AutoNumeric.options.negativePositiveSignPlacement.left;\n        }\n    }\n\n    /**\n     * Correct the `caretPositionOnFocus` and `selectOnFocus` options, since setting both leads to a conflict.\n     * This method directly modifies the `options` object passed as a parameter, then returns it.\n     * It returns `null` if the given option is `null`.\n     *\n     * @param {object} options The options passed as an argument by the user\n     * @returns {object|null}\n     * @private\n     */\n    static _correctCaretPositionOnFocusAndSelectOnFocusOptions(options) {\n        if (AutoNumericHelper.isNull(options)) {\n            return null;\n        }\n\n        // If the user has set the `caretPositionOnFocus` option, do not set `selectOnFocus` to `true` by default\n        if (!AutoNumericHelper.isUndefinedOrNullOrEmpty(options.caretPositionOnFocus) && AutoNumericHelper.isUndefinedOrNullOrEmpty(options.selectOnFocus)) {\n            options.selectOnFocus = AutoNumeric.options.selectOnFocus.doNotSelect;\n        }\n\n        // If the user has set the `selectOnFocus` option to `true`, set `caretPositionOnFocus` to `doNoForceCaretPosition`\n        if (AutoNumericHelper.isUndefinedOrNullOrEmpty(options.caretPositionOnFocus) && !AutoNumericHelper.isUndefinedOrNullOrEmpty(options.selectOnFocus) && options.selectOnFocus === AutoNumeric.options.selectOnFocus.select) {\n            options.caretPositionOnFocus = AutoNumeric.options.caretPositionOnFocus.doNoForceCaretPosition;\n        }\n\n        return options;\n    }\n\n    /**\n     * Calculate the number de decimal places to be used by the AutoNumeric object, for each of its state, and for its formatted and raw value.\n     * By default, the `rawValue` precision is the same as the formatted value one.\n     *\n     * This method is called during the AutoNumeric object initialization. This assumes some internal variable state.\n     *\n     * This method set the following options accordingly to their own value and the mandatory `decimalPlaces` option:\n     * - decimalPlacesRawValue     (nullable)\n     * - decimalPlacesShownOnBlur  (nullable)\n     * - decimalPlacesShownOnFocus (nullable)\n     *\n     * Note: the `decimalPlaces` option is only used here and only serve to define those three previous options value.\n     * AutoNumeric will then *only* use `decimalPlacesRawValue`, `decimalPlacesShownOnBlur` and `decimalPlacesShownOnFocus` from there.\n     *\n     * This method directly modifies the `settings` object passed as a parameter.\n     *\n     * @param {object} settings This is an object with the new settings to use.\n     * @private\n     */\n    static _calculateDecimalPlacesOnInit(settings) {\n        // Check the `decimalPlaces*` options and output any warnings as needed, before modifying those options\n        this._validateDecimalPlacesRawValue(settings);\n\n        // Initialization phase\n        //XXX This assumes at this stage, `settings.decimalPlaces` as been set from the default options\n\n        // Overwrite the `decimalPlaces*` values if the `decimalPlaces*` options are not set in the `settings`\n        // Sets `decimalPlacesShownOnBlur` (previously known as `scaleDecimalPlaces`)\n        if (settings.decimalPlacesShownOnFocus === AutoNumeric.options.decimalPlacesShownOnFocus.useDefault)  {\n            settings.decimalPlacesShownOnFocus = settings.decimalPlaces;\n        }\n\n        if (settings.decimalPlacesShownOnBlur === AutoNumeric.options.decimalPlacesShownOnBlur.useDefault)  {\n            settings.decimalPlacesShownOnBlur = settings.decimalPlaces;\n        }\n\n        if (settings.decimalPlacesRawValue === AutoNumeric.options.decimalPlacesRawValue.useDefault)  {\n            settings.decimalPlacesRawValue = settings.decimalPlaces;\n        }\n\n        // Add the additional decimal places to the raw value\n        let additionalDecimalPlacesRawValue = 0;\n        if (settings.rawValueDivisor && settings.rawValueDivisor !== AutoNumeric.options.rawValueDivisor.none) {\n            additionalDecimalPlacesRawValue = String(settings.rawValueDivisor).length - 1; // i.e. Dividing by '100' adds 2 decimal places to the needed precision\n            if (additionalDecimalPlacesRawValue < 0) {\n                additionalDecimalPlacesRawValue = 0;\n            }\n        }\n\n        settings.decimalPlacesRawValue = Math.max(\n            Math.max(settings.decimalPlacesShownOnBlur, settings.decimalPlacesShownOnFocus) + additionalDecimalPlacesRawValue,\n            Number(settings.originalDecimalPlacesRawValue) + additionalDecimalPlacesRawValue,\n        );\n    }\n\n    /**\n     * Recalculate the number de decimal places to be used by the AutoNumeric object, for each of its state, and for its formatted and raw value.\n     * By default, the `rawValue` precision is the same as the formatted value one.\n     *\n     * This method is close to the one called during initialization, `_calculateDecimalPlacesOnInit()`, but with slight difference so that the `decimalPlaces*` options are correctly updated as needed.\n     *\n     * This methods set the following options accordingly to their own value and the mandatory `decimalPlaces` option:\n     * - decimalPlacesRawValue     (nullable)\n     * - decimalPlacesShownOnBlur  (nullable)\n     * - decimalPlacesShownOnFocus (nullable)\n     *\n     * Note: the `decimalPlaces` option is only used here and only serve to define those three previous options value.\n     * AutoNumeric will then *only* use `decimalPlacesRawValue`, `decimalPlacesShownOnBlur` and `decimalPlacesShownOnFocus` from there.\n     *\n     * This methods directly modifies the `settings` object passed as a parameter.\n     *\n     * @param {object} settings This is an object with the new settings to use.\n     * @param {object} currentSettings This is the current settings (`this.settings`) used by the element.\n     * @private\n     */\n    static _calculateDecimalPlacesOnUpdate(settings, currentSettings = null) {\n        // Check the `decimalPlaces*` options and output any warnings as needed, before modifying those options\n        this._validateDecimalPlacesRawValue(settings);\n\n        // Update phase\n        if (AutoNumericHelper.isNull(currentSettings)) {\n            AutoNumericHelper.throwError(`When updating the settings, the previous ones should be passed as an argument.`);\n        }\n\n        const decimalPlacesInOptions = 'decimalPlaces' in settings;\n        if (!(decimalPlacesInOptions ||\n                'decimalPlacesRawValue' in settings ||\n                'decimalPlacesShownOnFocus' in settings ||\n                'decimalPlacesShownOnBlur' in settings ||\n                'rawValueDivisor' in settings)) {\n            // Do Nothing if no decimal places-related options are modified\n            return;\n        }\n\n        // Overwrite the `decimalPlaces*` values if the `decimalPlaces*` options are not set in the `settings`\n        if (decimalPlacesInOptions) {\n            if (!('decimalPlacesShownOnFocus' in settings) ||\n                settings.decimalPlacesShownOnFocus === AutoNumeric.options.decimalPlacesShownOnFocus.useDefault)  {\n                settings.decimalPlacesShownOnFocus = settings.decimalPlaces;\n            }\n\n            if (!('decimalPlacesShownOnBlur' in settings) ||\n                settings.decimalPlacesShownOnBlur === AutoNumeric.options.decimalPlacesShownOnBlur.useDefault)  {\n                settings.decimalPlacesShownOnBlur = settings.decimalPlaces;\n            }\n\n            if (!('decimalPlacesRawValue' in settings) ||\n                settings.decimalPlacesRawValue === AutoNumeric.options.decimalPlacesRawValue.useDefault)  {\n                settings.decimalPlacesRawValue = settings.decimalPlaces;\n            }\n        } else {\n            if (AutoNumericHelper.isUndefined(settings.decimalPlacesShownOnFocus)) {\n                settings.decimalPlacesShownOnFocus = currentSettings.decimalPlacesShownOnFocus;\n            }\n\n            if (AutoNumericHelper.isUndefined(settings.decimalPlacesShownOnBlur)) {\n                settings.decimalPlacesShownOnBlur = currentSettings.decimalPlacesShownOnBlur;\n            }\n        }\n\n        // Add the additional decimal places to the raw value\n        let additionalDecimalPlacesRawValue = 0;\n        if (settings.rawValueDivisor && settings.rawValueDivisor !== AutoNumeric.options.rawValueDivisor.none) {\n            additionalDecimalPlacesRawValue = String(settings.rawValueDivisor).length - 1; // i.e. Dividing by '100' adds 2 decimal places to the needed precision\n            if (additionalDecimalPlacesRawValue < 0) {\n                additionalDecimalPlacesRawValue = 0;\n            }\n        }\n\n        if (!settings.decimalPlaces && !settings.decimalPlacesRawValue) {\n            settings.decimalPlacesRawValue = Math.max(\n                Math.max(settings.decimalPlacesShownOnBlur, settings.decimalPlacesShownOnFocus) + additionalDecimalPlacesRawValue,\n                Number(currentSettings.originalDecimalPlacesRawValue) + additionalDecimalPlacesRawValue,\n            );\n        } else {\n            settings.decimalPlacesRawValue = Math.max(\n                Math.max(settings.decimalPlacesShownOnBlur, settings.decimalPlacesShownOnFocus) + additionalDecimalPlacesRawValue,\n                Number(settings.decimalPlacesRawValue) + additionalDecimalPlacesRawValue,\n            );\n        }\n    }\n\n    /**\n     * Analyze and save the minimumValue and maximumValue integer size for later uses\n     * @private\n     */\n    _calculateVMinAndVMaxIntegerSizes() {\n        let [maximumValueIntegerPart] = this.settings.maximumValue.toString().split('.');\n        let [minimumValueIntegerPart] = (!this.settings.minimumValue && this.settings.minimumValue !== 0)?[]:this.settings.minimumValue.toString().split('.');\n        maximumValueIntegerPart = maximumValueIntegerPart.replace(this.settings.negativeSignCharacter, '');\n        minimumValueIntegerPart = minimumValueIntegerPart.replace(this.settings.negativeSignCharacter, '');\n\n        this.settings.mIntPos = Math.max(maximumValueIntegerPart.length, 1);\n        this.settings.mIntNeg = Math.max(minimumValueIntegerPart.length, 1);\n    }\n\n    /**\n     * Calculate once what are the `valuesToStrings` option keys.\n     * @private\n     */\n    _calculateValuesToStringsKeys() {\n        if (this.settings.valuesToStrings) {\n            this.valuesToStringsKeys = Object.keys(this.settings.valuesToStrings);\n        } else {\n            this.valuesToStringsKeys = [];\n        }\n    }\n\n    /**\n     * Caches regular expressions for _stripAllNonNumberCharactersExceptCustomDecimalChar\n     *\n     * @param {object} settings\n     * @param {object} regex\n     */\n    static _cachesUsualRegularExpressions(settings, regex) {\n        // Test if there is a negative character in the string\n        let negativeSignReg;\n        if (settings.negativeSignCharacter !== AutoNumeric.options.negativeSignCharacter.hyphen) {\n            negativeSignReg = `([-\\\\${settings.negativeSignCharacter}]?)`;\n        } else {\n            negativeSignReg = '(-?)';\n        }\n\n        regex.aNegRegAutoStrip = negativeSignReg;\n        settings.allowedAutoStrip = new RegExp(`[^-0123456789\\\\${settings.decimalCharacter}]`, 'g');\n        settings.numRegAutoStrip = new RegExp(`${negativeSignReg}(?:\\\\${settings.decimalCharacter}?([0-9]+\\\\${settings.decimalCharacter}[0-9]+)|([0-9]*(?:\\\\${settings.decimalCharacter}[0-9]*)?))`);\n\n        // Using this regex version `^${regex.aNegRegAutoStrip}0*(\\\\d|$)` entirely clear the input on blur\n        settings.stripReg = new RegExp(`^${regex.aNegRegAutoStrip}0*([0-9])`);\n\n        // All the characters that are accepted during the formula mode\n        settings.formulaChars = new RegExp(`[0-9${settings.decimalCharacter}+\\\\-*/() ]`);\n    }\n\n    /**\n     * Modify the user settings to make them 'exploitable' later.\n     */\n    _transformOptionsValuesToDefaultTypes() {\n        for (const key in this.settings) {\n            if (Object.prototype.hasOwnProperty.call(this.settings, key)) {\n                const value = this.settings[key];\n\n                // Convert the strings 'true' and 'false' to booleans\n                if (value === 'true' || value === 'false') {\n                    this.settings[key] = value === 'true';\n                }\n\n                // Convert numbers in options to strings\n                //TODO Only transform the values of type 'Number' to 'String' if it's a currency number (so that we can have big numbers). Do not convert other numbers (i.e. `historySize`)\n                if (typeof value === 'number') {\n                    this.settings[key] = value.toString();\n                }\n            }\n        }\n    }\n\n    /**\n     * Convert the old settings options name to new ones.\n     *\n     * @param {object} options\n     */\n    static _convertOldOptionsToNewOnes(options) {\n        //TODO Delete this function once the old options are not used anymore\n        const oldOptionsConverter = {\n            // Old option names, with their corresponding new names\n            aSep                              : 'digitGroupSeparator',\n            nSep                              : 'showOnlyNumbersOnFocus',\n            dGroup                            : 'digitalGroupSpacing',\n            aDec                              : 'decimalCharacter',\n            altDec                            : 'decimalCharacterAlternative',\n            aSign                             : 'currencySymbol',\n            pSign                             : 'currencySymbolPlacement',\n            pNeg                              : 'negativePositiveSignPlacement',\n            aSuffix                           : 'suffixText',\n            oLimits                           : 'overrideMinMaxLimits',\n            vMax                              : 'maximumValue',\n            vMin                              : 'minimumValue',\n            mDec                              : 'decimalPlacesOverride',\n            eDec                              : 'decimalPlacesShownOnFocus',\n            scaleDecimal                      : 'decimalPlacesShownOnBlur',\n            aStor                             : 'saveValueToSessionStorage',\n            mRound                            : 'roundingMethod',\n            aPad                              : 'allowDecimalPadding',\n            nBracket                          : 'negativeBracketsTypeOnBlur',\n            wEmpty                            : 'emptyInputBehavior',\n            lZero                             : 'leadingZero',\n            aForm                             : 'formatOnPageLoad',\n            sNumber                           : 'selectNumberOnly',\n            anDefault                         : 'defaultValueOverride',\n            unSetOnSubmit                     : 'unformatOnSubmit',\n            outputType                        : 'outputFormat',\n            debug                             : 'showWarnings',\n\n            // Current options :\n            allowDecimalPadding               : true,\n            alwaysAllowDecimalCharacter       : true,\n            caretPositionOnFocus              : true,\n            createLocalList                   : true,\n            currencySymbol                    : true,\n            currencySymbolPlacement           : true,\n            decimalCharacter                  : true,\n            decimalCharacterAlternative       : true,\n            decimalPlaces                     : true,\n            decimalPlacesRawValue             : true,\n            decimalPlacesShownOnBlur          : true,\n            decimalPlacesShownOnFocus         : true,\n            defaultValueOverride              : true,\n            digitalGroupSpacing               : true,\n            digitGroupSeparator               : true,\n            divisorWhenUnfocused              : true,\n            emptyInputBehavior                : true,\n            eventBubbles                      : true,\n            eventIsCancelable                 : true,\n            failOnUnknownOption               : true,\n            formatOnPageLoad                  : true,\n            formulaMode                       : true,\n            historySize                       : true,\n            isCancellable                     : true,\n            leadingZero                       : true,\n            maximumValue                      : true,\n            minimumValue                      : true,\n            modifyValueOnUpDownArrow          : true,\n            modifyValueOnWheel                : true,\n            negativeBracketsTypeOnBlur        : true,\n            negativePositiveSignPlacement     : true,\n            negativeSignCharacter             : true,\n            negativePositiveSignBehavior      : true,\n            noEventListeners                  : true,\n            onInvalidPaste                    : true,\n            outputFormat                      : true,\n            overrideMinMaxLimits              : true,\n            positiveSignCharacter             : true,\n            rawValueDivisor                   : true,\n            readOnly                          : true,\n            roundingMethod                    : true,\n            saveValueToSessionStorage         : true,\n            selectNumberOnly                  : true,\n            selectOnFocus                     : true,\n            serializeSpaces                   : true,\n            showOnlyNumbersOnFocus            : true,\n            showPositiveSign                  : true,\n            showWarnings                      : true,\n            styleRules                        : true,\n            suffixText                        : true,\n            symbolWhenUnfocused               : true,\n            upDownStep                        : true,\n            unformatOnHover                   : true,\n            unformatOnSubmit                  : true,\n            valuesToStrings                   : true,\n            watchExternalChanges              : true,\n            wheelOn                           : true,\n            wheelStep                         : true,\n\n            // Additional information that are added to the `settings` object :\n            //TODO Find a way to exclude those internal data from the settings object (ideally by using another object, or better yet, class attributes) -->\n            allowedAutoStrip                  : true,\n            formulaChars                      : true,\n            isNegativeSignAllowed             : true,\n            isPositiveSignAllowed             : true,\n            mIntNeg                           : true,\n            mIntPos                           : true,\n            numRegAutoStrip                   : true,\n            originalDecimalPlaces             : true,\n            originalDecimalPlacesRawValue     : true,\n            stripReg                          : true,\n        };\n\n        for (const option in options) {\n            if (Object.prototype.hasOwnProperty.call(options, option)) {\n                if (oldOptionsConverter[option] === true) {\n                    // If the option is a 'new' option, we continue looping\n                    continue;\n                }\n\n                if (Object.prototype.hasOwnProperty.call(oldOptionsConverter, option)) {\n                    // Else we have an 'old' option name\n                    AutoNumericHelper.warning(`You are using the deprecated option name '${option}'. Please use '${oldOptionsConverter[option]}' instead from now on. The old option name will be dropped very soon™.`, true);\n\n                    // Then we modify the initial option object to use the new options instead of the old ones\n                    options[oldOptionsConverter[option]] = options[option];\n                    delete options[option];\n                } else if (options.failOnUnknownOption) {\n                    // ...or the option name is unknown. This means there is a problem with the options object, therefore we throw an error.\n                    AutoNumericHelper.throwError(`Option name '${option}' is unknown. Please fix the options passed to autoNumeric`);\n                }\n            }\n        }\n\n        if ('mDec' in options) {\n            AutoNumericHelper.warning('The old `mDec` option has been deprecated in favor of more accurate options ; `decimalPlaces`, `decimalPlacesRawValue`, `decimalPlacesShownOnFocus` and `decimalPlacesShownOnBlur`.', true);\n        }\n    }\n\n    /**\n     * Analyse the settings/options passed by the user, validate and clean them, then set them into `this.settings`.\n     * Note: This sets the settings to `null` if somehow the settings objet is undefined or empty\n     *       If only `decimalPlaces` is defined in the option, overwrite the other decimalPlaces* options, otherwise, use those options\n     *\n     * @param {object} options\n     * @param {boolean} update - If set to `true`, then the settings already exists and this function only updates them instead of recreating them from scratch\n     * @throws\n     */\n    _setSettings(options, update = false) {\n        // If the user used old options, we convert them to new ones\n        if (update || !AutoNumericHelper.isNull(options)) {\n            this.constructor._convertOldOptionsToNewOnes(options);\n        }\n\n        if (update) {\n            // The settings are updated\n            // Update the original data, if it has changed\n            const decimalPlacesRawValueInOptions = 'decimalPlacesRawValue' in options;\n            if (decimalPlacesRawValueInOptions) {\n                this.settings.originalDecimalPlacesRawValue = options.decimalPlacesRawValue;\n            }\n\n            const decimalPlacesInOptions = 'decimalPlaces' in options;\n            if (decimalPlacesInOptions) {\n                this.settings.originalDecimalPlaces = options.decimalPlaces;\n            }\n\n            // Then update all the `decimalPlaces*` options\n            this.constructor._calculateDecimalPlacesOnUpdate(options, this.settings);\n\n            // Finally generate the updated settings object to use\n            this._mergeSettings(options); //TODO Check that the `styleRules` option is correctly cloned (due to depth cloning limitation)\n        } else {\n            // The settings are generated for the first time\n            this.settings = {};\n            // If we couldn't grab any settings, create them from the default ones and combine them with the options passed as a parameter as well as with the HTML5 `data-*` info (via `this.domElement.dataset`), if any.\n            this._mergeSettings(this.constructor.getDefaultConfig(), this.domElement.dataset, options, { rawValue : this.defaultRawValue });\n            this.caretFix = false;\n            this.throwInput = true; // Throw input event\n            this.allowedTagList = AutoNumericEnum.allowedTagList;\n            this.runOnce = false;\n            this.hoveredWithAlt = false; // Keep tracks if the current AutoNumeric element is hovered by the mouse cursor while `Alt` is pressed\n        }\n\n        // Modify the user settings to make them 'exploitable'\n        this._transformOptionsValuesToDefaultTypes();\n\n        // Immediately run the callbacks that could update the settings object\n        this._runCallbacksFoundInTheSettingsObject();\n\n        // Improve the `negativePositiveSignPlacement` option if needed\n        this.constructor._correctNegativePositiveSignPlacementOption(this.settings);\n\n        // Set the `caretPositionOnFocus` and `selectOnFocus` options so that they do not conflict, if one of those have been set manually by the user.\n        // If order to check that, we take a look at the original options the user passed as an argument, not `this.settings` that have been merged with the default settings. //TODO Check the validity of that comment\n        this.constructor._correctCaretPositionOnFocusAndSelectOnFocusOptions(this.settings);\n\n        // Define if the negative or positive signs are allowed\n        this.constructor._setNegativePositiveSignPermissions(this.settings);\n\n        // Calculate the number of decimal places (during the element initialization)\n        if (!update) {\n            // Make sure the `originalDecimalPlaces` info is set\n            if (AutoNumericHelper.isNull(options) || !options.decimalPlaces) {\n                this.settings.originalDecimalPlaces = null;\n            } else {\n                this.settings.originalDecimalPlaces = options.decimalPlaces;\n            }\n\n            // Save the `originalDecimalPlacesRawValue` info\n            this.settings.originalDecimalPlacesRawValue = this.settings.decimalPlacesRawValue;\n\n            // Then update all the `decimalPlaces*` options\n            this.constructor._calculateDecimalPlacesOnInit(this.settings);\n        }\n\n        // Additional changes to the settings object\n        this._calculateVMinAndVMaxIntegerSizes();\n        this._setTrailingNegativeSignInfo();\n        this.regex = {}; // Create the object that will store the regular expressions\n        this.constructor._cachesUsualRegularExpressions(this.settings, this.regex);\n        this.constructor._setBrackets(this.settings);\n        this._calculateValuesToStringsKeys();\n\n        // Validate the settings. Both tests throws if necessary.\n        if (AutoNumericHelper.isEmptyObj(this.settings)) {\n            AutoNumericHelper.throwError('Unable to set the settings, those are invalid ; an empty object was given.');\n        }\n\n        this.constructor.validate(this.settings, false, options);\n\n        // Original settings saved for use when decimalPlacesShownOnFocus, divisorWhenUnfocused & showOnlyNumbersOnFocus options are being used\n        this._keepAnOriginalSettingsCopy();\n    }\n\n    /**\n     * Define if the negative or positive signs are allowed, and update the given settings object directly.\n     *\n     * @param {object} settings\n     * @private\n     */\n    static _setNegativePositiveSignPermissions(settings) {\n        settings.isNegativeSignAllowed = settings.minimumValue < 0;\n        settings.isPositiveSignAllowed = settings.maximumValue >= 0;\n    }\n\n    /**\n     * Convert the `value` parameter that can either be :\n     * - a real number,\n     * - a number represented in the scientific notation (i.e. -123.4567e-6)\n     * - a string representing a real number, or\n     * - a string representing a localized number (with specific group separators and decimal character),\n     * ...to a string representing a real 'javascript' number (i.e. '1234' or '1234.567').\n     *\n     * This function returns `NaN` if such conversion fails.\n     *\n     * @param {int|float|string} value\n     * @param {object} settings\n     * @returns {string|NaN}\n     */\n    static _toNumericValue(value, settings) {\n        //XXX Note; this function is static since we need to pass a `settings` object when calling the static `AutoNumeric.format()` method\n        let result;\n        if (AutoNumericHelper.isNumber(Number(value))) { // if (settings.decimalCharacter === '.' && AutoNumericHelper.isNumber(Number(value))) {\n            // The value has either already been stripped, or a 'real' javascript number is passed as a parameter\n            if (!AutoNumericHelper.isNumberStrict(value)) {\n                value = String(value).trim(); // cf. issue #721\n            }\n            result = AutoNumericHelper.scientificToDecimal(value);\n        } else {\n            // Else if it's a string that `Number()` cannot typecast, then we try to convert the localized numeric string to a numeric one\n            // Convert the value to a numeric string, stripping unnecessary characters in the process\n            result = this._convertToNumericString(value.toString(), settings);\n\n            // If the result is still not a numeric string, then we throw a warning\n            if (!AutoNumericHelper.isNumber(Number(result))) {\n                AutoNumericHelper.warning(`The given value \"${value}\" cannot be converted to a numeric one and therefore cannot be used appropriately.`, settings.showWarnings);\n                result = NaN;\n            }\n        }\n\n        return result;\n    }\n\n    /**\n     * Return the pasted text that will be used, by stripping most non-numeric characters\n     *\n     * @param {string} text\n     * @returns {string}\n     */\n    _preparePastedText(text) {\n        return this.constructor._stripAllNonNumberCharacters(text, this.settings, true, this.isFocused);\n    }\n\n    /**\n     * Return TRUE if the given value (a number as a string) is within the range set in the settings `minimumValue` and `maximumValue`, FALSE otherwise.\n     *\n     * @param {string} value\n     * @param {object} parsedMinValue Parsed via the `parseStr()` function\n     * @param {object} parsedMaxValue Parsed via the `parseStr()` function\n     * @returns {boolean}\n     */\n    static _checkIfInRange(value, parsedMinValue, parsedMaxValue) {\n        const parsedValue = AutoNumericHelper.parseStr(value);\n        return AutoNumericHelper.testMinMax(parsedMinValue, parsedValue) > -1 && AutoNumericHelper.testMinMax(parsedMaxValue, parsedValue) < 1;\n    }\n\n    /**\n     * Update the selection values as well as resets the internal state of the current AutoNumeric object.\n     * This keeps tracks of the current selection and resets the 'processed' state.\n     *\n     * Note : This state can change between the keydown, keypress and keyup events, that's why\n     *        this function is called on each event handler.\n     *\n     * @private\n     */\n    _updateInternalProperties() {\n        this.selection = AutoNumericHelper.getElementSelection(this.domElement);\n        this.processed = false;\n    }\n\n    /**\n     * Update the `event.key` attribute that triggered the given event.\n     *\n     * `event.key` describes:\n     * - the key name (if a non-printable character),\n     * - or directly the character that result from the key press used to trigger the event.\n     *\n     * @link https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key\n     * The key list is described here:\n     * @link https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values\n     *\n     * @param {Event|KeyboardEvent} e\n     * @private\n     */\n    _updateEventKeyInfo(e) {\n        this.eventKey = AutoNumericHelper.character(e);\n    }\n\n    /**\n     * Save the unformatted element value.\n     * This is used in the 'cancellable' feature where the element value is saved on focus and input validation, to be used if the user wants to cancel his modifications by hitting the 'Escape' key.\n     *\n     * @private\n     */\n    _saveCancellableValue() {\n        this.savedCancellableValue = this.rawValue;\n    }\n\n    /**\n     * Set the text selection inside the input with the given start and end position.\n     *\n     * @param {int} start\n     * @param {int} end\n     * @private\n     */\n    _setSelection(start, end) {\n        //TODO use this function to replace the direct calls to `setElementSelection()`, wherever possible\n        start = Math.max(start, 0);\n        end = Math.min(end, AutoNumericHelper.getElementValue(this.domElement).length);\n        this.selection = {\n            start,\n            end,\n            length: end - start,\n        };\n\n        AutoNumericHelper.setElementSelection(this.domElement, start, end);\n    }\n\n    /**\n     * Set the caret position inside the input at the given position.\n     *\n     * @param {int} position\n     * @private\n     */\n    _setCaretPosition(position) {\n        this._setSelection(position, position);\n    }\n\n    /**\n     * Return an array containing the string parts located on the left and right side of the caret or selection.\n     * Those parts are left 'untouched', i.e. formatted by autoNumeric.\n     *\n     * @returns {[string, string]} The parts on the left and right of the caret or selection\n     * @private\n     */\n    _getLeftAndRightPartAroundTheSelection() {\n        const value = AutoNumericHelper.getElementValue(this.domElement);\n        const left = value.substring(0, this.selection.start);\n        const right = value.substring(this.selection.end, value.length);\n\n        return [left, right];\n    }\n\n    /**\n     * Return an array containing the string parts located on the left and right side of the caret or selection.\n     * Those parts are unformatted (stripped) of any non-numbers characters, and any trailing negative character is put back on the left hand side of the number.\n     *\n     * @returns {[string, string]} The parts on the left and right of the caret or selection, unformatted.\n     * @private\n     */\n    _getUnformattedLeftAndRightPartAroundTheSelection() {\n        let [left, right] = this._getLeftAndRightPartAroundTheSelection();\n        if (left === '' && right === '') {\n            return ['', ''];\n        }\n\n        // If changing the sign and `left` is equal to the number zero, prevent stripping the leading zero(s)\n        let stripZeros = true;\n        if ((this.eventKey === AutoNumericEnum.keyName.Hyphen || this.eventKey === AutoNumericEnum.keyName.Minus) && Number(left) === 0) {\n            stripZeros = false;\n        }\n\n        //TODO DRY that with `_normalizeParts()` -->\n        if (this.isTrailingNegative &&\n            ((AutoNumericHelper.isNegative(right, this.settings.negativeSignCharacter) && // The caret is placed on the left of the negative sign\n            !AutoNumericHelper.isNegative(left, this.settings.negativeSignCharacter)) ||\n            (right === '' && // ...or the caret is placed on the far right of the input (Fix issue #481)\n            AutoNumericHelper.isNegative(left, this.settings.negativeSignCharacter, true)))) {\n            left = left.replace(this.settings.negativeSignCharacter, '');\n            right = right.replace(this.settings.negativeSignCharacter, '');\n            // This is done here because `_getUnformattedLeftAndRightPartAroundTheSelection()` is called multiple times during the same key event, and at one point the left/right value has been normalized already..\n            left = left.replace('-', '');\n            right = right.replace('-', '');\n\n            // Then finally set back the normalized minus character at the right place\n            left = `-${left}`;\n        }\n\n        left = AutoNumeric._stripAllNonNumberCharactersExceptCustomDecimalChar(left, this.settings, stripZeros, this.isFocused);\n        right = AutoNumeric._stripAllNonNumberCharactersExceptCustomDecimalChar(right, this.settings, false, this.isFocused);\n\n        return [left, right];\n    }\n\n    /**\n     * Strip parts from excess characters and leading zeros.\n     *\n     * @param {string} left\n     * @param {string} right\n     * @returns {[*,*,*]}\n     * @private\n     */\n    _normalizeParts(left, right) {\n        //TODO Refactor with `_getUnformattedLeftAndRightPartAroundTheSelection` which share a lot of similar code\n        // If changing the sign and left is equal to the number zero - prevents stripping the leading zeros\n        let stripZeros = true;\n        if ((this.eventKey === AutoNumericEnum.keyName.Hyphen || this.eventKey === AutoNumericEnum.keyName.Minus) && Number(left) === 0) {\n            stripZeros = false;\n        }\n\n        if (this.isTrailingNegative &&\n            AutoNumericHelper.isNegative(right, this.settings.negativeSignCharacter) &&\n            !AutoNumericHelper.isNegative(left, this.settings.negativeSignCharacter)) {\n            // Only set the negative sign if the value is negative\n            left = `-${left}`;\n            right = right.replace(this.settings.negativeSignCharacter, '');\n        }\n\n        left = AutoNumeric._stripAllNonNumberCharactersExceptCustomDecimalChar(left, this.settings, stripZeros, this.isFocused);\n        right = AutoNumeric._stripAllNonNumberCharactersExceptCustomDecimalChar(right, this.settings, false, this.isFocused);\n\n        // Prevents multiple leading zeros from being entered\n        if (this.settings.leadingZero === AutoNumeric.options.leadingZero.deny &&\n            (this.eventKey === AutoNumericEnum.keyName.num0 || this.eventKey === AutoNumericEnum.keyName.numpad0) &&\n            Number(left) === 0 &&\n            // If `right` is not empty and the first character is not `decimalCharacter`\n            !AutoNumericHelper.contains(left, this.settings.decimalCharacter) && right !== '') {\n            left = left.substring(0, left.length - 1);\n        }\n\n        // Insert zero there is a leading dot\n        let newValue = left + right;\n        if (this.settings.decimalCharacter) {\n            const m = newValue.match(new RegExp(`^${this.regex.aNegRegAutoStrip}\\\\${this.settings.decimalCharacter}`));\n            if (m) {\n                left = left.replace(m[1], m[1] + '0');\n                newValue = left + right;\n            }\n        }\n\n        return [left, right, newValue];\n    }\n\n    /**\n     * Set the formatted element value as well as the `rawValue`.\n     * This returns `true` if the element and raw value have been modified, `false` otherwise.\n     * This method also adjust the caret position according to the `leadingZero` option and the normalized value. //TODO What about the cursor *selection*?\n     *\n     * @param {string} left\n     * @param {string} right\n     * @param {boolean} isPaste\n     * @returns {boolean}\n     * @private\n     */\n    _setValueParts(left, right, isPaste = false) {\n        const [normalizedLeft, normalizedRight, normalizedNewValue] = this._normalizeParts(left, right);\n        const [minTest, maxTest] = AutoNumeric._checkIfInRangeWithOverrideOption(normalizedNewValue, this.settings);\n\n        if (minTest && maxTest) {\n            // First, set the raw value\n            const roundedRawValue = AutoNumeric._truncateDecimalPlaces(normalizedNewValue, this.settings, isPaste, this.settings.decimalPlacesRawValue);\n            const testValue = roundedRawValue.replace(this.settings.decimalCharacter, '.');\n\n            if (testValue === '' || testValue === this.settings.negativeSignCharacter) {\n                let valueToSetOnEmpty;\n                switch (this.settings.emptyInputBehavior) {\n                    case AutoNumeric.options.emptyInputBehavior.focus:\n                    case AutoNumeric.options.emptyInputBehavior.press:\n                    case AutoNumeric.options.emptyInputBehavior.always:\n                        valueToSetOnEmpty = '';\n                        break;\n                    case AutoNumeric.options.emptyInputBehavior.min:\n                        valueToSetOnEmpty = this.settings.minimumValue;\n                        break;\n                    case AutoNumeric.options.emptyInputBehavior.max:\n                        valueToSetOnEmpty = this.settings.maximumValue;\n                        break;\n                    case AutoNumeric.options.emptyInputBehavior.zero:\n                        valueToSetOnEmpty = '0';\n                        break;\n                    case AutoNumeric.options.emptyInputBehavior.null:\n                        valueToSetOnEmpty = null;\n                        break;\n                    // When `emptyInputBehavior` is a number or a string representing a number\n                    default:\n                        valueToSetOnEmpty = this.settings.emptyInputBehavior;\n                }\n\n                this._setRawValue(valueToSetOnEmpty);\n            } else {\n                this._setRawValue(this._trimLeadingAndTrailingZeros(testValue));\n            }\n\n            // Then set the formatted value\n            const roundedValueToShow = AutoNumeric._truncateDecimalPlaces(normalizedNewValue, this.settings, isPaste, this.settings.decimalPlacesShownOnFocus);\n            let position = normalizedLeft.length;\n            if (position > roundedValueToShow.length) {\n                position = roundedValueToShow.length;\n            }\n\n            // Make sure when the user enter a '0' on the far left with a leading zero option set to 'deny', that the caret does not move since the input is dropped (fix issue #283)\n            if (position === 1 && normalizedLeft === '0' && this.settings.leadingZero === AutoNumeric.options.leadingZero.deny) {\n                // If the user enter `0`, then the caret is put on the right side of it (Fix issue #299)\n                if (normalizedRight === '' || normalizedLeft === '0' && normalizedRight !== '') {\n                    position = 1;\n                } else {\n                    position = 0;\n                }\n            }\n\n            this._setElementValue(roundedValueToShow, false);\n            this._setCaretPosition(position);\n\n            return true;\n        }\n\n        this._triggerRangeEvents(minTest, maxTest);\n\n        return false;\n    }\n\n    /**\n     * Helper function for `_expandSelectionOnSign()`.\n     *\n     * @returns {Array} Array containing [signPosition, currencySymbolPosition] of a formatted value\n     * @private\n     */\n    _getSignPosition() {\n        let result;\n        if (this.settings.currencySymbol) {\n            const currencySymbolLen = this.settings.currencySymbol.length;\n            const value = AutoNumericHelper.getElementValue(this.domElement);\n            if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix) {\n                const hasNeg = this.settings.negativeSignCharacter && value && value.charAt(0) === this.settings.negativeSignCharacter;\n                if (hasNeg) {\n                    result = [1, currencySymbolLen + 1];\n                } else {\n                    result = [0, currencySymbolLen];\n                }\n            } else {\n                const valueLen = value.length;\n                result = [valueLen - currencySymbolLen, valueLen];\n            }\n        } else {\n            result = [1000, -1];\n        }\n\n        return result;\n    }\n\n    /**\n     * Expands selection to cover whole sign\n     * Prevents partial deletion/copying/overwriting of a sign\n     * @private\n     */\n    _expandSelectionOnSign() {\n        const [signPosition, currencySymbolPosition] = this._getSignPosition();\n        const selection = this.selection;\n\n        // If selection catches something except sign and catches only space from sign\n        if (selection.start < currencySymbolPosition && selection.end > signPosition) {\n            // Then select without empty space\n            if ((selection.start < signPosition || selection.end > currencySymbolPosition) &&\n                AutoNumericHelper.getElementValue(this.domElement).substring(Math.max(selection.start, signPosition), Math.min(selection.end, currencySymbolPosition))\n                    .match(/^\\s*$/)) {\n                if (selection.start < signPosition) {\n                    this._setSelection(selection.start, signPosition);\n                } else {\n                    this._setSelection(currencySymbolPosition, selection.end);\n                }\n            } else {\n                // Else select with whole sign\n                this._setSelection(Math.min(selection.start, signPosition), Math.max(selection.end, currencySymbolPosition));\n            }\n        }\n    }\n\n    /**\n     * Try to strip pasted value to digits\n     */\n    _checkPaste() {\n        // Do not process anything if the value has already been formatted\n        if (this.formatted) {\n            return;\n        }\n\n        if (!AutoNumericHelper.isUndefined(this.valuePartsBeforePaste)) {\n            const oldParts = this.valuePartsBeforePaste;\n            const [left, right] = this._getLeftAndRightPartAroundTheSelection();\n\n            // Try to strip the pasted value first\n            delete this.valuePartsBeforePaste;\n\n            const modifiedLeftPart = left.substr(0, oldParts[0].length) + AutoNumeric._stripAllNonNumberCharactersExceptCustomDecimalChar(left.substr(oldParts[0].length), this.settings, true, this.isFocused);\n            if (!this._setValueParts(modifiedLeftPart, right, true)) {\n                this._setElementValue(oldParts.join(''), false);\n                this._setCaretPosition(oldParts[0].length);\n            }\n        }\n    }\n\n    /**\n     * Return `true` if the given key should be ignored or not.\n     *\n     * @param {string} eventKeyName\n     * @returns {boolean}\n     * @private\n     */\n    static _shouldSkipEventKey(eventKeyName) {\n        const isFnKeys = AutoNumericHelper.isInArray(eventKeyName, AutoNumericEnum.keyName._allFnKeys);\n        const isOSKeys = eventKeyName === AutoNumericEnum.keyName.OSLeft || eventKeyName === AutoNumericEnum.keyName.OSRight;\n        const isContextMenu = eventKeyName === AutoNumericEnum.keyName.ContextMenu;\n        const isSomeNonPrintableKeys = AutoNumericHelper.isInArray(eventKeyName, AutoNumericEnum.keyName._someNonPrintableKeys);\n        const isOtherNonPrintableKeys = eventKeyName === AutoNumericEnum.keyName.NumLock ||\n            eventKeyName === AutoNumericEnum.keyName.ScrollLock ||\n            eventKeyName === AutoNumericEnum.keyName.Insert ||\n            eventKeyName === AutoNumericEnum.keyName.Command;\n        const isUnrecognizableKeys = eventKeyName === AutoNumericEnum.keyName.Unidentified;\n\n        return isFnKeys || isOSKeys || isContextMenu || isSomeNonPrintableKeys || isUnrecognizableKeys || isOtherNonPrintableKeys;\n    }\n\n    /**\n     * Process copying, cutting and pasting, as well as undo/redoing and cursor moving.\n     * Return `true` if further processing should not be performed.\n     *\n     * @param {KeyboardEvent} e\n     * @returns {boolean}\n     * @private\n     */\n    _processNonPrintableKeysAndShortcuts(e) {\n        // Catch the ctrl up on ctrl-v\n        if (((e.ctrlKey || e.metaKey) && e.type === 'keyup' && !AutoNumericHelper.isUndefined(this.valuePartsBeforePaste)) || (e.shiftKey && this.eventKey === AutoNumericEnum.keyName.Insert)) {\n            //TODO Move this test inside the `onKeyup` handler\n            this._checkPaste();\n\n            return false;\n        }\n\n        // Skip all function keys (F1-F12), Windows keys, tab and other special keys\n        if (this.constructor._shouldSkipEventKey(this.eventKey)) {\n            return true;\n        }\n\n        // If a \"Select all\" keyboard shortcut is detected (ctrl + a)\n        if ((e.ctrlKey || e.metaKey) && this.eventKey === AutoNumericEnum.keyName.a) {\n            if (this.settings.selectNumberOnly) {\n                // `preventDefault()` is used here to prevent the browser to first select all the input text (including the currency sign), otherwise we would see that whole selection first in a flash, then the selection with only the number part without the currency sign.\n                e.preventDefault();\n                //TODO replace `selectNumber` by `select`?\n                this.selectNumber();\n            }\n\n            return true;\n        }\n\n        // If a \"Copy\", \"Paste\" or \"Cut\" keyboard shortcut is detected (respectively 'ctrl + c', 'ctrl + v' or 'ctrl + x')\n        if ((e.ctrlKey || e.metaKey) &&\n            (this.eventKey === AutoNumericEnum.keyName.c ||\n             this.eventKey === AutoNumericEnum.keyName.v ||\n             this.eventKey === AutoNumericEnum.keyName.x)) {\n            if (e.type === 'keydown') {\n                this._expandSelectionOnSign();\n            }\n\n            // Try to prevent wrong paste\n            if (this.eventKey === AutoNumericEnum.keyName.v || this.eventKey === AutoNumericEnum.keyName.Insert) {\n                if (e.type === 'keydown' || e.type === 'keypress') {\n                    if (AutoNumericHelper.isUndefined(this.valuePartsBeforePaste)) {\n                        this.valuePartsBeforePaste = this._getLeftAndRightPartAroundTheSelection();\n                    }\n                } else {\n                    this._checkPaste();\n                }\n            }\n\n            return e.type === 'keydown' || e.type === 'keypress' || this.eventKey === AutoNumericEnum.keyName.c;\n        }\n\n\n        // If the ctrl/meta key is used (during the undo shortcut for instance)\n        if (e.ctrlKey || e.metaKey) {\n            return !(this.eventKey === AutoNumericEnum.keyName.Z || this.eventKey === AutoNumericEnum.keyName.z);\n        }\n\n        // Jump over the thousand separator\n        //TODO Move this test inside the `onKeydown` handler\n        if (this.eventKey === AutoNumericEnum.keyName.LeftArrow || this.eventKey === AutoNumericEnum.keyName.RightArrow) {\n            if (e.type === 'keydown' && !e.shiftKey) {\n                const value = AutoNumericHelper.getElementValue(this.domElement);\n                if (this.eventKey === AutoNumericEnum.keyName.LeftArrow &&\n                    (value.charAt(this.selection.start - 2) === this.settings.digitGroupSeparator ||\n                    value.charAt(this.selection.start - 2) === this.settings.decimalCharacter)) {\n                    this._setCaretPosition(this.selection.start - 1);\n                } else if (this.eventKey === AutoNumericEnum.keyName.RightArrow &&\n                    (value.charAt(this.selection.start + 1) === this.settings.digitGroupSeparator ||\n                    value.charAt(this.selection.start + 1) === this.settings.decimalCharacter)) {\n                    this._setCaretPosition(this.selection.start + 1);\n                }\n            }\n\n            return true;\n        }\n\n        return AutoNumericHelper.isInArray(this.eventKey, AutoNumericEnum.keyName._directionKeys);\n    }\n\n    /**\n     * Process deletion of characters when the minus sign is to the right of the numeric characters.\n     *\n     * @param {string[]} leftAndRight The parts on the left and on the right of the caret or selection as an array with [left, right]\n     * @returns {string[]} Processed left and right as an array with [left, right]\n     * @private\n     */\n    _processCharacterDeletionIfTrailingNegativeSign([left, right]) {\n        const value = AutoNumericHelper.getElementValue(this.domElement);\n        const isValNegative = AutoNumericHelper.isNegative(value, this.settings.negativeSignCharacter);\n\n        if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix && this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.suffix) {\n            if (this.eventKey === AutoNumericEnum.keyName.Backspace) {\n                this.caretFix = (this.selection.start >= value.indexOf(this.settings.suffixText) && this.settings.suffixText !== '');\n                if (value.charAt(this.selection.start - 1) === '-') {\n                    left = left.substring(1);\n                } else if (this.selection.start <= value.length - this.settings.suffixText.length) {\n                    left = left.substring(0, left.length - 1);\n                }\n            } else {\n                this.caretFix = (this.selection.start >= value.indexOf(this.settings.suffixText) && this.settings.suffixText !== '');\n                if (this.selection.start >= value.indexOf(this.settings.currencySymbol) + this.settings.currencySymbol.length) {\n                    right = right.substring(1, right.length);\n                }\n                if (AutoNumericHelper.isNegative(left, this.settings.negativeSignCharacter) && value.charAt(this.selection.start) === '-') {\n                    left = left.substring(1);\n                }\n            }\n        }\n\n        if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n            switch (this.settings.negativePositiveSignPlacement) {\n                case AutoNumeric.options.negativePositiveSignPlacement.left:\n                    this.caretFix = (this.selection.start >= value.indexOf(this.settings.negativeSignCharacter) + this.settings.negativeSignCharacter.length);\n                    if (this.eventKey === AutoNumericEnum.keyName.Backspace) {\n                        if (this.selection.start === (value.indexOf(this.settings.negativeSignCharacter) + this.settings.negativeSignCharacter.length) && isValNegative) {\n                            left = left.substring(1);\n                        } else if (left !== '-' && ((this.selection.start <= value.indexOf(this.settings.negativeSignCharacter)) || !isValNegative)) {\n                            left = left.substring(0, left.length - 1);\n                        }\n                    } else {\n                        if (left[0] === '-') {\n                            right = right.substring(1);\n                        }\n                        if (this.selection.start === value.indexOf(this.settings.negativeSignCharacter) && isValNegative) {\n                            left = left.substring(1);\n                        }\n                    }\n                    break;\n                case AutoNumeric.options.negativePositiveSignPlacement.right:\n                    this.caretFix = (this.selection.start >= value.indexOf(this.settings.negativeSignCharacter) + this.settings.negativeSignCharacter.length);\n                    if (this.eventKey === AutoNumericEnum.keyName.Backspace) {\n                        if (this.selection.start === (value.indexOf(this.settings.negativeSignCharacter) + this.settings.negativeSignCharacter.length)) {\n                            left = left.substring(1);\n                        } else if (left !== '-' && this.selection.start <= (value.indexOf(this.settings.negativeSignCharacter) - this.settings.currencySymbol.length)) {\n                            left = left.substring(0, left.length - 1);\n                        } else if (left !== '' && !isValNegative) {\n                            left = left.substring(0, left.length - 1);\n                        }\n                    } else {\n                        this.caretFix = (this.selection.start >= value.indexOf(this.settings.currencySymbol) && this.settings.currencySymbol !== '');\n                        if (this.selection.start === value.indexOf(this.settings.negativeSignCharacter)) {\n                            left = left.substring(1);\n                        }\n\n                        right = right.substring(1);\n                    }\n                    break;\n            }\n        }\n\n        return [left, right];\n    }\n\n    /**\n     * Process the deletion of characters.\n     * Returns `true` if the deletion is allowed (within the min and max range, according to the `overrideMinMaxLimits` option), `false` otherwise.\n     *\n     * @param {Event} e\n     * @returns {boolean}\n     */\n    _processCharacterDeletion(e) {\n        let left;\n        let right;\n\n        if (!this.selection.length) {\n            [left, right] = this._getUnformattedLeftAndRightPartAroundTheSelection();\n            if (left === '' && right === '') {\n                this.throwInput = false;\n            }\n\n            if (this.isTrailingNegative && AutoNumericHelper.isNegative(AutoNumericHelper.getElementValue(this.domElement), this.settings.negativeSignCharacter)) {\n                [left, right] = this._processCharacterDeletionIfTrailingNegativeSign([left, right]);\n            } else {\n                if (this.eventKey === AutoNumericEnum.keyName.Backspace) {\n                    left = left.substring(0, left.length - 1);\n                } else {\n                    right = right.substring(1, right.length);\n                }\n            }\n        } else {\n            this._expandSelectionOnSign();\n            [left, right] = this._getUnformattedLeftAndRightPartAroundTheSelection();\n        }\n\n        if (!this.constructor._isWithinRangeWithOverrideOption(`${left}${right}`, this.settings)) {\n            // If the result with the deletion would be out of the range, we prevent it\n            return false;\n        }\n        if (AutoNumericHelper.getElementValue(e.target) === this.settings.currencySymbol) {\n            return false;\n        }\n\n        this._setValueParts(left, right);\n\n        return true;\n    }\n\n    /**\n     * Return `true` if a decimal character is allowed to be typed.\n     * If the number of decimal places shown on focus is zero, then the decimal character is not allowed.\n     *\n     * @returns {boolean}\n     * @private\n     */\n    _isDecimalCharacterInsertionAllowed() {\n        return String(this.settings.decimalPlacesShownOnFocus) !== String(AutoNumeric.options.decimalPlacesShownOnFocus.none) &&\n            String(this.settings.decimalPlaces) !== String(AutoNumeric.options.decimalPlaces.none);\n    }\n\n    /**\n     * Return `true` if the key is allowed.\n     * This function decides if the key pressed should be dropped or accepted, and modify the value 'on-the-fly' accordingly.\n     * //TODO This should use another function in order to separate the test and the modification\n     *\n     * @returns {boolean}\n     */\n    _processCharacterInsertion() {\n        let [left, right] = this._getUnformattedLeftAndRightPartAroundTheSelection();\n        if (this.eventKey !== AutoNumericEnum.keyName.AndroidDefault) {\n            this.throwInput = true;\n        }\n\n        // Start rules when the decimal character key is pressed always use numeric pad dot to insert decimal separator\n        // Do not allow decimal character if no decimal part allowed\n        if (this.eventKey === this.settings.decimalCharacter ||\n            (this.settings.decimalCharacterAlternative && this.eventKey === this.settings.decimalCharacterAlternative)) {\n            if (!this._isDecimalCharacterInsertionAllowed() || !this.settings.decimalCharacter) {\n                return false;\n            }\n\n            if (this.settings.alwaysAllowDecimalCharacter) {\n                // Remove any previous decimal character\n                left = left.replace(this.settings.decimalCharacter, '');\n                right = right.replace(this.settings.decimalCharacter, '');\n            } else {\n                // Do not allow a decimal character if another decimal character is already present\n                if (AutoNumericHelper.contains(left, this.settings.decimalCharacter)) {\n                    return true;\n                }\n\n                // Prevent adding a decimal character at the far right of the number\n                if (right.indexOf(this.settings.decimalCharacter) > 0) {\n                    return true;\n                }\n\n                // Remove the decimal character if found on the far left of the right part\n                if (right.indexOf(this.settings.decimalCharacter) === 0) {\n                    right = right.substr(1);\n                }\n            }\n\n            // If the user is trying to add a decimal character on the far left of the number, we allow it\n            if (this.settings.negativeSignCharacter && AutoNumericHelper.contains(right, this.settings.negativeSignCharacter)) {\n                // We need however to move the negative sign from the right to the left part\n                left = `${this.settings.negativeSignCharacter}${left}`;\n                right = right.replace(this.settings.negativeSignCharacter, '');\n            }\n\n            this._setValueParts(left + this.settings.decimalCharacter, right);\n\n            return true;\n        }\n\n        // Prevent entering the minus sign if it's not allowed (Note: `this.settings.isNegativeSignAllowed` is only set to `true` if the minimumValue is lower than zero, allowing negative numbers to be entered)\n        if ((this.eventKey === '-' || this.eventKey === '+') && this.settings.isNegativeSignAllowed) {\n            // Here, the left and right parts have been normalized already, hence the minus sign usage\n            if (left === '' && AutoNumericHelper.contains(right, '-')) {\n                // The value is originally negative (with a trailing negative sign)\n                if (this.settings.negativePositiveSignBehavior || (!this.settings.negativePositiveSignBehavior && this.eventKey === '+')) {\n                    right = right.replace('-', '');\n                }\n            } else if (AutoNumericHelper.isNegativeStrict(left, '-')) {\n                // The value is originally negative (with a leading negative sign)\n                // Remove the negative sign, effectively converting the value to a positive one\n                if (this.settings.negativePositiveSignBehavior || (!this.settings.negativePositiveSignBehavior && this.eventKey === '+')) {\n                    left = left.replace('-', '');\n                }\n            } else if (this.settings.negativePositiveSignBehavior || (!this.settings.negativePositiveSignBehavior && this.eventKey === '-')) {\n                // The value is originally positive, so we toggle the state to a negative one (unformatted, which means even with a trailing negative sign, we add the minus sign on the far left)\n                left = `${this.settings.negativeSignCharacter}${left}`;\n            }\n\n            this._setValueParts(left, right);\n\n            return true;\n        }\n\n        const eventNumber = Number(this.eventKey);\n        if (eventNumber >= 0 && eventNumber <= 9) {\n            // If the user tries to insert a digit\n            if (this.settings.isNegativeSignAllowed && left === '' && AutoNumericHelper.contains(right, '-')) {\n                // ...and that digit is before the minus sign\n                left = '-';\n                right = right.substring(1, right.length);\n            }\n\n            if (this.settings.maximumValue <= 0 &&\n                this.settings.minimumValue < this.settings.maximumValue &&\n                !AutoNumericHelper.contains(AutoNumericHelper.getElementValue(this.domElement), this.settings.negativeSignCharacter) &&\n                this.eventKey !== '0') {\n                left = `-${left}`;\n            }\n\n            this._setValueParts(`${left}${this.eventKey}`, right);\n\n            return true;\n        }\n\n        // Prevent any other characters\n        this.throwInput = false;\n\n        return false;\n    }\n\n    /**\n     * Formatting of just processed value while keeping the cursor position\n     *\n     * @param {Event} e\n     * @private\n     */\n    _formatValue(e) {\n        //TODO Break apart and simplify this really long function\n        const elementValue = AutoNumericHelper.getElementValue(this.domElement);\n        let [left] = this._getUnformattedLeftAndRightPartAroundTheSelection();\n\n        // No grouping separator and no currency sign\n        if ((this.settings.digitGroupSeparator  === '' || (this.settings.digitGroupSeparator !== ''  && !AutoNumericHelper.contains(elementValue, this.settings.digitGroupSeparator))) &&\n            (this.settings.currencySymbol === '' || (this.settings.currencySymbol !== '' && !AutoNumericHelper.contains(elementValue, this.settings.currencySymbol)))) {\n            let [subParts] = elementValue.split(this.settings.decimalCharacter);\n            let negativeSign = '';\n            if (AutoNumericHelper.isNegative(subParts, this.settings.negativeSignCharacter)) {\n                negativeSign = this.settings.negativeSignCharacter;\n                subParts = subParts.replace(this.settings.negativeSignCharacter, '');\n                left = left.replace('-', ''); // Here we modify the unformatted value (with the 'normal' minus sign)\n            }\n\n            // Strip leading zero on positive value if needed\n            if (negativeSign === '' && subParts.length > this.settings.mIntPos && left.charAt(0) === '0') {\n                left = left.slice(1);\n            }\n\n            // Strip leading zero on negative value if needed\n            if (negativeSign === this.settings.negativeSignCharacter && subParts.length > this.settings.mIntNeg && left.charAt(0) === '0') {\n                left = left.slice(1);\n            }\n\n            if (!this.isTrailingNegative) { // Only add the minus sign if it's needed on that side of the numbers\n                left = `${negativeSign}${left}`;\n            }\n        }\n\n        const value = this.constructor._addGroupSeparators(elementValue, this.settings, this.isFocused, this.rawValue);\n        let position = value.length;\n        if (value) {\n            // Prepare regexp which searches for cursor position from unformatted left part\n            const leftAr = left.split('');\n\n            // Fixes caret position with trailing minus sign\n            if ((this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.suffix ||\n                (this.settings.negativePositiveSignPlacement !== AutoNumeric.options.negativePositiveSignPlacement.prefix && this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix)) &&\n                leftAr[0] === this.settings.negativeSignCharacter && !this.settings.isNegativeSignAllowed) {\n                leftAr.shift(); // Remove the negative sign character\n\n                if ((this.eventKey === AutoNumericEnum.keyName.Backspace || this.eventKey === AutoNumericEnum.keyName.Delete) &&\n                    this.caretFix) {\n                    if ((this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix && this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.left) ||\n                        (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix && this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.suffix)) {\n                        leftAr.push(this.settings.negativeSignCharacter);\n                        this.caretFix = e.type === 'keydown';\n                    }\n\n                    if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix &&\n                        this.settings.negativePositiveSignPlacement === AutoNumeric.options.negativePositiveSignPlacement.right) {\n                        const signParts = this.settings.currencySymbol.split('');\n                        const escapeChr = ['\\\\', '^', '$', '.', '|', '?', '*', '+', '(', ')', '['];\n                        const escapedParts = [];\n                        signParts.forEach((i, miniParts) => {\n                            miniParts = signParts[i];\n                            if (AutoNumericHelper.isInArray(miniParts, escapeChr)) {\n                                escapedParts.push('\\\\' + miniParts);\n                            } else {\n                                escapedParts.push(miniParts);\n                            }\n                        });\n\n                        if (this.eventKey === AutoNumericEnum.keyName.Backspace && this.settings.negativeSignCharacter === '-') {\n                            escapedParts.push('-');\n                        }\n\n                        // Pushing the escaped sign\n                        leftAr.push(escapedParts.join(''));\n                        this.caretFix = e.type === 'keydown';\n                    }\n                }\n            }\n\n            for (let i = 0; i < leftAr.length; i++) {\n                if (!leftAr[i].match('\\\\d')) {\n                    leftAr[i] = '\\\\' + leftAr[i]; // Escapes the decimal character\n                }\n            }\n\n            // Generates the regex that will search for the cursor position in the formatted value\n            let leftReg;\n            if (this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n                leftReg = new RegExp(`^.*?${leftAr.join('.*?')}`);\n            } else { // prefix is assumed\n                leftReg = new RegExp(`^.*?[${this.settings.currencySymbol}]*${leftAr.join('.*?')}`); // Fixes issue #647 when using a currency that has some characters in it that matches the value we just entered (i.e. numbers in the currency)\n            }\n\n            // Search cursor position in formatted value\n            const newLeft = value.match(leftReg);\n            if (newLeft) {\n                position = newLeft[0].length;\n\n                // If the positive sign is shown, calculate the caret position accordingly\n                if (this.settings.showPositiveSign) {\n                    if (position === 0 && newLeft.input.charAt(0) === this.settings.positiveSignCharacter) {\n                        position = (newLeft.input.indexOf(this.settings.currencySymbol) === 1) ? this.settings.currencySymbol.length + 1 : 1;\n                    }\n\n                    if (position === 0 && newLeft.input.charAt(this.settings.currencySymbol.length) === this.settings.positiveSignCharacter) {\n                        position = this.settings.currencySymbol.length + 1;\n                    }\n                }\n\n                // If we are just before the sign which is in prefix position\n                if (((position === 0 && value.charAt(0) !== this.settings.negativeSignCharacter) || (position === 1 && value.charAt(0) === this.settings.negativeSignCharacter)) && this.settings.currencySymbol && this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.prefix) {\n                    // Place caret after prefix sign\n                    //TODO Should the test be 'isNegative' instead of 'isNegativeStrict' in order to search for '-' everywhere in the string?\n                    position = this.settings.currencySymbol.length + (AutoNumericHelper.isNegativeStrict(value, this.settings.negativeSignCharacter) ? 1 : 0);\n                }\n            } else {\n                if (this.settings.currencySymbol && this.settings.currencySymbolPlacement === AutoNumeric.options.currencySymbolPlacement.suffix) {\n                    // If we could not find a place for cursor and have a sign as a suffix\n                    // Place caret before suffix currency sign\n                    position -= this.settings.currencySymbol.length;\n                }\n\n                if (this.settings.suffixText) {\n                    // If we could not find a place for cursor and have a suffix\n                    // Place caret before suffix\n                    position -= this.settings.suffixText.length;\n                }\n            }\n        }\n\n        // Only update the value if it has changed. This prevents modifying the selection, if any.\n        if (value !== elementValue) {\n            this._setElementValue(value, false);\n            this._setCaretPosition(position);\n        }\n\n        this.formatted = true; //TODO Rename `this.formatted` to `this._formatExecuted`, since it's possible this function does not need to format anything (in the case where the keycode is dropped for instance)\n    }\n\n    /**\n     * Serialize the form child <input> element values to a string, or an Array.\n     * The output format is defined with the `formatType` argument.\n     * This is loosely based upon http://stackoverflow.com/a/40705993/2834898.\n     *\n     * @param {HTMLFormElement} form\n     * @param {boolean} intoAnArray If `true`, instead of generating a string, it generates an Array.\n     * @param {string} formatType If `'unformatted'`, then the AutoNumeric elements values are unformatted, if `'localized'`, then the AutoNumeric elements values are localized, and if `'formatted'`, then the AutoNumeric elements values are kept formatted. In either way, this function does not modify the value of each DOM element, but only affect the value that is returned by that serialize function.\n     * @param {string} serializedSpaceCharacter Can either be the '+' character, or the '%20' string.\n     * @param {string|null} forcedOutputFormat If set, then this is the format that is used for the localization, instead of the default `outputFormat` option.\n     * @returns {string|Array}\n     * @private\n     */\n    static _serialize(form, intoAnArray = false, formatType = 'unformatted', serializedSpaceCharacter = '+', forcedOutputFormat = null) {\n        const result = [];\n\n        if (typeof form === 'object' && form.nodeName.toLowerCase() === 'form') {\n            Array.prototype.slice.call(form.elements).forEach(element => {\n                if (element.name &&\n                    !element.disabled &&\n                    ['file', 'reset', 'submit', 'button'].indexOf(element.type) === -1) {\n                    if (element.type === 'select-multiple') {\n                        Array.prototype.slice.call(element.options).forEach(option => {\n                            if (option.selected) {\n                                //TODO Should we unformat/format/localize the selection option (which be default should be read-only)?\n                                if (intoAnArray) {\n                                    result.push({ name: element.name, value: option.value });\n                                } else { // into a string\n                                    result.push(`${encodeURIComponent(element.name)}=${encodeURIComponent(option.value)}`);\n                                }\n                            }\n                        });\n                    } else if (['checkbox', 'radio'].indexOf(element.type) === -1 || element.checked) {\n                        let valueResult;\n                        if (this.isManagedByAutoNumeric(element)) {\n                            let anObject;\n                            switch (formatType) {\n                                case 'unformatted':\n                                    anObject = this.getAutoNumericElement(element);\n                                    if (!AutoNumericHelper.isNull(anObject)) {\n                                        valueResult = this.unformat(element, anObject.getSettings());\n                                    }\n\n                                    break;\n                                case 'localized':\n                                    anObject = this.getAutoNumericElement(element);\n                                    if (!AutoNumericHelper.isNull(anObject)) {\n                                        // Here I need to clone the setting object, otherwise I would modify it when changing the `outputFormat` option value\n                                        const currentSettings = AutoNumericHelper.cloneObject(anObject.getSettings());\n                                        if (!AutoNumericHelper.isNull(forcedOutputFormat)) {\n                                            currentSettings.outputFormat = forcedOutputFormat;\n                                        }\n\n                                        valueResult = this.localize(element, currentSettings);\n                                    }\n\n                                    break;\n                                case 'formatted':\n                                default:\n                                    valueResult = element.value;\n                            }\n                        } else {\n                            valueResult = element.value;\n                        }\n\n                        if (AutoNumericHelper.isUndefined(valueResult)) {\n                            AutoNumericHelper.throwError('This error should never be hit. If it has, something really wrong happened!');\n                        }\n\n                        if (intoAnArray) {\n                            result.push({ name: element.name, value: valueResult });\n                        } else { // into a string\n                            result.push(`${encodeURIComponent(element.name)}=${encodeURIComponent(valueResult)}`);\n                        }\n                    }\n                }\n            });\n        }\n\n        let finalResult;\n\n        if (intoAnArray) {\n            // Result as an Array\n            // Note: `serializedSpaceCharacter` does not affect the array result since we do not change the space character for this one\n            finalResult = result;\n        } else {\n            // Result as a string\n            finalResult = result.join('&');\n\n            if ('+' === serializedSpaceCharacter) {\n                finalResult = finalResult.replace(/%20/g, '+');\n            }\n        }\n\n        return finalResult;\n    }\n\n    /**\n     * Serialize the form values to a string, outputting numeric strings for each AutoNumeric-managed element values.\n     *\n     * @param {HTMLFormElement} form\n     * @param {string} serializedSpaceCharacter\n     * @returns {string}\n     */\n    static _serializeNumericString(form, serializedSpaceCharacter = '+') {\n        return this._serialize(form, false, 'unformatted', serializedSpaceCharacter);\n    }\n\n    /**\n     * Serialize the form values to a string, outputting the formatted value as strings for each AutoNumeric-managed elements.\n     *\n     * @param {HTMLFormElement} form\n     * @param {string} serializedSpaceCharacter\n     * @returns {string}\n     */\n    static _serializeFormatted(form, serializedSpaceCharacter = '+') {\n        return this._serialize(form, false, 'formatted', serializedSpaceCharacter);\n    }\n\n    /**\n     * Serialize the form values to a string, outputting localized strings for each AutoNumeric-managed element values.\n     *\n     * @param {HTMLFormElement} form\n     * @param {string} serializedSpaceCharacter\n     * @param {string|null} forcedOutputFormat If set, then this is the format that is used for the localization, instead of the default `outputFormat` option.\n     * @returns {string}\n     */\n    static _serializeLocalized(form, serializedSpaceCharacter = '+', forcedOutputFormat = null) {\n        return this._serialize(form, false, 'localized', serializedSpaceCharacter, forcedOutputFormat);\n    }\n\n    /**\n     * Generate an Array with the form values, outputting numeric strings for each AutoNumeric-managed element values.\n     *\n     * @param {HTMLFormElement} form\n     * @param {string} serializedSpaceCharacter\n     * @returns {Array}\n     */\n    static _serializeNumericStringArray(form, serializedSpaceCharacter = '+') {\n        return this._serialize(form, true, 'unformatted', serializedSpaceCharacter);\n    }\n\n    /**\n     * Generate an Array with the form values, outputting the formatted value as strings for each AutoNumeric-managed elements.\n     *\n     * @param {HTMLFormElement} form\n     * @param {string} serializedSpaceCharacter\n     * @returns {Array}\n     */\n    static _serializeFormattedArray(form, serializedSpaceCharacter = '+') {\n        return this._serialize(form, true, 'formatted', serializedSpaceCharacter);\n    }\n\n    /**\n     * Generate an Array with the form values, outputting localized strings for each AutoNumeric-managed element values.\n     *\n     * @param {HTMLFormElement} form\n     * @param {string} serializedSpaceCharacter\n     * @param {string|null} forcedOutputFormat If set, then this is the format that is used for the localization, instead of the default `outputFormat` option.\n     * @returns {Array}\n     */\n    static _serializeLocalizedArray(form, serializedSpaceCharacter = '+', forcedOutputFormat = null) {\n        return this._serialize(form, true, 'localized', serializedSpaceCharacter, forcedOutputFormat);\n    }\n}\n\n/**\n * Initialize multiple DOM elements in one call (and possibly pass multiple values that will be mapped to each DOM element).\n *\n * @example\n * // Init multiple DOM elements in one call (and possibly pass multiple values that will be mapped to each DOM element)\n * [anElement1, anElement2, anElement3] = AutoNumeric.multiple([domElement1, domElement2, domElement3], { options });\n * [anElement1, anElement2, anElement3] = AutoNumeric.multiple([domElement1, domElement2, domElement3], [{ options }, 'euroPos']);\n * [anElement1, anElement2, anElement3] = AutoNumeric.multiple([domElement1, domElement2, domElement3], 12345.789, { options });\n * [anElement1, anElement2, anElement3] = AutoNumeric.multiple([domElement1, domElement2, domElement3], 12345.789, [{ options }, 'euroPos']);\n * [anElement1, anElement2, anElement3] = AutoNumeric.multiple.french([domElement1, domElement2, domElement3], [12345.789, 234.78, null], { options });\n * [anElement1, anElement2, anElement3] = AutoNumeric.multiple.french([domElement1, domElement2, domElement3], [12345.789, 234.78, null], [{ options }, 'euroPos']);\n *\n * // Special case, if a <form> element is passed (or any other 'parent' (or 'root') DOM element), then autoNumeric will initialize each child `<input>` elements recursively, ignoring those referenced in the `exclude` attribute\n * [anElement1, anElement2] = AutoNumeric.multiple({ rootElement: formElement }, { options });\n * [anElement1, anElement2] = AutoNumeric.multiple({ rootElement: formElement, exclude : [hiddenElement, tokenElement] }, { options });\n * [anElement1, anElement2] = AutoNumeric.multiple({ rootElement: formElement, exclude : [hiddenElement, tokenElement] }, [12345.789, null], { options });\n *\n * // If you want to select multiple elements via a css selector, then you must use the `multiple` function. Under the hood `QuerySelectorAll` is used.\n * [anElement1, anElement2] = AutoNumeric.multiple('.myCssClass > input', { options }); // This always return an Array, even if there is only one element selected\n * [anElement1, anElement2] = AutoNumeric.multiple('.myCssClass > input', [null, 12345.789], { options }); // Idem above, but with passing the initial values too\n *\n * @param {string|Array|{ rootElement: HTMLElement }|{ rootElement: HTMLElement, exclude: Array<HTMLInputElement>}} arg1\n * @param {number|Array|object|null} initialValue\n * @param {object|Array|null} options\n * @returns {Array}\n */\nAutoNumeric.multiple = (arg1, initialValue = null, options = null) => {\n    const result = [];\n\n    // Analyze the arguments and transform them to make them exploitable\n    if (AutoNumericHelper.isObject(initialValue)) {\n        // If the user gave an option object as the second argument, instead of the initial values\n        options = initialValue;\n        initialValue = null;\n    }\n\n    if (AutoNumericHelper.isString(arg1)) {\n        arg1 = [... document.querySelectorAll(arg1)]; // Convert a NodeList to an Array (cf. http://stackoverflow.com/a/37297292/2834898)\n    } else if (AutoNumericHelper.isObject(arg1)) {\n        if (!Object.prototype.hasOwnProperty.call(arg1, 'rootElement')) {\n            AutoNumericHelper.throwError(`The object passed to the 'multiple' function is invalid ; no 'rootElement' attribute found.`);\n        }\n\n        // Retrieve the DOM element list from the given <form> element\n        const elements = [... arg1.rootElement.querySelectorAll('input')];\n        if (Object.prototype.hasOwnProperty.call(arg1, 'exclude')) {\n            if (!Array.isArray(arg1.exclude)) {\n                AutoNumericHelper.throwError(`The 'exclude' array passed to the 'multiple' function is invalid.`);\n            }\n\n            // Filter out the excluded elements\n            arg1 = AutoNumericHelper.filterOut(elements, arg1.exclude);\n        } else {\n            arg1 = elements;\n        }\n    } else if (!AutoNumericHelper.isArray(arg1)) {\n        AutoNumericHelper.throwError(`The given parameters to the 'multiple' function are invalid.`);\n    }\n\n    if (arg1.length === 0) {\n        let showWarnings = true;\n        if (!AutoNumericHelper.isNull(options) && AutoNumericHelper.isBoolean(options.showWarnings)) {\n            showWarnings = options.showWarnings;\n        }\n\n        AutoNumericHelper.warning(`No valid DOM elements were given hence no AutoNumeric objects were instantiated.`, showWarnings);\n\n        return [];\n    }\n\n    // At this point, we know `arg1` is an array of DOM elements\n\n    // This function can be initialized with two types of array, one for the initial values, and/or one for the options.\n    // So we need to find out if an array is detected if the user passed an array of initial values, or an array of options\n    // Therefore, we analyze the content of the arrays for the second and third arguments\n    // ...for the second parameter :\n    const isInitialValueArray = AutoNumericHelper.isArray(initialValue);\n    const isInitialValueArrayAndNotEmpty = isInitialValueArray && initialValue.length >= 1;\n    let secondArgumentIsInitialValueArray = false;\n    let secondArgumentIsOptionArray = false;\n    // Any of the arrays can be either an array of initial values, or an array of option object/pre-defined option names\n    if (isInitialValueArrayAndNotEmpty) {\n        const typeOfFirstArrayElement = typeof Number(initialValue[0]);\n        // First we test the second argument\n        secondArgumentIsInitialValueArray = typeOfFirstArrayElement === 'number' && !isNaN(Number(initialValue[0]));\n\n        if (!secondArgumentIsInitialValueArray) {\n            // If the second argument is an array, but not an array of values, check if it's instead an array of options/pre-defined option names\n            if (typeOfFirstArrayElement === 'string' || isNaN(typeOfFirstArrayElement) || typeOfFirstArrayElement === 'object') {\n                secondArgumentIsOptionArray = true;\n            }\n        }\n    }\n\n    // ...for the third parameter :\n    const isOptionsArrayAndNotEmpty = AutoNumericHelper.isArray(options) && options.length >= 1;\n    let thirdArgumentIsOptionArray = false;\n    if (isOptionsArrayAndNotEmpty) {\n        const typeOfFirstArrayElement = typeof options[0];\n        if (typeOfFirstArrayElement === 'string' || typeOfFirstArrayElement === 'object') {\n            // If the third argument is an array of options/pre-defined option names\n            thirdArgumentIsOptionArray = true;\n        }\n    }\n\n    // Depending on our findings, we generate the options variable to use `optionsToUse`, either directly, or merged\n    let optionsToUse;\n    if (secondArgumentIsOptionArray) {\n        optionsToUse = AutoNumeric.mergeOptions(initialValue);\n    } else if (thirdArgumentIsOptionArray) {\n        optionsToUse = AutoNumeric.mergeOptions(options);\n    } else {\n        optionsToUse = options;\n    }\n\n\n    // Initialize the initial values\n    const isInitialValueNumber = AutoNumericHelper.isNumber(initialValue);\n    let initialValueArraySize;\n    if (secondArgumentIsInitialValueArray) {\n        initialValueArraySize = initialValue.length;\n    }\n\n    // Instantiate each AutoNumeric objects\n    arg1.forEach((domElement, index) => {\n        if (isInitialValueNumber) {\n            // We set the same value for each element\n            result.push(new AutoNumeric(domElement, initialValue, optionsToUse));\n        } else if (secondArgumentIsInitialValueArray && index <= initialValueArraySize) {\n            result.push(new AutoNumeric(domElement, initialValue[index], optionsToUse));\n        } else {\n            result.push(new AutoNumeric(domElement, null, optionsToUse));\n        }\n    });\n\n    return result;\n};\n", "/**\n * Options for AutoNumeric.js\n * @author Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n * @copyright © 2023 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport AutoNumeric from './AutoNumeric';\n\n/**\n * Options values enumeration\n */\nAutoNumeric.options = {\n    /* Defines if the decimal places should be padded with zeroes\n     * `true`     : always pad decimals with zeros (ie. '12.3400')\n     * `false`    : never pad with zeros (ie. '12.34')\n     * `'floats'` : pad with zeroes only when there are decimals (ie. '12' and '12.3400')\n     * Note: setting allowDecimalPadding to 'false' will override the 'decimalPlaces' setting.\n     */\n    allowDecimalPadding: {\n        always: true,\n        never : false,\n        floats: 'floats',\n    },\n\n    /* Defines if the decimal character or decimal character alternative should be accepted when there is already a decimal character shown in the element.\n     * If set to `true`, any decimal character input will be accepted and will subsequently modify the decimal character position, as well as the `rawValue`.\n     * If set to `false`, the decimal character and its alternative key will be dropped as before. This is the default setting.\n     */\n    alwaysAllowDecimalCharacter: {\n        alwaysAllow: true,\n        doNotAllow: false,\n    },\n\n    /* Defines where should be positioned the caret on focus\n     * null : Do not enforce any caret positioning on focus (this is needed when using `selectOnFocus`)\n     * `'start'` : put the caret of the far left side of the value (excluding the positive/negative sign and currency symbol, if any)\n     * `'end'` : put the caret of the far right side of the value (excluding the positive/negative sign and currency symbol, if any)\n     * `'decimalLeft'` : put the caret of the left of the decimal character if any\n     * `'decimalRight'` : put the caret of the right of the decimal character if any\n     */\n    caretPositionOnFocus: {\n        start                 : 'start',\n        end                   : 'end',\n        decimalLeft           : 'decimalLeft',\n        decimalRight          : 'decimalRight',\n        doNoForceCaretPosition: null,\n    },\n\n    /* Defines if a local list of AutoNumeric objects should be kept when initializing this object.\n     * This list is used by the `global.*` functions.\n     */\n    createLocalList: {\n        createList     : true,\n        doNotCreateList: false,\n    },\n\n    /* Defines the currency symbol string.\n     * It can be a string of more than one character (allowing for instance to use a space on either side of it, example: '$ ' or ' $')\n     * cf. https://en.wikipedia.org/wiki/Currency_symbol\n     */\n    currencySymbol: {\n        none          : '',\n        currencySign  : '¤',\n        austral       : '₳', // ARA\n        australCentavo: '¢',\n        baht          : '฿', // THB\n        cedi          : '₵', // GHS\n        cent          : '¢',\n        colon         : '₡', // CRC\n        cruzeiro      : '₢', // BRB - Not used anymore since 1993\n        dollar        : '$',\n        dong          : '₫', // VND\n        drachma       : '₯', // GRD (or 'Δρχ.' or 'Δρ.')\n        dram          : '​֏', // AMD\n        european      : '₠', // XEU (old currency before the Euro)\n        euro          : '€', // EUR\n        florin        : 'ƒ',\n        franc         : '₣', // FRF\n        guarani       : '₲', // PYG\n        hryvnia       : '₴', // грн\n        kip           : '₭', // LAK\n        att           : 'ອັດ', // cents of the Kip\n        lepton        : 'Λ.', // cents of the Drachma\n        lira          : '₺', // TRY\n        liraOld       : '₤',\n        lari          : '₾', // GEL\n        mark          : 'ℳ',\n        mill          : '₥',\n        naira         : '₦', // NGN\n        peseta        : '₧',\n        peso          : '₱', // PHP\n        pfennig       : '₰', // cents of the Mark\n        pound         : '£',\n        real          : 'R$ ', // Brazilian real\n        riel          : '៛', // KHR\n        ruble         : '₽', // RUB\n        rupee         : '₹', // INR\n        rupeeOld      : '₨',\n        shekel        : '₪',\n        shekelAlt     : 'ש״ח‎‎',\n        taka          : '৳', // BDT\n        tenge         : '₸', // KZT\n        togrog        : '₮', // MNT\n        won           : '₩',\n        yen           : '¥',\n    },\n\n    /* Defines where the currency symbol should be placed (before of after the numbers)\n     * for prefix currencySymbolPlacement: \"p\" (default)\n     * for suffix currencySymbolPlacement: \"s\"\n     */\n    currencySymbolPlacement: {\n        prefix: 'p',\n        suffix: 's',\n    },\n\n    /* Defines what decimal separator character is used\n     */\n    decimalCharacter: {\n        comma                    : ',',\n        dot                      : '.',\n        middleDot                : '·',\n        arabicDecimalSeparator   : '٫',\n        decimalSeparatorKeySymbol: '⎖',\n    },\n\n    /* Allow to declare an alternative decimal separator which is automatically replaced by `decimalCharacter` when typed.\n     * This is used by countries that use a comma ',' as the decimal character and have keyboards with a numeric pads that have\n     * a period 'full stop' as the decimal character (France or Spain for instance).\n     */\n    decimalCharacterAlternative: {\n        none : null,\n        comma: ',',\n        dot  : '.',\n    },\n\n    /* Defines the default number of decimal places to show on the formatted value, and keep for the precision.\n     * Incidentally, since we need to be able to show that many decimal places, this also defines the raw value precision by default.\n     */\n    decimalPlaces: {\n        none : 0,\n        one  : 1,\n        two  : 2,\n        three: 3,\n        four : 4,\n        five : 5,\n        six  : 6,\n    },\n\n    /* Defines how many decimal places should be kept for the raw value (ie. This is the precision for float values).\n     *\n     * If this option is set to `null` (which is the default), then the value of `decimalPlaces` is used for `decimalPlacesRawValue` as well.\n     * Note: Setting this to a lower number of decimal places than the one to be shown will lead to confusion for the users.\n     */\n    decimalPlacesRawValue: {\n        useDefault: null,\n        none      : 0,\n        one       : 1,\n        two       : 2,\n        three     : 3,\n        four      : 4,\n        five      : 5,\n        six       : 6,\n    },\n\n    /* Defines how many decimal places should be visible when the element is unfocused.\n     * If this is set to `null`, then this option is ignored, and the `decimalPlaces` option value will be used instead.\n     * This means this is optional ; if omitted the decimal places will be the same when the input has the focus.\n     *\n     * This option can be used in conjonction with the two other `scale*` options, which allows to display a different formatted value when the element is unfocused, while another formatted value is shown when focused.\n     * For those `scale*` options to have any effect, `divisorWhenUnfocused` must not be `null`.\n     */\n    decimalPlacesShownOnBlur: {\n        useDefault: null,\n        none      : 0,\n        one       : 1,\n        two       : 2,\n        three     : 3,\n        four      : 4,\n        five      : 5,\n        six       : 6,\n    },\n\n    /* Defines how many decimal places should be visible when the element has the focus.\n     * If this is set to `null`, then this option is ignored, and the `decimalPlaces` option value will be used instead.\n     *\n     * Example:\n     * For instance if `decimalPlacesShownOnFocus` is set to `5` and the default number of decimal places is `2`, then on focus `1,000.12345` will be shown, while without focus `1,000.12` will be set back.\n     * Note 1: the results depends on the rounding method used.\n     * Note 2: the `getNumericString()` method returns the extended decimal places\n     */\n    decimalPlacesShownOnFocus: {\n        useDefault: null,\n        none      : 0,\n        one       : 1,\n        two       : 2,\n        three     : 3,\n        four      : 4,\n        five      : 5,\n        six       : 6,\n    },\n\n    /* Helper option for ASP.NET postback\n     * This should be set as the value of the unformatted default value\n     * examples:\n     * no default value=\"\" {defaultValueOverride: \"\"}\n     * value=1234.56 {defaultValueOverride: '1234.56'}\n     */\n    defaultValueOverride: {\n        doNotOverride: null,\n    },\n\n    /* Defines how many numbers should be grouped together (usually for the thousand separator)\n     * - \"2\",  results in 99,99,99,99 Group by two\n     * - \"2t\", results in 99,99,99,999 India's lakhs\n     * - \"2s\", results in 99,999,99,99,999 India's lakhs scaled\n     * - \"3\",  results in 999,999,999 (default)\n     * - \"4\",  results in 9999,9999,9999 used in some Asian countries\n     * Note: This option does not accept other grouping choice.\n     */\n    digitalGroupSpacing: {\n        two      : '2',\n        twoThree : '2t',\n        twoScaled: '2s',\n        three    : '3',\n        four     : '4',\n    },\n\n    /* Defines the thousand grouping separator character\n     * Example : If `'.'` is set, then you'll get `'1.234.567'`\n     */\n    digitGroupSeparator: {\n        comma                   : ',',\n        dot                     : '.',\n        normalSpace             : ' ',\n        thinSpace               : '\\u2009',\n        narrowNoBreakSpace      : '\\u202f',\n        noBreakSpace            : '\\u00a0',\n        noSeparator             : '',\n        apostrophe              : `'`,\n        arabicThousandsSeparator: '٬',\n        dotAbove                : '˙',\n        privateUseTwo           : '’', // \\u0092\n    },\n\n    /* The `divisorWhenUnfocused` divide the element value on focus.\n     * On blur, the element value is multiplied back.\n     *\n     * Example : Display percentages using { divisorWhenUnfocused: 100 } (or directly in the Html with `<input data-divisor-when-unfocused=\"100\">`)\n     * The divisor value does not need to be an integer, but please understand that Javascript has limited accuracy in math ; use with caution.\n     * Note: The `getNumericString` method returns the full value, including the 'hidden' decimals.\n     */\n    divisorWhenUnfocused: {\n        none      : null,\n        percentage: 100,\n        permille  : 1000,\n        basisPoint: 10000,\n    },\n\n    /* Defines what should be displayed in the element if the raw value is an empty string ('').\n     * - 'focus'  : The currency sign is displayed when the input receives focus (default)\n     * - 'press'  : The currency sign is displayed whenever a key is being pressed\n     * - 'always' : The currency sign is always displayed\n     * - 'zero'   : A zero is displayed ('rounded' with or without a currency sign) if the input has no value on focus out\n     * - 'min'    : The minimum value is displayed if the input has no value on focus out\n     * - 'max'    : The maximum value is displayed if the input has no value on focus out\n     * - 'null'   : When the element is empty, the `rawValue` and the element value/text is set to `null`. This also allows to set the value to `null` using `anElement.set(null)`.\n     */\n    emptyInputBehavior: {\n        focus : 'focus',\n        press : 'press',\n        always: 'always',\n        zero  : 'zero',\n        min   : 'min',\n        max   : 'max',\n        null  : 'null',\n    },\n\n    /* Defines if the custom and native events triggered by AutoNumeric should bubble up or not.\n     */\n    eventBubbles: {\n        bubbles: true,\n        doesNotBubble: false,\n    },\n\n    /* Defines if the custom and native events triggered by AutoNumeric should be cancelable.\n     */\n    eventIsCancelable: {\n        isCancelable: true,\n        isNotCancelable: false,\n    },\n\n    /* This option is the 'strict mode' (aka 'debug' mode), which allows autoNumeric to strictly analyse the options passed, and fails if an unknown options is used in the settings object.\n     * You should set that to `true` if you want to make sure you are only using 'pure' autoNumeric settings objects in your code.\n     * If you see uncaught errors in the console and your code starts to fail, this means somehow those options gets polluted by another program (which usually happens when using frameworks).\n     */\n    failOnUnknownOption: {\n        fail  : true,\n        ignore: false,\n    },\n\n    /* Determine if the default value will be formatted on initialization.\n     */\n    formatOnPageLoad: {\n        format     : true, // automatically formats the default value on initialization\n        doNotFormat: false, // will not format the default value on initialization\n    },\n\n    /* Defines if the 'formula mode' can be activated by the user.\n     * If set to `true`, then the user can enter the formula mode by entering the '=' character.\n     * He will then be allowed to enter any simple math formula using numeric characters as well as the following operators +, -, *, /, ( and ).\n     * The formula mode is closed when the user either validate their math expression using the `Enter` key, or when the element is blurred.\n     * If the formula is invalid, the previous valid `rawValue` is set back, and the `autoNumeric:invalidFormula` event is sent.\n     * When a valid formula is accepted, then its result is `set()`, and the `autoNumeric:validFormula` event is sent.\n     *\n     * By default, this mode is disabled.\n     */\n    formulaMode: {\n        enabled : true,\n        disabled: false,\n    },\n\n    /* Set the undo/redo history table size.\n     * Each record keeps the raw value as well and the last known caret/selection positions.\n     */\n    historySize: {\n        verySmall: 5,\n        small    : 10,\n        medium   : 20,\n        large    : 50,\n        veryLarge: 100,\n        insane   : Number.MAX_SAFE_INTEGER,\n    },\n\n    /* Defines the name of the CSS class to use on contenteditable-enabled elements when the value is invalid\n     * This is not used when the HTML element used is an input.\n     */\n    invalidClass: 'an-invalid',\n\n    /* Allow the user to 'cancel' and undo the changes he made to the given autonumeric-managed element, by pressing the 'Escape' key.\n     * Whenever the user 'validate' the input (either by hitting 'Enter', or blurring the element), the new value is saved for subsequent 'cancellation'.\n     *\n     * The process :\n     *   - save the input value on focus\n     *   - if the user change the input value, and hit `Escape`, then the initial value saved on focus is set back\n     *   - on the other hand if the user either have used `Enter` to validate (`Enter` throws a change event) his entries, or if the input value has been changed by another script in the mean time, then we save the new input value\n     *   - on a successful 'cancel', select the whole value (while respecting the `selectNumberOnly` option)\n     *   - bonus; if the value has not changed, hitting 'Esc' just select all the input value (while respecting the `selectNumberOnly` option)\n     */\n    isCancellable: {\n        cancellable   : true,\n        notCancellable: false,\n    },\n\n    /* Controls the leading zero behavior\n     * - 'allow' : allows leading zeros to be entered. Zeros will be truncated when entering additional digits. On focusout zeros will be deleted\n     * - 'deny'  : allows only one leading zero on values that are between 1 and -1\n     * - 'keep'  : allows leading zeros to be entered. on focusout zeros will be retained\n     */\n    leadingZero: {\n        allow: 'allow',\n        deny : 'deny',\n        keep : 'keep',\n    },\n\n    /* Defines the maximum possible value a user can enter.\n     * Notes:\n     * - this value must be a string and use the period for the decimal point\n     * - this value needs to be larger than `minimumValue`\n     */\n    maximumValue: {\n        tenTrillions          : '10000000000000', // 10000 billions\n        oneBillion            : '1000000000',\n        zero                  : '0',\n    },\n\n    /* Defines the minimum possible value a user can enter.\n     * Notes:\n     * - this value must be a string and use the period for the decimal point\n     * - this value needs to be smaller than `maximumValue`\n     * - if this is superior to 0, then you'll effectively prevent your user to entirely delete the content of your element\n     */\n    minimumValue: {\n        tenTrillions          : '-10000000000000', // 10000 billions\n        oneBillion            : '-1000000000',\n        zero                  : '0',\n    },\n\n    /* Allows the user to increment or decrement the element value with the up and down arrow keys.\n     * The behavior is similar to the mouse wheel one.\n     * The up and down arrow keys behavior can be modified by the `upDownStep` option.\n     * This `upDownStep` option can be used in two ways, either by setting:\n     * - a 'fixed' step value (`upDownStep : 1000`), or\n     * - the 'progressive' string (`upDownStep : 'progressive'`), which will then activate a special mode where the step is automatically calculated based on the element value size.\n     */\n    modifyValueOnUpDownArrow: {\n        modifyValue: true,\n        doNothing  : false,\n    },\n\n    /* Allows the user to increment or decrement the element value with the mouse wheel.\n     * The behavior is similar to the up/down arrow one.\n     * The wheel behavior can be modified by the `wheelStep` option.\n     * This `wheelStep` option can be used in two ways, either by setting:\n     * - a 'fixed' step value (`wheelStep : 1000`), or\n     * - the 'progressive' string (`wheelStep : 'progressive'`), which will then activate a special mode where the step is automatically calculated based on the element value size.\n     *\n     * Note :\n     * You can activate/deactivate the wheel event for each `wheelOn` option value by using the 'Shift' modifier key while using the mouse wheel.\n     */\n    modifyValueOnWheel: {\n        modifyValue: true,\n        doNothing  : false,\n    },\n\n    /* Adds brackets on negative values (ie. transforms '-$ 999.99' to '($999.99)')\n     * Those brackets are visible only when the field does NOT have the focus.\n     * The left and right symbols should be enclosed in quotes and separated by a comma.\n     */\n    negativeBracketsTypeOnBlur: {\n        parentheses           : '(,)',\n        brackets              : '[,]',\n        chevrons              : '<,>',\n        curlyBraces           : '{,}',\n        angleBrackets         : '〈,〉',\n        japaneseQuotationMarks: '｢,｣',\n        halfBrackets          : '⸤,⸥',\n        whiteSquareBrackets   : '⟦,⟧',\n        quotationMarks        : '‹,›',\n        guillemets            : '«,»',\n        none                  : null, // This is the default value, which deactivate this feature\n    },\n\n    /* Placement of the negative/positive sign relative to the `currencySymbol` option.\n     *\n     * Example:\n     * // Default values\n     * -1,234.56  => default no options required\n     * $-1,234.56 => {currencySymbol: \"$\", negativePositiveSignPlacement: \"r\"} // Default if negativePositiveSignPlacement is 'null' and currencySymbol is not empty\n     *\n     * // Sign on the left hand side of the whole number\n     * -$1,234.56 => {currencySymbol: \"$\"} or {currencySymbol: \"$\", negativePositiveSignPlacement: \"l\"}\n     * -1,234.56$ => {currencySymbol: \"$\", currencySymbolPlacement: \"s\", negativePositiveSignPlacement: \"p\"} // Default if negativePositiveSignPlacement is 'null' and currencySymbol is not empty\n     *\n     * // Sign on the right hand side of the whole number\n     * 1,234.56-  => {negativePositiveSignPlacement: \"s\"}\n     * $1,234.56- => {currencySymbol: \"$\", negativePositiveSignPlacement: \"s\"}\n     * 1,234.56-$ => {currencySymbol: \"$\", currencySymbolPlacement: \"s\"}\n     * 1,234.56$- => {currencySymbol: \"$\", currencySymbolPlacement: \"s\", negativePositiveSignPlacement: \"r\"}\n     */\n    negativePositiveSignPlacement: {\n        prefix: 'p',\n        suffix: 's',\n        left  : 'l',\n        right : 'r',\n        none  : null,\n    },\n\n    /* Defines the negative sign symbol.\n     * It can be a string of only one character.\n     */\n    negativeSignCharacter: {\n        hyphen         : '-',\n        minus          : '−',\n        heavyMinus     : '➖',\n        fullWidthHyphen: '－',\n        circledMinus   : '⊖',\n        squaredMinus   : '⊟',\n        triangleMinus  : '⨺',\n        plusMinus      : '±',\n        minusPlus      : '∓',\n        dotMinus       : '∸',\n        minusTilde     : '≂',\n        not            : '¬',\n    },\n\n    /*\n     * Defines if the negative sign should be toggled when hitting the negative or positive key multiple times.\n     * When `toggle` is used, using the same '-' on '+' key will toggle between a positive and negative value.\n     * When `doNotToggle` is used, using '-' will always set the value negative, and '+' will always set the value positive.\n     */\n    negativePositiveSignBehavior: {\n        toggle     : true,\n        doNotToggle: false,\n    },\n\n    /* Defines if the element should have event listeners activated on it.\n     * By default, those event listeners are only added to <input> elements and html element with the `contenteditable` attribute set to `true`, but not on the other html tags.\n     * This allows to initialize elements without any event listeners.\n     * Warning: Since AutoNumeric will not check the input content after its initialization, using some autoNumeric methods afterwards *will* probably leads to formatting problems.\n     */\n    noEventListeners: {\n        noEvents : true,\n        addEvents: false,\n    },\n\n    /* Manage how autoNumeric react when the user tries to paste an invalid number.\n     * - 'error'    : (This is the default behavior) The input value is not changed and an error is output in the console.\n     * - 'ignore'   : idem than 'error', but fail silently without outputting any error/warning in the console.\n     * - 'clamp'    : if the pasted value is either too small or too big regarding the minimumValue and maximumValue range, then the result is clamped to those limits.\n     * - 'truncate' : autoNumeric will insert as many pasted numbers it can at the initial caret/selection, until everything is pasted, or the range limit is hit.\n     *                The non-pasted numbers are dropped and therefore not used at all.\n     * - 'replace'  : autoNumeric will first insert as many pasted numbers it can at the initial caret/selection, then if the range limit is hit, it will try\n     *                to replace one by one the remaining initial numbers (on the right side of the caret) with the rest of the pasted numbers.\n     *\n     * Note 1 : A paste content starting with a negative sign '-' will be accepted anywhere in the input, and will set the resulting value as a negative number\n     * Note 2 : A paste content starting with a number will be accepted, even if the rest is gibberish (ie. '123foobar456').\n     *          Only the first number will be used (here '123').\n     * Note 3 : The paste event works with the `decimalPlacesShownOnFocus` option too.\n     */\n    onInvalidPaste: {\n        error   : 'error',\n        ignore  : 'ignore',\n        clamp   : 'clamp',\n        truncate: 'truncate',\n        replace : 'replace',\n    },\n\n    /* Defines how the value should be formatted when wanting a 'localized' version of it.\n     * - null or 'string' => 'nnnn.nn' or '-nnnn.nn' as text type. This is the default behavior.\n     * - 'number'         => nnnn.nn or -nnnn.nn as a Number (Warning: this works only for integers inferior to Number.MAX_SAFE_INTEGER)\n     * - ',' or '-,'      => 'nnnn,nn' or '-nnnn,nn'\n     * - '.-'             => 'nnnn.nn' or 'nnnn.nn-'\n     * - ',-'             => 'nnnn,nn' or 'nnnn,nn-'\n     *\n     * Note: The hyphen '-' is translated to the custom negative sign defined in `negativeSignCharacter`\n     */\n    outputFormat: {\n        string       : 'string',\n        number       : 'number',\n        dot          : '.',\n        negativeDot  : '-.',\n        comma        : ',',\n        negativeComma: '-,',\n        dotNegative  : '.-',\n        commaNegative: ',-',\n        none         : null,\n    },\n\n    /* Defines if AutoNumeric should let the user override the minimum and/or maximum limits when he types numbers in the element.\n     * - 'ceiling' Strictly adheres to `maximumValue` and ignores the `minimumValue` settings\n     *             It allows the user to enter anything between -∞ `and maximumValue`\n     *             If `maximumValue` is less than 0, then it will prevent the user emptying the field or typing value above `maximumValue`, making sure the value entered is always valid\n     * - 'floor'   Strictly adheres to `minimumValue` and ignores the `maximumValue` settings\n     *             It allows the user to enter anything between `minimumValue` and +∞\n     *             If `minimumValue` is higher than 0, then it will prevent the user emptying the field or typing value below `minimumValue`, making sure the value entered is always valid\n     * - 'ignore'  Ignores both the `minimumValue` and `maximumValue` settings\n     *             When using this option, the field will always be valid range-wise\n     * - 'invalid' The user can temporarily type out-of-bound values. In doing so, the invalid state is set on the field.\n     *             Whenever an invalid value is typed, an 'autoNumeric:invalidValue' event is sent\n     *             When the value is correctly set back within the limit boundaries, the invalid state is removed, and the 'autoNumeric:correctedValue' event is sent\n     * - 'doNotOverride' Strictly adheres to the `maximumValue` and `minimumValue` settings\n     *                   This is the default behavior\n     *                   If `0` is out of the min/max range, this will prevent the user clearing the input field, making sure the value entered is always valid\n     */\n    overrideMinMaxLimits: {\n        ceiling      : 'ceiling',\n        floor        : 'floor',\n        ignore       : 'ignore',\n        invalid      : 'invalid',\n        doNotOverride: null,\n    },\n\n    /* Defines the positive sign symbol.\n     * It can be a string of only one character.\n     * This is shown only if `showPositiveSign` is set to `true`.\n     */\n    positiveSignCharacter: {\n        plus              : '+',\n        fullWidthPlus     : '＋',\n        heavyPlus         : '➕',\n        doublePlus        : '⧺',\n        triplePlus        : '⧻',\n        circledPlus       : '⊕',\n        squaredPlus       : '⊞',\n        trianglePlus      : '⨹',\n        plusMinus         : '±',\n        minusPlus         : '∓',\n        dotPlus           : '∔',\n        altHebrewPlus     : '﬩',\n        normalSpace       : ' ',\n        thinSpace         : '\\u2009',\n        narrowNoBreakSpace: '\\u202f',\n        noBreakSpace      : '\\u00a0',\n    },\n\n    /* The `rawValueDivisor` divides the formatted value shown in the AutoNumeric element and store the result in `rawValue`.\n     * @example { rawValueDivisor: '100' } or <input data-raw-value-divisor=\"100\">\n     * Given the `0.01234` raw value, the formatted value will be displayed as `'1.234'`.\n     * This is useful when displaying percentage for instance, and avoid the need to divide/multiply by 100 between the number shown and the raw value.\n     */\n    rawValueDivisor: {\n        none      : null,\n        percentage: 100,\n        permille  : 1000,\n        basisPoint: 10000,\n    },\n\n    /* Defines if the element (`<input>` or another allowed html tag) should be set as read-only on initialization.\n     * When set to `true`, then:\n     * - the `readonly` html property is added to the <input> element on initialization, or\n     * - the `contenteditable` attribute is set to `false` on non-input elements.\n     */\n    readOnly: {\n        readOnly : true,\n        readWrite: false,\n    },\n\n    /* Defines the rounding method to use.\n     * roundingMethod: \"S\", Round-Half-Up Symmetric (default)\n     * roundingMethod: \"A\", Round-Half-Up Asymmetric\n     * roundingMethod: \"s\", Round-Half-Down Symmetric (lower case s)\n     * roundingMethod: \"a\", Round-Half-Down Asymmetric (lower case a)\n     * roundingMethod: \"B\", Round-Half-Even \"Bankers Rounding\"\n     * roundingMethod: \"U\", Round Up \"Round-Away-From-Zero\"\n     * roundingMethod: \"D\", Round Down \"Round-Toward-Zero\" - same as truncate\n     * roundingMethod: \"C\", Round to Ceiling \"Toward Positive Infinity\"\n     * roundingMethod: \"F\", Round to Floor \"Toward Negative Infinity\"\n     * roundingMethod: \"N05\" Rounds to the nearest .05 => same as \"CHF\" used in 1.9X and still valid\n     * roundingMethod: \"U05\" Rounds up to next .05\n     * roundingMethod: \"D05\" Rounds down to next .05\n     */\n    roundingMethod: {\n        halfUpSymmetric                : 'S',\n        halfUpAsymmetric               : 'A',\n        halfDownSymmetric              : 's',\n        halfDownAsymmetric             : 'a',\n        halfEvenBankersRounding        : 'B',\n        upRoundAwayFromZero            : 'U',\n        downRoundTowardZero            : 'D',\n        toCeilingTowardPositiveInfinity: 'C',\n        toFloorTowardNegativeInfinity  : 'F',\n        toNearest05                    : 'N05',\n        toNearest05Alt                 : 'CHF',\n        upToNext05                     : 'U05',\n        downToNext05                   : 'D05',\n    },\n\n    /* Set to `true` to allow the `decimalPlacesShownOnFocus` value to be saved with sessionStorage\n     * If IE 6 or 7 is detected, the value will be saved as a session cookie.\n     */\n    saveValueToSessionStorage: {\n        save     : true,\n        doNotSave: false,\n    },\n\n    /* Determine if the select all keyboard command will select the complete input text, or only the input numeric value\n     * Note : If the currency symbol is between the numeric value and the negative sign, only the numeric value will be selected\n     */\n    selectNumberOnly: {\n        selectNumbersOnly: true,\n        selectAll        : false,\n    },\n\n    /* Defines if the element value should be selected on focus.\n     * Note: The selection is done using the `selectNumberOnly` option.\n     */\n    selectOnFocus: {\n        select     : true,\n        doNotSelect: false,\n    },\n\n    /* Defines how the serialize functions should treat the spaces.\n     * Those spaces ' ' can either be converted to the plus sign '+', which is the default, or to '%20'.\n     * Both values being valid per the spec (http://www.w3.org/Addressing/URL/uri-spec.html).\n     * Also see the summed up answer on http://stackoverflow.com/a/33939287.\n     *\n     * tl;dr : Spaces should be converted to '%20' before the '?' sign, then converted to '+' after.\n     * In our case since we serialize the query, we use '+' as the default (but allow the user to get back the old *wrong* behavior).\n     */\n    serializeSpaces: {\n        plus   : '+',\n        percent: '%20',\n    },\n\n    /* Defines if the element value should be converted to the raw value on focus (and back to the formatted on blur).\n     * If set to `true`, then autoNumeric remove the thousand separator, currency symbol and suffix on focus.\n     * Example:\n     * If the input value is '$ 1,999.88 suffix', on focus it becomes '1999.88' and back to '$ 1,999.88 suffix' on blur.\n     */\n    showOnlyNumbersOnFocus: {\n        onlyNumbers: true,\n        showAll    : false,\n    },\n\n    /* Allow the positive sign symbol `+` to be displayed for positive numbers.\n     * By default, this positive sign is not shown.\n     * The sign placement is controlled by the 'negativePositiveSignPlacement' option, mimicking the negative sign placement rules.\n     */\n    showPositiveSign: {\n        show: true,\n        hide: false,\n    },\n\n    /* Defines if warnings should be shown in the console.\n     * Those warnings can be ignored, but are usually printed when something could be improved by the user (ie. option conflicts).\n     */\n    showWarnings: {\n        show: true, // All warning are shown\n        hide: false, // No warnings are shown, only the thrown errors\n    },\n\n    /* Defines the rules that calculate the CSS class(es) to apply on the element, based on the raw unformatted value.\n     * This can also be used to call callbacks whenever the `rawValue` is updated.\n     * Important: all callbacks must return `null` if no ranges/userDefined classes are selected\n     * @example\n     * {\n     *     positive   : 'autoNumeric-positive', // Or `null` to not use it\n     *     negative   : 'autoNumeric-negative',\n     *     ranges     : [\n     *         { min: 0, max: 25, class: 'autoNumeric-red' },\n     *         { min: 25, max: 50, class: 'autoNumeric-orange' },\n     *         { min: 50, max: 75, class: 'autoNumeric-yellow' },\n     *         { min: 75, max: Number.MAX_SAFE_INTEGER, class: 'autoNumeric-green' },\n     *     ],\n     *     userDefined: [\n     *         // If 'classes' is a string, set it if `true`, remove it if `false`\n     *         { callback: rawValue => { return true; }, classes: 'thisIsTrue' },\n     *         // If 'classes' is an array with only 2 elements, set the first class if `true`, the second if `false`\n     *         { callback: rawValue => rawValue % 2 === 0, classes: ['autoNumeric-even', 'autoNumeric-odd'] },\n     *         // Return only one index to use on the `classes` array (here, 'class3')\n     *         { callback: rawValue => { return 2; }, classes: ['class1', 'class2', 'class3'] },\n     *         // Return an array of indexes to use on the `classes` array (here, 'class1' and 'class3')\n     *         { callback: rawValue => { return [0, 2]; }, classes: ['class1', 'class2', 'class3'] },\n     *         // If 'classes' is `undefined` or `null`, then the callback is called with the AutoNumeric object passed as a parameter\n     *         { callback: anElement => { return anElement.getFormatted(); } },\n     *     ],\n     * }\n     */\n    styleRules: {\n        none                 : null,\n        positiveNegative     : {\n            positive: 'autoNumeric-positive',\n            negative: 'autoNumeric-negative',\n        },\n        range0To100With4Steps: {\n            ranges: [\n                { min: 0, max: 25, class: 'autoNumeric-red' },\n                { min: 25, max: 50, class: 'autoNumeric-orange' },\n                { min: 50, max: 75, class: 'autoNumeric-yellow' },\n                { min: 75, max: 100, class: 'autoNumeric-green' },\n            ],\n        },\n        evenOdd              : {\n            userDefined: [\n                { callback: rawValue => rawValue % 2 === 0, classes: ['autoNumeric-even', 'autoNumeric-odd'] },\n            ],\n        },\n        rangeSmallAndZero    : {\n            userDefined: [\n                {\n                    callback  : rawValue => {\n                        if (rawValue >= -1 && rawValue < 0) {\n                            return 0;\n                        }\n                        if (Number(rawValue) === 0) {\n                            return 1;\n                        }\n                        if (rawValue > 0 && rawValue <= 1) {\n                            return 2;\n                        }\n\n                        return null;  // In case the rawValue is outside those ranges\n                    },\n                    classes: [\n                        'autoNumeric-small-negative',\n                        'autoNumeric-zero',\n                        'autoNumeric-small-positive',\n                    ],\n                },\n            ],\n        },\n    },\n\n    /* Add a text on the right hand side of the element value.\n     * This suffix text can have any characters in its string, except numeric characters and the negative/positive sign.\n     * Example: ' dollars'\n     */\n    suffixText: {\n        none      : '',\n        percentage: '%',\n        permille  : '‰',\n        basisPoint: '‱',\n    },\n\n    /* The three options (divisorWhenUnfocused, decimalPlacesShownOnBlur & symbolWhenUnfocused) handle scaling of the input when the input does not have focus\n     * Please note that the non-scaled value is held in data and it is advised that you use the `saveValueToSessionStorage` option to ensure retaining the value\n     * [\"divisor\", \"decimal places\", \"symbol\"]\n     * Example: with the following options set {divisorWhenUnfocused: '1000', decimalPlacesShownOnBlur: '1', symbolWhenUnfocused: ' K'}\n     * Example: focusin value \"1,111.11\" focusout value \"1.1 K\"\n     */\n\n    /* The `symbolWhenUnfocused` option is a symbol placed as a suffix when not in focus.\n     * This is optional too.\n     */\n    symbolWhenUnfocused: {\n        none      : null,\n        percentage: '%',\n        permille  : '‰',\n        basisPoint: '‱',\n    },\n\n    /* Defines if the element value should be unformatted when the user hover his mouse over it while holding the `Alt` key.\n     * Unformatting there means that this removes any non-number characters and displays the *raw* value, as understood by Javascript (ie. `12.34` is a valid number, while `12,34` is not).\n     *\n     * We reformat back before anything else if :\n     * - the user focus on the element by tabbing or clicking into it,\n     * - the user releases the `Alt` key, and\n     * - if we detect a mouseleave event.\n     *\n     * We unformat again if :\n     * - while the mouse is over the element, the user hit `Alt` again\n     */\n    unformatOnHover: {\n        unformat     : true,\n        doNotUnformat: false, //TODO Rename to `keepFormat`\n    },\n\n    /* Removes the formatting and use the raw value in each autoNumeric elements of the parent form element, on the form `submit` event.\n     * The output format is a numeric string (nnnn.nn or -nnnn.nn).\n     */\n    unformatOnSubmit: {\n        unformat        : true,\n        keepCurrentValue: false,\n    },\n\n    /* That option is linked to the `modifyValueOnUpDownArrow` one and will only be used if the latter is set to `true`.\n     * This option will modify the up/down arrow behavior and can be used in two ways, either by setting :\n     * - a 'fixed' step value (a positive float or integer number (ex: `1000`)), or\n     * - the `'progressive'` string.\n     *\n     * The 'fixed' mode always increment/decrement the element value by that amount, while respecting the `minimumValue` and `maximumValue` settings.\n     * The 'progressive' mode will increment/decrement the element value based on its current value. The bigger the number, the bigger the step, and vice versa.\n     */\n    upDownStep: {\n        progressive: 'progressive',\n    },\n\n    /* Provides a way for automatically replacing the formatted value with a pre-defined string, when the raw value is equal to a specific value\n     * Here you can specify as many 'conversion' as needed.\n     */\n    valuesToStrings: {\n        none         : null,\n        zeroDash     : {\n            0: '-',\n        },\n        oneAroundZero: {\n            '-1': 'Min',\n            1   : 'Max',\n        },\n    },\n\n    /* Defines if the AutoNumeric element should watch external changes made without using `.set()`, but by using the basic `aNElement.node().value = 42` notation.\n     * If set to `watch`, then AutoNumeric will format the new value using `.set()` internally.\n     * Otherwise it will neither format it, nor save it in the history.\n     */\n    watchExternalChanges: {\n        watch     : true,\n        doNotWatch: false,\n    },\n\n    /* Defines when the wheel event will increment or decrement the element value.\n     * When set to `'focus'`, the AutoNumeric-managed element needs to be focused for the wheel event to change the value.\n     * When set to `'hover'`, using the wheel event while the mouse is hovering the element is sufficient (no focus needed).\n     *\n     * Note :\n     * When `wheelOn` is set to `'focus'`, you can use the 'Shift' modifier key while using the mouse wheel in order to temporarily activate the increment/decrement feature even if the element is not focused.\n     * When `wheelOn` is set to `'hover'`, you can use the 'Shift' modifier key while using the mouse wheel in order to temporarily disable the increment/decrement feature even if the element is not hovered.\n     */\n    wheelOn: {\n        focus: 'focus',\n        hover: 'hover',\n    },\n\n    /* That option is linked to the `modifyValueOnWheel` one and will only be used if the latter is set to `true`.\n     * This option will modify the wheel behavior and can be used in two ways, either by setting :\n     * - a 'fixed' step value (a positive float or integer (ex: number `1000`)), or\n     * - the `'progressive'` string.\n     *\n     * The 'fixed' mode always increment/decrement the element value by that amount, while respecting the `minimumValue` and `maximumValue` settings.\n     * The 'progressive' mode will increment/decrement the element value based on its current value. The bigger the number, the bigger the step, and vice versa.\n     */\n    wheelStep: {\n        progressive: 'progressive',\n    },\n};\n\n/**\n * Simple function that will semi-deep freeze the `AutoNumeric.options` object.\n * By 'semi' it means the nested objects in the `styleRules` option are not frozen.\n * The ones in the `valuesToStrings` are though, since they are much more simple.\n *\n * @param {object} options\n * @returns {ReadonlyArray<any>}\n */\nfunction freezeOptions(options) {\n    // Freeze each property objects\n    Object.getOwnPropertyNames(options).forEach(optionName => {\n        if (optionName === 'valuesToStrings') {\n            const vsProps = Object.getOwnPropertyNames(options.valuesToStrings);\n            vsProps.forEach(valuesToStringObjectName => {\n                if (options.valuesToStrings[valuesToStringObjectName] !== null) {\n                    Object.freeze(options.valuesToStrings[valuesToStringObjectName]);\n                }\n            });\n        } else if (optionName !== 'styleRules') {\n            if (options[optionName] !== null) {\n                Object.freeze(options[optionName]);\n            }\n        }\n    });\n\n    // Then freeze the options object globally\n    return Object.freeze(options);\n}\n\nfreezeOptions(AutoNumeric.options);\nObject.defineProperty(AutoNumeric, 'options', { configurable: false, writable: false });\n\nexport default {};\n", "/**\n * Options for AutoNumeric.js\n * @author Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n * @copyright © 2023 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport AutoNumeric from './AutoNumeric';\n\n/**\n * Event list managed by AutoNumeric\n *\n * @type {{correctedValue: string, initialized: string, invalidFormula: string, invalidValue: string, formatted: string, rawValueModified: string, minRangeExceeded: string, maxRangeExceeded: string, native: {input: string, change: string}, validFormula: string}}\n */\nAutoNumeric.events = {\n    correctedValue  : 'autoNumeric:correctedValue',\n    initialized     : 'autoNumeric:initialized',\n    invalidFormula  : 'autoNumeric:invalidFormula',\n    invalidValue    : 'autoNumeric:invalidValue',\n    formatted       : 'autoNumeric:formatted',\n    rawValueModified: 'autoNumeric:rawValueModified',\n    minRangeExceeded: 'autoNumeric:minExceeded',\n    maxRangeExceeded: 'autoNumeric:maxExceeded',\n    native          : {\n        input : 'input',\n        change: 'change',\n    },\n    validFormula    : 'autoNumeric:validFormula',\n};\n\nObject.freeze(AutoNumeric.events.native);\nObject.freeze(AutoNumeric.events);\nObject.defineProperty(AutoNumeric, 'events', { configurable: false, writable: false });\n\nexport default {};\n", "/**\n * Default settings for AutoNumeric.js\n * @author Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n * @copyright © 2023 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport AutoNumeric from './AutoNumeric';\nimport './AutoNumericOptions';\n\n/* eslint no-unused-vars: 0 */\n\n/**\n * The defaults options.\n * These can be overridden by the following methods:\n * - HTML5 data attributes (ie. `<input type=\"text\" data-currency-symbol=\" €\">`)\n * - Options passed to the `update` method (ie. `anElement.update({ currencySymbol: ' €' });`), or simply during the initialization (ie. `new AutoNumeric(domElement, { options });`)\n */\nAutoNumeric.defaultSettings = {\n    allowDecimalPadding          : AutoNumeric.options.allowDecimalPadding.always,\n    alwaysAllowDecimalCharacter  : AutoNumeric.options.alwaysAllowDecimalCharacter.doNotAllow,\n    caretPositionOnFocus         : AutoNumeric.options.caretPositionOnFocus.doNoForceCaretPosition,\n    createLocalList              : AutoNumeric.options.createLocalList.createList,\n    currencySymbol               : AutoNumeric.options.currencySymbol.none,\n    currencySymbolPlacement      : AutoNumeric.options.currencySymbolPlacement.prefix,\n    decimalCharacter             : AutoNumeric.options.decimalCharacter.dot,\n    decimalCharacterAlternative  : AutoNumeric.options.decimalCharacterAlternative.none,\n    decimalPlaces                : AutoNumeric.options.decimalPlaces.two,\n    decimalPlacesRawValue        : AutoNumeric.options.decimalPlacesRawValue.useDefault,\n    decimalPlacesShownOnBlur     : AutoNumeric.options.decimalPlacesShownOnBlur.useDefault,\n    decimalPlacesShownOnFocus    : AutoNumeric.options.decimalPlacesShownOnFocus.useDefault,\n    defaultValueOverride         : AutoNumeric.options.defaultValueOverride.doNotOverride,\n    digitalGroupSpacing          : AutoNumeric.options.digitalGroupSpacing.three,\n    digitGroupSeparator          : AutoNumeric.options.digitGroupSeparator.comma,\n    divisorWhenUnfocused         : AutoNumeric.options.divisorWhenUnfocused.none,\n    emptyInputBehavior           : AutoNumeric.options.emptyInputBehavior.focus,\n    eventBubbles                 : AutoNumeric.options.eventBubbles.bubbles,\n    eventIsCancelable            : AutoNumeric.options.eventIsCancelable.isCancelable,\n    failOnUnknownOption          : AutoNumeric.options.failOnUnknownOption.ignore,\n    formatOnPageLoad             : AutoNumeric.options.formatOnPageLoad.format,\n    formulaMode                  : AutoNumeric.options.formulaMode.disabled,\n    historySize                  : AutoNumeric.options.historySize.medium,\n    invalidClass                 : AutoNumeric.options.invalidClass,\n    isCancellable                : AutoNumeric.options.isCancellable.cancellable,\n    leadingZero                  : AutoNumeric.options.leadingZero.deny,\n    maximumValue                 : AutoNumeric.options.maximumValue.tenTrillions,\n    minimumValue                 : AutoNumeric.options.minimumValue.tenTrillions,\n    modifyValueOnUpDownArrow     : AutoNumeric.options.modifyValueOnUpDownArrow.modifyValue,\n    modifyValueOnWheel           : AutoNumeric.options.modifyValueOnWheel.modifyValue,\n    negativeBracketsTypeOnBlur   : AutoNumeric.options.negativeBracketsTypeOnBlur.none,\n    negativePositiveSignPlacement: AutoNumeric.options.negativePositiveSignPlacement.none,\n    negativeSignCharacter        : AutoNumeric.options.negativeSignCharacter.hyphen,\n    negativePositiveSignBehavior : AutoNumeric.options.negativePositiveSignBehavior.doNotToggle,\n    noEventListeners             : AutoNumeric.options.noEventListeners.addEvents,\n    //TODO Shouldn't we use `truncate` as the default value?\n    onInvalidPaste               : AutoNumeric.options.onInvalidPaste.error,\n    outputFormat                 : AutoNumeric.options.outputFormat.none,\n    overrideMinMaxLimits         : AutoNumeric.options.overrideMinMaxLimits.doNotOverride,\n    positiveSignCharacter        : AutoNumeric.options.positiveSignCharacter.plus,\n    rawValueDivisor              : AutoNumeric.options.rawValueDivisor.none,\n    readOnly                     : AutoNumeric.options.readOnly.readWrite,\n    roundingMethod               : AutoNumeric.options.roundingMethod.halfUpSymmetric,\n    saveValueToSessionStorage    : AutoNumeric.options.saveValueToSessionStorage.doNotSave,\n    selectNumberOnly             : AutoNumeric.options.selectNumberOnly.selectNumbersOnly,\n    selectOnFocus                : AutoNumeric.options.selectOnFocus.select,\n    serializeSpaces              : AutoNumeric.options.serializeSpaces.plus,\n    showOnlyNumbersOnFocus       : AutoNumeric.options.showOnlyNumbersOnFocus.showAll,\n    showPositiveSign             : AutoNumeric.options.showPositiveSign.hide,\n    showWarnings                 : AutoNumeric.options.showWarnings.show,\n    styleRules                   : AutoNumeric.options.styleRules.none,\n    suffixText                   : AutoNumeric.options.suffixText.none,\n    symbolWhenUnfocused          : AutoNumeric.options.symbolWhenUnfocused.none,\n    unformatOnHover              : AutoNumeric.options.unformatOnHover.unformat,\n    unformatOnSubmit             : AutoNumeric.options.unformatOnSubmit.keepCurrentValue,\n    upDownStep                   : '1', // To mimic the behavior of 'numeric'-typed input\n    valuesToStrings              : AutoNumeric.options.valuesToStrings.none,\n    watchExternalChanges         : AutoNumeric.options.watchExternalChanges.doNotWatch,\n    wheelOn                      : AutoNumeric.options.wheelOn.focus,\n    wheelStep                    : AutoNumeric.options.wheelStep.progressive,\n};\n\nObject.freeze(AutoNumeric.defaultSettings);\nObject.defineProperty(AutoNumeric, 'defaultSettings', { configurable: false, writable: false });\n\nexport default {};\n", "/**\n * Pre-defined options for AutoNumeric.js\n * @author Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n * @copyright © 2023 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport AutoNumeric from './AutoNumeric';\nimport AutoNumericHelper from './AutoNumericHelper';\n\nconst euro = { // Français\n    digitGroupSeparator          : AutoNumeric.options.digitGroupSeparator.dot, // or '\\u202f'\n    decimalCharacter             : AutoNumeric.options.decimalCharacter.comma,\n    decimalCharacterAlternative  : AutoNumeric.options.decimalCharacterAlternative.dot,\n    currencySymbol               : '\\u202f€',\n    currencySymbolPlacement      : AutoNumeric.options.currencySymbolPlacement.suffix,\n    negativePositiveSignPlacement: AutoNumeric.options.negativePositiveSignPlacement.prefix,\n};\n\nconst dollar = {\n    digitGroupSeparator          : AutoNumeric.options.digitGroupSeparator.comma,\n    decimalCharacter             : AutoNumeric.options.decimalCharacter.dot,\n    currencySymbol               : AutoNumeric.options.currencySymbol.dollar,\n    currencySymbolPlacement      : AutoNumeric.options.currencySymbolPlacement.prefix,\n    negativePositiveSignPlacement: AutoNumeric.options.negativePositiveSignPlacement.right,\n};\n\nconst japanese = { // 日本語\n    digitGroupSeparator          : AutoNumeric.options.digitGroupSeparator.comma,\n    decimalCharacter             : AutoNumeric.options.decimalCharacter.dot,\n    currencySymbol               : AutoNumeric.options.currencySymbol.yen,\n    currencySymbolPlacement      : AutoNumeric.options.currencySymbolPlacement.prefix,\n    negativePositiveSignPlacement: AutoNumeric.options.negativePositiveSignPlacement.right,\n};\n\n\n// Here we need to clone the initial objects in order to be able to edit the clones without affecting the originals\nconst euroF                           = AutoNumericHelper.cloneObject(euro);\neuroF.formulaMode                     = AutoNumeric.options.formulaMode.enabled;\nconst euroPos                         = AutoNumericHelper.cloneObject(euro);\neuroPos.minimumValue                  = 0;\nconst euroNeg                         = AutoNumericHelper.cloneObject(euro);\neuroNeg.maximumValue                  = 0;\neuroNeg.negativePositiveSignPlacement = AutoNumeric.options.negativePositiveSignPlacement.prefix;\n\nconst euroSpace                            = AutoNumericHelper.cloneObject(euro);\neuroSpace.digitGroupSeparator              = AutoNumeric.options.digitGroupSeparator.normalSpace;\nconst euroSpacePos                         = AutoNumericHelper.cloneObject(euroSpace);\neuroSpacePos.minimumValue                  = 0;\nconst euroSpaceNeg                         = AutoNumericHelper.cloneObject(euroSpace);\neuroSpaceNeg.maximumValue                  = 0;\neuroSpaceNeg.negativePositiveSignPlacement = AutoNumeric.options.negativePositiveSignPlacement.prefix;\n\nconst percentageEU2dec                            = AutoNumericHelper.cloneObject(euro);\npercentageEU2dec.currencySymbol                   = AutoNumeric.options.currencySymbol.none;\npercentageEU2dec.suffixText                       = `\\u202f${AutoNumeric.options.suffixText.percentage}`;\npercentageEU2dec.wheelStep                        = 0.0001; // This targets the `rawValue`, not the formatted one\npercentageEU2dec.rawValueDivisor                  = AutoNumeric.options.rawValueDivisor.percentage;\nconst percentageEU2decPos                         = AutoNumericHelper.cloneObject(percentageEU2dec);\npercentageEU2decPos.minimumValue                  = 0;\nconst percentageEU2decNeg                         = AutoNumericHelper.cloneObject(percentageEU2dec);\npercentageEU2decNeg.maximumValue                  = 0;\npercentageEU2decNeg.negativePositiveSignPlacement = AutoNumeric.options.negativePositiveSignPlacement.prefix;\n\nconst percentageEU3dec            = AutoNumericHelper.cloneObject(percentageEU2dec);\npercentageEU3dec.decimalPlaces    = 3;\nconst percentageEU3decPos         = AutoNumericHelper.cloneObject(percentageEU2decPos);\npercentageEU3decPos.decimalPlaces = 3;\nconst percentageEU3decNeg         = AutoNumericHelper.cloneObject(percentageEU2decNeg);\npercentageEU3decNeg.decimalPlaces = 3;\n\nconst dollarF                                = AutoNumericHelper.cloneObject(dollar);\ndollarF.formulaMode                          = AutoNumeric.options.formulaMode.enabled;\nconst dollarPos                              = AutoNumericHelper.cloneObject(dollar);\ndollarPos.minimumValue                       = 0;\nconst dollarNeg                              = AutoNumericHelper.cloneObject(dollar);\ndollarNeg.maximumValue                       = 0;\ndollarNeg.negativePositiveSignPlacement      = AutoNumeric.options.negativePositiveSignPlacement.prefix;\nconst dollarNegBrackets                      = AutoNumericHelper.cloneObject(dollarNeg);\ndollarNegBrackets.negativeBracketsTypeOnBlur = AutoNumeric.options.negativeBracketsTypeOnBlur.parentheses;\n\nconst percentageUS2dec                            = AutoNumericHelper.cloneObject(dollar);\npercentageUS2dec.currencySymbol                   = AutoNumeric.options.currencySymbol.none;\npercentageUS2dec.suffixText                       = AutoNumeric.options.suffixText.percentage;\npercentageUS2dec.wheelStep                        = 0.0001;\npercentageUS2dec.rawValueDivisor                  = AutoNumeric.options.rawValueDivisor.percentage;\nconst percentageUS2decPos                         = AutoNumericHelper.cloneObject(percentageUS2dec);\npercentageUS2decPos.minimumValue                  = 0;\nconst percentageUS2decNeg                         = AutoNumericHelper.cloneObject(percentageUS2dec);\npercentageUS2decNeg.maximumValue                  = 0;\npercentageUS2decNeg.negativePositiveSignPlacement = AutoNumeric.options.negativePositiveSignPlacement.prefix;\n\nconst percentageUS3dec            = AutoNumericHelper.cloneObject(percentageUS2dec);\npercentageUS3dec.decimalPlaces    = 3;\nconst percentageUS3decPos         = AutoNumericHelper.cloneObject(percentageUS2decPos);\npercentageUS3decPos.decimalPlaces = 3;\nconst percentageUS3decNeg         = AutoNumericHelper.cloneObject(percentageUS2decNeg);\npercentageUS3decNeg.decimalPlaces = 3;\n\nconst turkish = AutoNumericHelper.cloneObject(euro);\nturkish.currencySymbol = AutoNumeric.options.currencySymbol.lira;\n\n/**\n * Predefined options for the most common languages\n */\nAutoNumeric.predefinedOptions = {\n    euro,\n    euroPos,\n    euroNeg,\n    euroSpace,\n    euroSpacePos,\n    euroSpaceNeg,\n    percentageEU2dec,\n    percentageEU2decPos,\n    percentageEU2decNeg,\n    percentageEU3dec,\n    percentageEU3decPos,\n    percentageEU3decNeg,\n    dollar,\n    dollarPos,\n    dollarNeg,\n    dollarNegBrackets,\n    percentageUS2dec,\n    percentageUS2decPos,\n    percentageUS2decNeg,\n    percentageUS3dec,\n    percentageUS3decPos,\n    percentageUS3decNeg,\n    French                      : euro, // Français\n    Spanish                     : euro, // Español\n    NorthAmerican               : dollar,\n    British                     : {\n        digitGroupSeparator          : AutoNumeric.options.digitGroupSeparator.comma,\n        decimalCharacter             : AutoNumeric.options.decimalCharacter.dot,\n        currencySymbol               : AutoNumeric.options.currencySymbol.pound,\n        currencySymbolPlacement      : AutoNumeric.options.currencySymbolPlacement.prefix,\n        negativePositiveSignPlacement: AutoNumeric.options.negativePositiveSignPlacement.right,\n    },\n    Swiss                       : { // Suisse\n        digitGroupSeparator          : AutoNumeric.options.digitGroupSeparator.apostrophe,\n        decimalCharacter             : AutoNumeric.options.decimalCharacter.dot,\n        currencySymbol               : '\\u202fCHF',\n        currencySymbolPlacement      : AutoNumeric.options.currencySymbolPlacement.suffix,\n        negativePositiveSignPlacement: AutoNumeric.options.negativePositiveSignPlacement.prefix,\n    },\n    Japanese                    : japanese, // 日本語\n    Chinese                     : japanese, // 中国語 (Chinese)\n    Brazilian                   : {\n        digitGroupSeparator          : AutoNumeric.options.digitGroupSeparator.dot,\n        decimalCharacter             : AutoNumeric.options.decimalCharacter.comma,\n        currencySymbol               : AutoNumeric.options.currencySymbol.real,\n        currencySymbolPlacement      : AutoNumeric.options.currencySymbolPlacement.prefix,\n        negativePositiveSignPlacement: AutoNumeric.options.negativePositiveSignPlacement.right,\n    },\n    Turkish                     : turkish,\n    dotDecimalCharCommaSeparator: {\n        digitGroupSeparator: AutoNumeric.options.digitGroupSeparator.comma,\n        decimalCharacter   : AutoNumeric.options.decimalCharacter.dot,\n    },\n    commaDecimalCharDotSeparator: {\n        digitGroupSeparator        : AutoNumeric.options.digitGroupSeparator.dot,\n        decimalCharacter           : AutoNumeric.options.decimalCharacter.comma,\n        decimalCharacterAlternative: AutoNumeric.options.decimalCharacterAlternative.dot,\n    },\n    integer                     : {\n        decimalPlaces: 0,\n    },\n    integerPos                  : {\n        minimumValue : AutoNumeric.options.minimumValue.zero,\n        decimalPlaces: 0,\n    },\n    integerNeg                  : {\n        maximumValue : AutoNumeric.options.maximumValue.zero,\n        decimalPlaces: 0,\n    },\n    float                       : {\n        allowDecimalPadding: AutoNumeric.options.allowDecimalPadding.never,\n    },\n    floatPos                    : {\n        allowDecimalPadding: AutoNumeric.options.allowDecimalPadding.never,\n        minimumValue       : AutoNumeric.options.minimumValue.zero,\n        maximumValue       : AutoNumeric.options.maximumValue.tenTrillions,\n    },\n    floatNeg                    : {\n        allowDecimalPadding: AutoNumeric.options.allowDecimalPadding.never,\n        minimumValue       : AutoNumeric.options.minimumValue.tenTrillions,\n        maximumValue       : AutoNumeric.options.maximumValue.zero,\n    },\n    numeric                     : {\n        digitGroupSeparator: AutoNumeric.options.digitGroupSeparator.noSeparator,\n        decimalCharacter   : AutoNumeric.options.decimalCharacter.dot,\n        currencySymbol     : AutoNumeric.options.currencySymbol.none,\n    },\n    numericPos                  : {\n        digitGroupSeparator: AutoNumeric.options.digitGroupSeparator.noSeparator,\n        decimalCharacter   : AutoNumeric.options.decimalCharacter.dot,\n        currencySymbol     : AutoNumeric.options.currencySymbol.none,\n        minimumValue       : AutoNumeric.options.minimumValue.zero,\n        maximumValue       : AutoNumeric.options.maximumValue.tenTrillions,\n    },\n    numericNeg                  : {\n        digitGroupSeparator: AutoNumeric.options.digitGroupSeparator.noSeparator,\n        decimalCharacter   : AutoNumeric.options.decimalCharacter.dot,\n        currencySymbol     : AutoNumeric.options.currencySymbol.none,\n        minimumValue       : AutoNumeric.options.minimumValue.tenTrillions,\n        maximumValue       : AutoNumeric.options.maximumValue.zero,\n    },\n};\n\nObject.getOwnPropertyNames(AutoNumeric.predefinedOptions).forEach(optionName => {\n    Object.freeze(AutoNumeric.predefinedOptions[optionName]);\n});\nObject.freeze(AutoNumeric.predefinedOptions);\nObject.defineProperty(AutoNumeric, 'predefinedOptions', { configurable: false, writable: false });\n\nexport default {};\n", "/**\n * Babel + Webpack workaround for AutoNumeric\n *\n * @author Alexandre Bonneau <alexandre.bonneau@linuxfr.eu>\n * @copyright © 2023 Alexandre Bonneau\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sub license, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport AutoNumeric from './AutoNumeric';\nimport './AutoNumericEvents';\nimport './AutoNumericOptions';\nimport './AutoNumericDefaultSettings';\nimport './AutoNumericPredefinedOptions';\n\n/* eslint no-unused-vars: 0 */\n\n/**\n * This file serve as the main entry point to the library.\n *\n * This is needed since if the Webpack entrypoint is set to `./src/AutoNumeric.js`, then the AutoNumericEvents, AutoNumericOptions, AutoNumericDefaultSettings and AutoNumericPredefinedOptions files are not included in the bundle and therefore cannot be used.\n *\n * @type {AutoNumeric}\n */\nexport default AutoNumeric;\n", "/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n  'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n    return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n    if (Array.isArray(arg)) {\n        each(arg, context[fn], context);\n        return true;\n    }\n    return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n    var i;\n\n    if (!obj) {\n        return;\n    }\n\n    if (obj.forEach) {\n        obj.forEach(iterator, context);\n    } else if (obj.length !== undefined) {\n        i = 0;\n        while (i < obj.length) {\n            iterator.call(context, obj[i], i, obj);\n            i++;\n        }\n    } else {\n        for (i in obj) {\n            obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n        }\n    }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n    var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n    return function() {\n        var e = new Error('get-stack-trace');\n        var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n            .replace(/^\\s+at\\s+/gm, '')\n            .replace(/^Object.<anonymous>\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n        var log = window.console && (window.console.warn || window.console.log);\n        if (log) {\n            log.call(window.console, deprecationMessage, stack);\n        }\n        return method.apply(this, arguments);\n    };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n    assign = function assign(target) {\n        if (target === undefined || target === null) {\n            throw new TypeError('Cannot convert undefined or null to object');\n        }\n\n        var output = Object(target);\n        for (var index = 1; index < arguments.length; index++) {\n            var source = arguments[index];\n            if (source !== undefined && source !== null) {\n                for (var nextKey in source) {\n                    if (source.hasOwnProperty(nextKey)) {\n                        output[nextKey] = source[nextKey];\n                    }\n                }\n            }\n        }\n        return output;\n    };\n} else {\n    assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n    var keys = Object.keys(src);\n    var i = 0;\n    while (i < keys.length) {\n        if (!merge || (merge && dest[keys[i]] === undefined)) {\n            dest[keys[i]] = src[keys[i]];\n        }\n        i++;\n    }\n    return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n    return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n    var baseP = base.prototype,\n        childP;\n\n    childP = child.prototype = Object.create(baseP);\n    childP.constructor = child;\n    childP._super = baseP;\n\n    if (properties) {\n        assign(childP, properties);\n    }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n    return function boundFn() {\n        return fn.apply(context, arguments);\n    };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n    if (typeof val == TYPE_FUNCTION) {\n        return val.apply(args ? args[0] || undefined : undefined, args);\n    }\n    return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n    return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n    each(splitStr(types), function(type) {\n        target.addEventListener(type, handler, false);\n    });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n    each(splitStr(types), function(type) {\n        target.removeEventListener(type, handler, false);\n    });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n    while (node) {\n        if (node == parent) {\n            return true;\n        }\n        node = node.parentNode;\n    }\n    return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n    return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n    return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n    if (src.indexOf && !findByKey) {\n        return src.indexOf(find);\n    } else {\n        var i = 0;\n        while (i < src.length) {\n            if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n                return i;\n            }\n            i++;\n        }\n        return -1;\n    }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n    return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n    var results = [];\n    var values = [];\n    var i = 0;\n\n    while (i < src.length) {\n        var val = key ? src[i][key] : src[i];\n        if (inArray(values, val) < 0) {\n            results.push(src[i]);\n        }\n        values[i] = val;\n        i++;\n    }\n\n    if (sort) {\n        if (!key) {\n            results = results.sort();\n        } else {\n            results = results.sort(function sortUniqueArray(a, b) {\n                return a[key] > b[key];\n            });\n        }\n    }\n\n    return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n    var prefix, prop;\n    var camelProp = property[0].toUpperCase() + property.slice(1);\n\n    var i = 0;\n    while (i < VENDOR_PREFIXES.length) {\n        prefix = VENDOR_PREFIXES[i];\n        prop = (prefix) ? prefix + camelProp : property;\n\n        if (prop in obj) {\n            return prop;\n        }\n        i++;\n    }\n    return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n    return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n    var doc = element.ownerDocument || element;\n    return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n    var self = this;\n    this.manager = manager;\n    this.callback = callback;\n    this.element = manager.element;\n    this.target = manager.options.inputTarget;\n\n    // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n    // so when disabled the input events are completely bypassed.\n    this.domHandler = function(ev) {\n        if (boolOrFn(manager.options.enable, [manager])) {\n            self.handler(ev);\n        }\n    };\n\n    this.init();\n\n}\n\nInput.prototype = {\n    /**\n     * should handle the inputEvent data and trigger the callback\n     * @virtual\n     */\n    handler: function() { },\n\n    /**\n     * bind the events\n     */\n    init: function() {\n        this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n        this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n        this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n    },\n\n    /**\n     * unbind the events\n     */\n    destroy: function() {\n        this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n        this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n        this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n    }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n    var Type;\n    var inputClass = manager.options.inputClass;\n\n    if (inputClass) {\n        Type = inputClass;\n    } else if (SUPPORT_POINTER_EVENTS) {\n        Type = PointerEventInput;\n    } else if (SUPPORT_ONLY_TOUCH) {\n        Type = TouchInput;\n    } else if (!SUPPORT_TOUCH) {\n        Type = MouseInput;\n    } else {\n        Type = TouchMouseInput;\n    }\n    return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n    var pointersLen = input.pointers.length;\n    var changedPointersLen = input.changedPointers.length;\n    var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n    var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n    input.isFirst = !!isFirst;\n    input.isFinal = !!isFinal;\n\n    if (isFirst) {\n        manager.session = {};\n    }\n\n    // source event is the normalized value of the domEvents\n    // like 'touchstart, mouseup, pointerdown'\n    input.eventType = eventType;\n\n    // compute scale, rotation etc\n    computeInputData(manager, input);\n\n    // emit secret event\n    manager.emit('hammer.input', input);\n\n    manager.recognize(input);\n    manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n    var session = manager.session;\n    var pointers = input.pointers;\n    var pointersLength = pointers.length;\n\n    // store the first input to calculate the distance and direction\n    if (!session.firstInput) {\n        session.firstInput = simpleCloneInputData(input);\n    }\n\n    // to compute scale and rotation we need to store the multiple touches\n    if (pointersLength > 1 && !session.firstMultiple) {\n        session.firstMultiple = simpleCloneInputData(input);\n    } else if (pointersLength === 1) {\n        session.firstMultiple = false;\n    }\n\n    var firstInput = session.firstInput;\n    var firstMultiple = session.firstMultiple;\n    var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n    var center = input.center = getCenter(pointers);\n    input.timeStamp = now();\n    input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n    input.angle = getAngle(offsetCenter, center);\n    input.distance = getDistance(offsetCenter, center);\n\n    computeDeltaXY(session, input);\n    input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n    var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n    input.overallVelocityX = overallVelocity.x;\n    input.overallVelocityY = overallVelocity.y;\n    input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n    input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n    input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n    input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n        session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n    computeIntervalInputData(session, input);\n\n    // find the correct target\n    var target = manager.element;\n    if (hasParent(input.srcEvent.target, target)) {\n        target = input.srcEvent.target;\n    }\n    input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n    var center = input.center;\n    var offset = session.offsetDelta || {};\n    var prevDelta = session.prevDelta || {};\n    var prevInput = session.prevInput || {};\n\n    if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n        prevDelta = session.prevDelta = {\n            x: prevInput.deltaX || 0,\n            y: prevInput.deltaY || 0\n        };\n\n        offset = session.offsetDelta = {\n            x: center.x,\n            y: center.y\n        };\n    }\n\n    input.deltaX = prevDelta.x + (center.x - offset.x);\n    input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n    var last = session.lastInterval || input,\n        deltaTime = input.timeStamp - last.timeStamp,\n        velocity, velocityX, velocityY, direction;\n\n    if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n        var deltaX = input.deltaX - last.deltaX;\n        var deltaY = input.deltaY - last.deltaY;\n\n        var v = getVelocity(deltaTime, deltaX, deltaY);\n        velocityX = v.x;\n        velocityY = v.y;\n        velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n        direction = getDirection(deltaX, deltaY);\n\n        session.lastInterval = input;\n    } else {\n        // use latest velocity info if it doesn't overtake a minimum period\n        velocity = last.velocity;\n        velocityX = last.velocityX;\n        velocityY = last.velocityY;\n        direction = last.direction;\n    }\n\n    input.velocity = velocity;\n    input.velocityX = velocityX;\n    input.velocityY = velocityY;\n    input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n    // make a simple copy of the pointers because we will get a reference if we don't\n    // we only need clientXY for the calculations\n    var pointers = [];\n    var i = 0;\n    while (i < input.pointers.length) {\n        pointers[i] = {\n            clientX: round(input.pointers[i].clientX),\n            clientY: round(input.pointers[i].clientY)\n        };\n        i++;\n    }\n\n    return {\n        timeStamp: now(),\n        pointers: pointers,\n        center: getCenter(pointers),\n        deltaX: input.deltaX,\n        deltaY: input.deltaY\n    };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n    var pointersLength = pointers.length;\n\n    // no need to loop when only one touch\n    if (pointersLength === 1) {\n        return {\n            x: round(pointers[0].clientX),\n            y: round(pointers[0].clientY)\n        };\n    }\n\n    var x = 0, y = 0, i = 0;\n    while (i < pointersLength) {\n        x += pointers[i].clientX;\n        y += pointers[i].clientY;\n        i++;\n    }\n\n    return {\n        x: round(x / pointersLength),\n        y: round(y / pointersLength)\n    };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n    return {\n        x: x / deltaTime || 0,\n        y: y / deltaTime || 0\n    };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n    if (x === y) {\n        return DIRECTION_NONE;\n    }\n\n    if (abs(x) >= abs(y)) {\n        return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n    return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n    if (!props) {\n        props = PROPS_XY;\n    }\n    var x = p2[props[0]] - p1[props[0]],\n        y = p2[props[1]] - p1[props[1]];\n\n    return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n    if (!props) {\n        props = PROPS_XY;\n    }\n    var x = p2[props[0]] - p1[props[0]],\n        y = p2[props[1]] - p1[props[1]];\n    return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n    return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n    return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n    mousedown: INPUT_START,\n    mousemove: INPUT_MOVE,\n    mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n    this.evEl = MOUSE_ELEMENT_EVENTS;\n    this.evWin = MOUSE_WINDOW_EVENTS;\n\n    this.pressed = false; // mousedown state\n\n    Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n    /**\n     * handle mouse events\n     * @param {Object} ev\n     */\n    handler: function MEhandler(ev) {\n        var eventType = MOUSE_INPUT_MAP[ev.type];\n\n        // on start we want to have the left mouse button down\n        if (eventType & INPUT_START && ev.button === 0) {\n            this.pressed = true;\n        }\n\n        if (eventType & INPUT_MOVE && ev.which !== 1) {\n            eventType = INPUT_END;\n        }\n\n        // mouse must be down\n        if (!this.pressed) {\n            return;\n        }\n\n        if (eventType & INPUT_END) {\n            this.pressed = false;\n        }\n\n        this.callback(this.manager, eventType, {\n            pointers: [ev],\n            changedPointers: [ev],\n            pointerType: INPUT_TYPE_MOUSE,\n            srcEvent: ev\n        });\n    }\n});\n\nvar POINTER_INPUT_MAP = {\n    pointerdown: INPUT_START,\n    pointermove: INPUT_MOVE,\n    pointerup: INPUT_END,\n    pointercancel: INPUT_CANCEL,\n    pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n    2: INPUT_TYPE_TOUCH,\n    3: INPUT_TYPE_PEN,\n    4: INPUT_TYPE_MOUSE,\n    5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n    POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n    POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n    this.evEl = POINTER_ELEMENT_EVENTS;\n    this.evWin = POINTER_WINDOW_EVENTS;\n\n    Input.apply(this, arguments);\n\n    this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n    /**\n     * handle mouse events\n     * @param {Object} ev\n     */\n    handler: function PEhandler(ev) {\n        var store = this.store;\n        var removePointer = false;\n\n        var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n        var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n        var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n        var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n        // get index of the event in the store\n        var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n        // start and mouse must be down\n        if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n            if (storeIndex < 0) {\n                store.push(ev);\n                storeIndex = store.length - 1;\n            }\n        } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n            removePointer = true;\n        }\n\n        // it not found, so the pointer hasn't been down (so it's probably a hover)\n        if (storeIndex < 0) {\n            return;\n        }\n\n        // update the event in the store\n        store[storeIndex] = ev;\n\n        this.callback(this.manager, eventType, {\n            pointers: store,\n            changedPointers: [ev],\n            pointerType: pointerType,\n            srcEvent: ev\n        });\n\n        if (removePointer) {\n            // remove from the store\n            store.splice(storeIndex, 1);\n        }\n    }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n    touchstart: INPUT_START,\n    touchmove: INPUT_MOVE,\n    touchend: INPUT_END,\n    touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n    this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n    this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n    this.started = false;\n\n    Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n    handler: function TEhandler(ev) {\n        var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n        // should we handle the touch events?\n        if (type === INPUT_START) {\n            this.started = true;\n        }\n\n        if (!this.started) {\n            return;\n        }\n\n        var touches = normalizeSingleTouches.call(this, ev, type);\n\n        // when done, reset the started state\n        if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n            this.started = false;\n        }\n\n        this.callback(this.manager, type, {\n            pointers: touches[0],\n            changedPointers: touches[1],\n            pointerType: INPUT_TYPE_TOUCH,\n            srcEvent: ev\n        });\n    }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n    var all = toArray(ev.touches);\n    var changed = toArray(ev.changedTouches);\n\n    if (type & (INPUT_END | INPUT_CANCEL)) {\n        all = uniqueArray(all.concat(changed), 'identifier', true);\n    }\n\n    return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n    touchstart: INPUT_START,\n    touchmove: INPUT_MOVE,\n    touchend: INPUT_END,\n    touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n    this.evTarget = TOUCH_TARGET_EVENTS;\n    this.targetIds = {};\n\n    Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n    handler: function MTEhandler(ev) {\n        var type = TOUCH_INPUT_MAP[ev.type];\n        var touches = getTouches.call(this, ev, type);\n        if (!touches) {\n            return;\n        }\n\n        this.callback(this.manager, type, {\n            pointers: touches[0],\n            changedPointers: touches[1],\n            pointerType: INPUT_TYPE_TOUCH,\n            srcEvent: ev\n        });\n    }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n    var allTouches = toArray(ev.touches);\n    var targetIds = this.targetIds;\n\n    // when there is only one touch, the process can be simplified\n    if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n        targetIds[allTouches[0].identifier] = true;\n        return [allTouches, allTouches];\n    }\n\n    var i,\n        targetTouches,\n        changedTouches = toArray(ev.changedTouches),\n        changedTargetTouches = [],\n        target = this.target;\n\n    // get target touches from touches\n    targetTouches = allTouches.filter(function(touch) {\n        return hasParent(touch.target, target);\n    });\n\n    // collect touches\n    if (type === INPUT_START) {\n        i = 0;\n        while (i < targetTouches.length) {\n            targetIds[targetTouches[i].identifier] = true;\n            i++;\n        }\n    }\n\n    // filter changed touches to only contain touches that exist in the collected target ids\n    i = 0;\n    while (i < changedTouches.length) {\n        if (targetIds[changedTouches[i].identifier]) {\n            changedTargetTouches.push(changedTouches[i]);\n        }\n\n        // cleanup removed touches\n        if (type & (INPUT_END | INPUT_CANCEL)) {\n            delete targetIds[changedTouches[i].identifier];\n        }\n        i++;\n    }\n\n    if (!changedTargetTouches.length) {\n        return;\n    }\n\n    return [\n        // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n        uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n        changedTargetTouches\n    ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n    Input.apply(this, arguments);\n\n    var handler = bindFn(this.handler, this);\n    this.touch = new TouchInput(this.manager, handler);\n    this.mouse = new MouseInput(this.manager, handler);\n\n    this.primaryTouch = null;\n    this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n    /**\n     * handle mouse and touch events\n     * @param {Hammer} manager\n     * @param {String} inputEvent\n     * @param {Object} inputData\n     */\n    handler: function TMEhandler(manager, inputEvent, inputData) {\n        var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n            isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n        if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n            return;\n        }\n\n        // when we're in a touch event, record touches to  de-dupe synthetic mouse event\n        if (isTouch) {\n            recordTouches.call(this, inputEvent, inputData);\n        } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n            return;\n        }\n\n        this.callback(manager, inputEvent, inputData);\n    },\n\n    /**\n     * remove the event listeners\n     */\n    destroy: function destroy() {\n        this.touch.destroy();\n        this.mouse.destroy();\n    }\n});\n\nfunction recordTouches(eventType, eventData) {\n    if (eventType & INPUT_START) {\n        this.primaryTouch = eventData.changedPointers[0].identifier;\n        setLastTouch.call(this, eventData);\n    } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n        setLastTouch.call(this, eventData);\n    }\n}\n\nfunction setLastTouch(eventData) {\n    var touch = eventData.changedPointers[0];\n\n    if (touch.identifier === this.primaryTouch) {\n        var lastTouch = {x: touch.clientX, y: touch.clientY};\n        this.lastTouches.push(lastTouch);\n        var lts = this.lastTouches;\n        var removeLastTouch = function() {\n            var i = lts.indexOf(lastTouch);\n            if (i > -1) {\n                lts.splice(i, 1);\n            }\n        };\n        setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n    }\n}\n\nfunction isSyntheticEvent(eventData) {\n    var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n    for (var i = 0; i < this.lastTouches.length; i++) {\n        var t = this.lastTouches[i];\n        var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n        if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n            return true;\n        }\n    }\n    return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n    this.manager = manager;\n    this.set(value);\n}\n\nTouchAction.prototype = {\n    /**\n     * set the touchAction value on the element or enable the polyfill\n     * @param {String} value\n     */\n    set: function(value) {\n        // find out the touch-action by the event handlers\n        if (value == TOUCH_ACTION_COMPUTE) {\n            value = this.compute();\n        }\n\n        if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n            this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n        }\n        this.actions = value.toLowerCase().trim();\n    },\n\n    /**\n     * just re-set the touchAction value\n     */\n    update: function() {\n        this.set(this.manager.options.touchAction);\n    },\n\n    /**\n     * compute the value for the touchAction property based on the recognizer's settings\n     * @returns {String} value\n     */\n    compute: function() {\n        var actions = [];\n        each(this.manager.recognizers, function(recognizer) {\n            if (boolOrFn(recognizer.options.enable, [recognizer])) {\n                actions = actions.concat(recognizer.getTouchAction());\n            }\n        });\n        return cleanTouchActions(actions.join(' '));\n    },\n\n    /**\n     * this method is called on each input cycle and provides the preventing of the browser behavior\n     * @param {Object} input\n     */\n    preventDefaults: function(input) {\n        var srcEvent = input.srcEvent;\n        var direction = input.offsetDirection;\n\n        // if the touch action did prevented once this session\n        if (this.manager.session.prevented) {\n            srcEvent.preventDefault();\n            return;\n        }\n\n        var actions = this.actions;\n        var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n        var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n        var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n        if (hasNone) {\n            //do not prevent defaults if this is a tap gesture\n\n            var isTapPointer = input.pointers.length === 1;\n            var isTapMovement = input.distance < 2;\n            var isTapTouchTime = input.deltaTime < 250;\n\n            if (isTapPointer && isTapMovement && isTapTouchTime) {\n                return;\n            }\n        }\n\n        if (hasPanX && hasPanY) {\n            // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n            return;\n        }\n\n        if (hasNone ||\n            (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n            (hasPanX && direction & DIRECTION_VERTICAL)) {\n            return this.preventSrc(srcEvent);\n        }\n    },\n\n    /**\n     * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n     * @param {Object} srcEvent\n     */\n    preventSrc: function(srcEvent) {\n        this.manager.session.prevented = true;\n        srcEvent.preventDefault();\n    }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n    // none\n    if (inStr(actions, TOUCH_ACTION_NONE)) {\n        return TOUCH_ACTION_NONE;\n    }\n\n    var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n    var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n    // if both pan-x and pan-y are set (different recognizers\n    // for different directions, e.g. horizontal pan but vertical swipe?)\n    // we need none (as otherwise with pan-x pan-y combined none of these\n    // recognizers will work, since the browser would handle all panning\n    if (hasPanX && hasPanY) {\n        return TOUCH_ACTION_NONE;\n    }\n\n    // pan-x OR pan-y\n    if (hasPanX || hasPanY) {\n        return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n    }\n\n    // manipulation\n    if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n        return TOUCH_ACTION_MANIPULATION;\n    }\n\n    return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n    if (!NATIVE_TOUCH_ACTION) {\n        return false;\n    }\n    var touchMap = {};\n    var cssSupports = window.CSS && window.CSS.supports;\n    ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n        // If css.supports is not supported but there is native touch-action assume it supports\n        // all values. This is the case for IE 10 and 11.\n        touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n    });\n    return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n *               Possible\n *                  |\n *            +-----+---------------+\n *            |                     |\n *      +-----+-----+               |\n *      |           |               |\n *   Failed      Cancelled          |\n *                          +-------+------+\n *                          |              |\n *                      Recognized       Began\n *                                         |\n *                                      Changed\n *                                         |\n *                                  Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n    this.options = assign({}, this.defaults, options || {});\n\n    this.id = uniqueId();\n\n    this.manager = null;\n\n    // default is enable true\n    this.options.enable = ifUndefined(this.options.enable, true);\n\n    this.state = STATE_POSSIBLE;\n\n    this.simultaneous = {};\n    this.requireFail = [];\n}\n\nRecognizer.prototype = {\n    /**\n     * @virtual\n     * @type {Object}\n     */\n    defaults: {},\n\n    /**\n     * set options\n     * @param {Object} options\n     * @return {Recognizer}\n     */\n    set: function(options) {\n        assign(this.options, options);\n\n        // also update the touchAction, in case something changed about the directions/enabled state\n        this.manager && this.manager.touchAction.update();\n        return this;\n    },\n\n    /**\n     * recognize simultaneous with an other recognizer.\n     * @param {Recognizer} otherRecognizer\n     * @returns {Recognizer} this\n     */\n    recognizeWith: function(otherRecognizer) {\n        if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n            return this;\n        }\n\n        var simultaneous = this.simultaneous;\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n        if (!simultaneous[otherRecognizer.id]) {\n            simultaneous[otherRecognizer.id] = otherRecognizer;\n            otherRecognizer.recognizeWith(this);\n        }\n        return this;\n    },\n\n    /**\n     * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n     * @param {Recognizer} otherRecognizer\n     * @returns {Recognizer} this\n     */\n    dropRecognizeWith: function(otherRecognizer) {\n        if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n            return this;\n        }\n\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n        delete this.simultaneous[otherRecognizer.id];\n        return this;\n    },\n\n    /**\n     * recognizer can only run when an other is failing\n     * @param {Recognizer} otherRecognizer\n     * @returns {Recognizer} this\n     */\n    requireFailure: function(otherRecognizer) {\n        if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n            return this;\n        }\n\n        var requireFail = this.requireFail;\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n        if (inArray(requireFail, otherRecognizer) === -1) {\n            requireFail.push(otherRecognizer);\n            otherRecognizer.requireFailure(this);\n        }\n        return this;\n    },\n\n    /**\n     * drop the requireFailure link. it does not remove the link on the other recognizer.\n     * @param {Recognizer} otherRecognizer\n     * @returns {Recognizer} this\n     */\n    dropRequireFailure: function(otherRecognizer) {\n        if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n            return this;\n        }\n\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n        var index = inArray(this.requireFail, otherRecognizer);\n        if (index > -1) {\n            this.requireFail.splice(index, 1);\n        }\n        return this;\n    },\n\n    /**\n     * has require failures boolean\n     * @returns {boolean}\n     */\n    hasRequireFailures: function() {\n        return this.requireFail.length > 0;\n    },\n\n    /**\n     * if the recognizer can recognize simultaneous with an other recognizer\n     * @param {Recognizer} otherRecognizer\n     * @returns {Boolean}\n     */\n    canRecognizeWith: function(otherRecognizer) {\n        return !!this.simultaneous[otherRecognizer.id];\n    },\n\n    /**\n     * You should use `tryEmit` instead of `emit` directly to check\n     * that all the needed recognizers has failed before emitting.\n     * @param {Object} input\n     */\n    emit: function(input) {\n        var self = this;\n        var state = this.state;\n\n        function emit(event) {\n            self.manager.emit(event, input);\n        }\n\n        // 'panstart' and 'panmove'\n        if (state < STATE_ENDED) {\n            emit(self.options.event + stateStr(state));\n        }\n\n        emit(self.options.event); // simple 'eventName' events\n\n        if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n            emit(input.additionalEvent);\n        }\n\n        // panend and pancancel\n        if (state >= STATE_ENDED) {\n            emit(self.options.event + stateStr(state));\n        }\n    },\n\n    /**\n     * Check that all the require failure recognizers has failed,\n     * if true, it emits a gesture event,\n     * otherwise, setup the state to FAILED.\n     * @param {Object} input\n     */\n    tryEmit: function(input) {\n        if (this.canEmit()) {\n            return this.emit(input);\n        }\n        // it's failing anyway\n        this.state = STATE_FAILED;\n    },\n\n    /**\n     * can we emit?\n     * @returns {boolean}\n     */\n    canEmit: function() {\n        var i = 0;\n        while (i < this.requireFail.length) {\n            if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n                return false;\n            }\n            i++;\n        }\n        return true;\n    },\n\n    /**\n     * update the recognizer\n     * @param {Object} inputData\n     */\n    recognize: function(inputData) {\n        // make a new copy of the inputData\n        // so we can change the inputData without messing up the other recognizers\n        var inputDataClone = assign({}, inputData);\n\n        // is is enabled and allow recognizing?\n        if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n            this.reset();\n            this.state = STATE_FAILED;\n            return;\n        }\n\n        // reset when we've reached the end\n        if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n            this.state = STATE_POSSIBLE;\n        }\n\n        this.state = this.process(inputDataClone);\n\n        // the recognizer has recognized a gesture\n        // so trigger an event\n        if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n            this.tryEmit(inputDataClone);\n        }\n    },\n\n    /**\n     * return the state of the recognizer\n     * the actual recognizing happens in this method\n     * @virtual\n     * @param {Object} inputData\n     * @returns {Const} STATE\n     */\n    process: function(inputData) { }, // jshint ignore:line\n\n    /**\n     * return the preferred touch-action\n     * @virtual\n     * @returns {Array}\n     */\n    getTouchAction: function() { },\n\n    /**\n     * called when the gesture isn't allowed to recognize\n     * like when another is being recognized or it is disabled\n     * @virtual\n     */\n    reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n    if (state & STATE_CANCELLED) {\n        return 'cancel';\n    } else if (state & STATE_ENDED) {\n        return 'end';\n    } else if (state & STATE_CHANGED) {\n        return 'move';\n    } else if (state & STATE_BEGAN) {\n        return 'start';\n    }\n    return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n    if (direction == DIRECTION_DOWN) {\n        return 'down';\n    } else if (direction == DIRECTION_UP) {\n        return 'up';\n    } else if (direction == DIRECTION_LEFT) {\n        return 'left';\n    } else if (direction == DIRECTION_RIGHT) {\n        return 'right';\n    }\n    return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n    var manager = recognizer.manager;\n    if (manager) {\n        return manager.get(otherRecognizer);\n    }\n    return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n    Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n    /**\n     * @namespace\n     * @memberof AttrRecognizer\n     */\n    defaults: {\n        /**\n         * @type {Number}\n         * @default 1\n         */\n        pointers: 1\n    },\n\n    /**\n     * Used to check if it the recognizer receives valid input, like input.distance > 10.\n     * @memberof AttrRecognizer\n     * @param {Object} input\n     * @returns {Boolean} recognized\n     */\n    attrTest: function(input) {\n        var optionPointers = this.options.pointers;\n        return optionPointers === 0 || input.pointers.length === optionPointers;\n    },\n\n    /**\n     * Process the input and return the state for the recognizer\n     * @memberof AttrRecognizer\n     * @param {Object} input\n     * @returns {*} State\n     */\n    process: function(input) {\n        var state = this.state;\n        var eventType = input.eventType;\n\n        var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n        var isValid = this.attrTest(input);\n\n        // on cancel input and we've recognized before, return STATE_CANCELLED\n        if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n            return state | STATE_CANCELLED;\n        } else if (isRecognized || isValid) {\n            if (eventType & INPUT_END) {\n                return state | STATE_ENDED;\n            } else if (!(state & STATE_BEGAN)) {\n                return STATE_BEGAN;\n            }\n            return state | STATE_CHANGED;\n        }\n        return STATE_FAILED;\n    }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n    AttrRecognizer.apply(this, arguments);\n\n    this.pX = null;\n    this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n    /**\n     * @namespace\n     * @memberof PanRecognizer\n     */\n    defaults: {\n        event: 'pan',\n        threshold: 10,\n        pointers: 1,\n        direction: DIRECTION_ALL\n    },\n\n    getTouchAction: function() {\n        var direction = this.options.direction;\n        var actions = [];\n        if (direction & DIRECTION_HORIZONTAL) {\n            actions.push(TOUCH_ACTION_PAN_Y);\n        }\n        if (direction & DIRECTION_VERTICAL) {\n            actions.push(TOUCH_ACTION_PAN_X);\n        }\n        return actions;\n    },\n\n    directionTest: function(input) {\n        var options = this.options;\n        var hasMoved = true;\n        var distance = input.distance;\n        var direction = input.direction;\n        var x = input.deltaX;\n        var y = input.deltaY;\n\n        // lock to axis?\n        if (!(direction & options.direction)) {\n            if (options.direction & DIRECTION_HORIZONTAL) {\n                direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n                hasMoved = x != this.pX;\n                distance = Math.abs(input.deltaX);\n            } else {\n                direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n                hasMoved = y != this.pY;\n                distance = Math.abs(input.deltaY);\n            }\n        }\n        input.direction = direction;\n        return hasMoved && distance > options.threshold && direction & options.direction;\n    },\n\n    attrTest: function(input) {\n        return AttrRecognizer.prototype.attrTest.call(this, input) &&\n            (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n    },\n\n    emit: function(input) {\n\n        this.pX = input.deltaX;\n        this.pY = input.deltaY;\n\n        var direction = directionStr(input.direction);\n\n        if (direction) {\n            input.additionalEvent = this.options.event + direction;\n        }\n        this._super.emit.call(this, input);\n    }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n    AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n    /**\n     * @namespace\n     * @memberof PinchRecognizer\n     */\n    defaults: {\n        event: 'pinch',\n        threshold: 0,\n        pointers: 2\n    },\n\n    getTouchAction: function() {\n        return [TOUCH_ACTION_NONE];\n    },\n\n    attrTest: function(input) {\n        return this._super.attrTest.call(this, input) &&\n            (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n    },\n\n    emit: function(input) {\n        if (input.scale !== 1) {\n            var inOut = input.scale < 1 ? 'in' : 'out';\n            input.additionalEvent = this.options.event + inOut;\n        }\n        this._super.emit.call(this, input);\n    }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n    Recognizer.apply(this, arguments);\n\n    this._timer = null;\n    this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n    /**\n     * @namespace\n     * @memberof PressRecognizer\n     */\n    defaults: {\n        event: 'press',\n        pointers: 1,\n        time: 251, // minimal time of the pointer to be pressed\n        threshold: 9 // a minimal movement is ok, but keep it low\n    },\n\n    getTouchAction: function() {\n        return [TOUCH_ACTION_AUTO];\n    },\n\n    process: function(input) {\n        var options = this.options;\n        var validPointers = input.pointers.length === options.pointers;\n        var validMovement = input.distance < options.threshold;\n        var validTime = input.deltaTime > options.time;\n\n        this._input = input;\n\n        // we only allow little movement\n        // and we've reached an end event, so a tap is possible\n        if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n            this.reset();\n        } else if (input.eventType & INPUT_START) {\n            this.reset();\n            this._timer = setTimeoutContext(function() {\n                this.state = STATE_RECOGNIZED;\n                this.tryEmit();\n            }, options.time, this);\n        } else if (input.eventType & INPUT_END) {\n            return STATE_RECOGNIZED;\n        }\n        return STATE_FAILED;\n    },\n\n    reset: function() {\n        clearTimeout(this._timer);\n    },\n\n    emit: function(input) {\n        if (this.state !== STATE_RECOGNIZED) {\n            return;\n        }\n\n        if (input && (input.eventType & INPUT_END)) {\n            this.manager.emit(this.options.event + 'up', input);\n        } else {\n            this._input.timeStamp = now();\n            this.manager.emit(this.options.event, this._input);\n        }\n    }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n    AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n    /**\n     * @namespace\n     * @memberof RotateRecognizer\n     */\n    defaults: {\n        event: 'rotate',\n        threshold: 0,\n        pointers: 2\n    },\n\n    getTouchAction: function() {\n        return [TOUCH_ACTION_NONE];\n    },\n\n    attrTest: function(input) {\n        return this._super.attrTest.call(this, input) &&\n            (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n    }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n    AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n    /**\n     * @namespace\n     * @memberof SwipeRecognizer\n     */\n    defaults: {\n        event: 'swipe',\n        threshold: 10,\n        velocity: 0.3,\n        direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n        pointers: 1\n    },\n\n    getTouchAction: function() {\n        return PanRecognizer.prototype.getTouchAction.call(this);\n    },\n\n    attrTest: function(input) {\n        var direction = this.options.direction;\n        var velocity;\n\n        if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n            velocity = input.overallVelocity;\n        } else if (direction & DIRECTION_HORIZONTAL) {\n            velocity = input.overallVelocityX;\n        } else if (direction & DIRECTION_VERTICAL) {\n            velocity = input.overallVelocityY;\n        }\n\n        return this._super.attrTest.call(this, input) &&\n            direction & input.offsetDirection &&\n            input.distance > this.options.threshold &&\n            input.maxPointers == this.options.pointers &&\n            abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n    },\n\n    emit: function(input) {\n        var direction = directionStr(input.offsetDirection);\n        if (direction) {\n            this.manager.emit(this.options.event + direction, input);\n        }\n\n        this.manager.emit(this.options.event, input);\n    }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n    Recognizer.apply(this, arguments);\n\n    // previous time and center,\n    // used for tap counting\n    this.pTime = false;\n    this.pCenter = false;\n\n    this._timer = null;\n    this._input = null;\n    this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n    /**\n     * @namespace\n     * @memberof PinchRecognizer\n     */\n    defaults: {\n        event: 'tap',\n        pointers: 1,\n        taps: 1,\n        interval: 300, // max time between the multi-tap taps\n        time: 250, // max time of the pointer to be down (like finger on the screen)\n        threshold: 9, // a minimal movement is ok, but keep it low\n        posThreshold: 10 // a multi-tap can be a bit off the initial position\n    },\n\n    getTouchAction: function() {\n        return [TOUCH_ACTION_MANIPULATION];\n    },\n\n    process: function(input) {\n        var options = this.options;\n\n        var validPointers = input.pointers.length === options.pointers;\n        var validMovement = input.distance < options.threshold;\n        var validTouchTime = input.deltaTime < options.time;\n\n        this.reset();\n\n        if ((input.eventType & INPUT_START) && (this.count === 0)) {\n            return this.failTimeout();\n        }\n\n        // we only allow little movement\n        // and we've reached an end event, so a tap is possible\n        if (validMovement && validTouchTime && validPointers) {\n            if (input.eventType != INPUT_END) {\n                return this.failTimeout();\n            }\n\n            var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n            var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n            this.pTime = input.timeStamp;\n            this.pCenter = input.center;\n\n            if (!validMultiTap || !validInterval) {\n                this.count = 1;\n            } else {\n                this.count += 1;\n            }\n\n            this._input = input;\n\n            // if tap count matches we have recognized it,\n            // else it has began recognizing...\n            var tapCount = this.count % options.taps;\n            if (tapCount === 0) {\n                // no failing requirements, immediately trigger the tap event\n                // or wait as long as the multitap interval to trigger\n                if (!this.hasRequireFailures()) {\n                    return STATE_RECOGNIZED;\n                } else {\n                    this._timer = setTimeoutContext(function() {\n                        this.state = STATE_RECOGNIZED;\n                        this.tryEmit();\n                    }, options.interval, this);\n                    return STATE_BEGAN;\n                }\n            }\n        }\n        return STATE_FAILED;\n    },\n\n    failTimeout: function() {\n        this._timer = setTimeoutContext(function() {\n            this.state = STATE_FAILED;\n        }, this.options.interval, this);\n        return STATE_FAILED;\n    },\n\n    reset: function() {\n        clearTimeout(this._timer);\n    },\n\n    emit: function() {\n        if (this.state == STATE_RECOGNIZED) {\n            this._input.tapCount = this.count;\n            this.manager.emit(this.options.event, this._input);\n        }\n    }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n    options = options || {};\n    options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n    return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n    /**\n     * set if DOM events are being triggered.\n     * But this is slower and unused by simple implementations, so disabled by default.\n     * @type {Boolean}\n     * @default false\n     */\n    domEvents: false,\n\n    /**\n     * The value for the touchAction property/fallback.\n     * When set to `compute` it will magically set the correct value based on the added recognizers.\n     * @type {String}\n     * @default compute\n     */\n    touchAction: TOUCH_ACTION_COMPUTE,\n\n    /**\n     * @type {Boolean}\n     * @default true\n     */\n    enable: true,\n\n    /**\n     * EXPERIMENTAL FEATURE -- can be removed/changed\n     * Change the parent input target element.\n     * If Null, then it is being set the to main element.\n     * @type {Null|EventTarget}\n     * @default null\n     */\n    inputTarget: null,\n\n    /**\n     * force an input class\n     * @type {Null|Function}\n     * @default null\n     */\n    inputClass: null,\n\n    /**\n     * Default recognizer setup when calling `Hammer()`\n     * When creating a new Manager these will be skipped.\n     * @type {Array}\n     */\n    preset: [\n        // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n        [RotateRecognizer, {enable: false}],\n        [PinchRecognizer, {enable: false}, ['rotate']],\n        [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n        [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n        [TapRecognizer],\n        [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n        [PressRecognizer]\n    ],\n\n    /**\n     * Some CSS properties can be used to improve the working of Hammer.\n     * Add them to this method and they will be set when creating a new Manager.\n     * @namespace\n     */\n    cssProps: {\n        /**\n         * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n         * @type {String}\n         * @default 'none'\n         */\n        userSelect: 'none',\n\n        /**\n         * Disable the Windows Phone grippers when pressing an element.\n         * @type {String}\n         * @default 'none'\n         */\n        touchSelect: 'none',\n\n        /**\n         * Disables the default callout shown when you touch and hold a touch target.\n         * On iOS, when you touch and hold a touch target such as a link, Safari displays\n         * a callout containing information about the link. This property allows you to disable that callout.\n         * @type {String}\n         * @default 'none'\n         */\n        touchCallout: 'none',\n\n        /**\n         * Specifies whether zooming is enabled. Used by IE10>\n         * @type {String}\n         * @default 'none'\n         */\n        contentZooming: 'none',\n\n        /**\n         * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n         * @type {String}\n         * @default 'none'\n         */\n        userDrag: 'none',\n\n        /**\n         * Overrides the highlight color shown when the user taps a link or a JavaScript\n         * clickable element in iOS. This property obeys the alpha value, if specified.\n         * @type {String}\n         * @default 'rgba(0,0,0,0)'\n         */\n        tapHighlightColor: 'rgba(0,0,0,0)'\n    }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n    this.options = assign({}, Hammer.defaults, options || {});\n\n    this.options.inputTarget = this.options.inputTarget || element;\n\n    this.handlers = {};\n    this.session = {};\n    this.recognizers = [];\n    this.oldCssProps = {};\n\n    this.element = element;\n    this.input = createInputInstance(this);\n    this.touchAction = new TouchAction(this, this.options.touchAction);\n\n    toggleCssProps(this, true);\n\n    each(this.options.recognizers, function(item) {\n        var recognizer = this.add(new (item[0])(item[1]));\n        item[2] && recognizer.recognizeWith(item[2]);\n        item[3] && recognizer.requireFailure(item[3]);\n    }, this);\n}\n\nManager.prototype = {\n    /**\n     * set options\n     * @param {Object} options\n     * @returns {Manager}\n     */\n    set: function(options) {\n        assign(this.options, options);\n\n        // Options that need a little more setup\n        if (options.touchAction) {\n            this.touchAction.update();\n        }\n        if (options.inputTarget) {\n            // Clean up existing event listeners and reinitialize\n            this.input.destroy();\n            this.input.target = options.inputTarget;\n            this.input.init();\n        }\n        return this;\n    },\n\n    /**\n     * stop recognizing for this session.\n     * This session will be discarded, when a new [input]start event is fired.\n     * When forced, the recognizer cycle is stopped immediately.\n     * @param {Boolean} [force]\n     */\n    stop: function(force) {\n        this.session.stopped = force ? FORCED_STOP : STOP;\n    },\n\n    /**\n     * run the recognizers!\n     * called by the inputHandler function on every movement of the pointers (touches)\n     * it walks through all the recognizers and tries to detect the gesture that is being made\n     * @param {Object} inputData\n     */\n    recognize: function(inputData) {\n        var session = this.session;\n        if (session.stopped) {\n            return;\n        }\n\n        // run the touch-action polyfill\n        this.touchAction.preventDefaults(inputData);\n\n        var recognizer;\n        var recognizers = this.recognizers;\n\n        // this holds the recognizer that is being recognized.\n        // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n        // if no recognizer is detecting a thing, it is set to `null`\n        var curRecognizer = session.curRecognizer;\n\n        // reset when the last recognizer is recognized\n        // or when we're in a new session\n        if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n            curRecognizer = session.curRecognizer = null;\n        }\n\n        var i = 0;\n        while (i < recognizers.length) {\n            recognizer = recognizers[i];\n\n            // find out if we are allowed try to recognize the input for this one.\n            // 1.   allow if the session is NOT forced stopped (see the .stop() method)\n            // 2.   allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n            //      that is being recognized.\n            // 3.   allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n            //      this can be setup with the `recognizeWith()` method on the recognizer.\n            if (session.stopped !== FORCED_STOP && ( // 1\n                    !curRecognizer || recognizer == curRecognizer || // 2\n                    recognizer.canRecognizeWith(curRecognizer))) { // 3\n                recognizer.recognize(inputData);\n            } else {\n                recognizer.reset();\n            }\n\n            // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n            // current active recognizer. but only if we don't already have an active recognizer\n            if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n                curRecognizer = session.curRecognizer = recognizer;\n            }\n            i++;\n        }\n    },\n\n    /**\n     * get a recognizer by its event name.\n     * @param {Recognizer|String} recognizer\n     * @returns {Recognizer|Null}\n     */\n    get: function(recognizer) {\n        if (recognizer instanceof Recognizer) {\n            return recognizer;\n        }\n\n        var recognizers = this.recognizers;\n        for (var i = 0; i < recognizers.length; i++) {\n            if (recognizers[i].options.event == recognizer) {\n                return recognizers[i];\n            }\n        }\n        return null;\n    },\n\n    /**\n     * add a recognizer to the manager\n     * existing recognizers with the same event name will be removed\n     * @param {Recognizer} recognizer\n     * @returns {Recognizer|Manager}\n     */\n    add: function(recognizer) {\n        if (invokeArrayArg(recognizer, 'add', this)) {\n            return this;\n        }\n\n        // remove existing\n        var existing = this.get(recognizer.options.event);\n        if (existing) {\n            this.remove(existing);\n        }\n\n        this.recognizers.push(recognizer);\n        recognizer.manager = this;\n\n        this.touchAction.update();\n        return recognizer;\n    },\n\n    /**\n     * remove a recognizer by name or instance\n     * @param {Recognizer|String} recognizer\n     * @returns {Manager}\n     */\n    remove: function(recognizer) {\n        if (invokeArrayArg(recognizer, 'remove', this)) {\n            return this;\n        }\n\n        recognizer = this.get(recognizer);\n\n        // let's make sure this recognizer exists\n        if (recognizer) {\n            var recognizers = this.recognizers;\n            var index = inArray(recognizers, recognizer);\n\n            if (index !== -1) {\n                recognizers.splice(index, 1);\n                this.touchAction.update();\n            }\n        }\n\n        return this;\n    },\n\n    /**\n     * bind event\n     * @param {String} events\n     * @param {Function} handler\n     * @returns {EventEmitter} this\n     */\n    on: function(events, handler) {\n        if (events === undefined) {\n            return;\n        }\n        if (handler === undefined) {\n            return;\n        }\n\n        var handlers = this.handlers;\n        each(splitStr(events), function(event) {\n            handlers[event] = handlers[event] || [];\n            handlers[event].push(handler);\n        });\n        return this;\n    },\n\n    /**\n     * unbind event, leave emit blank to remove all handlers\n     * @param {String} events\n     * @param {Function} [handler]\n     * @returns {EventEmitter} this\n     */\n    off: function(events, handler) {\n        if (events === undefined) {\n            return;\n        }\n\n        var handlers = this.handlers;\n        each(splitStr(events), function(event) {\n            if (!handler) {\n                delete handlers[event];\n            } else {\n                handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n            }\n        });\n        return this;\n    },\n\n    /**\n     * emit event to the listeners\n     * @param {String} event\n     * @param {Object} data\n     */\n    emit: function(event, data) {\n        // we also want to trigger dom events\n        if (this.options.domEvents) {\n            triggerDomEvent(event, data);\n        }\n\n        // no handlers, so skip it all\n        var handlers = this.handlers[event] && this.handlers[event].slice();\n        if (!handlers || !handlers.length) {\n            return;\n        }\n\n        data.type = event;\n        data.preventDefault = function() {\n            data.srcEvent.preventDefault();\n        };\n\n        var i = 0;\n        while (i < handlers.length) {\n            handlers[i](data);\n            i++;\n        }\n    },\n\n    /**\n     * destroy the manager and unbinds all events\n     * it doesn't unbind dom events, that is the user own responsibility\n     */\n    destroy: function() {\n        this.element && toggleCssProps(this, false);\n\n        this.handlers = {};\n        this.session = {};\n        this.input.destroy();\n        this.element = null;\n    }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n    var element = manager.element;\n    if (!element.style) {\n        return;\n    }\n    var prop;\n    each(manager.options.cssProps, function(value, name) {\n        prop = prefixed(element.style, name);\n        if (add) {\n            manager.oldCssProps[prop] = element.style[prop];\n            element.style[prop] = value;\n        } else {\n            element.style[prop] = manager.oldCssProps[prop] || '';\n        }\n    });\n    if (!add) {\n        manager.oldCssProps = {};\n    }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n    var gestureEvent = document.createEvent('Event');\n    gestureEvent.initEvent(event, true, true);\n    gestureEvent.gesture = data;\n    data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n    INPUT_START: INPUT_START,\n    INPUT_MOVE: INPUT_MOVE,\n    INPUT_END: INPUT_END,\n    INPUT_CANCEL: INPUT_CANCEL,\n\n    STATE_POSSIBLE: STATE_POSSIBLE,\n    STATE_BEGAN: STATE_BEGAN,\n    STATE_CHANGED: STATE_CHANGED,\n    STATE_ENDED: STATE_ENDED,\n    STATE_RECOGNIZED: STATE_RECOGNIZED,\n    STATE_CANCELLED: STATE_CANCELLED,\n    STATE_FAILED: STATE_FAILED,\n\n    DIRECTION_NONE: DIRECTION_NONE,\n    DIRECTION_LEFT: DIRECTION_LEFT,\n    DIRECTION_RIGHT: DIRECTION_RIGHT,\n    DIRECTION_UP: DIRECTION_UP,\n    DIRECTION_DOWN: DIRECTION_DOWN,\n    DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n    DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n    DIRECTION_ALL: DIRECTION_ALL,\n\n    Manager: Manager,\n    Input: Input,\n    TouchAction: TouchAction,\n\n    TouchInput: TouchInput,\n    MouseInput: MouseInput,\n    PointerEventInput: PointerEventInput,\n    TouchMouseInput: TouchMouseInput,\n    SingleTouchInput: SingleTouchInput,\n\n    Recognizer: Recognizer,\n    AttrRecognizer: AttrRecognizer,\n    Tap: TapRecognizer,\n    Pan: PanRecognizer,\n    Swipe: SwipeRecognizer,\n    Pinch: PinchRecognizer,\n    Rotate: RotateRecognizer,\n    Press: PressRecognizer,\n\n    on: addEventListeners,\n    off: removeEventListeners,\n    each: each,\n    merge: merge,\n    extend: extend,\n    assign: assign,\n    inherit: inherit,\n    bindFn: bindFn,\n    prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n//  style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n    define(function() {\n        return Hammer;\n    });\n} else if (typeof module != 'undefined' && module.exports) {\n    module.exports = Hammer;\n} else {\n    window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n", "//! moment.js\n//! version : 2.29.4\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks() {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback(callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return (\n            input instanceof Array ||\n            Object.prototype.toString.call(input) === '[object Array]'\n        );\n    }\n\n    function isObject(input) {\n        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return (\n            input != null &&\n            Object.prototype.toString.call(input) === '[object Object]'\n        );\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return Object.getOwnPropertyNames(obj).length === 0;\n        } else {\n            var k;\n            for (k in obj) {\n                if (hasOwnProp(obj, k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return (\n            typeof input === 'number' ||\n            Object.prototype.toString.call(input) === '[object Number]'\n        );\n    }\n\n    function isDate(input) {\n        return (\n            input instanceof Date ||\n            Object.prototype.toString.call(input) === '[object Date]'\n        );\n    }\n\n    function map(arr, fn) {\n        var res = [],\n            i,\n            arrLen = arr.length;\n        for (i = 0; i < arrLen; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function createUTC(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty: false,\n            unusedTokens: [],\n            unusedInput: [],\n            overflow: -2,\n            charsLeftOver: 0,\n            nullInput: false,\n            invalidEra: null,\n            invalidMonth: null,\n            invalidFormat: false,\n            userInvalidated: false,\n            iso: false,\n            parsedDateParts: [],\n            era: null,\n            meridiem: null,\n            rfc2822: false,\n            weekdayMismatch: false,\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this),\n                len = t.length >>> 0,\n                i;\n\n            for (i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function isValid(m) {\n        if (m._isValid == null) {\n            var flags = getParsingFlags(m),\n                parsedParts = some.call(flags.parsedDateParts, function (i) {\n                    return i != null;\n                }),\n                isNowValid =\n                    !isNaN(m._d.getTime()) &&\n                    flags.overflow < 0 &&\n                    !flags.empty &&\n                    !flags.invalidEra &&\n                    !flags.invalidMonth &&\n                    !flags.invalidWeekday &&\n                    !flags.weekdayMismatch &&\n                    !flags.nullInput &&\n                    !flags.invalidFormat &&\n                    !flags.userInvalidated &&\n                    (!flags.meridiem || (flags.meridiem && parsedParts));\n\n            if (m._strict) {\n                isNowValid =\n                    isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n\n            if (Object.isFrozen == null || !Object.isFrozen(m)) {\n                m._isValid = isNowValid;\n            } else {\n                return isNowValid;\n            }\n        }\n        return m._isValid;\n    }\n\n    function createInvalid(flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        } else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = (hooks.momentProperties = []),\n        updateInProgress = false;\n\n    function copyConfig(to, from) {\n        var i,\n            prop,\n            val,\n            momentPropertiesLen = momentProperties.length;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentPropertiesLen > 0) {\n            for (i = 0; i < momentPropertiesLen; i++) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment(obj) {\n        return (\n            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n        );\n    }\n\n    function warn(msg) {\n        if (\n            hooks.suppressDeprecationWarnings === false &&\n            typeof console !== 'undefined' &&\n            console.warn\n        ) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [],\n                    arg,\n                    i,\n                    key,\n                    argLen = arguments.length;\n                for (i = 0; i < argLen; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (key in arguments[0]) {\n                            if (hasOwnProp(arguments[0], key)) {\n                                arg += key + ': ' + arguments[0][key] + ', ';\n                            }\n                        }\n                        arg = arg.slice(0, -2); // Remove trailing comma and space\n                    } else {\n                        arg = arguments[i];\n                    }\n                    args.push(arg);\n                }\n                warn(\n                    msg +\n                        '\\nArguments: ' +\n                        Array.prototype.slice.call(args).join('') +\n                        '\\n' +\n                        new Error().stack\n                );\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    function set(config) {\n        var prop, i;\n        for (i in config) {\n            if (hasOwnProp(config, i)) {\n                prop = config[i];\n                if (isFunction(prop)) {\n                    this[i] = prop;\n                } else {\n                    this['_' + i] = prop;\n                }\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' +\n                /\\d{1,2}/.source\n        );\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig),\n            prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (\n                hasOwnProp(parentConfig, prop) &&\n                !hasOwnProp(childConfig, prop) &&\n                isObject(parentConfig[prop])\n            ) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i,\n                res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay: '[Today at] LT',\n        nextDay: '[Tomorrow at] LT',\n        nextWeek: 'dddd [at] LT',\n        lastDay: '[Yesterday at] LT',\n        lastWeek: '[Last] dddd [at] LT',\n        sameElse: 'L',\n    };\n\n    function calendar(key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (\n            (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n            absNumber\n        );\n    }\n\n    var formattingTokens =\n            /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n        localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n        formatFunctions = {},\n        formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken(token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(\n                    func.apply(this, arguments),\n                    token\n                );\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens),\n            i,\n            length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '',\n                i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i])\n                    ? array[i].call(mom, format)\n                    : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] =\n            formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(\n                localFormattingTokens,\n                replaceLongDateFormatTokens\n            );\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var defaultLongDateFormat = {\n        LTS: 'h:mm:ss A',\n        LT: 'h:mm A',\n        L: 'MM/DD/YYYY',\n        LL: 'MMMM D, YYYY',\n        LLL: 'MMMM D, YYYY h:mm A',\n        LLLL: 'dddd, MMMM D, YYYY h:mm A',\n    };\n\n    function longDateFormat(key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper\n            .match(formattingTokens)\n            .map(function (tok) {\n                if (\n                    tok === 'MMMM' ||\n                    tok === 'MM' ||\n                    tok === 'DD' ||\n                    tok === 'dddd'\n                ) {\n                    return tok.slice(1);\n                }\n                return tok;\n            })\n            .join('');\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate() {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d',\n        defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n    function ordinal(number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future: 'in %s',\n        past: '%s ago',\n        s: 'a few seconds',\n        ss: '%d seconds',\n        m: 'a minute',\n        mm: '%d minutes',\n        h: 'an hour',\n        hh: '%d hours',\n        d: 'a day',\n        dd: '%d days',\n        w: 'a week',\n        ww: '%d weeks',\n        M: 'a month',\n        MM: '%d months',\n        y: 'a year',\n        yy: '%d years',\n    };\n\n    function relativeTime(number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return isFunction(output)\n            ? output(number, withoutSuffix, string, isFuture)\n            : output.replace(/%d/i, number);\n    }\n\n    function pastFuture(diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {};\n\n    function addUnitAlias(unit, shorthand) {\n        var lowerCase = unit.toLowerCase();\n        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n    }\n\n    function normalizeUnits(units) {\n        return typeof units === 'string'\n            ? aliases[units] || aliases[units.toLowerCase()]\n            : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {};\n\n    function addUnitPriority(unit, priority) {\n        priorities[unit] = priority;\n    }\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [],\n            u;\n        for (u in unitsObj) {\n            if (hasOwnProp(unitsObj, u)) {\n                units.push({ unit: u, priority: priorities[u] });\n            }\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    function absFloor(number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    function makeGetSet(unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get(this, unit);\n            }\n        };\n    }\n\n    function get(mom, unit) {\n        return mom.isValid()\n            ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n            : NaN;\n    }\n\n    function set$1(mom, unit, value) {\n        if (mom.isValid() && !isNaN(value)) {\n            if (\n                unit === 'FullYear' &&\n                isLeapYear(mom.year()) &&\n                mom.month() === 1 &&\n                mom.date() === 29\n            ) {\n                value = toInt(value);\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n                    value,\n                    mom.month(),\n                    daysInMonth(value, mom.month())\n                );\n            } else {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function stringGet(units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n    function stringSet(units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units),\n                i,\n                prioritizedLen = prioritized.length;\n            for (i = 0; i < prioritizedLen; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    var match1 = /\\d/, //       0 - 9\n        match2 = /\\d\\d/, //      00 - 99\n        match3 = /\\d{3}/, //     000 - 999\n        match4 = /\\d{4}/, //    0000 - 9999\n        match6 = /[+-]?\\d{6}/, // -999999 - 999999\n        match1to2 = /\\d\\d?/, //       0 - 99\n        match3to4 = /\\d\\d\\d\\d?/, //     999 - 9999\n        match5to6 = /\\d\\d\\d\\d\\d\\d?/, //   99999 - 999999\n        match1to3 = /\\d{1,3}/, //       0 - 999\n        match1to4 = /\\d{1,4}/, //       0 - 9999\n        match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n        matchUnsigned = /\\d+/, //       0 - inf\n        matchSigned = /[+-]?\\d+/, //    -inf - inf\n        matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n        matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n        matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n        // any word (or two) characters or numbers including two/three word month in arabic.\n        // includes scottish gaelic two word and hyphenated months\n        matchWord =\n            /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n        regexes;\n\n    regexes = {};\n\n    function addRegexToken(token, regex, strictRegex) {\n        regexes[token] = isFunction(regex)\n            ? regex\n            : function (isStrict, localeData) {\n                  return isStrict && strictRegex ? strictRegex : regex;\n              };\n    }\n\n    function getParseRegexForToken(token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(\n            s\n                .replace('\\\\', '')\n                .replace(\n                    /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n                    function (matched, p1, p2, p3, p4) {\n                        return p1 || p2 || p3 || p4;\n                    }\n                )\n        );\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    var tokens = {};\n\n    function addParseToken(token, callback) {\n        var i,\n            func = callback,\n            tokenLen;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (isNumber(callback)) {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        tokenLen = token.length;\n        for (i = 0; i < tokenLen; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken(token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    var YEAR = 0,\n        MONTH = 1,\n        DATE = 2,\n        HOUR = 3,\n        MINUTE = 4,\n        SECOND = 5,\n        MILLISECOND = 6,\n        WEEK = 7,\n        WEEKDAY = 8;\n\n    function mod(n, x) {\n        return ((n % x) + x) % x;\n    }\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1\n            ? isLeapYear(year)\n                ? 29\n                : 28\n            : 31 - ((modMonth % 7) % 2);\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // ALIASES\n\n    addUnitAlias('month', 'M');\n\n    // PRIORITY\n\n    addUnitPriority('month', 8);\n\n    // PARSING\n\n    addRegexToken('M', match1to2);\n    addRegexToken('MM', match1to2, match2);\n    addRegexToken('MMM', function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var defaultLocaleMonths =\n            'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n                '_'\n            ),\n        defaultLocaleMonthsShort =\n            'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n        defaultMonthsShortRegex = matchWord,\n        defaultMonthsRegex = matchWord;\n\n    function localeMonths(m, format) {\n        if (!m) {\n            return isArray(this._months)\n                ? this._months\n                : this._months['standalone'];\n        }\n        return isArray(this._months)\n            ? this._months[m.month()]\n            : this._months[\n                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n                      ? 'format'\n                      : 'standalone'\n              ][m.month()];\n    }\n\n    function localeMonthsShort(m, format) {\n        if (!m) {\n            return isArray(this._monthsShort)\n                ? this._monthsShort\n                : this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort)\n            ? this._monthsShort[m.month()]\n            : this._monthsShort[\n                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n              ][m.month()];\n    }\n\n    function handleStrictParse(monthName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse(monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp(\n                    '^' + this.months(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n                this._shortMonthsParse[i] = new RegExp(\n                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex =\n                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'MMMM' &&\n                this._longMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'MMM' &&\n                this._shortMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth(mom, value) {\n        var dayOfMonth;\n\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (!isNumber(value)) {\n                    return mom;\n                }\n            }\n        }\n\n        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n        return mom;\n    }\n\n    function getSetMonth(value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth() {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    function monthsShortRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict\n                ? this._monthsShortStrictRegex\n                : this._monthsShortRegex;\n        }\n    }\n\n    function monthsRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict\n                ? this._monthsStrictRegex\n                : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortPieces.push(this.monthsShort(mom, ''));\n            longPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.monthsShort(mom, ''));\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 12; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n        }\n        for (i = 0; i < 24; i++) {\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._monthsShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY', 4], 0, 'year');\n    addFormatToken(0, ['YYYYY', 5], 0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // ALIASES\n\n    addUnitAlias('year', 'y');\n\n    // PRIORITIES\n\n    addUnitPriority('year', 1);\n\n    // PARSING\n\n    addRegexToken('Y', matchSigned);\n    addRegexToken('YY', match1to2, match2);\n    addRegexToken('YYYY', match1to4, match4);\n    addRegexToken('YYYYY', match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] =\n            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    // HOOKS\n\n    hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear() {\n        return isLeapYear(this.year());\n    }\n\n    function createDate(y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\n        var date;\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            date = new Date(y + 400, m, d, h, M, s, ms);\n            if (isFinite(date.getFullYear())) {\n                date.setFullYear(y);\n            }\n        } else {\n            date = new Date(y, m, d, h, M, s, ms);\n        }\n\n        return date;\n    }\n\n    function createUTCDate(y) {\n        var date, args;\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            args = Array.prototype.slice.call(arguments);\n            // preserve leap years using a full 400 year cycle, then reset\n            args[0] = y + 400;\n            date = new Date(Date.UTC.apply(null, args));\n            if (isFinite(date.getUTCFullYear())) {\n                date.setUTCFullYear(y);\n            }\n        } else {\n            date = new Date(Date.UTC.apply(null, arguments));\n        }\n\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear,\n            resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear,\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek,\n            resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear,\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // ALIASES\n\n    addUnitAlias('week', 'w');\n    addUnitAlias('isoWeek', 'W');\n\n    // PRIORITIES\n\n    addUnitPriority('week', 5);\n    addUnitPriority('isoWeek', 5);\n\n    // PARSING\n\n    addRegexToken('w', match1to2);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W', match1to2);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(\n        ['w', 'ww', 'W', 'WW'],\n        function (input, week, config, token) {\n            week[token.substr(0, 1)] = toInt(input);\n        }\n    );\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek(mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow: 0, // Sunday is the first day of the week.\n        doy: 6, // The week that contains Jan 6th is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek() {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear() {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek(input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek(input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // ALIASES\n\n    addUnitAlias('day', 'd');\n    addUnitAlias('weekday', 'e');\n    addUnitAlias('isoWeekday', 'E');\n\n    // PRIORITY\n    addUnitPriority('day', 11);\n    addUnitPriority('weekday', 11);\n    addUnitPriority('isoWeekday', 11);\n\n    // PARSING\n\n    addRegexToken('d', match1to2);\n    addRegexToken('e', match1to2);\n    addRegexToken('E', match1to2);\n    addRegexToken('dd', function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd', function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd', function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n    function shiftWeekdays(ws, n) {\n        return ws.slice(n, 7).concat(ws.slice(0, n));\n    }\n\n    var defaultLocaleWeekdays =\n            'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        defaultWeekdaysRegex = matchWord,\n        defaultWeekdaysShortRegex = matchWord,\n        defaultWeekdaysMinRegex = matchWord;\n\n    function localeWeekdays(m, format) {\n        var weekdays = isArray(this._weekdays)\n            ? this._weekdays\n            : this._weekdays[\n                  m && m !== true && this._weekdays.isFormat.test(format)\n                      ? 'format'\n                      : 'standalone'\n              ];\n        return m === true\n            ? shiftWeekdays(weekdays, this._week.dow)\n            : m\n            ? weekdays[m.day()]\n            : weekdays;\n    }\n\n    function localeWeekdaysShort(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n            : m\n            ? this._weekdaysShort[m.day()]\n            : this._weekdaysShort;\n    }\n\n    function localeWeekdaysMin(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n            : m\n            ? this._weekdaysMin[m.day()]\n            : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(weekdayName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse(weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return handleStrictParse$1.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._shortWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._minWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n            }\n            if (!this._weekdaysParse[i]) {\n                regex =\n                    '^' +\n                    this.weekdays(mom, '') +\n                    '|^' +\n                    this.weekdaysShort(mom, '') +\n                    '|^' +\n                    this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'dddd' &&\n                this._fullWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'ddd' &&\n                this._shortWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'dd' &&\n                this._minWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    function weekdaysRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict\n                ? this._weekdaysStrictRegex\n                : this._weekdaysRegex;\n        }\n    }\n\n    function weekdaysShortRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict\n                ? this._weekdaysShortStrictRegex\n                : this._weekdaysShortRegex;\n        }\n    }\n\n    function weekdaysMinRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict\n                ? this._weekdaysMinStrictRegex\n                : this._weekdaysMinRegex;\n        }\n    }\n\n    function computeWeekdaysParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [],\n            shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            minp,\n            shortp,\n            longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, 1]).day(i);\n            minp = regexEscape(this.weekdaysMin(mom, ''));\n            shortp = regexEscape(this.weekdaysShort(mom, ''));\n            longp = regexEscape(this.weekdays(mom, ''));\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysMinStrictRegex = new RegExp(\n            '^(' + minPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return (\n            '' +\n            hFormat.apply(this) +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return (\n            '' +\n            this.hours() +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    function meridiem(token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(\n                this.hours(),\n                this.minutes(),\n                lowercase\n            );\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // ALIASES\n\n    addUnitAlias('hour', 'h');\n\n    // PRIORITY\n    addUnitPriority('hour', 13);\n\n    // PARSING\n\n    function matchMeridiem(isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a', matchMeridiem);\n    addRegexToken('A', matchMeridiem);\n    addRegexToken('H', match1to2);\n    addRegexToken('h', match1to2);\n    addRegexToken('k', match1to2);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n    addRegexToken('kk', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM(input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return (input + '').toLowerCase().charAt(0) === 'p';\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n        // Setting the hour should keep the time, because the user explicitly\n        // specified which hour they want. So trying to maintain the same hour (in\n        // a new timezone) makes sense. Adding/subtracting hours does not follow\n        // this rule.\n        getSetHour = makeGetSet('Hours', true);\n\n    function localeMeridiem(hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse,\n    };\n\n    // internal storage for locale config files\n    var locales = {},\n        localeFamilies = {},\n        globalLocale;\n\n    function commonPrefix(arr1, arr2) {\n        var i,\n            minl = Math.min(arr1.length, arr2.length);\n        for (i = 0; i < minl; i += 1) {\n            if (arr1[i] !== arr2[i]) {\n                return i;\n            }\n        }\n        return minl;\n    }\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0,\n            j,\n            next,\n            locale,\n            split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (\n                    next &&\n                    next.length >= j &&\n                    commonPrefix(split, next) >= j - 1\n                ) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return globalLocale;\n    }\n\n    function isLocaleNameSane(name) {\n        // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n        return name.match('^[^/\\\\\\\\]*$') != null;\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null,\n            aliasedRequire;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (\n            locales[name] === undefined &&\n            typeof module !== 'undefined' &&\n            module &&\n            module.exports &&\n            isLocaleNameSane(name)\n        ) {\n            try {\n                oldLocale = globalLocale._abbr;\n                aliasedRequire = require;\n                aliasedRequire('./locale/' + name);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {\n                // mark as not found to avoid repeating expensive file require call causing high CPU\n                // when trying to find en-US, en_US, en-us for every format call\n                locales[name] = null; // null means not found\n            }\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function getSetGlobalLocale(key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = getLocale(key);\n            } else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            } else {\n                if (typeof console !== 'undefined' && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn(\n                        'Locale ' + key + ' not found. Did you forget to load it?'\n                    );\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale(name, config) {\n        if (config !== null) {\n            var locale,\n                parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple(\n                    'defineLocaleOverride',\n                    'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n                );\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config,\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale,\n                tmpLocale,\n                parentConfig = baseConfig;\n\n            if (locales[name] != null && locales[name].parentLocale != null) {\n                // Update existing child locale in-place to avoid memory-leaks\n                locales[name].set(mergeConfigs(locales[name]._config, config));\n            } else {\n                // MERGE\n                tmpLocale = loadLocale(name);\n                if (tmpLocale != null) {\n                    parentConfig = tmpLocale._config;\n                }\n                config = mergeConfigs(parentConfig, config);\n                if (tmpLocale == null) {\n                    // updateLocale is called for creating a new locale\n                    // Set abbr so it will have a name (getters return\n                    // undefined otherwise).\n                    config.abbr = name;\n                }\n                locale = new Locale(config);\n                locale.parentLocale = locales[name];\n                locales[name] = locale;\n            }\n\n            // backwards compat for now: also set the locale\n            getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                    if (name === getSetGlobalLocale()) {\n                        getSetGlobalLocale(name);\n                    }\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function getLocale(key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow(m) {\n        var overflow,\n            a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH] < 0 || a[MONTH] > 11\n                    ? MONTH\n                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n                    ? DATE\n                    : a[HOUR] < 0 ||\n                      a[HOUR] > 24 ||\n                      (a[HOUR] === 24 &&\n                          (a[MINUTE] !== 0 ||\n                              a[SECOND] !== 0 ||\n                              a[MILLISECOND] !== 0))\n                    ? HOUR\n                    : a[MINUTE] < 0 || a[MINUTE] > 59\n                    ? MINUTE\n                    : a[SECOND] < 0 || a[SECOND] > 59\n                    ? SECOND\n                    : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n                    ? MILLISECOND\n                    : -1;\n\n            if (\n                getParsingFlags(m)._overflowDayOfYear &&\n                (overflow < YEAR || overflow > DATE)\n            ) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        basicIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n        isoDates = [\n            ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n            ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n            ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n            ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n            ['YYYY-DDD', /\\d{4}-\\d{3}/],\n            ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n            ['YYYYYYMMDD', /[+-]\\d{10}/],\n            ['YYYYMMDD', /\\d{8}/],\n            ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n            ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n            ['YYYYDDD', /\\d{7}/],\n            ['YYYYMM', /\\d{6}/, false],\n            ['YYYY', /\\d{4}/, false],\n        ],\n        // iso time formats and regexes\n        isoTimes = [\n            ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n            ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n            ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n            ['HH:mm', /\\d\\d:\\d\\d/],\n            ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n            ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n            ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n            ['HHmm', /\\d\\d\\d\\d/],\n            ['HH', /\\d\\d/],\n        ],\n        aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n        rfc2822 =\n            /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n        obsOffsets = {\n            UT: 0,\n            GMT: 0,\n            EDT: -4 * 60,\n            EST: -5 * 60,\n            CDT: -5 * 60,\n            CST: -6 * 60,\n            MDT: -6 * 60,\n            MST: -7 * 60,\n            PDT: -7 * 60,\n            PST: -8 * 60,\n        };\n\n    // date from iso format\n    function configFromISO(config) {\n        var i,\n            l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime,\n            dateFormat,\n            timeFormat,\n            tzFormat,\n            isoDatesLen = isoDates.length,\n            isoTimesLen = isoTimes.length;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n            for (i = 0, l = isoDatesLen; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimesLen; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    function extractFromRFC2822Strings(\n        yearStr,\n        monthStr,\n        dayStr,\n        hourStr,\n        minuteStr,\n        secondStr\n    ) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10),\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s\n            .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n            .replace(/(\\s\\s+)/g, ' ')\n            .replace(/^\\s\\s*/, '')\n            .replace(/\\s\\s*$/, '');\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(\n                    parsedInput[0],\n                    parsedInput[1],\n                    parsedInput[2]\n                ).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10),\n                m = hm % 100,\n                h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i)),\n            parsedArray;\n        if (match) {\n            parsedArray = extractFromRFC2822Strings(\n                match[4],\n                match[3],\n                match[2],\n                match[5],\n                match[6],\n                match[7]\n            );\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        if (config._strict) {\n            config._isValid = false;\n        } else {\n            // Final attempt, use Input Fallback\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n            'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(hooks.now());\n        if (config._useUTC) {\n            return [\n                nowValue.getUTCFullYear(),\n                nowValue.getUTCMonth(),\n                nowValue.getUTCDate(),\n            ];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray(config) {\n        var i,\n            date,\n            input = [],\n            currentDate,\n            expectedWeekday,\n            yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear != null) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (\n                config._dayOfYear > daysInYear(yearToUse) ||\n                config._dayOfYear === 0\n            ) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] =\n                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (\n            config._a[HOUR] === 24 &&\n            config._a[MINUTE] === 0 &&\n            config._a[SECOND] === 0 &&\n            config._a[MILLISECOND] === 0\n        ) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(\n            null,\n            input\n        );\n        expectedWeekday = config._useUTC\n            ? config._d.getUTCDay()\n            : config._d.getDay();\n\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n\n        // check for mismatching day of week\n        if (\n            config._w &&\n            typeof config._w.d !== 'undefined' &&\n            config._w.d !== expectedWeekday\n        ) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(\n                w.GG,\n                config._a[YEAR],\n                weekOfYear(createLocal(), 1, 4).year\n            );\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            curWeek = weekOfYear(createLocal(), dow, doy);\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from beginning of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to beginning of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i,\n            parsedInput,\n            tokens,\n            token,\n            skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0,\n            era,\n            tokenLen;\n\n        tokens =\n            expandFormat(config._f, config._locale).match(formattingTokens) || [];\n        tokenLen = tokens.length;\n        for (i = 0; i < tokenLen; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n                [])[0];\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(\n                    string.indexOf(parsedInput) + parsedInput.length\n                );\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                } else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            } else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver =\n            stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (\n            config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0\n        ) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(\n            config._locale,\n            config._a[HOUR],\n            config._meridiem\n        );\n\n        // handle era\n        era = getParsingFlags(config).era;\n        if (era !== null) {\n            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n        }\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n    function meridiemFixWrap(locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n            scoreToBeat,\n            i,\n            currentScore,\n            validFormatFound,\n            bestFormatIsValid = false,\n            configfLen = config._f.length;\n\n        if (configfLen === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < configfLen; i++) {\n            currentScore = 0;\n            validFormatFound = false;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (isValid(tempConfig)) {\n                validFormatFound = true;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (!bestFormatIsValid) {\n                if (\n                    scoreToBeat == null ||\n                    currentScore < scoreToBeat ||\n                    validFormatFound\n                ) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                    if (validFormatFound) {\n                        bestFormatIsValid = true;\n                    }\n                }\n            } else {\n                if (currentScore < scoreToBeat) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                }\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i),\n            dayOrDate = i.day === undefined ? i.date : i.day;\n        config._a = map(\n            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n            function (obj) {\n                return obj && parseInt(obj, 10);\n            }\n        );\n\n        configFromArray(config);\n    }\n\n    function createFromConfig(config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig(config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return createInvalid({ nullInput: true });\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        } else {\n            configFromInput(config);\n        }\n\n        if (!isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC(input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (format === true || format === false) {\n            strict = format;\n            format = undefined;\n        }\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if (\n            (isObject(input) && isObjectEmpty(input)) ||\n            (isArray(input) && input.length === 0)\n        ) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function createLocal(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other < this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        ),\n        prototypeMax = deprecate(\n            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other > this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +new Date();\n    };\n\n    var ordering = [\n        'year',\n        'quarter',\n        'month',\n        'week',\n        'day',\n        'hour',\n        'minute',\n        'second',\n        'millisecond',\n    ];\n\n    function isDurationValid(m) {\n        var key,\n            unitHasDecimal = false,\n            i,\n            orderLen = ordering.length;\n        for (key in m) {\n            if (\n                hasOwnProp(m, key) &&\n                !(\n                    indexOf.call(ordering, key) !== -1 &&\n                    (m[key] == null || !isNaN(m[key]))\n                )\n            ) {\n                return false;\n            }\n        }\n\n        for (i = 0; i < orderLen; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid$1() {\n        return createDuration(NaN);\n    }\n\n    function Duration(duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        this._isValid = isDurationValid(normalizedInput);\n\n        // representation for dateAddRemove\n        this._milliseconds =\n            +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days + weeks * 7;\n        // It is impossible to translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months + quarters * 3 + years * 12;\n\n        this._data = {};\n\n        this._locale = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration(obj) {\n        return obj instanceof Duration;\n    }\n\n    function absRound(number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if (\n                (dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n            ) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    // FORMATTING\n\n    function offset(token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset(),\n                sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return (\n                sign +\n                zeroFill(~~(offset / 60), 2) +\n                separator +\n                zeroFill(~~offset % 60, 2)\n            );\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z', matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = (string || '').match(matcher),\n            chunk,\n            parts,\n            minutes;\n\n        if (matches === null) {\n            return null;\n        }\n\n        chunk = matches[matches.length - 1] || [];\n        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff =\n                (isMoment(input) || isDate(input)\n                    ? input.valueOf()\n                    : createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return createLocal(input).local();\n        }\n    }\n\n    function getDateOffset(m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset());\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset(input, keepLocalTime, keepMinutes) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    addSubtract(\n                        this,\n                        createDuration(input - offset, 'm'),\n                        1,\n                        false\n                    );\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone(input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC(keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal(keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset() {\n        if (this._tzm != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            } else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset(input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime() {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted() {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {},\n            other;\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted =\n                this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal() {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset() {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc() {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n        // and further modified to allow for strings containing both week and day\n        isoRegex =\n            /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n    function createDuration(input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms: input._milliseconds,\n                d: input._days,\n                M: input._months,\n            };\n        } else if (isNumber(input) || !isNaN(+input)) {\n            duration = {};\n            if (key) {\n                duration[key] = +input;\n            } else {\n                duration.milliseconds = +input;\n            }\n        } else if ((match = aspNetRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: 0,\n                d: toInt(match[DATE]) * sign,\n                h: toInt(match[HOUR]) * sign,\n                m: toInt(match[MINUTE]) * sign,\n                s: toInt(match[SECOND]) * sign,\n                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n            };\n        } else if ((match = isoRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: parseIso(match[2], sign),\n                M: parseIso(match[3], sign),\n                w: parseIso(match[4], sign),\n                d: parseIso(match[5], sign),\n                h: parseIso(match[6], sign),\n                m: parseIso(match[7], sign),\n                s: parseIso(match[8], sign),\n            };\n        } else if (duration == null) {\n            // checks for null or undefined\n            duration = {};\n        } else if (\n            typeof duration === 'object' &&\n            ('from' in duration || 'to' in duration)\n        ) {\n            diffRes = momentsDifference(\n                createLocal(duration.from),\n                createLocal(duration.to)\n            );\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n            ret._isValid = input._isValid;\n        }\n\n        return ret;\n    }\n\n    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid$1;\n\n    function parseIso(inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {};\n\n        res.months =\n            other.month() - base.month() + (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return { milliseconds: 0, months: 0 };\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(\n                    name,\n                    'moment().' +\n                        name +\n                        '(period, number) is deprecated. Please use moment().' +\n                        name +\n                        '(number, period). ' +\n                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n                );\n                tmp = val;\n                val = period;\n                period = tmp;\n            }\n\n            dur = createDuration(val, period);\n            addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function addSubtract(mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (months) {\n            setMonth(mom, get(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add = createAdder(1, 'add'),\n        subtract = createAdder(-1, 'subtract');\n\n    function isString(input) {\n        return typeof input === 'string' || input instanceof String;\n    }\n\n    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n    function isMomentInput(input) {\n        return (\n            isMoment(input) ||\n            isDate(input) ||\n            isString(input) ||\n            isNumber(input) ||\n            isNumberOrStringArray(input) ||\n            isMomentInputObject(input) ||\n            input === null ||\n            input === undefined\n        );\n    }\n\n    function isMomentInputObject(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'years',\n                'year',\n                'y',\n                'months',\n                'month',\n                'M',\n                'days',\n                'day',\n                'd',\n                'dates',\n                'date',\n                'D',\n                'hours',\n                'hour',\n                'h',\n                'minutes',\n                'minute',\n                'm',\n                'seconds',\n                'second',\n                's',\n                'milliseconds',\n                'millisecond',\n                'ms',\n            ],\n            i,\n            property,\n            propertyLen = properties.length;\n\n        for (i = 0; i < propertyLen; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function isNumberOrStringArray(input) {\n        var arrayTest = isArray(input),\n            dataTypeTest = false;\n        if (arrayTest) {\n            dataTypeTest =\n                input.filter(function (item) {\n                    return !isNumber(item) && isString(input);\n                }).length === 0;\n        }\n        return arrayTest && dataTypeTest;\n    }\n\n    function isCalendarSpec(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'sameDay',\n                'nextDay',\n                'lastDay',\n                'nextWeek',\n                'lastWeek',\n                'sameElse',\n            ],\n            i,\n            property;\n\n        for (i = 0; i < properties.length; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6\n            ? 'sameElse'\n            : diff < -1\n            ? 'lastWeek'\n            : diff < 0\n            ? 'lastDay'\n            : diff < 1\n            ? 'sameDay'\n            : diff < 2\n            ? 'nextDay'\n            : diff < 7\n            ? 'nextWeek'\n            : 'sameElse';\n    }\n\n    function calendar$1(time, formats) {\n        // Support for single parameter, formats only overload to the calendar function\n        if (arguments.length === 1) {\n            if (!arguments[0]) {\n                time = undefined;\n                formats = undefined;\n            } else if (isMomentInput(arguments[0])) {\n                time = arguments[0];\n                formats = undefined;\n            } else if (isCalendarSpec(arguments[0])) {\n                formats = arguments[0];\n                time = undefined;\n            }\n        }\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = hooks.calendarFormat(this, sod) || 'sameElse',\n            output =\n                formats &&\n                (isFunction(formats[format])\n                    ? formats[format].call(this, now)\n                    : formats[format]);\n\n        return this.format(\n            output || this.localeData().calendar(format, this, createLocal(now))\n        );\n    }\n\n    function clone() {\n        return new Moment(this);\n    }\n\n    function isAfter(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween(from, to, units, inclusivity) {\n        var localFrom = isMoment(from) ? from : createLocal(from),\n            localTo = isMoment(to) ? to : createLocal(to);\n        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n            return false;\n        }\n        inclusivity = inclusivity || '()';\n        return (\n            (inclusivity[0] === '('\n                ? this.isAfter(localFrom, units)\n                : !this.isBefore(localFrom, units)) &&\n            (inclusivity[1] === ')'\n                ? this.isBefore(localTo, units)\n                : !this.isAfter(localTo, units))\n        );\n    }\n\n    function isSame(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return (\n                this.clone().startOf(units).valueOf() <= inputMs &&\n                inputMs <= this.clone().endOf(units).valueOf()\n            );\n        }\n    }\n\n    function isSameOrAfter(input, units) {\n        return this.isSame(input, units) || this.isAfter(input, units);\n    }\n\n    function isSameOrBefore(input, units) {\n        return this.isSame(input, units) || this.isBefore(input, units);\n    }\n\n    function diff(input, units, asFloat) {\n        var that, zoneDelta, output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        switch (units) {\n            case 'year':\n                output = monthDiff(this, that) / 12;\n                break;\n            case 'month':\n                output = monthDiff(this, that);\n                break;\n            case 'quarter':\n                output = monthDiff(this, that) / 3;\n                break;\n            case 'second':\n                output = (this - that) / 1e3;\n                break; // 1000\n            case 'minute':\n                output = (this - that) / 6e4;\n                break; // 1000 * 60\n            case 'hour':\n                output = (this - that) / 36e5;\n                break; // 1000 * 60 * 60\n            case 'day':\n                output = (this - that - zoneDelta) / 864e5;\n                break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week':\n                output = (this - that - zoneDelta) / 6048e5;\n                break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default:\n                output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff(a, b) {\n        if (a.date() < b.date()) {\n            // end-of-month calculations work correct when the start month has more\n            // days than the end month.\n            return -monthDiff(b, a);\n        }\n        // difference in months\n        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2,\n            adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString() {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function toISOString(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true,\n            m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(\n                m,\n                utc\n                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n            );\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n                    .toISOString()\n                    .replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(\n            m,\n            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n        );\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect() {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment',\n            zone = '',\n            prefix,\n            year,\n            datetime,\n            suffix;\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        prefix = '[' + func + '(\"]';\n        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n        datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format(inputString) {\n        if (!inputString) {\n            inputString = this.isUtc()\n                ? hooks.defaultFormatUtc\n                : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ to: this, from: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow(withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n    }\n\n    function to(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ from: this, to: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow(withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale(key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData() {\n        return this._locale;\n    }\n\n    var MS_PER_SECOND = 1000,\n        MS_PER_MINUTE = 60 * MS_PER_SECOND,\n        MS_PER_HOUR = 60 * MS_PER_MINUTE,\n        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n    // actual modulo - handles negative numbers (for dates before 1970):\n    function mod$1(dividend, divisor) {\n        return ((dividend % divisor) + divisor) % divisor;\n    }\n\n    function localStartOfDate(y, m, d) {\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return new Date(y, m, d).valueOf();\n        }\n    }\n\n    function utcStartOfDate(y, m, d) {\n        // Date.UTC remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return Date.UTC(y, m, d);\n        }\n    }\n\n    function startOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year(), 0, 1);\n                break;\n            case 'quarter':\n                time = startOfDate(\n                    this.year(),\n                    this.month() - (this.month() % 3),\n                    1\n                );\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month(), 1);\n                break;\n            case 'week':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - this.weekday()\n                );\n                break;\n            case 'isoWeek':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - (this.isoWeekday() - 1)\n                );\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date());\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time -= mod$1(\n                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                    MS_PER_HOUR\n                );\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_MINUTE);\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_SECOND);\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function endOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year() + 1, 0, 1) - 1;\n                break;\n            case 'quarter':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month() - (this.month() % 3) + 3,\n                        1\n                    ) - 1;\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n                break;\n            case 'week':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - this.weekday() + 7\n                    ) - 1;\n                break;\n            case 'isoWeek':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - (this.isoWeekday() - 1) + 7\n                    ) - 1;\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time +=\n                    MS_PER_HOUR -\n                    mod$1(\n                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                        MS_PER_HOUR\n                    ) -\n                    1;\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function valueOf() {\n        return this._d.valueOf() - (this._offset || 0) * 60000;\n    }\n\n    function unix() {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate() {\n        return new Date(this.valueOf());\n    }\n\n    function toArray() {\n        var m = this;\n        return [\n            m.year(),\n            m.month(),\n            m.date(),\n            m.hour(),\n            m.minute(),\n            m.second(),\n            m.millisecond(),\n        ];\n    }\n\n    function toObject() {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds(),\n        };\n    }\n\n    function toJSON() {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function isValid$2() {\n        return isValid(this);\n    }\n\n    function parsingFlags() {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt() {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict,\n        };\n    }\n\n    addFormatToken('N', 0, 0, 'eraAbbr');\n    addFormatToken('NN', 0, 0, 'eraAbbr');\n    addFormatToken('NNN', 0, 0, 'eraAbbr');\n    addFormatToken('NNNN', 0, 0, 'eraName');\n    addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n    addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n    addFormatToken('y', ['yy', 2], 0, 'eraYear');\n    addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n    addRegexToken('N', matchEraAbbr);\n    addRegexToken('NN', matchEraAbbr);\n    addRegexToken('NNN', matchEraAbbr);\n    addRegexToken('NNNN', matchEraName);\n    addRegexToken('NNNNN', matchEraNarrow);\n\n    addParseToken(\n        ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n        function (input, array, config, token) {\n            var era = config._locale.erasParse(input, token, config._strict);\n            if (era) {\n                getParsingFlags(config).era = era;\n            } else {\n                getParsingFlags(config).invalidEra = input;\n            }\n        }\n    );\n\n    addRegexToken('y', matchUnsigned);\n    addRegexToken('yy', matchUnsigned);\n    addRegexToken('yyy', matchUnsigned);\n    addRegexToken('yyyy', matchUnsigned);\n    addRegexToken('yo', matchEraYearOrdinal);\n\n    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n    addParseToken(['yo'], function (input, array, config, token) {\n        var match;\n        if (config._locale._eraYearOrdinalRegex) {\n            match = input.match(config._locale._eraYearOrdinalRegex);\n        }\n\n        if (config._locale.eraYearOrdinalParse) {\n            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n        } else {\n            array[YEAR] = parseInt(input, 10);\n        }\n    });\n\n    function localeEras(m, format) {\n        var i,\n            l,\n            date,\n            eras = this._eras || getLocale('en')._eras;\n        for (i = 0, l = eras.length; i < l; ++i) {\n            switch (typeof eras[i].since) {\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].since).startOf('day');\n                    eras[i].since = date.valueOf();\n                    break;\n            }\n\n            switch (typeof eras[i].until) {\n                case 'undefined':\n                    eras[i].until = +Infinity;\n                    break;\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].until).startOf('day').valueOf();\n                    eras[i].until = date.valueOf();\n                    break;\n            }\n        }\n        return eras;\n    }\n\n    function localeErasParse(eraName, format, strict) {\n        var i,\n            l,\n            eras = this.eras(),\n            name,\n            abbr,\n            narrow;\n        eraName = eraName.toUpperCase();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            name = eras[i].name.toUpperCase();\n            abbr = eras[i].abbr.toUpperCase();\n            narrow = eras[i].narrow.toUpperCase();\n\n            if (strict) {\n                switch (format) {\n                    case 'N':\n                    case 'NN':\n                    case 'NNN':\n                        if (abbr === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNN':\n                        if (name === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNNN':\n                        if (narrow === eraName) {\n                            return eras[i];\n                        }\n                        break;\n                }\n            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n                return eras[i];\n            }\n        }\n    }\n\n    function localeErasConvertYear(era, year) {\n        var dir = era.since <= era.until ? +1 : -1;\n        if (year === undefined) {\n            return hooks(era.since).year();\n        } else {\n            return hooks(era.since).year() + (year - era.offset) * dir;\n        }\n    }\n\n    function getEraName() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].name;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].name;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraNarrow() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].narrow;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].narrow;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraAbbr() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].abbr;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].abbr;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraYear() {\n        var i,\n            l,\n            dir,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (\n                (eras[i].since <= val && val <= eras[i].until) ||\n                (eras[i].until <= val && val <= eras[i].since)\n            ) {\n                return (\n                    (this.year() - hooks(eras[i].since).year()) * dir +\n                    eras[i].offset\n                );\n            }\n        }\n\n        return this.year();\n    }\n\n    function erasNameRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNameRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNameRegex : this._erasRegex;\n    }\n\n    function erasAbbrRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasAbbrRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasAbbrRegex : this._erasRegex;\n    }\n\n    function erasNarrowRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNarrowRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNarrowRegex : this._erasRegex;\n    }\n\n    function matchEraAbbr(isStrict, locale) {\n        return locale.erasAbbrRegex(isStrict);\n    }\n\n    function matchEraName(isStrict, locale) {\n        return locale.erasNameRegex(isStrict);\n    }\n\n    function matchEraNarrow(isStrict, locale) {\n        return locale.erasNarrowRegex(isStrict);\n    }\n\n    function matchEraYearOrdinal(isStrict, locale) {\n        return locale._eraYearOrdinalRegex || matchUnsigned;\n    }\n\n    function computeErasParse() {\n        var abbrPieces = [],\n            namePieces = [],\n            narrowPieces = [],\n            mixedPieces = [],\n            i,\n            l,\n            eras = this.eras();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            namePieces.push(regexEscape(eras[i].name));\n            abbrPieces.push(regexEscape(eras[i].abbr));\n            narrowPieces.push(regexEscape(eras[i].narrow));\n\n            mixedPieces.push(regexEscape(eras[i].name));\n            mixedPieces.push(regexEscape(eras[i].abbr));\n            mixedPieces.push(regexEscape(eras[i].narrow));\n        }\n\n        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n        this._erasNarrowRegex = new RegExp(\n            '^(' + narrowPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken(token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg', 'weekYear');\n    addWeekYearFormatToken('ggggg', 'weekYear');\n    addWeekYearFormatToken('GGGG', 'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    addUnitAlias('weekYear', 'gg');\n    addUnitAlias('isoWeekYear', 'GG');\n\n    // PRIORITY\n\n    addUnitPriority('weekYear', 1);\n    addUnitPriority('isoWeekYear', 1);\n\n    // PARSING\n\n    addRegexToken('G', matchSigned);\n    addRegexToken('g', matchSigned);\n    addRegexToken('GG', match1to2, match2);\n    addRegexToken('gg', match1to2, match2);\n    addRegexToken('GGGG', match1to4, match4);\n    addRegexToken('gggg', match1to4, match4);\n    addRegexToken('GGGGG', match1to6, match6);\n    addRegexToken('ggggg', match1to6, match6);\n\n    addWeekParseToken(\n        ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n        function (input, week, config, token) {\n            week[token.substr(0, 2)] = toInt(input);\n        }\n    );\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.week(),\n            this.weekday(),\n            this.localeData()._week.dow,\n            this.localeData()._week.doy\n        );\n    }\n\n    function getSetISOWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.isoWeek(),\n            this.isoWeekday(),\n            1,\n            4\n        );\n    }\n\n    function getISOWeeksInYear() {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getISOWeeksInISOWeekYear() {\n        return weeksInYear(this.isoWeekYear(), 1, 4);\n    }\n\n    function getWeeksInYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getWeeksInWeekYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // ALIASES\n\n    addUnitAlias('quarter', 'Q');\n\n    // PRIORITY\n\n    addUnitPriority('quarter', 7);\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter(input) {\n        return input == null\n            ? Math.ceil((this.month() + 1) / 3)\n            : this.month((input - 1) * 3 + (this.month() % 3));\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // ALIASES\n\n    addUnitAlias('date', 'D');\n\n    // PRIORITY\n    addUnitPriority('date', 9);\n\n    // PARSING\n\n    addRegexToken('D', match1to2);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        return isStrict\n            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n            : locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // ALIASES\n\n    addUnitAlias('dayOfYear', 'DDD');\n\n    // PRIORITY\n    addUnitPriority('dayOfYear', 4);\n\n    // PARSING\n\n    addRegexToken('DDD', match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear(input) {\n        var dayOfYear =\n            Math.round(\n                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n            ) + 1;\n        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // ALIASES\n\n    addUnitAlias('minute', 'm');\n\n    // PRIORITY\n\n    addUnitPriority('minute', 14);\n\n    // PARSING\n\n    addRegexToken('m', match1to2);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // ALIASES\n\n    addUnitAlias('second', 's');\n\n    // PRIORITY\n\n    addUnitPriority('second', 15);\n\n    // PARSING\n\n    addRegexToken('s', match1to2);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n    // ALIASES\n\n    addUnitAlias('millisecond', 'ms');\n\n    // PRIORITY\n\n    addUnitPriority('millisecond', 16);\n\n    // PARSING\n\n    addRegexToken('S', match1to3, match1);\n    addRegexToken('SS', match1to3, match2);\n    addRegexToken('SSS', match1to3, match3);\n\n    var token, getSetMillisecond;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n\n    getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z', 0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr() {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName() {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var proto = Moment.prototype;\n\n    proto.add = add;\n    proto.calendar = calendar$1;\n    proto.clone = clone;\n    proto.diff = diff;\n    proto.endOf = endOf;\n    proto.format = format;\n    proto.from = from;\n    proto.fromNow = fromNow;\n    proto.to = to;\n    proto.toNow = toNow;\n    proto.get = stringGet;\n    proto.invalidAt = invalidAt;\n    proto.isAfter = isAfter;\n    proto.isBefore = isBefore;\n    proto.isBetween = isBetween;\n    proto.isSame = isSame;\n    proto.isSameOrAfter = isSameOrAfter;\n    proto.isSameOrBefore = isSameOrBefore;\n    proto.isValid = isValid$2;\n    proto.lang = lang;\n    proto.locale = locale;\n    proto.localeData = localeData;\n    proto.max = prototypeMax;\n    proto.min = prototypeMin;\n    proto.parsingFlags = parsingFlags;\n    proto.set = stringSet;\n    proto.startOf = startOf;\n    proto.subtract = subtract;\n    proto.toArray = toArray;\n    proto.toObject = toObject;\n    proto.toDate = toDate;\n    proto.toISOString = toISOString;\n    proto.inspect = inspect;\n    if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n            return 'Moment<' + this.format() + '>';\n        };\n    }\n    proto.toJSON = toJSON;\n    proto.toString = toString;\n    proto.unix = unix;\n    proto.valueOf = valueOf;\n    proto.creationData = creationData;\n    proto.eraName = getEraName;\n    proto.eraNarrow = getEraNarrow;\n    proto.eraAbbr = getEraAbbr;\n    proto.eraYear = getEraYear;\n    proto.year = getSetYear;\n    proto.isLeapYear = getIsLeapYear;\n    proto.weekYear = getSetWeekYear;\n    proto.isoWeekYear = getSetISOWeekYear;\n    proto.quarter = proto.quarters = getSetQuarter;\n    proto.month = getSetMonth;\n    proto.daysInMonth = getDaysInMonth;\n    proto.week = proto.weeks = getSetWeek;\n    proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n    proto.weeksInYear = getWeeksInYear;\n    proto.weeksInWeekYear = getWeeksInWeekYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n    proto.date = getSetDayOfMonth;\n    proto.day = proto.days = getSetDayOfWeek;\n    proto.weekday = getSetLocaleDayOfWeek;\n    proto.isoWeekday = getSetISODayOfWeek;\n    proto.dayOfYear = getSetDayOfYear;\n    proto.hour = proto.hours = getSetHour;\n    proto.minute = proto.minutes = getSetMinute;\n    proto.second = proto.seconds = getSetSecond;\n    proto.millisecond = proto.milliseconds = getSetMillisecond;\n    proto.utcOffset = getSetOffset;\n    proto.utc = setOffsetToUTC;\n    proto.local = setOffsetToLocal;\n    proto.parseZone = setOffsetToParsedOffset;\n    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto.isDST = isDaylightSavingTime;\n    proto.isLocal = isLocal;\n    proto.isUtcOffset = isUtcOffset;\n    proto.isUtc = isUtc;\n    proto.isUTC = isUtc;\n    proto.zoneAbbr = getZoneAbbr;\n    proto.zoneName = getZoneName;\n    proto.dates = deprecate(\n        'dates accessor is deprecated. Use date instead.',\n        getSetDayOfMonth\n    );\n    proto.months = deprecate(\n        'months accessor is deprecated. Use month instead',\n        getSetMonth\n    );\n    proto.years = deprecate(\n        'years accessor is deprecated. Use year instead',\n        getSetYear\n    );\n    proto.zone = deprecate(\n        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n        getSetZone\n    );\n    proto.isDSTShifted = deprecate(\n        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n        isDaylightSavingTimeShifted\n    );\n\n    function createUnix(input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone() {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat(string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar = calendar;\n    proto$1.longDateFormat = longDateFormat;\n    proto$1.invalidDate = invalidDate;\n    proto$1.ordinal = ordinal;\n    proto$1.preparse = preParsePostFormat;\n    proto$1.postformat = preParsePostFormat;\n    proto$1.relativeTime = relativeTime;\n    proto$1.pastFuture = pastFuture;\n    proto$1.set = set;\n    proto$1.eras = localeEras;\n    proto$1.erasParse = localeErasParse;\n    proto$1.erasConvertYear = localeErasConvertYear;\n    proto$1.erasAbbrRegex = erasAbbrRegex;\n    proto$1.erasNameRegex = erasNameRegex;\n    proto$1.erasNarrowRegex = erasNarrowRegex;\n\n    proto$1.months = localeMonths;\n    proto$1.monthsShort = localeMonthsShort;\n    proto$1.monthsParse = localeMonthsParse;\n    proto$1.monthsRegex = monthsRegex;\n    proto$1.monthsShortRegex = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays = localeWeekdays;\n    proto$1.weekdaysMin = localeWeekdaysMin;\n    proto$1.weekdaysShort = localeWeekdaysShort;\n    proto$1.weekdaysParse = localeWeekdaysParse;\n\n    proto$1.weekdaysRegex = weekdaysRegex;\n    proto$1.weekdaysShortRegex = weekdaysShortRegex;\n    proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1(format, index, field, setter) {\n        var locale = getLocale(),\n            utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl(format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i,\n            out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl(localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0,\n            i,\n            out = [];\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths(format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort(format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        eras: [\n            {\n                since: '0001-01-01',\n                until: +Infinity,\n                offset: 1,\n                name: 'Anno Domini',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: 'Before Christ',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    toInt((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate(\n        'moment.lang is deprecated. Use moment.locale instead.',\n        getSetGlobalLocale\n    );\n    hooks.langData = deprecate(\n        'moment.langData is deprecated. Use moment.localeData instead.',\n        getLocale\n    );\n\n    var mathAbs = Math.abs;\n\n    function abs() {\n        var data = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days = mathAbs(this._days);\n        this._months = mathAbs(this._months);\n\n        data.milliseconds = mathAbs(data.milliseconds);\n        data.seconds = mathAbs(data.seconds);\n        data.minutes = mathAbs(data.minutes);\n        data.hours = mathAbs(data.hours);\n        data.months = mathAbs(data.months);\n        data.years = mathAbs(data.years);\n\n        return this;\n    }\n\n    function addSubtract$1(duration, input, value, direction) {\n        var other = createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days += direction * other._days;\n        duration._months += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function add$1(input, value) {\n        return addSubtract$1(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract$1(input, value) {\n        return addSubtract$1(this, input, value, -1);\n    }\n\n    function absCeil(number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble() {\n        var milliseconds = this._milliseconds,\n            days = this._days,\n            months = this._months,\n            data = this._data,\n            seconds,\n            minutes,\n            hours,\n            years,\n            monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (\n            !(\n                (milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0)\n            )\n        ) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds = absFloor(milliseconds / 1000);\n        data.seconds = seconds % 60;\n\n        minutes = absFloor(seconds / 60);\n        data.minutes = minutes % 60;\n\n        hours = absFloor(minutes / 60);\n        data.hours = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days = days;\n        data.months = months;\n        data.years = years;\n\n        return this;\n    }\n\n    function daysToMonths(days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return (days * 4800) / 146097;\n    }\n\n    function monthsToDays(months) {\n        // the reverse of daysToMonths\n        return (months * 146097) / 4800;\n    }\n\n    function as(units) {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        var days,\n            months,\n            milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'quarter' || units === 'year') {\n            days = this._days + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            switch (units) {\n                case 'month':\n                    return months;\n                case 'quarter':\n                    return months / 3;\n                case 'year':\n                    return months / 12;\n            }\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week':\n                    return days / 7 + milliseconds / 6048e5;\n                case 'day':\n                    return days + milliseconds / 864e5;\n                case 'hour':\n                    return days * 24 + milliseconds / 36e5;\n                case 'minute':\n                    return days * 1440 + milliseconds / 6e4;\n                case 'second':\n                    return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond':\n                    return Math.floor(days * 864e5) + milliseconds;\n                default:\n                    throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    // TODO: Use this.as('ms')?\n    function valueOf$1() {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        return (\n            this._milliseconds +\n            this._days * 864e5 +\n            (this._months % 12) * 2592e6 +\n            toInt(this._months / 12) * 31536e6\n        );\n    }\n\n    function makeAs(alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms'),\n        asSeconds = makeAs('s'),\n        asMinutes = makeAs('m'),\n        asHours = makeAs('h'),\n        asDays = makeAs('d'),\n        asWeeks = makeAs('w'),\n        asMonths = makeAs('M'),\n        asQuarters = makeAs('Q'),\n        asYears = makeAs('y');\n\n    function clone$1() {\n        return createDuration(this);\n    }\n\n    function get$2(units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds'),\n        seconds = makeGetter('seconds'),\n        minutes = makeGetter('minutes'),\n        hours = makeGetter('hours'),\n        days = makeGetter('days'),\n        months = makeGetter('months'),\n        years = makeGetter('years');\n\n    function weeks() {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round,\n        thresholds = {\n            ss: 44, // a few seconds to seconds\n            s: 45, // seconds to minute\n            m: 45, // minutes to hour\n            h: 22, // hours to day\n            d: 26, // days to month/week\n            w: null, // weeks to month\n            M: 11, // months to year\n        };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n        var duration = createDuration(posNegDuration).abs(),\n            seconds = round(duration.as('s')),\n            minutes = round(duration.as('m')),\n            hours = round(duration.as('h')),\n            days = round(duration.as('d')),\n            months = round(duration.as('M')),\n            weeks = round(duration.as('w')),\n            years = round(duration.as('y')),\n            a =\n                (seconds <= thresholds.ss && ['s', seconds]) ||\n                (seconds < thresholds.s && ['ss', seconds]) ||\n                (minutes <= 1 && ['m']) ||\n                (minutes < thresholds.m && ['mm', minutes]) ||\n                (hours <= 1 && ['h']) ||\n                (hours < thresholds.h && ['hh', hours]) ||\n                (days <= 1 && ['d']) ||\n                (days < thresholds.d && ['dd', days]);\n\n        if (thresholds.w != null) {\n            a =\n                a ||\n                (weeks <= 1 && ['w']) ||\n                (weeks < thresholds.w && ['ww', weeks]);\n        }\n        a = a ||\n            (months <= 1 && ['M']) ||\n            (months < thresholds.M && ['MM', months]) ||\n            (years <= 1 && ['y']) || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function getSetRelativeTimeRounding(roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof roundingFunction === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function getSetRelativeTimeThreshold(threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize(argWithSuffix, argThresholds) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var withSuffix = false,\n            th = thresholds,\n            locale,\n            output;\n\n        if (typeof argWithSuffix === 'object') {\n            argThresholds = argWithSuffix;\n            argWithSuffix = false;\n        }\n        if (typeof argWithSuffix === 'boolean') {\n            withSuffix = argWithSuffix;\n        }\n        if (typeof argThresholds === 'object') {\n            th = Object.assign({}, thresholds, argThresholds);\n            if (argThresholds.s != null && argThresholds.ss == null) {\n                th.ss = argThresholds.s - 1;\n            }\n        }\n\n        locale = this.localeData();\n        output = relativeTime$1(this, !withSuffix, th, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs$1 = Math.abs;\n\n    function sign(x) {\n        return (x > 0) - (x < 0) || +x;\n    }\n\n    function toISOString$1() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs$1(this._milliseconds) / 1000,\n            days = abs$1(this._days),\n            months = abs$1(this._months),\n            minutes,\n            hours,\n            years,\n            s,\n            total = this.asSeconds(),\n            totalSign,\n            ymSign,\n            daysSign,\n            hmsSign;\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes = absFloor(seconds / 60);\n        hours = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n        totalSign = total < 0 ? '-' : '';\n        ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return (\n            totalSign +\n            'P' +\n            (years ? ymSign + years + 'Y' : '') +\n            (months ? ymSign + months + 'M' : '') +\n            (days ? daysSign + days + 'D' : '') +\n            (hours || minutes || seconds ? 'T' : '') +\n            (hours ? hmsSign + hours + 'H' : '') +\n            (minutes ? hmsSign + minutes + 'M' : '') +\n            (seconds ? hmsSign + s + 'S' : '')\n        );\n    }\n\n    var proto$2 = Duration.prototype;\n\n    proto$2.isValid = isValid$1;\n    proto$2.abs = abs;\n    proto$2.add = add$1;\n    proto$2.subtract = subtract$1;\n    proto$2.as = as;\n    proto$2.asMilliseconds = asMilliseconds;\n    proto$2.asSeconds = asSeconds;\n    proto$2.asMinutes = asMinutes;\n    proto$2.asHours = asHours;\n    proto$2.asDays = asDays;\n    proto$2.asWeeks = asWeeks;\n    proto$2.asMonths = asMonths;\n    proto$2.asQuarters = asQuarters;\n    proto$2.asYears = asYears;\n    proto$2.valueOf = valueOf$1;\n    proto$2._bubble = bubble;\n    proto$2.clone = clone$1;\n    proto$2.get = get$2;\n    proto$2.milliseconds = milliseconds;\n    proto$2.seconds = seconds;\n    proto$2.minutes = minutes;\n    proto$2.hours = hours;\n    proto$2.days = days;\n    proto$2.weeks = weeks;\n    proto$2.months = months;\n    proto$2.years = years;\n    proto$2.humanize = humanize;\n    proto$2.toISOString = toISOString$1;\n    proto$2.toString = toISOString$1;\n    proto$2.toJSON = toISOString$1;\n    proto$2.locale = locale;\n    proto$2.localeData = localeData;\n\n    proto$2.toIsoString = deprecate(\n        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n        toISOString$1\n    );\n    proto$2.lang = lang;\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    //! moment.js\n\n    hooks.version = '2.29.4';\n\n    setHookCallback(createLocal);\n\n    hooks.fn = proto;\n    hooks.min = min;\n    hooks.max = max;\n    hooks.now = now;\n    hooks.utc = createUTC;\n    hooks.unix = createUnix;\n    hooks.months = listMonths;\n    hooks.isDate = isDate;\n    hooks.locale = getSetGlobalLocale;\n    hooks.invalid = createInvalid;\n    hooks.duration = createDuration;\n    hooks.isMoment = isMoment;\n    hooks.weekdays = listWeekdays;\n    hooks.parseZone = createInZone;\n    hooks.localeData = getLocale;\n    hooks.isDuration = isDuration;\n    hooks.monthsShort = listMonthsShort;\n    hooks.weekdaysMin = listWeekdaysMin;\n    hooks.defineLocale = defineLocale;\n    hooks.updateLocale = updateLocale;\n    hooks.locales = listLocales;\n    hooks.weekdaysShort = listWeekdaysShort;\n    hooks.normalizeUnits = normalizeUnits;\n    hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat = getCalendarFormat;\n    hooks.prototype = proto;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n        TIME: 'HH:mm', // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n        MONTH: 'YYYY-MM', // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\n", "/**\r\n* @version: 3.1\r\n* @author: Dan Grossman http://www.dangrossman.info/\r\n* @copyright: Copyright (c) 2012-2019 Dan Grossman. All rights reserved.\r\n* @license: Licensed under the MIT license. See http://www.opensource.org/licenses/mit-license.php\r\n* @website: http://www.daterangepicker.com/\r\n*/\r\n// Following the UMD template https://github.com/umdjs/umd/blob/master/templates/returnExportsGlobal.js\r\n(function (root, factory) {\r\n    if (typeof define === 'function' && define.amd) {\r\n        // AMD. Make globaly available as well\r\n        define(['moment', 'jquery'], function (moment, jquery) {\r\n            if (!jquery.fn) jquery.fn = {}; // webpack server rendering\r\n            if (typeof moment !== 'function' && moment.hasOwnProperty('default')) moment = moment['default']\r\n            return factory(moment, jquery);\r\n        });\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        // Node / Browserify\r\n        //isomorphic issue\r\n        var jQuery = (typeof window != 'undefined') ? window.jQuery : undefined;\r\n        if (!jQuery) {\r\n            jQuery = require('jquery');\r\n            if (!jQuery.fn) jQuery.fn = {};\r\n        }\r\n        var moment = (typeof window != 'undefined' && typeof window.moment != 'undefined') ? window.moment : require('moment');\r\n        module.exports = factory(moment, jQuery);\r\n    } else {\r\n        // Browser globals\r\n        root.daterangepicker = factory(root.moment, root.jQuery);\r\n    }\r\n}(this, function(moment, $) {\r\n    var DateRangePicker = function(element, options, cb) {\r\n\r\n        //default settings for options\r\n        this.parentEl = 'body';\r\n        this.element = $(element);\r\n        this.startDate = moment().startOf('day');\r\n        this.endDate = moment().endOf('day');\r\n        this.minDate = false;\r\n        this.maxDate = false;\r\n        this.maxSpan = false;\r\n        this.autoApply = false;\r\n        this.singleDatePicker = false;\r\n        this.showDropdowns = false;\r\n        this.minYear = moment().subtract(100, 'year').format('YYYY');\r\n        this.maxYear = moment().add(100, 'year').format('YYYY');\r\n        this.showWeekNumbers = false;\r\n        this.showISOWeekNumbers = false;\r\n        this.showCustomRangeLabel = true;\r\n        this.timePicker = false;\r\n        this.timePicker24Hour = false;\r\n        this.timePickerIncrement = 1;\r\n        this.timePickerSeconds = false;\r\n        this.linkedCalendars = true;\r\n        this.autoUpdateInput = true;\r\n        this.alwaysShowCalendars = false;\r\n        this.ranges = {};\r\n\r\n        this.opens = 'right';\r\n        if (this.element.hasClass('pull-right'))\r\n            this.opens = 'left';\r\n\r\n        this.drops = 'down';\r\n        if (this.element.hasClass('dropup'))\r\n            this.drops = 'up';\r\n\r\n        this.buttonClasses = 'btn btn-sm';\r\n        this.applyButtonClasses = 'btn-primary';\r\n        this.cancelButtonClasses = 'btn-default';\r\n\r\n        this.locale = {\r\n            direction: 'ltr',\r\n            format: moment.localeData().longDateFormat('L'),\r\n            separator: ' - ',\r\n            applyLabel: 'Apply',\r\n            cancelLabel: 'Cancel',\r\n            weekLabel: 'W',\r\n            customRangeLabel: 'Custom Range',\r\n            daysOfWeek: moment.weekdaysMin(),\r\n            monthNames: moment.monthsShort(),\r\n            firstDay: moment.localeData().firstDayOfWeek()\r\n        };\r\n\r\n        this.callback = function() { };\r\n\r\n        //some state information\r\n        this.isShowing = false;\r\n        this.leftCalendar = {};\r\n        this.rightCalendar = {};\r\n\r\n        //custom options from user\r\n        if (typeof options !== 'object' || options === null)\r\n            options = {};\r\n\r\n        //allow setting options with data attributes\r\n        //data-api options will be overwritten with custom javascript options\r\n        options = $.extend(this.element.data(), options);\r\n\r\n        //html template for the picker UI\r\n        if (typeof options.template !== 'string' && !(options.template instanceof $))\r\n            options.template =\r\n            '<div class=\"daterangepicker\">' +\r\n                '<div class=\"ranges\"></div>' +\r\n                '<div class=\"drp-calendar left\">' +\r\n                    '<div class=\"calendar-table\"></div>' +\r\n                    '<div class=\"calendar-time\"></div>' +\r\n                '</div>' +\r\n                '<div class=\"drp-calendar right\">' +\r\n                    '<div class=\"calendar-table\"></div>' +\r\n                    '<div class=\"calendar-time\"></div>' +\r\n                '</div>' +\r\n                '<div class=\"drp-buttons\">' +\r\n                    '<span class=\"drp-selected\"></span>' +\r\n                    '<button class=\"cancelBtn\" type=\"button\"></button>' +\r\n                    '<button class=\"applyBtn\" disabled=\"disabled\" type=\"button\"></button> ' +\r\n                '</div>' +\r\n            '</div>';\r\n\r\n        this.parentEl = (options.parentEl && $(options.parentEl).length) ? $(options.parentEl) : $(this.parentEl);\r\n        this.container = $(options.template).appendTo(this.parentEl);\r\n\r\n        //\r\n        // handle all the possible options overriding defaults\r\n        //\r\n\r\n        if (typeof options.locale === 'object') {\r\n\r\n            if (typeof options.locale.direction === 'string')\r\n                this.locale.direction = options.locale.direction;\r\n\r\n            if (typeof options.locale.format === 'string')\r\n                this.locale.format = options.locale.format;\r\n\r\n            if (typeof options.locale.separator === 'string')\r\n                this.locale.separator = options.locale.separator;\r\n\r\n            if (typeof options.locale.daysOfWeek === 'object')\r\n                this.locale.daysOfWeek = options.locale.daysOfWeek.slice();\r\n\r\n            if (typeof options.locale.monthNames === 'object')\r\n              this.locale.monthNames = options.locale.monthNames.slice();\r\n\r\n            if (typeof options.locale.firstDay === 'number')\r\n              this.locale.firstDay = options.locale.firstDay;\r\n\r\n            if (typeof options.locale.applyLabel === 'string')\r\n              this.locale.applyLabel = options.locale.applyLabel;\r\n\r\n            if (typeof options.locale.cancelLabel === 'string')\r\n              this.locale.cancelLabel = options.locale.cancelLabel;\r\n\r\n            if (typeof options.locale.weekLabel === 'string')\r\n              this.locale.weekLabel = options.locale.weekLabel;\r\n\r\n            if (typeof options.locale.customRangeLabel === 'string'){\r\n                //Support unicode chars in the custom range name.\r\n                var elem = document.createElement('textarea');\r\n                elem.innerHTML = options.locale.customRangeLabel;\r\n                var rangeHtml = elem.value;\r\n                this.locale.customRangeLabel = rangeHtml;\r\n            }\r\n        }\r\n        this.container.addClass(this.locale.direction);\r\n\r\n        if (typeof options.startDate === 'string')\r\n            this.startDate = moment(options.startDate, this.locale.format);\r\n\r\n        if (typeof options.endDate === 'string')\r\n            this.endDate = moment(options.endDate, this.locale.format);\r\n\r\n        if (typeof options.minDate === 'string')\r\n            this.minDate = moment(options.minDate, this.locale.format);\r\n\r\n        if (typeof options.maxDate === 'string')\r\n            this.maxDate = moment(options.maxDate, this.locale.format);\r\n\r\n        if (typeof options.startDate === 'object')\r\n            this.startDate = moment(options.startDate);\r\n\r\n        if (typeof options.endDate === 'object')\r\n            this.endDate = moment(options.endDate);\r\n\r\n        if (typeof options.minDate === 'object')\r\n            this.minDate = moment(options.minDate);\r\n\r\n        if (typeof options.maxDate === 'object')\r\n            this.maxDate = moment(options.maxDate);\r\n\r\n        // sanity check for bad options\r\n        if (this.minDate && this.startDate.isBefore(this.minDate))\r\n            this.startDate = this.minDate.clone();\r\n\r\n        // sanity check for bad options\r\n        if (this.maxDate && this.endDate.isAfter(this.maxDate))\r\n            this.endDate = this.maxDate.clone();\r\n\r\n        if (typeof options.applyButtonClasses === 'string')\r\n            this.applyButtonClasses = options.applyButtonClasses;\r\n\r\n        if (typeof options.applyClass === 'string') //backwards compat\r\n            this.applyButtonClasses = options.applyClass;\r\n\r\n        if (typeof options.cancelButtonClasses === 'string')\r\n            this.cancelButtonClasses = options.cancelButtonClasses;\r\n\r\n        if (typeof options.cancelClass === 'string') //backwards compat\r\n            this.cancelButtonClasses = options.cancelClass;\r\n\r\n        if (typeof options.maxSpan === 'object')\r\n            this.maxSpan = options.maxSpan;\r\n\r\n        if (typeof options.dateLimit === 'object') //backwards compat\r\n            this.maxSpan = options.dateLimit;\r\n\r\n        if (typeof options.opens === 'string')\r\n            this.opens = options.opens;\r\n\r\n        if (typeof options.drops === 'string')\r\n            this.drops = options.drops;\r\n\r\n        if (typeof options.showWeekNumbers === 'boolean')\r\n            this.showWeekNumbers = options.showWeekNumbers;\r\n\r\n        if (typeof options.showISOWeekNumbers === 'boolean')\r\n            this.showISOWeekNumbers = options.showISOWeekNumbers;\r\n\r\n        if (typeof options.buttonClasses === 'string')\r\n            this.buttonClasses = options.buttonClasses;\r\n\r\n        if (typeof options.buttonClasses === 'object')\r\n            this.buttonClasses = options.buttonClasses.join(' ');\r\n\r\n        if (typeof options.showDropdowns === 'boolean')\r\n            this.showDropdowns = options.showDropdowns;\r\n\r\n        if (typeof options.minYear === 'number')\r\n            this.minYear = options.minYear;\r\n\r\n        if (typeof options.maxYear === 'number')\r\n            this.maxYear = options.maxYear;\r\n\r\n        if (typeof options.showCustomRangeLabel === 'boolean')\r\n            this.showCustomRangeLabel = options.showCustomRangeLabel;\r\n\r\n        if (typeof options.singleDatePicker === 'boolean') {\r\n            this.singleDatePicker = options.singleDatePicker;\r\n            if (this.singleDatePicker)\r\n                this.endDate = this.startDate.clone();\r\n        }\r\n\r\n        if (typeof options.timePicker === 'boolean')\r\n            this.timePicker = options.timePicker;\r\n\r\n        if (typeof options.timePickerSeconds === 'boolean')\r\n            this.timePickerSeconds = options.timePickerSeconds;\r\n\r\n        if (typeof options.timePickerIncrement === 'number')\r\n            this.timePickerIncrement = options.timePickerIncrement;\r\n\r\n        if (typeof options.timePicker24Hour === 'boolean')\r\n            this.timePicker24Hour = options.timePicker24Hour;\r\n\r\n        if (typeof options.autoApply === 'boolean')\r\n            this.autoApply = options.autoApply;\r\n\r\n        if (typeof options.autoUpdateInput === 'boolean')\r\n            this.autoUpdateInput = options.autoUpdateInput;\r\n\r\n        if (typeof options.linkedCalendars === 'boolean')\r\n            this.linkedCalendars = options.linkedCalendars;\r\n\r\n        if (typeof options.isInvalidDate === 'function')\r\n            this.isInvalidDate = options.isInvalidDate;\r\n\r\n        if (typeof options.isCustomDate === 'function')\r\n            this.isCustomDate = options.isCustomDate;\r\n\r\n        if (typeof options.alwaysShowCalendars === 'boolean')\r\n            this.alwaysShowCalendars = options.alwaysShowCalendars;\r\n\r\n        // update day names order to firstDay\r\n        if (this.locale.firstDay != 0) {\r\n            var iterator = this.locale.firstDay;\r\n            while (iterator > 0) {\r\n                this.locale.daysOfWeek.push(this.locale.daysOfWeek.shift());\r\n                iterator--;\r\n            }\r\n        }\r\n\r\n        var start, end, range;\r\n\r\n        //if no start/end dates set, check if an input element contains initial values\r\n        if (typeof options.startDate === 'undefined' && typeof options.endDate === 'undefined') {\r\n            if ($(this.element).is(':text')) {\r\n                var val = $(this.element).val(),\r\n                    split = val.split(this.locale.separator);\r\n\r\n                start = end = null;\r\n\r\n                if (split.length == 2) {\r\n                    start = moment(split[0], this.locale.format);\r\n                    end = moment(split[1], this.locale.format);\r\n                } else if (this.singleDatePicker && val !== \"\") {\r\n                    start = moment(val, this.locale.format);\r\n                    end = moment(val, this.locale.format);\r\n                }\r\n                if (start !== null && end !== null) {\r\n                    this.setStartDate(start);\r\n                    this.setEndDate(end);\r\n                }\r\n            }\r\n        }\r\n\r\n        if (typeof options.ranges === 'object') {\r\n            for (range in options.ranges) {\r\n\r\n                if (typeof options.ranges[range][0] === 'string')\r\n                    start = moment(options.ranges[range][0], this.locale.format);\r\n                else\r\n                    start = moment(options.ranges[range][0]);\r\n\r\n                if (typeof options.ranges[range][1] === 'string')\r\n                    end = moment(options.ranges[range][1], this.locale.format);\r\n                else\r\n                    end = moment(options.ranges[range][1]);\r\n\r\n                // If the start or end date exceed those allowed by the minDate or maxSpan\r\n                // options, shorten the range to the allowable period.\r\n                if (this.minDate && start.isBefore(this.minDate))\r\n                    start = this.minDate.clone();\r\n\r\n                var maxDate = this.maxDate;\r\n                if (this.maxSpan && maxDate && start.clone().add(this.maxSpan).isAfter(maxDate))\r\n                    maxDate = start.clone().add(this.maxSpan);\r\n                if (maxDate && end.isAfter(maxDate))\r\n                    end = maxDate.clone();\r\n\r\n                // If the end of the range is before the minimum or the start of the range is\r\n                // after the maximum, don't display this range option at all.\r\n                if ((this.minDate && end.isBefore(this.minDate, this.timepicker ? 'minute' : 'day'))\r\n                  || (maxDate && start.isAfter(maxDate, this.timepicker ? 'minute' : 'day')))\r\n                    continue;\r\n\r\n                //Support unicode chars in the range names.\r\n                var elem = document.createElement('textarea');\r\n                elem.innerHTML = range;\r\n                var rangeHtml = elem.value;\r\n\r\n                this.ranges[rangeHtml] = [start, end];\r\n            }\r\n\r\n            var list = '<ul>';\r\n            for (range in this.ranges) {\r\n                list += '<li data-range-key=\"' + range + '\">' + range + '</li>';\r\n            }\r\n            if (this.showCustomRangeLabel) {\r\n                list += '<li data-range-key=\"' + this.locale.customRangeLabel + '\">' + this.locale.customRangeLabel + '</li>';\r\n            }\r\n            list += '</ul>';\r\n            this.container.find('.ranges').prepend(list);\r\n        }\r\n\r\n        if (typeof cb === 'function') {\r\n            this.callback = cb;\r\n        }\r\n\r\n        if (!this.timePicker) {\r\n            this.startDate = this.startDate.startOf('day');\r\n            this.endDate = this.endDate.endOf('day');\r\n            this.container.find('.calendar-time').hide();\r\n        }\r\n\r\n        //can't be used together for now\r\n        if (this.timePicker && this.autoApply)\r\n            this.autoApply = false;\r\n\r\n        if (this.autoApply) {\r\n            this.container.addClass('auto-apply');\r\n        }\r\n\r\n        if (typeof options.ranges === 'object')\r\n            this.container.addClass('show-ranges');\r\n\r\n        if (this.singleDatePicker) {\r\n            this.container.addClass('single');\r\n            this.container.find('.drp-calendar.left').addClass('single');\r\n            this.container.find('.drp-calendar.left').show();\r\n            this.container.find('.drp-calendar.right').hide();\r\n            if (!this.timePicker && this.autoApply) {\r\n                this.container.addClass('auto-apply');\r\n            }\r\n        }\r\n\r\n        if ((typeof options.ranges === 'undefined' && !this.singleDatePicker) || this.alwaysShowCalendars) {\r\n            this.container.addClass('show-calendar');\r\n        }\r\n\r\n        this.container.addClass('opens' + this.opens);\r\n\r\n        //apply CSS classes and labels to buttons\r\n        this.container.find('.applyBtn, .cancelBtn').addClass(this.buttonClasses);\r\n        if (this.applyButtonClasses.length)\r\n            this.container.find('.applyBtn').addClass(this.applyButtonClasses);\r\n        if (this.cancelButtonClasses.length)\r\n            this.container.find('.cancelBtn').addClass(this.cancelButtonClasses);\r\n        this.container.find('.applyBtn').html(this.locale.applyLabel);\r\n        this.container.find('.cancelBtn').html(this.locale.cancelLabel);\r\n\r\n        //\r\n        // event listeners\r\n        //\r\n\r\n        this.container.find('.drp-calendar')\r\n            .on('click.daterangepicker', '.prev', $.proxy(this.clickPrev, this))\r\n            .on('click.daterangepicker', '.next', $.proxy(this.clickNext, this))\r\n            .on('mousedown.daterangepicker', 'td.available', $.proxy(this.clickDate, this))\r\n            .on('mouseenter.daterangepicker', 'td.available', $.proxy(this.hoverDate, this))\r\n            .on('change.daterangepicker', 'select.yearselect', $.proxy(this.monthOrYearChanged, this))\r\n            .on('change.daterangepicker', 'select.monthselect', $.proxy(this.monthOrYearChanged, this))\r\n            .on('change.daterangepicker', 'select.hourselect,select.minuteselect,select.secondselect,select.ampmselect', $.proxy(this.timeChanged, this));\r\n\r\n        this.container.find('.ranges')\r\n            .on('click.daterangepicker', 'li', $.proxy(this.clickRange, this));\r\n\r\n        this.container.find('.drp-buttons')\r\n            .on('click.daterangepicker', 'button.applyBtn', $.proxy(this.clickApply, this))\r\n            .on('click.daterangepicker', 'button.cancelBtn', $.proxy(this.clickCancel, this));\r\n\r\n        if (this.element.is('input') || this.element.is('button')) {\r\n            this.element.on({\r\n                'click.daterangepicker': $.proxy(this.show, this),\r\n                'focus.daterangepicker': $.proxy(this.show, this),\r\n                'keyup.daterangepicker': $.proxy(this.elementChanged, this),\r\n                'keydown.daterangepicker': $.proxy(this.keydown, this) //IE 11 compatibility\r\n            });\r\n        } else {\r\n            this.element.on('click.daterangepicker', $.proxy(this.toggle, this));\r\n            this.element.on('keydown.daterangepicker', $.proxy(this.toggle, this));\r\n        }\r\n\r\n        //\r\n        // if attached to a text input, set the initial value\r\n        //\r\n\r\n        this.updateElement();\r\n\r\n    };\r\n\r\n    DateRangePicker.prototype = {\r\n\r\n        constructor: DateRangePicker,\r\n\r\n        setStartDate: function(startDate) {\r\n            if (typeof startDate === 'string')\r\n                this.startDate = moment(startDate, this.locale.format);\r\n\r\n            if (typeof startDate === 'object')\r\n                this.startDate = moment(startDate);\r\n\r\n            if (!this.timePicker)\r\n                this.startDate = this.startDate.startOf('day');\r\n\r\n            if (this.timePicker && this.timePickerIncrement)\r\n                this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\r\n\r\n            if (this.minDate && this.startDate.isBefore(this.minDate)) {\r\n                this.startDate = this.minDate.clone();\r\n                if (this.timePicker && this.timePickerIncrement)\r\n                    this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\r\n            }\r\n\r\n            if (this.maxDate && this.startDate.isAfter(this.maxDate)) {\r\n                this.startDate = this.maxDate.clone();\r\n                if (this.timePicker && this.timePickerIncrement)\r\n                    this.startDate.minute(Math.floor(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\r\n            }\r\n\r\n            if (!this.isShowing)\r\n                this.updateElement();\r\n\r\n            this.updateMonthsInView();\r\n        },\r\n\r\n        setEndDate: function(endDate) {\r\n            if (typeof endDate === 'string')\r\n                this.endDate = moment(endDate, this.locale.format);\r\n\r\n            if (typeof endDate === 'object')\r\n                this.endDate = moment(endDate);\r\n\r\n            if (!this.timePicker)\r\n                this.endDate = this.endDate.endOf('day');\r\n\r\n            if (this.timePicker && this.timePickerIncrement)\r\n                this.endDate.minute(Math.round(this.endDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\r\n\r\n            if (this.endDate.isBefore(this.startDate))\r\n                this.endDate = this.startDate.clone();\r\n\r\n            if (this.maxDate && this.endDate.isAfter(this.maxDate))\r\n                this.endDate = this.maxDate.clone();\r\n\r\n            if (this.maxSpan && this.startDate.clone().add(this.maxSpan).isBefore(this.endDate))\r\n                this.endDate = this.startDate.clone().add(this.maxSpan);\r\n\r\n            this.previousRightTime = this.endDate.clone();\r\n\r\n            this.container.find('.drp-selected').html(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));\r\n\r\n            if (!this.isShowing)\r\n                this.updateElement();\r\n\r\n            this.updateMonthsInView();\r\n        },\r\n\r\n        isInvalidDate: function() {\r\n            return false;\r\n        },\r\n\r\n        isCustomDate: function() {\r\n            return false;\r\n        },\r\n\r\n        updateView: function() {\r\n            if (this.timePicker) {\r\n                this.renderTimePicker('left');\r\n                this.renderTimePicker('right');\r\n                if (!this.endDate) {\r\n                    this.container.find('.right .calendar-time select').prop('disabled', true).addClass('disabled');\r\n                } else {\r\n                    this.container.find('.right .calendar-time select').prop('disabled', false).removeClass('disabled');\r\n                }\r\n            }\r\n            if (this.endDate)\r\n                this.container.find('.drp-selected').html(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));\r\n            this.updateMonthsInView();\r\n            this.updateCalendars();\r\n            this.updateFormInputs();\r\n        },\r\n\r\n        updateMonthsInView: function() {\r\n            if (this.endDate) {\r\n\r\n                //if both dates are visible already, do nothing\r\n                if (!this.singleDatePicker && this.leftCalendar.month && this.rightCalendar.month &&\r\n                    (this.startDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.startDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM'))\r\n                    &&\r\n                    (this.endDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.endDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM'))\r\n                    ) {\r\n                    return;\r\n                }\r\n\r\n                this.leftCalendar.month = this.startDate.clone().date(2);\r\n                if (!this.linkedCalendars && (this.endDate.month() != this.startDate.month() || this.endDate.year() != this.startDate.year())) {\r\n                    this.rightCalendar.month = this.endDate.clone().date(2);\r\n                } else {\r\n                    this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');\r\n                }\r\n\r\n            } else {\r\n                if (this.leftCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM') && this.rightCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM')) {\r\n                    this.leftCalendar.month = this.startDate.clone().date(2);\r\n                    this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');\r\n                }\r\n            }\r\n            if (this.maxDate && this.linkedCalendars && !this.singleDatePicker && this.rightCalendar.month > this.maxDate) {\r\n              this.rightCalendar.month = this.maxDate.clone().date(2);\r\n              this.leftCalendar.month = this.maxDate.clone().date(2).subtract(1, 'month');\r\n            }\r\n        },\r\n\r\n        updateCalendars: function() {\r\n\r\n            if (this.timePicker) {\r\n                var hour, minute, second;\r\n                if (this.endDate) {\r\n                    hour = parseInt(this.container.find('.left .hourselect').val(), 10);\r\n                    minute = parseInt(this.container.find('.left .minuteselect').val(), 10);\r\n                    if (isNaN(minute)) {\r\n                        minute = parseInt(this.container.find('.left .minuteselect option:last').val(), 10);\r\n                    }\r\n                    second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0;\r\n                    if (!this.timePicker24Hour) {\r\n                        var ampm = this.container.find('.left .ampmselect').val();\r\n                        if (ampm === 'PM' && hour < 12)\r\n                            hour += 12;\r\n                        if (ampm === 'AM' && hour === 12)\r\n                            hour = 0;\r\n                    }\r\n                } else {\r\n                    hour = parseInt(this.container.find('.right .hourselect').val(), 10);\r\n                    minute = parseInt(this.container.find('.right .minuteselect').val(), 10);\r\n                    if (isNaN(minute)) {\r\n                        minute = parseInt(this.container.find('.right .minuteselect option:last').val(), 10);\r\n                    }\r\n                    second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0;\r\n                    if (!this.timePicker24Hour) {\r\n                        var ampm = this.container.find('.right .ampmselect').val();\r\n                        if (ampm === 'PM' && hour < 12)\r\n                            hour += 12;\r\n                        if (ampm === 'AM' && hour === 12)\r\n                            hour = 0;\r\n                    }\r\n                }\r\n                this.leftCalendar.month.hour(hour).minute(minute).second(second);\r\n                this.rightCalendar.month.hour(hour).minute(minute).second(second);\r\n            }\r\n\r\n            this.renderCalendar('left');\r\n            this.renderCalendar('right');\r\n\r\n            //highlight any predefined range matching the current start and end dates\r\n            this.container.find('.ranges li').removeClass('active');\r\n            if (this.endDate == null) return;\r\n\r\n            this.calculateChosenLabel();\r\n        },\r\n\r\n        renderCalendar: function(side) {\r\n\r\n            //\r\n            // Build the matrix of dates that will populate the calendar\r\n            //\r\n\r\n            var calendar = side == 'left' ? this.leftCalendar : this.rightCalendar;\r\n            var month = calendar.month.month();\r\n            var year = calendar.month.year();\r\n            var hour = calendar.month.hour();\r\n            var minute = calendar.month.minute();\r\n            var second = calendar.month.second();\r\n            var daysInMonth = moment([year, month]).daysInMonth();\r\n            var firstDay = moment([year, month, 1]);\r\n            var lastDay = moment([year, month, daysInMonth]);\r\n            var lastMonth = moment(firstDay).subtract(1, 'month').month();\r\n            var lastYear = moment(firstDay).subtract(1, 'month').year();\r\n            var daysInLastMonth = moment([lastYear, lastMonth]).daysInMonth();\r\n            var dayOfWeek = firstDay.day();\r\n\r\n            //initialize a 6 rows x 7 columns array for the calendar\r\n            var calendar = [];\r\n            calendar.firstDay = firstDay;\r\n            calendar.lastDay = lastDay;\r\n\r\n            for (var i = 0; i < 6; i++) {\r\n                calendar[i] = [];\r\n            }\r\n\r\n            //populate the calendar with date objects\r\n            var startDay = daysInLastMonth - dayOfWeek + this.locale.firstDay + 1;\r\n            if (startDay > daysInLastMonth)\r\n                startDay -= 7;\r\n\r\n            if (dayOfWeek == this.locale.firstDay)\r\n                startDay = daysInLastMonth - 6;\r\n\r\n            var curDate = moment([lastYear, lastMonth, startDay, 12, minute, second]);\r\n\r\n            var col, row;\r\n            for (var i = 0, col = 0, row = 0; i < 42; i++, col++, curDate = moment(curDate).add(24, 'hour')) {\r\n                if (i > 0 && col % 7 === 0) {\r\n                    col = 0;\r\n                    row++;\r\n                }\r\n                calendar[row][col] = curDate.clone().hour(hour).minute(minute).second(second);\r\n                curDate.hour(12);\r\n\r\n                if (this.minDate && calendar[row][col].format('YYYY-MM-DD') == this.minDate.format('YYYY-MM-DD') && calendar[row][col].isBefore(this.minDate) && side == 'left') {\r\n                    calendar[row][col] = this.minDate.clone();\r\n                }\r\n\r\n                if (this.maxDate && calendar[row][col].format('YYYY-MM-DD') == this.maxDate.format('YYYY-MM-DD') && calendar[row][col].isAfter(this.maxDate) && side == 'right') {\r\n                    calendar[row][col] = this.maxDate.clone();\r\n                }\r\n\r\n            }\r\n\r\n            //make the calendar object available to hoverDate/clickDate\r\n            if (side == 'left') {\r\n                this.leftCalendar.calendar = calendar;\r\n            } else {\r\n                this.rightCalendar.calendar = calendar;\r\n            }\r\n\r\n            //\r\n            // Display the calendar\r\n            //\r\n\r\n            var minDate = side == 'left' ? this.minDate : this.startDate;\r\n            var maxDate = this.maxDate;\r\n            var selected = side == 'left' ? this.startDate : this.endDate;\r\n            var arrow = this.locale.direction == 'ltr' ? {left: 'chevron-left', right: 'chevron-right'} : {left: 'chevron-right', right: 'chevron-left'};\r\n\r\n            var html = '<table class=\"table-condensed\">';\r\n            html += '<thead>';\r\n            html += '<tr>';\r\n\r\n            // add empty cell for week number\r\n            if (this.showWeekNumbers || this.showISOWeekNumbers)\r\n                html += '<th></th>';\r\n\r\n            if ((!minDate || minDate.isBefore(calendar.firstDay)) && (!this.linkedCalendars || side == 'left')) {\r\n                html += '<th class=\"prev available\"><span></span></th>';\r\n            } else {\r\n                html += '<th></th>';\r\n            }\r\n\r\n            var dateHtml = this.locale.monthNames[calendar[1][1].month()] + calendar[1][1].format(\" YYYY\");\r\n\r\n            if (this.showDropdowns) {\r\n                var currentMonth = calendar[1][1].month();\r\n                var currentYear = calendar[1][1].year();\r\n                var maxYear = (maxDate && maxDate.year()) || (this.maxYear);\r\n                var minYear = (minDate && minDate.year()) || (this.minYear);\r\n                var inMinYear = currentYear == minYear;\r\n                var inMaxYear = currentYear == maxYear;\r\n\r\n                var monthHtml = '<select class=\"monthselect\">';\r\n                for (var m = 0; m < 12; m++) {\r\n                    if ((!inMinYear || (minDate && m >= minDate.month())) && (!inMaxYear || (maxDate && m <= maxDate.month()))) {\r\n                        monthHtml += \"<option value='\" + m + \"'\" +\r\n                            (m === currentMonth ? \" selected='selected'\" : \"\") +\r\n                            \">\" + this.locale.monthNames[m] + \"</option>\";\r\n                    } else {\r\n                        monthHtml += \"<option value='\" + m + \"'\" +\r\n                            (m === currentMonth ? \" selected='selected'\" : \"\") +\r\n                            \" disabled='disabled'>\" + this.locale.monthNames[m] + \"</option>\";\r\n                    }\r\n                }\r\n                monthHtml += \"</select>\";\r\n\r\n                var yearHtml = '<select class=\"yearselect\">';\r\n                for (var y = minYear; y <= maxYear; y++) {\r\n                    yearHtml += '<option value=\"' + y + '\"' +\r\n                        (y === currentYear ? ' selected=\"selected\"' : '') +\r\n                        '>' + y + '</option>';\r\n                }\r\n                yearHtml += '</select>';\r\n\r\n                dateHtml = monthHtml + yearHtml;\r\n            }\r\n\r\n            html += '<th colspan=\"5\" class=\"month\">' + dateHtml + '</th>';\r\n            if ((!maxDate || maxDate.isAfter(calendar.lastDay)) && (!this.linkedCalendars || side == 'right' || this.singleDatePicker)) {\r\n                html += '<th class=\"next available\"><span></span></th>';\r\n            } else {\r\n                html += '<th></th>';\r\n            }\r\n\r\n            html += '</tr>';\r\n            html += '<tr>';\r\n\r\n            // add week number label\r\n            if (this.showWeekNumbers || this.showISOWeekNumbers)\r\n                html += '<th class=\"week\">' + this.locale.weekLabel + '</th>';\r\n\r\n            $.each(this.locale.daysOfWeek, function(index, dayOfWeek) {\r\n                html += '<th>' + dayOfWeek + '</th>';\r\n            });\r\n\r\n            html += '</tr>';\r\n            html += '</thead>';\r\n            html += '<tbody>';\r\n\r\n            //adjust maxDate to reflect the maxSpan setting in order to\r\n            //grey out end dates beyond the maxSpan\r\n            if (this.endDate == null && this.maxSpan) {\r\n                var maxLimit = this.startDate.clone().add(this.maxSpan).endOf('day');\r\n                if (!maxDate || maxLimit.isBefore(maxDate)) {\r\n                    maxDate = maxLimit;\r\n                }\r\n            }\r\n\r\n            for (var row = 0; row < 6; row++) {\r\n                html += '<tr>';\r\n\r\n                // add week number\r\n                if (this.showWeekNumbers)\r\n                    html += '<td class=\"week\">' + calendar[row][0].week() + '</td>';\r\n                else if (this.showISOWeekNumbers)\r\n                    html += '<td class=\"week\">' + calendar[row][0].isoWeek() + '</td>';\r\n\r\n                for (var col = 0; col < 7; col++) {\r\n\r\n                    var classes = [];\r\n\r\n                    //highlight today's date\r\n                    if (calendar[row][col].isSame(new Date(), \"day\"))\r\n                        classes.push('today');\r\n\r\n                    //highlight weekends\r\n                    if (calendar[row][col].isoWeekday() > 5)\r\n                        classes.push('weekend');\r\n\r\n                    //grey out the dates in other months displayed at beginning and end of this calendar\r\n                    if (calendar[row][col].month() != calendar[1][1].month())\r\n                        classes.push('off', 'ends');\r\n\r\n                    //don't allow selection of dates before the minimum date\r\n                    if (this.minDate && calendar[row][col].isBefore(this.minDate, 'day'))\r\n                        classes.push('off', 'disabled');\r\n\r\n                    //don't allow selection of dates after the maximum date\r\n                    if (maxDate && calendar[row][col].isAfter(maxDate, 'day'))\r\n                        classes.push('off', 'disabled');\r\n\r\n                    //don't allow selection of date if a custom function decides it's invalid\r\n                    if (this.isInvalidDate(calendar[row][col]))\r\n                        classes.push('off', 'disabled');\r\n\r\n                    //highlight the currently selected start date\r\n                    if (calendar[row][col].format('YYYY-MM-DD') == this.startDate.format('YYYY-MM-DD'))\r\n                        classes.push('active', 'start-date');\r\n\r\n                    //highlight the currently selected end date\r\n                    if (this.endDate != null && calendar[row][col].format('YYYY-MM-DD') == this.endDate.format('YYYY-MM-DD'))\r\n                        classes.push('active', 'end-date');\r\n\r\n                    //highlight dates in-between the selected dates\r\n                    if (this.endDate != null && calendar[row][col] > this.startDate && calendar[row][col] < this.endDate)\r\n                        classes.push('in-range');\r\n\r\n                    //apply custom classes for this date\r\n                    var isCustom = this.isCustomDate(calendar[row][col]);\r\n                    if (isCustom !== false) {\r\n                        if (typeof isCustom === 'string')\r\n                            classes.push(isCustom);\r\n                        else\r\n                            Array.prototype.push.apply(classes, isCustom);\r\n                    }\r\n\r\n                    var cname = '', disabled = false;\r\n                    for (var i = 0; i < classes.length; i++) {\r\n                        cname += classes[i] + ' ';\r\n                        if (classes[i] == 'disabled')\r\n                            disabled = true;\r\n                    }\r\n                    if (!disabled)\r\n                        cname += 'available';\r\n\r\n                    html += '<td class=\"' + cname.replace(/^\\s+|\\s+$/g, '') + '\" data-title=\"' + 'r' + row + 'c' + col + '\">' + calendar[row][col].date() + '</td>';\r\n\r\n                }\r\n                html += '</tr>';\r\n            }\r\n\r\n            html += '</tbody>';\r\n            html += '</table>';\r\n\r\n            this.container.find('.drp-calendar.' + side + ' .calendar-table').html(html);\r\n\r\n        },\r\n\r\n        renderTimePicker: function(side) {\r\n\r\n            // Don't bother updating the time picker if it's currently disabled\r\n            // because an end date hasn't been clicked yet\r\n            if (side == 'right' && !this.endDate) return;\r\n\r\n            var html, selected, minDate, maxDate = this.maxDate;\r\n\r\n            if (this.maxSpan && (!this.maxDate || this.startDate.clone().add(this.maxSpan).isBefore(this.maxDate)))\r\n                maxDate = this.startDate.clone().add(this.maxSpan);\r\n\r\n            if (side == 'left') {\r\n                selected = this.startDate.clone();\r\n                minDate = this.minDate;\r\n            } else if (side == 'right') {\r\n                selected = this.endDate.clone();\r\n                minDate = this.startDate;\r\n\r\n                //Preserve the time already selected\r\n                var timeSelector = this.container.find('.drp-calendar.right .calendar-time');\r\n                if (timeSelector.html() != '') {\r\n\r\n                    selected.hour(!isNaN(selected.hour()) ? selected.hour() : timeSelector.find('.hourselect option:selected').val());\r\n                    selected.minute(!isNaN(selected.minute()) ? selected.minute() : timeSelector.find('.minuteselect option:selected').val());\r\n                    selected.second(!isNaN(selected.second()) ? selected.second() : timeSelector.find('.secondselect option:selected').val());\r\n\r\n                    if (!this.timePicker24Hour) {\r\n                        var ampm = timeSelector.find('.ampmselect option:selected').val();\r\n                        if (ampm === 'PM' && selected.hour() < 12)\r\n                            selected.hour(selected.hour() + 12);\r\n                        if (ampm === 'AM' && selected.hour() === 12)\r\n                            selected.hour(0);\r\n                    }\r\n\r\n                }\r\n\r\n                if (selected.isBefore(this.startDate))\r\n                    selected = this.startDate.clone();\r\n\r\n                if (maxDate && selected.isAfter(maxDate))\r\n                    selected = maxDate.clone();\r\n\r\n            }\r\n\r\n            //\r\n            // hours\r\n            //\r\n\r\n            html = '<select class=\"hourselect\">';\r\n\r\n            var start = this.timePicker24Hour ? 0 : 1;\r\n            var end = this.timePicker24Hour ? 23 : 12;\r\n\r\n            for (var i = start; i <= end; i++) {\r\n                var i_in_24 = i;\r\n                if (!this.timePicker24Hour)\r\n                    i_in_24 = selected.hour() >= 12 ? (i == 12 ? 12 : i + 12) : (i == 12 ? 0 : i);\r\n\r\n                var time = selected.clone().hour(i_in_24);\r\n                var disabled = false;\r\n                if (minDate && time.minute(59).isBefore(minDate))\r\n                    disabled = true;\r\n                if (maxDate && time.minute(0).isAfter(maxDate))\r\n                    disabled = true;\r\n\r\n                if (i_in_24 == selected.hour() && !disabled) {\r\n                    html += '<option value=\"' + i + '\" selected=\"selected\">' + i + '</option>';\r\n                } else if (disabled) {\r\n                    html += '<option value=\"' + i + '\" disabled=\"disabled\" class=\"disabled\">' + i + '</option>';\r\n                } else {\r\n                    html += '<option value=\"' + i + '\">' + i + '</option>';\r\n                }\r\n            }\r\n\r\n            html += '</select> ';\r\n\r\n            //\r\n            // minutes\r\n            //\r\n\r\n            html += ': <select class=\"minuteselect\">';\r\n\r\n            for (var i = 0; i < 60; i += this.timePickerIncrement) {\r\n                var padded = i < 10 ? '0' + i : i;\r\n                var time = selected.clone().minute(i);\r\n\r\n                var disabled = false;\r\n                if (minDate && time.second(59).isBefore(minDate))\r\n                    disabled = true;\r\n                if (maxDate && time.second(0).isAfter(maxDate))\r\n                    disabled = true;\r\n\r\n                if (selected.minute() == i && !disabled) {\r\n                    html += '<option value=\"' + i + '\" selected=\"selected\">' + padded + '</option>';\r\n                } else if (disabled) {\r\n                    html += '<option value=\"' + i + '\" disabled=\"disabled\" class=\"disabled\">' + padded + '</option>';\r\n                } else {\r\n                    html += '<option value=\"' + i + '\">' + padded + '</option>';\r\n                }\r\n            }\r\n\r\n            html += '</select> ';\r\n\r\n            //\r\n            // seconds\r\n            //\r\n\r\n            if (this.timePickerSeconds) {\r\n                html += ': <select class=\"secondselect\">';\r\n\r\n                for (var i = 0; i < 60; i++) {\r\n                    var padded = i < 10 ? '0' + i : i;\r\n                    var time = selected.clone().second(i);\r\n\r\n                    var disabled = false;\r\n                    if (minDate && time.isBefore(minDate))\r\n                        disabled = true;\r\n                    if (maxDate && time.isAfter(maxDate))\r\n                        disabled = true;\r\n\r\n                    if (selected.second() == i && !disabled) {\r\n                        html += '<option value=\"' + i + '\" selected=\"selected\">' + padded + '</option>';\r\n                    } else if (disabled) {\r\n                        html += '<option value=\"' + i + '\" disabled=\"disabled\" class=\"disabled\">' + padded + '</option>';\r\n                    } else {\r\n                        html += '<option value=\"' + i + '\">' + padded + '</option>';\r\n                    }\r\n                }\r\n\r\n                html += '</select> ';\r\n            }\r\n\r\n            //\r\n            // AM/PM\r\n            //\r\n\r\n            if (!this.timePicker24Hour) {\r\n                html += '<select class=\"ampmselect\">';\r\n\r\n                var am_html = '';\r\n                var pm_html = '';\r\n\r\n                if (minDate && selected.clone().hour(12).minute(0).second(0).isBefore(minDate))\r\n                    am_html = ' disabled=\"disabled\" class=\"disabled\"';\r\n\r\n                if (maxDate && selected.clone().hour(0).minute(0).second(0).isAfter(maxDate))\r\n                    pm_html = ' disabled=\"disabled\" class=\"disabled\"';\r\n\r\n                if (selected.hour() >= 12) {\r\n                    html += '<option value=\"AM\"' + am_html + '>AM</option><option value=\"PM\" selected=\"selected\"' + pm_html + '>PM</option>';\r\n                } else {\r\n                    html += '<option value=\"AM\" selected=\"selected\"' + am_html + '>AM</option><option value=\"PM\"' + pm_html + '>PM</option>';\r\n                }\r\n\r\n                html += '</select>';\r\n            }\r\n\r\n            this.container.find('.drp-calendar.' + side + ' .calendar-time').html(html);\r\n\r\n        },\r\n\r\n        updateFormInputs: function() {\r\n\r\n            if (this.singleDatePicker || (this.endDate && (this.startDate.isBefore(this.endDate) || this.startDate.isSame(this.endDate)))) {\r\n                this.container.find('button.applyBtn').prop('disabled', false);\r\n            } else {\r\n                this.container.find('button.applyBtn').prop('disabled', true);\r\n            }\r\n\r\n        },\r\n\r\n        move: function() {\r\n            var parentOffset = { top: 0, left: 0 },\r\n                containerTop,\r\n                drops = this.drops;\r\n\r\n            var parentRightEdge = $(window).width();\r\n            if (!this.parentEl.is('body')) {\r\n                parentOffset = {\r\n                    top: this.parentEl.offset().top - this.parentEl.scrollTop(),\r\n                    left: this.parentEl.offset().left - this.parentEl.scrollLeft()\r\n                };\r\n                parentRightEdge = this.parentEl[0].clientWidth + this.parentEl.offset().left;\r\n            }\r\n\r\n            switch (drops) {\r\n            case 'auto':\r\n                containerTop = this.element.offset().top + this.element.outerHeight() - parentOffset.top;\r\n                if (containerTop + this.container.outerHeight() >= this.parentEl[0].scrollHeight) {\r\n                    containerTop = this.element.offset().top - this.container.outerHeight() - parentOffset.top;\r\n                    drops = 'up';\r\n                }\r\n                break;\r\n            case 'up':\r\n                containerTop = this.element.offset().top - this.container.outerHeight() - parentOffset.top;\r\n                break;\r\n            default:\r\n                containerTop = this.element.offset().top + this.element.outerHeight() - parentOffset.top;\r\n                break;\r\n            }\r\n\r\n            // Force the container to it's actual width\r\n            this.container.css({\r\n              top: 0,\r\n              left: 0,\r\n              right: 'auto'\r\n            });\r\n            var containerWidth = this.container.outerWidth();\r\n\r\n            this.container.toggleClass('drop-up', drops == 'up');\r\n\r\n            if (this.opens == 'left') {\r\n                var containerRight = parentRightEdge - this.element.offset().left - this.element.outerWidth();\r\n                if (containerWidth + containerRight > $(window).width()) {\r\n                    this.container.css({\r\n                        top: containerTop,\r\n                        right: 'auto',\r\n                        left: 9\r\n                    });\r\n                } else {\r\n                    this.container.css({\r\n                        top: containerTop,\r\n                        right: containerRight,\r\n                        left: 'auto'\r\n                    });\r\n                }\r\n            } else if (this.opens == 'center') {\r\n                var containerLeft = this.element.offset().left - parentOffset.left + this.element.outerWidth() / 2\r\n                                        - containerWidth / 2;\r\n                if (containerLeft < 0) {\r\n                    this.container.css({\r\n                        top: containerTop,\r\n                        right: 'auto',\r\n                        left: 9\r\n                    });\r\n                } else if (containerLeft + containerWidth > $(window).width()) {\r\n                    this.container.css({\r\n                        top: containerTop,\r\n                        left: 'auto',\r\n                        right: 0\r\n                    });\r\n                } else {\r\n                    this.container.css({\r\n                        top: containerTop,\r\n                        left: containerLeft,\r\n                        right: 'auto'\r\n                    });\r\n                }\r\n            } else {\r\n                var containerLeft = this.element.offset().left - parentOffset.left;\r\n                if (containerLeft + containerWidth > $(window).width()) {\r\n                    this.container.css({\r\n                        top: containerTop,\r\n                        left: 'auto',\r\n                        right: 0\r\n                    });\r\n                } else {\r\n                    this.container.css({\r\n                        top: containerTop,\r\n                        left: containerLeft,\r\n                        right: 'auto'\r\n                    });\r\n                }\r\n            }\r\n        },\r\n\r\n        show: function(e) {\r\n            if (this.isShowing) return;\r\n\r\n            // Create a click proxy that is private to this instance of datepicker, for unbinding\r\n            this._outsideClickProxy = $.proxy(function(e) { this.outsideClick(e); }, this);\r\n\r\n            // Bind global datepicker mousedown for hiding and\r\n            $(document)\r\n              .on('mousedown.daterangepicker', this._outsideClickProxy)\r\n              // also support mobile devices\r\n              .on('touchend.daterangepicker', this._outsideClickProxy)\r\n              // also explicitly play nice with Bootstrap dropdowns, which stopPropagation when clicking them\r\n              .on('click.daterangepicker', '[data-toggle=dropdown]', this._outsideClickProxy)\r\n              // and also close when focus changes to outside the picker (eg. tabbing between controls)\r\n              .on('focusin.daterangepicker', this._outsideClickProxy);\r\n\r\n            // Reposition the picker if the window is resized while it's open\r\n            $(window).on('resize.daterangepicker', $.proxy(function(e) { this.move(e); }, this));\r\n\r\n            this.oldStartDate = this.startDate.clone();\r\n            this.oldEndDate = this.endDate.clone();\r\n            this.previousRightTime = this.endDate.clone();\r\n\r\n            this.updateView();\r\n            this.container.show();\r\n            this.move();\r\n            this.element.trigger('show.daterangepicker', this);\r\n            this.isShowing = true;\r\n        },\r\n\r\n        hide: function(e) {\r\n            if (!this.isShowing) return;\r\n\r\n            //incomplete date selection, revert to last values\r\n            if (!this.endDate) {\r\n                this.startDate = this.oldStartDate.clone();\r\n                this.endDate = this.oldEndDate.clone();\r\n            }\r\n\r\n            //if a new date range was selected, invoke the user callback function\r\n            if (!this.startDate.isSame(this.oldStartDate) || !this.endDate.isSame(this.oldEndDate))\r\n                this.callback(this.startDate.clone(), this.endDate.clone(), this.chosenLabel);\r\n\r\n            //if picker is attached to a text input, update it\r\n            this.updateElement();\r\n\r\n            $(document).off('.daterangepicker');\r\n            $(window).off('.daterangepicker');\r\n            this.container.hide();\r\n            this.element.trigger('hide.daterangepicker', this);\r\n            this.isShowing = false;\r\n        },\r\n\r\n        toggle: function(e) {\r\n            if (this.isShowing) {\r\n                this.hide();\r\n            } else {\r\n                this.show();\r\n            }\r\n        },\r\n\r\n        outsideClick: function(e) {\r\n            var target = $(e.target);\r\n            // if the page is clicked anywhere except within the daterangerpicker/button\r\n            // itself then call this.hide()\r\n            if (\r\n                // ie modal dialog fix\r\n                e.type == \"focusin\" ||\r\n                target.closest(this.element).length ||\r\n                target.closest(this.container).length ||\r\n                target.closest('.calendar-table').length\r\n                ) return;\r\n            this.hide();\r\n            this.element.trigger('outsideClick.daterangepicker', this);\r\n        },\r\n\r\n        showCalendars: function() {\r\n            this.container.addClass('show-calendar');\r\n            this.move();\r\n            this.element.trigger('showCalendar.daterangepicker', this);\r\n        },\r\n\r\n        hideCalendars: function() {\r\n            this.container.removeClass('show-calendar');\r\n            this.element.trigger('hideCalendar.daterangepicker', this);\r\n        },\r\n\r\n        clickRange: function(e) {\r\n            var label = e.target.getAttribute('data-range-key');\r\n            this.chosenLabel = label;\r\n            if (label == this.locale.customRangeLabel) {\r\n                this.showCalendars();\r\n            } else {\r\n                var dates = this.ranges[label];\r\n                this.startDate = dates[0];\r\n                this.endDate = dates[1];\r\n\r\n                if (!this.timePicker) {\r\n                    this.startDate.startOf('day');\r\n                    this.endDate.endOf('day');\r\n                }\r\n\r\n                if (!this.alwaysShowCalendars)\r\n                    this.hideCalendars();\r\n                this.clickApply();\r\n            }\r\n        },\r\n\r\n        clickPrev: function(e) {\r\n            var cal = $(e.target).parents('.drp-calendar');\r\n            if (cal.hasClass('left')) {\r\n                this.leftCalendar.month.subtract(1, 'month');\r\n                if (this.linkedCalendars)\r\n                    this.rightCalendar.month.subtract(1, 'month');\r\n            } else {\r\n                this.rightCalendar.month.subtract(1, 'month');\r\n            }\r\n            this.updateCalendars();\r\n        },\r\n\r\n        clickNext: function(e) {\r\n            var cal = $(e.target).parents('.drp-calendar');\r\n            if (cal.hasClass('left')) {\r\n                this.leftCalendar.month.add(1, 'month');\r\n            } else {\r\n                this.rightCalendar.month.add(1, 'month');\r\n                if (this.linkedCalendars)\r\n                    this.leftCalendar.month.add(1, 'month');\r\n            }\r\n            this.updateCalendars();\r\n        },\r\n\r\n        hoverDate: function(e) {\r\n\r\n            //ignore dates that can't be selected\r\n            if (!$(e.target).hasClass('available')) return;\r\n\r\n            var title = $(e.target).attr('data-title');\r\n            var row = title.substr(1, 1);\r\n            var col = title.substr(3, 1);\r\n            var cal = $(e.target).parents('.drp-calendar');\r\n            var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];\r\n\r\n            //highlight the dates between the start date and the date being hovered as a potential end date\r\n            var leftCalendar = this.leftCalendar;\r\n            var rightCalendar = this.rightCalendar;\r\n            var startDate = this.startDate;\r\n            if (!this.endDate) {\r\n                this.container.find('.drp-calendar tbody td').each(function(index, el) {\r\n\r\n                    //skip week numbers, only look at dates\r\n                    if ($(el).hasClass('week')) return;\r\n\r\n                    var title = $(el).attr('data-title');\r\n                    var row = title.substr(1, 1);\r\n                    var col = title.substr(3, 1);\r\n                    var cal = $(el).parents('.drp-calendar');\r\n                    var dt = cal.hasClass('left') ? leftCalendar.calendar[row][col] : rightCalendar.calendar[row][col];\r\n\r\n                    if ((dt.isAfter(startDate) && dt.isBefore(date)) || dt.isSame(date, 'day')) {\r\n                        $(el).addClass('in-range');\r\n                    } else {\r\n                        $(el).removeClass('in-range');\r\n                    }\r\n\r\n                });\r\n            }\r\n\r\n        },\r\n\r\n        clickDate: function(e) {\r\n\r\n            if (!$(e.target).hasClass('available')) return;\r\n\r\n            var title = $(e.target).attr('data-title');\r\n            var row = title.substr(1, 1);\r\n            var col = title.substr(3, 1);\r\n            var cal = $(e.target).parents('.drp-calendar');\r\n            var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];\r\n\r\n            //\r\n            // this function needs to do a few things:\r\n            // * alternate between selecting a start and end date for the range,\r\n            // * if the time picker is enabled, apply the hour/minute/second from the select boxes to the clicked date\r\n            // * if autoapply is enabled, and an end date was chosen, apply the selection\r\n            // * if single date picker mode, and time picker isn't enabled, apply the selection immediately\r\n            // * if one of the inputs above the calendars was focused, cancel that manual input\r\n            //\r\n\r\n            if (this.endDate || date.isBefore(this.startDate, 'day')) { //picking start\r\n                if (this.timePicker) {\r\n                    var hour = parseInt(this.container.find('.left .hourselect').val(), 10);\r\n                    if (!this.timePicker24Hour) {\r\n                        var ampm = this.container.find('.left .ampmselect').val();\r\n                        if (ampm === 'PM' && hour < 12)\r\n                            hour += 12;\r\n                        if (ampm === 'AM' && hour === 12)\r\n                            hour = 0;\r\n                    }\r\n                    var minute = parseInt(this.container.find('.left .minuteselect').val(), 10);\r\n                    if (isNaN(minute)) {\r\n                        minute = parseInt(this.container.find('.left .minuteselect option:last').val(), 10);\r\n                    }\r\n                    var second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0;\r\n                    date = date.clone().hour(hour).minute(minute).second(second);\r\n                }\r\n                this.endDate = null;\r\n                this.setStartDate(date.clone());\r\n            } else if (!this.endDate && date.isBefore(this.startDate)) {\r\n                //special case: clicking the same date for start/end,\r\n                //but the time of the end date is before the start date\r\n                this.setEndDate(this.startDate.clone());\r\n            } else { // picking end\r\n                if (this.timePicker) {\r\n                    var hour = parseInt(this.container.find('.right .hourselect').val(), 10);\r\n                    if (!this.timePicker24Hour) {\r\n                        var ampm = this.container.find('.right .ampmselect').val();\r\n                        if (ampm === 'PM' && hour < 12)\r\n                            hour += 12;\r\n                        if (ampm === 'AM' && hour === 12)\r\n                            hour = 0;\r\n                    }\r\n                    var minute = parseInt(this.container.find('.right .minuteselect').val(), 10);\r\n                    if (isNaN(minute)) {\r\n                        minute = parseInt(this.container.find('.right .minuteselect option:last').val(), 10);\r\n                    }\r\n                    var second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0;\r\n                    date = date.clone().hour(hour).minute(minute).second(second);\r\n                }\r\n                this.setEndDate(date.clone());\r\n                if (this.autoApply) {\r\n                  this.calculateChosenLabel();\r\n                  this.clickApply();\r\n                }\r\n            }\r\n\r\n            if (this.singleDatePicker) {\r\n                this.setEndDate(this.startDate);\r\n                if (!this.timePicker && this.autoApply)\r\n                    this.clickApply();\r\n            }\r\n\r\n            this.updateView();\r\n\r\n            //This is to cancel the blur event handler if the mouse was in one of the inputs\r\n            e.stopPropagation();\r\n\r\n        },\r\n\r\n        calculateChosenLabel: function () {\r\n            var customRange = true;\r\n            var i = 0;\r\n            for (var range in this.ranges) {\r\n              if (this.timePicker) {\r\n                    var format = this.timePickerSeconds ? \"YYYY-MM-DD HH:mm:ss\" : \"YYYY-MM-DD HH:mm\";\r\n                    //ignore times when comparing dates if time picker seconds is not enabled\r\n                    if (this.startDate.format(format) == this.ranges[range][0].format(format) && this.endDate.format(format) == this.ranges[range][1].format(format)) {\r\n                        customRange = false;\r\n                        this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').attr('data-range-key');\r\n                        break;\r\n                    }\r\n                } else {\r\n                    //ignore times when comparing dates if time picker is not enabled\r\n                    if (this.startDate.format('YYYY-MM-DD') == this.ranges[range][0].format('YYYY-MM-DD') && this.endDate.format('YYYY-MM-DD') == this.ranges[range][1].format('YYYY-MM-DD')) {\r\n                        customRange = false;\r\n                        this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').attr('data-range-key');\r\n                        break;\r\n                    }\r\n                }\r\n                i++;\r\n            }\r\n            if (customRange) {\r\n                if (this.showCustomRangeLabel) {\r\n                    this.chosenLabel = this.container.find('.ranges li:last').addClass('active').attr('data-range-key');\r\n                } else {\r\n                    this.chosenLabel = null;\r\n                }\r\n                this.showCalendars();\r\n            }\r\n        },\r\n\r\n        clickApply: function(e) {\r\n            this.hide();\r\n            this.element.trigger('apply.daterangepicker', this);\r\n        },\r\n\r\n        clickCancel: function(e) {\r\n            this.startDate = this.oldStartDate;\r\n            this.endDate = this.oldEndDate;\r\n            this.hide();\r\n            this.element.trigger('cancel.daterangepicker', this);\r\n        },\r\n\r\n        monthOrYearChanged: function(e) {\r\n            var isLeft = $(e.target).closest('.drp-calendar').hasClass('left'),\r\n                leftOrRight = isLeft ? 'left' : 'right',\r\n                cal = this.container.find('.drp-calendar.'+leftOrRight);\r\n\r\n            // Month must be Number for new moment versions\r\n            var month = parseInt(cal.find('.monthselect').val(), 10);\r\n            var year = cal.find('.yearselect').val();\r\n\r\n            if (!isLeft) {\r\n                if (year < this.startDate.year() || (year == this.startDate.year() && month < this.startDate.month())) {\r\n                    month = this.startDate.month();\r\n                    year = this.startDate.year();\r\n                }\r\n            }\r\n\r\n            if (this.minDate) {\r\n                if (year < this.minDate.year() || (year == this.minDate.year() && month < this.minDate.month())) {\r\n                    month = this.minDate.month();\r\n                    year = this.minDate.year();\r\n                }\r\n            }\r\n\r\n            if (this.maxDate) {\r\n                if (year > this.maxDate.year() || (year == this.maxDate.year() && month > this.maxDate.month())) {\r\n                    month = this.maxDate.month();\r\n                    year = this.maxDate.year();\r\n                }\r\n            }\r\n\r\n            if (isLeft) {\r\n                this.leftCalendar.month.month(month).year(year);\r\n                if (this.linkedCalendars)\r\n                    this.rightCalendar.month = this.leftCalendar.month.clone().add(1, 'month');\r\n            } else {\r\n                this.rightCalendar.month.month(month).year(year);\r\n                if (this.linkedCalendars)\r\n                    this.leftCalendar.month = this.rightCalendar.month.clone().subtract(1, 'month');\r\n            }\r\n            this.updateCalendars();\r\n        },\r\n\r\n        timeChanged: function(e) {\r\n\r\n            var cal = $(e.target).closest('.drp-calendar'),\r\n                isLeft = cal.hasClass('left');\r\n\r\n            var hour = parseInt(cal.find('.hourselect').val(), 10);\r\n            var minute = parseInt(cal.find('.minuteselect').val(), 10);\r\n            if (isNaN(minute)) {\r\n                minute = parseInt(cal.find('.minuteselect option:last').val(), 10);\r\n            }\r\n            var second = this.timePickerSeconds ? parseInt(cal.find('.secondselect').val(), 10) : 0;\r\n\r\n            if (!this.timePicker24Hour) {\r\n                var ampm = cal.find('.ampmselect').val();\r\n                if (ampm === 'PM' && hour < 12)\r\n                    hour += 12;\r\n                if (ampm === 'AM' && hour === 12)\r\n                    hour = 0;\r\n            }\r\n\r\n            if (isLeft) {\r\n                var start = this.startDate.clone();\r\n                start.hour(hour);\r\n                start.minute(minute);\r\n                start.second(second);\r\n                this.setStartDate(start);\r\n                if (this.singleDatePicker) {\r\n                    this.endDate = this.startDate.clone();\r\n                } else if (this.endDate && this.endDate.format('YYYY-MM-DD') == start.format('YYYY-MM-DD') && this.endDate.isBefore(start)) {\r\n                    this.setEndDate(start.clone());\r\n                }\r\n            } else if (this.endDate) {\r\n                var end = this.endDate.clone();\r\n                end.hour(hour);\r\n                end.minute(minute);\r\n                end.second(second);\r\n                this.setEndDate(end);\r\n            }\r\n\r\n            //update the calendars so all clickable dates reflect the new time component\r\n            this.updateCalendars();\r\n\r\n            //update the form inputs above the calendars with the new time\r\n            this.updateFormInputs();\r\n\r\n            //re-render the time pickers because changing one selection can affect what's enabled in another\r\n            this.renderTimePicker('left');\r\n            this.renderTimePicker('right');\r\n\r\n        },\r\n\r\n        elementChanged: function() {\r\n            if (!this.element.is('input')) return;\r\n            if (!this.element.val().length) return;\r\n\r\n            var dateString = this.element.val().split(this.locale.separator),\r\n                start = null,\r\n                end = null;\r\n\r\n            if (dateString.length === 2) {\r\n                start = moment(dateString[0], this.locale.format);\r\n                end = moment(dateString[1], this.locale.format);\r\n            }\r\n\r\n            if (this.singleDatePicker || start === null || end === null) {\r\n                start = moment(this.element.val(), this.locale.format);\r\n                end = start;\r\n            }\r\n\r\n            if (!start.isValid() || !end.isValid()) return;\r\n\r\n            this.setStartDate(start);\r\n            this.setEndDate(end);\r\n            this.updateView();\r\n        },\r\n\r\n        keydown: function(e) {\r\n            //hide on tab or enter\r\n            if ((e.keyCode === 9) || (e.keyCode === 13)) {\r\n                this.hide();\r\n            }\r\n\r\n            //hide on esc and prevent propagation\r\n            if (e.keyCode === 27) {\r\n                e.preventDefault();\r\n                e.stopPropagation();\r\n\r\n                this.hide();\r\n            }\r\n        },\r\n\r\n        updateElement: function() {\r\n            if (this.element.is('input') && this.autoUpdateInput) {\r\n                var newValue = this.startDate.format(this.locale.format);\r\n                if (!this.singleDatePicker) {\r\n                    newValue += this.locale.separator + this.endDate.format(this.locale.format);\r\n                }\r\n                if (newValue !== this.element.val()) {\r\n                    this.element.val(newValue).trigger('change');\r\n                }\r\n            }\r\n        },\r\n\r\n        remove: function() {\r\n            this.container.remove();\r\n            this.element.off('.daterangepicker');\r\n            this.element.removeData();\r\n        }\r\n\r\n    };\r\n\r\n    $.fn.daterangepicker = function(options, callback) {\r\n        var implementOptions = $.extend(true, {}, $.fn.daterangepicker.defaultOptions, options);\r\n        this.each(function() {\r\n            var el = $(this);\r\n            if (el.data('daterangepicker'))\r\n                el.data('daterangepicker').remove();\r\n            el.data('daterangepicker', new DateRangePicker(el, implementOptions, callback));\r\n        });\r\n        return this;\r\n    };\r\n\r\n    return DateRangePicker;\r\n\r\n}));\r\n", "/*\r\n * @namespace Util\r\n *\r\n * Various utility functions, used by Leaflet internally.\r\n */\r\n\r\n// @function extend(dest: Object, src?: Object): Object\r\n// Merges the properties of the `src` object (or multiple objects) into `dest` object and returns the latter. Has an `L.extend` shortcut.\r\nexport function extend(dest) {\r\n\tvar i, j, len, src;\r\n\r\n\tfor (j = 1, len = arguments.length; j < len; j++) {\r\n\t\tsrc = arguments[j];\r\n\t\tfor (i in src) {\r\n\t\t\tdest[i] = src[i];\r\n\t\t}\r\n\t}\r\n\treturn dest;\r\n}\r\n\r\n// @function create(proto: Object, properties?: Object): Object\r\n// Compatibility polyfill for [Object.create](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/create)\r\nexport var create = Object.create || (function () {\r\n\tfunction F() {}\r\n\treturn function (proto) {\r\n\t\tF.prototype = proto;\r\n\t\treturn new F();\r\n\t};\r\n})();\r\n\r\n// @function bind(fn: Function, …): Function\r\n// Returns a new function bound to the arguments passed, like [Function.prototype.bind](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).\r\n// Has a `L.bind()` shortcut.\r\nexport function bind(fn, obj) {\r\n\tvar slice = Array.prototype.slice;\r\n\r\n\tif (fn.bind) {\r\n\t\treturn fn.bind.apply(fn, slice.call(arguments, 1));\r\n\t}\r\n\r\n\tvar args = slice.call(arguments, 2);\r\n\r\n\treturn function () {\r\n\t\treturn fn.apply(obj, args.length ? args.concat(slice.call(arguments)) : arguments);\r\n\t};\r\n}\r\n\r\n// @property lastId: Number\r\n// Last unique ID used by [`stamp()`](#util-stamp)\r\nexport var lastId = 0;\r\n\r\n// @function stamp(obj: Object): Number\r\n// Returns the unique ID of an object, assigning it one if it doesn't have it.\r\nexport function stamp(obj) {\r\n\tif (!('_leaflet_id' in obj)) {\r\n\t\tobj['_leaflet_id'] = ++lastId;\r\n\t}\r\n\treturn obj._leaflet_id;\r\n}\r\n\r\n// @function throttle(fn: Function, time: Number, context: Object): Function\r\n// Returns a function which executes function `fn` with the given scope `context`\r\n// (so that the `this` keyword refers to `context` inside `fn`'s code). The function\r\n// `fn` will be called no more than one time per given amount of `time`. The arguments\r\n// received by the bound function will be any arguments passed when binding the\r\n// function, followed by any arguments passed when invoking the bound function.\r\n// Has an `L.throttle` shortcut.\r\nexport function throttle(fn, time, context) {\r\n\tvar lock, args, wrapperFn, later;\r\n\r\n\tlater = function () {\r\n\t\t// reset lock and call if queued\r\n\t\tlock = false;\r\n\t\tif (args) {\r\n\t\t\twrapperFn.apply(context, args);\r\n\t\t\targs = false;\r\n\t\t}\r\n\t};\r\n\r\n\twrapperFn = function () {\r\n\t\tif (lock) {\r\n\t\t\t// called too soon, queue to call later\r\n\t\t\targs = arguments;\r\n\r\n\t\t} else {\r\n\t\t\t// call and lock until later\r\n\t\t\tfn.apply(context, arguments);\r\n\t\t\tsetTimeout(later, time);\r\n\t\t\tlock = true;\r\n\t\t}\r\n\t};\r\n\r\n\treturn wrapperFn;\r\n}\r\n\r\n// @function wrapNum(num: Number, range: Number[], includeMax?: Boolean): Number\r\n// Returns the number `num` modulo `range` in such a way so it lies within\r\n// `range[0]` and `range[1]`. The returned value will be always smaller than\r\n// `range[1]` unless `includeMax` is set to `true`.\r\nexport function wrapNum(x, range, includeMax) {\r\n\tvar max = range[1],\r\n\t    min = range[0],\r\n\t    d = max - min;\r\n\treturn x === max && includeMax ? x : ((x - min) % d + d) % d + min;\r\n}\r\n\r\n// @function falseFn(): Function\r\n// Returns a function which always returns `false`.\r\nexport function falseFn() { return false; }\r\n\r\n// @function formatNum(num: Number, precision?: Number|false): Number\r\n// Returns the number `num` rounded with specified `precision`.\r\n// The default `precision` value is 6 decimal places.\r\n// `false` can be passed to skip any processing (can be useful to avoid round-off errors).\r\nexport function formatNum(num, precision) {\r\n\tif (precision === false) { return num; }\r\n\tvar pow = Math.pow(10, precision === undefined ? 6 : precision);\r\n\treturn Math.round(num * pow) / pow;\r\n}\r\n\r\n// @function trim(str: String): String\r\n// Compatibility polyfill for [String.prototype.trim](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim)\r\nexport function trim(str) {\r\n\treturn str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\r\n}\r\n\r\n// @function splitWords(str: String): String[]\r\n// Trims and splits the string on whitespace and returns the array of parts.\r\nexport function splitWords(str) {\r\n\treturn trim(str).split(/\\s+/);\r\n}\r\n\r\n// @function setOptions(obj: Object, options: Object): Object\r\n// Merges the given properties to the `options` of the `obj` object, returning the resulting options. See `Class options`. Has an `L.setOptions` shortcut.\r\nexport function setOptions(obj, options) {\r\n\tif (!Object.prototype.hasOwnProperty.call(obj, 'options')) {\r\n\t\tobj.options = obj.options ? create(obj.options) : {};\r\n\t}\r\n\tfor (var i in options) {\r\n\t\tobj.options[i] = options[i];\r\n\t}\r\n\treturn obj.options;\r\n}\r\n\r\n// @function getParamString(obj: Object, existingUrl?: String, uppercase?: Boolean): String\r\n// Converts an object into a parameter URL string, e.g. `{a: \"foo\", b: \"bar\"}`\r\n// translates to `'?a=foo&b=bar'`. If `existingUrl` is set, the parameters will\r\n// be appended at the end. If `uppercase` is `true`, the parameter names will\r\n// be uppercased (e.g. `'?A=foo&B=bar'`)\r\nexport function getParamString(obj, existingUrl, uppercase) {\r\n\tvar params = [];\r\n\tfor (var i in obj) {\r\n\t\tparams.push(encodeURIComponent(uppercase ? i.toUpperCase() : i) + '=' + encodeURIComponent(obj[i]));\r\n\t}\r\n\treturn ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&');\r\n}\r\n\r\nvar templateRe = /\\{ *([\\w_ -]+) *\\}/g;\r\n\r\n// @function template(str: String, data: Object): String\r\n// Simple templating facility, accepts a template string of the form `'Hello {a}, {b}'`\r\n// and a data object like `{a: 'foo', b: 'bar'}`, returns evaluated string\r\n// `('Hello foo, bar')`. You can also specify functions instead of strings for\r\n// data values — they will be evaluated passing `data` as an argument.\r\nexport function template(str, data) {\r\n\treturn str.replace(templateRe, function (str, key) {\r\n\t\tvar value = data[key];\r\n\r\n\t\tif (value === undefined) {\r\n\t\t\tthrow new Error('No value provided for variable ' + str);\r\n\r\n\t\t} else if (typeof value === 'function') {\r\n\t\t\tvalue = value(data);\r\n\t\t}\r\n\t\treturn value;\r\n\t});\r\n}\r\n\r\n// @function isArray(obj): Boolean\r\n// Compatibility polyfill for [Array.isArray](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray)\r\nexport var isArray = Array.isArray || function (obj) {\r\n\treturn (Object.prototype.toString.call(obj) === '[object Array]');\r\n};\r\n\r\n// @function indexOf(array: Array, el: Object): Number\r\n// Compatibility polyfill for [Array.prototype.indexOf](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf)\r\nexport function indexOf(array, el) {\r\n\tfor (var i = 0; i < array.length; i++) {\r\n\t\tif (array[i] === el) { return i; }\r\n\t}\r\n\treturn -1;\r\n}\r\n\r\n// @property emptyImageUrl: String\r\n// Data URI string containing a base64-encoded empty GIF image.\r\n// Used as a hack to free memory from unused images on WebKit-powered\r\n// mobile devices (by setting image `src` to this string).\r\nexport var emptyImageUrl = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\r\n\r\n// inspired by https://paulirish.com/2011/requestanimationframe-for-smart-animating/\r\n\r\nfunction getPrefixed(name) {\r\n\treturn window['webkit' + name] || window['moz' + name] || window['ms' + name];\r\n}\r\n\r\nvar lastTime = 0;\r\n\r\n// fallback for IE 7-8\r\nfunction timeoutDefer(fn) {\r\n\tvar time = +new Date(),\r\n\t    timeToCall = Math.max(0, 16 - (time - lastTime));\r\n\r\n\tlastTime = time + timeToCall;\r\n\treturn window.setTimeout(fn, timeToCall);\r\n}\r\n\r\nexport var requestFn = window.requestAnimationFrame || getPrefixed('RequestAnimationFrame') || timeoutDefer;\r\nexport var cancelFn = window.cancelAnimationFrame || getPrefixed('CancelAnimationFrame') ||\r\n\t\tgetPrefixed('CancelRequestAnimationFrame') || function (id) { window.clearTimeout(id); };\r\n\r\n// @function requestAnimFrame(fn: Function, context?: Object, immediate?: Boolean): Number\r\n// Schedules `fn` to be executed when the browser repaints. `fn` is bound to\r\n// `context` if given. When `immediate` is set, `fn` is called immediately if\r\n// the browser doesn't have native support for\r\n// [`window.requestAnimationFrame`](https://developer.mozilla.org/docs/Web/API/window/requestAnimationFrame),\r\n// otherwise it's delayed. Returns a request ID that can be used to cancel the request.\r\nexport function requestAnimFrame(fn, context, immediate) {\r\n\tif (immediate && requestFn === timeoutDefer) {\r\n\t\tfn.call(context);\r\n\t} else {\r\n\t\treturn requestFn.call(window, bind(fn, context));\r\n\t}\r\n}\r\n\r\n// @function cancelAnimFrame(id: Number): undefined\r\n// Cancels a previous `requestAnimFrame`. See also [window.cancelAnimationFrame](https://developer.mozilla.org/docs/Web/API/window/cancelAnimationFrame).\r\nexport function cancelAnimFrame(id) {\r\n\tif (id) {\r\n\t\tcancelFn.call(window, id);\r\n\t}\r\n}\r\n", "import * as Util from './Util';\r\n\r\n// @class Class\r\n// @aka L.Class\r\n\r\n// @section\r\n// @uninheritable\r\n\r\n// Thanks to John Resig and Dean Edwards for inspiration!\r\n\r\nexport function Class() {}\r\n\r\nClass.extend = function (props) {\r\n\r\n\t// @function extend(props: Object): Function\r\n\t// [Extends the current class](#class-inheritance) given the properties to be included.\r\n\t// Returns a Javascript function that is a class constructor (to be called with `new`).\r\n\tvar NewClass = function () {\r\n\r\n\t\tUtil.setOptions(this);\r\n\r\n\t\t// call the constructor\r\n\t\tif (this.initialize) {\r\n\t\t\tthis.initialize.apply(this, arguments);\r\n\t\t}\r\n\r\n\t\t// call all constructor hooks\r\n\t\tthis.callInitHooks();\r\n\t};\r\n\r\n\tvar parentProto = NewClass.__super__ = this.prototype;\r\n\r\n\tvar proto = Util.create(parentProto);\r\n\tproto.constructor = NewClass;\r\n\r\n\tNewClass.prototype = proto;\r\n\r\n\t// inherit parent's statics\r\n\tfor (var i in this) {\r\n\t\tif (Object.prototype.hasOwnProperty.call(this, i) && i !== 'prototype' && i !== '__super__') {\r\n\t\t\tNewClass[i] = this[i];\r\n\t\t}\r\n\t}\r\n\r\n\t// mix static properties into the class\r\n\tif (props.statics) {\r\n\t\tUtil.extend(NewClass, props.statics);\r\n\t}\r\n\r\n\t// mix includes into the prototype\r\n\tif (props.includes) {\r\n\t\tcheckDeprecatedMixinEvents(props.includes);\r\n\t\tUtil.extend.apply(null, [proto].concat(props.includes));\r\n\t}\r\n\r\n\t// mix given properties into the prototype\r\n\tUtil.extend(proto, props);\r\n\tdelete proto.statics;\r\n\tdelete proto.includes;\r\n\r\n\t// merge options\r\n\tif (proto.options) {\r\n\t\tproto.options = parentProto.options ? Util.create(parentProto.options) : {};\r\n\t\tUtil.extend(proto.options, props.options);\r\n\t}\r\n\r\n\tproto._initHooks = [];\r\n\r\n\t// add method for calling all hooks\r\n\tproto.callInitHooks = function () {\r\n\r\n\t\tif (this._initHooksCalled) { return; }\r\n\r\n\t\tif (parentProto.callInitHooks) {\r\n\t\t\tparentProto.callInitHooks.call(this);\r\n\t\t}\r\n\r\n\t\tthis._initHooksCalled = true;\r\n\r\n\t\tfor (var i = 0, len = proto._initHooks.length; i < len; i++) {\r\n\t\t\tproto._initHooks[i].call(this);\r\n\t\t}\r\n\t};\r\n\r\n\treturn NewClass;\r\n};\r\n\r\n\r\n// @function include(properties: Object): this\r\n// [Includes a mixin](#class-includes) into the current class.\r\nClass.include = function (props) {\r\n\tvar parentOptions = this.prototype.options;\r\n\tUtil.extend(this.prototype, props);\r\n\tif (props.options) {\r\n\t\tthis.prototype.options = parentOptions;\r\n\t\tthis.mergeOptions(props.options);\r\n\t}\r\n\treturn this;\r\n};\r\n\r\n// @function mergeOptions(options: Object): this\r\n// [Merges `options`](#class-options) into the defaults of the class.\r\nClass.mergeOptions = function (options) {\r\n\tUtil.extend(this.prototype.options, options);\r\n\treturn this;\r\n};\r\n\r\n// @function addInitHook(fn: Function): this\r\n// Adds a [constructor hook](#class-constructor-hooks) to the class.\r\nClass.addInitHook = function (fn) { // (Function) || (String, args...)\r\n\tvar args = Array.prototype.slice.call(arguments, 1);\r\n\r\n\tvar init = typeof fn === 'function' ? fn : function () {\r\n\t\tthis[fn].apply(this, args);\r\n\t};\r\n\r\n\tthis.prototype._initHooks = this.prototype._initHooks || [];\r\n\tthis.prototype._initHooks.push(init);\r\n\treturn this;\r\n};\r\n\r\nfunction checkDeprecatedMixinEvents(includes) {\r\n\t/* global L: true */\r\n\tif (typeof L === 'undefined' || !L || !L.Mixin) { return; }\r\n\r\n\tincludes = Util.isArray(includes) ? includes : [includes];\r\n\r\n\tfor (var i = 0; i < includes.length; i++) {\r\n\t\tif (includes[i] === L.Mixin.Events) {\r\n\t\t\tconsole.warn('Deprecated include of L.Mixin.Events: ' +\r\n\t\t\t\t'this property will be removed in future releases, ' +\r\n\t\t\t\t'please inherit from L.Evented instead.', new Error().stack);\r\n\t\t}\r\n\t}\r\n}\r\n", "import {Class} from './Class';\r\nimport * as Util from './Util';\r\n\r\n/*\r\n * @class Evented\r\n * @aka L.Evented\r\n * @inherits Class\r\n *\r\n * A set of methods shared between event-powered classes (like `Map` and `Marker`). Generally, events allow you to execute some function when something happens with an object (e.g. the user clicks on the map, causing the map to fire `'click'` event).\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * map.on('click', function(e) {\r\n * \talert(e.latlng);\r\n * } );\r\n * ```\r\n *\r\n * Leaflet deals with event listeners by reference, so if you want to add a listener and then remove it, define it as a function:\r\n *\r\n * ```js\r\n * function onClick(e) { ... }\r\n *\r\n * map.on('click', onClick);\r\n * map.off('click', onClick);\r\n * ```\r\n */\r\n\r\nexport var Events = {\r\n\t/* @method on(type: String, fn: Function, context?: Object): this\r\n\t * Adds a listener function (`fn`) to a particular event type of the object. You can optionally specify the context of the listener (object the this keyword will point to). You can also pass several space-separated types (e.g. `'click dblclick'`).\r\n\t *\r\n\t * @alternative\r\n\t * @method on(eventMap: Object): this\r\n\t * Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\n\t */\r\n\ton: function (types, fn, context) {\r\n\r\n\t\t// types can be a map of types/handlers\r\n\t\tif (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\t// we don't process space-separated events here for performance;\r\n\t\t\t\t// it's a hot path since Layer uses the on(obj) syntax\r\n\t\t\t\tthis._on(type, types[type], fn);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\t// types can be a string of space-separated words\r\n\t\t\ttypes = Util.splitWords(types);\r\n\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tthis._on(types[i], fn, context);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/* @method off(type: String, fn?: Function, context?: Object): this\r\n\t * Removes a previously added listener function. If no function is specified, it will remove all the listeners of that particular event from the object. Note that if you passed a custom context to `on`, you must pass the same context to `off` in order to remove the listener.\r\n\t *\r\n\t * @alternative\r\n\t * @method off(eventMap: Object): this\r\n\t * Removes a set of type/listener pairs.\r\n\t *\r\n\t * @alternative\r\n\t * @method off: this\r\n\t * Removes all listeners to all events on the object. This includes implicitly attached events.\r\n\t */\r\n\toff: function (types, fn, context) {\r\n\r\n\t\tif (!arguments.length) {\r\n\t\t\t// clear all listeners if called without arguments\r\n\t\t\tdelete this._events;\r\n\r\n\t\t} else if (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\tthis._off(type, types[type], fn);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\ttypes = Util.splitWords(types);\r\n\r\n\t\t\tvar removeAll = arguments.length === 1;\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tif (removeAll) {\r\n\t\t\t\t\tthis._off(types[i]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis._off(types[i], fn, context);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// attach listener (without syntactic sugar now)\r\n\t_on: function (type, fn, context, _once) {\r\n\t\tif (typeof fn !== 'function') {\r\n\t\t\tconsole.warn('wrong listener type: ' + typeof fn);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// check if fn already there\r\n\t\tif (this._listens(type, fn, context) !== false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (context === this) {\r\n\t\t\t// Less memory footprint.\r\n\t\t\tcontext = undefined;\r\n\t\t}\r\n\r\n\t\tvar newListener = {fn: fn, ctx: context};\r\n\t\tif (_once) {\r\n\t\t\tnewListener.once = true;\r\n\t\t}\r\n\r\n\t\tthis._events = this._events || {};\r\n\t\tthis._events[type] = this._events[type] || [];\r\n\t\tthis._events[type].push(newListener);\r\n\t},\r\n\r\n\t_off: function (type, fn, context) {\r\n\t\tvar listeners,\r\n\t\t    i,\r\n\t\t    len;\r\n\r\n\t\tif (!this._events) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlisteners = this._events[type];\r\n\t\tif (!listeners) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (arguments.length === 1) { // remove all\r\n\t\t\tif (this._firingCount) {\r\n\t\t\t\t// Set all removed listeners to noop\r\n\t\t\t\t// so they are not called if remove happens in fire\r\n\t\t\t\tfor (i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\t\t\tlisteners[i].fn = Util.falseFn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// clear all listeners for a type if function isn't specified\r\n\t\t\tdelete this._events[type];\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (typeof fn !== 'function') {\r\n\t\t\tconsole.warn('wrong listener type: ' + typeof fn);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// find fn and remove it\r\n\t\tvar index = this._listens(type, fn, context);\r\n\t\tif (index !== false) {\r\n\t\t\tvar listener = listeners[index];\r\n\t\t\tif (this._firingCount) {\r\n\t\t\t\t// set the removed listener to noop so that's not called if remove happens in fire\r\n\t\t\t\tlistener.fn = Util.falseFn;\r\n\r\n\t\t\t\t/* copy array in case events are being fired */\r\n\t\t\t\tthis._events[type] = listeners = listeners.slice();\r\n\t\t\t}\r\n\t\t\tlisteners.splice(index, 1);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method fire(type: String, data?: Object, propagate?: Boolean): this\r\n\t// Fires an event of the specified type. You can optionally provide a data\r\n\t// object — the first argument of the listener function will contain its\r\n\t// properties. The event can optionally be propagated to event parents.\r\n\tfire: function (type, data, propagate) {\r\n\t\tif (!this.listens(type, propagate)) { return this; }\r\n\r\n\t\tvar event = Util.extend({}, data, {\r\n\t\t\ttype: type,\r\n\t\t\ttarget: this,\r\n\t\t\tsourceTarget: data && data.sourceTarget || this\r\n\t\t});\r\n\r\n\t\tif (this._events) {\r\n\t\t\tvar listeners = this._events[type];\r\n\t\t\tif (listeners) {\r\n\t\t\t\tthis._firingCount = (this._firingCount + 1) || 1;\r\n\t\t\t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\t\t\tvar l = listeners[i];\r\n\t\t\t\t\t// off overwrites l.fn, so we need to copy fn to a var\r\n\t\t\t\t\tvar fn = l.fn;\r\n\t\t\t\t\tif (l.once) {\r\n\t\t\t\t\t\tthis.off(type, fn, l.ctx);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfn.call(l.ctx || this, event);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._firingCount--;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (propagate) {\r\n\t\t\t// propagate the event to parents (set with addEventParent)\r\n\t\t\tthis._propagateEvent(event);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method listens(type: String, propagate?: Boolean): Boolean\r\n\t// @method listens(type: String, fn: Function, context?: Object, propagate?: Boolean): Boolean\r\n\t// Returns `true` if a particular event type has any listeners attached to it.\r\n\t// The verification can optionally be propagated, it will return `true` if parents have the listener attached to it.\r\n\tlistens: function (type, fn, context, propagate) {\r\n\t\tif (typeof type !== 'string') {\r\n\t\t\tconsole.warn('\"string\" type argument expected');\r\n\t\t}\r\n\r\n\t\t// we don't overwrite the input `fn` value, because we need to use it for propagation\r\n\t\tvar _fn = fn;\r\n\t\tif (typeof fn !== 'function') {\r\n\t\t\tpropagate = !!fn;\r\n\t\t\t_fn = undefined;\r\n\t\t\tcontext = undefined;\r\n\t\t}\r\n\r\n\t\tvar listeners = this._events && this._events[type];\r\n\t\tif (listeners && listeners.length) {\r\n\t\t\tif (this._listens(type, _fn, context) !== false) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (propagate) {\r\n\t\t\t// also check parents for listeners if event propagates\r\n\t\t\tfor (var id in this._eventParents) {\r\n\t\t\t\tif (this._eventParents[id].listens(type, fn, context, propagate)) { return true; }\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t// returns the index (number) or false\r\n\t_listens: function (type, fn, context) {\r\n\t\tif (!this._events) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar listeners = this._events[type] || [];\r\n\t\tif (!fn) {\r\n\t\t\treturn !!listeners.length;\r\n\t\t}\r\n\r\n\t\tif (context === this) {\r\n\t\t\t// Less memory footprint.\r\n\t\t\tcontext = undefined;\r\n\t\t}\r\n\r\n\t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\tif (listeners[i].fn === fn && listeners[i].ctx === context) {\r\n\t\t\t\treturn i;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\r\n\t},\r\n\r\n\t// @method once(…): this\r\n\t// Behaves as [`on(…)`](#evented-on), except the listener will only get fired once and then removed.\r\n\tonce: function (types, fn, context) {\r\n\r\n\t\t// types can be a map of types/handlers\r\n\t\tif (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\t// we don't process space-separated events here for performance;\r\n\t\t\t\t// it's a hot path since Layer uses the on(obj) syntax\r\n\t\t\t\tthis._on(type, types[type], fn, true);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\t// types can be a string of space-separated words\r\n\t\t\ttypes = Util.splitWords(types);\r\n\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tthis._on(types[i], fn, context, true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method addEventParent(obj: Evented): this\r\n\t// Adds an event parent - an `Evented` that will receive propagated events\r\n\taddEventParent: function (obj) {\r\n\t\tthis._eventParents = this._eventParents || {};\r\n\t\tthis._eventParents[Util.stamp(obj)] = obj;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeEventParent(obj: Evented): this\r\n\t// Removes an event parent, so it will stop receiving propagated events\r\n\tremoveEventParent: function (obj) {\r\n\t\tif (this._eventParents) {\r\n\t\t\tdelete this._eventParents[Util.stamp(obj)];\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_propagateEvent: function (e) {\r\n\t\tfor (var id in this._eventParents) {\r\n\t\t\tthis._eventParents[id].fire(e.type, Util.extend({\r\n\t\t\t\tlayer: e.target,\r\n\t\t\t\tpropagatedFrom: e.target\r\n\t\t\t}, e), true);\r\n\t\t}\r\n\t}\r\n};\r\n\r\n// aliases; we should ditch those eventually\r\n\r\n// @method addEventListener(…): this\r\n// Alias to [`on(…)`](#evented-on)\r\nEvents.addEventListener = Events.on;\r\n\r\n// @method removeEventListener(…): this\r\n// Alias to [`off(…)`](#evented-off)\r\n\r\n// @method clearAllEventListeners(…): this\r\n// Alias to [`off()`](#evented-off)\r\nEvents.removeEventListener = Events.clearAllEventListeners = Events.off;\r\n\r\n// @method addOneTimeEventListener(…): this\r\n// Alias to [`once(…)`](#evented-once)\r\nEvents.addOneTimeEventListener = Events.once;\r\n\r\n// @method fireEvent(…): this\r\n// Alias to [`fire(…)`](#evented-fire)\r\nEvents.fireEvent = Events.fire;\r\n\r\n// @method hasEventListeners(…): Boolean\r\n// Alias to [`listens(…)`](#evented-listens)\r\nEvents.hasEventListeners = Events.listens;\r\n\r\nexport var Evented = Class.extend(Events);\r\n", "import {isArray, formatNum} from '../core/Util';\r\n\r\n/*\r\n * @class Point\r\n * @aka L.Point\r\n *\r\n * Represents a point with `x` and `y` coordinates in pixels.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var point = L.point(200, 300);\r\n * ```\r\n *\r\n * All Leaflet methods and options that accept `Point` objects also accept them in a simple Array form (unless noted otherwise), so these lines are equivalent:\r\n *\r\n * ```js\r\n * map.panBy([200, 300]);\r\n * map.panBy(L.point(200, 300));\r\n * ```\r\n *\r\n * Note that `Point` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function Point(x, y, round) {\r\n\t// @property x: Number; The `x` coordinate of the point\r\n\tthis.x = (round ? Math.round(x) : x);\r\n\t// @property y: Number; The `y` coordinate of the point\r\n\tthis.y = (round ? Math.round(y) : y);\r\n}\r\n\r\nvar trunc = Math.trunc || function (v) {\r\n\treturn v > 0 ? Math.floor(v) : Math.ceil(v);\r\n};\r\n\r\nPoint.prototype = {\r\n\r\n\t// @method clone(): Point\r\n\t// Returns a copy of the current point.\r\n\tclone: function () {\r\n\t\treturn new Point(this.x, this.y);\r\n\t},\r\n\r\n\t// @method add(otherPoint: Point): Point\r\n\t// Returns the result of addition of the current and the given points.\r\n\tadd: function (point) {\r\n\t\t// non-destructive, returns a new point\r\n\t\treturn this.clone()._add(toPoint(point));\r\n\t},\r\n\r\n\t_add: function (point) {\r\n\t\t// destructive, used directly for performance in situations where it's safe to modify existing point\r\n\t\tthis.x += point.x;\r\n\t\tthis.y += point.y;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method subtract(otherPoint: Point): Point\r\n\t// Returns the result of subtraction of the given point from the current.\r\n\tsubtract: function (point) {\r\n\t\treturn this.clone()._subtract(toPoint(point));\r\n\t},\r\n\r\n\t_subtract: function (point) {\r\n\t\tthis.x -= point.x;\r\n\t\tthis.y -= point.y;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method divideBy(num: Number): Point\r\n\t// Returns the result of division of the current point by the given number.\r\n\tdivideBy: function (num) {\r\n\t\treturn this.clone()._divideBy(num);\r\n\t},\r\n\r\n\t_divideBy: function (num) {\r\n\t\tthis.x /= num;\r\n\t\tthis.y /= num;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method multiplyBy(num: Number): Point\r\n\t// Returns the result of multiplication of the current point by the given number.\r\n\tmultiplyBy: function (num) {\r\n\t\treturn this.clone()._multiplyBy(num);\r\n\t},\r\n\r\n\t_multiplyBy: function (num) {\r\n\t\tthis.x *= num;\r\n\t\tthis.y *= num;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method scaleBy(scale: Point): Point\r\n\t// Multiply each coordinate of the current point by each coordinate of\r\n\t// `scale`. In linear algebra terms, multiply the point by the\r\n\t// [scaling matrix](https://en.wikipedia.org/wiki/Scaling_%28geometry%29#Matrix_representation)\r\n\t// defined by `scale`.\r\n\tscaleBy: function (point) {\r\n\t\treturn new Point(this.x * point.x, this.y * point.y);\r\n\t},\r\n\r\n\t// @method unscaleBy(scale: Point): Point\r\n\t// Inverse of `scaleBy`. Divide each coordinate of the current point by\r\n\t// each coordinate of `scale`.\r\n\tunscaleBy: function (point) {\r\n\t\treturn new Point(this.x / point.x, this.y / point.y);\r\n\t},\r\n\r\n\t// @method round(): Point\r\n\t// Returns a copy of the current point with rounded coordinates.\r\n\tround: function () {\r\n\t\treturn this.clone()._round();\r\n\t},\r\n\r\n\t_round: function () {\r\n\t\tthis.x = Math.round(this.x);\r\n\t\tthis.y = Math.round(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method floor(): Point\r\n\t// Returns a copy of the current point with floored coordinates (rounded down).\r\n\tfloor: function () {\r\n\t\treturn this.clone()._floor();\r\n\t},\r\n\r\n\t_floor: function () {\r\n\t\tthis.x = Math.floor(this.x);\r\n\t\tthis.y = Math.floor(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method ceil(): Point\r\n\t// Returns a copy of the current point with ceiled coordinates (rounded up).\r\n\tceil: function () {\r\n\t\treturn this.clone()._ceil();\r\n\t},\r\n\r\n\t_ceil: function () {\r\n\t\tthis.x = Math.ceil(this.x);\r\n\t\tthis.y = Math.ceil(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method trunc(): Point\r\n\t// Returns a copy of the current point with truncated coordinates (rounded towards zero).\r\n\ttrunc: function () {\r\n\t\treturn this.clone()._trunc();\r\n\t},\r\n\r\n\t_trunc: function () {\r\n\t\tthis.x = trunc(this.x);\r\n\t\tthis.y = trunc(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method distanceTo(otherPoint: Point): Number\r\n\t// Returns the cartesian distance between the current and the given points.\r\n\tdistanceTo: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\tvar x = point.x - this.x,\r\n\t\t    y = point.y - this.y;\r\n\r\n\t\treturn Math.sqrt(x * x + y * y);\r\n\t},\r\n\r\n\t// @method equals(otherPoint: Point): Boolean\r\n\t// Returns `true` if the given point has the same coordinates.\r\n\tequals: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\treturn point.x === this.x &&\r\n\t\t       point.y === this.y;\r\n\t},\r\n\r\n\t// @method contains(otherPoint: Point): Boolean\r\n\t// Returns `true` if both coordinates of the given point are less than the corresponding current point coordinates (in absolute values).\r\n\tcontains: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\treturn Math.abs(point.x) <= Math.abs(this.x) &&\r\n\t\t       Math.abs(point.y) <= Math.abs(this.y);\r\n\t},\r\n\r\n\t// @method toString(): String\r\n\t// Returns a string representation of the point for debugging purposes.\r\n\ttoString: function () {\r\n\t\treturn 'Point(' +\r\n\t\t        formatNum(this.x) + ', ' +\r\n\t\t        formatNum(this.y) + ')';\r\n\t}\r\n};\r\n\r\n// @factory L.point(x: Number, y: Number, round?: Boolean)\r\n// Creates a Point object with the given `x` and `y` coordinates. If optional `round` is set to true, rounds the `x` and `y` values.\r\n\r\n// @alternative\r\n// @factory L.point(coords: Number[])\r\n// Expects an array of the form `[x, y]` instead.\r\n\r\n// @alternative\r\n// @factory L.point(coords: Object)\r\n// Expects a plain object of the form `{x: Number, y: Number}` instead.\r\nexport function toPoint(x, y, round) {\r\n\tif (x instanceof Point) {\r\n\t\treturn x;\r\n\t}\r\n\tif (isArray(x)) {\r\n\t\treturn new Point(x[0], x[1]);\r\n\t}\r\n\tif (x === undefined || x === null) {\r\n\t\treturn x;\r\n\t}\r\n\tif (typeof x === 'object' && 'x' in x && 'y' in x) {\r\n\t\treturn new Point(x.x, x.y);\r\n\t}\r\n\treturn new Point(x, y, round);\r\n}\r\n", "import {Point, toPoint} from './Point';\r\n\r\n/*\r\n * @class Bounds\r\n * @aka L.Bounds\r\n *\r\n * Represents a rectangular area in pixel coordinates.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var p1 = L.point(10, 10),\r\n * p2 = L.point(40, 60),\r\n * bounds = L.bounds(p1, p2);\r\n * ```\r\n *\r\n * All Leaflet methods that accept `Bounds` objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n *\r\n * ```js\r\n * otherBounds.intersects([[10, 10], [40, 60]]);\r\n * ```\r\n *\r\n * Note that `Bounds` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function Bounds(a, b) {\r\n\tif (!a) { return; }\r\n\r\n\tvar points = b ? [a, b] : a;\r\n\r\n\tfor (var i = 0, len = points.length; i < len; i++) {\r\n\t\tthis.extend(points[i]);\r\n\t}\r\n}\r\n\r\nBounds.prototype = {\r\n\t// @method extend(point: Point): this\r\n\t// Extends the bounds to contain the given point.\r\n\r\n\t// @alternative\r\n\t// @method extend(otherBounds: Bounds): this\r\n\t// Extend the bounds to contain the given bounds\r\n\textend: function (obj) {\r\n\t\tvar min2, max2;\r\n\t\tif (!obj) { return this; }\r\n\r\n\t\tif (obj instanceof Point || typeof obj[0] === 'number' || 'x' in obj) {\r\n\t\t\tmin2 = max2 = toPoint(obj);\r\n\t\t} else {\r\n\t\t\tobj = toBounds(obj);\r\n\t\t\tmin2 = obj.min;\r\n\t\t\tmax2 = obj.max;\r\n\r\n\t\t\tif (!min2 || !max2) { return this; }\r\n\t\t}\r\n\r\n\t\t// @property min: Point\r\n\t\t// The top left corner of the rectangle.\r\n\t\t// @property max: Point\r\n\t\t// The bottom right corner of the rectangle.\r\n\t\tif (!this.min && !this.max) {\r\n\t\t\tthis.min = min2.clone();\r\n\t\t\tthis.max = max2.clone();\r\n\t\t} else {\r\n\t\t\tthis.min.x = Math.min(min2.x, this.min.x);\r\n\t\t\tthis.max.x = Math.max(max2.x, this.max.x);\r\n\t\t\tthis.min.y = Math.min(min2.y, this.min.y);\r\n\t\t\tthis.max.y = Math.max(max2.y, this.max.y);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getCenter(round?: Boolean): Point\r\n\t// Returns the center point of the bounds.\r\n\tgetCenter: function (round) {\r\n\t\treturn toPoint(\r\n\t\t        (this.min.x + this.max.x) / 2,\r\n\t\t        (this.min.y + this.max.y) / 2, round);\r\n\t},\r\n\r\n\t// @method getBottomLeft(): Point\r\n\t// Returns the bottom-left point of the bounds.\r\n\tgetBottomLeft: function () {\r\n\t\treturn toPoint(this.min.x, this.max.y);\r\n\t},\r\n\r\n\t// @method getTopRight(): Point\r\n\t// Returns the top-right point of the bounds.\r\n\tgetTopRight: function () { // -> Point\r\n\t\treturn toPoint(this.max.x, this.min.y);\r\n\t},\r\n\r\n\t// @method getTopLeft(): Point\r\n\t// Returns the top-left point of the bounds (i.e. [`this.min`](#bounds-min)).\r\n\tgetTopLeft: function () {\r\n\t\treturn this.min; // left, top\r\n\t},\r\n\r\n\t// @method getBottomRight(): Point\r\n\t// Returns the bottom-right point of the bounds (i.e. [`this.max`](#bounds-max)).\r\n\tgetBottomRight: function () {\r\n\t\treturn this.max; // right, bottom\r\n\t},\r\n\r\n\t// @method getSize(): Point\r\n\t// Returns the size of the given bounds\r\n\tgetSize: function () {\r\n\t\treturn this.max.subtract(this.min);\r\n\t},\r\n\r\n\t// @method contains(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle contains the given one.\r\n\t// @alternative\r\n\t// @method contains(point: Point): Boolean\r\n\t// Returns `true` if the rectangle contains the given point.\r\n\tcontains: function (obj) {\r\n\t\tvar min, max;\r\n\r\n\t\tif (typeof obj[0] === 'number' || obj instanceof Point) {\r\n\t\t\tobj = toPoint(obj);\r\n\t\t} else {\r\n\t\t\tobj = toBounds(obj);\r\n\t\t}\r\n\r\n\t\tif (obj instanceof Bounds) {\r\n\t\t\tmin = obj.min;\r\n\t\t\tmax = obj.max;\r\n\t\t} else {\r\n\t\t\tmin = max = obj;\r\n\t\t}\r\n\r\n\t\treturn (min.x >= this.min.x) &&\r\n\t\t       (max.x <= this.max.x) &&\r\n\t\t       (min.y >= this.min.y) &&\r\n\t\t       (max.y <= this.max.y);\r\n\t},\r\n\r\n\t// @method intersects(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle intersects the given bounds. Two bounds\r\n\t// intersect if they have at least one point in common.\r\n\tintersects: function (bounds) { // (Bounds) -> Boolean\r\n\t\tbounds = toBounds(bounds);\r\n\r\n\t\tvar min = this.min,\r\n\t\t    max = this.max,\r\n\t\t    min2 = bounds.min,\r\n\t\t    max2 = bounds.max,\r\n\t\t    xIntersects = (max2.x >= min.x) && (min2.x <= max.x),\r\n\t\t    yIntersects = (max2.y >= min.y) && (min2.y <= max.y);\r\n\r\n\t\treturn xIntersects && yIntersects;\r\n\t},\r\n\r\n\t// @method overlaps(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle overlaps the given bounds. Two bounds\r\n\t// overlap if their intersection is an area.\r\n\toverlaps: function (bounds) { // (Bounds) -> Boolean\r\n\t\tbounds = toBounds(bounds);\r\n\r\n\t\tvar min = this.min,\r\n\t\t    max = this.max,\r\n\t\t    min2 = bounds.min,\r\n\t\t    max2 = bounds.max,\r\n\t\t    xOverlaps = (max2.x > min.x) && (min2.x < max.x),\r\n\t\t    yOverlaps = (max2.y > min.y) && (min2.y < max.y);\r\n\r\n\t\treturn xOverlaps && yOverlaps;\r\n\t},\r\n\r\n\t// @method isValid(): Boolean\r\n\t// Returns `true` if the bounds are properly initialized.\r\n\tisValid: function () {\r\n\t\treturn !!(this.min && this.max);\r\n\t},\r\n\r\n\r\n\t// @method pad(bufferRatio: Number): Bounds\r\n\t// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.\r\n\t// For example, a ratio of 0.5 extends the bounds by 50% in each direction.\r\n\t// Negative values will retract the bounds.\r\n\tpad: function (bufferRatio) {\r\n\t\tvar min = this.min,\r\n\t\tmax = this.max,\r\n\t\theightBuffer = Math.abs(min.x - max.x) * bufferRatio,\r\n\t\twidthBuffer = Math.abs(min.y - max.y) * bufferRatio;\r\n\r\n\r\n\t\treturn toBounds(\r\n\t\t\ttoPoint(min.x - heightBuffer, min.y - widthBuffer),\r\n\t\t\ttoPoint(max.x + heightBuffer, max.y + widthBuffer));\r\n\t},\r\n\r\n\r\n\t// @method equals(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle is equivalent to the given bounds.\r\n\tequals: function (bounds) {\r\n\t\tif (!bounds) { return false; }\r\n\r\n\t\tbounds = toBounds(bounds);\r\n\r\n\t\treturn this.min.equals(bounds.getTopLeft()) &&\r\n\t\t\tthis.max.equals(bounds.getBottomRight());\r\n\t},\r\n};\r\n\r\n\r\n// @factory L.bounds(corner1: Point, corner2: Point)\r\n// Creates a Bounds object from two corners coordinate pairs.\r\n// @alternative\r\n// @factory L.bounds(points: Point[])\r\n// Creates a Bounds object from the given array of points.\r\nexport function toBounds(a, b) {\r\n\tif (!a || a instanceof Bounds) {\r\n\t\treturn a;\r\n\t}\r\n\treturn new Bounds(a, b);\r\n}\r\n", "import {LatLng, toLatLng} from './LatLng';\r\n\r\n/*\r\n * @class LatLngBounds\r\n * @aka L.LatLngBounds\r\n *\r\n * Represents a rectangular geographical area on a map.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var corner1 = L.latLng(40.712, -74.227),\r\n * corner2 = L.latLng(40.774, -74.125),\r\n * bounds = L.latLngBounds(corner1, corner2);\r\n * ```\r\n *\r\n * All Leaflet methods that accept LatLngBounds objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n *\r\n * ```js\r\n * map.fitBounds([\r\n * \t[40.712, -74.227],\r\n * \t[40.774, -74.125]\r\n * ]);\r\n * ```\r\n *\r\n * Caution: if the area crosses the antimeridian (often confused with the International Date Line), you must specify corners _outside_ the [-180, 180] degrees longitude range.\r\n *\r\n * Note that `LatLngBounds` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function LatLngBounds(corner1, corner2) { // (LatLng, LatLng) or (LatLng[])\r\n\tif (!corner1) { return; }\r\n\r\n\tvar latlngs = corner2 ? [corner1, corner2] : corner1;\r\n\r\n\tfor (var i = 0, len = latlngs.length; i < len; i++) {\r\n\t\tthis.extend(latlngs[i]);\r\n\t}\r\n}\r\n\r\nLatLngBounds.prototype = {\r\n\r\n\t// @method extend(latlng: LatLng): this\r\n\t// Extend the bounds to contain the given point\r\n\r\n\t// @alternative\r\n\t// @method extend(otherBounds: LatLngBounds): this\r\n\t// Extend the bounds to contain the given bounds\r\n\textend: function (obj) {\r\n\t\tvar sw = this._southWest,\r\n\t\t    ne = this._northEast,\r\n\t\t    sw2, ne2;\r\n\r\n\t\tif (obj instanceof LatLng) {\r\n\t\t\tsw2 = obj;\r\n\t\t\tne2 = obj;\r\n\r\n\t\t} else if (obj instanceof LatLngBounds) {\r\n\t\t\tsw2 = obj._southWest;\r\n\t\t\tne2 = obj._northEast;\r\n\r\n\t\t\tif (!sw2 || !ne2) { return this; }\r\n\r\n\t\t} else {\r\n\t\t\treturn obj ? this.extend(toLatLng(obj) || toLatLngBounds(obj)) : this;\r\n\t\t}\r\n\r\n\t\tif (!sw && !ne) {\r\n\t\t\tthis._southWest = new LatLng(sw2.lat, sw2.lng);\r\n\t\t\tthis._northEast = new LatLng(ne2.lat, ne2.lng);\r\n\t\t} else {\r\n\t\t\tsw.lat = Math.min(sw2.lat, sw.lat);\r\n\t\t\tsw.lng = Math.min(sw2.lng, sw.lng);\r\n\t\t\tne.lat = Math.max(ne2.lat, ne.lat);\r\n\t\t\tne.lng = Math.max(ne2.lng, ne.lng);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method pad(bufferRatio: Number): LatLngBounds\r\n\t// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.\r\n\t// For example, a ratio of 0.5 extends the bounds by 50% in each direction.\r\n\t// Negative values will retract the bounds.\r\n\tpad: function (bufferRatio) {\r\n\t\tvar sw = this._southWest,\r\n\t\t    ne = this._northEast,\r\n\t\t    heightBuffer = Math.abs(sw.lat - ne.lat) * bufferRatio,\r\n\t\t    widthBuffer = Math.abs(sw.lng - ne.lng) * bufferRatio;\r\n\r\n\t\treturn new LatLngBounds(\r\n\t\t        new LatLng(sw.lat - heightBuffer, sw.lng - widthBuffer),\r\n\t\t        new LatLng(ne.lat + heightBuffer, ne.lng + widthBuffer));\r\n\t},\r\n\r\n\t// @method getCenter(): LatLng\r\n\t// Returns the center point of the bounds.\r\n\tgetCenter: function () {\r\n\t\treturn new LatLng(\r\n\t\t        (this._southWest.lat + this._northEast.lat) / 2,\r\n\t\t        (this._southWest.lng + this._northEast.lng) / 2);\r\n\t},\r\n\r\n\t// @method getSouthWest(): LatLng\r\n\t// Returns the south-west point of the bounds.\r\n\tgetSouthWest: function () {\r\n\t\treturn this._southWest;\r\n\t},\r\n\r\n\t// @method getNorthEast(): LatLng\r\n\t// Returns the north-east point of the bounds.\r\n\tgetNorthEast: function () {\r\n\t\treturn this._northEast;\r\n\t},\r\n\r\n\t// @method getNorthWest(): LatLng\r\n\t// Returns the north-west point of the bounds.\r\n\tgetNorthWest: function () {\r\n\t\treturn new LatLng(this.getNorth(), this.getWest());\r\n\t},\r\n\r\n\t// @method getSouthEast(): LatLng\r\n\t// Returns the south-east point of the bounds.\r\n\tgetSouthEast: function () {\r\n\t\treturn new LatLng(this.getSouth(), this.getEast());\r\n\t},\r\n\r\n\t// @method getWest(): Number\r\n\t// Returns the west longitude of the bounds\r\n\tgetWest: function () {\r\n\t\treturn this._southWest.lng;\r\n\t},\r\n\r\n\t// @method getSouth(): Number\r\n\t// Returns the south latitude of the bounds\r\n\tgetSouth: function () {\r\n\t\treturn this._southWest.lat;\r\n\t},\r\n\r\n\t// @method getEast(): Number\r\n\t// Returns the east longitude of the bounds\r\n\tgetEast: function () {\r\n\t\treturn this._northEast.lng;\r\n\t},\r\n\r\n\t// @method getNorth(): Number\r\n\t// Returns the north latitude of the bounds\r\n\tgetNorth: function () {\r\n\t\treturn this._northEast.lat;\r\n\t},\r\n\r\n\t// @method contains(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle contains the given one.\r\n\r\n\t// @alternative\r\n\t// @method contains (latlng: LatLng): Boolean\r\n\t// Returns `true` if the rectangle contains the given point.\r\n\tcontains: function (obj) { // (LatLngBounds) or (LatLng) -> Boolean\r\n\t\tif (typeof obj[0] === 'number' || obj instanceof LatLng || 'lat' in obj) {\r\n\t\t\tobj = toLatLng(obj);\r\n\t\t} else {\r\n\t\t\tobj = toLatLngBounds(obj);\r\n\t\t}\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t    ne = this._northEast,\r\n\t\t    sw2, ne2;\r\n\r\n\t\tif (obj instanceof LatLngBounds) {\r\n\t\t\tsw2 = obj.getSouthWest();\r\n\t\t\tne2 = obj.getNorthEast();\r\n\t\t} else {\r\n\t\t\tsw2 = ne2 = obj;\r\n\t\t}\r\n\r\n\t\treturn (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) &&\r\n\t\t       (sw2.lng >= sw.lng) && (ne2.lng <= ne.lng);\r\n\t},\r\n\r\n\t// @method intersects(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle intersects the given bounds. Two bounds intersect if they have at least one point in common.\r\n\tintersects: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t    ne = this._northEast,\r\n\t\t    sw2 = bounds.getSouthWest(),\r\n\t\t    ne2 = bounds.getNorthEast(),\r\n\r\n\t\t    latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat),\r\n\t\t    lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng);\r\n\r\n\t\treturn latIntersects && lngIntersects;\r\n\t},\r\n\r\n\t// @method overlaps(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle overlaps the given bounds. Two bounds overlap if their intersection is an area.\r\n\toverlaps: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t    ne = this._northEast,\r\n\t\t    sw2 = bounds.getSouthWest(),\r\n\t\t    ne2 = bounds.getNorthEast(),\r\n\r\n\t\t    latOverlaps = (ne2.lat > sw.lat) && (sw2.lat < ne.lat),\r\n\t\t    lngOverlaps = (ne2.lng > sw.lng) && (sw2.lng < ne.lng);\r\n\r\n\t\treturn latOverlaps && lngOverlaps;\r\n\t},\r\n\r\n\t// @method toBBoxString(): String\r\n\t// Returns a string with bounding box coordinates in a 'southwest_lng,southwest_lat,northeast_lng,northeast_lat' format. Useful for sending requests to web services that return geo data.\r\n\ttoBBoxString: function () {\r\n\t\treturn [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(',');\r\n\t},\r\n\r\n\t// @method equals(otherBounds: LatLngBounds, maxMargin?: Number): Boolean\r\n\t// Returns `true` if the rectangle is equivalent (within a small margin of error) to the given bounds. The margin of error can be overridden by setting `maxMargin` to a small number.\r\n\tequals: function (bounds, maxMargin) {\r\n\t\tif (!bounds) { return false; }\r\n\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\treturn this._southWest.equals(bounds.getSouthWest(), maxMargin) &&\r\n\t\t       this._northEast.equals(bounds.getNorthEast(), maxMargin);\r\n\t},\r\n\r\n\t// @method isValid(): Boolean\r\n\t// Returns `true` if the bounds are properly initialized.\r\n\tisValid: function () {\r\n\t\treturn !!(this._southWest && this._northEast);\r\n\t}\r\n};\r\n\r\n// TODO International date line?\r\n\r\n// @factory L.latLngBounds(corner1: LatLng, corner2: LatLng)\r\n// Creates a `LatLngBounds` object by defining two diagonally opposite corners of the rectangle.\r\n\r\n// @alternative\r\n// @factory L.latLngBounds(latlngs: LatLng[])\r\n// Creates a `LatLngBounds` object defined by the geographical points it contains. Very useful for zooming the map to fit a particular set of locations with [`fitBounds`](#map-fitbounds).\r\nexport function toLatLngBounds(a, b) {\r\n\tif (a instanceof LatLngBounds) {\r\n\t\treturn a;\r\n\t}\r\n\treturn new LatLngBounds(a, b);\r\n}\r\n", "import * as Util from '../core/Util';\r\nimport {Earth} from './crs/CRS.Earth';\r\nimport {toLatLngBounds} from './LatLngBounds';\r\n\r\n/* @class LatLng\r\n * @aka L.LatLng\r\n *\r\n * Represents a geographical point with a certain latitude and longitude.\r\n *\r\n * @example\r\n *\r\n * ```\r\n * var latlng = L.latLng(50.5, 30.5);\r\n * ```\r\n *\r\n * All Leaflet methods that accept LatLng objects also accept them in a simple Array form and simple object form (unless noted otherwise), so these lines are equivalent:\r\n *\r\n * ```\r\n * map.panTo([50, 30]);\r\n * map.panTo({lon: 30, lat: 50});\r\n * map.panTo({lat: 50, lng: 30});\r\n * map.panTo(L.latLng(50, 30));\r\n * ```\r\n *\r\n * Note that `LatLng` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function LatLng(lat, lng, alt) {\r\n\tif (isNaN(lat) || isNaN(lng)) {\r\n\t\tthrow new Error('Invalid LatLng object: (' + lat + ', ' + lng + ')');\r\n\t}\r\n\r\n\t// @property lat: Number\r\n\t// Latitude in degrees\r\n\tthis.lat = +lat;\r\n\r\n\t// @property lng: Number\r\n\t// Longitude in degrees\r\n\tthis.lng = +lng;\r\n\r\n\t// @property alt: Number\r\n\t// Altitude in meters (optional)\r\n\tif (alt !== undefined) {\r\n\t\tthis.alt = +alt;\r\n\t}\r\n}\r\n\r\nLatLng.prototype = {\r\n\t// @method equals(otherLatLng: LatLng, maxMargin?: Number): Boolean\r\n\t// Returns `true` if the given `LatLng` point is at the same position (within a small margin of error). The margin of error can be overridden by setting `maxMargin` to a small number.\r\n\tequals: function (obj, maxMargin) {\r\n\t\tif (!obj) { return false; }\r\n\r\n\t\tobj = toLatLng(obj);\r\n\r\n\t\tvar margin = Math.max(\r\n\t\t        Math.abs(this.lat - obj.lat),\r\n\t\t        Math.abs(this.lng - obj.lng));\r\n\r\n\t\treturn margin <= (maxMargin === undefined ? 1.0E-9 : maxMargin);\r\n\t},\r\n\r\n\t// @method toString(): String\r\n\t// Returns a string representation of the point (for debugging purposes).\r\n\ttoString: function (precision) {\r\n\t\treturn 'LatLng(' +\r\n\t\t        Util.formatNum(this.lat, precision) + ', ' +\r\n\t\t        Util.formatNum(this.lng, precision) + ')';\r\n\t},\r\n\r\n\t// @method distanceTo(otherLatLng: LatLng): Number\r\n\t// Returns the distance (in meters) to the given `LatLng` calculated using the [Spherical Law of Cosines](https://en.wikipedia.org/wiki/Spherical_law_of_cosines).\r\n\tdistanceTo: function (other) {\r\n\t\treturn Earth.distance(this, toLatLng(other));\r\n\t},\r\n\r\n\t// @method wrap(): LatLng\r\n\t// Returns a new `LatLng` object with the longitude wrapped so it's always between -180 and +180 degrees.\r\n\twrap: function () {\r\n\t\treturn Earth.wrapLatLng(this);\r\n\t},\r\n\r\n\t// @method toBounds(sizeInMeters: Number): LatLngBounds\r\n\t// Returns a new `LatLngBounds` object in which each boundary is `sizeInMeters/2` meters apart from the `LatLng`.\r\n\ttoBounds: function (sizeInMeters) {\r\n\t\tvar latAccuracy = 180 * sizeInMeters / 40075017,\r\n\t\t    lngAccuracy = latAccuracy / Math.cos((Math.PI / 180) * this.lat);\r\n\r\n\t\treturn toLatLngBounds(\r\n\t\t        [this.lat - latAccuracy, this.lng - lngAccuracy],\r\n\t\t        [this.lat + latAccuracy, this.lng + lngAccuracy]);\r\n\t},\r\n\r\n\tclone: function () {\r\n\t\treturn new LatLng(this.lat, this.lng, this.alt);\r\n\t}\r\n};\r\n\r\n\r\n\r\n// @factory L.latLng(latitude: Number, longitude: Number, altitude?: Number): LatLng\r\n// Creates an object representing a geographical point with the given latitude and longitude (and optionally altitude).\r\n\r\n// @alternative\r\n// @factory L.latLng(coords: Array): LatLng\r\n// Expects an array of the form `[Number, Number]` or `[Number, Number, Number]` instead.\r\n\r\n// @alternative\r\n// @factory L.latLng(coords: Object): LatLng\r\n// Expects an plain object of the form `{lat: Number, lng: Number}` or `{lat: Number, lng: Number, alt: Number}` instead.\r\n\r\nexport function toLatLng(a, b, c) {\r\n\tif (a instanceof LatLng) {\r\n\t\treturn a;\r\n\t}\r\n\tif (Util.isArray(a) && typeof a[0] !== 'object') {\r\n\t\tif (a.length === 3) {\r\n\t\t\treturn new LatLng(a[0], a[1], a[2]);\r\n\t\t}\r\n\t\tif (a.length === 2) {\r\n\t\t\treturn new LatLng(a[0], a[1]);\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\tif (a === undefined || a === null) {\r\n\t\treturn a;\r\n\t}\r\n\tif (typeof a === 'object' && 'lat' in a) {\r\n\t\treturn new LatLng(a.lat, 'lng' in a ? a.lng : a.lon, a.alt);\r\n\t}\r\n\tif (b === undefined) {\r\n\t\treturn null;\r\n\t}\r\n\treturn new LatLng(a, b, c);\r\n}\r\n", "\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {LatLng} from '../LatLng';\r\nimport {LatLngBounds} from '../LatLngBounds';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.Base\r\n * Object that defines coordinate reference systems for projecting\r\n * geographical points into pixel (screen) coordinates and back (and to\r\n * coordinates in other units for [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services). See\r\n * [spatial reference system](https://en.wikipedia.org/wiki/Spatial_reference_system).\r\n *\r\n * Leaflet defines the most usual CRSs by default. If you want to use a\r\n * CRS not defined by default, take a look at the\r\n * [Proj4Leaflet](https://github.com/kartena/Proj4Leaflet) plugin.\r\n *\r\n * Note that the CRS instances do not inherit from Leaflet's `Class` object,\r\n * and can't be instantiated. Also, new classes can't inherit from them,\r\n * and methods can't be added to them with the `include` function.\r\n */\r\n\r\nexport var CRS = {\r\n\t// @method latLngToPoint(latlng: LatLng, zoom: Number): Point\r\n\t// Projects geographical coordinates into pixel coordinates for a given zoom.\r\n\tlatLngToPoint: function (latlng, zoom) {\r\n\t\tvar projectedPoint = this.projection.project(latlng),\r\n\t\t    scale = this.scale(zoom);\r\n\r\n\t\treturn this.transformation._transform(projectedPoint, scale);\r\n\t},\r\n\r\n\t// @method pointToLatLng(point: Point, zoom: Number): LatLng\r\n\t// The inverse of `latLngToPoint`. Projects pixel coordinates on a given\r\n\t// zoom into geographical coordinates.\r\n\tpointToLatLng: function (point, zoom) {\r\n\t\tvar scale = this.scale(zoom),\r\n\t\t    untransformedPoint = this.transformation.untransform(point, scale);\r\n\r\n\t\treturn this.projection.unproject(untransformedPoint);\r\n\t},\r\n\r\n\t// @method project(latlng: LatLng): Point\r\n\t// Projects geographical coordinates into coordinates in units accepted for\r\n\t// this CRS (e.g. meters for EPSG:3857, for passing it to WMS services).\r\n\tproject: function (latlng) {\r\n\t\treturn this.projection.project(latlng);\r\n\t},\r\n\r\n\t// @method unproject(point: Point): LatLng\r\n\t// Given a projected coordinate returns the corresponding LatLng.\r\n\t// The inverse of `project`.\r\n\tunproject: function (point) {\r\n\t\treturn this.projection.unproject(point);\r\n\t},\r\n\r\n\t// @method scale(zoom: Number): Number\r\n\t// Returns the scale used when transforming projected coordinates into\r\n\t// pixel coordinates for a particular zoom. For example, it returns\r\n\t// `256 * 2^zoom` for Mercator-based CRS.\r\n\tscale: function (zoom) {\r\n\t\treturn 256 * Math.pow(2, zoom);\r\n\t},\r\n\r\n\t// @method zoom(scale: Number): Number\r\n\t// Inverse of `scale()`, returns the zoom level corresponding to a scale\r\n\t// factor of `scale`.\r\n\tzoom: function (scale) {\r\n\t\treturn Math.log(scale / 256) / Math.LN2;\r\n\t},\r\n\r\n\t// @method getProjectedBounds(zoom: Number): Bounds\r\n\t// Returns the projection's bounds scaled and transformed for the provided `zoom`.\r\n\tgetProjectedBounds: function (zoom) {\r\n\t\tif (this.infinite) { return null; }\r\n\r\n\t\tvar b = this.projection.bounds,\r\n\t\t    s = this.scale(zoom),\r\n\t\t    min = this.transformation.transform(b.min, s),\r\n\t\t    max = this.transformation.transform(b.max, s);\r\n\r\n\t\treturn new Bounds(min, max);\r\n\t},\r\n\r\n\t// @method distance(latlng1: LatLng, latlng2: LatLng): Number\r\n\t// Returns the distance between two geographical coordinates.\r\n\r\n\t// @property code: String\r\n\t// Standard code name of the CRS passed into WMS services (e.g. `'EPSG:3857'`)\r\n\t//\r\n\t// @property wrapLng: Number[]\r\n\t// An array of two numbers defining whether the longitude (horizontal) coordinate\r\n\t// axis wraps around a given range and how. Defaults to `[-180, 180]` in most\r\n\t// geographical CRSs. If `undefined`, the longitude axis does not wrap around.\r\n\t//\r\n\t// @property wrapLat: Number[]\r\n\t// Like `wrapLng`, but for the latitude (vertical) axis.\r\n\r\n\t// wrapLng: [min, max],\r\n\t// wrapLat: [min, max],\r\n\r\n\t// @property infinite: Boolean\r\n\t// If true, the coordinate space will be unbounded (infinite in both axes)\r\n\tinfinite: false,\r\n\r\n\t// @method wrapLatLng(latlng: LatLng): LatLng\r\n\t// Returns a `LatLng` where lat and lng has been wrapped according to the\r\n\t// CRS's `wrapLat` and `wrapLng` properties, if they are outside the CRS's bounds.\r\n\twrapLatLng: function (latlng) {\r\n\t\tvar lng = this.wrapLng ? Util.wrapNum(latlng.lng, this.wrapLng, true) : latlng.lng,\r\n\t\t    lat = this.wrapLat ? Util.wrapNum(latlng.lat, this.wrapLat, true) : latlng.lat,\r\n\t\t    alt = latlng.alt;\r\n\r\n\t\treturn new LatLng(lat, lng, alt);\r\n\t},\r\n\r\n\t// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds\r\n\t// Returns a `LatLngBounds` with the same size as the given one, ensuring\r\n\t// that its center is within the CRS's bounds.\r\n\t// Only accepts actual `L.LatLngBounds` instances, not arrays.\r\n\twrapLatLngBounds: function (bounds) {\r\n\t\tvar center = bounds.getCenter(),\r\n\t\t    newCenter = this.wrapLatLng(center),\r\n\t\t    latShift = center.lat - newCenter.lat,\r\n\t\t    lngShift = center.lng - newCenter.lng;\r\n\r\n\t\tif (latShift === 0 && lngShift === 0) {\r\n\t\t\treturn bounds;\r\n\t\t}\r\n\r\n\t\tvar sw = bounds.getSouthWest(),\r\n\t\t    ne = bounds.getNorthEast(),\r\n\t\t    newSw = new LatLng(sw.lat - latShift, sw.lng - lngShift),\r\n\t\t    newNe = new LatLng(ne.lat - latShift, ne.lng - lngShift);\r\n\r\n\t\treturn new LatLngBounds(newSw, newNe);\r\n\t}\r\n};\r\n", "import {CRS} from './CRS';\nimport * as Util from '../../core/Util';\n\n/*\n * @namespace CRS\n * @crs L.CRS.Earth\n *\n * Serves as the base for CRS that are global such that they cover the earth.\n * Can only be used as the base for other CRS and cannot be used directly,\n * since it does not have a `code`, `projection` or `transformation`. `distance()` returns\n * meters.\n */\n\nexport var Earth = Util.extend({}, CRS, {\n\twrapLng: [-180, 180],\n\n\t// Mean Earth Radius, as recommended for use by\n\t// the International Union of Geodesy and Geophysics,\n\t// see https://rosettacode.org/wiki/Haversine_formula\n\tR: 6371000,\n\n\t// distance between two geographical points using spherical law of cosines approximation\n\tdistance: function (latlng1, latlng2) {\n\t\tvar rad = Math.PI / 180,\n\t\t    lat1 = latlng1.lat * rad,\n\t\t    lat2 = latlng2.lat * rad,\n\t\t    sinDLat = Math.sin((latlng2.lat - latlng1.lat) * rad / 2),\n\t\t    sinDLon = Math.sin((latlng2.lng - latlng1.lng) * rad / 2),\n\t\t    a = sinDLat * sinDLat + Math.cos(lat1) * Math.cos(lat2) * sinDLon * sinDLon,\n\t\t    c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n\t\treturn this.R * c;\n\t}\n});\n", "import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @projection L.Projection.SphericalMercator\r\n *\r\n * Spherical Mercator projection — the most common projection for online maps,\r\n * used by almost all free and commercial tile providers. Assumes that Earth is\r\n * a sphere. Used by the `EPSG:3857` CRS.\r\n */\r\n\r\nvar earthRadius = 6378137;\r\n\r\nexport var SphericalMercator = {\r\n\r\n\tR: earthRadius,\r\n\tMAX_LATITUDE: 85.0511287798,\r\n\r\n\tproject: function (latlng) {\r\n\t\tvar d = Math.PI / 180,\r\n\t\t    max = this.MAX_LATITUDE,\r\n\t\t    lat = Math.max(Math.min(max, latlng.lat), -max),\r\n\t\t    sin = Math.sin(lat * d);\r\n\r\n\t\treturn new Point(\r\n\t\t\tthis.R * latlng.lng * d,\r\n\t\t\tthis.R * Math.log((1 + sin) / (1 - sin)) / 2);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\tvar d = 180 / Math.PI;\r\n\r\n\t\treturn new LatLng(\r\n\t\t\t(2 * Math.atan(Math.exp(point.y / this.R)) - (Math.PI / 2)) * d,\r\n\t\t\tpoint.x * d / this.R);\r\n\t},\r\n\r\n\tbounds: (function () {\r\n\t\tvar d = earthRadius * Math.PI;\r\n\t\treturn new Bounds([-d, -d], [d, d]);\r\n\t})()\r\n};\r\n", "import {Point} from './Point';\r\nimport * as Util from '../core/Util';\r\n\r\n/*\r\n * @class Transformation\r\n * @aka L.Transformation\r\n *\r\n * Represents an affine transformation: a set of coefficients `a`, `b`, `c`, `d`\r\n * for transforming a point of a form `(x, y)` into `(a*x + b, c*y + d)` and doing\r\n * the reverse. Used by Leaflet in its projections code.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var transformation = L.transformation(2, 5, -1, 10),\r\n * \tp = L.point(1, 2),\r\n * \tp2 = transformation.transform(p), //  L.point(7, 8)\r\n * \tp3 = transformation.untransform(p2); //  L.point(1, 2)\r\n * ```\r\n */\r\n\r\n\r\n// factory new L.Transformation(a: Number, b: Number, c: Number, d: Number)\r\n// Creates a `Transformation` object with the given coefficients.\r\nexport function Transformation(a, b, c, d) {\r\n\tif (Util.isArray(a)) {\r\n\t\t// use array properties\r\n\t\tthis._a = a[0];\r\n\t\tthis._b = a[1];\r\n\t\tthis._c = a[2];\r\n\t\tthis._d = a[3];\r\n\t\treturn;\r\n\t}\r\n\tthis._a = a;\r\n\tthis._b = b;\r\n\tthis._c = c;\r\n\tthis._d = d;\r\n}\r\n\r\nTransformation.prototype = {\r\n\t// @method transform(point: Point, scale?: Number): Point\r\n\t// Returns a transformed point, optionally multiplied by the given scale.\r\n\t// Only accepts actual `L.Point` instances, not arrays.\r\n\ttransform: function (point, scale) { // (Point, Number) -> Point\r\n\t\treturn this._transform(point.clone(), scale);\r\n\t},\r\n\r\n\t// destructive transform (faster)\r\n\t_transform: function (point, scale) {\r\n\t\tscale = scale || 1;\r\n\t\tpoint.x = scale * (this._a * point.x + this._b);\r\n\t\tpoint.y = scale * (this._c * point.y + this._d);\r\n\t\treturn point;\r\n\t},\r\n\r\n\t// @method untransform(point: Point, scale?: Number): Point\r\n\t// Returns the reverse transformation of the given point, optionally divided\r\n\t// by the given scale. Only accepts actual `L.Point` instances, not arrays.\r\n\tuntransform: function (point, scale) {\r\n\t\tscale = scale || 1;\r\n\t\treturn new Point(\r\n\t\t        (point.x / scale - this._b) / this._a,\r\n\t\t        (point.y / scale - this._d) / this._c);\r\n\t}\r\n};\r\n\r\n// factory L.transformation(a: Number, b: Number, c: Number, d: Number)\r\n\r\n// @factory L.transformation(a: Number, b: Number, c: Number, d: Number)\r\n// Instantiates a Transformation object with the given coefficients.\r\n\r\n// @alternative\r\n// @factory L.transformation(coefficients: Array): Transformation\r\n// Expects an coefficients array of the form\r\n// `[a: Number, b: Number, c: Number, d: Number]`.\r\n\r\nexport function toTransformation(a, b, c, d) {\r\n\treturn new Transformation(a, b, c, d);\r\n}\r\n", "import {Earth} from './CRS.Earth';\r\nimport {SphericalMercator} from '../projection/Projection.SphericalMercator';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG3857\r\n *\r\n * The most common CRS for online maps, used by almost all free and commercial\r\n * tile providers. Uses Spherical Mercator projection. Set in by default in\r\n * Map's `crs` option.\r\n */\r\n\r\nexport var EPSG3857 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:3857',\r\n\tprojection: SphericalMercator,\r\n\r\n\ttransformation: (function () {\r\n\t\tvar scale = 0.5 / (Math.PI * SphericalMercator.R);\r\n\t\treturn toTransformation(scale, 0.5, -scale, 0.5);\r\n\t}())\r\n});\r\n\r\nexport var EPSG900913 = Util.extend({}, EPSG3857, {\r\n\tcode: 'EPSG:900913'\r\n});\r\n", "import Browser from '../../core/Browser';\n\n// @namespace SVG; @section\n// There are several static functions which can be called without instantiating L.SVG:\n\n// @function create(name: String): SVGElement\n// Returns a instance of [SVGElement](https://developer.mozilla.org/docs/Web/API/SVGElement),\n// corresponding to the class name passed. For example, using 'line' will return\n// an instance of [SVGLineElement](https://developer.mozilla.org/docs/Web/API/SVGLineElement).\nexport function svgCreate(name) {\n\treturn document.createElementNS('http://www.w3.org/2000/svg', name);\n}\n\n// @function pointsToPath(rings: Point[], closed: Boolean): String\n// Generates a SVG path string for multiple rings, with each ring turning\n// into \"M..L..L..\" instructions\nexport function pointsToPath(rings, closed) {\n\tvar str = '',\n\ti, j, len, len2, points, p;\n\n\tfor (i = 0, len = rings.length; i < len; i++) {\n\t\tpoints = rings[i];\n\n\t\tfor (j = 0, len2 = points.length; j < len2; j++) {\n\t\t\tp = points[j];\n\t\t\tstr += (j ? 'L' : 'M') + p.x + ' ' + p.y;\n\t\t}\n\n\t\t// closes the ring for polygons; \"x\" is VML syntax\n\t\tstr += closed ? (Browser.svg ? 'z' : 'x') : '';\n\t}\n\n\t// SVG complains about empty path strings\n\treturn str || 'M0 0';\n}\n\n\n\n\n", "import * as Util from './Util';\r\nimport {svgCreate} from '../layer/vector/SVG.Util';\r\n\r\n/*\r\n * @namespace Browser\r\n * @aka L.Browser\r\n *\r\n * A namespace with static properties for browser/feature detection used by Leaflet internally.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * if (L.Browser.ielt9) {\r\n *   alert('Upgrade your browser, dude!');\r\n * }\r\n * ```\r\n */\r\n\r\nvar style = document.documentElement.style;\r\n\r\n// @property ie: Boolean; `true` for all Internet Explorer versions (not Edge).\r\nvar ie = 'ActiveXObject' in window;\r\n\r\n// @property ielt9: Boolean; `true` for Internet Explorer versions less than 9.\r\nvar ielt9 = ie && !document.addEventListener;\r\n\r\n// @property edge: Boolean; `true` for the Edge web browser.\r\nvar edge = 'msLaunchUri' in navigator && !('documentMode' in document);\r\n\r\n// @property webkit: Boolean;\r\n// `true` for webkit-based browsers like Chrome and Safari (including mobile versions).\r\nvar webkit = userAgentContains('webkit');\r\n\r\n// @property android: Boolean\r\n// **Deprecated.** `true` for any browser running on an Android platform.\r\nvar android = userAgentContains('android');\r\n\r\n// @property android23: Boolean; **Deprecated.** `true` for browsers running on Android 2 or Android 3.\r\nvar android23 = userAgentContains('android 2') || userAgentContains('android 3');\r\n\r\n/* See https://stackoverflow.com/a/17961266 for details on detecting stock Android */\r\nvar webkitVer = parseInt(/WebKit\\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10); // also matches AppleWebKit\r\n// @property androidStock: Boolean; **Deprecated.** `true` for the Android stock browser (i.e. not Chrome)\r\nvar androidStock = android && userAgentContains('Google') && webkitVer < 537 && !('AudioNode' in window);\r\n\r\n// @property opera: Boolean; `true` for the Opera browser\r\nvar opera = !!window.opera;\r\n\r\n// @property chrome: Boolean; `true` for the Chrome browser.\r\nvar chrome = !edge && userAgentContains('chrome');\r\n\r\n// @property gecko: Boolean; `true` for gecko-based browsers like Firefox.\r\nvar gecko = userAgentContains('gecko') && !webkit && !opera && !ie;\r\n\r\n// @property safari: Boolean; `true` for the Safari browser.\r\nvar safari = !chrome && userAgentContains('safari');\r\n\r\nvar phantom = userAgentContains('phantom');\r\n\r\n// @property opera12: Boolean\r\n// `true` for the Opera browser supporting CSS transforms (version 12 or later).\r\nvar opera12 = 'OTransition' in style;\r\n\r\n// @property win: Boolean; `true` when the browser is running in a Windows platform\r\nvar win = navigator.platform.indexOf('Win') === 0;\r\n\r\n// @property ie3d: Boolean; `true` for all Internet Explorer versions supporting CSS transforms.\r\nvar ie3d = ie && ('transition' in style);\r\n\r\n// @property webkit3d: Boolean; `true` for webkit-based browsers supporting CSS transforms.\r\nvar webkit3d = ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()) && !android23;\r\n\r\n// @property gecko3d: Boolean; `true` for gecko-based browsers supporting CSS transforms.\r\nvar gecko3d = 'MozPerspective' in style;\r\n\r\n// @property any3d: Boolean\r\n// `true` for all browsers supporting CSS transforms.\r\nvar any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d) && !opera12 && !phantom;\r\n\r\n// @property mobile: Boolean; `true` for all browsers running in a mobile device.\r\nvar mobile = typeof orientation !== 'undefined' || userAgentContains('mobile');\r\n\r\n// @property mobileWebkit: Boolean; `true` for all webkit-based browsers in a mobile device.\r\nvar mobileWebkit = mobile && webkit;\r\n\r\n// @property mobileWebkit3d: Boolean\r\n// `true` for all webkit-based browsers in a mobile device supporting CSS transforms.\r\nvar mobileWebkit3d = mobile && webkit3d;\r\n\r\n// @property msPointer: Boolean\r\n// `true` for browsers implementing the Microsoft touch events model (notably IE10).\r\nvar msPointer = !window.PointerEvent && window.MSPointerEvent;\r\n\r\n// @property pointer: Boolean\r\n// `true` for all browsers supporting [pointer events](https://msdn.microsoft.com/en-us/library/dn433244%28v=vs.85%29.aspx).\r\nvar pointer = !!(window.PointerEvent || msPointer);\r\n\r\n// @property touchNative: Boolean\r\n// `true` for all browsers supporting [touch events](https://developer.mozilla.org/docs/Web/API/Touch_events).\r\n// **This does not necessarily mean** that the browser is running in a computer with\r\n// a touchscreen, it only means that the browser is capable of understanding\r\n// touch events.\r\nvar touchNative = 'ontouchstart' in window || !!window.TouchEvent;\r\n\r\n// @property touch: Boolean\r\n// `true` for all browsers supporting either [touch](#browser-touch) or [pointer](#browser-pointer) events.\r\n// Note: pointer events will be preferred (if available), and processed for all `touch*` listeners.\r\nvar touch = !window.L_NO_TOUCH && (touchNative || pointer);\r\n\r\n// @property mobileOpera: Boolean; `true` for the Opera browser in a mobile device.\r\nvar mobileOpera = mobile && opera;\r\n\r\n// @property mobileGecko: Boolean\r\n// `true` for gecko-based browsers running in a mobile device.\r\nvar mobileGecko = mobile && gecko;\r\n\r\n// @property retina: Boolean\r\n// `true` for browsers on a high-resolution \"retina\" screen or on any screen when browser's display zoom is more than 100%.\r\nvar retina = (window.devicePixelRatio || (window.screen.deviceXDPI / window.screen.logicalXDPI)) > 1;\r\n\r\n// @property passiveEvents: Boolean\r\n// `true` for browsers that support passive events.\r\nvar passiveEvents = (function () {\r\n\tvar supportsPassiveOption = false;\r\n\ttry {\r\n\t\tvar opts = Object.defineProperty({}, 'passive', {\r\n\t\t\tget: function () { // eslint-disable-line getter-return\r\n\t\t\t\tsupportsPassiveOption = true;\r\n\t\t\t}\r\n\t\t});\r\n\t\twindow.addEventListener('testPassiveEventSupport', Util.falseFn, opts);\r\n\t\twindow.removeEventListener('testPassiveEventSupport', Util.falseFn, opts);\r\n\t} catch (e) {\r\n\t\t// Errors can safely be ignored since this is only a browser support test.\r\n\t}\r\n\treturn supportsPassiveOption;\r\n}());\r\n\r\n// @property canvas: Boolean\r\n// `true` when the browser supports [`<canvas>`](https://developer.mozilla.org/docs/Web/API/Canvas_API).\r\nvar canvas = (function () {\r\n\treturn !!document.createElement('canvas').getContext;\r\n}());\r\n\r\n// @property svg: Boolean\r\n// `true` when the browser supports [SVG](https://developer.mozilla.org/docs/Web/SVG).\r\nvar svg = !!(document.createElementNS && svgCreate('svg').createSVGRect);\r\n\r\nvar inlineSvg = !!svg && (function () {\r\n\tvar div = document.createElement('div');\r\n\tdiv.innerHTML = '<svg/>';\r\n\treturn (div.firstChild && div.firstChild.namespaceURI) === 'http://www.w3.org/2000/svg';\r\n})();\r\n\r\n// @property vml: Boolean\r\n// `true` if the browser supports [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language).\r\nvar vml = !svg && (function () {\r\n\ttry {\r\n\t\tvar div = document.createElement('div');\r\n\t\tdiv.innerHTML = '<v:shape adj=\"1\"/>';\r\n\r\n\t\tvar shape = div.firstChild;\r\n\t\tshape.style.behavior = 'url(#default#VML)';\r\n\r\n\t\treturn shape && (typeof shape.adj === 'object');\r\n\r\n\t} catch (e) {\r\n\t\treturn false;\r\n\t}\r\n}());\r\n\r\n\r\n// @property mac: Boolean; `true` when the browser is running in a Mac platform\r\nvar mac = navigator.platform.indexOf('Mac') === 0;\r\n\r\n// @property mac: Boolean; `true` when the browser is running in a Linux platform\r\nvar linux = navigator.platform.indexOf('Linux') === 0;\r\n\r\nfunction userAgentContains(str) {\r\n\treturn navigator.userAgent.toLowerCase().indexOf(str) >= 0;\r\n}\r\n\r\n\r\nexport default {\r\n\tie: ie,\r\n\tielt9: ielt9,\r\n\tedge: edge,\r\n\twebkit: webkit,\r\n\tandroid: android,\r\n\tandroid23: android23,\r\n\tandroidStock: androidStock,\r\n\topera: opera,\r\n\tchrome: chrome,\r\n\tgecko: gecko,\r\n\tsafari: safari,\r\n\tphantom: phantom,\r\n\topera12: opera12,\r\n\twin: win,\r\n\tie3d: ie3d,\r\n\twebkit3d: webkit3d,\r\n\tgecko3d: gecko3d,\r\n\tany3d: any3d,\r\n\tmobile: mobile,\r\n\tmobileWebkit: mobileWebkit,\r\n\tmobileWebkit3d: mobileWebkit3d,\r\n\tmsPointer: msPointer,\r\n\tpointer: pointer,\r\n\ttouch: touch,\r\n\ttouchNative: touchNative,\r\n\tmobileOpera: mobileOpera,\r\n\tmobileGecko: mobileGecko,\r\n\tretina: retina,\r\n\tpassiveEvents: passiveEvents,\r\n\tcanvas: canvas,\r\n\tsvg: svg,\r\n\tvml: vml,\r\n\tinlineSvg: inlineSvg,\r\n\tmac: mac,\r\n\tlinux: linux\r\n};\r\n", "import * as DomEvent from './DomEvent';\nimport Browser from '../core/Browser';\nimport {falseFn} from '../core/Util';\n\n/*\n * Extends L.DomEvent to provide touch support for Internet Explorer and Windows-based devices.\n */\n\nvar POINTER_DOWN =   Browser.msPointer ? 'MSPointerDown'   : 'pointerdown';\nvar POINTER_MOVE =   Browser.msPointer ? 'MSPointerMove'   : 'pointermove';\nvar POINTER_UP =     Browser.msPointer ? 'MSPointerUp'     : 'pointerup';\nvar POINTER_CANCEL = Browser.msPointer ? 'MSPointerCancel' : 'pointercancel';\nvar pEvent = {\n\ttouchstart  : POINTER_DOWN,\n\ttouchmove   : POINTER_MOVE,\n\ttouchend    : POINTER_UP,\n\ttouchcancel : POINTER_CANCEL\n};\nvar handle = {\n\ttouchstart  : _onPointerStart,\n\ttouchmove   : _handlePointer,\n\ttouchend    : _handlePointer,\n\ttouchcancel : _handlePointer\n};\nvar _pointers = {};\nvar _pointerDocListener = false;\n\n// Provides a touch events wrapper for (ms)pointer events.\n// ref https://www.w3.org/TR/pointerevents/ https://www.w3.org/Bugs/Public/show_bug.cgi?id=22890\n\nexport function addPointerListener(obj, type, handler) {\n\tif (type === 'touchstart') {\n\t\t_addPointerDocListener();\n\t}\n\tif (!handle[type]) {\n\t\tconsole.warn('wrong event specified:', type);\n\t\treturn falseFn;\n\t}\n\thandler = handle[type].bind(this, handler);\n\tobj.addEventListener(pEvent[type], handler, false);\n\treturn handler;\n}\n\nexport function removePointerListener(obj, type, handler) {\n\tif (!pEvent[type]) {\n\t\tconsole.warn('wrong event specified:', type);\n\t\treturn;\n\t}\n\tobj.removeEventListener(pEvent[type], handler, false);\n}\n\nfunction _globalPointerDown(e) {\n\t_pointers[e.pointerId] = e;\n}\n\nfunction _globalPointerMove(e) {\n\tif (_pointers[e.pointerId]) {\n\t\t_pointers[e.pointerId] = e;\n\t}\n}\n\nfunction _globalPointerUp(e) {\n\tdelete _pointers[e.pointerId];\n}\n\nfunction _addPointerDocListener() {\n\t// need to keep track of what pointers and how many are active to provide e.touches emulation\n\tif (!_pointerDocListener) {\n\t\t// we listen document as any drags that end by moving the touch off the screen get fired there\n\t\tdocument.addEventListener(POINTER_DOWN, _globalPointerDown, true);\n\t\tdocument.addEventListener(POINTER_MOVE, _globalPointerMove, true);\n\t\tdocument.addEventListener(POINTER_UP, _globalPointerUp, true);\n\t\tdocument.addEventListener(POINTER_CANCEL, _globalPointerUp, true);\n\n\t\t_pointerDocListener = true;\n\t}\n}\n\nfunction _handlePointer(handler, e) {\n\tif (e.pointerType === (e.MSPOINTER_TYPE_MOUSE || 'mouse')) { return; }\n\n\te.touches = [];\n\tfor (var i in _pointers) {\n\t\te.touches.push(_pointers[i]);\n\t}\n\te.changedTouches = [e];\n\n\thandler(e);\n}\n\nfunction _onPointerStart(handler, e) {\n\t// IE10 specific: MsTouch needs preventDefault. See #2000\n\tif (e.MSPOINTER_TYPE_TOUCH && e.pointerType === e.MSPOINTER_TYPE_TOUCH) {\n\t\tDomEvent.preventDefault(e);\n\t}\n\t_handlePointer(handler, e);\n}\n", "import * as DomEvent from './DomEvent';\r\n\r\n/*\r\n * Extends the event handling code with double tap support for mobile browsers.\r\n *\r\n * Note: currently most browsers fire native dblclick, with only a few exceptions\r\n * (see https://github.com/Leaflet/Leaflet/issues/7012#issuecomment-595087386)\r\n */\r\n\r\nfunction makeDblclick(event) {\r\n\t// in modern browsers `type` cannot be just overridden:\r\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only\r\n\tvar newEvent = {},\r\n\t    prop, i;\r\n\tfor (i in event) {\r\n\t\tprop = event[i];\r\n\t\tnewEvent[i] = prop && prop.bind ? prop.bind(event) : prop;\r\n\t}\r\n\tevent = newEvent;\r\n\tnewEvent.type = 'dblclick';\r\n\tnewEvent.detail = 2;\r\n\tnewEvent.isTrusted = false;\r\n\tnewEvent._simulated = true; // for debug purposes\r\n\treturn newEvent;\r\n}\r\n\r\nvar delay = 200;\r\nexport function addDoubleTapListener(obj, handler) {\r\n\t// Most browsers handle double tap natively\r\n\tobj.addEventListener('dblclick', handler);\r\n\r\n\t// On some platforms the browser doesn't fire native dblclicks for touch events.\r\n\t// It seems that in all such cases `detail` property of `click` event is always `1`.\r\n\t// So here we rely on that fact to avoid excessive 'dblclick' simulation when not needed.\r\n\tvar last = 0,\r\n\t    detail;\r\n\tfunction simDblclick(e) {\r\n\t\tif (e.detail !== 1) {\r\n\t\t\tdetail = e.detail; // keep in sync to avoid false dblclick in some cases\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (e.pointerType === 'mouse' ||\r\n\t\t\t(e.sourceCapabilities && !e.sourceCapabilities.firesTouchEvents)) {\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// When clicking on an <input>, the browser generates a click on its\r\n\t\t// <label> (and vice versa) triggering two clicks in quick succession.\r\n\t\t// This ignores clicks on elements which are a label with a 'for'\r\n\t\t// attribute (or children of such a label), but not children of\r\n\t\t// a <input>.\r\n\t\tvar path = DomEvent.getPropagationPath(e);\r\n\t\tif (path.some(function (el) {\r\n\t\t\treturn el instanceof HTMLLabelElement && el.attributes.for;\r\n\t\t}) &&\r\n\t\t\t!path.some(function (el) {\r\n\t\t\t\treturn (\r\n\t\t\t\t\tel instanceof HTMLInputElement ||\r\n\t\t\t\t\tel instanceof HTMLSelectElement\r\n\t\t\t\t);\r\n\t\t\t})\r\n\t\t) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar now = Date.now();\r\n\t\tif (now - last <= delay) {\r\n\t\t\tdetail++;\r\n\t\t\tif (detail === 2) {\r\n\t\t\t\thandler(makeDblclick(e));\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tdetail = 1;\r\n\t\t}\r\n\t\tlast = now;\r\n\t}\r\n\r\n\tobj.addEventListener('click', simDblclick);\r\n\r\n\treturn {\r\n\t\tdblclick: handler,\r\n\t\tsimDblclick: simDblclick\r\n\t};\r\n}\r\n\r\nexport function removeDoubleTapListener(obj, handlers) {\r\n\tobj.removeEventListener('dblclick', handlers.dblclick);\r\n\tobj.removeEventListener('click', handlers.simDblclick);\r\n}\r\n", "import * as DomEvent from './DomEvent';\r\nimport * as Util from '../core/Util';\r\nimport {Point} from '../geometry/Point';\r\nimport Browser from '../core/Browser';\r\n\r\n/*\r\n * @namespace DomUtil\r\n *\r\n * Utility functions to work with the [DOM](https://developer.mozilla.org/docs/Web/API/Document_Object_Model)\r\n * tree, used by Leaflet internally.\r\n *\r\n * Most functions expecting or returning a `HTMLElement` also work for\r\n * SVG elements. The only difference is that classes refer to CSS classes\r\n * in HTML and SVG classes in SVG.\r\n */\r\n\r\n\r\n// @property TRANSFORM: String\r\n// Vendor-prefixed transform style name (e.g. `'webkitTransform'` for WebKit).\r\nexport var TRANSFORM = testProp(\r\n\t['transform', 'webkitTransform', 'OTransform', 'MozTransform', 'msTransform']);\r\n\r\n// webkitTransition comes first because some browser versions that drop vendor prefix don't do\r\n// the same for the transitionend event, in particular the Android 4.1 stock browser\r\n\r\n// @property TRANSITION: String\r\n// Vendor-prefixed transition style name.\r\nexport var TRANSITION = testProp(\r\n\t['webkitTransition', 'transition', 'OTransition', 'MozTransition', 'msTransition']);\r\n\r\n// @property TRANSITION_END: String\r\n// Vendor-prefixed transitionend event name.\r\nexport var TRANSITION_END =\r\n\tTRANSITION === 'webkitTransition' || TRANSITION === 'OTransition' ? TRANSITION + 'End' : 'transitionend';\r\n\r\n\r\n// @function get(id: String|HTMLElement): HTMLElement\r\n// Returns an element given its DOM id, or returns the element itself\r\n// if it was passed directly.\r\nexport function get(id) {\r\n\treturn typeof id === 'string' ? document.getElementById(id) : id;\r\n}\r\n\r\n// @function getStyle(el: HTMLElement, styleAttrib: String): String\r\n// Returns the value for a certain style attribute on an element,\r\n// including computed values or values set through CSS.\r\nexport function getStyle(el, style) {\r\n\tvar value = el.style[style] || (el.currentStyle && el.currentStyle[style]);\r\n\r\n\tif ((!value || value === 'auto') && document.defaultView) {\r\n\t\tvar css = document.defaultView.getComputedStyle(el, null);\r\n\t\tvalue = css ? css[style] : null;\r\n\t}\r\n\treturn value === 'auto' ? null : value;\r\n}\r\n\r\n// @function create(tagName: String, className?: String, container?: HTMLElement): HTMLElement\r\n// Creates an HTML element with `tagName`, sets its class to `className`, and optionally appends it to `container` element.\r\nexport function create(tagName, className, container) {\r\n\tvar el = document.createElement(tagName);\r\n\tel.className = className || '';\r\n\r\n\tif (container) {\r\n\t\tcontainer.appendChild(el);\r\n\t}\r\n\treturn el;\r\n}\r\n\r\n// @function remove(el: HTMLElement)\r\n// Removes `el` from its parent element\r\nexport function remove(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent) {\r\n\t\tparent.removeChild(el);\r\n\t}\r\n}\r\n\r\n// @function empty(el: HTMLElement)\r\n// Removes all of `el`'s children elements from `el`\r\nexport function empty(el) {\r\n\twhile (el.firstChild) {\r\n\t\tel.removeChild(el.firstChild);\r\n\t}\r\n}\r\n\r\n// @function toFront(el: HTMLElement)\r\n// Makes `el` the last child of its parent, so it renders in front of the other children.\r\nexport function toFront(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent && parent.lastChild !== el) {\r\n\t\tparent.appendChild(el);\r\n\t}\r\n}\r\n\r\n// @function toBack(el: HTMLElement)\r\n// Makes `el` the first child of its parent, so it renders behind the other children.\r\nexport function toBack(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent && parent.firstChild !== el) {\r\n\t\tparent.insertBefore(el, parent.firstChild);\r\n\t}\r\n}\r\n\r\n// @function hasClass(el: HTMLElement, name: String): Boolean\r\n// Returns `true` if the element's class attribute contains `name`.\r\nexport function hasClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\treturn el.classList.contains(name);\r\n\t}\r\n\tvar className = getClass(el);\r\n\treturn className.length > 0 && new RegExp('(^|\\\\s)' + name + '(\\\\s|$)').test(className);\r\n}\r\n\r\n// @function addClass(el: HTMLElement, name: String)\r\n// Adds `name` to the element's class attribute.\r\nexport function addClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\tvar classes = Util.splitWords(name);\r\n\t\tfor (var i = 0, len = classes.length; i < len; i++) {\r\n\t\t\tel.classList.add(classes[i]);\r\n\t\t}\r\n\t} else if (!hasClass(el, name)) {\r\n\t\tvar className = getClass(el);\r\n\t\tsetClass(el, (className ? className + ' ' : '') + name);\r\n\t}\r\n}\r\n\r\n// @function removeClass(el: HTMLElement, name: String)\r\n// Removes `name` from the element's class attribute.\r\nexport function removeClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\tel.classList.remove(name);\r\n\t} else {\r\n\t\tsetClass(el, Util.trim((' ' + getClass(el) + ' ').replace(' ' + name + ' ', ' ')));\r\n\t}\r\n}\r\n\r\n// @function setClass(el: HTMLElement, name: String)\r\n// Sets the element's class.\r\nexport function setClass(el, name) {\r\n\tif (el.className.baseVal === undefined) {\r\n\t\tel.className = name;\r\n\t} else {\r\n\t\t// in case of SVG element\r\n\t\tel.className.baseVal = name;\r\n\t}\r\n}\r\n\r\n// @function getClass(el: HTMLElement): String\r\n// Returns the element's class.\r\nexport function getClass(el) {\r\n\t// Check if the element is an SVGElementInstance and use the correspondingElement instead\r\n\t// (Required for linked SVG elements in IE11.)\r\n\tif (el.correspondingElement) {\r\n\t\tel = el.correspondingElement;\r\n\t}\r\n\treturn el.className.baseVal === undefined ? el.className : el.className.baseVal;\r\n}\r\n\r\n// @function setOpacity(el: HTMLElement, opacity: Number)\r\n// Set the opacity of an element (including old IE support).\r\n// `opacity` must be a number from `0` to `1`.\r\nexport function setOpacity(el, value) {\r\n\tif ('opacity' in el.style) {\r\n\t\tel.style.opacity = value;\r\n\t} else if ('filter' in el.style) {\r\n\t\t_setOpacityIE(el, value);\r\n\t}\r\n}\r\n\r\nfunction _setOpacityIE(el, value) {\r\n\tvar filter = false,\r\n\t    filterName = 'DXImageTransform.Microsoft.Alpha';\r\n\r\n\t// filters collection throws an error if we try to retrieve a filter that doesn't exist\r\n\ttry {\r\n\t\tfilter = el.filters.item(filterName);\r\n\t} catch (e) {\r\n\t\t// don't set opacity to 1 if we haven't already set an opacity,\r\n\t\t// it isn't needed and breaks transparent pngs.\r\n\t\tif (value === 1) { return; }\r\n\t}\r\n\r\n\tvalue = Math.round(value * 100);\r\n\r\n\tif (filter) {\r\n\t\tfilter.Enabled = (value !== 100);\r\n\t\tfilter.Opacity = value;\r\n\t} else {\r\n\t\tel.style.filter += ' progid:' + filterName + '(opacity=' + value + ')';\r\n\t}\r\n}\r\n\r\n// @function testProp(props: String[]): String|false\r\n// Goes through the array of style names and returns the first name\r\n// that is a valid style name for an element. If no such name is found,\r\n// it returns false. Useful for vendor-prefixed styles like `transform`.\r\nexport function testProp(props) {\r\n\tvar style = document.documentElement.style;\r\n\r\n\tfor (var i = 0; i < props.length; i++) {\r\n\t\tif (props[i] in style) {\r\n\t\t\treturn props[i];\r\n\t\t}\r\n\t}\r\n\treturn false;\r\n}\r\n\r\n// @function setTransform(el: HTMLElement, offset: Point, scale?: Number)\r\n// Resets the 3D CSS transform of `el` so it is translated by `offset` pixels\r\n// and optionally scaled by `scale`. Does not have an effect if the\r\n// browser doesn't support 3D CSS transforms.\r\nexport function setTransform(el, offset, scale) {\r\n\tvar pos = offset || new Point(0, 0);\r\n\r\n\tel.style[TRANSFORM] =\r\n\t\t(Browser.ie3d ?\r\n\t\t\t'translate(' + pos.x + 'px,' + pos.y + 'px)' :\r\n\t\t\t'translate3d(' + pos.x + 'px,' + pos.y + 'px,0)') +\r\n\t\t(scale ? ' scale(' + scale + ')' : '');\r\n}\r\n\r\n// @function setPosition(el: HTMLElement, position: Point)\r\n// Sets the position of `el` to coordinates specified by `position`,\r\n// using CSS translate or top/left positioning depending on the browser\r\n// (used by Leaflet internally to position its layers).\r\nexport function setPosition(el, point) {\r\n\r\n\t/*eslint-disable */\r\n\tel._leaflet_pos = point;\r\n\t/* eslint-enable */\r\n\r\n\tif (Browser.any3d) {\r\n\t\tsetTransform(el, point);\r\n\t} else {\r\n\t\tel.style.left = point.x + 'px';\r\n\t\tel.style.top = point.y + 'px';\r\n\t}\r\n}\r\n\r\n// @function getPosition(el: HTMLElement): Point\r\n// Returns the coordinates of an element previously positioned with setPosition.\r\nexport function getPosition(el) {\r\n\t// this method is only used for elements previously positioned using setPosition,\r\n\t// so it's safe to cache the position for performance\r\n\r\n\treturn el._leaflet_pos || new Point(0, 0);\r\n}\r\n\r\n// @function disableTextSelection()\r\n// Prevents the user from generating `selectstart` DOM events, usually generated\r\n// when the user drags the mouse through a page with text. Used internally\r\n// by Leaflet to override the behaviour of any click-and-drag interaction on\r\n// the map. Affects drag interactions on the whole document.\r\n\r\n// @function enableTextSelection()\r\n// Cancels the effects of a previous [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection).\r\nexport var disableTextSelection;\r\nexport var enableTextSelection;\r\nvar _userSelect;\r\nif ('onselectstart' in document) {\r\n\tdisableTextSelection = function () {\r\n\t\tDomEvent.on(window, 'selectstart', DomEvent.preventDefault);\r\n\t};\r\n\tenableTextSelection = function () {\r\n\t\tDomEvent.off(window, 'selectstart', DomEvent.preventDefault);\r\n\t};\r\n} else {\r\n\tvar userSelectProperty = testProp(\r\n\t\t['userSelect', 'WebkitUserSelect', 'OUserSelect', 'MozUserSelect', 'msUserSelect']);\r\n\r\n\tdisableTextSelection = function () {\r\n\t\tif (userSelectProperty) {\r\n\t\t\tvar style = document.documentElement.style;\r\n\t\t\t_userSelect = style[userSelectProperty];\r\n\t\t\tstyle[userSelectProperty] = 'none';\r\n\t\t}\r\n\t};\r\n\tenableTextSelection = function () {\r\n\t\tif (userSelectProperty) {\r\n\t\t\tdocument.documentElement.style[userSelectProperty] = _userSelect;\r\n\t\t\t_userSelect = undefined;\r\n\t\t}\r\n\t};\r\n}\r\n\r\n// @function disableImageDrag()\r\n// As [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection), but\r\n// for `dragstart` DOM events, usually generated when the user drags an image.\r\nexport function disableImageDrag() {\r\n\tDomEvent.on(window, 'dragstart', DomEvent.preventDefault);\r\n}\r\n\r\n// @function enableImageDrag()\r\n// Cancels the effects of a previous [`L.DomUtil.disableImageDrag`](#domutil-disabletextselection).\r\nexport function enableImageDrag() {\r\n\tDomEvent.off(window, 'dragstart', DomEvent.preventDefault);\r\n}\r\n\r\nvar _outlineElement, _outlineStyle;\r\n// @function preventOutline(el: HTMLElement)\r\n// Makes the [outline](https://developer.mozilla.org/docs/Web/CSS/outline)\r\n// of the element `el` invisible. Used internally by Leaflet to prevent\r\n// focusable elements from displaying an outline when the user performs a\r\n// drag interaction on them.\r\nexport function preventOutline(element) {\r\n\twhile (element.tabIndex === -1) {\r\n\t\telement = element.parentNode;\r\n\t}\r\n\tif (!element.style) { return; }\r\n\trestoreOutline();\r\n\t_outlineElement = element;\r\n\t_outlineStyle = element.style.outlineStyle;\r\n\telement.style.outlineStyle = 'none';\r\n\tDomEvent.on(window, 'keydown', restoreOutline);\r\n}\r\n\r\n// @function restoreOutline()\r\n// Cancels the effects of a previous [`L.DomUtil.preventOutline`]().\r\nexport function restoreOutline() {\r\n\tif (!_outlineElement) { return; }\r\n\t_outlineElement.style.outlineStyle = _outlineStyle;\r\n\t_outlineElement = undefined;\r\n\t_outlineStyle = undefined;\r\n\tDomEvent.off(window, 'keydown', restoreOutline);\r\n}\r\n\r\n// @function getSizedParentNode(el: HTMLElement): HTMLElement\r\n// Finds the closest parent node which size (width and height) is not null.\r\nexport function getSizedParentNode(element) {\r\n\tdo {\r\n\t\telement = element.parentNode;\r\n\t} while ((!element.offsetWidth || !element.offsetHeight) && element !== document.body);\r\n\treturn element;\r\n}\r\n\r\n// @function getScale(el: HTMLElement): Object\r\n// Computes the CSS scale currently applied on the element.\r\n// Returns an object with `x` and `y` members as horizontal and vertical scales respectively,\r\n// and `boundingClientRect` as the result of [`getBoundingClientRect()`](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect).\r\nexport function getScale(element) {\r\n\tvar rect = element.getBoundingClientRect(); // Read-only in old browsers.\r\n\r\n\treturn {\r\n\t\tx: rect.width / element.offsetWidth || 1,\r\n\t\ty: rect.height / element.offsetHeight || 1,\r\n\t\tboundingClientRect: rect\r\n\t};\r\n}\r\n", "import {Point} from '../geometry/Point';\r\nimport * as Util from '../core/Util';\r\nimport Browser from '../core/Browser';\r\nimport {addPointerListener, removePointerListener} from './DomEvent.Pointer';\r\nimport {addDoubleTapListener, removeDoubleTapListener} from './DomEvent.DoubleTap';\r\nimport {getScale} from './DomUtil';\r\n\r\n/*\r\n * @namespace DomEvent\r\n * Utility functions to work with the [DOM events](https://developer.mozilla.org/docs/Web/API/Event), used by Leaflet internally.\r\n */\r\n\r\n// Inspired by John Resig, Dean Edwards and YUI addEvent implementations.\r\n\r\n// @function on(el: HTMLElement, types: String, fn: Function, context?: Object): this\r\n// Adds a listener function (`fn`) to a particular DOM event type of the\r\n// element `el`. You can optionally specify the context of the listener\r\n// (object the `this` keyword will point to). You can also pass several\r\n// space-separated types (e.g. `'click dblclick'`).\r\n\r\n// @alternative\r\n// @function on(el: HTMLElement, eventMap: Object, context?: Object): this\r\n// Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\nexport function on(obj, types, fn, context) {\r\n\r\n\tif (types && typeof types === 'object') {\r\n\t\tfor (var type in types) {\r\n\t\t\taddOne(obj, type, types[type], fn);\r\n\t\t}\r\n\t} else {\r\n\t\ttypes = Util.splitWords(types);\r\n\r\n\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\taddOne(obj, types[i], fn, context);\r\n\t\t}\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n\r\nvar eventsKey = '_leaflet_events';\r\n\r\n// @function off(el: HTMLElement, types: String, fn: Function, context?: Object): this\r\n// Removes a previously added listener function.\r\n// Note that if you passed a custom context to on, you must pass the same\r\n// context to `off` in order to remove the listener.\r\n\r\n// @alternative\r\n// @function off(el: HTMLElement, eventMap: Object, context?: Object): this\r\n// Removes a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\n\r\n// @alternative\r\n// @function off(el: HTMLElement, types: String): this\r\n// Removes all previously added listeners of given types.\r\n\r\n// @alternative\r\n// @function off(el: HTMLElement): this\r\n// Removes all previously added listeners from given HTMLElement\r\nexport function off(obj, types, fn, context) {\r\n\r\n\tif (arguments.length === 1) {\r\n\t\tbatchRemove(obj);\r\n\t\tdelete obj[eventsKey];\r\n\r\n\t} else if (types && typeof types === 'object') {\r\n\t\tfor (var type in types) {\r\n\t\t\tremoveOne(obj, type, types[type], fn);\r\n\t\t}\r\n\r\n\t} else {\r\n\t\ttypes = Util.splitWords(types);\r\n\r\n\t\tif (arguments.length === 2) {\r\n\t\t\tbatchRemove(obj, function (type) {\r\n\t\t\t\treturn Util.indexOf(types, type) !== -1;\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tremoveOne(obj, types[i], fn, context);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n\r\nfunction batchRemove(obj, filterFn) {\r\n\tfor (var id in obj[eventsKey]) {\r\n\t\tvar type = id.split(/\\d/)[0];\r\n\t\tif (!filterFn || filterFn(type)) {\r\n\t\t\tremoveOne(obj, type, null, null, id);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nvar mouseSubst = {\r\n\tmouseenter: 'mouseover',\r\n\tmouseleave: 'mouseout',\r\n\twheel: !('onwheel' in window) && 'mousewheel'\r\n};\r\n\r\nfunction addOne(obj, type, fn, context) {\r\n\tvar id = type + Util.stamp(fn) + (context ? '_' + Util.stamp(context) : '');\r\n\r\n\tif (obj[eventsKey] && obj[eventsKey][id]) { return this; }\r\n\r\n\tvar handler = function (e) {\r\n\t\treturn fn.call(context || obj, e || window.event);\r\n\t};\r\n\r\n\tvar originalHandler = handler;\r\n\r\n\tif (!Browser.touchNative && Browser.pointer && type.indexOf('touch') === 0) {\r\n\t\t// Needs DomEvent.Pointer.js\r\n\t\thandler = addPointerListener(obj, type, handler);\r\n\r\n\t} else if (Browser.touch && (type === 'dblclick')) {\r\n\t\thandler = addDoubleTapListener(obj, handler);\r\n\r\n\t} else if ('addEventListener' in obj) {\r\n\r\n\t\tif (type === 'touchstart' || type === 'touchmove' || type === 'wheel' ||  type === 'mousewheel') {\r\n\t\t\tobj.addEventListener(mouseSubst[type] || type, handler, Browser.passiveEvents ? {passive: false} : false);\r\n\r\n\t\t} else if (type === 'mouseenter' || type === 'mouseleave') {\r\n\t\t\thandler = function (e) {\r\n\t\t\t\te = e || window.event;\r\n\t\t\t\tif (isExternalTarget(obj, e)) {\r\n\t\t\t\t\toriginalHandler(e);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tobj.addEventListener(mouseSubst[type], handler, false);\r\n\r\n\t\t} else {\r\n\t\t\tobj.addEventListener(type, originalHandler, false);\r\n\t\t}\r\n\r\n\t} else {\r\n\t\tobj.attachEvent('on' + type, handler);\r\n\t}\r\n\r\n\tobj[eventsKey] = obj[eventsKey] || {};\r\n\tobj[eventsKey][id] = handler;\r\n}\r\n\r\nfunction removeOne(obj, type, fn, context, id) {\r\n\tid = id || type + Util.stamp(fn) + (context ? '_' + Util.stamp(context) : '');\r\n\tvar handler = obj[eventsKey] && obj[eventsKey][id];\r\n\r\n\tif (!handler) { return this; }\r\n\r\n\tif (!Browser.touchNative && Browser.pointer && type.indexOf('touch') === 0) {\r\n\t\tremovePointerListener(obj, type, handler);\r\n\r\n\t} else if (Browser.touch && (type === 'dblclick')) {\r\n\t\tremoveDoubleTapListener(obj, handler);\r\n\r\n\t} else if ('removeEventListener' in obj) {\r\n\r\n\t\tobj.removeEventListener(mouseSubst[type] || type, handler, false);\r\n\r\n\t} else {\r\n\t\tobj.detachEvent('on' + type, handler);\r\n\t}\r\n\r\n\tobj[eventsKey][id] = null;\r\n}\r\n\r\n// @function stopPropagation(ev: DOMEvent): this\r\n// Stop the given event from propagation to parent elements. Used inside the listener functions:\r\n// ```js\r\n// L.DomEvent.on(div, 'click', function (ev) {\r\n// \tL.DomEvent.stopPropagation(ev);\r\n// });\r\n// ```\r\nexport function stopPropagation(e) {\r\n\r\n\tif (e.stopPropagation) {\r\n\t\te.stopPropagation();\r\n\t} else if (e.originalEvent) {  // In case of Leaflet event.\r\n\t\te.originalEvent._stopped = true;\r\n\t} else {\r\n\t\te.cancelBubble = true;\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n\r\n// @function disableScrollPropagation(el: HTMLElement): this\r\n// Adds `stopPropagation` to the element's `'wheel'` events (plus browser variants).\r\nexport function disableScrollPropagation(el) {\r\n\taddOne(el, 'wheel', stopPropagation);\r\n\treturn this;\r\n}\r\n\r\n// @function disableClickPropagation(el: HTMLElement): this\r\n// Adds `stopPropagation` to the element's `'click'`, `'dblclick'`, `'contextmenu'`,\r\n// `'mousedown'` and `'touchstart'` events (plus browser variants).\r\nexport function disableClickPropagation(el) {\r\n\ton(el, 'mousedown touchstart dblclick contextmenu', stopPropagation);\r\n\tel['_leaflet_disable_click'] = true;\r\n\treturn this;\r\n}\r\n\r\n// @function preventDefault(ev: DOMEvent): this\r\n// Prevents the default action of the DOM Event `ev` from happening (such as\r\n// following a link in the href of the a element, or doing a POST request\r\n// with page reload when a `<form>` is submitted).\r\n// Use it inside listener functions.\r\nexport function preventDefault(e) {\r\n\tif (e.preventDefault) {\r\n\t\te.preventDefault();\r\n\t} else {\r\n\t\te.returnValue = false;\r\n\t}\r\n\treturn this;\r\n}\r\n\r\n// @function stop(ev: DOMEvent): this\r\n// Does `stopPropagation` and `preventDefault` at the same time.\r\nexport function stop(e) {\r\n\tpreventDefault(e);\r\n\tstopPropagation(e);\r\n\treturn this;\r\n}\r\n\r\n// @function getPropagationPath(ev: DOMEvent): Array\r\n// Compatibility polyfill for [`Event.composedPath()`](https://developer.mozilla.org/en-US/docs/Web/API/Event/composedPath).\r\n// Returns an array containing the `HTMLElement`s that the given DOM event\r\n// should propagate to (if not stopped).\r\nexport function getPropagationPath(ev) {\r\n\tif (ev.composedPath) {\r\n\t\treturn ev.composedPath();\r\n\t}\r\n\r\n\tvar path = [];\r\n\tvar el = ev.target;\r\n\r\n\twhile (el) {\r\n\t\tpath.push(el);\r\n\t\tel = el.parentNode;\r\n\t}\r\n\treturn path;\r\n}\r\n\r\n\r\n// @function getMousePosition(ev: DOMEvent, container?: HTMLElement): Point\r\n// Gets normalized mouse position from a DOM event relative to the\r\n// `container` (border excluded) or to the whole page if not specified.\r\nexport function getMousePosition(e, container) {\r\n\tif (!container) {\r\n\t\treturn new Point(e.clientX, e.clientY);\r\n\t}\r\n\r\n\tvar scale = getScale(container),\r\n\t    offset = scale.boundingClientRect; // left and top  values are in page scale (like the event clientX/Y)\r\n\r\n\treturn new Point(\r\n\t\t// offset.left/top values are in page scale (like clientX/Y),\r\n\t\t// whereas clientLeft/Top (border width) values are the original values (before CSS scale applies).\r\n\t\t(e.clientX - offset.left) / scale.x - container.clientLeft,\r\n\t\t(e.clientY - offset.top) / scale.y - container.clientTop\r\n\t);\r\n}\r\n\r\n\r\n//  except , Safari and\r\n// We need double the scroll pixels (see #7403 and #4538) for all Browsers\r\n// except OSX (Mac) -> 3x, Chrome running on Linux 1x\r\n\r\nvar wheelPxFactor =\r\n\t(Browser.linux && Browser.chrome) ? window.devicePixelRatio :\r\n\tBrowser.mac ? window.devicePixelRatio * 3 :\r\n\twindow.devicePixelRatio > 0 ? 2 * window.devicePixelRatio : 1;\r\n// @function getWheelDelta(ev: DOMEvent): Number\r\n// Gets normalized wheel delta from a wheel DOM event, in vertical\r\n// pixels scrolled (negative if scrolling down).\r\n// Events from pointing devices without precise scrolling are mapped to\r\n// a best guess of 60 pixels.\r\nexport function getWheelDelta(e) {\r\n\treturn (Browser.edge) ? e.wheelDeltaY / 2 : // Don't trust window-geometry-based delta\r\n\t       (e.deltaY && e.deltaMode === 0) ? -e.deltaY / wheelPxFactor : // Pixels\r\n\t       (e.deltaY && e.deltaMode === 1) ? -e.deltaY * 20 : // Lines\r\n\t       (e.deltaY && e.deltaMode === 2) ? -e.deltaY * 60 : // Pages\r\n\t       (e.deltaX || e.deltaZ) ? 0 :\t// Skip horizontal/depth wheel events\r\n\t       e.wheelDelta ? (e.wheelDeltaY || e.wheelDelta) / 2 : // Legacy IE pixels\r\n\t       (e.detail && Math.abs(e.detail) < 32765) ? -e.detail * 20 : // Legacy Moz lines\r\n\t       e.detail ? e.detail / -32765 * 60 : // Legacy Moz pages\r\n\t       0;\r\n}\r\n\r\n// check if element really left/entered the event target (for mouseenter/mouseleave)\r\nexport function isExternalTarget(el, e) {\r\n\r\n\tvar related = e.relatedTarget;\r\n\r\n\tif (!related) { return true; }\r\n\r\n\ttry {\r\n\t\twhile (related && (related !== el)) {\r\n\t\t\trelated = related.parentNode;\r\n\t\t}\r\n\t} catch (err) {\r\n\t\treturn false;\r\n\t}\r\n\treturn (related !== el);\r\n}\r\n\r\n// @function addListener(…): this\r\n// Alias to [`L.DomEvent.on`](#domevent-on)\r\nexport {on as addListener};\r\n\r\n// @function removeListener(…): this\r\n// Alias to [`L.DomEvent.off`](#domevent-off)\r\nexport {off as removeListener};\r\n", "import * as Util from '../core/Util';\nimport {Evented} from '../core/Events';\nimport * as DomUtil from '../dom/DomUtil';\n\n\n/*\n * @class PosAnimation\n * @aka L.PosAnimation\n * @inherits Evented\n * Used internally for panning animations, utilizing CSS3 Transitions for modern browsers and a timer fallback for IE6-9.\n *\n * @example\n * ```js\n * var myPositionMarker = L.marker([48.864716, 2.294694]).addTo(map);\n *\n * myPositionMarker.on(\"click\", function() {\n * \tvar pos = map.latLngToLayerPoint(myPositionMarker.getLatLng());\n * \tpos.y -= 25;\n * \tvar fx = new L.PosAnimation();\n *\n * \tfx.once('end',function() {\n * \t\tpos.y += 25;\n * \t\tfx.run(myPositionMarker._icon, pos, 0.8);\n * \t});\n *\n * \tfx.run(myPositionMarker._icon, pos, 0.3);\n * });\n *\n * ```\n *\n * @constructor L.PosAnimation()\n * Creates a `PosAnimation` object.\n *\n */\n\nexport var PosAnimation = Evented.extend({\n\n\t// @method run(el: HTMLElement, newPos: Point, duration?: Number, easeLinearity?: Number)\n\t// Run an animation of a given element to a new position, optionally setting\n\t// duration in seconds (`0.25` by default) and easing linearity factor (3rd\n\t// argument of the [cubic bezier curve](https://cubic-bezier.com/#0,0,.5,1),\n\t// `0.5` by default).\n\trun: function (el, newPos, duration, easeLinearity) {\n\t\tthis.stop();\n\n\t\tthis._el = el;\n\t\tthis._inProgress = true;\n\t\tthis._duration = duration || 0.25;\n\t\tthis._easeOutPower = 1 / Math.max(easeLinearity || 0.5, 0.2);\n\n\t\tthis._startPos = DomUtil.getPosition(el);\n\t\tthis._offset = newPos.subtract(this._startPos);\n\t\tthis._startTime = +new Date();\n\n\t\t// @event start: Event\n\t\t// Fired when the animation starts\n\t\tthis.fire('start');\n\n\t\tthis._animate();\n\t},\n\n\t// @method stop()\n\t// Stops the animation (if currently running).\n\tstop: function () {\n\t\tif (!this._inProgress) { return; }\n\n\t\tthis._step(true);\n\t\tthis._complete();\n\t},\n\n\t_animate: function () {\n\t\t// animation loop\n\t\tthis._animId = Util.requestAnimFrame(this._animate, this);\n\t\tthis._step();\n\t},\n\n\t_step: function (round) {\n\t\tvar elapsed = (+new Date()) - this._startTime,\n\t\t    duration = this._duration * 1000;\n\n\t\tif (elapsed < duration) {\n\t\t\tthis._runFrame(this._easeOut(elapsed / duration), round);\n\t\t} else {\n\t\t\tthis._runFrame(1);\n\t\t\tthis._complete();\n\t\t}\n\t},\n\n\t_runFrame: function (progress, round) {\n\t\tvar pos = this._startPos.add(this._offset.multiplyBy(progress));\n\t\tif (round) {\n\t\t\tpos._round();\n\t\t}\n\t\tDomUtil.setPosition(this._el, pos);\n\n\t\t// @event step: Event\n\t\t// Fired continuously during the animation.\n\t\tthis.fire('step');\n\t},\n\n\t_complete: function () {\n\t\tUtil.cancelAnimFrame(this._animId);\n\n\t\tthis._inProgress = false;\n\t\t// @event end: Event\n\t\t// Fired when the animation ends.\n\t\tthis.fire('end');\n\t},\n\n\t_easeOut: function (t) {\n\t\treturn 1 - Math.pow(1 - t, this._easeOutPower);\n\t}\n});\n", "import * as Util from '../core/Util';\r\nimport {Evented} from '../core/Events';\r\nimport {EPSG3857} from '../geo/crs/CRS.EPSG3857';\r\nimport {Point, toPoint} from '../geometry/Point';\r\nimport {Bounds, toBounds} from '../geometry/Bounds';\r\nimport {LatLng, toLatLng} from '../geo/LatLng';\r\nimport {LatLngBounds, toLatLngBounds} from '../geo/LatLngBounds';\r\nimport Browser from '../core/Browser';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport {PosAnimation} from '../dom/PosAnimation';\r\n\r\n/*\r\n * @class Map\r\n * @aka L.Map\r\n * @inherits Evented\r\n *\r\n * The central class of the API — it is used to create a map on a page and manipulate it.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * // initialize the map on the \"map\" div with a given center and zoom\r\n * var map = L.map('map', {\r\n * \tcenter: [51.505, -0.09],\r\n * \tzoom: 13\r\n * });\r\n * ```\r\n *\r\n */\r\n\r\nexport var Map = Evented.extend({\r\n\r\n\toptions: {\r\n\t\t// @section Map State Options\r\n\t\t// @option crs: CRS = L.CRS.EPSG3857\r\n\t\t// The [Coordinate Reference System](#crs) to use. Don't change this if you're not\r\n\t\t// sure what it means.\r\n\t\tcrs: EPSG3857,\r\n\r\n\t\t// @option center: LatLng = undefined\r\n\t\t// Initial geographic center of the map\r\n\t\tcenter: undefined,\r\n\r\n\t\t// @option zoom: Number = undefined\r\n\t\t// Initial map zoom level\r\n\t\tzoom: undefined,\r\n\r\n\t\t// @option minZoom: Number = *\r\n\t\t// Minimum zoom level of the map.\r\n\t\t// If not specified and at least one `GridLayer` or `TileLayer` is in the map,\r\n\t\t// the lowest of their `minZoom` options will be used instead.\r\n\t\tminZoom: undefined,\r\n\r\n\t\t// @option maxZoom: Number = *\r\n\t\t// Maximum zoom level of the map.\r\n\t\t// If not specified and at least one `GridLayer` or `TileLayer` is in the map,\r\n\t\t// the highest of their `maxZoom` options will be used instead.\r\n\t\tmaxZoom: undefined,\r\n\r\n\t\t// @option layers: Layer[] = []\r\n\t\t// Array of layers that will be added to the map initially\r\n\t\tlayers: [],\r\n\r\n\t\t// @option maxBounds: LatLngBounds = null\r\n\t\t// When this option is set, the map restricts the view to the given\r\n\t\t// geographical bounds, bouncing the user back if the user tries to pan\r\n\t\t// outside the view. To set the restriction dynamically, use\r\n\t\t// [`setMaxBounds`](#map-setmaxbounds) method.\r\n\t\tmaxBounds: undefined,\r\n\r\n\t\t// @option renderer: Renderer = *\r\n\t\t// The default method for drawing vector layers on the map. `L.SVG`\r\n\t\t// or `L.Canvas` by default depending on browser support.\r\n\t\trenderer: undefined,\r\n\r\n\r\n\t\t// @section Animation Options\r\n\t\t// @option zoomAnimation: Boolean = true\r\n\t\t// Whether the map zoom animation is enabled. By default it's enabled\r\n\t\t// in all browsers that support CSS3 Transitions except Android.\r\n\t\tzoomAnimation: true,\r\n\r\n\t\t// @option zoomAnimationThreshold: Number = 4\r\n\t\t// Won't animate zoom if the zoom difference exceeds this value.\r\n\t\tzoomAnimationThreshold: 4,\r\n\r\n\t\t// @option fadeAnimation: Boolean = true\r\n\t\t// Whether the tile fade animation is enabled. By default it's enabled\r\n\t\t// in all browsers that support CSS3 Transitions except Android.\r\n\t\tfadeAnimation: true,\r\n\r\n\t\t// @option markerZoomAnimation: Boolean = true\r\n\t\t// Whether markers animate their zoom with the zoom animation, if disabled\r\n\t\t// they will disappear for the length of the animation. By default it's\r\n\t\t// enabled in all browsers that support CSS3 Transitions except Android.\r\n\t\tmarkerZoomAnimation: true,\r\n\r\n\t\t// @option transform3DLimit: Number = 2^23\r\n\t\t// Defines the maximum size of a CSS translation transform. The default\r\n\t\t// value should not be changed unless a web browser positions layers in\r\n\t\t// the wrong place after doing a large `panBy`.\r\n\t\ttransform3DLimit: 8388608, // Precision limit of a 32-bit float\r\n\r\n\t\t// @section Interaction Options\r\n\t\t// @option zoomSnap: Number = 1\r\n\t\t// Forces the map's zoom level to always be a multiple of this, particularly\r\n\t\t// right after a [`fitBounds()`](#map-fitbounds) or a pinch-zoom.\r\n\t\t// By default, the zoom level snaps to the nearest integer; lower values\r\n\t\t// (e.g. `0.5` or `0.1`) allow for greater granularity. A value of `0`\r\n\t\t// means the zoom level will not be snapped after `fitBounds` or a pinch-zoom.\r\n\t\tzoomSnap: 1,\r\n\r\n\t\t// @option zoomDelta: Number = 1\r\n\t\t// Controls how much the map's zoom level will change after a\r\n\t\t// [`zoomIn()`](#map-zoomin), [`zoomOut()`](#map-zoomout), pressing `+`\r\n\t\t// or `-` on the keyboard, or using the [zoom controls](#control-zoom).\r\n\t\t// Values smaller than `1` (e.g. `0.5`) allow for greater granularity.\r\n\t\tzoomDelta: 1,\r\n\r\n\t\t// @option trackResize: Boolean = true\r\n\t\t// Whether the map automatically handles browser window resize to update itself.\r\n\t\ttrackResize: true\r\n\t},\r\n\r\n\tinitialize: function (id, options) { // (HTMLElement or String, Object)\r\n\t\toptions = Util.setOptions(this, options);\r\n\r\n\t\t// Make sure to assign internal flags at the beginning,\r\n\t\t// to avoid inconsistent state in some edge cases.\r\n\t\tthis._handlers = [];\r\n\t\tthis._layers = {};\r\n\t\tthis._zoomBoundLayers = {};\r\n\t\tthis._sizeChanged = true;\r\n\r\n\t\tthis._initContainer(id);\r\n\t\tthis._initLayout();\r\n\r\n\t\t// hack for https://github.com/Leaflet/Leaflet/issues/1980\r\n\t\tthis._onResize = Util.bind(this._onResize, this);\r\n\r\n\t\tthis._initEvents();\r\n\r\n\t\tif (options.maxBounds) {\r\n\t\t\tthis.setMaxBounds(options.maxBounds);\r\n\t\t}\r\n\r\n\t\tif (options.zoom !== undefined) {\r\n\t\t\tthis._zoom = this._limitZoom(options.zoom);\r\n\t\t}\r\n\r\n\t\tif (options.center && options.zoom !== undefined) {\r\n\t\t\tthis.setView(toLatLng(options.center), options.zoom, {reset: true});\r\n\t\t}\r\n\r\n\t\tthis.callInitHooks();\r\n\r\n\t\t// don't animate on browsers without hardware-accelerated transitions or old Android/Opera\r\n\t\tthis._zoomAnimated = DomUtil.TRANSITION && Browser.any3d && !Browser.mobileOpera &&\r\n\t\t\t\tthis.options.zoomAnimation;\r\n\r\n\t\t// zoom transitions run with the same duration for all layers, so if one of transitionend events\r\n\t\t// happens after starting zoom animation (propagating to the map pane), we know that it ended globally\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tthis._createAnimProxy();\r\n\t\t\tDomEvent.on(this._proxy, DomUtil.TRANSITION_END, this._catchTransitionEnd, this);\r\n\t\t}\r\n\r\n\t\tthis._addLayers(this.options.layers);\r\n\t},\r\n\r\n\r\n\t// @section Methods for modifying map state\r\n\r\n\t// @method setView(center: LatLng, zoom: Number, options?: Zoom/pan options): this\r\n\t// Sets the view of the map (geographical center and zoom) with the given\r\n\t// animation options.\r\n\tsetView: function (center, zoom, options) {\r\n\r\n\t\tzoom = zoom === undefined ? this._zoom : this._limitZoom(zoom);\r\n\t\tcenter = this._limitCenter(toLatLng(center), zoom, this.options.maxBounds);\r\n\t\toptions = options || {};\r\n\r\n\t\tthis._stop();\r\n\r\n\t\tif (this._loaded && !options.reset && options !== true) {\r\n\r\n\t\t\tif (options.animate !== undefined) {\r\n\t\t\t\toptions.zoom = Util.extend({animate: options.animate}, options.zoom);\r\n\t\t\t\toptions.pan = Util.extend({animate: options.animate, duration: options.duration}, options.pan);\r\n\t\t\t}\r\n\r\n\t\t\t// try animating pan or zoom\r\n\t\t\tvar moved = (this._zoom !== zoom) ?\r\n\t\t\t\tthis._tryAnimatedZoom && this._tryAnimatedZoom(center, zoom, options.zoom) :\r\n\t\t\t\tthis._tryAnimatedPan(center, options.pan);\r\n\r\n\t\t\tif (moved) {\r\n\t\t\t\t// prevent resize handler call, the view will refresh after animation anyway\r\n\t\t\t\tclearTimeout(this._sizeTimer);\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// animation didn't start, just reset the map view\r\n\t\tthis._resetView(center, zoom, options.pan && options.pan.noMoveStart);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setZoom(zoom: Number, options?: Zoom/pan options): this\r\n\t// Sets the zoom of the map.\r\n\tsetZoom: function (zoom, options) {\r\n\t\tif (!this._loaded) {\r\n\t\t\tthis._zoom = zoom;\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\treturn this.setView(this.getCenter(), zoom, {zoom: options});\r\n\t},\r\n\r\n\t// @method zoomIn(delta?: Number, options?: Zoom options): this\r\n\t// Increases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).\r\n\tzoomIn: function (delta, options) {\r\n\t\tdelta = delta || (Browser.any3d ? this.options.zoomDelta : 1);\r\n\t\treturn this.setZoom(this._zoom + delta, options);\r\n\t},\r\n\r\n\t// @method zoomOut(delta?: Number, options?: Zoom options): this\r\n\t// Decreases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).\r\n\tzoomOut: function (delta, options) {\r\n\t\tdelta = delta || (Browser.any3d ? this.options.zoomDelta : 1);\r\n\t\treturn this.setZoom(this._zoom - delta, options);\r\n\t},\r\n\r\n\t// @method setZoomAround(latlng: LatLng, zoom: Number, options: Zoom options): this\r\n\t// Zooms the map while keeping a specified geographical point on the map\r\n\t// stationary (e.g. used internally for scroll zoom and double-click zoom).\r\n\t// @alternative\r\n\t// @method setZoomAround(offset: Point, zoom: Number, options: Zoom options): this\r\n\t// Zooms the map while keeping a specified pixel on the map (relative to the top-left corner) stationary.\r\n\tsetZoomAround: function (latlng, zoom, options) {\r\n\t\tvar scale = this.getZoomScale(zoom),\r\n\t\t    viewHalf = this.getSize().divideBy(2),\r\n\t\t    containerPoint = latlng instanceof Point ? latlng : this.latLngToContainerPoint(latlng),\r\n\r\n\t\t    centerOffset = containerPoint.subtract(viewHalf).multiplyBy(1 - 1 / scale),\r\n\t\t    newCenter = this.containerPointToLatLng(viewHalf.add(centerOffset));\r\n\r\n\t\treturn this.setView(newCenter, zoom, {zoom: options});\r\n\t},\r\n\r\n\t_getBoundsCenterZoom: function (bounds, options) {\r\n\r\n\t\toptions = options || {};\r\n\t\tbounds = bounds.getBounds ? bounds.getBounds() : toLatLngBounds(bounds);\r\n\r\n\t\tvar paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),\r\n\t\t    paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),\r\n\r\n\t\t    zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR));\r\n\r\n\t\tzoom = (typeof options.maxZoom === 'number') ? Math.min(options.maxZoom, zoom) : zoom;\r\n\r\n\t\tif (zoom === Infinity) {\r\n\t\t\treturn {\r\n\t\t\t\tcenter: bounds.getCenter(),\r\n\t\t\t\tzoom: zoom\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tvar paddingOffset = paddingBR.subtract(paddingTL).divideBy(2),\r\n\r\n\t\t    swPoint = this.project(bounds.getSouthWest(), zoom),\r\n\t\t    nePoint = this.project(bounds.getNorthEast(), zoom),\r\n\t\t    center = this.unproject(swPoint.add(nePoint).divideBy(2).add(paddingOffset), zoom);\r\n\r\n\t\treturn {\r\n\t\t\tcenter: center,\r\n\t\t\tzoom: zoom\r\n\t\t};\r\n\t},\r\n\r\n\t// @method fitBounds(bounds: LatLngBounds, options?: fitBounds options): this\r\n\t// Sets a map view that contains the given geographical bounds with the\r\n\t// maximum zoom level possible.\r\n\tfitBounds: function (bounds, options) {\r\n\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (!bounds.isValid()) {\r\n\t\t\tthrow new Error('Bounds are not valid.');\r\n\t\t}\r\n\r\n\t\tvar target = this._getBoundsCenterZoom(bounds, options);\r\n\t\treturn this.setView(target.center, target.zoom, options);\r\n\t},\r\n\r\n\t// @method fitWorld(options?: fitBounds options): this\r\n\t// Sets a map view that mostly contains the whole world with the maximum\r\n\t// zoom level possible.\r\n\tfitWorld: function (options) {\r\n\t\treturn this.fitBounds([[-90, -180], [90, 180]], options);\r\n\t},\r\n\r\n\t// @method panTo(latlng: LatLng, options?: Pan options): this\r\n\t// Pans the map to a given center.\r\n\tpanTo: function (center, options) { // (LatLng)\r\n\t\treturn this.setView(center, this._zoom, {pan: options});\r\n\t},\r\n\r\n\t// @method panBy(offset: Point, options?: Pan options): this\r\n\t// Pans the map by a given number of pixels (animated).\r\n\tpanBy: function (offset, options) {\r\n\t\toffset = toPoint(offset).round();\r\n\t\toptions = options || {};\r\n\r\n\t\tif (!offset.x && !offset.y) {\r\n\t\t\treturn this.fire('moveend');\r\n\t\t}\r\n\t\t// If we pan too far, Chrome gets issues with tiles\r\n\t\t// and makes them disappear or appear in the wrong place (slightly offset) #2602\r\n\t\tif (options.animate !== true && !this.getSize().contains(offset)) {\r\n\t\t\tthis._resetView(this.unproject(this.project(this.getCenter()).add(offset)), this.getZoom());\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif (!this._panAnim) {\r\n\t\t\tthis._panAnim = new PosAnimation();\r\n\r\n\t\t\tthis._panAnim.on({\r\n\t\t\t\t'step': this._onPanTransitionStep,\r\n\t\t\t\t'end': this._onPanTransitionEnd\r\n\t\t\t}, this);\r\n\t\t}\r\n\r\n\t\t// don't fire movestart if animating inertia\r\n\t\tif (!options.noMoveStart) {\r\n\t\t\tthis.fire('movestart');\r\n\t\t}\r\n\r\n\t\t// animate pan unless animate: false specified\r\n\t\tif (options.animate !== false) {\r\n\t\t\tDomUtil.addClass(this._mapPane, 'leaflet-pan-anim');\r\n\r\n\t\t\tvar newPos = this._getMapPanePos().subtract(offset).round();\r\n\t\t\tthis._panAnim.run(this._mapPane, newPos, options.duration || 0.25, options.easeLinearity);\r\n\t\t} else {\r\n\t\t\tthis._rawPanBy(offset);\r\n\t\t\tthis.fire('move').fire('moveend');\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method flyTo(latlng: LatLng, zoom?: Number, options?: Zoom/pan options): this\r\n\t// Sets the view of the map (geographical center and zoom) performing a smooth\r\n\t// pan-zoom animation.\r\n\tflyTo: function (targetCenter, targetZoom, options) {\r\n\r\n\t\toptions = options || {};\r\n\t\tif (options.animate === false || !Browser.any3d) {\r\n\t\t\treturn this.setView(targetCenter, targetZoom, options);\r\n\t\t}\r\n\r\n\t\tthis._stop();\r\n\r\n\t\tvar from = this.project(this.getCenter()),\r\n\t\t    to = this.project(targetCenter),\r\n\t\t    size = this.getSize(),\r\n\t\t    startZoom = this._zoom;\r\n\r\n\t\ttargetCenter = toLatLng(targetCenter);\r\n\t\ttargetZoom = targetZoom === undefined ? startZoom : targetZoom;\r\n\r\n\t\tvar w0 = Math.max(size.x, size.y),\r\n\t\t    w1 = w0 * this.getZoomScale(startZoom, targetZoom),\r\n\t\t    u1 = (to.distanceTo(from)) || 1,\r\n\t\t    rho = 1.42,\r\n\t\t    rho2 = rho * rho;\r\n\r\n\t\tfunction r(i) {\r\n\t\t\tvar s1 = i ? -1 : 1,\r\n\t\t\t    s2 = i ? w1 : w0,\r\n\t\t\t    t1 = w1 * w1 - w0 * w0 + s1 * rho2 * rho2 * u1 * u1,\r\n\t\t\t    b1 = 2 * s2 * rho2 * u1,\r\n\t\t\t    b = t1 / b1,\r\n\t\t\t    sq = Math.sqrt(b * b + 1) - b;\r\n\r\n\t\t\t    // workaround for floating point precision bug when sq = 0, log = -Infinite,\r\n\t\t\t    // thus triggering an infinite loop in flyTo\r\n\t\t\t    var log = sq < 0.000000001 ? -18 : Math.log(sq);\r\n\r\n\t\t\treturn log;\r\n\t\t}\r\n\r\n\t\tfunction sinh(n) { return (Math.exp(n) - Math.exp(-n)) / 2; }\r\n\t\tfunction cosh(n) { return (Math.exp(n) + Math.exp(-n)) / 2; }\r\n\t\tfunction tanh(n) { return sinh(n) / cosh(n); }\r\n\r\n\t\tvar r0 = r(0);\r\n\r\n\t\tfunction w(s) { return w0 * (cosh(r0) / cosh(r0 + rho * s)); }\r\n\t\tfunction u(s) { return w0 * (cosh(r0) * tanh(r0 + rho * s) - sinh(r0)) / rho2; }\r\n\r\n\t\tfunction easeOut(t) { return 1 - Math.pow(1 - t, 1.5); }\r\n\r\n\t\tvar start = Date.now(),\r\n\t\t    S = (r(1) - r0) / rho,\r\n\t\t    duration = options.duration ? 1000 * options.duration : 1000 * S * 0.8;\r\n\r\n\t\tfunction frame() {\r\n\t\t\tvar t = (Date.now() - start) / duration,\r\n\t\t\t    s = easeOut(t) * S;\r\n\r\n\t\t\tif (t <= 1) {\r\n\t\t\t\tthis._flyToFrame = Util.requestAnimFrame(frame, this);\r\n\r\n\t\t\t\tthis._move(\r\n\t\t\t\t\tthis.unproject(from.add(to.subtract(from).multiplyBy(u(s) / u1)), startZoom),\r\n\t\t\t\t\tthis.getScaleZoom(w0 / w(s), startZoom),\r\n\t\t\t\t\t{flyTo: true});\r\n\r\n\t\t\t} else {\r\n\t\t\t\tthis\r\n\t\t\t\t\t._move(targetCenter, targetZoom)\r\n\t\t\t\t\t._moveEnd(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._moveStart(true, options.noMoveStart);\r\n\r\n\t\tframe.call(this);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method flyToBounds(bounds: LatLngBounds, options?: fitBounds options): this\r\n\t// Sets the view of the map with a smooth animation like [`flyTo`](#map-flyto),\r\n\t// but takes a bounds parameter like [`fitBounds`](#map-fitbounds).\r\n\tflyToBounds: function (bounds, options) {\r\n\t\tvar target = this._getBoundsCenterZoom(bounds, options);\r\n\t\treturn this.flyTo(target.center, target.zoom, options);\r\n\t},\r\n\r\n\t// @method setMaxBounds(bounds: LatLngBounds): this\r\n\t// Restricts the map view to the given bounds (see the [maxBounds](#map-maxbounds) option).\r\n\tsetMaxBounds: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (this.listens('moveend', this._panInsideMaxBounds)) {\r\n\t\t\tthis.off('moveend', this._panInsideMaxBounds);\r\n\t\t}\r\n\r\n\t\tif (!bounds.isValid()) {\r\n\t\t\tthis.options.maxBounds = null;\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tthis.options.maxBounds = bounds;\r\n\r\n\t\tif (this._loaded) {\r\n\t\t\tthis._panInsideMaxBounds();\r\n\t\t}\r\n\r\n\t\treturn this.on('moveend', this._panInsideMaxBounds);\r\n\t},\r\n\r\n\t// @method setMinZoom(zoom: Number): this\r\n\t// Sets the lower limit for the available zoom levels (see the [minZoom](#map-minzoom) option).\r\n\tsetMinZoom: function (zoom) {\r\n\t\tvar oldZoom = this.options.minZoom;\r\n\t\tthis.options.minZoom = zoom;\r\n\r\n\t\tif (this._loaded && oldZoom !== zoom) {\r\n\t\t\tthis.fire('zoomlevelschange');\r\n\r\n\t\t\tif (this.getZoom() < this.options.minZoom) {\r\n\t\t\t\treturn this.setZoom(zoom);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setMaxZoom(zoom: Number): this\r\n\t// Sets the upper limit for the available zoom levels (see the [maxZoom](#map-maxzoom) option).\r\n\tsetMaxZoom: function (zoom) {\r\n\t\tvar oldZoom = this.options.maxZoom;\r\n\t\tthis.options.maxZoom = zoom;\r\n\r\n\t\tif (this._loaded && oldZoom !== zoom) {\r\n\t\t\tthis.fire('zoomlevelschange');\r\n\r\n\t\t\tif (this.getZoom() > this.options.maxZoom) {\r\n\t\t\t\treturn this.setZoom(zoom);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method panInsideBounds(bounds: LatLngBounds, options?: Pan options): this\r\n\t// Pans the map to the closest view that would lie inside the given bounds (if it's not already), controlling the animation using the options specific, if any.\r\n\tpanInsideBounds: function (bounds, options) {\r\n\t\tthis._enforcingBounds = true;\r\n\t\tvar center = this.getCenter(),\r\n\t\t    newCenter = this._limitCenter(center, this._zoom, toLatLngBounds(bounds));\r\n\r\n\t\tif (!center.equals(newCenter)) {\r\n\t\t\tthis.panTo(newCenter, options);\r\n\t\t}\r\n\r\n\t\tthis._enforcingBounds = false;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method panInside(latlng: LatLng, options?: padding options): this\r\n\t// Pans the map the minimum amount to make the `latlng` visible. Use\r\n\t// padding options to fit the display to more restricted bounds.\r\n\t// If `latlng` is already within the (optionally padded) display bounds,\r\n\t// the map will not be panned.\r\n\tpanInside: function (latlng, options) {\r\n\t\toptions = options || {};\r\n\r\n\t\tvar paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),\r\n\t\t    paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),\r\n\t\t    pixelCenter = this.project(this.getCenter()),\r\n\t\t    pixelPoint = this.project(latlng),\r\n\t\t    pixelBounds = this.getPixelBounds(),\r\n\t\t    paddedBounds = toBounds([pixelBounds.min.add(paddingTL), pixelBounds.max.subtract(paddingBR)]),\r\n\t\t    paddedSize = paddedBounds.getSize();\r\n\r\n\t\tif (!paddedBounds.contains(pixelPoint)) {\r\n\t\t\tthis._enforcingBounds = true;\r\n\t\t\tvar centerOffset = pixelPoint.subtract(paddedBounds.getCenter());\r\n\t\t\tvar offset = paddedBounds.extend(pixelPoint).getSize().subtract(paddedSize);\r\n\t\t\tpixelCenter.x += centerOffset.x < 0 ? -offset.x : offset.x;\r\n\t\t\tpixelCenter.y += centerOffset.y < 0 ? -offset.y : offset.y;\r\n\t\t\tthis.panTo(this.unproject(pixelCenter), options);\r\n\t\t\tthis._enforcingBounds = false;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method invalidateSize(options: Zoom/pan options): this\r\n\t// Checks if the map container size changed and updates the map if so —\r\n\t// call it after you've changed the map size dynamically, also animating\r\n\t// pan by default. If `options.pan` is `false`, panning will not occur.\r\n\t// If `options.debounceMoveend` is `true`, it will delay `moveend` event so\r\n\t// that it doesn't happen often even if the method is called many\r\n\t// times in a row.\r\n\r\n\t// @alternative\r\n\t// @method invalidateSize(animate: Boolean): this\r\n\t// Checks if the map container size changed and updates the map if so —\r\n\t// call it after you've changed the map size dynamically, also animating\r\n\t// pan by default.\r\n\tinvalidateSize: function (options) {\r\n\t\tif (!this._loaded) { return this; }\r\n\r\n\t\toptions = Util.extend({\r\n\t\t\tanimate: false,\r\n\t\t\tpan: true\r\n\t\t}, options === true ? {animate: true} : options);\r\n\r\n\t\tvar oldSize = this.getSize();\r\n\t\tthis._sizeChanged = true;\r\n\t\tthis._lastCenter = null;\r\n\r\n\t\tvar newSize = this.getSize(),\r\n\t\t    oldCenter = oldSize.divideBy(2).round(),\r\n\t\t    newCenter = newSize.divideBy(2).round(),\r\n\t\t    offset = oldCenter.subtract(newCenter);\r\n\r\n\t\tif (!offset.x && !offset.y) { return this; }\r\n\r\n\t\tif (options.animate && options.pan) {\r\n\t\t\tthis.panBy(offset);\r\n\r\n\t\t} else {\r\n\t\t\tif (options.pan) {\r\n\t\t\t\tthis._rawPanBy(offset);\r\n\t\t\t}\r\n\r\n\t\t\tthis.fire('move');\r\n\r\n\t\t\tif (options.debounceMoveend) {\r\n\t\t\t\tclearTimeout(this._sizeTimer);\r\n\t\t\t\tthis._sizeTimer = setTimeout(Util.bind(this.fire, this, 'moveend'), 200);\r\n\t\t\t} else {\r\n\t\t\t\tthis.fire('moveend');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// @section Map state change events\r\n\t\t// @event resize: ResizeEvent\r\n\t\t// Fired when the map is resized.\r\n\t\treturn this.fire('resize', {\r\n\t\t\toldSize: oldSize,\r\n\t\t\tnewSize: newSize\r\n\t\t});\r\n\t},\r\n\r\n\t// @section Methods for modifying map state\r\n\t// @method stop(): this\r\n\t// Stops the currently running `panTo` or `flyTo` animation, if any.\r\n\tstop: function () {\r\n\t\tthis.setZoom(this._limitZoom(this._zoom));\r\n\t\tif (!this.options.zoomSnap) {\r\n\t\t\tthis.fire('viewreset');\r\n\t\t}\r\n\t\treturn this._stop();\r\n\t},\r\n\r\n\t// @section Geolocation methods\r\n\t// @method locate(options?: Locate options): this\r\n\t// Tries to locate the user using the Geolocation API, firing a [`locationfound`](#map-locationfound)\r\n\t// event with location data on success or a [`locationerror`](#map-locationerror) event on failure,\r\n\t// and optionally sets the map view to the user's location with respect to\r\n\t// detection accuracy (or to the world view if geolocation failed).\r\n\t// Note that, if your page doesn't use HTTPS, this method will fail in\r\n\t// modern browsers ([Chrome 50 and newer](https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins))\r\n\t// See `Locate options` for more details.\r\n\tlocate: function (options) {\r\n\r\n\t\toptions = this._locateOptions = Util.extend({\r\n\t\t\ttimeout: 10000,\r\n\t\t\twatch: false\r\n\t\t\t// setView: false\r\n\t\t\t// maxZoom: <Number>\r\n\t\t\t// maximumAge: 0\r\n\t\t\t// enableHighAccuracy: false\r\n\t\t}, options);\r\n\r\n\t\tif (!('geolocation' in navigator)) {\r\n\t\t\tthis._handleGeolocationError({\r\n\t\t\t\tcode: 0,\r\n\t\t\t\tmessage: 'Geolocation not supported.'\r\n\t\t\t});\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tvar onResponse = Util.bind(this._handleGeolocationResponse, this),\r\n\t\t    onError = Util.bind(this._handleGeolocationError, this);\r\n\r\n\t\tif (options.watch) {\r\n\t\t\tthis._locationWatchId =\r\n\t\t\t        navigator.geolocation.watchPosition(onResponse, onError, options);\r\n\t\t} else {\r\n\t\t\tnavigator.geolocation.getCurrentPosition(onResponse, onError, options);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method stopLocate(): this\r\n\t// Stops watching location previously initiated by `map.locate({watch: true})`\r\n\t// and aborts resetting the map view if map.locate was called with\r\n\t// `{setView: true}`.\r\n\tstopLocate: function () {\r\n\t\tif (navigator.geolocation && navigator.geolocation.clearWatch) {\r\n\t\t\tnavigator.geolocation.clearWatch(this._locationWatchId);\r\n\t\t}\r\n\t\tif (this._locateOptions) {\r\n\t\t\tthis._locateOptions.setView = false;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_handleGeolocationError: function (error) {\r\n\t\tif (!this._container._leaflet_id) { return; }\r\n\r\n\t\tvar c = error.code,\r\n\t\t    message = error.message ||\r\n\t\t            (c === 1 ? 'permission denied' :\r\n\t\t            (c === 2 ? 'position unavailable' : 'timeout'));\r\n\r\n\t\tif (this._locateOptions.setView && !this._loaded) {\r\n\t\t\tthis.fitWorld();\r\n\t\t}\r\n\r\n\t\t// @section Location events\r\n\t\t// @event locationerror: ErrorEvent\r\n\t\t// Fired when geolocation (using the [`locate`](#map-locate) method) failed.\r\n\t\tthis.fire('locationerror', {\r\n\t\t\tcode: c,\r\n\t\t\tmessage: 'Geolocation error: ' + message + '.'\r\n\t\t});\r\n\t},\r\n\r\n\t_handleGeolocationResponse: function (pos) {\r\n\t\tif (!this._container._leaflet_id) { return; }\r\n\r\n\t\tvar lat = pos.coords.latitude,\r\n\t\t    lng = pos.coords.longitude,\r\n\t\t    latlng = new LatLng(lat, lng),\r\n\t\t    bounds = latlng.toBounds(pos.coords.accuracy * 2),\r\n\t\t    options = this._locateOptions;\r\n\r\n\t\tif (options.setView) {\r\n\t\t\tvar zoom = this.getBoundsZoom(bounds);\r\n\t\t\tthis.setView(latlng, options.maxZoom ? Math.min(zoom, options.maxZoom) : zoom);\r\n\t\t}\r\n\r\n\t\tvar data = {\r\n\t\t\tlatlng: latlng,\r\n\t\t\tbounds: bounds,\r\n\t\t\ttimestamp: pos.timestamp\r\n\t\t};\r\n\r\n\t\tfor (var i in pos.coords) {\r\n\t\t\tif (typeof pos.coords[i] === 'number') {\r\n\t\t\t\tdata[i] = pos.coords[i];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// @event locationfound: LocationEvent\r\n\t\t// Fired when geolocation (using the [`locate`](#map-locate) method)\r\n\t\t// went successfully.\r\n\t\tthis.fire('locationfound', data);\r\n\t},\r\n\r\n\t// TODO Appropriate docs section?\r\n\t// @section Other Methods\r\n\t// @method addHandler(name: String, HandlerClass: Function): this\r\n\t// Adds a new `Handler` to the map, given its name and constructor function.\r\n\taddHandler: function (name, HandlerClass) {\r\n\t\tif (!HandlerClass) { return this; }\r\n\r\n\t\tvar handler = this[name] = new HandlerClass(this);\r\n\r\n\t\tthis._handlers.push(handler);\r\n\r\n\t\tif (this.options[name]) {\r\n\t\t\thandler.enable();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method remove(): this\r\n\t// Destroys the map and clears all related event listeners.\r\n\tremove: function () {\r\n\r\n\t\tthis._initEvents(true);\r\n\t\tif (this.options.maxBounds) { this.off('moveend', this._panInsideMaxBounds); }\r\n\r\n\t\tif (this._containerId !== this._container._leaflet_id) {\r\n\t\t\tthrow new Error('Map container is being reused by another instance');\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\t// throws error in IE6-8\r\n\t\t\tdelete this._container._leaflet_id;\r\n\t\t\tdelete this._containerId;\r\n\t\t} catch (e) {\r\n\t\t\t/*eslint-disable */\r\n\t\t\tthis._container._leaflet_id = undefined;\r\n\t\t\t/* eslint-enable */\r\n\t\t\tthis._containerId = undefined;\r\n\t\t}\r\n\r\n\t\tif (this._locationWatchId !== undefined) {\r\n\t\t\tthis.stopLocate();\r\n\t\t}\r\n\r\n\t\tthis._stop();\r\n\r\n\t\tDomUtil.remove(this._mapPane);\r\n\r\n\t\tif (this._clearControlPos) {\r\n\t\t\tthis._clearControlPos();\r\n\t\t}\r\n\t\tif (this._resizeRequest) {\r\n\t\t\tUtil.cancelAnimFrame(this._resizeRequest);\r\n\t\t\tthis._resizeRequest = null;\r\n\t\t}\r\n\r\n\t\tthis._clearHandlers();\r\n\r\n\t\tif (this._loaded) {\r\n\t\t\t// @section Map state change events\r\n\t\t\t// @event unload: Event\r\n\t\t\t// Fired when the map is destroyed with [remove](#map-remove) method.\r\n\t\t\tthis.fire('unload');\r\n\t\t}\r\n\r\n\t\tvar i;\r\n\t\tfor (i in this._layers) {\r\n\t\t\tthis._layers[i].remove();\r\n\t\t}\r\n\t\tfor (i in this._panes) {\r\n\t\t\tDomUtil.remove(this._panes[i]);\r\n\t\t}\r\n\r\n\t\tthis._layers = [];\r\n\t\tthis._panes = [];\r\n\t\tdelete this._mapPane;\r\n\t\tdelete this._renderer;\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @section Other Methods\r\n\t// @method createPane(name: String, container?: HTMLElement): HTMLElement\r\n\t// Creates a new [map pane](#map-pane) with the given name if it doesn't exist already,\r\n\t// then returns it. The pane is created as a child of `container`, or\r\n\t// as a child of the main map pane if not set.\r\n\tcreatePane: function (name, container) {\r\n\t\tvar className = 'leaflet-pane' + (name ? ' leaflet-' + name.replace('Pane', '') + '-pane' : ''),\r\n\t\t    pane = DomUtil.create('div', className, container || this._mapPane);\r\n\r\n\t\tif (name) {\r\n\t\t\tthis._panes[name] = pane;\r\n\t\t}\r\n\t\treturn pane;\r\n\t},\r\n\r\n\t// @section Methods for Getting Map State\r\n\r\n\t// @method getCenter(): LatLng\r\n\t// Returns the geographical center of the map view\r\n\tgetCenter: function () {\r\n\t\tthis._checkIfLoaded();\r\n\r\n\t\tif (this._lastCenter && !this._moved()) {\r\n\t\t\treturn this._lastCenter.clone();\r\n\t\t}\r\n\t\treturn this.layerPointToLatLng(this._getCenterLayerPoint());\r\n\t},\r\n\r\n\t// @method getZoom(): Number\r\n\t// Returns the current zoom level of the map view\r\n\tgetZoom: function () {\r\n\t\treturn this._zoom;\r\n\t},\r\n\r\n\t// @method getBounds(): LatLngBounds\r\n\t// Returns the geographical bounds visible in the current map view\r\n\tgetBounds: function () {\r\n\t\tvar bounds = this.getPixelBounds(),\r\n\t\t    sw = this.unproject(bounds.getBottomLeft()),\r\n\t\t    ne = this.unproject(bounds.getTopRight());\r\n\r\n\t\treturn new LatLngBounds(sw, ne);\r\n\t},\r\n\r\n\t// @method getMinZoom(): Number\r\n\t// Returns the minimum zoom level of the map (if set in the `minZoom` option of the map or of any layers), or `0` by default.\r\n\tgetMinZoom: function () {\r\n\t\treturn this.options.minZoom === undefined ? this._layersMinZoom || 0 : this.options.minZoom;\r\n\t},\r\n\r\n\t// @method getMaxZoom(): Number\r\n\t// Returns the maximum zoom level of the map (if set in the `maxZoom` option of the map or of any layers).\r\n\tgetMaxZoom: function () {\r\n\t\treturn this.options.maxZoom === undefined ?\r\n\t\t\t(this._layersMaxZoom === undefined ? Infinity : this._layersMaxZoom) :\r\n\t\t\tthis.options.maxZoom;\r\n\t},\r\n\r\n\t// @method getBoundsZoom(bounds: LatLngBounds, inside?: Boolean, padding?: Point): Number\r\n\t// Returns the maximum zoom level on which the given bounds fit to the map\r\n\t// view in its entirety. If `inside` (optional) is set to `true`, the method\r\n\t// instead returns the minimum zoom level on which the map view fits into\r\n\t// the given bounds in its entirety.\r\n\tgetBoundsZoom: function (bounds, inside, padding) { // (LatLngBounds[, Boolean, Point]) -> Number\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\t\tpadding = toPoint(padding || [0, 0]);\r\n\r\n\t\tvar zoom = this.getZoom() || 0,\r\n\t\t    min = this.getMinZoom(),\r\n\t\t    max = this.getMaxZoom(),\r\n\t\t    nw = bounds.getNorthWest(),\r\n\t\t    se = bounds.getSouthEast(),\r\n\t\t    size = this.getSize().subtract(padding),\r\n\t\t    boundsSize = toBounds(this.project(se, zoom), this.project(nw, zoom)).getSize(),\r\n\t\t    snap = Browser.any3d ? this.options.zoomSnap : 1,\r\n\t\t    scalex = size.x / boundsSize.x,\r\n\t\t    scaley = size.y / boundsSize.y,\r\n\t\t    scale = inside ? Math.max(scalex, scaley) : Math.min(scalex, scaley);\r\n\r\n\t\tzoom = this.getScaleZoom(scale, zoom);\r\n\r\n\t\tif (snap) {\r\n\t\t\tzoom = Math.round(zoom / (snap / 100)) * (snap / 100); // don't jump if within 1% of a snap level\r\n\t\t\tzoom = inside ? Math.ceil(zoom / snap) * snap : Math.floor(zoom / snap) * snap;\r\n\t\t}\r\n\r\n\t\treturn Math.max(min, Math.min(max, zoom));\r\n\t},\r\n\r\n\t// @method getSize(): Point\r\n\t// Returns the current size of the map container (in pixels).\r\n\tgetSize: function () {\r\n\t\tif (!this._size || this._sizeChanged) {\r\n\t\t\tthis._size = new Point(\r\n\t\t\t\tthis._container.clientWidth || 0,\r\n\t\t\t\tthis._container.clientHeight || 0);\r\n\r\n\t\t\tthis._sizeChanged = false;\r\n\t\t}\r\n\t\treturn this._size.clone();\r\n\t},\r\n\r\n\t// @method getPixelBounds(): Bounds\r\n\t// Returns the bounds of the current map view in projected pixel\r\n\t// coordinates (sometimes useful in layer and overlay implementations).\r\n\tgetPixelBounds: function (center, zoom) {\r\n\t\tvar topLeftPoint = this._getTopLeftPoint(center, zoom);\r\n\t\treturn new Bounds(topLeftPoint, topLeftPoint.add(this.getSize()));\r\n\t},\r\n\r\n\t// TODO: Check semantics - isn't the pixel origin the 0,0 coord relative to\r\n\t// the map pane? \"left point of the map layer\" can be confusing, specially\r\n\t// since there can be negative offsets.\r\n\t// @method getPixelOrigin(): Point\r\n\t// Returns the projected pixel coordinates of the top left point of\r\n\t// the map layer (useful in custom layer and overlay implementations).\r\n\tgetPixelOrigin: function () {\r\n\t\tthis._checkIfLoaded();\r\n\t\treturn this._pixelOrigin;\r\n\t},\r\n\r\n\t// @method getPixelWorldBounds(zoom?: Number): Bounds\r\n\t// Returns the world's bounds in pixel coordinates for zoom level `zoom`.\r\n\t// If `zoom` is omitted, the map's current zoom level is used.\r\n\tgetPixelWorldBounds: function (zoom) {\r\n\t\treturn this.options.crs.getProjectedBounds(zoom === undefined ? this.getZoom() : zoom);\r\n\t},\r\n\r\n\t// @section Other Methods\r\n\r\n\t// @method getPane(pane: String|HTMLElement): HTMLElement\r\n\t// Returns a [map pane](#map-pane), given its name or its HTML element (its identity).\r\n\tgetPane: function (pane) {\r\n\t\treturn typeof pane === 'string' ? this._panes[pane] : pane;\r\n\t},\r\n\r\n\t// @method getPanes(): Object\r\n\t// Returns a plain object containing the names of all [panes](#map-pane) as keys and\r\n\t// the panes as values.\r\n\tgetPanes: function () {\r\n\t\treturn this._panes;\r\n\t},\r\n\r\n\t// @method getContainer: HTMLElement\r\n\t// Returns the HTML element that contains the map.\r\n\tgetContainer: function () {\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\r\n\t// @section Conversion Methods\r\n\r\n\t// @method getZoomScale(toZoom: Number, fromZoom: Number): Number\r\n\t// Returns the scale factor to be applied to a map transition from zoom level\r\n\t// `fromZoom` to `toZoom`. Used internally to help with zoom animations.\r\n\tgetZoomScale: function (toZoom, fromZoom) {\r\n\t\t// TODO replace with universal implementation after refactoring projections\r\n\t\tvar crs = this.options.crs;\r\n\t\tfromZoom = fromZoom === undefined ? this._zoom : fromZoom;\r\n\t\treturn crs.scale(toZoom) / crs.scale(fromZoom);\r\n\t},\r\n\r\n\t// @method getScaleZoom(scale: Number, fromZoom: Number): Number\r\n\t// Returns the zoom level that the map would end up at, if it is at `fromZoom`\r\n\t// level and everything is scaled by a factor of `scale`. Inverse of\r\n\t// [`getZoomScale`](#map-getZoomScale).\r\n\tgetScaleZoom: function (scale, fromZoom) {\r\n\t\tvar crs = this.options.crs;\r\n\t\tfromZoom = fromZoom === undefined ? this._zoom : fromZoom;\r\n\t\tvar zoom = crs.zoom(scale * crs.scale(fromZoom));\r\n\t\treturn isNaN(zoom) ? Infinity : zoom;\r\n\t},\r\n\r\n\t// @method project(latlng: LatLng, zoom: Number): Point\r\n\t// Projects a geographical coordinate `LatLng` according to the projection\r\n\t// of the map's CRS, then scales it according to `zoom` and the CRS's\r\n\t// `Transformation`. The result is pixel coordinate relative to\r\n\t// the CRS origin.\r\n\tproject: function (latlng, zoom) {\r\n\t\tzoom = zoom === undefined ? this._zoom : zoom;\r\n\t\treturn this.options.crs.latLngToPoint(toLatLng(latlng), zoom);\r\n\t},\r\n\r\n\t// @method unproject(point: Point, zoom: Number): LatLng\r\n\t// Inverse of [`project`](#map-project).\r\n\tunproject: function (point, zoom) {\r\n\t\tzoom = zoom === undefined ? this._zoom : zoom;\r\n\t\treturn this.options.crs.pointToLatLng(toPoint(point), zoom);\r\n\t},\r\n\r\n\t// @method layerPointToLatLng(point: Point): LatLng\r\n\t// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\r\n\t// returns the corresponding geographical coordinate (for the current zoom level).\r\n\tlayerPointToLatLng: function (point) {\r\n\t\tvar projectedPoint = toPoint(point).add(this.getPixelOrigin());\r\n\t\treturn this.unproject(projectedPoint);\r\n\t},\r\n\r\n\t// @method latLngToLayerPoint(latlng: LatLng): Point\r\n\t// Given a geographical coordinate, returns the corresponding pixel coordinate\r\n\t// relative to the [origin pixel](#map-getpixelorigin).\r\n\tlatLngToLayerPoint: function (latlng) {\r\n\t\tvar projectedPoint = this.project(toLatLng(latlng))._round();\r\n\t\treturn projectedPoint._subtract(this.getPixelOrigin());\r\n\t},\r\n\r\n\t// @method wrapLatLng(latlng: LatLng): LatLng\r\n\t// Returns a `LatLng` where `lat` and `lng` has been wrapped according to the\r\n\t// map's CRS's `wrapLat` and `wrapLng` properties, if they are outside the\r\n\t// CRS's bounds.\r\n\t// By default this means longitude is wrapped around the dateline so its\r\n\t// value is between -180 and +180 degrees.\r\n\twrapLatLng: function (latlng) {\r\n\t\treturn this.options.crs.wrapLatLng(toLatLng(latlng));\r\n\t},\r\n\r\n\t// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds\r\n\t// Returns a `LatLngBounds` with the same size as the given one, ensuring that\r\n\t// its center is within the CRS's bounds.\r\n\t// By default this means the center longitude is wrapped around the dateline so its\r\n\t// value is between -180 and +180 degrees, and the majority of the bounds\r\n\t// overlaps the CRS's bounds.\r\n\twrapLatLngBounds: function (latlng) {\r\n\t\treturn this.options.crs.wrapLatLngBounds(toLatLngBounds(latlng));\r\n\t},\r\n\r\n\t// @method distance(latlng1: LatLng, latlng2: LatLng): Number\r\n\t// Returns the distance between two geographical coordinates according to\r\n\t// the map's CRS. By default this measures distance in meters.\r\n\tdistance: function (latlng1, latlng2) {\r\n\t\treturn this.options.crs.distance(toLatLng(latlng1), toLatLng(latlng2));\r\n\t},\r\n\r\n\t// @method containerPointToLayerPoint(point: Point): Point\r\n\t// Given a pixel coordinate relative to the map container, returns the corresponding\r\n\t// pixel coordinate relative to the [origin pixel](#map-getpixelorigin).\r\n\tcontainerPointToLayerPoint: function (point) { // (Point)\r\n\t\treturn toPoint(point).subtract(this._getMapPanePos());\r\n\t},\r\n\r\n\t// @method layerPointToContainerPoint(point: Point): Point\r\n\t// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\r\n\t// returns the corresponding pixel coordinate relative to the map container.\r\n\tlayerPointToContainerPoint: function (point) { // (Point)\r\n\t\treturn toPoint(point).add(this._getMapPanePos());\r\n\t},\r\n\r\n\t// @method containerPointToLatLng(point: Point): LatLng\r\n\t// Given a pixel coordinate relative to the map container, returns\r\n\t// the corresponding geographical coordinate (for the current zoom level).\r\n\tcontainerPointToLatLng: function (point) {\r\n\t\tvar layerPoint = this.containerPointToLayerPoint(toPoint(point));\r\n\t\treturn this.layerPointToLatLng(layerPoint);\r\n\t},\r\n\r\n\t// @method latLngToContainerPoint(latlng: LatLng): Point\r\n\t// Given a geographical coordinate, returns the corresponding pixel coordinate\r\n\t// relative to the map container.\r\n\tlatLngToContainerPoint: function (latlng) {\r\n\t\treturn this.layerPointToContainerPoint(this.latLngToLayerPoint(toLatLng(latlng)));\r\n\t},\r\n\r\n\t// @method mouseEventToContainerPoint(ev: MouseEvent): Point\r\n\t// Given a MouseEvent object, returns the pixel coordinate relative to the\r\n\t// map container where the event took place.\r\n\tmouseEventToContainerPoint: function (e) {\r\n\t\treturn DomEvent.getMousePosition(e, this._container);\r\n\t},\r\n\r\n\t// @method mouseEventToLayerPoint(ev: MouseEvent): Point\r\n\t// Given a MouseEvent object, returns the pixel coordinate relative to\r\n\t// the [origin pixel](#map-getpixelorigin) where the event took place.\r\n\tmouseEventToLayerPoint: function (e) {\r\n\t\treturn this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e));\r\n\t},\r\n\r\n\t// @method mouseEventToLatLng(ev: MouseEvent): LatLng\r\n\t// Given a MouseEvent object, returns geographical coordinate where the\r\n\t// event took place.\r\n\tmouseEventToLatLng: function (e) { // (MouseEvent)\r\n\t\treturn this.layerPointToLatLng(this.mouseEventToLayerPoint(e));\r\n\t},\r\n\r\n\r\n\t// map initialization methods\r\n\r\n\t_initContainer: function (id) {\r\n\t\tvar container = this._container = DomUtil.get(id);\r\n\r\n\t\tif (!container) {\r\n\t\t\tthrow new Error('Map container not found.');\r\n\t\t} else if (container._leaflet_id) {\r\n\t\t\tthrow new Error('Map container is already initialized.');\r\n\t\t}\r\n\r\n\t\tDomEvent.on(container, 'scroll', this._onScroll, this);\r\n\t\tthis._containerId = Util.stamp(container);\r\n\t},\r\n\r\n\t_initLayout: function () {\r\n\t\tvar container = this._container;\r\n\r\n\t\tthis._fadeAnimated = this.options.fadeAnimation && Browser.any3d;\r\n\r\n\t\tDomUtil.addClass(container, 'leaflet-container' +\r\n\t\t\t(Browser.touch ? ' leaflet-touch' : '') +\r\n\t\t\t(Browser.retina ? ' leaflet-retina' : '') +\r\n\t\t\t(Browser.ielt9 ? ' leaflet-oldie' : '') +\r\n\t\t\t(Browser.safari ? ' leaflet-safari' : '') +\r\n\t\t\t(this._fadeAnimated ? ' leaflet-fade-anim' : ''));\r\n\r\n\t\tvar position = DomUtil.getStyle(container, 'position');\r\n\r\n\t\tif (position !== 'absolute' && position !== 'relative' && position !== 'fixed' && position !== 'sticky') {\r\n\t\t\tcontainer.style.position = 'relative';\r\n\t\t}\r\n\r\n\t\tthis._initPanes();\r\n\r\n\t\tif (this._initControlPos) {\r\n\t\t\tthis._initControlPos();\r\n\t\t}\r\n\t},\r\n\r\n\t_initPanes: function () {\r\n\t\tvar panes = this._panes = {};\r\n\t\tthis._paneRenderers = {};\r\n\r\n\t\t// @section\r\n\t\t//\r\n\t\t// Panes are DOM elements used to control the ordering of layers on the map. You\r\n\t\t// can access panes with [`map.getPane`](#map-getpane) or\r\n\t\t// [`map.getPanes`](#map-getpanes) methods. New panes can be created with the\r\n\t\t// [`map.createPane`](#map-createpane) method.\r\n\t\t//\r\n\t\t// Every map has the following default panes that differ only in zIndex.\r\n\t\t//\r\n\t\t// @pane mapPane: HTMLElement = 'auto'\r\n\t\t// Pane that contains all other map panes\r\n\r\n\t\tthis._mapPane = this.createPane('mapPane', this._container);\r\n\t\tDomUtil.setPosition(this._mapPane, new Point(0, 0));\r\n\r\n\t\t// @pane tilePane: HTMLElement = 200\r\n\t\t// Pane for `GridLayer`s and `TileLayer`s\r\n\t\tthis.createPane('tilePane');\r\n\t\t// @pane overlayPane: HTMLElement = 400\r\n\t\t// Pane for vectors (`Path`s, like `Polyline`s and `Polygon`s), `ImageOverlay`s and `VideoOverlay`s\r\n\t\tthis.createPane('overlayPane');\r\n\t\t// @pane shadowPane: HTMLElement = 500\r\n\t\t// Pane for overlay shadows (e.g. `Marker` shadows)\r\n\t\tthis.createPane('shadowPane');\r\n\t\t// @pane markerPane: HTMLElement = 600\r\n\t\t// Pane for `Icon`s of `Marker`s\r\n\t\tthis.createPane('markerPane');\r\n\t\t// @pane tooltipPane: HTMLElement = 650\r\n\t\t// Pane for `Tooltip`s.\r\n\t\tthis.createPane('tooltipPane');\r\n\t\t// @pane popupPane: HTMLElement = 700\r\n\t\t// Pane for `Popup`s.\r\n\t\tthis.createPane('popupPane');\r\n\r\n\t\tif (!this.options.markerZoomAnimation) {\r\n\t\t\tDomUtil.addClass(panes.markerPane, 'leaflet-zoom-hide');\r\n\t\t\tDomUtil.addClass(panes.shadowPane, 'leaflet-zoom-hide');\r\n\t\t}\r\n\t},\r\n\r\n\r\n\t// private methods that modify map state\r\n\r\n\t// @section Map state change events\r\n\t_resetView: function (center, zoom, noMoveStart) {\r\n\t\tDomUtil.setPosition(this._mapPane, new Point(0, 0));\r\n\r\n\t\tvar loading = !this._loaded;\r\n\t\tthis._loaded = true;\r\n\t\tzoom = this._limitZoom(zoom);\r\n\r\n\t\tthis.fire('viewprereset');\r\n\r\n\t\tvar zoomChanged = this._zoom !== zoom;\r\n\t\tthis\r\n\t\t\t._moveStart(zoomChanged, noMoveStart)\r\n\t\t\t._move(center, zoom)\r\n\t\t\t._moveEnd(zoomChanged);\r\n\r\n\t\t// @event viewreset: Event\r\n\t\t// Fired when the map needs to redraw its content (this usually happens\r\n\t\t// on map zoom or load). Very useful for creating custom overlays.\r\n\t\tthis.fire('viewreset');\r\n\r\n\t\t// @event load: Event\r\n\t\t// Fired when the map is initialized (when its center and zoom are set\r\n\t\t// for the first time).\r\n\t\tif (loading) {\r\n\t\t\tthis.fire('load');\r\n\t\t}\r\n\t},\r\n\r\n\t_moveStart: function (zoomChanged, noMoveStart) {\r\n\t\t// @event zoomstart: Event\r\n\t\t// Fired when the map zoom is about to change (e.g. before zoom animation).\r\n\t\t// @event movestart: Event\r\n\t\t// Fired when the view of the map starts changing (e.g. user starts dragging the map).\r\n\t\tif (zoomChanged) {\r\n\t\t\tthis.fire('zoomstart');\r\n\t\t}\r\n\t\tif (!noMoveStart) {\r\n\t\t\tthis.fire('movestart');\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_move: function (center, zoom, data, supressEvent) {\r\n\t\tif (zoom === undefined) {\r\n\t\t\tzoom = this._zoom;\r\n\t\t}\r\n\t\tvar zoomChanged = this._zoom !== zoom;\r\n\r\n\t\tthis._zoom = zoom;\r\n\t\tthis._lastCenter = center;\r\n\t\tthis._pixelOrigin = this._getNewPixelOrigin(center);\r\n\r\n\t\tif (!supressEvent) {\r\n\t\t\t// @event zoom: Event\r\n\t\t\t// Fired repeatedly during any change in zoom level,\r\n\t\t\t// including zoom and fly animations.\r\n\t\t\tif (zoomChanged || (data && data.pinch)) {\t// Always fire 'zoom' if pinching because #3530\r\n\t\t\t\tthis.fire('zoom', data);\r\n\t\t\t}\r\n\r\n\t\t\t// @event move: Event\r\n\t\t\t// Fired repeatedly during any movement of the map,\r\n\t\t\t// including pan and fly animations.\r\n\t\t\tthis.fire('move', data);\r\n\t\t} else if (data && data.pinch) {\t// Always fire 'zoom' if pinching because #3530\r\n\t\t\tthis.fire('zoom', data);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_moveEnd: function (zoomChanged) {\r\n\t\t// @event zoomend: Event\r\n\t\t// Fired when the map zoom changed, after any animations.\r\n\t\tif (zoomChanged) {\r\n\t\t\tthis.fire('zoomend');\r\n\t\t}\r\n\r\n\t\t// @event moveend: Event\r\n\t\t// Fired when the center of the map stops changing\r\n\t\t// (e.g. user stopped dragging the map or after non-centered zoom).\r\n\t\treturn this.fire('moveend');\r\n\t},\r\n\r\n\t_stop: function () {\r\n\t\tUtil.cancelAnimFrame(this._flyToFrame);\r\n\t\tif (this._panAnim) {\r\n\t\t\tthis._panAnim.stop();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_rawPanBy: function (offset) {\r\n\t\tDomUtil.setPosition(this._mapPane, this._getMapPanePos().subtract(offset));\r\n\t},\r\n\r\n\t_getZoomSpan: function () {\r\n\t\treturn this.getMaxZoom() - this.getMinZoom();\r\n\t},\r\n\r\n\t_panInsideMaxBounds: function () {\r\n\t\tif (!this._enforcingBounds) {\r\n\t\t\tthis.panInsideBounds(this.options.maxBounds);\r\n\t\t}\r\n\t},\r\n\r\n\t_checkIfLoaded: function () {\r\n\t\tif (!this._loaded) {\r\n\t\t\tthrow new Error('Set map center and zoom first.');\r\n\t\t}\r\n\t},\r\n\r\n\t// DOM event handling\r\n\r\n\t// @section Interaction events\r\n\t_initEvents: function (remove) {\r\n\t\tthis._targets = {};\r\n\t\tthis._targets[Util.stamp(this._container)] = this;\r\n\r\n\t\tvar onOff = remove ? DomEvent.off : DomEvent.on;\r\n\r\n\t\t// @event click: MouseEvent\r\n\t\t// Fired when the user clicks (or taps) the map.\r\n\t\t// @event dblclick: MouseEvent\r\n\t\t// Fired when the user double-clicks (or double-taps) the map.\r\n\t\t// @event mousedown: MouseEvent\r\n\t\t// Fired when the user pushes the mouse button on the map.\r\n\t\t// @event mouseup: MouseEvent\r\n\t\t// Fired when the user releases the mouse button on the map.\r\n\t\t// @event mouseover: MouseEvent\r\n\t\t// Fired when the mouse enters the map.\r\n\t\t// @event mouseout: MouseEvent\r\n\t\t// Fired when the mouse leaves the map.\r\n\t\t// @event mousemove: MouseEvent\r\n\t\t// Fired while the mouse moves over the map.\r\n\t\t// @event contextmenu: MouseEvent\r\n\t\t// Fired when the user pushes the right mouse button on the map, prevents\r\n\t\t// default browser context menu from showing if there are listeners on\r\n\t\t// this event. Also fired on mobile when the user holds a single touch\r\n\t\t// for a second (also called long press).\r\n\t\t// @event keypress: KeyboardEvent\r\n\t\t// Fired when the user presses a key from the keyboard that produces a character value while the map is focused.\r\n\t\t// @event keydown: KeyboardEvent\r\n\t\t// Fired when the user presses a key from the keyboard while the map is focused. Unlike the `keypress` event,\r\n\t\t// the `keydown` event is fired for keys that produce a character value and for keys\r\n\t\t// that do not produce a character value.\r\n\t\t// @event keyup: KeyboardEvent\r\n\t\t// Fired when the user releases a key from the keyboard while the map is focused.\r\n\t\tonOff(this._container, 'click dblclick mousedown mouseup ' +\r\n\t\t\t'mouseover mouseout mousemove contextmenu keypress keydown keyup', this._handleDOMEvent, this);\r\n\r\n\t\tif (this.options.trackResize) {\r\n\t\t\tonOff(window, 'resize', this._onResize, this);\r\n\t\t}\r\n\r\n\t\tif (Browser.any3d && this.options.transform3DLimit) {\r\n\t\t\t(remove ? this.off : this.on).call(this, 'moveend', this._onMoveEnd);\r\n\t\t}\r\n\t},\r\n\r\n\t_onResize: function () {\r\n\t\tUtil.cancelAnimFrame(this._resizeRequest);\r\n\t\tthis._resizeRequest = Util.requestAnimFrame(\r\n\t\t        function () { this.invalidateSize({debounceMoveend: true}); }, this);\r\n\t},\r\n\r\n\t_onScroll: function () {\r\n\t\tthis._container.scrollTop  = 0;\r\n\t\tthis._container.scrollLeft = 0;\r\n\t},\r\n\r\n\t_onMoveEnd: function () {\r\n\t\tvar pos = this._getMapPanePos();\r\n\t\tif (Math.max(Math.abs(pos.x), Math.abs(pos.y)) >= this.options.transform3DLimit) {\r\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=1203873 but Webkit also have\r\n\t\t\t// a pixel offset on very high values, see: https://jsfiddle.net/dg6r5hhb/\r\n\t\t\tthis._resetView(this.getCenter(), this.getZoom());\r\n\t\t}\r\n\t},\r\n\r\n\t_findEventTargets: function (e, type) {\r\n\t\tvar targets = [],\r\n\t\t    target,\r\n\t\t    isHover = type === 'mouseout' || type === 'mouseover',\r\n\t\t    src = e.target || e.srcElement,\r\n\t\t    dragging = false;\r\n\r\n\t\twhile (src) {\r\n\t\t\ttarget = this._targets[Util.stamp(src)];\r\n\t\t\tif (target && (type === 'click' || type === 'preclick') && this._draggableMoved(target)) {\r\n\t\t\t\t// Prevent firing click after you just dragged an object.\r\n\t\t\t\tdragging = true;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tif (target && target.listens(type, true)) {\r\n\t\t\t\tif (isHover && !DomEvent.isExternalTarget(src, e)) { break; }\r\n\t\t\t\ttargets.push(target);\r\n\t\t\t\tif (isHover) { break; }\r\n\t\t\t}\r\n\t\t\tif (src === this._container) { break; }\r\n\t\t\tsrc = src.parentNode;\r\n\t\t}\r\n\t\tif (!targets.length && !dragging && !isHover && this.listens(type, true)) {\r\n\t\t\ttargets = [this];\r\n\t\t}\r\n\t\treturn targets;\r\n\t},\r\n\r\n\t_isClickDisabled: function (el) {\r\n\t\twhile (el && el !== this._container) {\r\n\t\t\tif (el['_leaflet_disable_click']) { return true; }\r\n\t\t\tel = el.parentNode;\r\n\t\t}\r\n\t},\r\n\r\n\t_handleDOMEvent: function (e) {\r\n\t\tvar el = (e.target || e.srcElement);\r\n\t\tif (!this._loaded || el['_leaflet_disable_events'] || e.type === 'click' && this._isClickDisabled(el)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar type = e.type;\r\n\r\n\t\tif (type === 'mousedown') {\r\n\t\t\t// prevents outline when clicking on keyboard-focusable element\r\n\t\t\tDomUtil.preventOutline(el);\r\n\t\t}\r\n\r\n\t\tthis._fireDOMEvent(e, type);\r\n\t},\r\n\r\n\t_mouseEvents: ['click', 'dblclick', 'mouseover', 'mouseout', 'contextmenu'],\r\n\r\n\t_fireDOMEvent: function (e, type, canvasTargets) {\r\n\r\n\t\tif (e.type === 'click') {\r\n\t\t\t// Fire a synthetic 'preclick' event which propagates up (mainly for closing popups).\r\n\t\t\t// @event preclick: MouseEvent\r\n\t\t\t// Fired before mouse click on the map (sometimes useful when you\r\n\t\t\t// want something to happen on click before any existing click\r\n\t\t\t// handlers start running).\r\n\t\t\tvar synth = Util.extend({}, e);\r\n\t\t\tsynth.type = 'preclick';\r\n\t\t\tthis._fireDOMEvent(synth, synth.type, canvasTargets);\r\n\t\t}\r\n\r\n\t\t// Find the layer the event is propagating from and its parents.\r\n\t\tvar targets = this._findEventTargets(e, type);\r\n\r\n\t\tif (canvasTargets) {\r\n\t\t\tvar filtered = []; // pick only targets with listeners\r\n\t\t\tfor (var i = 0; i < canvasTargets.length; i++) {\r\n\t\t\t\tif (canvasTargets[i].listens(type, true)) {\r\n\t\t\t\t\tfiltered.push(canvasTargets[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\ttargets = filtered.concat(targets);\r\n\t\t}\r\n\r\n\t\tif (!targets.length) { return; }\r\n\r\n\t\tif (type === 'contextmenu') {\r\n\t\t\tDomEvent.preventDefault(e);\r\n\t\t}\r\n\r\n\t\tvar target = targets[0];\r\n\t\tvar data = {\r\n\t\t\toriginalEvent: e\r\n\t\t};\r\n\r\n\t\tif (e.type !== 'keypress' && e.type !== 'keydown' && e.type !== 'keyup') {\r\n\t\t\tvar isMarker = target.getLatLng && (!target._radius || target._radius <= 10);\r\n\t\t\tdata.containerPoint = isMarker ?\r\n\t\t\t\tthis.latLngToContainerPoint(target.getLatLng()) : this.mouseEventToContainerPoint(e);\r\n\t\t\tdata.layerPoint = this.containerPointToLayerPoint(data.containerPoint);\r\n\t\t\tdata.latlng = isMarker ? target.getLatLng() : this.layerPointToLatLng(data.layerPoint);\r\n\t\t}\r\n\r\n\t\tfor (i = 0; i < targets.length; i++) {\r\n\t\t\ttargets[i].fire(type, data, true);\r\n\t\t\tif (data.originalEvent._stopped ||\r\n\t\t\t\t(targets[i].options.bubblingMouseEvents === false && Util.indexOf(this._mouseEvents, type) !== -1)) { return; }\r\n\t\t}\r\n\t},\r\n\r\n\t_draggableMoved: function (obj) {\r\n\t\tobj = obj.dragging && obj.dragging.enabled() ? obj : this;\r\n\t\treturn (obj.dragging && obj.dragging.moved()) || (this.boxZoom && this.boxZoom.moved());\r\n\t},\r\n\r\n\t_clearHandlers: function () {\r\n\t\tfor (var i = 0, len = this._handlers.length; i < len; i++) {\r\n\t\t\tthis._handlers[i].disable();\r\n\t\t}\r\n\t},\r\n\r\n\t// @section Other Methods\r\n\r\n\t// @method whenReady(fn: Function, context?: Object): this\r\n\t// Runs the given function `fn` when the map gets initialized with\r\n\t// a view (center and zoom) and at least one layer, or immediately\r\n\t// if it's already initialized, optionally passing a function context.\r\n\twhenReady: function (callback, context) {\r\n\t\tif (this._loaded) {\r\n\t\t\tcallback.call(context || this, {target: this});\r\n\t\t} else {\r\n\t\t\tthis.on('load', callback, context);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\r\n\t// private methods for getting map state\r\n\r\n\t_getMapPanePos: function () {\r\n\t\treturn DomUtil.getPosition(this._mapPane) || new Point(0, 0);\r\n\t},\r\n\r\n\t_moved: function () {\r\n\t\tvar pos = this._getMapPanePos();\r\n\t\treturn pos && !pos.equals([0, 0]);\r\n\t},\r\n\r\n\t_getTopLeftPoint: function (center, zoom) {\r\n\t\tvar pixelOrigin = center && zoom !== undefined ?\r\n\t\t\tthis._getNewPixelOrigin(center, zoom) :\r\n\t\t\tthis.getPixelOrigin();\r\n\t\treturn pixelOrigin.subtract(this._getMapPanePos());\r\n\t},\r\n\r\n\t_getNewPixelOrigin: function (center, zoom) {\r\n\t\tvar viewHalf = this.getSize()._divideBy(2);\r\n\t\treturn this.project(center, zoom)._subtract(viewHalf)._add(this._getMapPanePos())._round();\r\n\t},\r\n\r\n\t_latLngToNewLayerPoint: function (latlng, zoom, center) {\r\n\t\tvar topLeft = this._getNewPixelOrigin(center, zoom);\r\n\t\treturn this.project(latlng, zoom)._subtract(topLeft);\r\n\t},\r\n\r\n\t_latLngBoundsToNewLayerBounds: function (latLngBounds, zoom, center) {\r\n\t\tvar topLeft = this._getNewPixelOrigin(center, zoom);\r\n\t\treturn toBounds([\r\n\t\t\tthis.project(latLngBounds.getSouthWest(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getNorthWest(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getSouthEast(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getNorthEast(), zoom)._subtract(topLeft)\r\n\t\t]);\r\n\t},\r\n\r\n\t// layer point of the current center\r\n\t_getCenterLayerPoint: function () {\r\n\t\treturn this.containerPointToLayerPoint(this.getSize()._divideBy(2));\r\n\t},\r\n\r\n\t// offset of the specified place to the current center in pixels\r\n\t_getCenterOffset: function (latlng) {\r\n\t\treturn this.latLngToLayerPoint(latlng).subtract(this._getCenterLayerPoint());\r\n\t},\r\n\r\n\t// adjust center for view to get inside bounds\r\n\t_limitCenter: function (center, zoom, bounds) {\r\n\r\n\t\tif (!bounds) { return center; }\r\n\r\n\t\tvar centerPoint = this.project(center, zoom),\r\n\t\t    viewHalf = this.getSize().divideBy(2),\r\n\t\t    viewBounds = new Bounds(centerPoint.subtract(viewHalf), centerPoint.add(viewHalf)),\r\n\t\t    offset = this._getBoundsOffset(viewBounds, bounds, zoom);\r\n\r\n\t\t// If offset is less than a pixel, ignore.\r\n\t\t// This prevents unstable projections from getting into\r\n\t\t// an infinite loop of tiny offsets.\r\n\t\tif (Math.abs(offset.x) <= 1 && Math.abs(offset.y) <= 1) {\r\n\t\t\treturn center;\r\n\t\t}\r\n\r\n\t\treturn this.unproject(centerPoint.add(offset), zoom);\r\n\t},\r\n\r\n\t// adjust offset for view to get inside bounds\r\n\t_limitOffset: function (offset, bounds) {\r\n\t\tif (!bounds) { return offset; }\r\n\r\n\t\tvar viewBounds = this.getPixelBounds(),\r\n\t\t    newBounds = new Bounds(viewBounds.min.add(offset), viewBounds.max.add(offset));\r\n\r\n\t\treturn offset.add(this._getBoundsOffset(newBounds, bounds));\r\n\t},\r\n\r\n\t// returns offset needed for pxBounds to get inside maxBounds at a specified zoom\r\n\t_getBoundsOffset: function (pxBounds, maxBounds, zoom) {\r\n\t\tvar projectedMaxBounds = toBounds(\r\n\t\t        this.project(maxBounds.getNorthEast(), zoom),\r\n\t\t        this.project(maxBounds.getSouthWest(), zoom)\r\n\t\t    ),\r\n\t\t    minOffset = projectedMaxBounds.min.subtract(pxBounds.min),\r\n\t\t    maxOffset = projectedMaxBounds.max.subtract(pxBounds.max),\r\n\r\n\t\t    dx = this._rebound(minOffset.x, -maxOffset.x),\r\n\t\t    dy = this._rebound(minOffset.y, -maxOffset.y);\r\n\r\n\t\treturn new Point(dx, dy);\r\n\t},\r\n\r\n\t_rebound: function (left, right) {\r\n\t\treturn left + right > 0 ?\r\n\t\t\tMath.round(left - right) / 2 :\r\n\t\t\tMath.max(0, Math.ceil(left)) - Math.max(0, Math.floor(right));\r\n\t},\r\n\r\n\t_limitZoom: function (zoom) {\r\n\t\tvar min = this.getMinZoom(),\r\n\t\t    max = this.getMaxZoom(),\r\n\t\t    snap = Browser.any3d ? this.options.zoomSnap : 1;\r\n\t\tif (snap) {\r\n\t\t\tzoom = Math.round(zoom / snap) * snap;\r\n\t\t}\r\n\t\treturn Math.max(min, Math.min(max, zoom));\r\n\t},\r\n\r\n\t_onPanTransitionStep: function () {\r\n\t\tthis.fire('move');\r\n\t},\r\n\r\n\t_onPanTransitionEnd: function () {\r\n\t\tDomUtil.removeClass(this._mapPane, 'leaflet-pan-anim');\r\n\t\tthis.fire('moveend');\r\n\t},\r\n\r\n\t_tryAnimatedPan: function (center, options) {\r\n\t\t// difference between the new and current centers in pixels\r\n\t\tvar offset = this._getCenterOffset(center)._trunc();\r\n\r\n\t\t// don't animate too far unless animate: true specified in options\r\n\t\tif ((options && options.animate) !== true && !this.getSize().contains(offset)) { return false; }\r\n\r\n\t\tthis.panBy(offset, options);\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_createAnimProxy: function () {\r\n\r\n\t\tvar proxy = this._proxy = DomUtil.create('div', 'leaflet-proxy leaflet-zoom-animated');\r\n\t\tthis._panes.mapPane.appendChild(proxy);\r\n\r\n\t\tthis.on('zoomanim', function (e) {\r\n\t\t\tvar prop = DomUtil.TRANSFORM,\r\n\t\t\t    transform = this._proxy.style[prop];\r\n\r\n\t\t\tDomUtil.setTransform(this._proxy, this.project(e.center, e.zoom), this.getZoomScale(e.zoom, 1));\r\n\r\n\t\t\t// workaround for case when transform is the same and so transitionend event is not fired\r\n\t\t\tif (transform === this._proxy.style[prop] && this._animatingZoom) {\r\n\t\t\t\tthis._onZoomTransitionEnd();\r\n\t\t\t}\r\n\t\t}, this);\r\n\r\n\t\tthis.on('load moveend', this._animMoveEnd, this);\r\n\r\n\t\tthis._on('unload', this._destroyAnimProxy, this);\r\n\t},\r\n\r\n\t_destroyAnimProxy: function () {\r\n\t\tDomUtil.remove(this._proxy);\r\n\t\tthis.off('load moveend', this._animMoveEnd, this);\r\n\t\tdelete this._proxy;\r\n\t},\r\n\r\n\t_animMoveEnd: function () {\r\n\t\tvar c = this.getCenter(),\r\n\t\t    z = this.getZoom();\r\n\t\tDomUtil.setTransform(this._proxy, this.project(c, z), this.getZoomScale(z, 1));\r\n\t},\r\n\r\n\t_catchTransitionEnd: function (e) {\r\n\t\tif (this._animatingZoom && e.propertyName.indexOf('transform') >= 0) {\r\n\t\t\tthis._onZoomTransitionEnd();\r\n\t\t}\r\n\t},\r\n\r\n\t_nothingToAnimate: function () {\r\n\t\treturn !this._container.getElementsByClassName('leaflet-zoom-animated').length;\r\n\t},\r\n\r\n\t_tryAnimatedZoom: function (center, zoom, options) {\r\n\r\n\t\tif (this._animatingZoom) { return true; }\r\n\r\n\t\toptions = options || {};\r\n\r\n\t\t// don't animate if disabled, not supported or zoom difference is too large\r\n\t\tif (!this._zoomAnimated || options.animate === false || this._nothingToAnimate() ||\r\n\t\t        Math.abs(zoom - this._zoom) > this.options.zoomAnimationThreshold) { return false; }\r\n\r\n\t\t// offset is the pixel coords of the zoom origin relative to the current center\r\n\t\tvar scale = this.getZoomScale(zoom),\r\n\t\t    offset = this._getCenterOffset(center)._divideBy(1 - 1 / scale);\r\n\r\n\t\t// don't animate if the zoom origin isn't within one screen from the current center, unless forced\r\n\t\tif (options.animate !== true && !this.getSize().contains(offset)) { return false; }\r\n\r\n\t\tUtil.requestAnimFrame(function () {\r\n\t\t\tthis\r\n\t\t\t    ._moveStart(true, options.noMoveStart || false)\r\n\t\t\t    ._animateZoom(center, zoom, true);\r\n\t\t}, this);\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_animateZoom: function (center, zoom, startAnim, noUpdate) {\r\n\t\tif (!this._mapPane) { return; }\r\n\r\n\t\tif (startAnim) {\r\n\t\t\tthis._animatingZoom = true;\r\n\r\n\t\t\t// remember what center/zoom to set after animation\r\n\t\t\tthis._animateToCenter = center;\r\n\t\t\tthis._animateToZoom = zoom;\r\n\r\n\t\t\tDomUtil.addClass(this._mapPane, 'leaflet-zoom-anim');\r\n\t\t}\r\n\r\n\t\t// @section Other Events\r\n\t\t// @event zoomanim: ZoomAnimEvent\r\n\t\t// Fired at least once per zoom animation. For continuous zoom, like pinch zooming, fired once per frame during zoom.\r\n\t\tthis.fire('zoomanim', {\r\n\t\t\tcenter: center,\r\n\t\t\tzoom: zoom,\r\n\t\t\tnoUpdate: noUpdate\r\n\t\t});\r\n\r\n\t\tif (!this._tempFireZoomEvent) {\r\n\t\t\tthis._tempFireZoomEvent = this._zoom !== this._animateToZoom;\r\n\t\t}\r\n\r\n\t\tthis._move(this._animateToCenter, this._animateToZoom, undefined, true);\r\n\r\n\t\t// Work around webkit not firing 'transitionend', see https://github.com/Leaflet/Leaflet/issues/3689, 2693\r\n\t\tsetTimeout(Util.bind(this._onZoomTransitionEnd, this), 250);\r\n\t},\r\n\r\n\t_onZoomTransitionEnd: function () {\r\n\t\tif (!this._animatingZoom) { return; }\r\n\r\n\t\tif (this._mapPane) {\r\n\t\t\tDomUtil.removeClass(this._mapPane, 'leaflet-zoom-anim');\r\n\t\t}\r\n\r\n\t\tthis._animatingZoom = false;\r\n\r\n\t\tthis._move(this._animateToCenter, this._animateToZoom, undefined, true);\r\n\r\n\t\tif (this._tempFireZoomEvent) {\r\n\t\t\tthis.fire('zoom');\r\n\t\t}\r\n\t\tdelete this._tempFireZoomEvent;\r\n\r\n\t\tthis.fire('move');\r\n\r\n\t\tthis._moveEnd(true);\r\n\t}\r\n});\r\n\r\n// @section\r\n\r\n// @factory L.map(id: String, options?: Map options)\r\n// Instantiates a map object given the DOM ID of a `<div>` element\r\n// and optionally an object literal with `Map options`.\r\n//\r\n// @alternative\r\n// @factory L.map(el: HTMLElement, options?: Map options)\r\n// Instantiates a map object given an instance of a `<div>` HTML element\r\n// and optionally an object literal with `Map options`.\r\nexport function createMap(id, options) {\r\n\treturn new Map(id, options);\r\n}\r\n", "\r\nimport {Class} from '../core/Class';\r\nimport {Map} from '../map/Map';\r\nimport * as Util from '../core/Util';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class Control\r\n * @aka L.Control\r\n * @inherits Class\r\n *\r\n * L.Control is a base class for implementing map controls. Handles positioning.\r\n * All other controls extend from this class.\r\n */\r\n\r\nexport var Control = Class.extend({\r\n\t// @section\r\n\t// @aka Control Options\r\n\toptions: {\r\n\t\t// @option position: String = 'topright'\r\n\t\t// The position of the control (one of the map corners). Possible values are `'topleft'`,\r\n\t\t// `'topright'`, `'bottomleft'` or `'bottomright'`\r\n\t\tposition: 'topright'\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tUtil.setOptions(this, options);\r\n\t},\r\n\r\n\t/* @section\r\n\t * Classes extending L.Control will inherit the following methods:\r\n\t *\r\n\t * @method getPosition: string\r\n\t * Returns the position of the control.\r\n\t */\r\n\tgetPosition: function () {\r\n\t\treturn this.options.position;\r\n\t},\r\n\r\n\t// @method setPosition(position: string): this\r\n\t// Sets the position of the control.\r\n\tsetPosition: function (position) {\r\n\t\tvar map = this._map;\r\n\r\n\t\tif (map) {\r\n\t\t\tmap.removeControl(this);\r\n\t\t}\r\n\r\n\t\tthis.options.position = position;\r\n\r\n\t\tif (map) {\r\n\t\t\tmap.addControl(this);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getContainer: HTMLElement\r\n\t// Returns the HTMLElement that contains the control.\r\n\tgetContainer: function () {\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\t// @method addTo(map: Map): this\r\n\t// Adds the control to the given map.\r\n\taddTo: function (map) {\r\n\t\tthis.remove();\r\n\t\tthis._map = map;\r\n\r\n\t\tvar container = this._container = this.onAdd(map),\r\n\t\t    pos = this.getPosition(),\r\n\t\t    corner = map._controlCorners[pos];\r\n\r\n\t\tDomUtil.addClass(container, 'leaflet-control');\r\n\r\n\t\tif (pos.indexOf('bottom') !== -1) {\r\n\t\t\tcorner.insertBefore(container, corner.firstChild);\r\n\t\t} else {\r\n\t\t\tcorner.appendChild(container);\r\n\t\t}\r\n\r\n\t\tthis._map.on('unload', this.remove, this);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method remove: this\r\n\t// Removes the control from the map it is currently active on.\r\n\tremove: function () {\r\n\t\tif (!this._map) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tDomUtil.remove(this._container);\r\n\r\n\t\tif (this.onRemove) {\r\n\t\t\tthis.onRemove(this._map);\r\n\t\t}\r\n\r\n\t\tthis._map.off('unload', this.remove, this);\r\n\t\tthis._map = null;\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_refocusOnMap: function (e) {\r\n\t\t// if map exists and event is not a keyboard event\r\n\t\tif (this._map && e && e.screenX > 0 && e.screenY > 0) {\r\n\t\t\tthis._map.getContainer().focus();\r\n\t\t}\r\n\t}\r\n});\r\n\r\nexport var control = function (options) {\r\n\treturn new Control(options);\r\n};\r\n\r\n/* @section Extension methods\r\n * @uninheritable\r\n *\r\n * Every control should extend from `L.Control` and (re-)implement the following methods.\r\n *\r\n * @method onAdd(map: Map): HTMLElement\r\n * Should return the container DOM element for the control and add listeners on relevant map events. Called on [`control.addTo(map)`](#control-addTo).\r\n *\r\n * @method onRemove(map: Map)\r\n * Optional method. Should contain all clean up code that removes the listeners previously added in [`onAdd`](#control-onadd). Called on [`control.remove()`](#control-remove).\r\n */\r\n\r\n/* @namespace Map\r\n * @section Methods for Layers and Controls\r\n */\r\nMap.include({\r\n\t// @method addControl(control: Control): this\r\n\t// Adds the given control to the map\r\n\taddControl: function (control) {\r\n\t\tcontrol.addTo(this);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeControl(control: Control): this\r\n\t// Removes the given control from the map\r\n\tremoveControl: function (control) {\r\n\t\tcontrol.remove();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_initControlPos: function () {\r\n\t\tvar corners = this._controlCorners = {},\r\n\t\t    l = 'leaflet-',\r\n\t\t    container = this._controlContainer =\r\n\t\t            DomUtil.create('div', l + 'control-container', this._container);\r\n\r\n\t\tfunction createCorner(vSide, hSide) {\r\n\t\t\tvar className = l + vSide + ' ' + l + hSide;\r\n\r\n\t\t\tcorners[vSide + hSide] = DomUtil.create('div', className, container);\r\n\t\t}\r\n\r\n\t\tcreateCorner('top', 'left');\r\n\t\tcreateCorner('top', 'right');\r\n\t\tcreateCorner('bottom', 'left');\r\n\t\tcreateCorner('bottom', 'right');\r\n\t},\r\n\r\n\t_clearControlPos: function () {\r\n\t\tfor (var i in this._controlCorners) {\r\n\t\t\tDomUtil.remove(this._controlCorners[i]);\r\n\t\t}\r\n\t\tDomUtil.remove(this._controlContainer);\r\n\t\tdelete this._controlCorners;\r\n\t\tdelete this._controlContainer;\r\n\t}\r\n});\r\n", "\r\nimport {Control} from './Control';\r\nimport * as Util from '../core/Util';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class Control.Layers\r\n * @aka L.Control.Layers\r\n * @inherits Control\r\n *\r\n * The layers control gives users the ability to switch between different base layers and switch overlays on/off (check out the [detailed example](https://leafletjs.com/examples/layers-control/)). Extends `Control`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var baseLayers = {\r\n * \t\"Mapbox\": mapbox,\r\n * \t\"OpenStreetMap\": osm\r\n * };\r\n *\r\n * var overlays = {\r\n * \t\"Marker\": marker,\r\n * \t\"Roads\": roadsLayer\r\n * };\r\n *\r\n * L.control.layers(baseLayers, overlays).addTo(map);\r\n * ```\r\n *\r\n * The `baseLayers` and `overlays` parameters are object literals with layer names as keys and `Layer` objects as values:\r\n *\r\n * ```js\r\n * {\r\n *     \"<someName1>\": layer1,\r\n *     \"<someName2>\": layer2\r\n * }\r\n * ```\r\n *\r\n * The layer names can contain HTML, which allows you to add additional styling to the items:\r\n *\r\n * ```js\r\n * {\"<img src='my-layer-icon' /> <span class='my-layer-item'>My Layer</span>\": myLayer}\r\n * ```\r\n */\r\n\r\nexport var Layers = Control.extend({\r\n\t// @section\r\n\t// @aka Control.Layers options\r\n\toptions: {\r\n\t\t// @option collapsed: Boolean = true\r\n\t\t// If `true`, the control will be collapsed into an icon and expanded on mouse hover, touch, or keyboard activation.\r\n\t\tcollapsed: true,\r\n\t\tposition: 'topright',\r\n\r\n\t\t// @option autoZIndex: Boolean = true\r\n\t\t// If `true`, the control will assign zIndexes in increasing order to all of its layers so that the order is preserved when switching them on/off.\r\n\t\tautoZIndex: true,\r\n\r\n\t\t// @option hideSingleBase: Boolean = false\r\n\t\t// If `true`, the base layers in the control will be hidden when there is only one.\r\n\t\thideSingleBase: false,\r\n\r\n\t\t// @option sortLayers: Boolean = false\r\n\t\t// Whether to sort the layers. When `false`, layers will keep the order\r\n\t\t// in which they were added to the control.\r\n\t\tsortLayers: false,\r\n\r\n\t\t// @option sortFunction: Function = *\r\n\t\t// A [compare function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)\r\n\t\t// that will be used for sorting the layers, when `sortLayers` is `true`.\r\n\t\t// The function receives both the `L.Layer` instances and their names, as in\r\n\t\t// `sortFunction(layerA, layerB, nameA, nameB)`.\r\n\t\t// By default, it sorts layers alphabetically by their name.\r\n\t\tsortFunction: function (layerA, layerB, nameA, nameB) {\r\n\t\t\treturn nameA < nameB ? -1 : (nameB < nameA ? 1 : 0);\r\n\t\t}\r\n\t},\r\n\r\n\tinitialize: function (baseLayers, overlays, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._layerControlInputs = [];\r\n\t\tthis._layers = [];\r\n\t\tthis._lastZIndex = 0;\r\n\t\tthis._handlingClick = false;\r\n\t\tthis._preventClick = false;\r\n\r\n\t\tfor (var i in baseLayers) {\r\n\t\t\tthis._addLayer(baseLayers[i], i);\r\n\t\t}\r\n\r\n\t\tfor (i in overlays) {\r\n\t\t\tthis._addLayer(overlays[i], i, true);\r\n\t\t}\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis._initLayout();\r\n\t\tthis._update();\r\n\r\n\t\tthis._map = map;\r\n\t\tmap.on('zoomend', this._checkDisabledLayers, this);\r\n\r\n\t\tfor (var i = 0; i < this._layers.length; i++) {\r\n\t\t\tthis._layers[i].layer.on('add remove', this._onLayerChange, this);\r\n\t\t}\r\n\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\taddTo: function (map) {\r\n\t\tControl.prototype.addTo.call(this, map);\r\n\t\t// Trigger expand after Layers Control has been inserted into DOM so that is now has an actual height.\r\n\t\treturn this._expandIfNotCollapsed();\r\n\t},\r\n\r\n\tonRemove: function () {\r\n\t\tthis._map.off('zoomend', this._checkDisabledLayers, this);\r\n\r\n\t\tfor (var i = 0; i < this._layers.length; i++) {\r\n\t\t\tthis._layers[i].layer.off('add remove', this._onLayerChange, this);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method addBaseLayer(layer: Layer, name: String): this\r\n\t// Adds a base layer (radio button entry) with the given name to the control.\r\n\taddBaseLayer: function (layer, name) {\r\n\t\tthis._addLayer(layer, name);\r\n\t\treturn (this._map) ? this._update() : this;\r\n\t},\r\n\r\n\t// @method addOverlay(layer: Layer, name: String): this\r\n\t// Adds an overlay (checkbox entry) with the given name to the control.\r\n\taddOverlay: function (layer, name) {\r\n\t\tthis._addLayer(layer, name, true);\r\n\t\treturn (this._map) ? this._update() : this;\r\n\t},\r\n\r\n\t// @method removeLayer(layer: Layer): this\r\n\t// Remove the given layer from the control.\r\n\tremoveLayer: function (layer) {\r\n\t\tlayer.off('add remove', this._onLayerChange, this);\r\n\r\n\t\tvar obj = this._getLayer(Util.stamp(layer));\r\n\t\tif (obj) {\r\n\t\t\tthis._layers.splice(this._layers.indexOf(obj), 1);\r\n\t\t}\r\n\t\treturn (this._map) ? this._update() : this;\r\n\t},\r\n\r\n\t// @method expand(): this\r\n\t// Expand the control container if collapsed.\r\n\texpand: function () {\r\n\t\tDomUtil.addClass(this._container, 'leaflet-control-layers-expanded');\r\n\t\tthis._section.style.height = null;\r\n\t\tvar acceptableHeight = this._map.getSize().y - (this._container.offsetTop + 50);\r\n\t\tif (acceptableHeight < this._section.clientHeight) {\r\n\t\t\tDomUtil.addClass(this._section, 'leaflet-control-layers-scrollbar');\r\n\t\t\tthis._section.style.height = acceptableHeight + 'px';\r\n\t\t} else {\r\n\t\t\tDomUtil.removeClass(this._section, 'leaflet-control-layers-scrollbar');\r\n\t\t}\r\n\t\tthis._checkDisabledLayers();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method collapse(): this\r\n\t// Collapse the control container if expanded.\r\n\tcollapse: function () {\r\n\t\tDomUtil.removeClass(this._container, 'leaflet-control-layers-expanded');\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_initLayout: function () {\r\n\t\tvar className = 'leaflet-control-layers',\r\n\t\t    container = this._container = DomUtil.create('div', className),\r\n\t\t    collapsed = this.options.collapsed;\r\n\r\n\t\t// makes this work on IE touch devices by stopping it from firing a mouseout event when the touch is released\r\n\t\tcontainer.setAttribute('aria-haspopup', true);\r\n\r\n\t\tDomEvent.disableClickPropagation(container);\r\n\t\tDomEvent.disableScrollPropagation(container);\r\n\r\n\t\tvar section = this._section = DomUtil.create('section', className + '-list');\r\n\r\n\t\tif (collapsed) {\r\n\t\t\tthis._map.on('click', this.collapse, this);\r\n\r\n\t\t\tDomEvent.on(container, {\r\n\t\t\t\tmouseenter: this._expandSafely,\r\n\t\t\t\tmouseleave: this.collapse\r\n\t\t\t}, this);\r\n\t\t}\r\n\r\n\t\tvar link = this._layersLink = DomUtil.create('a', className + '-toggle', container);\r\n\t\tlink.href = '#';\r\n\t\tlink.title = 'Layers';\r\n\t\tlink.setAttribute('role', 'button');\r\n\r\n\t\tDomEvent.on(link, {\r\n\t\t\tkeydown: function (e) {\r\n\t\t\t\tif (e.keyCode === 13) {\r\n\t\t\t\t\tthis._expandSafely();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t// Certain screen readers intercept the key event and instead send a click event\r\n\t\t\tclick: function (e) {\r\n\t\t\t\tDomEvent.preventDefault(e);\r\n\t\t\t\tthis._expandSafely();\r\n\t\t\t}\r\n\t\t}, this);\r\n\r\n\t\tif (!collapsed) {\r\n\t\t\tthis.expand();\r\n\t\t}\r\n\r\n\t\tthis._baseLayersList = DomUtil.create('div', className + '-base', section);\r\n\t\tthis._separator = DomUtil.create('div', className + '-separator', section);\r\n\t\tthis._overlaysList = DomUtil.create('div', className + '-overlays', section);\r\n\r\n\t\tcontainer.appendChild(section);\r\n\t},\r\n\r\n\t_getLayer: function (id) {\r\n\t\tfor (var i = 0; i < this._layers.length; i++) {\r\n\r\n\t\t\tif (this._layers[i] && Util.stamp(this._layers[i].layer) === id) {\r\n\t\t\t\treturn this._layers[i];\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_addLayer: function (layer, name, overlay) {\r\n\t\tif (this._map) {\r\n\t\t\tlayer.on('add remove', this._onLayerChange, this);\r\n\t\t}\r\n\r\n\t\tthis._layers.push({\r\n\t\t\tlayer: layer,\r\n\t\t\tname: name,\r\n\t\t\toverlay: overlay\r\n\t\t});\r\n\r\n\t\tif (this.options.sortLayers) {\r\n\t\t\tthis._layers.sort(Util.bind(function (a, b) {\r\n\t\t\t\treturn this.options.sortFunction(a.layer, b.layer, a.name, b.name);\r\n\t\t\t}, this));\r\n\t\t}\r\n\r\n\t\tif (this.options.autoZIndex && layer.setZIndex) {\r\n\t\t\tthis._lastZIndex++;\r\n\t\t\tlayer.setZIndex(this._lastZIndex);\r\n\t\t}\r\n\r\n\t\tthis._expandIfNotCollapsed();\r\n\t},\r\n\r\n\t_update: function () {\r\n\t\tif (!this._container) { return this; }\r\n\r\n\t\tDomUtil.empty(this._baseLayersList);\r\n\t\tDomUtil.empty(this._overlaysList);\r\n\r\n\t\tthis._layerControlInputs = [];\r\n\t\tvar baseLayersPresent, overlaysPresent, i, obj, baseLayersCount = 0;\r\n\r\n\t\tfor (i = 0; i < this._layers.length; i++) {\r\n\t\t\tobj = this._layers[i];\r\n\t\t\tthis._addItem(obj);\r\n\t\t\toverlaysPresent = overlaysPresent || obj.overlay;\r\n\t\t\tbaseLayersPresent = baseLayersPresent || !obj.overlay;\r\n\t\t\tbaseLayersCount += !obj.overlay ? 1 : 0;\r\n\t\t}\r\n\r\n\t\t// Hide base layers section if there's only one layer.\r\n\t\tif (this.options.hideSingleBase) {\r\n\t\t\tbaseLayersPresent = baseLayersPresent && baseLayersCount > 1;\r\n\t\t\tthis._baseLayersList.style.display = baseLayersPresent ? '' : 'none';\r\n\t\t}\r\n\r\n\t\tthis._separator.style.display = overlaysPresent && baseLayersPresent ? '' : 'none';\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_onLayerChange: function (e) {\r\n\t\tif (!this._handlingClick) {\r\n\t\t\tthis._update();\r\n\t\t}\r\n\r\n\t\tvar obj = this._getLayer(Util.stamp(e.target));\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Layer events\r\n\t\t// @event baselayerchange: LayersControlEvent\r\n\t\t// Fired when the base layer is changed through the [layers control](#control-layers).\r\n\t\t// @event overlayadd: LayersControlEvent\r\n\t\t// Fired when an overlay is selected through the [layers control](#control-layers).\r\n\t\t// @event overlayremove: LayersControlEvent\r\n\t\t// Fired when an overlay is deselected through the [layers control](#control-layers).\r\n\t\t// @namespace Control.Layers\r\n\t\tvar type = obj.overlay ?\r\n\t\t\t(e.type === 'add' ? 'overlayadd' : 'overlayremove') :\r\n\t\t\t(e.type === 'add' ? 'baselayerchange' : null);\r\n\r\n\t\tif (type) {\r\n\t\t\tthis._map.fire(type, obj);\r\n\t\t}\r\n\t},\r\n\r\n\t// IE7 bugs out if you create a radio dynamically, so you have to do it this hacky way (see https://stackoverflow.com/a/119079)\r\n\t_createRadioElement: function (name, checked) {\r\n\r\n\t\tvar radioHtml = '<input type=\"radio\" class=\"leaflet-control-layers-selector\" name=\"' +\r\n\t\t\t\tname + '\"' + (checked ? ' checked=\"checked\"' : '') + '/>';\r\n\r\n\t\tvar radioFragment = document.createElement('div');\r\n\t\tradioFragment.innerHTML = radioHtml;\r\n\r\n\t\treturn radioFragment.firstChild;\r\n\t},\r\n\r\n\t_addItem: function (obj) {\r\n\t\tvar label = document.createElement('label'),\r\n\t\t    checked = this._map.hasLayer(obj.layer),\r\n\t\t    input;\r\n\r\n\t\tif (obj.overlay) {\r\n\t\t\tinput = document.createElement('input');\r\n\t\t\tinput.type = 'checkbox';\r\n\t\t\tinput.className = 'leaflet-control-layers-selector';\r\n\t\t\tinput.defaultChecked = checked;\r\n\t\t} else {\r\n\t\t\tinput = this._createRadioElement('leaflet-base-layers_' + Util.stamp(this), checked);\r\n\t\t}\r\n\r\n\t\tthis._layerControlInputs.push(input);\r\n\t\tinput.layerId = Util.stamp(obj.layer);\r\n\r\n\t\tDomEvent.on(input, 'click', this._onInputClick, this);\r\n\r\n\t\tvar name = document.createElement('span');\r\n\t\tname.innerHTML = ' ' + obj.name;\r\n\r\n\t\t// Helps from preventing layer control flicker when checkboxes are disabled\r\n\t\t// https://github.com/Leaflet/Leaflet/issues/2771\r\n\t\tvar holder = document.createElement('span');\r\n\r\n\t\tlabel.appendChild(holder);\r\n\t\tholder.appendChild(input);\r\n\t\tholder.appendChild(name);\r\n\r\n\t\tvar container = obj.overlay ? this._overlaysList : this._baseLayersList;\r\n\t\tcontainer.appendChild(label);\r\n\r\n\t\tthis._checkDisabledLayers();\r\n\t\treturn label;\r\n\t},\r\n\r\n\t_onInputClick: function () {\r\n\t\t// expanding the control on mobile with a click can cause adding a layer - we don't want this\r\n\t\tif (this._preventClick) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar inputs = this._layerControlInputs,\r\n\t\t    input, layer;\r\n\t\tvar addedLayers = [],\r\n\t\t    removedLayers = [];\r\n\r\n\t\tthis._handlingClick = true;\r\n\r\n\t\tfor (var i = inputs.length - 1; i >= 0; i--) {\r\n\t\t\tinput = inputs[i];\r\n\t\t\tlayer = this._getLayer(input.layerId).layer;\r\n\r\n\t\t\tif (input.checked) {\r\n\t\t\t\taddedLayers.push(layer);\r\n\t\t\t} else if (!input.checked) {\r\n\t\t\t\tremovedLayers.push(layer);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Bugfix issue 2318: Should remove all old layers before readding new ones\r\n\t\tfor (i = 0; i < removedLayers.length; i++) {\r\n\t\t\tif (this._map.hasLayer(removedLayers[i])) {\r\n\t\t\t\tthis._map.removeLayer(removedLayers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (i = 0; i < addedLayers.length; i++) {\r\n\t\t\tif (!this._map.hasLayer(addedLayers[i])) {\r\n\t\t\t\tthis._map.addLayer(addedLayers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._handlingClick = false;\r\n\r\n\t\tthis._refocusOnMap();\r\n\t},\r\n\r\n\t_checkDisabledLayers: function () {\r\n\t\tvar inputs = this._layerControlInputs,\r\n\t\t    input,\r\n\t\t    layer,\r\n\t\t    zoom = this._map.getZoom();\r\n\r\n\t\tfor (var i = inputs.length - 1; i >= 0; i--) {\r\n\t\t\tinput = inputs[i];\r\n\t\t\tlayer = this._getLayer(input.layerId).layer;\r\n\t\t\tinput.disabled = (layer.options.minZoom !== undefined && zoom < layer.options.minZoom) ||\r\n\t\t\t                 (layer.options.maxZoom !== undefined && zoom > layer.options.maxZoom);\r\n\r\n\t\t}\r\n\t},\r\n\r\n\t_expandIfNotCollapsed: function () {\r\n\t\tif (this._map && !this.options.collapsed) {\r\n\t\t\tthis.expand();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_expandSafely: function () {\r\n\t\tvar section = this._section;\r\n\t\tthis._preventClick = true;\r\n\t\tDomEvent.on(section, 'click', DomEvent.preventDefault);\r\n\t\tthis.expand();\r\n\t\tvar that = this;\r\n\t\tsetTimeout(function () {\r\n\t\t\tDomEvent.off(section, 'click', DomEvent.preventDefault);\r\n\t\t\tthat._preventClick = false;\r\n\t\t});\r\n\t}\r\n\r\n});\r\n\r\n\r\n// @factory L.control.layers(baselayers?: Object, overlays?: Object, options?: Control.Layers options)\r\n// Creates a layers control with the given layers. Base layers will be switched with radio buttons, while overlays will be switched with checkboxes. Note that all base layers should be passed in the base layers object, but only one should be added to the map during map instantiation.\r\nexport var layers = function (baseLayers, overlays, options) {\r\n\treturn new Layers(baseLayers, overlays, options);\r\n};\r\n", "\r\nimport {Control} from './Control';\r\nimport {Map} from '../map/Map';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport * as DomEvent from '../dom/DomEvent';\r\n\r\n/*\r\n * @class Control.Zoom\r\n * @aka L.Control.Zoom\r\n * @inherits Control\r\n *\r\n * A basic zoom control with two buttons (zoom in and zoom out). It is put on the map by default unless you set its [`zoomControl` option](#map-zoomcontrol) to `false`. Extends `Control`.\r\n */\r\n\r\nexport var Zoom = Control.extend({\r\n\t// @section\r\n\t// @aka Control.Zoom options\r\n\toptions: {\r\n\t\tposition: 'topleft',\r\n\r\n\t\t// @option zoomInText: String = '<span aria-hidden=\"true\">+</span>'\r\n\t\t// The text set on the 'zoom in' button.\r\n\t\tzoomInText: '<span aria-hidden=\"true\">+</span>',\r\n\r\n\t\t// @option zoomInTitle: String = 'Zoom in'\r\n\t\t// The title set on the 'zoom in' button.\r\n\t\tzoomInTitle: 'Zoom in',\r\n\r\n\t\t// @option zoomOutText: String = '<span aria-hidden=\"true\">&#x2212;</span>'\r\n\t\t// The text set on the 'zoom out' button.\r\n\t\tzoomOutText: '<span aria-hidden=\"true\">&#x2212;</span>',\r\n\r\n\t\t// @option zoomOutTitle: String = 'Zoom out'\r\n\t\t// The title set on the 'zoom out' button.\r\n\t\tzoomOutTitle: 'Zoom out'\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tvar zoomName = 'leaflet-control-zoom',\r\n\t\t    container = DomUtil.create('div', zoomName + ' leaflet-bar'),\r\n\t\t    options = this.options;\r\n\r\n\t\tthis._zoomInButton  = this._createButton(options.zoomInText, options.zoomInTitle,\r\n\t\t        zoomName + '-in',  container, this._zoomIn);\r\n\t\tthis._zoomOutButton = this._createButton(options.zoomOutText, options.zoomOutTitle,\r\n\t\t        zoomName + '-out', container, this._zoomOut);\r\n\r\n\t\tthis._updateDisabled();\r\n\t\tmap.on('zoomend zoomlevelschange', this._updateDisabled, this);\r\n\r\n\t\treturn container;\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tmap.off('zoomend zoomlevelschange', this._updateDisabled, this);\r\n\t},\r\n\r\n\tdisable: function () {\r\n\t\tthis._disabled = true;\r\n\t\tthis._updateDisabled();\r\n\t\treturn this;\r\n\t},\r\n\r\n\tenable: function () {\r\n\t\tthis._disabled = false;\r\n\t\tthis._updateDisabled();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_zoomIn: function (e) {\r\n\t\tif (!this._disabled && this._map._zoom < this._map.getMaxZoom()) {\r\n\t\t\tthis._map.zoomIn(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));\r\n\t\t}\r\n\t},\r\n\r\n\t_zoomOut: function (e) {\r\n\t\tif (!this._disabled && this._map._zoom > this._map.getMinZoom()) {\r\n\t\t\tthis._map.zoomOut(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));\r\n\t\t}\r\n\t},\r\n\r\n\t_createButton: function (html, title, className, container, fn) {\r\n\t\tvar link = DomUtil.create('a', className, container);\r\n\t\tlink.innerHTML = html;\r\n\t\tlink.href = '#';\r\n\t\tlink.title = title;\r\n\r\n\t\t/*\r\n\t\t * Will force screen readers like VoiceOver to read this as \"Zoom in - button\"\r\n\t\t */\r\n\t\tlink.setAttribute('role', 'button');\r\n\t\tlink.setAttribute('aria-label', title);\r\n\r\n\t\tDomEvent.disableClickPropagation(link);\r\n\t\tDomEvent.on(link, 'click', DomEvent.stop);\r\n\t\tDomEvent.on(link, 'click', fn, this);\r\n\t\tDomEvent.on(link, 'click', this._refocusOnMap, this);\r\n\r\n\t\treturn link;\r\n\t},\r\n\r\n\t_updateDisabled: function () {\r\n\t\tvar map = this._map,\r\n\t\t    className = 'leaflet-disabled';\r\n\r\n\t\tDomUtil.removeClass(this._zoomInButton, className);\r\n\t\tDomUtil.removeClass(this._zoomOutButton, className);\r\n\t\tthis._zoomInButton.setAttribute('aria-disabled', 'false');\r\n\t\tthis._zoomOutButton.setAttribute('aria-disabled', 'false');\r\n\r\n\t\tif (this._disabled || map._zoom === map.getMinZoom()) {\r\n\t\t\tDomUtil.addClass(this._zoomOutButton, className);\r\n\t\t\tthis._zoomOutButton.setAttribute('aria-disabled', 'true');\r\n\t\t}\r\n\t\tif (this._disabled || map._zoom === map.getMaxZoom()) {\r\n\t\t\tDomUtil.addClass(this._zoomInButton, className);\r\n\t\t\tthis._zoomInButton.setAttribute('aria-disabled', 'true');\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// @namespace Map\r\n// @section Control options\r\n// @option zoomControl: Boolean = true\r\n// Whether a [zoom control](#control-zoom) is added to the map by default.\r\nMap.mergeOptions({\r\n\tzoomControl: true\r\n});\r\n\r\nMap.addInitHook(function () {\r\n\tif (this.options.zoomControl) {\r\n\t\t// @section Controls\r\n\t\t// @property zoomControl: Control.Zoom\r\n\t\t// The default zoom control (only available if the\r\n\t\t// [`zoomControl` option](#map-zoomcontrol) was `true` when creating the map).\r\n\t\tthis.zoomControl = new Zoom();\r\n\t\tthis.addControl(this.zoomControl);\r\n\t}\r\n});\r\n\r\n// @namespace Control.Zoom\r\n// @factory L.control.zoom(options: Control.Zoom options)\r\n// Creates a zoom control\r\nexport var zoom = function (options) {\r\n\treturn new Zoom(options);\r\n};\r\n", "\nimport {Control} from './Control';\nimport * as DomUtil from '../dom/DomUtil';\n\n/*\n * @class Control.Scale\n * @aka L.Control.Scale\n * @inherits Control\n *\n * A simple scale control that shows the scale of the current center of screen in metric (m/km) and imperial (mi/ft) systems. Extends `Control`.\n *\n * @example\n *\n * ```js\n * L.control.scale().addTo(map);\n * ```\n */\n\nexport var Scale = Control.extend({\n\t// @section\n\t// @aka Control.Scale options\n\toptions: {\n\t\tposition: 'bottomleft',\n\n\t\t// @option maxWidth: Number = 100\n\t\t// Maximum width of the control in pixels. The width is set dynamically to show round values (e.g. 100, 200, 500).\n\t\tmaxWidth: 100,\n\n\t\t// @option metric: Boolean = True\n\t\t// Whether to show the metric scale line (m/km).\n\t\tmetric: true,\n\n\t\t// @option imperial: Boolean = True\n\t\t// Whether to show the imperial scale line (mi/ft).\n\t\timperial: true\n\n\t\t// @option updateWhenIdle: Boolean = false\n\t\t// If `true`, the control is updated on [`moveend`](#map-moveend), otherwise it's always up-to-date (updated on [`move`](#map-move)).\n\t},\n\n\tonAdd: function (map) {\n\t\tvar className = 'leaflet-control-scale',\n\t\t    container = DomUtil.create('div', className),\n\t\t    options = this.options;\n\n\t\tthis._addScales(options, className + '-line', container);\n\n\t\tmap.on(options.updateWhenIdle ? 'moveend' : 'move', this._update, this);\n\t\tmap.whenReady(this._update, this);\n\n\t\treturn container;\n\t},\n\n\tonRemove: function (map) {\n\t\tmap.off(this.options.updateWhenIdle ? 'moveend' : 'move', this._update, this);\n\t},\n\n\t_addScales: function (options, className, container) {\n\t\tif (options.metric) {\n\t\t\tthis._mScale = DomUtil.create('div', className, container);\n\t\t}\n\t\tif (options.imperial) {\n\t\t\tthis._iScale = DomUtil.create('div', className, container);\n\t\t}\n\t},\n\n\t_update: function () {\n\t\tvar map = this._map,\n\t\t    y = map.getSize().y / 2;\n\n\t\tvar maxMeters = map.distance(\n\t\t\tmap.containerPointToLatLng([0, y]),\n\t\t\tmap.containerPointToLatLng([this.options.maxWidth, y]));\n\n\t\tthis._updateScales(maxMeters);\n\t},\n\n\t_updateScales: function (maxMeters) {\n\t\tif (this.options.metric && maxMeters) {\n\t\t\tthis._updateMetric(maxMeters);\n\t\t}\n\t\tif (this.options.imperial && maxMeters) {\n\t\t\tthis._updateImperial(maxMeters);\n\t\t}\n\t},\n\n\t_updateMetric: function (maxMeters) {\n\t\tvar meters = this._getRoundNum(maxMeters),\n\t\t    label = meters < 1000 ? meters + ' m' : (meters / 1000) + ' km';\n\n\t\tthis._updateScale(this._mScale, label, meters / maxMeters);\n\t},\n\n\t_updateImperial: function (maxMeters) {\n\t\tvar maxFeet = maxMeters * 3.2808399,\n\t\t    maxMiles, miles, feet;\n\n\t\tif (maxFeet > 5280) {\n\t\t\tmaxMiles = maxFeet / 5280;\n\t\t\tmiles = this._getRoundNum(maxMiles);\n\t\t\tthis._updateScale(this._iScale, miles + ' mi', miles / maxMiles);\n\n\t\t} else {\n\t\t\tfeet = this._getRoundNum(maxFeet);\n\t\t\tthis._updateScale(this._iScale, feet + ' ft', feet / maxFeet);\n\t\t}\n\t},\n\n\t_updateScale: function (scale, text, ratio) {\n\t\tscale.style.width = Math.round(this.options.maxWidth * ratio) + 'px';\n\t\tscale.innerHTML = text;\n\t},\n\n\t_getRoundNum: function (num) {\n\t\tvar pow10 = Math.pow(10, (Math.floor(num) + '').length - 1),\n\t\t    d = num / pow10;\n\n\t\td = d >= 10 ? 10 :\n\t\t    d >= 5 ? 5 :\n\t\t    d >= 3 ? 3 :\n\t\t    d >= 2 ? 2 : 1;\n\n\t\treturn pow10 * d;\n\t}\n});\n\n\n// @factory L.control.scale(options?: Control.Scale options)\n// Creates an scale control with the given options.\nexport var scale = function (options) {\n\treturn new Scale(options);\n};\n", "\r\nimport {Control} from './Control';\r\nimport {Map} from '../map/Map';\r\nimport * as Util from '../core/Util';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport Browser from '../core/Browser';\r\n\r\nvar ukrainianFlag = '<svg aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"8\" viewBox=\"0 0 12 8\" class=\"leaflet-attribution-flag\"><path fill=\"#4C7BE1\" d=\"M0 0h12v4H0z\"/><path fill=\"#FFD500\" d=\"M0 4h12v3H0z\"/><path fill=\"#E0BC00\" d=\"M0 7h12v1H0z\"/></svg>';\r\n\r\n\r\n/*\r\n * @class Control.Attribution\r\n * @aka L.Control.Attribution\r\n * @inherits Control\r\n *\r\n * The attribution control allows you to display attribution data in a small text box on a map. It is put on the map by default unless you set its [`attributionControl` option](#map-attributioncontrol) to `false`, and it fetches attribution texts from layers with the [`getAttribution` method](#layer-getattribution) automatically. Extends Control.\r\n */\r\n\r\nexport var Attribution = Control.extend({\r\n\t// @section\r\n\t// @aka Control.Attribution options\r\n\toptions: {\r\n\t\tposition: 'bottomright',\r\n\r\n\t\t// @option prefix: String|false = 'Leaflet'\r\n\t\t// The HTML text shown before the attributions. Pass `false` to disable.\r\n\t\tprefix: '<a href=\"https://leafletjs.com\" title=\"A JavaScript library for interactive maps\">' + (Browser.inlineSvg ? ukrainianFlag + ' ' : '') + 'Leaflet</a>'\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._attributions = {};\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tmap.attributionControl = this;\r\n\t\tthis._container = DomUtil.create('div', 'leaflet-control-attribution');\r\n\t\tDomEvent.disableClickPropagation(this._container);\r\n\r\n\t\t// TODO ugly, refactor\r\n\t\tfor (var i in map._layers) {\r\n\t\t\tif (map._layers[i].getAttribution) {\r\n\t\t\t\tthis.addAttribution(map._layers[i].getAttribution());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._update();\r\n\r\n\t\tmap.on('layeradd', this._addAttribution, this);\r\n\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tmap.off('layeradd', this._addAttribution, this);\r\n\t},\r\n\r\n\t_addAttribution: function (ev) {\r\n\t\tif (ev.layer.getAttribution) {\r\n\t\t\tthis.addAttribution(ev.layer.getAttribution());\r\n\t\t\tev.layer.once('remove', function () {\r\n\t\t\t\tthis.removeAttribution(ev.layer.getAttribution());\r\n\t\t\t}, this);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method setPrefix(prefix: String|false): this\r\n\t// The HTML text shown before the attributions. Pass `false` to disable.\r\n\tsetPrefix: function (prefix) {\r\n\t\tthis.options.prefix = prefix;\r\n\t\tthis._update();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method addAttribution(text: String): this\r\n\t// Adds an attribution text (e.g. `'&copy; OpenStreetMap contributors'`).\r\n\taddAttribution: function (text) {\r\n\t\tif (!text) { return this; }\r\n\r\n\t\tif (!this._attributions[text]) {\r\n\t\t\tthis._attributions[text] = 0;\r\n\t\t}\r\n\t\tthis._attributions[text]++;\r\n\r\n\t\tthis._update();\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeAttribution(text: String): this\r\n\t// Removes an attribution text.\r\n\tremoveAttribution: function (text) {\r\n\t\tif (!text) { return this; }\r\n\r\n\t\tif (this._attributions[text]) {\r\n\t\t\tthis._attributions[text]--;\r\n\t\t\tthis._update();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_update: function () {\r\n\t\tif (!this._map) { return; }\r\n\r\n\t\tvar attribs = [];\r\n\r\n\t\tfor (var i in this._attributions) {\r\n\t\t\tif (this._attributions[i]) {\r\n\t\t\t\tattribs.push(i);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar prefixAndAttribs = [];\r\n\r\n\t\tif (this.options.prefix) {\r\n\t\t\tprefixAndAttribs.push(this.options.prefix);\r\n\t\t}\r\n\t\tif (attribs.length) {\r\n\t\t\tprefixAndAttribs.push(attribs.join(', '));\r\n\t\t}\r\n\r\n\t\tthis._container.innerHTML = prefixAndAttribs.join(' <span aria-hidden=\"true\">|</span> ');\r\n\t}\r\n});\r\n\r\n// @namespace Map\r\n// @section Control options\r\n// @option attributionControl: Boolean = true\r\n// Whether a [attribution control](#control-attribution) is added to the map by default.\r\nMap.mergeOptions({\r\n\tattributionControl: true\r\n});\r\n\r\nMap.addInitHook(function () {\r\n\tif (this.options.attributionControl) {\r\n\t\tnew Attribution().addTo(this);\r\n\t}\r\n});\r\n\r\n// @namespace Control.Attribution\r\n// @factory L.control.attribution(options: Control.Attribution options)\r\n// Creates an attribution control.\r\nexport var attribution = function (options) {\r\n\treturn new Attribution(options);\r\n};\r\n", "import {Control, control} from './Control';\nimport {Layers, layers} from './Control.Layers';\nimport {Zoom, zoom} from './Control.Zoom';\nimport {Scale, scale} from './Control.Scale';\nimport {Attribution, attribution} from './Control.Attribution';\n\nControl.Layers = Layers;\nControl.Zoom = Zoom;\nControl.Scale = Scale;\nControl.Attribution = Attribution;\n\ncontrol.layers = layers;\ncontrol.zoom = zoom;\ncontrol.scale = scale;\ncontrol.attribution = attribution;\n\nexport {Control, control};\n", "import {Class} from './Class';\n\n/*\n\tL.Handler is a base class for handler classes that are used internally to inject\n\tinteraction features like dragging to classes like Map and Marker.\n*/\n\n// @class Handler\n// @aka L.Handler\n// Abstract class for map interaction handlers\n\nexport var Handler = Class.extend({\n\tinitialize: function (map) {\n\t\tthis._map = map;\n\t},\n\n\t// @method enable(): this\n\t// Enables the handler\n\tenable: function () {\n\t\tif (this._enabled) { return this; }\n\n\t\tthis._enabled = true;\n\t\tthis.addHooks();\n\t\treturn this;\n\t},\n\n\t// @method disable(): this\n\t// Disables the handler\n\tdisable: function () {\n\t\tif (!this._enabled) { return this; }\n\n\t\tthis._enabled = false;\n\t\tthis.removeHooks();\n\t\treturn this;\n\t},\n\n\t// @method enabled(): Boolean\n\t// Returns `true` if the handler is enabled\n\tenabled: function () {\n\t\treturn !!this._enabled;\n\t}\n\n\t// @section Extension methods\n\t// Classes inheriting from `Handler` must implement the two following methods:\n\t// @method addHooks()\n\t// Called when the handler is enabled, should add event hooks.\n\t// @method removeHooks()\n\t// Called when the handler is disabled, should remove the event hooks added previously.\n});\n\n// @section There is static function which can be called without instantiating L.Handler:\n// @function addTo(map: Map, name: String): this\n// Adds a new Handler to the given map with the given name.\nHandler.addTo = function (map, name) {\n\tmap.addHandler(name, this);\n\treturn this;\n};\n", "import Browser from './Browser';\nexport {Browser};\n\nexport {Class} from './Class';\n\nimport {Evented} from './Events';\nimport {Events} from './Events';\nexport {Evented};\nexport var Mixin = {Events: Events};\n\nexport {Handler} from './Handler';\n\nimport * as Util from './Util';\nexport {Util};\nexport {extend, bind, stamp, setOptions} from './Util';\n", "import {Evented} from '../core/Events';\r\nimport Browser from '../core/Browser';\r\nimport * as DomEvent from './DomEvent';\r\nimport * as DomUtil from './DomUtil';\r\nimport * as Util from '../core/Util';\r\nimport {Point} from '../geometry/Point';\r\n\r\n/*\r\n * @class Draggable\r\n * @aka L.Draggable\r\n * @inherits Evented\r\n *\r\n * A class for making DOM elements draggable (including touch support).\r\n * Used internally for map and marker dragging. Only works for elements\r\n * that were positioned with [`L.DomUtil.setPosition`](#domutil-setposition).\r\n *\r\n * @example\r\n * ```js\r\n * var draggable = new L.Draggable(elementToDrag);\r\n * draggable.enable();\r\n * ```\r\n */\r\n\r\nvar START = Browser.touch ? 'touchstart mousedown' : 'mousedown';\r\n\r\nexport var Draggable = Evented.extend({\r\n\r\n\toptions: {\r\n\t\t// @section\r\n\t\t// @aka Draggable options\r\n\t\t// @option clickTolerance: Number = 3\r\n\t\t// The max number of pixels a user can shift the mouse pointer during a click\r\n\t\t// for it to be considered a valid click (as opposed to a mouse drag).\r\n\t\tclickTolerance: 3\r\n\t},\r\n\r\n\t// @constructor L.Draggable(el: HTMLElement, dragHandle?: HTMLElement, preventOutline?: Boolean, options?: Draggable options)\r\n\t// Creates a `Draggable` object for moving `el` when you start dragging the `dragHandle` element (equals `el` itself by default).\r\n\tinitialize: function (element, dragStartTarget, preventOutline, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._element = element;\r\n\t\tthis._dragStartTarget = dragStartTarget || element;\r\n\t\tthis._preventOutline = preventOutline;\r\n\t},\r\n\r\n\t// @method enable()\r\n\t// Enables the dragging ability\r\n\tenable: function () {\r\n\t\tif (this._enabled) { return; }\r\n\r\n\t\tDomEvent.on(this._dragStartTarget, START, this._onDown, this);\r\n\r\n\t\tthis._enabled = true;\r\n\t},\r\n\r\n\t// @method disable()\r\n\t// Disables the dragging ability\r\n\tdisable: function () {\r\n\t\tif (!this._enabled) { return; }\r\n\r\n\t\t// If we're currently dragging this draggable,\r\n\t\t// disabling it counts as first ending the drag.\r\n\t\tif (Draggable._dragging === this) {\r\n\t\t\tthis.finishDrag(true);\r\n\t\t}\r\n\r\n\t\tDomEvent.off(this._dragStartTarget, START, this._onDown, this);\r\n\r\n\t\tthis._enabled = false;\r\n\t\tthis._moved = false;\r\n\t},\r\n\r\n\t_onDown: function (e) {\r\n\t\t// Ignore the event if disabled; this happens in IE11\r\n\t\t// under some circumstances, see #3666.\r\n\t\tif (!this._enabled) { return; }\r\n\r\n\t\tthis._moved = false;\r\n\r\n\t\tif (DomUtil.hasClass(this._element, 'leaflet-zoom-anim')) { return; }\r\n\r\n\t\tif (e.touches && e.touches.length !== 1) {\r\n\t\t\t// Finish dragging to avoid conflict with touchZoom\r\n\t\t\tif (Draggable._dragging === this) {\r\n\t\t\t\tthis.finishDrag();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (Draggable._dragging || e.shiftKey || ((e.which !== 1) && (e.button !== 1) && !e.touches)) { return; }\r\n\t\tDraggable._dragging = this;  // Prevent dragging multiple objects at once.\r\n\r\n\t\tif (this._preventOutline) {\r\n\t\t\tDomUtil.preventOutline(this._element);\r\n\t\t}\r\n\r\n\t\tDomUtil.disableImageDrag();\r\n\t\tDomUtil.disableTextSelection();\r\n\r\n\t\tif (this._moving) { return; }\r\n\r\n\t\t// @event down: Event\r\n\t\t// Fired when a drag is about to start.\r\n\t\tthis.fire('down');\r\n\r\n\t\tvar first = e.touches ? e.touches[0] : e,\r\n\t\t    sizedParent = DomUtil.getSizedParentNode(this._element);\r\n\r\n\t\tthis._startPoint = new Point(first.clientX, first.clientY);\r\n\t\tthis._startPos = DomUtil.getPosition(this._element);\r\n\r\n\t\t// Cache the scale, so that we can continuously compensate for it during drag (_onMove).\r\n\t\tthis._parentScale = DomUtil.getScale(sizedParent);\r\n\r\n\t\tvar mouseevent = e.type === 'mousedown';\r\n\t\tDomEvent.on(document, mouseevent ? 'mousemove' : 'touchmove', this._onMove, this);\r\n\t\tDomEvent.on(document, mouseevent ? 'mouseup' : 'touchend touchcancel', this._onUp, this);\r\n\t},\r\n\r\n\t_onMove: function (e) {\r\n\t\t// Ignore the event if disabled; this happens in IE11\r\n\t\t// under some circumstances, see #3666.\r\n\t\tif (!this._enabled) { return; }\r\n\r\n\t\tif (e.touches && e.touches.length > 1) {\r\n\t\t\tthis._moved = true;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar first = (e.touches && e.touches.length === 1 ? e.touches[0] : e),\r\n\t\t    offset = new Point(first.clientX, first.clientY)._subtract(this._startPoint);\r\n\r\n\t\tif (!offset.x && !offset.y) { return; }\r\n\t\tif (Math.abs(offset.x) + Math.abs(offset.y) < this.options.clickTolerance) { return; }\r\n\r\n\t\t// We assume that the parent container's position, border and scale do not change for the duration of the drag.\r\n\t\t// Therefore there is no need to account for the position and border (they are eliminated by the subtraction)\r\n\t\t// and we can use the cached value for the scale.\r\n\t\toffset.x /= this._parentScale.x;\r\n\t\toffset.y /= this._parentScale.y;\r\n\r\n\t\tDomEvent.preventDefault(e);\r\n\r\n\t\tif (!this._moved) {\r\n\t\t\t// @event dragstart: Event\r\n\t\t\t// Fired when a drag starts\r\n\t\t\tthis.fire('dragstart');\r\n\r\n\t\t\tthis._moved = true;\r\n\r\n\t\t\tDomUtil.addClass(document.body, 'leaflet-dragging');\r\n\r\n\t\t\tthis._lastTarget = e.target || e.srcElement;\r\n\t\t\t// IE and Edge do not give the <use> element, so fetch it\r\n\t\t\t// if necessary\r\n\t\t\tif (window.SVGElementInstance && this._lastTarget instanceof window.SVGElementInstance) {\r\n\t\t\t\tthis._lastTarget = this._lastTarget.correspondingUseElement;\r\n\t\t\t}\r\n\t\t\tDomUtil.addClass(this._lastTarget, 'leaflet-drag-target');\r\n\t\t}\r\n\r\n\t\tthis._newPos = this._startPos.add(offset);\r\n\t\tthis._moving = true;\r\n\r\n\t\tthis._lastEvent = e;\r\n\t\tthis._updatePosition();\r\n\t},\r\n\r\n\t_updatePosition: function () {\r\n\t\tvar e = {originalEvent: this._lastEvent};\r\n\r\n\t\t// @event predrag: Event\r\n\t\t// Fired continuously during dragging *before* each corresponding\r\n\t\t// update of the element's position.\r\n\t\tthis.fire('predrag', e);\r\n\t\tDomUtil.setPosition(this._element, this._newPos);\r\n\r\n\t\t// @event drag: Event\r\n\t\t// Fired continuously during dragging.\r\n\t\tthis.fire('drag', e);\r\n\t},\r\n\r\n\t_onUp: function () {\r\n\t\t// Ignore the event if disabled; this happens in IE11\r\n\t\t// under some circumstances, see #3666.\r\n\t\tif (!this._enabled) { return; }\r\n\t\tthis.finishDrag();\r\n\t},\r\n\r\n\tfinishDrag: function (noInertia) {\r\n\t\tDomUtil.removeClass(document.body, 'leaflet-dragging');\r\n\r\n\t\tif (this._lastTarget) {\r\n\t\t\tDomUtil.removeClass(this._lastTarget, 'leaflet-drag-target');\r\n\t\t\tthis._lastTarget = null;\r\n\t\t}\r\n\r\n\t\tDomEvent.off(document, 'mousemove touchmove', this._onMove, this);\r\n\t\tDomEvent.off(document, 'mouseup touchend touchcancel', this._onUp, this);\r\n\r\n\t\tDomUtil.enableImageDrag();\r\n\t\tDomUtil.enableTextSelection();\r\n\r\n\t\tvar fireDragend = this._moved && this._moving;\r\n\r\n\t\tthis._moving = false;\r\n\t\tDraggable._dragging = false;\r\n\r\n\t\tif (fireDragend) {\r\n\t\t\t// @event dragend: DragEndEvent\r\n\t\t\t// Fired when the drag ends.\r\n\t\t\tthis.fire('dragend', {\r\n\t\t\t\tnoInertia: noInertia,\r\n\t\t\t\tdistance: this._newPos.distanceTo(this._startPos)\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n});\r\n", "import * as LineUtil from './LineUtil';\r\nimport {toLatLng} from '../geo/LatLng';\r\nimport {toPoint} from './Point';\r\nimport {toLatLngBounds} from '../geo/LatLngBounds';\r\n/*\r\n * @namespace PolyUtil\r\n * Various utility functions for polygon geometries.\r\n */\r\n\r\n/* @function clipPolygon(points: Point[], bounds: Bounds, round?: Boolean): Point[]\r\n * Clips the polygon geometry defined by the given `points` by the given bounds (using the [Sutherland-Hodgman algorithm](https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm)).\r\n * Used by Leaflet to only show polygon points that are on the screen or near, increasing\r\n * performance. Note that polygon points needs different algorithm for clipping\r\n * than polyline, so there's a separate method for it.\r\n */\r\nexport function clipPolygon(points, bounds, round) {\r\n\tvar clippedPoints,\r\n\t    edges = [1, 4, 2, 8],\r\n\t    i, j, k,\r\n\t    a, b,\r\n\t    len, edge, p;\r\n\r\n\tfor (i = 0, len = points.length; i < len; i++) {\r\n\t\tpoints[i]._code = LineUtil._getBitCode(points[i], bounds);\r\n\t}\r\n\r\n\t// for each edge (left, bottom, right, top)\r\n\tfor (k = 0; k < 4; k++) {\r\n\t\tedge = edges[k];\r\n\t\tclippedPoints = [];\r\n\r\n\t\tfor (i = 0, len = points.length, j = len - 1; i < len; j = i++) {\r\n\t\t\ta = points[i];\r\n\t\t\tb = points[j];\r\n\r\n\t\t\t// if a is inside the clip window\r\n\t\t\tif (!(a._code & edge)) {\r\n\t\t\t\t// if b is outside the clip window (a->b goes out of screen)\r\n\t\t\t\tif (b._code & edge) {\r\n\t\t\t\t\tp = LineUtil._getEdgeIntersection(b, a, edge, bounds, round);\r\n\t\t\t\t\tp._code = LineUtil._getBitCode(p, bounds);\r\n\t\t\t\t\tclippedPoints.push(p);\r\n\t\t\t\t}\r\n\t\t\t\tclippedPoints.push(a);\r\n\r\n\t\t\t// else if b is inside the clip window (a->b enters the screen)\r\n\t\t\t} else if (!(b._code & edge)) {\r\n\t\t\t\tp = LineUtil._getEdgeIntersection(b, a, edge, bounds, round);\r\n\t\t\t\tp._code = LineUtil._getBitCode(p, bounds);\r\n\t\t\t\tclippedPoints.push(p);\r\n\t\t\t}\r\n\t\t}\r\n\t\tpoints = clippedPoints;\r\n\t}\r\n\r\n\treturn points;\r\n}\r\n\r\n/* @function polygonCenter(latlngs: LatLng[], crs: CRS): LatLng\r\n * Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the passed LatLngs (first ring) from a polygon.\r\n */\r\nexport function polygonCenter(latlngs, crs) {\r\n\tvar i, j, p1, p2, f, area, x, y, center;\r\n\r\n\tif (!latlngs || latlngs.length === 0) {\r\n\t\tthrow new Error('latlngs not passed');\r\n\t}\r\n\r\n\tif (!LineUtil.isFlat(latlngs)) {\r\n\t\tconsole.warn('latlngs are not flat! Only the first ring will be used');\r\n\t\tlatlngs = latlngs[0];\r\n\t}\r\n\r\n\tvar centroidLatLng = toLatLng([0, 0]);\r\n\r\n\tvar bounds = toLatLngBounds(latlngs);\r\n\tvar areaBounds = bounds.getNorthWest().distanceTo(bounds.getSouthWest()) * bounds.getNorthEast().distanceTo(bounds.getNorthWest());\r\n\t// tests showed that below 1700 rounding errors are happening\r\n\tif (areaBounds < 1700) {\r\n\t\t// getting a inexact center, to move the latlngs near to [0, 0] to prevent rounding errors\r\n\t\tcentroidLatLng = centroid(latlngs);\r\n\t}\r\n\r\n\tvar len = latlngs.length;\r\n\tvar points = [];\r\n\tfor (i = 0; i < len; i++) {\r\n\t\tvar latlng = toLatLng(latlngs[i]);\r\n\t\tpoints.push(crs.project(toLatLng([latlng.lat - centroidLatLng.lat, latlng.lng - centroidLatLng.lng])));\r\n\t}\r\n\r\n\tarea = x = y = 0;\r\n\r\n\t// polygon centroid algorithm;\r\n\tfor (i = 0, j = len - 1; i < len; j = i++) {\r\n\t\tp1 = points[i];\r\n\t\tp2 = points[j];\r\n\r\n\t\tf = p1.y * p2.x - p2.y * p1.x;\r\n\t\tx += (p1.x + p2.x) * f;\r\n\t\ty += (p1.y + p2.y) * f;\r\n\t\tarea += f * 3;\r\n\t}\r\n\r\n\tif (area === 0) {\r\n\t\t// Polygon is so small that all points are on same pixel.\r\n\t\tcenter = points[0];\r\n\t} else {\r\n\t\tcenter = [x / area, y / area];\r\n\t}\r\n\r\n\tvar latlngCenter = crs.unproject(toPoint(center));\r\n\treturn toLatLng([latlngCenter.lat + centroidLatLng.lat, latlngCenter.lng + centroidLatLng.lng]);\r\n}\r\n\r\n/* @function centroid(latlngs: LatLng[]): LatLng\r\n * Returns the 'center of mass' of the passed LatLngs.\r\n */\r\nexport function centroid(coords) {\r\n\tvar latSum = 0;\r\n\tvar lngSum = 0;\r\n\tvar len = 0;\r\n\tfor (var i = 0; i < coords.length; i++) {\r\n\t\tvar latlng = toLatLng(coords[i]);\r\n\t\tlatSum += latlng.lat;\r\n\t\tlngSum += latlng.lng;\r\n\t\tlen++;\r\n\t}\r\n\treturn toLatLng([latSum / len, lngSum / len]);\r\n}\r\n", "import {Point, toPoint} from './Point';\r\nimport * as Util from '../core/Util';\r\nimport {toLatLng} from '../geo/LatLng';\r\nimport {centroid} from './PolyUtil';\r\nimport {toLatLngBounds} from '../geo/LatLngBounds';\r\n\r\n\r\n/*\r\n * @namespace LineUtil\r\n *\r\n * Various utility functions for polyline points processing, used by Leaflet internally to make polylines lightning-fast.\r\n */\r\n\r\n// Simplify polyline with vertex reduction and Douglas-Peucker simplification.\r\n// Improves rendering performance dramatically by lessening the number of points to draw.\r\n\r\n// @function simplify(points: Point[], tolerance: Number): Point[]\r\n// Dramatically reduces the number of points in a polyline while retaining\r\n// its shape and returns a new array of simplified points, using the\r\n// [Ramer-Douglas-Peucker algorithm](https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm).\r\n// Used for a huge performance boost when processing/displaying Leaflet polylines for\r\n// each zoom level and also reducing visual noise. tolerance affects the amount of\r\n// simplification (lesser value means higher quality but slower and with more points).\r\n// Also released as a separated micro-library [Simplify.js](https://mourner.github.io/simplify-js/).\r\nexport function simplify(points, tolerance) {\r\n\tif (!tolerance || !points.length) {\r\n\t\treturn points.slice();\r\n\t}\r\n\r\n\tvar sqTolerance = tolerance * tolerance;\r\n\r\n\t    // stage 1: vertex reduction\r\n\t    points = _reducePoints(points, sqTolerance);\r\n\r\n\t    // stage 2: Douglas-Peucker simplification\r\n\t    points = _simplifyDP(points, sqTolerance);\r\n\r\n\treturn points;\r\n}\r\n\r\n// @function pointToSegmentDistance(p: Point, p1: Point, p2: Point): Number\r\n// Returns the distance between point `p` and segment `p1` to `p2`.\r\nexport function pointToSegmentDistance(p, p1, p2) {\r\n\treturn Math.sqrt(_sqClosestPointOnSegment(p, p1, p2, true));\r\n}\r\n\r\n// @function closestPointOnSegment(p: Point, p1: Point, p2: Point): Number\r\n// Returns the closest point from a point `p` on a segment `p1` to `p2`.\r\nexport function closestPointOnSegment(p, p1, p2) {\r\n\treturn _sqClosestPointOnSegment(p, p1, p2);\r\n}\r\n\r\n// Ramer-Douglas-Peucker simplification, see https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm\r\nfunction _simplifyDP(points, sqTolerance) {\r\n\r\n\tvar len = points.length,\r\n\t    ArrayConstructor = typeof Uint8Array !== undefined + '' ? Uint8Array : Array,\r\n\t    markers = new ArrayConstructor(len);\r\n\r\n\t    markers[0] = markers[len - 1] = 1;\r\n\r\n\t_simplifyDPStep(points, markers, sqTolerance, 0, len - 1);\r\n\r\n\tvar i,\r\n\t    newPoints = [];\r\n\r\n\tfor (i = 0; i < len; i++) {\r\n\t\tif (markers[i]) {\r\n\t\t\tnewPoints.push(points[i]);\r\n\t\t}\r\n\t}\r\n\r\n\treturn newPoints;\r\n}\r\n\r\nfunction _simplifyDPStep(points, markers, sqTolerance, first, last) {\r\n\r\n\tvar maxSqDist = 0,\r\n\tindex, i, sqDist;\r\n\r\n\tfor (i = first + 1; i <= last - 1; i++) {\r\n\t\tsqDist = _sqClosestPointOnSegment(points[i], points[first], points[last], true);\r\n\r\n\t\tif (sqDist > maxSqDist) {\r\n\t\t\tindex = i;\r\n\t\t\tmaxSqDist = sqDist;\r\n\t\t}\r\n\t}\r\n\r\n\tif (maxSqDist > sqTolerance) {\r\n\t\tmarkers[index] = 1;\r\n\r\n\t\t_simplifyDPStep(points, markers, sqTolerance, first, index);\r\n\t\t_simplifyDPStep(points, markers, sqTolerance, index, last);\r\n\t}\r\n}\r\n\r\n// reduce points that are too close to each other to a single point\r\nfunction _reducePoints(points, sqTolerance) {\r\n\tvar reducedPoints = [points[0]];\r\n\r\n\tfor (var i = 1, prev = 0, len = points.length; i < len; i++) {\r\n\t\tif (_sqDist(points[i], points[prev]) > sqTolerance) {\r\n\t\t\treducedPoints.push(points[i]);\r\n\t\t\tprev = i;\r\n\t\t}\r\n\t}\r\n\tif (prev < len - 1) {\r\n\t\treducedPoints.push(points[len - 1]);\r\n\t}\r\n\treturn reducedPoints;\r\n}\r\n\r\nvar _lastCode;\r\n\r\n// @function clipSegment(a: Point, b: Point, bounds: Bounds, useLastCode?: Boolean, round?: Boolean): Point[]|Boolean\r\n// Clips the segment a to b by rectangular bounds with the\r\n// [Cohen-Sutherland algorithm](https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm)\r\n// (modifying the segment points directly!). Used by Leaflet to only show polyline\r\n// points that are on the screen or near, increasing performance.\r\nexport function clipSegment(a, b, bounds, useLastCode, round) {\r\n\tvar codeA = useLastCode ? _lastCode : _getBitCode(a, bounds),\r\n\t    codeB = _getBitCode(b, bounds),\r\n\r\n\t    codeOut, p, newCode;\r\n\r\n\t    // save 2nd code to avoid calculating it on the next segment\r\n\t    _lastCode = codeB;\r\n\r\n\twhile (true) {\r\n\t\t// if a,b is inside the clip window (trivial accept)\r\n\t\tif (!(codeA | codeB)) {\r\n\t\t\treturn [a, b];\r\n\t\t}\r\n\r\n\t\t// if a,b is outside the clip window (trivial reject)\r\n\t\tif (codeA & codeB) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// other cases\r\n\t\tcodeOut = codeA || codeB;\r\n\t\tp = _getEdgeIntersection(a, b, codeOut, bounds, round);\r\n\t\tnewCode = _getBitCode(p, bounds);\r\n\r\n\t\tif (codeOut === codeA) {\r\n\t\t\ta = p;\r\n\t\t\tcodeA = newCode;\r\n\t\t} else {\r\n\t\t\tb = p;\r\n\t\t\tcodeB = newCode;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport function _getEdgeIntersection(a, b, code, bounds, round) {\r\n\tvar dx = b.x - a.x,\r\n\t    dy = b.y - a.y,\r\n\t    min = bounds.min,\r\n\t    max = bounds.max,\r\n\t    x, y;\r\n\r\n\tif (code & 8) { // top\r\n\t\tx = a.x + dx * (max.y - a.y) / dy;\r\n\t\ty = max.y;\r\n\r\n\t} else if (code & 4) { // bottom\r\n\t\tx = a.x + dx * (min.y - a.y) / dy;\r\n\t\ty = min.y;\r\n\r\n\t} else if (code & 2) { // right\r\n\t\tx = max.x;\r\n\t\ty = a.y + dy * (max.x - a.x) / dx;\r\n\r\n\t} else if (code & 1) { // left\r\n\t\tx = min.x;\r\n\t\ty = a.y + dy * (min.x - a.x) / dx;\r\n\t}\r\n\r\n\treturn new Point(x, y, round);\r\n}\r\n\r\nexport function _getBitCode(p, bounds) {\r\n\tvar code = 0;\r\n\r\n\tif (p.x < bounds.min.x) { // left\r\n\t\tcode |= 1;\r\n\t} else if (p.x > bounds.max.x) { // right\r\n\t\tcode |= 2;\r\n\t}\r\n\r\n\tif (p.y < bounds.min.y) { // bottom\r\n\t\tcode |= 4;\r\n\t} else if (p.y > bounds.max.y) { // top\r\n\t\tcode |= 8;\r\n\t}\r\n\r\n\treturn code;\r\n}\r\n\r\n// square distance (to avoid unnecessary Math.sqrt calls)\r\nfunction _sqDist(p1, p2) {\r\n\tvar dx = p2.x - p1.x,\r\n\t    dy = p2.y - p1.y;\r\n\treturn dx * dx + dy * dy;\r\n}\r\n\r\n// return closest point on segment or distance to that point\r\nexport function _sqClosestPointOnSegment(p, p1, p2, sqDist) {\r\n\tvar x = p1.x,\r\n\t    y = p1.y,\r\n\t    dx = p2.x - x,\r\n\t    dy = p2.y - y,\r\n\t    dot = dx * dx + dy * dy,\r\n\t    t;\r\n\r\n\tif (dot > 0) {\r\n\t\tt = ((p.x - x) * dx + (p.y - y) * dy) / dot;\r\n\r\n\t\tif (t > 1) {\r\n\t\t\tx = p2.x;\r\n\t\t\ty = p2.y;\r\n\t\t} else if (t > 0) {\r\n\t\t\tx += dx * t;\r\n\t\t\ty += dy * t;\r\n\t\t}\r\n\t}\r\n\r\n\tdx = p.x - x;\r\n\tdy = p.y - y;\r\n\r\n\treturn sqDist ? dx * dx + dy * dy : new Point(x, y);\r\n}\r\n\r\n\r\n// @function isFlat(latlngs: LatLng[]): Boolean\r\n// Returns true if `latlngs` is a flat array, false is nested.\r\nexport function isFlat(latlngs) {\r\n\treturn !Util.isArray(latlngs[0]) || (typeof latlngs[0][0] !== 'object' && typeof latlngs[0][0] !== 'undefined');\r\n}\r\n\r\nexport function _flat(latlngs) {\r\n\tconsole.warn('Deprecated use of _flat, please use L.LineUtil.isFlat instead.');\r\n\treturn isFlat(latlngs);\r\n}\r\n\r\n/* @function polylineCenter(latlngs: LatLng[], crs: CRS): LatLng\r\n * Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the passed LatLngs (first ring) from a polyline.\r\n */\r\nexport function polylineCenter(latlngs, crs) {\r\n\tvar i, halfDist, segDist, dist, p1, p2, ratio, center;\r\n\r\n\tif (!latlngs || latlngs.length === 0) {\r\n\t\tthrow new Error('latlngs not passed');\r\n\t}\r\n\r\n\tif (!isFlat(latlngs)) {\r\n\t\tconsole.warn('latlngs are not flat! Only the first ring will be used');\r\n\t\tlatlngs = latlngs[0];\r\n\t}\r\n\r\n\tvar centroidLatLng = toLatLng([0, 0]);\r\n\r\n\tvar bounds = toLatLngBounds(latlngs);\r\n\tvar areaBounds = bounds.getNorthWest().distanceTo(bounds.getSouthWest()) * bounds.getNorthEast().distanceTo(bounds.getNorthWest());\r\n\t// tests showed that below 1700 rounding errors are happening\r\n\tif (areaBounds < 1700) {\r\n\t\t// getting a inexact center, to move the latlngs near to [0, 0] to prevent rounding errors\r\n\t\tcentroidLatLng = centroid(latlngs);\r\n\t}\r\n\r\n\tvar len = latlngs.length;\r\n\tvar points = [];\r\n\tfor (i = 0; i < len; i++) {\r\n\t\tvar latlng = toLatLng(latlngs[i]);\r\n\t\tpoints.push(crs.project(toLatLng([latlng.lat - centroidLatLng.lat, latlng.lng - centroidLatLng.lng])));\r\n\t}\r\n\r\n\tfor (i = 0, halfDist = 0; i < len - 1; i++) {\r\n\t\thalfDist += points[i].distanceTo(points[i + 1]) / 2;\r\n\t}\r\n\r\n\t// The line is so small in the current view that all points are on the same pixel.\r\n\tif (halfDist === 0) {\r\n\t\tcenter = points[0];\r\n\t} else {\r\n\t\tfor (i = 0, dist = 0; i < len - 1; i++) {\r\n\t\t\tp1 = points[i];\r\n\t\t\tp2 = points[i + 1];\r\n\t\t\tsegDist = p1.distanceTo(p2);\r\n\t\t\tdist += segDist;\r\n\r\n\t\t\tif (dist > halfDist) {\r\n\t\t\t\tratio = (dist - halfDist) / segDist;\r\n\t\t\t\tcenter = [\r\n\t\t\t\t\tp2.x - ratio * (p2.x - p1.x),\r\n\t\t\t\t\tp2.y - ratio * (p2.y - p1.y)\r\n\t\t\t\t];\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tvar latlngCenter = crs.unproject(toPoint(center));\r\n\treturn toLatLng([latlngCenter.lat + centroidLatLng.lat, latlngCenter.lng + centroidLatLng.lng]);\r\n}\r\n", "import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @section\r\n * Leaflet comes with a set of already defined Projections out of the box:\r\n *\r\n * @projection L.Projection.LonLat\r\n *\r\n * Equirectangular, or Plate Carree projection — the most simple projection,\r\n * mostly used by GIS enthusiasts. Directly maps `x` as longitude, and `y` as\r\n * latitude. Also suitable for flat worlds, e.g. game maps. Used by the\r\n * `EPSG:4326` and `Simple` CRS.\r\n */\r\n\r\nexport var LonLat = {\r\n\tproject: function (latlng) {\r\n\t\treturn new Point(latlng.lng, latlng.lat);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\treturn new LatLng(point.y, point.x);\r\n\t},\r\n\r\n\tbounds: new Bounds([-180, -90], [180, 90])\r\n};\r\n", "import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @projection L.Projection.Mercator\r\n *\r\n * Elliptical Mercator projection — more complex than Spherical Mercator. Assumes that Earth is an ellipsoid. Used by the EPSG:3395 CRS.\r\n */\r\n\r\nexport var Mercator = {\r\n\tR: 6378137,\r\n\tR_MINOR: 6356752.314245179,\r\n\r\n\tbounds: new Bounds([-20037508.34279, -15496570.73972], [20037508.34279, 18764656.23138]),\r\n\r\n\tproject: function (latlng) {\r\n\t\tvar d = Math.PI / 180,\r\n\t\t    r = this.R,\r\n\t\t    y = latlng.lat * d,\r\n\t\t    tmp = this.R_MINOR / r,\r\n\t\t    e = Math.sqrt(1 - tmp * tmp),\r\n\t\t    con = e * Math.sin(y);\r\n\r\n\t\tvar ts = Math.tan(Math.PI / 4 - y / 2) / Math.pow((1 - con) / (1 + con), e / 2);\r\n\t\ty = -r * Math.log(Math.max(ts, 1E-10));\r\n\r\n\t\treturn new Point(latlng.lng * d * r, y);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\tvar d = 180 / Math.PI,\r\n\t\t    r = this.R,\r\n\t\t    tmp = this.R_MINOR / r,\r\n\t\t    e = Math.sqrt(1 - tmp * tmp),\r\n\t\t    ts = Math.exp(-point.y / r),\r\n\t\t    phi = Math.PI / 2 - 2 * Math.atan(ts);\r\n\r\n\t\tfor (var i = 0, dphi = 0.1, con; i < 15 && Math.abs(dphi) > 1e-7; i++) {\r\n\t\t\tcon = e * Math.sin(phi);\r\n\t\t\tcon = Math.pow((1 - con) / (1 + con), e / 2);\r\n\t\t\tdphi = Math.PI / 2 - 2 * Math.atan(ts * con) - phi;\r\n\t\t\tphi += dphi;\r\n\t\t}\r\n\r\n\t\treturn new LatLng(phi * d, point.x * d / r);\r\n\t}\r\n};\r\n", "/*\n * @class Projection\n\n * An object with methods for projecting geographical coordinates of the world onto\n * a flat surface (and back). See [Map projection](https://en.wikipedia.org/wiki/Map_projection).\n\n * @property bounds: Bounds\n * The bounds (specified in CRS units) where the projection is valid\n\n * @method project(latlng: LatLng): Point\n * Projects geographical coordinates into a 2D point.\n * Only accepts actual `L.LatLng` instances, not arrays.\n\n * @method unproject(point: Point): LatLng\n * The inverse of `project`. Projects a 2D point into a geographical location.\n * Only accepts actual `L.Point` instances, not arrays.\n\n * Note that the projection instances do not inherit from Leaflet's `Class` object,\n * and can't be instantiated. Also, new classes can't inherit from them,\n * and methods can't be added to them with the `include` function.\n\n */\n\nexport {LonLat} from './Projection.LonLat';\nexport {Mercator} from './Projection.Mercator';\nexport {SphericalMercator} from './Projection.SphericalMercator';\n", "import {Earth} from './CRS.Earth';\r\nimport {Mercator} from '../projection/Projection.Mercator';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG3395\r\n *\r\n * Rarely used by some commercial tile providers. Uses Elliptical Mercator projection.\r\n */\r\nexport var EPSG3395 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:3395',\r\n\tprojection: Mercator,\r\n\r\n\ttransformation: (function () {\r\n\t\tvar scale = 0.5 / (Math.PI * Mercator.R);\r\n\t\treturn toTransformation(scale, 0.5, -scale, 0.5);\r\n\t}())\r\n});\r\n", "import {Earth} from './CRS.Earth';\r\nimport {LonLat} from '../projection/Projection.LonLat';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG4326\r\n *\r\n * A common CRS among GIS enthusiasts. Uses simple Equirectangular projection.\r\n *\r\n * Leaflet 1.0.x complies with the [TMS coordinate scheme for EPSG:4326](https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification#global-geodetic),\r\n * which is a breaking change from 0.7.x behaviour.  If you are using a `TileLayer`\r\n * with this CRS, ensure that there are two 256x256 pixel tiles covering the\r\n * whole earth at zoom level zero, and that the tile coordinate origin is (-180,+90),\r\n * or (-180,-90) for `TileLayer`s with [the `tms` option](#tilelayer-tms) set.\r\n */\r\n\r\nexport var EPSG4326 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:4326',\r\n\tprojection: LonLat,\r\n\ttransformation: toTransformation(1 / 180, 1, -1 / 180, 0.5)\r\n});\r\n", "import {CRS} from './CRS';\nimport {LonLat} from '../projection/Projection.LonLat';\nimport {toTransformation} from '../../geometry/Transformation';\nimport * as Util from '../../core/Util';\n\n/*\n * @namespace CRS\n * @crs L.CRS.Simple\n *\n * A simple CRS that maps longitude and latitude into `x` and `y` directly.\n * May be used for maps of flat surfaces (e.g. game maps). Note that the `y`\n * axis should still be inverted (going from bottom to top). `distance()` returns\n * simple euclidean distance.\n */\n\nexport var Simple = Util.extend({}, CRS, {\n\tprojection: LonLat,\n\ttransformation: toTransformation(1, 0, -1, 0),\n\n\tscale: function (zoom) {\n\t\treturn Math.pow(2, zoom);\n\t},\n\n\tzoom: function (scale) {\n\t\treturn Math.log(scale) / Math.LN2;\n\t},\n\n\tdistance: function (latlng1, latlng2) {\n\t\tvar dx = latlng2.lng - latlng1.lng,\n\t\t    dy = latlng2.lat - latlng1.lat;\n\n\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t},\n\n\tinfinite: true\n});\n", "import {CRS} from './CRS';\nimport {Earth} from './CRS.Earth';\nimport {EPSG3395} from './CRS.EPSG3395';\nimport {EPSG3857, EPSG900913} from './CRS.EPSG3857';\nimport {EPSG4326} from './CRS.EPSG4326';\nimport {Simple} from './CRS.Simple';\n\nCRS.Earth = Earth;\nCRS.EPSG3395 = EPSG3395;\nCRS.EPSG3857 = EPSG3857;\nCRS.EPSG900913 = EPSG900913;\nCRS.EPSG4326 = EPSG4326;\nCRS.Simple = Simple;\n\nexport {CRS};\n", "import {Evented} from '../core/Events';\nimport {Map} from '../map/Map';\nimport * as Util from '../core/Util';\n\n/*\n * @class Layer\n * @inherits Evented\n * @aka L.Layer\n * @aka ILayer\n *\n * A set of methods from the Layer base class that all Leaflet layers use.\n * Inherits all methods, options and events from `L.Evented`.\n *\n * @example\n *\n * ```js\n * var layer = L.marker(latlng).addTo(map);\n * layer.addTo(map);\n * layer.remove();\n * ```\n *\n * @event add: Event\n * Fired after the layer is added to a map\n *\n * @event remove: Event\n * Fired after the layer is removed from a map\n */\n\n\nexport var Layer = Evented.extend({\n\n\t// Classes extending `L.Layer` will inherit the following options:\n\toptions: {\n\t\t// @option pane: String = 'overlayPane'\n\t\t// By default the layer will be added to the map's [overlay pane](#map-overlaypane). Overriding this option will cause the layer to be placed on another pane by default.\n\t\tpane: 'overlayPane',\n\n\t\t// @option attribution: String = null\n\t\t// String to be shown in the attribution control, e.g. \"© OpenStreetMap contributors\". It describes the layer data and is often a legal obligation towards copyright holders and tile providers.\n\t\tattribution: null,\n\n\t\tbubblingMouseEvents: true\n\t},\n\n\t/* @section\n\t * Classes extending `L.Layer` will inherit the following methods:\n\t *\n\t * @method addTo(map: Map|LayerGroup): this\n\t * Adds the layer to the given map or layer group.\n\t */\n\taddTo: function (map) {\n\t\tmap.addLayer(this);\n\t\treturn this;\n\t},\n\n\t// @method remove: this\n\t// Removes the layer from the map it is currently active on.\n\tremove: function () {\n\t\treturn this.removeFrom(this._map || this._mapToAdd);\n\t},\n\n\t// @method removeFrom(map: Map): this\n\t// Removes the layer from the given map\n\t//\n\t// @alternative\n\t// @method removeFrom(group: LayerGroup): this\n\t// Removes the layer from the given `LayerGroup`\n\tremoveFrom: function (obj) {\n\t\tif (obj) {\n\t\t\tobj.removeLayer(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method getPane(name? : String): HTMLElement\n\t// Returns the `HTMLElement` representing the named pane on the map. If `name` is omitted, returns the pane for this layer.\n\tgetPane: function (name) {\n\t\treturn this._map.getPane(name ? (this.options[name] || name) : this.options.pane);\n\t},\n\n\taddInteractiveTarget: function (targetEl) {\n\t\tthis._map._targets[Util.stamp(targetEl)] = this;\n\t\treturn this;\n\t},\n\n\tremoveInteractiveTarget: function (targetEl) {\n\t\tdelete this._map._targets[Util.stamp(targetEl)];\n\t\treturn this;\n\t},\n\n\t// @method getAttribution: String\n\t// Used by the `attribution control`, returns the [attribution option](#gridlayer-attribution).\n\tgetAttribution: function () {\n\t\treturn this.options.attribution;\n\t},\n\n\t_layerAdd: function (e) {\n\t\tvar map = e.target;\n\n\t\t// check in case layer gets added and then removed before the map is ready\n\t\tif (!map.hasLayer(this)) { return; }\n\n\t\tthis._map = map;\n\t\tthis._zoomAnimated = map._zoomAnimated;\n\n\t\tif (this.getEvents) {\n\t\t\tvar events = this.getEvents();\n\t\t\tmap.on(events, this);\n\t\t\tthis.once('remove', function () {\n\t\t\t\tmap.off(events, this);\n\t\t\t}, this);\n\t\t}\n\n\t\tthis.onAdd(map);\n\n\t\tthis.fire('add');\n\t\tmap.fire('layeradd', {layer: this});\n\t}\n});\n\n/* @section Extension methods\n * @uninheritable\n *\n * Every layer should extend from `L.Layer` and (re-)implement the following methods.\n *\n * @method onAdd(map: Map): this\n * Should contain code that creates DOM elements for the layer, adds them to `map panes` where they should belong and puts listeners on relevant map events. Called on [`map.addLayer(layer)`](#map-addlayer).\n *\n * @method onRemove(map: Map): this\n * Should contain all clean up code that removes the layer's elements from the DOM and removes listeners previously added in [`onAdd`](#layer-onadd). Called on [`map.removeLayer(layer)`](#map-removelayer).\n *\n * @method getEvents(): Object\n * This optional method should return an object like `{ viewreset: this._reset }` for [`addEventListener`](#evented-addeventlistener). The event handlers in this object will be automatically added and removed from the map with your layer.\n *\n * @method getAttribution(): String\n * This optional method should return a string containing HTML to be shown on the `Attribution control` whenever the layer is visible.\n *\n * @method beforeAdd(map: Map): this\n * Optional method. Called on [`map.addLayer(layer)`](#map-addlayer), before the layer is added to the map, before events are initialized, without waiting until the map is in a usable state. Use for early initialization only.\n */\n\n\n/* @namespace Map\n * @section Layer events\n *\n * @event layeradd: LayerEvent\n * Fired when a new layer is added to the map.\n *\n * @event layerremove: LayerEvent\n * Fired when some layer is removed from the map\n *\n * @section Methods for Layers and Controls\n */\nMap.include({\n\t// @method addLayer(layer: Layer): this\n\t// Adds the given layer to the map\n\taddLayer: function (layer) {\n\t\tif (!layer._layerAdd) {\n\t\t\tthrow new Error('The provided object is not a Layer.');\n\t\t}\n\n\t\tvar id = Util.stamp(layer);\n\t\tif (this._layers[id]) { return this; }\n\t\tthis._layers[id] = layer;\n\n\t\tlayer._mapToAdd = this;\n\n\t\tif (layer.beforeAdd) {\n\t\t\tlayer.beforeAdd(this);\n\t\t}\n\n\t\tthis.whenReady(layer._layerAdd, layer);\n\n\t\treturn this;\n\t},\n\n\t// @method removeLayer(layer: Layer): this\n\t// Removes the given layer from the map.\n\tremoveLayer: function (layer) {\n\t\tvar id = Util.stamp(layer);\n\n\t\tif (!this._layers[id]) { return this; }\n\n\t\tif (this._loaded) {\n\t\t\tlayer.onRemove(this);\n\t\t}\n\n\t\tdelete this._layers[id];\n\n\t\tif (this._loaded) {\n\t\t\tthis.fire('layerremove', {layer: layer});\n\t\t\tlayer.fire('remove');\n\t\t}\n\n\t\tlayer._map = layer._mapToAdd = null;\n\n\t\treturn this;\n\t},\n\n\t// @method hasLayer(layer: Layer): Boolean\n\t// Returns `true` if the given layer is currently added to the map\n\thasLayer: function (layer) {\n\t\treturn Util.stamp(layer) in this._layers;\n\t},\n\n\t/* @method eachLayer(fn: Function, context?: Object): this\n\t * Iterates over the layers of the map, optionally specifying context of the iterator function.\n\t * ```\n\t * map.eachLayer(function(layer){\n\t *     layer.bindPopup('Hello');\n\t * });\n\t * ```\n\t */\n\teachLayer: function (method, context) {\n\t\tfor (var i in this._layers) {\n\t\t\tmethod.call(context, this._layers[i]);\n\t\t}\n\t\treturn this;\n\t},\n\n\t_addLayers: function (layers) {\n\t\tlayers = layers ? (Util.isArray(layers) ? layers : [layers]) : [];\n\n\t\tfor (var i = 0, len = layers.length; i < len; i++) {\n\t\t\tthis.addLayer(layers[i]);\n\t\t}\n\t},\n\n\t_addZoomLimit: function (layer) {\n\t\tif (!isNaN(layer.options.maxZoom) || !isNaN(layer.options.minZoom)) {\n\t\t\tthis._zoomBoundLayers[Util.stamp(layer)] = layer;\n\t\t\tthis._updateZoomLevels();\n\t\t}\n\t},\n\n\t_removeZoomLimit: function (layer) {\n\t\tvar id = Util.stamp(layer);\n\n\t\tif (this._zoomBoundLayers[id]) {\n\t\t\tdelete this._zoomBoundLayers[id];\n\t\t\tthis._updateZoomLevels();\n\t\t}\n\t},\n\n\t_updateZoomLevels: function () {\n\t\tvar minZoom = Infinity,\n\t\t    maxZoom = -Infinity,\n\t\t    oldZoomSpan = this._getZoomSpan();\n\n\t\tfor (var i in this._zoomBoundLayers) {\n\t\t\tvar options = this._zoomBoundLayers[i].options;\n\n\t\t\tminZoom = options.minZoom === undefined ? minZoom : Math.min(minZoom, options.minZoom);\n\t\t\tmaxZoom = options.maxZoom === undefined ? maxZoom : Math.max(maxZoom, options.maxZoom);\n\t\t}\n\n\t\tthis._layersMaxZoom = maxZoom === -Infinity ? undefined : maxZoom;\n\t\tthis._layersMinZoom = minZoom === Infinity ? undefined : minZoom;\n\n\t\t// @section Map state change events\n\t\t// @event zoomlevelschange: Event\n\t\t// Fired when the number of zoomlevels on the map is changed due\n\t\t// to adding or removing a layer.\n\t\tif (oldZoomSpan !== this._getZoomSpan()) {\n\t\t\tthis.fire('zoomlevelschange');\n\t\t}\n\n\t\tif (this.options.maxZoom === undefined && this._layersMaxZoom && this.getZoom() > this._layersMaxZoom) {\n\t\t\tthis.setZoom(this._layersMaxZoom);\n\t\t}\n\t\tif (this.options.minZoom === undefined && this._layersMinZoom && this.getZoom() < this._layersMinZoom) {\n\t\t\tthis.setZoom(this._layersMinZoom);\n\t\t}\n\t}\n});\n", "\r\nimport {Layer} from './Layer';\r\nimport * as Util from '../core/Util';\r\n\r\n/*\r\n * @class LayerGroup\r\n * @aka L.LayerGroup\r\n * @inherits Interactive layer\r\n *\r\n * Used to group several layers and handle them as one. If you add it to the map,\r\n * any layers added or removed from the group will be added/removed on the map as\r\n * well. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.layerGroup([marker1, marker2])\r\n * \t.addLayer(polyline)\r\n * \t.addTo(map);\r\n * ```\r\n */\r\n\r\nexport var LayerGroup = Layer.extend({\r\n\r\n\tinitialize: function (layers, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._layers = {};\r\n\r\n\t\tvar i, len;\r\n\r\n\t\tif (layers) {\r\n\t\t\tfor (i = 0, len = layers.length; i < len; i++) {\r\n\t\t\t\tthis.addLayer(layers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// @method addLayer(layer: Layer): this\r\n\t// Adds the given layer to the group.\r\n\taddLayer: function (layer) {\r\n\t\tvar id = this.getLayerId(layer);\r\n\r\n\t\tthis._layers[id] = layer;\r\n\r\n\t\tif (this._map) {\r\n\t\t\tthis._map.addLayer(layer);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeLayer(layer: Layer): this\r\n\t// Removes the given layer from the group.\r\n\t// @alternative\r\n\t// @method removeLayer(id: Number): this\r\n\t// Removes the layer with the given internal ID from the group.\r\n\tremoveLayer: function (layer) {\r\n\t\tvar id = layer in this._layers ? layer : this.getLayerId(layer);\r\n\r\n\t\tif (this._map && this._layers[id]) {\r\n\t\t\tthis._map.removeLayer(this._layers[id]);\r\n\t\t}\r\n\r\n\t\tdelete this._layers[id];\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method hasLayer(layer: Layer): Boolean\r\n\t// Returns `true` if the given layer is currently added to the group.\r\n\t// @alternative\r\n\t// @method hasLayer(id: Number): Boolean\r\n\t// Returns `true` if the given internal ID is currently added to the group.\r\n\thasLayer: function (layer) {\r\n\t\tvar layerId = typeof layer === 'number' ? layer : this.getLayerId(layer);\r\n\t\treturn layerId in this._layers;\r\n\t},\r\n\r\n\t// @method clearLayers(): this\r\n\t// Removes all the layers from the group.\r\n\tclearLayers: function () {\r\n\t\treturn this.eachLayer(this.removeLayer, this);\r\n\t},\r\n\r\n\t// @method invoke(methodName: String, …): this\r\n\t// Calls `methodName` on every layer contained in this group, passing any\r\n\t// additional parameters. Has no effect if the layers contained do not\r\n\t// implement `methodName`.\r\n\tinvoke: function (methodName) {\r\n\t\tvar args = Array.prototype.slice.call(arguments, 1),\r\n\t\t    i, layer;\r\n\r\n\t\tfor (i in this._layers) {\r\n\t\t\tlayer = this._layers[i];\r\n\r\n\t\t\tif (layer[methodName]) {\r\n\t\t\t\tlayer[methodName].apply(layer, args);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis.eachLayer(map.addLayer, map);\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tthis.eachLayer(map.removeLayer, map);\r\n\t},\r\n\r\n\t// @method eachLayer(fn: Function, context?: Object): this\r\n\t// Iterates over the layers of the group, optionally specifying context of the iterator function.\r\n\t// ```js\r\n\t// group.eachLayer(function (layer) {\r\n\t// \tlayer.bindPopup('Hello');\r\n\t// });\r\n\t// ```\r\n\teachLayer: function (method, context) {\r\n\t\tfor (var i in this._layers) {\r\n\t\t\tmethod.call(context, this._layers[i]);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getLayer(id: Number): Layer\r\n\t// Returns the layer with the given internal ID.\r\n\tgetLayer: function (id) {\r\n\t\treturn this._layers[id];\r\n\t},\r\n\r\n\t// @method getLayers(): Layer[]\r\n\t// Returns an array of all the layers added to the group.\r\n\tgetLayers: function () {\r\n\t\tvar layers = [];\r\n\t\tthis.eachLayer(layers.push, layers);\r\n\t\treturn layers;\r\n\t},\r\n\r\n\t// @method setZIndex(zIndex: Number): this\r\n\t// Calls `setZIndex` on every layer contained in this group, passing the z-index.\r\n\tsetZIndex: function (zIndex) {\r\n\t\treturn this.invoke('setZIndex', zIndex);\r\n\t},\r\n\r\n\t// @method getLayerId(layer: Layer): Number\r\n\t// Returns the internal ID for a layer\r\n\tgetLayerId: function (layer) {\r\n\t\treturn Util.stamp(layer);\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.layerGroup(layers?: Layer[], options?: Object)\r\n// Create a layer group, optionally given an initial set of layers and an `options` object.\r\nexport var layerGroup = function (layers, options) {\r\n\treturn new LayerGroup(layers, options);\r\n};\r\n", "import {LayerGroup} from './LayerGroup';\r\nimport {LatLngBounds} from '../geo/LatLngBounds';\r\n\r\n/*\r\n * @class FeatureGroup\r\n * @aka L.FeatureGroup\r\n * @inherits LayerGroup\r\n *\r\n * Extended `LayerGroup` that makes it easier to do the same thing to all its member layers:\r\n *  * [`bindPopup`](#layer-bindpopup) binds a popup to all of the layers at once (likewise with [`bindTooltip`](#layer-bindtooltip))\r\n *  * Events are propagated to the `FeatureGroup`, so if the group has an event\r\n * handler, it will handle events from any of the layers. This includes mouse events\r\n * and custom events.\r\n *  * Has `layeradd` and `layerremove` events\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.featureGroup([marker1, marker2, polyline])\r\n * \t.bindPopup('Hello world!')\r\n * \t.on('click', function() { alert('Clicked on a member of the group!'); })\r\n * \t.addTo(map);\r\n * ```\r\n */\r\n\r\nexport var FeatureGroup = LayerGroup.extend({\r\n\r\n\taddLayer: function (layer) {\r\n\t\tif (this.hasLayer(layer)) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tlayer.addEventParent(this);\r\n\r\n\t\tLayerGroup.prototype.addLayer.call(this, layer);\r\n\r\n\t\t// @event layeradd: LayerEvent\r\n\t\t// Fired when a layer is added to this `FeatureGroup`\r\n\t\treturn this.fire('layeradd', {layer: layer});\r\n\t},\r\n\r\n\tremoveLayer: function (layer) {\r\n\t\tif (!this.hasLayer(layer)) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tif (layer in this._layers) {\r\n\t\t\tlayer = this._layers[layer];\r\n\t\t}\r\n\r\n\t\tlayer.removeEventParent(this);\r\n\r\n\t\tLayerGroup.prototype.removeLayer.call(this, layer);\r\n\r\n\t\t// @event layerremove: LayerEvent\r\n\t\t// Fired when a layer is removed from this `FeatureGroup`\r\n\t\treturn this.fire('layerremove', {layer: layer});\r\n\t},\r\n\r\n\t// @method setStyle(style: Path options): this\r\n\t// Sets the given path options to each layer of the group that has a `setStyle` method.\r\n\tsetStyle: function (style) {\r\n\t\treturn this.invoke('setStyle', style);\r\n\t},\r\n\r\n\t// @method bringToFront(): this\r\n\t// Brings the layer group to the top of all other layers\r\n\tbringToFront: function () {\r\n\t\treturn this.invoke('bringToFront');\r\n\t},\r\n\r\n\t// @method bringToBack(): this\r\n\t// Brings the layer group to the back of all other layers\r\n\tbringToBack: function () {\r\n\t\treturn this.invoke('bringToBack');\r\n\t},\r\n\r\n\t// @method getBounds(): LatLngBounds\r\n\t// Returns the LatLngBounds of the Feature Group (created from bounds and coordinates of its children).\r\n\tgetBounds: function () {\r\n\t\tvar bounds = new LatLngBounds();\r\n\r\n\t\tfor (var id in this._layers) {\r\n\t\t\tvar layer = this._layers[id];\r\n\t\t\tbounds.extend(layer.getBounds ? layer.getBounds() : layer.getLatLng());\r\n\t\t}\r\n\t\treturn bounds;\r\n\t}\r\n});\r\n\r\n// @factory L.featureGroup(layers?: Layer[], options?: Object)\r\n// Create a feature group, optionally given an initial set of layers and an `options` object.\r\nexport var featureGroup = function (layers, options) {\r\n\treturn new FeatureGroup(layers, options);\r\n};\r\n", "import {Class} from '../../core/Class';\r\nimport {setOptions} from '../../core/Util';\r\nimport {toPoint as point} from '../../geometry/Point';\r\nimport Browser from '../../core/Browser';\r\n\r\n/*\r\n * @class Icon\r\n * @aka L.Icon\r\n *\r\n * Represents an icon to provide when creating a marker.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var myIcon = L.icon({\r\n *     iconUrl: 'my-icon.png',\r\n *     iconRetinaUrl: 'my-icon@2x.png',\r\n *     iconSize: [38, 95],\r\n *     iconAnchor: [22, 94],\r\n *     popupAnchor: [-3, -76],\r\n *     shadowUrl: 'my-icon-shadow.png',\r\n *     shadowRetinaUrl: 'my-icon-shadow@2x.png',\r\n *     shadowSize: [68, 95],\r\n *     shadowAnchor: [22, 94]\r\n * });\r\n *\r\n * L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);\r\n * ```\r\n *\r\n * `L.Icon.Default` extends `L.Icon` and is the blue icon Leaflet uses for markers by default.\r\n *\r\n */\r\n\r\nexport var Icon = Class.extend({\r\n\r\n\t/* @section\r\n\t * @aka Icon options\r\n\t *\r\n\t * @option iconUrl: String = null\r\n\t * **(required)** The URL to the icon image (absolute or relative to your script path).\r\n\t *\r\n\t * @option iconRetinaUrl: String = null\r\n\t * The URL to a retina sized version of the icon image (absolute or relative to your\r\n\t * script path). Used for Retina screen devices.\r\n\t *\r\n\t * @option iconSize: Point = null\r\n\t * Size of the icon image in pixels.\r\n\t *\r\n\t * @option iconAnchor: Point = null\r\n\t * The coordinates of the \"tip\" of the icon (relative to its top left corner). The icon\r\n\t * will be aligned so that this point is at the marker's geographical location. Centered\r\n\t * by default if size is specified, also can be set in CSS with negative margins.\r\n\t *\r\n\t * @option popupAnchor: Point = [0, 0]\r\n\t * The coordinates of the point from which popups will \"open\", relative to the icon anchor.\r\n\t *\r\n\t * @option tooltipAnchor: Point = [0, 0]\r\n\t * The coordinates of the point from which tooltips will \"open\", relative to the icon anchor.\r\n\t *\r\n\t * @option shadowUrl: String = null\r\n\t * The URL to the icon shadow image. If not specified, no shadow image will be created.\r\n\t *\r\n\t * @option shadowRetinaUrl: String = null\r\n\t *\r\n\t * @option shadowSize: Point = null\r\n\t * Size of the shadow image in pixels.\r\n\t *\r\n\t * @option shadowAnchor: Point = null\r\n\t * The coordinates of the \"tip\" of the shadow (relative to its top left corner) (the same\r\n\t * as iconAnchor if not specified).\r\n\t *\r\n\t * @option className: String = ''\r\n\t * A custom class name to assign to both icon and shadow images. Empty by default.\r\n\t */\r\n\r\n\toptions: {\r\n\t\tpopupAnchor: [0, 0],\r\n\t\ttooltipAnchor: [0, 0],\r\n\r\n\t\t// @option crossOrigin: Boolean|String = false\r\n\t\t// Whether the crossOrigin attribute will be added to the tiles.\r\n\t\t// If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data.\r\n\t\t// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\r\n\t\tcrossOrigin: false\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tsetOptions(this, options);\r\n\t},\r\n\r\n\t// @method createIcon(oldIcon?: HTMLElement): HTMLElement\r\n\t// Called internally when the icon has to be shown, returns a `<img>` HTML element\r\n\t// styled according to the options.\r\n\tcreateIcon: function (oldIcon) {\r\n\t\treturn this._createIcon('icon', oldIcon);\r\n\t},\r\n\r\n\t// @method createShadow(oldIcon?: HTMLElement): HTMLElement\r\n\t// As `createIcon`, but for the shadow beneath it.\r\n\tcreateShadow: function (oldIcon) {\r\n\t\treturn this._createIcon('shadow', oldIcon);\r\n\t},\r\n\r\n\t_createIcon: function (name, oldIcon) {\r\n\t\tvar src = this._getIconUrl(name);\r\n\r\n\t\tif (!src) {\r\n\t\t\tif (name === 'icon') {\r\n\t\t\t\tthrow new Error('iconUrl not set in Icon options (see the docs).');\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvar img = this._createImg(src, oldIcon && oldIcon.tagName === 'IMG' ? oldIcon : null);\r\n\t\tthis._setIconStyles(img, name);\r\n\r\n\t\tif (this.options.crossOrigin || this.options.crossOrigin === '') {\r\n\t\t\timg.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\r\n\t\t}\r\n\r\n\t\treturn img;\r\n\t},\r\n\r\n\t_setIconStyles: function (img, name) {\r\n\t\tvar options = this.options;\r\n\t\tvar sizeOption = options[name + 'Size'];\r\n\r\n\t\tif (typeof sizeOption === 'number') {\r\n\t\t\tsizeOption = [sizeOption, sizeOption];\r\n\t\t}\r\n\r\n\t\tvar size = point(sizeOption),\r\n\t\t    anchor = point(name === 'shadow' && options.shadowAnchor || options.iconAnchor ||\r\n\t\t            size && size.divideBy(2, true));\r\n\r\n\t\timg.className = 'leaflet-marker-' + name + ' ' + (options.className || '');\r\n\r\n\t\tif (anchor) {\r\n\t\t\timg.style.marginLeft = (-anchor.x) + 'px';\r\n\t\t\timg.style.marginTop  = (-anchor.y) + 'px';\r\n\t\t}\r\n\r\n\t\tif (size) {\r\n\t\t\timg.style.width  = size.x + 'px';\r\n\t\t\timg.style.height = size.y + 'px';\r\n\t\t}\r\n\t},\r\n\r\n\t_createImg: function (src, el) {\r\n\t\tel = el || document.createElement('img');\r\n\t\tel.src = src;\r\n\t\treturn el;\r\n\t},\r\n\r\n\t_getIconUrl: function (name) {\r\n\t\treturn Browser.retina && this.options[name + 'RetinaUrl'] || this.options[name + 'Url'];\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.icon(options: Icon options)\r\n// Creates an icon instance with the given options.\r\nexport function icon(options) {\r\n\treturn new Icon(options);\r\n}\r\n", "import {Icon} from './Icon';\nimport * as DomUtil from '../../dom/DomUtil';\n\n/*\n * @miniclass Icon.Default (Icon)\n * @aka L.Icon.Default\n * @section\n *\n * A trivial subclass of `Icon`, represents the icon to use in `Marker`s when\n * no icon is specified. Points to the blue marker image distributed with Leaflet\n * releases.\n *\n * In order to customize the default icon, just change the properties of `L.Icon.Default.prototype.options`\n * (which is a set of `Icon options`).\n *\n * If you want to _completely_ replace the default icon, override the\n * `L.Marker.prototype.options.icon` with your own icon instead.\n */\n\nexport var IconDefault = Icon.extend({\n\n\toptions: {\n\t\ticonUrl:       'marker-icon.png',\n\t\ticonRetinaUrl: 'marker-icon-2x.png',\n\t\tshadowUrl:     'marker-shadow.png',\n\t\ticonSize:    [25, 41],\n\t\ticonAnchor:  [12, 41],\n\t\tpopupAnchor: [1, -34],\n\t\ttooltipAnchor: [16, -28],\n\t\tshadowSize:  [41, 41]\n\t},\n\n\t_getIconUrl: function (name) {\n\t\tif (typeof IconDefault.imagePath !== 'string') {\t// Deprecated, backwards-compatibility only\n\t\t\tIconDefault.imagePath = this._detectIconPath();\n\t\t}\n\n\t\t// @option imagePath: String\n\t\t// `Icon.Default` will try to auto-detect the location of the\n\t\t// blue icon images. If you are placing these images in a non-standard\n\t\t// way, set this option to point to the right path.\n\t\treturn (this.options.imagePath || IconDefault.imagePath) + Icon.prototype._getIconUrl.call(this, name);\n\t},\n\n\t_stripUrl: function (path) {\t// separate function to use in tests\n\t\tvar strip = function (str, re, idx) {\n\t\t\tvar match = re.exec(str);\n\t\t\treturn match && match[idx];\n\t\t};\n\t\tpath = strip(path, /^url\\((['\"])?(.+)\\1\\)$/, 2);\n\t\treturn path && strip(path, /^(.*)marker-icon\\.png$/, 1);\n\t},\n\n\t_detectIconPath: function () {\n\t\tvar el = DomUtil.create('div',  'leaflet-default-icon-path', document.body);\n\t\tvar path = DomUtil.getStyle(el, 'background-image') ||\n\t\t           DomUtil.getStyle(el, 'backgroundImage');\t// IE8\n\n\t\tdocument.body.removeChild(el);\n\t\tpath = this._stripUrl(path);\n\t\tif (path) { return path; }\n\t\tvar link = document.querySelector('link[href$=\"leaflet.css\"]');\n\t\tif (!link) { return ''; }\n\t\treturn link.href.substring(0, link.href.length - 'leaflet.css'.length - 1);\n\t}\n});\n", "import {Handler} from '../../core/Handler';\nimport * as DomUtil from '../../dom/DomUtil';\nimport {Draggable} from '../../dom/Draggable';\nimport {toBounds} from '../../geometry/Bounds';\nimport {toPoint} from '../../geometry/Point';\nimport {requestAnimFrame, cancelAnimFrame} from '../../core/Util';\n\n/*\n * L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable.\n */\n\n\n/* @namespace Marker\n * @section Interaction handlers\n *\n * Interaction handlers are properties of a marker instance that allow you to control interaction behavior in runtime, enabling or disabling certain features such as dragging (see `Handler` methods). Example:\n *\n * ```js\n * marker.dragging.disable();\n * ```\n *\n * @property dragging: Handler\n * Marker dragging handler (by both mouse and touch). Only valid when the marker is on the map (Otherwise set [`marker.options.draggable`](#marker-draggable)).\n */\n\nexport var MarkerDrag = Handler.extend({\n\tinitialize: function (marker) {\n\t\tthis._marker = marker;\n\t},\n\n\taddHooks: function () {\n\t\tvar icon = this._marker._icon;\n\n\t\tif (!this._draggable) {\n\t\t\tthis._draggable = new Draggable(icon, icon, true);\n\t\t}\n\n\t\tthis._draggable.on({\n\t\t\tdragstart: this._onDragStart,\n\t\t\tpredrag: this._onPreDrag,\n\t\t\tdrag: this._onDrag,\n\t\t\tdragend: this._onDragEnd\n\t\t}, this).enable();\n\n\t\tDomUtil.addClass(icon, 'leaflet-marker-draggable');\n\t},\n\n\tremoveHooks: function () {\n\t\tthis._draggable.off({\n\t\t\tdragstart: this._onDragStart,\n\t\t\tpredrag: this._onPreDrag,\n\t\t\tdrag: this._onDrag,\n\t\t\tdragend: this._onDragEnd\n\t\t}, this).disable();\n\n\t\tif (this._marker._icon) {\n\t\t\tDomUtil.removeClass(this._marker._icon, 'leaflet-marker-draggable');\n\t\t}\n\t},\n\n\tmoved: function () {\n\t\treturn this._draggable && this._draggable._moved;\n\t},\n\n\t_adjustPan: function (e) {\n\t\tvar marker = this._marker,\n\t\t    map = marker._map,\n\t\t    speed = this._marker.options.autoPanSpeed,\n\t\t    padding = this._marker.options.autoPanPadding,\n\t\t    iconPos = DomUtil.getPosition(marker._icon),\n\t\t    bounds = map.getPixelBounds(),\n\t\t    origin = map.getPixelOrigin();\n\n\t\tvar panBounds = toBounds(\n\t\t\tbounds.min._subtract(origin).add(padding),\n\t\t\tbounds.max._subtract(origin).subtract(padding)\n\t\t);\n\n\t\tif (!panBounds.contains(iconPos)) {\n\t\t\t// Compute incremental movement\n\t\t\tvar movement = toPoint(\n\t\t\t\t(Math.max(panBounds.max.x, iconPos.x) - panBounds.max.x) / (bounds.max.x - panBounds.max.x) -\n\t\t\t\t(Math.min(panBounds.min.x, iconPos.x) - panBounds.min.x) / (bounds.min.x - panBounds.min.x),\n\n\t\t\t\t(Math.max(panBounds.max.y, iconPos.y) - panBounds.max.y) / (bounds.max.y - panBounds.max.y) -\n\t\t\t\t(Math.min(panBounds.min.y, iconPos.y) - panBounds.min.y) / (bounds.min.y - panBounds.min.y)\n\t\t\t).multiplyBy(speed);\n\n\t\t\tmap.panBy(movement, {animate: false});\n\n\t\t\tthis._draggable._newPos._add(movement);\n\t\t\tthis._draggable._startPos._add(movement);\n\n\t\t\tDomUtil.setPosition(marker._icon, this._draggable._newPos);\n\t\t\tthis._onDrag(e);\n\n\t\t\tthis._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));\n\t\t}\n\t},\n\n\t_onDragStart: function () {\n\t\t// @section Dragging events\n\t\t// @event dragstart: Event\n\t\t// Fired when the user starts dragging the marker.\n\n\t\t// @event movestart: Event\n\t\t// Fired when the marker starts moving (because of dragging).\n\n\t\tthis._oldLatLng = this._marker.getLatLng();\n\n\t\t// When using ES6 imports it could not be set when `Popup` was not imported as well\n\t\tthis._marker.closePopup && this._marker.closePopup();\n\n\t\tthis._marker\n\t\t\t.fire('movestart')\n\t\t\t.fire('dragstart');\n\t},\n\n\t_onPreDrag: function (e) {\n\t\tif (this._marker.options.autoPan) {\n\t\t\tcancelAnimFrame(this._panRequest);\n\t\t\tthis._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));\n\t\t}\n\t},\n\n\t_onDrag: function (e) {\n\t\tvar marker = this._marker,\n\t\t    shadow = marker._shadow,\n\t\t    iconPos = DomUtil.getPosition(marker._icon),\n\t\t    latlng = marker._map.layerPointToLatLng(iconPos);\n\n\t\t// update shadow position\n\t\tif (shadow) {\n\t\t\tDomUtil.setPosition(shadow, iconPos);\n\t\t}\n\n\t\tmarker._latlng = latlng;\n\t\te.latlng = latlng;\n\t\te.oldLatLng = this._oldLatLng;\n\n\t\t// @event drag: Event\n\t\t// Fired repeatedly while the user drags the marker.\n\t\tmarker\n\t\t    .fire('move', e)\n\t\t    .fire('drag', e);\n\t},\n\n\t_onDragEnd: function (e) {\n\t\t// @event dragend: DragEndEvent\n\t\t// Fired when the user stops dragging the marker.\n\n\t\t cancelAnimFrame(this._panRequest);\n\n\t\t// @event moveend: Event\n\t\t// Fired when the marker stops moving (because of dragging).\n\t\tdelete this._oldLatLng;\n\t\tthis._marker\n\t\t    .fire('moveend')\n\t\t    .fire('dragend', e);\n\t}\n});\n", "import {Layer} from '../Layer';\r\nimport {IconDefault} from './Icon.Default';\r\nimport * as Util from '../../core/Util';\r\nimport {toLatLng as latLng} from '../../geo/LatLng';\r\nimport {toPoint as point} from '../../geometry/Point';\r\nimport * as DomUtil from '../../dom/DomUtil';\r\nimport * as DomEvent from '../../dom/DomEvent';\r\nimport {MarkerDrag} from './Marker.Drag';\r\n\r\n/*\r\n * @class Marker\r\n * @inherits Interactive layer\r\n * @aka L.Marker\r\n * L.Marker is used to display clickable/draggable icons on the map. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.marker([50.5, 30.5]).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var Marker = Layer.extend({\r\n\r\n\t// @section\r\n\t// @aka Marker options\r\n\toptions: {\r\n\t\t// @option icon: Icon = *\r\n\t\t// Icon instance to use for rendering the marker.\r\n\t\t// See [Icon documentation](#L.Icon) for details on how to customize the marker icon.\r\n\t\t// If not specified, a common instance of `L.Icon.Default` is used.\r\n\t\ticon: new IconDefault(),\r\n\r\n\t\t// Option inherited from \"Interactive layer\" abstract class\r\n\t\tinteractive: true,\r\n\r\n\t\t// @option keyboard: Boolean = true\r\n\t\t// Whether the marker can be tabbed to with a keyboard and clicked by pressing enter.\r\n\t\tkeyboard: true,\r\n\r\n\t\t// @option title: String = ''\r\n\t\t// Text for the browser tooltip that appear on marker hover (no tooltip by default).\r\n\t\t// [Useful for accessibility](https://leafletjs.com/examples/accessibility/#markers-must-be-labelled).\r\n\t\ttitle: '',\r\n\r\n\t\t// @option alt: String = 'Marker'\r\n\t\t// Text for the `alt` attribute of the icon image.\r\n\t\t// [Useful for accessibility](https://leafletjs.com/examples/accessibility/#markers-must-be-labelled).\r\n\t\talt: 'Marker',\r\n\r\n\t\t// @option zIndexOffset: Number = 0\r\n\t\t// By default, marker images zIndex is set automatically based on its latitude. Use this option if you want to put the marker on top of all others (or below), specifying a high value like `1000` (or high negative value, respectively).\r\n\t\tzIndexOffset: 0,\r\n\r\n\t\t// @option opacity: Number = 1.0\r\n\t\t// The opacity of the marker.\r\n\t\topacity: 1,\r\n\r\n\t\t// @option riseOnHover: Boolean = false\r\n\t\t// If `true`, the marker will get on top of others when you hover the mouse over it.\r\n\t\triseOnHover: false,\r\n\r\n\t\t// @option riseOffset: Number = 250\r\n\t\t// The z-index offset used for the `riseOnHover` feature.\r\n\t\triseOffset: 250,\r\n\r\n\t\t// @option pane: String = 'markerPane'\r\n\t\t// `Map pane` where the markers icon will be added.\r\n\t\tpane: 'markerPane',\r\n\r\n\t\t// @option shadowPane: String = 'shadowPane'\r\n\t\t// `Map pane` where the markers shadow will be added.\r\n\t\tshadowPane: 'shadowPane',\r\n\r\n\t\t// @option bubblingMouseEvents: Boolean = false\r\n\t\t// When `true`, a mouse event on this marker will trigger the same event on the map\r\n\t\t// (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).\r\n\t\tbubblingMouseEvents: false,\r\n\r\n\t\t// @option autoPanOnFocus: Boolean = true\r\n\t\t// When `true`, the map will pan whenever the marker is focused (via\r\n\t\t// e.g. pressing `tab` on the keyboard) to ensure the marker is\r\n\t\t// visible within the map's bounds\r\n\t\tautoPanOnFocus: true,\r\n\r\n\t\t// @section Draggable marker options\r\n\t\t// @option draggable: Boolean = false\r\n\t\t// Whether the marker is draggable with mouse/touch or not.\r\n\t\tdraggable: false,\r\n\r\n\t\t// @option autoPan: Boolean = false\r\n\t\t// Whether to pan the map when dragging this marker near its edge or not.\r\n\t\tautoPan: false,\r\n\r\n\t\t// @option autoPanPadding: Point = Point(50, 50)\r\n\t\t// Distance (in pixels to the left/right and to the top/bottom) of the\r\n\t\t// map edge to start panning the map.\r\n\t\tautoPanPadding: [50, 50],\r\n\r\n\t\t// @option autoPanSpeed: Number = 10\r\n\t\t// Number of pixels the map should pan by.\r\n\t\tautoPanSpeed: 10\r\n\t},\r\n\r\n\t/* @section\r\n\t *\r\n\t * In addition to [shared layer methods](#Layer) like `addTo()` and `remove()` and [popup methods](#Popup) like bindPopup() you can also use the following methods:\r\n\t */\r\n\r\n\tinitialize: function (latlng, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\t\tthis._latlng = latLng(latlng);\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis._zoomAnimated = this._zoomAnimated && map.options.markerZoomAnimation;\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tmap.on('zoomanim', this._animateZoom, this);\r\n\t\t}\r\n\r\n\t\tthis._initIcon();\r\n\t\tthis.update();\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tif (this.dragging && this.dragging.enabled()) {\r\n\t\t\tthis.options.draggable = true;\r\n\t\t\tthis.dragging.removeHooks();\r\n\t\t}\r\n\t\tdelete this.dragging;\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tmap.off('zoomanim', this._animateZoom, this);\r\n\t\t}\r\n\r\n\t\tthis._removeIcon();\r\n\t\tthis._removeShadow();\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\treturn {\r\n\t\t\tzoom: this.update,\r\n\t\t\tviewreset: this.update\r\n\t\t};\r\n\t},\r\n\r\n\t// @method getLatLng: LatLng\r\n\t// Returns the current geographical position of the marker.\r\n\tgetLatLng: function () {\r\n\t\treturn this._latlng;\r\n\t},\r\n\r\n\t// @method setLatLng(latlng: LatLng): this\r\n\t// Changes the marker position to the given point.\r\n\tsetLatLng: function (latlng) {\r\n\t\tvar oldLatLng = this._latlng;\r\n\t\tthis._latlng = latLng(latlng);\r\n\t\tthis.update();\r\n\r\n\t\t// @event move: Event\r\n\t\t// Fired when the marker is moved via [`setLatLng`](#marker-setlatlng) or by [dragging](#marker-dragging). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`.\r\n\t\treturn this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng});\r\n\t},\r\n\r\n\t// @method setZIndexOffset(offset: Number): this\r\n\t// Changes the [zIndex offset](#marker-zindexoffset) of the marker.\r\n\tsetZIndexOffset: function (offset) {\r\n\t\tthis.options.zIndexOffset = offset;\r\n\t\treturn this.update();\r\n\t},\r\n\r\n\t// @method getIcon: Icon\r\n\t// Returns the current icon used by the marker\r\n\tgetIcon: function () {\r\n\t\treturn this.options.icon;\r\n\t},\r\n\r\n\t// @method setIcon(icon: Icon): this\r\n\t// Changes the marker icon.\r\n\tsetIcon: function (icon) {\r\n\r\n\t\tthis.options.icon = icon;\r\n\r\n\t\tif (this._map) {\r\n\t\t\tthis._initIcon();\r\n\t\t\tthis.update();\r\n\t\t}\r\n\r\n\t\tif (this._popup) {\r\n\t\t\tthis.bindPopup(this._popup, this._popup.options);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tgetElement: function () {\r\n\t\treturn this._icon;\r\n\t},\r\n\r\n\tupdate: function () {\r\n\r\n\t\tif (this._icon && this._map) {\r\n\t\t\tvar pos = this._map.latLngToLayerPoint(this._latlng).round();\r\n\t\t\tthis._setPos(pos);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_initIcon: function () {\r\n\t\tvar options = this.options,\r\n\t\t    classToAdd = 'leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');\r\n\r\n\t\tvar icon = options.icon.createIcon(this._icon),\r\n\t\t    addIcon = false;\r\n\r\n\t\t// if we're not reusing the icon, remove the old one and init new one\r\n\t\tif (icon !== this._icon) {\r\n\t\t\tif (this._icon) {\r\n\t\t\t\tthis._removeIcon();\r\n\t\t\t}\r\n\t\t\taddIcon = true;\r\n\r\n\t\t\tif (options.title) {\r\n\t\t\t\ticon.title = options.title;\r\n\t\t\t}\r\n\r\n\t\t\tif (icon.tagName === 'IMG') {\r\n\t\t\t\ticon.alt = options.alt || '';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tDomUtil.addClass(icon, classToAdd);\r\n\r\n\t\tif (options.keyboard) {\r\n\t\t\ticon.tabIndex = '0';\r\n\t\t\ticon.setAttribute('role', 'button');\r\n\t\t}\r\n\r\n\t\tthis._icon = icon;\r\n\r\n\t\tif (options.riseOnHover) {\r\n\t\t\tthis.on({\r\n\t\t\t\tmouseover: this._bringToFront,\r\n\t\t\t\tmouseout: this._resetZIndex\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.options.autoPanOnFocus) {\r\n\t\t\tDomEvent.on(icon, 'focus', this._panOnFocus, this);\r\n\t\t}\r\n\r\n\t\tvar newShadow = options.icon.createShadow(this._shadow),\r\n\t\t    addShadow = false;\r\n\r\n\t\tif (newShadow !== this._shadow) {\r\n\t\t\tthis._removeShadow();\r\n\t\t\taddShadow = true;\r\n\t\t}\r\n\r\n\t\tif (newShadow) {\r\n\t\t\tDomUtil.addClass(newShadow, classToAdd);\r\n\t\t\tnewShadow.alt = '';\r\n\t\t}\r\n\t\tthis._shadow = newShadow;\r\n\r\n\r\n\t\tif (options.opacity < 1) {\r\n\t\t\tthis._updateOpacity();\r\n\t\t}\r\n\r\n\r\n\t\tif (addIcon) {\r\n\t\t\tthis.getPane().appendChild(this._icon);\r\n\t\t}\r\n\t\tthis._initInteraction();\r\n\t\tif (newShadow && addShadow) {\r\n\t\t\tthis.getPane(options.shadowPane).appendChild(this._shadow);\r\n\t\t}\r\n\t},\r\n\r\n\t_removeIcon: function () {\r\n\t\tif (this.options.riseOnHover) {\r\n\t\t\tthis.off({\r\n\t\t\t\tmouseover: this._bringToFront,\r\n\t\t\t\tmouseout: this._resetZIndex\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.options.autoPanOnFocus) {\r\n\t\t\tDomEvent.off(this._icon, 'focus', this._panOnFocus, this);\r\n\t\t}\r\n\r\n\t\tDomUtil.remove(this._icon);\r\n\t\tthis.removeInteractiveTarget(this._icon);\r\n\r\n\t\tthis._icon = null;\r\n\t},\r\n\r\n\t_removeShadow: function () {\r\n\t\tif (this._shadow) {\r\n\t\t\tDomUtil.remove(this._shadow);\r\n\t\t}\r\n\t\tthis._shadow = null;\r\n\t},\r\n\r\n\t_setPos: function (pos) {\r\n\r\n\t\tif (this._icon) {\r\n\t\t\tDomUtil.setPosition(this._icon, pos);\r\n\t\t}\r\n\r\n\t\tif (this._shadow) {\r\n\t\t\tDomUtil.setPosition(this._shadow, pos);\r\n\t\t}\r\n\r\n\t\tthis._zIndex = pos.y + this.options.zIndexOffset;\r\n\r\n\t\tthis._resetZIndex();\r\n\t},\r\n\r\n\t_updateZIndex: function (offset) {\r\n\t\tif (this._icon) {\r\n\t\t\tthis._icon.style.zIndex = this._zIndex + offset;\r\n\t\t}\r\n\t},\r\n\r\n\t_animateZoom: function (opt) {\r\n\t\tvar pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center).round();\r\n\r\n\t\tthis._setPos(pos);\r\n\t},\r\n\r\n\t_initInteraction: function () {\r\n\r\n\t\tif (!this.options.interactive) { return; }\r\n\r\n\t\tDomUtil.addClass(this._icon, 'leaflet-interactive');\r\n\r\n\t\tthis.addInteractiveTarget(this._icon);\r\n\r\n\t\tif (MarkerDrag) {\r\n\t\t\tvar draggable = this.options.draggable;\r\n\t\t\tif (this.dragging) {\r\n\t\t\t\tdraggable = this.dragging.enabled();\r\n\t\t\t\tthis.dragging.disable();\r\n\t\t\t}\r\n\r\n\t\t\tthis.dragging = new MarkerDrag(this);\r\n\r\n\t\t\tif (draggable) {\r\n\t\t\t\tthis.dragging.enable();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// @method setOpacity(opacity: Number): this\r\n\t// Changes the opacity of the marker.\r\n\tsetOpacity: function (opacity) {\r\n\t\tthis.options.opacity = opacity;\r\n\t\tif (this._map) {\r\n\t\t\tthis._updateOpacity();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_updateOpacity: function () {\r\n\t\tvar opacity = this.options.opacity;\r\n\r\n\t\tif (this._icon) {\r\n\t\t\tDomUtil.setOpacity(this._icon, opacity);\r\n\t\t}\r\n\r\n\t\tif (this._shadow) {\r\n\t\t\tDomUtil.setOpacity(this._shadow, opacity);\r\n\t\t}\r\n\t},\r\n\r\n\t_bringToFront: function () {\r\n\t\tthis._updateZIndex(this.options.riseOffset);\r\n\t},\r\n\r\n\t_resetZIndex: function () {\r\n\t\tthis._updateZIndex(0);\r\n\t},\r\n\r\n\t_panOnFocus: function () {\r\n\t\tvar map = this._map;\r\n\t\tif (!map) { return; }\r\n\r\n\t\tvar iconOpts = this.options.icon.options;\r\n\t\tvar size = iconOpts.iconSize ? point(iconOpts.iconSize) : point(0, 0);\r\n\t\tvar anchor = iconOpts.iconAnchor ? point(iconOpts.iconAnchor) : point(0, 0);\r\n\r\n\t\tmap.panInside(this._latlng, {\r\n\t\t\tpaddingTopLeft: anchor,\r\n\t\t\tpaddingBottomRight: size.subtract(anchor)\r\n\t\t});\r\n\t},\r\n\r\n\t_getPopupAnchor: function () {\r\n\t\treturn this.options.icon.options.popupAnchor;\r\n\t},\r\n\r\n\t_getTooltipAnchor: function () {\r\n\t\treturn this.options.icon.options.tooltipAnchor;\r\n\t}\r\n});\r\n\r\n\r\n// factory L.marker(latlng: LatLng, options? : Marker options)\r\n\r\n// @factory L.marker(latlng: LatLng, options? : Marker options)\r\n// Instantiates a Marker object given a geographical point and optionally an options object.\r\nexport function marker(latlng, options) {\r\n\treturn new Marker(latlng, options);\r\n}\r\n", "import {Layer} from '../Layer';\nimport * as Util from '../../core/Util';\n\n/*\n * @class Path\n * @aka L.Path\n * @inherits Interactive layer\n *\n * An abstract class that contains options and constants shared between vector\n * overlays (Polygon, Polyline, Circle). Do not use it directly. Extends `Layer`.\n */\n\nexport var Path = Layer.extend({\n\n\t// @section\n\t// @aka Path options\n\toptions: {\n\t\t// @option stroke: Boolean = true\n\t\t// Whether to draw stroke along the path. Set it to `false` to disable borders on polygons or circles.\n\t\tstroke: true,\n\n\t\t// @option color: String = '#3388ff'\n\t\t// Stroke color\n\t\tcolor: '#3388ff',\n\n\t\t// @option weight: Number = 3\n\t\t// Stroke width in pixels\n\t\tweight: 3,\n\n\t\t// @option opacity: Number = 1.0\n\t\t// Stroke opacity\n\t\topacity: 1,\n\n\t\t// @option lineCap: String= 'round'\n\t\t// A string that defines [shape to be used at the end](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linecap) of the stroke.\n\t\tlineCap: 'round',\n\n\t\t// @option lineJoin: String = 'round'\n\t\t// A string that defines [shape to be used at the corners](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linejoin) of the stroke.\n\t\tlineJoin: 'round',\n\n\t\t// @option dashArray: String = null\n\t\t// A string that defines the stroke [dash pattern](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dasharray). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).\n\t\tdashArray: null,\n\n\t\t// @option dashOffset: String = null\n\t\t// A string that defines the [distance into the dash pattern to start the dash](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dashoffset). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).\n\t\tdashOffset: null,\n\n\t\t// @option fill: Boolean = depends\n\t\t// Whether to fill the path with color. Set it to `false` to disable filling on polygons or circles.\n\t\tfill: false,\n\n\t\t// @option fillColor: String = *\n\t\t// Fill color. Defaults to the value of the [`color`](#path-color) option\n\t\tfillColor: null,\n\n\t\t// @option fillOpacity: Number = 0.2\n\t\t// Fill opacity.\n\t\tfillOpacity: 0.2,\n\n\t\t// @option fillRule: String = 'evenodd'\n\t\t// A string that defines [how the inside of a shape](https://developer.mozilla.org/docs/Web/SVG/Attribute/fill-rule) is determined.\n\t\tfillRule: 'evenodd',\n\n\t\t// className: '',\n\n\t\t// Option inherited from \"Interactive layer\" abstract class\n\t\tinteractive: true,\n\n\t\t// @option bubblingMouseEvents: Boolean = true\n\t\t// When `true`, a mouse event on this path will trigger the same event on the map\n\t\t// (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).\n\t\tbubblingMouseEvents: true\n\t},\n\n\tbeforeAdd: function (map) {\n\t\t// Renderer is set here because we need to call renderer.getEvents\n\t\t// before this.getEvents.\n\t\tthis._renderer = map.getRenderer(this);\n\t},\n\n\tonAdd: function () {\n\t\tthis._renderer._initPath(this);\n\t\tthis._reset();\n\t\tthis._renderer._addPath(this);\n\t},\n\n\tonRemove: function () {\n\t\tthis._renderer._removePath(this);\n\t},\n\n\t// @method redraw(): this\n\t// Redraws the layer. Sometimes useful after you changed the coordinates that the path uses.\n\tredraw: function () {\n\t\tif (this._map) {\n\t\t\tthis._renderer._updatePath(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method setStyle(style: Path options): this\n\t// Changes the appearance of a Path based on the options in the `Path options` object.\n\tsetStyle: function (style) {\n\t\tUtil.setOptions(this, style);\n\t\tif (this._renderer) {\n\t\t\tthis._renderer._updateStyle(this);\n\t\t\tif (this.options.stroke && style && Object.prototype.hasOwnProperty.call(style, 'weight')) {\n\t\t\t\tthis._updateBounds();\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method bringToFront(): this\n\t// Brings the layer to the top of all path layers.\n\tbringToFront: function () {\n\t\tif (this._renderer) {\n\t\t\tthis._renderer._bringToFront(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method bringToBack(): this\n\t// Brings the layer to the bottom of all path layers.\n\tbringToBack: function () {\n\t\tif (this._renderer) {\n\t\t\tthis._renderer._bringToBack(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\tgetElement: function () {\n\t\treturn this._path;\n\t},\n\n\t_reset: function () {\n\t\t// defined in child classes\n\t\tthis._project();\n\t\tthis._update();\n\t},\n\n\t_clickTolerance: function () {\n\t\t// used when doing hit detection for Canvas layers\n\t\treturn (this.options.stroke ? this.options.weight / 2 : 0) +\n\t\t  (this._renderer.options.tolerance || 0);\n\t}\n});\n", "import {Path} from './Path';\nimport * as Util from '../../core/Util';\nimport {toLatLng} from '../../geo/LatLng';\nimport {Bounds} from '../../geometry/Bounds';\n\n\n/*\n * @class CircleMarker\n * @aka L.CircleMarker\n * @inherits Path\n *\n * A circle of a fixed size with radius specified in pixels. Extends `Path`.\n */\n\nexport var CircleMarker = Path.extend({\n\n\t// @section\n\t// @aka CircleMarker options\n\toptions: {\n\t\tfill: true,\n\n\t\t// @option radius: Number = 10\n\t\t// Radius of the circle marker, in pixels\n\t\tradius: 10\n\t},\n\n\tinitialize: function (latlng, options) {\n\t\tUtil.setOptions(this, options);\n\t\tthis._latlng = toLatLng(latlng);\n\t\tthis._radius = this.options.radius;\n\t},\n\n\t// @method setLatLng(latLng: LatLng): this\n\t// Sets the position of a circle marker to a new location.\n\tsetLatLng: function (latlng) {\n\t\tvar oldLatLng = this._latlng;\n\t\tthis._latlng = toLatLng(latlng);\n\t\tthis.redraw();\n\n\t\t// @event move: Event\n\t\t// Fired when the marker is moved via [`setLatLng`](#circlemarker-setlatlng). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`.\n\t\treturn this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng});\n\t},\n\n\t// @method getLatLng(): LatLng\n\t// Returns the current geographical position of the circle marker\n\tgetLatLng: function () {\n\t\treturn this._latlng;\n\t},\n\n\t// @method setRadius(radius: Number): this\n\t// Sets the radius of a circle marker. Units are in pixels.\n\tsetRadius: function (radius) {\n\t\tthis.options.radius = this._radius = radius;\n\t\treturn this.redraw();\n\t},\n\n\t// @method getRadius(): Number\n\t// Returns the current radius of the circle\n\tgetRadius: function () {\n\t\treturn this._radius;\n\t},\n\n\tsetStyle : function (options) {\n\t\tvar radius = options && options.radius || this._radius;\n\t\tPath.prototype.setStyle.call(this, options);\n\t\tthis.setRadius(radius);\n\t\treturn this;\n\t},\n\n\t_project: function () {\n\t\tthis._point = this._map.latLngToLayerPoint(this._latlng);\n\t\tthis._updateBounds();\n\t},\n\n\t_updateBounds: function () {\n\t\tvar r = this._radius,\n\t\t    r2 = this._radiusY || r,\n\t\t    w = this._clickTolerance(),\n\t\t    p = [r + w, r2 + w];\n\t\tthis._pxBounds = new Bounds(this._point.subtract(p), this._point.add(p));\n\t},\n\n\t_update: function () {\n\t\tif (this._map) {\n\t\t\tthis._updatePath();\n\t\t}\n\t},\n\n\t_updatePath: function () {\n\t\tthis._renderer._updateCircle(this);\n\t},\n\n\t_empty: function () {\n\t\treturn this._radius && !this._renderer._bounds.intersects(this._pxBounds);\n\t},\n\n\t// Needed by the `Canvas` renderer for interactivity\n\t_containsPoint: function (p) {\n\t\treturn p.distanceTo(this._point) <= this._radius + this._clickTolerance();\n\t}\n});\n\n\n// @factory L.circleMarker(latlng: LatLng, options?: CircleMarker options)\n// Instantiates a circle marker object given a geographical point, and an optional options object.\nexport function circleMarker(latlng, options) {\n\treturn new CircleMarker(latlng, options);\n}\n", "import {CircleMarker} from './CircleMarker';\nimport {Path} from './Path';\nimport * as Util from '../../core/Util';\nimport {toLatLng} from '../../geo/LatLng';\nimport {LatLngBounds} from '../../geo/LatLngBounds';\nimport {Earth} from '../../geo/crs/CRS.Earth';\n\n\n/*\n * @class Circle\n * @aka L.Circle\n * @inherits CircleMarker\n *\n * A class for drawing circle overlays on a map. Extends `CircleMarker`.\n *\n * It's an approximation and starts to diverge from a real circle closer to poles (due to projection distortion).\n *\n * @example\n *\n * ```js\n * L.circle([50.5, 30.5], {radius: 200}).addTo(map);\n * ```\n */\n\nexport var Circle = CircleMarker.extend({\n\n\tinitialize: function (latlng, options, legacyOptions) {\n\t\tif (typeof options === 'number') {\n\t\t\t// Backwards compatibility with 0.7.x factory (latlng, radius, options?)\n\t\t\toptions = Util.extend({}, legacyOptions, {radius: options});\n\t\t}\n\t\tUtil.setOptions(this, options);\n\t\tthis._latlng = toLatLng(latlng);\n\n\t\tif (isNaN(this.options.radius)) { throw new Error('Circle radius cannot be NaN'); }\n\n\t\t// @section\n\t\t// @aka Circle options\n\t\t// @option radius: Number; Radius of the circle, in meters.\n\t\tthis._mRadius = this.options.radius;\n\t},\n\n\t// @method setRadius(radius: Number): this\n\t// Sets the radius of a circle. Units are in meters.\n\tsetRadius: function (radius) {\n\t\tthis._mRadius = radius;\n\t\treturn this.redraw();\n\t},\n\n\t// @method getRadius(): Number\n\t// Returns the current radius of a circle. Units are in meters.\n\tgetRadius: function () {\n\t\treturn this._mRadius;\n\t},\n\n\t// @method getBounds(): LatLngBounds\n\t// Returns the `LatLngBounds` of the path.\n\tgetBounds: function () {\n\t\tvar half = [this._radius, this._radiusY || this._radius];\n\n\t\treturn new LatLngBounds(\n\t\t\tthis._map.layerPointToLatLng(this._point.subtract(half)),\n\t\t\tthis._map.layerPointToLatLng(this._point.add(half)));\n\t},\n\n\tsetStyle: Path.prototype.setStyle,\n\n\t_project: function () {\n\n\t\tvar lng = this._latlng.lng,\n\t\t    lat = this._latlng.lat,\n\t\t    map = this._map,\n\t\t    crs = map.options.crs;\n\n\t\tif (crs.distance === Earth.distance) {\n\t\t\tvar d = Math.PI / 180,\n\t\t\t    latR = (this._mRadius / Earth.R) / d,\n\t\t\t    top = map.project([lat + latR, lng]),\n\t\t\t    bottom = map.project([lat - latR, lng]),\n\t\t\t    p = top.add(bottom).divideBy(2),\n\t\t\t    lat2 = map.unproject(p).lat,\n\t\t\t    lngR = Math.acos((Math.cos(latR * d) - Math.sin(lat * d) * Math.sin(lat2 * d)) /\n\t\t\t            (Math.cos(lat * d) * Math.cos(lat2 * d))) / d;\n\n\t\t\tif (isNaN(lngR) || lngR === 0) {\n\t\t\t\tlngR = latR / Math.cos(Math.PI / 180 * lat); // Fallback for edge case, #2425\n\t\t\t}\n\n\t\t\tthis._point = p.subtract(map.getPixelOrigin());\n\t\t\tthis._radius = isNaN(lngR) ? 0 : p.x - map.project([lat2, lng - lngR]).x;\n\t\t\tthis._radiusY = p.y - top.y;\n\n\t\t} else {\n\t\t\tvar latlng2 = crs.unproject(crs.project(this._latlng).subtract([this._mRadius, 0]));\n\n\t\t\tthis._point = map.latLngToLayerPoint(this._latlng);\n\t\t\tthis._radius = this._point.x - map.latLngToLayerPoint(latlng2).x;\n\t\t}\n\n\t\tthis._updateBounds();\n\t}\n});\n\n// @factory L.circle(latlng: LatLng, options?: Circle options)\n// Instantiates a circle object given a geographical point, and an options object\n// which contains the circle radius.\n// @alternative\n// @factory L.circle(latlng: LatLng, radius: Number, options?: Circle options)\n// Obsolete way of instantiating a circle, for compatibility with 0.7.x code.\n// Do not use in new applications or plugins.\nexport function circle(latlng, options, legacyOptions) {\n\treturn new Circle(latlng, options, legacyOptions);\n}\n", "import {Path} from './Path';\nimport * as Util from '../../core/Util';\nimport * as LineUtil from '../../geometry/LineUtil';\nimport {LatLng, toLatLng} from '../../geo/LatLng';\nimport {LatLngBounds} from '../../geo/LatLngBounds';\nimport {Bounds} from '../../geometry/Bounds';\nimport {Point} from '../../geometry/Point';\n\n/*\n * @class Polyline\n * @aka L.Polyline\n * @inherits Path\n *\n * A class for drawing polyline overlays on a map. Extends `Path`.\n *\n * @example\n *\n * ```js\n * // create a red polyline from an array of LatLng points\n * var latlngs = [\n * \t[45.51, -122.68],\n * \t[37.77, -122.43],\n * \t[34.04, -118.2]\n * ];\n *\n * var polyline = L.polyline(latlngs, {color: 'red'}).addTo(map);\n *\n * // zoom the map to the polyline\n * map.fitBounds(polyline.getBounds());\n * ```\n *\n * You can also pass a multi-dimensional array to represent a `MultiPolyline` shape:\n *\n * ```js\n * // create a red polyline from an array of arrays of LatLng points\n * var latlngs = [\n * \t[[45.51, -122.68],\n * \t [37.77, -122.43],\n * \t [34.04, -118.2]],\n * \t[[40.78, -73.91],\n * \t [41.83, -87.62],\n * \t [32.76, -96.72]]\n * ];\n * ```\n */\n\n\nexport var Polyline = Path.extend({\n\n\t// @section\n\t// @aka Polyline options\n\toptions: {\n\t\t// @option smoothFactor: Number = 1.0\n\t\t// How much to simplify the polyline on each zoom level. More means\n\t\t// better performance and smoother look, and less means more accurate representation.\n\t\tsmoothFactor: 1.0,\n\n\t\t// @option noClip: Boolean = false\n\t\t// Disable polyline clipping.\n\t\tnoClip: false\n\t},\n\n\tinitialize: function (latlngs, options) {\n\t\tUtil.setOptions(this, options);\n\t\tthis._setLatLngs(latlngs);\n\t},\n\n\t// @method getLatLngs(): LatLng[]\n\t// Returns an array of the points in the path, or nested arrays of points in case of multi-polyline.\n\tgetLatLngs: function () {\n\t\treturn this._latlngs;\n\t},\n\n\t// @method setLatLngs(latlngs: LatLng[]): this\n\t// Replaces all the points in the polyline with the given array of geographical points.\n\tsetLatLngs: function (latlngs) {\n\t\tthis._setLatLngs(latlngs);\n\t\treturn this.redraw();\n\t},\n\n\t// @method isEmpty(): Boolean\n\t// Returns `true` if the Polyline has no LatLngs.\n\tisEmpty: function () {\n\t\treturn !this._latlngs.length;\n\t},\n\n\t// @method closestLayerPoint(p: Point): Point\n\t// Returns the point closest to `p` on the Polyline.\n\tclosestLayerPoint: function (p) {\n\t\tvar minDistance = Infinity,\n\t\t    minPoint = null,\n\t\t    closest = LineUtil._sqClosestPointOnSegment,\n\t\t    p1, p2;\n\n\t\tfor (var j = 0, jLen = this._parts.length; j < jLen; j++) {\n\t\t\tvar points = this._parts[j];\n\n\t\t\tfor (var i = 1, len = points.length; i < len; i++) {\n\t\t\t\tp1 = points[i - 1];\n\t\t\t\tp2 = points[i];\n\n\t\t\t\tvar sqDist = closest(p, p1, p2, true);\n\n\t\t\t\tif (sqDist < minDistance) {\n\t\t\t\t\tminDistance = sqDist;\n\t\t\t\t\tminPoint = closest(p, p1, p2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (minPoint) {\n\t\t\tminPoint.distance = Math.sqrt(minDistance);\n\t\t}\n\t\treturn minPoint;\n\t},\n\n\t// @method getCenter(): LatLng\n\t// Returns the center ([centroid](https://en.wikipedia.org/wiki/Centroid)) of the polyline.\n\tgetCenter: function () {\n\t\t// throws error when not yet added to map as this center calculation requires projected coordinates\n\t\tif (!this._map) {\n\t\t\tthrow new Error('Must add layer to map before using getCenter()');\n\t\t}\n\t\treturn LineUtil.polylineCenter(this._defaultShape(), this._map.options.crs);\n\t},\n\n\t// @method getBounds(): LatLngBounds\n\t// Returns the `LatLngBounds` of the path.\n\tgetBounds: function () {\n\t\treturn this._bounds;\n\t},\n\n\t// @method addLatLng(latlng: LatLng, latlngs?: LatLng[]): this\n\t// Adds a given point to the polyline. By default, adds to the first ring of\n\t// the polyline in case of a multi-polyline, but can be overridden by passing\n\t// a specific ring as a LatLng array (that you can earlier access with [`getLatLngs`](#polyline-getlatlngs)).\n\taddLatLng: function (latlng, latlngs) {\n\t\tlatlngs = latlngs || this._defaultShape();\n\t\tlatlng = toLatLng(latlng);\n\t\tlatlngs.push(latlng);\n\t\tthis._bounds.extend(latlng);\n\t\treturn this.redraw();\n\t},\n\n\t_setLatLngs: function (latlngs) {\n\t\tthis._bounds = new LatLngBounds();\n\t\tthis._latlngs = this._convertLatLngs(latlngs);\n\t},\n\n\t_defaultShape: function () {\n\t\treturn LineUtil.isFlat(this._latlngs) ? this._latlngs : this._latlngs[0];\n\t},\n\n\t// recursively convert latlngs input into actual LatLng instances; calculate bounds along the way\n\t_convertLatLngs: function (latlngs) {\n\t\tvar result = [],\n\t\t    flat = LineUtil.isFlat(latlngs);\n\n\t\tfor (var i = 0, len = latlngs.length; i < len; i++) {\n\t\t\tif (flat) {\n\t\t\t\tresult[i] = toLatLng(latlngs[i]);\n\t\t\t\tthis._bounds.extend(result[i]);\n\t\t\t} else {\n\t\t\t\tresult[i] = this._convertLatLngs(latlngs[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t},\n\n\t_project: function () {\n\t\tvar pxBounds = new Bounds();\n\t\tthis._rings = [];\n\t\tthis._projectLatlngs(this._latlngs, this._rings, pxBounds);\n\n\t\tif (this._bounds.isValid() && pxBounds.isValid()) {\n\t\t\tthis._rawPxBounds = pxBounds;\n\t\t\tthis._updateBounds();\n\t\t}\n\t},\n\n\t_updateBounds: function () {\n\t\tvar w = this._clickTolerance(),\n\t\t    p = new Point(w, w);\n\n\t\tif (!this._rawPxBounds) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._pxBounds = new Bounds([\n\t\t\tthis._rawPxBounds.min.subtract(p),\n\t\t\tthis._rawPxBounds.max.add(p)\n\t\t]);\n\t},\n\n\t// recursively turns latlngs into a set of rings with projected coordinates\n\t_projectLatlngs: function (latlngs, result, projectedBounds) {\n\t\tvar flat = latlngs[0] instanceof LatLng,\n\t\t    len = latlngs.length,\n\t\t    i, ring;\n\n\t\tif (flat) {\n\t\t\tring = [];\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tring[i] = this._map.latLngToLayerPoint(latlngs[i]);\n\t\t\t\tprojectedBounds.extend(ring[i]);\n\t\t\t}\n\t\t\tresult.push(ring);\n\t\t} else {\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tthis._projectLatlngs(latlngs[i], result, projectedBounds);\n\t\t\t}\n\t\t}\n\t},\n\n\t// clip polyline by renderer bounds so that we have less to render for performance\n\t_clipPoints: function () {\n\t\tvar bounds = this._renderer._bounds;\n\n\t\tthis._parts = [];\n\t\tif (!this._pxBounds || !this._pxBounds.intersects(bounds)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.noClip) {\n\t\t\tthis._parts = this._rings;\n\t\t\treturn;\n\t\t}\n\n\t\tvar parts = this._parts,\n\t\t    i, j, k, len, len2, segment, points;\n\n\t\tfor (i = 0, k = 0, len = this._rings.length; i < len; i++) {\n\t\t\tpoints = this._rings[i];\n\n\t\t\tfor (j = 0, len2 = points.length; j < len2 - 1; j++) {\n\t\t\t\tsegment = LineUtil.clipSegment(points[j], points[j + 1], bounds, j, true);\n\n\t\t\t\tif (!segment) { continue; }\n\n\t\t\t\tparts[k] = parts[k] || [];\n\t\t\t\tparts[k].push(segment[0]);\n\n\t\t\t\t// if segment goes out of screen, or it's the last one, it's the end of the line part\n\t\t\t\tif ((segment[1] !== points[j + 1]) || (j === len2 - 2)) {\n\t\t\t\t\tparts[k].push(segment[1]);\n\t\t\t\t\tk++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// simplify each clipped part of the polyline for performance\n\t_simplifyPoints: function () {\n\t\tvar parts = this._parts,\n\t\t    tolerance = this.options.smoothFactor;\n\n\t\tfor (var i = 0, len = parts.length; i < len; i++) {\n\t\t\tparts[i] = LineUtil.simplify(parts[i], tolerance);\n\t\t}\n\t},\n\n\t_update: function () {\n\t\tif (!this._map) { return; }\n\n\t\tthis._clipPoints();\n\t\tthis._simplifyPoints();\n\t\tthis._updatePath();\n\t},\n\n\t_updatePath: function () {\n\t\tthis._renderer._updatePoly(this);\n\t},\n\n\t// Needed by the `Canvas` renderer for interactivity\n\t_containsPoint: function (p, closed) {\n\t\tvar i, j, k, len, len2, part,\n\t\t    w = this._clickTolerance();\n\n\t\tif (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }\n\n\t\t// hit detection for polylines\n\t\tfor (i = 0, len = this._parts.length; i < len; i++) {\n\t\t\tpart = this._parts[i];\n\n\t\t\tfor (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {\n\t\t\t\tif (!closed && (j === 0)) { continue; }\n\n\t\t\t\tif (LineUtil.pointToSegmentDistance(p, part[k], part[j]) <= w) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n});\n\n// @factory L.polyline(latlngs: LatLng[], options?: Polyline options)\n// Instantiates a polyline object given an array of geographical points and\n// optionally an options object. You can create a `Polyline` object with\n// multiple separate lines (`MultiPolyline`) by passing an array of arrays\n// of geographic points.\nexport function polyline(latlngs, options) {\n\treturn new Polyline(latlngs, options);\n}\n\n// Retrocompat. Allow plugins to support Leaflet versions before and after 1.1.\nPolyline._flat = LineUtil._flat;\n", "import {Polyline} from './Polyline';\nimport {LatLng} from '../../geo/LatLng';\nimport * as LineUtil from '../../geometry/LineUtil';\nimport {Point} from '../../geometry/Point';\nimport {Bounds} from '../../geometry/Bounds';\nimport * as PolyUtil from '../../geometry/PolyUtil';\n\n/*\n * @class Polygon\n * @aka L.Polygon\n * @inherits Polyline\n *\n * A class for drawing polygon overlays on a map. Extends `Polyline`.\n *\n * Note that points you pass when creating a polygon shouldn't have an additional last point equal to the first one — it's better to filter out such points.\n *\n *\n * @example\n *\n * ```js\n * // create a red polygon from an array of LatLng points\n * var latlngs = [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]];\n *\n * var polygon = L.polygon(latlngs, {color: 'red'}).addTo(map);\n *\n * // zoom the map to the polygon\n * map.fitBounds(polygon.getBounds());\n * ```\n *\n * You can also pass an array of arrays of latlngs, with the first array representing the outer shape and the other arrays representing holes in the outer shape:\n *\n * ```js\n * var latlngs = [\n *   [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring\n *   [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole\n * ];\n * ```\n *\n * Additionally, you can pass a multi-dimensional array to represent a MultiPolygon shape.\n *\n * ```js\n * var latlngs = [\n *   [ // first polygon\n *     [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring\n *     [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole\n *   ],\n *   [ // second polygon\n *     [[41, -111.03],[45, -111.04],[45, -104.05],[41, -104.05]]\n *   ]\n * ];\n * ```\n */\n\nexport var Polygon = Polyline.extend({\n\n\toptions: {\n\t\tfill: true\n\t},\n\n\tisEmpty: function () {\n\t\treturn !this._latlngs.length || !this._latlngs[0].length;\n\t},\n\n\t// @method getCenter(): LatLng\n\t// Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the Polygon.\n\tgetCenter: function () {\n\t\t// throws error when not yet added to map as this center calculation requires projected coordinates\n\t\tif (!this._map) {\n\t\t\tthrow new Error('Must add layer to map before using getCenter()');\n\t\t}\n\t\treturn PolyUtil.polygonCenter(this._defaultShape(), this._map.options.crs);\n\t},\n\n\t_convertLatLngs: function (latlngs) {\n\t\tvar result = Polyline.prototype._convertLatLngs.call(this, latlngs),\n\t\t    len = result.length;\n\n\t\t// remove last point if it equals first one\n\t\tif (len >= 2 && result[0] instanceof LatLng && result[0].equals(result[len - 1])) {\n\t\t\tresult.pop();\n\t\t}\n\t\treturn result;\n\t},\n\n\t_setLatLngs: function (latlngs) {\n\t\tPolyline.prototype._setLatLngs.call(this, latlngs);\n\t\tif (LineUtil.isFlat(this._latlngs)) {\n\t\t\tthis._latlngs = [this._latlngs];\n\t\t}\n\t},\n\n\t_defaultShape: function () {\n\t\treturn LineUtil.isFlat(this._latlngs[0]) ? this._latlngs[0] : this._latlngs[0][0];\n\t},\n\n\t_clipPoints: function () {\n\t\t// polygons need a different clipping algorithm so we redefine that\n\n\t\tvar bounds = this._renderer._bounds,\n\t\t    w = this.options.weight,\n\t\t    p = new Point(w, w);\n\n\t\t// increase clip padding by stroke width to avoid stroke on clip edges\n\t\tbounds = new Bounds(bounds.min.subtract(p), bounds.max.add(p));\n\n\t\tthis._parts = [];\n\t\tif (!this._pxBounds || !this._pxBounds.intersects(bounds)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.noClip) {\n\t\t\tthis._parts = this._rings;\n\t\t\treturn;\n\t\t}\n\n\t\tfor (var i = 0, len = this._rings.length, clipped; i < len; i++) {\n\t\t\tclipped = PolyUtil.clipPolygon(this._rings[i], bounds, true);\n\t\t\tif (clipped.length) {\n\t\t\t\tthis._parts.push(clipped);\n\t\t\t}\n\t\t}\n\t},\n\n\t_updatePath: function () {\n\t\tthis._renderer._updatePoly(this, true);\n\t},\n\n\t// Needed by the `Canvas` renderer for interactivity\n\t_containsPoint: function (p) {\n\t\tvar inside = false,\n\t\t    part, p1, p2, i, j, k, len, len2;\n\n\t\tif (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }\n\n\t\t// ray casting algorithm for detecting if point is in polygon\n\t\tfor (i = 0, len = this._parts.length; i < len; i++) {\n\t\t\tpart = this._parts[i];\n\n\t\t\tfor (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {\n\t\t\t\tp1 = part[j];\n\t\t\t\tp2 = part[k];\n\n\t\t\t\tif (((p1.y > p.y) !== (p2.y > p.y)) && (p.x < (p2.x - p1.x) * (p.y - p1.y) / (p2.y - p1.y) + p1.x)) {\n\t\t\t\t\tinside = !inside;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// also check if it's on polygon stroke\n\t\treturn inside || Polyline.prototype._containsPoint.call(this, p, true);\n\t}\n\n});\n\n\n// @factory L.polygon(latlngs: LatLng[], options?: Polyline options)\nexport function polygon(latlngs, options) {\n\treturn new Polygon(latlngs, options);\n}\n", "import {LayerGroup} from './LayerGroup';\r\nimport {FeatureGroup} from './FeatureGroup';\r\nimport * as Util from '../core/Util';\r\nimport {Marker} from './marker/Marker';\r\nimport {Circle} from './vector/Circle';\r\nimport {CircleMarker} from './vector/CircleMarker';\r\nimport {Polyline} from './vector/Polyline';\r\nimport {Polygon} from './vector/Polygon';\r\nimport {LatLng} from '../geo/LatLng';\r\nimport * as LineUtil from '../geometry/LineUtil';\r\nimport {toLatLng} from '../geo/LatLng';\r\n\r\n\r\n/*\r\n * @class GeoJSON\r\n * @aka L.GeoJSON\r\n * @inherits FeatureGroup\r\n *\r\n * Represents a GeoJSON object or an array of GeoJSON objects. Allows you to parse\r\n * GeoJSON data and display it on the map. Extends `FeatureGroup`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.geoJSON(data, {\r\n * \tstyle: function (feature) {\r\n * \t\treturn {color: feature.properties.color};\r\n * \t}\r\n * }).bindPopup(function (layer) {\r\n * \treturn layer.feature.properties.description;\r\n * }).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var GeoJSON = FeatureGroup.extend({\r\n\r\n\t/* @section\r\n\t * @aka GeoJSON options\r\n\t *\r\n\t * @option pointToLayer: Function = *\r\n\t * A `Function` defining how GeoJSON points spawn Leaflet layers. It is internally\r\n\t * called when data is added, passing the GeoJSON point feature and its `LatLng`.\r\n\t * The default is to spawn a default `Marker`:\r\n\t * ```js\r\n\t * function(geoJsonPoint, latlng) {\r\n\t * \treturn L.marker(latlng);\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @option style: Function = *\r\n\t * A `Function` defining the `Path options` for styling GeoJSON lines and polygons,\r\n\t * called internally when data is added.\r\n\t * The default value is to not override any defaults:\r\n\t * ```js\r\n\t * function (geoJsonFeature) {\r\n\t * \treturn {}\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @option onEachFeature: Function = *\r\n\t * A `Function` that will be called once for each created `Feature`, after it has\r\n\t * been created and styled. Useful for attaching events and popups to features.\r\n\t * The default is to do nothing with the newly created layers:\r\n\t * ```js\r\n\t * function (feature, layer) {}\r\n\t * ```\r\n\t *\r\n\t * @option filter: Function = *\r\n\t * A `Function` that will be used to decide whether to include a feature or not.\r\n\t * The default is to include all features:\r\n\t * ```js\r\n\t * function (geoJsonFeature) {\r\n\t * \treturn true;\r\n\t * }\r\n\t * ```\r\n\t * Note: dynamically changing the `filter` option will have effect only on newly\r\n\t * added data. It will _not_ re-evaluate already included features.\r\n\t *\r\n\t * @option coordsToLatLng: Function = *\r\n\t * A `Function` that will be used for converting GeoJSON coordinates to `LatLng`s.\r\n\t * The default is the `coordsToLatLng` static method.\r\n\t *\r\n\t * @option markersInheritOptions: Boolean = false\r\n\t * Whether default Markers for \"Point\" type Features inherit from group options.\r\n\t */\r\n\r\n\tinitialize: function (geojson, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._layers = {};\r\n\r\n\t\tif (geojson) {\r\n\t\t\tthis.addData(geojson);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method addData( <GeoJSON> data ): this\r\n\t// Adds a GeoJSON object to the layer.\r\n\taddData: function (geojson) {\r\n\t\tvar features = Util.isArray(geojson) ? geojson : geojson.features,\r\n\t\t    i, len, feature;\r\n\r\n\t\tif (features) {\r\n\t\t\tfor (i = 0, len = features.length; i < len; i++) {\r\n\t\t\t\t// only add this if geometry or geometries are set and not null\r\n\t\t\t\tfeature = features[i];\r\n\t\t\t\tif (feature.geometries || feature.geometry || feature.features || feature.coordinates) {\r\n\t\t\t\t\tthis.addData(feature);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tvar options = this.options;\r\n\r\n\t\tif (options.filter && !options.filter(geojson)) { return this; }\r\n\r\n\t\tvar layer = geometryToLayer(geojson, options);\r\n\t\tif (!layer) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tlayer.feature = asFeature(geojson);\r\n\r\n\t\tlayer.defaultOptions = layer.options;\r\n\t\tthis.resetStyle(layer);\r\n\r\n\t\tif (options.onEachFeature) {\r\n\t\t\toptions.onEachFeature(geojson, layer);\r\n\t\t}\r\n\r\n\t\treturn this.addLayer(layer);\r\n\t},\r\n\r\n\t// @method resetStyle( <Path> layer? ): this\r\n\t// Resets the given vector layer's style to the original GeoJSON style, useful for resetting style after hover events.\r\n\t// If `layer` is omitted, the style of all features in the current layer is reset.\r\n\tresetStyle: function (layer) {\r\n\t\tif (layer === undefined) {\r\n\t\t\treturn this.eachLayer(this.resetStyle, this);\r\n\t\t}\r\n\t\t// reset any custom styles\r\n\t\tlayer.options = Util.extend({}, layer.defaultOptions);\r\n\t\tthis._setLayerStyle(layer, this.options.style);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setStyle( <Function> style ): this\r\n\t// Changes styles of GeoJSON vector layers with the given style function.\r\n\tsetStyle: function (style) {\r\n\t\treturn this.eachLayer(function (layer) {\r\n\t\t\tthis._setLayerStyle(layer, style);\r\n\t\t}, this);\r\n\t},\r\n\r\n\t_setLayerStyle: function (layer, style) {\r\n\t\tif (layer.setStyle) {\r\n\t\t\tif (typeof style === 'function') {\r\n\t\t\t\tstyle = style(layer.feature);\r\n\t\t\t}\r\n\t\t\tlayer.setStyle(style);\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// @section\r\n// There are several static functions which can be called without instantiating L.GeoJSON:\r\n\r\n// @function geometryToLayer(featureData: Object, options?: GeoJSON options): Layer\r\n// Creates a `Layer` from a given GeoJSON feature. Can use a custom\r\n// [`pointToLayer`](#geojson-pointtolayer) and/or [`coordsToLatLng`](#geojson-coordstolatlng)\r\n// functions if provided as options.\r\nexport function geometryToLayer(geojson, options) {\r\n\r\n\tvar geometry = geojson.type === 'Feature' ? geojson.geometry : geojson,\r\n\t    coords = geometry ? geometry.coordinates : null,\r\n\t    layers = [],\r\n\t    pointToLayer = options && options.pointToLayer,\r\n\t    _coordsToLatLng = options && options.coordsToLatLng || coordsToLatLng,\r\n\t    latlng, latlngs, i, len;\r\n\r\n\tif (!coords && !geometry) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tswitch (geometry.type) {\r\n\tcase 'Point':\r\n\t\tlatlng = _coordsToLatLng(coords);\r\n\t\treturn _pointToLayer(pointToLayer, geojson, latlng, options);\r\n\r\n\tcase 'MultiPoint':\r\n\t\tfor (i = 0, len = coords.length; i < len; i++) {\r\n\t\t\tlatlng = _coordsToLatLng(coords[i]);\r\n\t\t\tlayers.push(_pointToLayer(pointToLayer, geojson, latlng, options));\r\n\t\t}\r\n\t\treturn new FeatureGroup(layers);\r\n\r\n\tcase 'LineString':\r\n\tcase 'MultiLineString':\r\n\t\tlatlngs = coordsToLatLngs(coords, geometry.type === 'LineString' ? 0 : 1, _coordsToLatLng);\r\n\t\treturn new Polyline(latlngs, options);\r\n\r\n\tcase 'Polygon':\r\n\tcase 'MultiPolygon':\r\n\t\tlatlngs = coordsToLatLngs(coords, geometry.type === 'Polygon' ? 1 : 2, _coordsToLatLng);\r\n\t\treturn new Polygon(latlngs, options);\r\n\r\n\tcase 'GeometryCollection':\r\n\t\tfor (i = 0, len = geometry.geometries.length; i < len; i++) {\r\n\t\t\tvar geoLayer = geometryToLayer({\r\n\t\t\t\tgeometry: geometry.geometries[i],\r\n\t\t\t\ttype: 'Feature',\r\n\t\t\t\tproperties: geojson.properties\r\n\t\t\t}, options);\r\n\r\n\t\t\tif (geoLayer) {\r\n\t\t\t\tlayers.push(geoLayer);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new FeatureGroup(layers);\r\n\r\n\tcase 'FeatureCollection':\r\n\t\tfor (i = 0, len = geometry.features.length; i < len; i++) {\r\n\t\t\tvar featureLayer = geometryToLayer(geometry.features[i], options);\r\n\r\n\t\t\tif (featureLayer) {\r\n\t\t\t\tlayers.push(featureLayer);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new FeatureGroup(layers);\r\n\r\n\tdefault:\r\n\t\tthrow new Error('Invalid GeoJSON object.');\r\n\t}\r\n}\r\n\r\nfunction _pointToLayer(pointToLayerFn, geojson, latlng, options) {\r\n\treturn pointToLayerFn ?\r\n\t\tpointToLayerFn(geojson, latlng) :\r\n\t\tnew Marker(latlng, options && options.markersInheritOptions && options);\r\n}\r\n\r\n// @function coordsToLatLng(coords: Array): LatLng\r\n// Creates a `LatLng` object from an array of 2 numbers (longitude, latitude)\r\n// or 3 numbers (longitude, latitude, altitude) used in GeoJSON for points.\r\nexport function coordsToLatLng(coords) {\r\n\treturn new LatLng(coords[1], coords[0], coords[2]);\r\n}\r\n\r\n// @function coordsToLatLngs(coords: Array, levelsDeep?: Number, coordsToLatLng?: Function): Array\r\n// Creates a multidimensional array of `LatLng`s from a GeoJSON coordinates array.\r\n// `levelsDeep` specifies the nesting level (0 is for an array of points, 1 for an array of arrays of points, etc., 0 by default).\r\n// Can use a custom [`coordsToLatLng`](#geojson-coordstolatlng) function.\r\nexport function coordsToLatLngs(coords, levelsDeep, _coordsToLatLng) {\r\n\tvar latlngs = [];\r\n\r\n\tfor (var i = 0, len = coords.length, latlng; i < len; i++) {\r\n\t\tlatlng = levelsDeep ?\r\n\t\t\tcoordsToLatLngs(coords[i], levelsDeep - 1, _coordsToLatLng) :\r\n\t\t\t(_coordsToLatLng || coordsToLatLng)(coords[i]);\r\n\r\n\t\tlatlngs.push(latlng);\r\n\t}\r\n\r\n\treturn latlngs;\r\n}\r\n\r\n// @function latLngToCoords(latlng: LatLng, precision?: Number|false): Array\r\n// Reverse of [`coordsToLatLng`](#geojson-coordstolatlng)\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function.\r\nexport function latLngToCoords(latlng, precision) {\r\n\tlatlng = toLatLng(latlng);\r\n\treturn latlng.alt !== undefined ?\r\n\t\t[Util.formatNum(latlng.lng, precision), Util.formatNum(latlng.lat, precision), Util.formatNum(latlng.alt, precision)] :\r\n\t\t[Util.formatNum(latlng.lng, precision), Util.formatNum(latlng.lat, precision)];\r\n}\r\n\r\n// @function latLngsToCoords(latlngs: Array, levelsDeep?: Number, closed?: Boolean, precision?: Number|false): Array\r\n// Reverse of [`coordsToLatLngs`](#geojson-coordstolatlngs)\r\n// `closed` determines whether the first point should be appended to the end of the array to close the feature, only used when `levelsDeep` is 0. False by default.\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function.\r\nexport function latLngsToCoords(latlngs, levelsDeep, closed, precision) {\r\n\tvar coords = [];\r\n\r\n\tfor (var i = 0, len = latlngs.length; i < len; i++) {\r\n\t\t// Check for flat arrays required to ensure unbalanced arrays are correctly converted in recursion\r\n\t\tcoords.push(levelsDeep ?\r\n\t\t\tlatLngsToCoords(latlngs[i], LineUtil.isFlat(latlngs[i]) ? 0 : levelsDeep - 1, closed, precision) :\r\n\t\t\tlatLngToCoords(latlngs[i], precision));\r\n\t}\r\n\r\n\tif (!levelsDeep && closed && coords.length > 0) {\r\n\t\tcoords.push(coords[0].slice());\r\n\t}\r\n\r\n\treturn coords;\r\n}\r\n\r\nexport function getFeature(layer, newGeometry) {\r\n\treturn layer.feature ?\r\n\t\tUtil.extend({}, layer.feature, {geometry: newGeometry}) :\r\n\t\tasFeature(newGeometry);\r\n}\r\n\r\n// @function asFeature(geojson: Object): Object\r\n// Normalize GeoJSON geometries/features into GeoJSON features.\r\nexport function asFeature(geojson) {\r\n\tif (geojson.type === 'Feature' || geojson.type === 'FeatureCollection') {\r\n\t\treturn geojson;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttype: 'Feature',\r\n\t\tproperties: {},\r\n\t\tgeometry: geojson\r\n\t};\r\n}\r\n\r\nvar PointToGeoJSON = {\r\n\ttoGeoJSON: function (precision) {\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: 'Point',\r\n\t\t\tcoordinates: latLngToCoords(this.getLatLng(), precision)\r\n\t\t});\r\n\t}\r\n};\r\n\r\n// @namespace Marker\r\n// @section Other methods\r\n// @method toGeoJSON(precision?: Number|false): Object\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the marker (as a GeoJSON `Point` Feature).\r\nMarker.include(PointToGeoJSON);\r\n\r\n// @namespace CircleMarker\r\n// @method toGeoJSON(precision?: Number|false): Object\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the circle marker (as a GeoJSON `Point` Feature).\r\nCircle.include(PointToGeoJSON);\r\nCircleMarker.include(PointToGeoJSON);\r\n\r\n\r\n// @namespace Polyline\r\n// @method toGeoJSON(precision?: Number|false): Object\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the polyline (as a GeoJSON `LineString` or `MultiLineString` Feature).\r\nPolyline.include({\r\n\ttoGeoJSON: function (precision) {\r\n\t\tvar multi = !LineUtil.isFlat(this._latlngs);\r\n\r\n\t\tvar coords = latLngsToCoords(this._latlngs, multi ? 1 : 0, false, precision);\r\n\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: (multi ? 'Multi' : '') + 'LineString',\r\n\t\t\tcoordinates: coords\r\n\t\t});\r\n\t}\r\n});\r\n\r\n// @namespace Polygon\r\n// @method toGeoJSON(precision?: Number|false): Object\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the polygon (as a GeoJSON `Polygon` or `MultiPolygon` Feature).\r\nPolygon.include({\r\n\ttoGeoJSON: function (precision) {\r\n\t\tvar holes = !LineUtil.isFlat(this._latlngs),\r\n\t\t    multi = holes && !LineUtil.isFlat(this._latlngs[0]);\r\n\r\n\t\tvar coords = latLngsToCoords(this._latlngs, multi ? 2 : holes ? 1 : 0, true, precision);\r\n\r\n\t\tif (!holes) {\r\n\t\t\tcoords = [coords];\r\n\t\t}\r\n\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: (multi ? 'Multi' : '') + 'Polygon',\r\n\t\t\tcoordinates: coords\r\n\t\t});\r\n\t}\r\n});\r\n\r\n\r\n// @namespace LayerGroup\r\nLayerGroup.include({\r\n\ttoMultiPoint: function (precision) {\r\n\t\tvar coords = [];\r\n\r\n\t\tthis.eachLayer(function (layer) {\r\n\t\t\tcoords.push(layer.toGeoJSON(precision).geometry.coordinates);\r\n\t\t});\r\n\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: 'MultiPoint',\r\n\t\t\tcoordinates: coords\r\n\t\t});\r\n\t},\r\n\r\n\t// @method toGeoJSON(precision?: Number|false): Object\r\n\t// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n\t// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the layer group (as a GeoJSON `FeatureCollection`, `GeometryCollection`, or `MultiPoint`).\r\n\ttoGeoJSON: function (precision) {\r\n\r\n\t\tvar type = this.feature && this.feature.geometry && this.feature.geometry.type;\r\n\r\n\t\tif (type === 'MultiPoint') {\r\n\t\t\treturn this.toMultiPoint(precision);\r\n\t\t}\r\n\r\n\t\tvar isGeometryCollection = type === 'GeometryCollection',\r\n\t\t    jsons = [];\r\n\r\n\t\tthis.eachLayer(function (layer) {\r\n\t\t\tif (layer.toGeoJSON) {\r\n\t\t\t\tvar json = layer.toGeoJSON(precision);\r\n\t\t\t\tif (isGeometryCollection) {\r\n\t\t\t\t\tjsons.push(json.geometry);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar feature = asFeature(json);\r\n\t\t\t\t\t// Squash nested feature collections\r\n\t\t\t\t\tif (feature.type === 'FeatureCollection') {\r\n\t\t\t\t\t\tjsons.push.apply(jsons, feature.features);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tjsons.push(feature);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (isGeometryCollection) {\r\n\t\t\treturn getFeature(this, {\r\n\t\t\t\tgeometries: jsons,\r\n\t\t\t\ttype: 'GeometryCollection'\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttype: 'FeatureCollection',\r\n\t\t\tfeatures: jsons\r\n\t\t};\r\n\t}\r\n});\r\n\r\n// @namespace GeoJSON\r\n// @factory L.geoJSON(geojson?: Object, options?: GeoJSON options)\r\n// Creates a GeoJSON layer. Optionally accepts an object in\r\n// [GeoJSON format](https://tools.ietf.org/html/rfc7946) to display on the map\r\n// (you can alternatively add it later with `addData` method) and an `options` object.\r\nexport function geoJSON(geojson, options) {\r\n\treturn new GeoJSON(geojson, options);\r\n}\r\n\r\n// Backward compatibility.\r\nexport var geoJson = geoJSON;\r\n", "import {Layer} from './Layer';\r\nimport * as Util from '../core/Util';\r\nimport {toLatLngBounds} from '../geo/LatLngBounds';\r\nimport {Bounds} from '../geometry/Bounds';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class ImageOverlay\r\n * @aka L.ImageOverlay\r\n * @inherits Interactive layer\r\n *\r\n * Used to load and display a single image over specific bounds of the map. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var imageUrl = 'https://maps.lib.utexas.edu/maps/historical/newark_nj_1922.jpg',\r\n * \timageBounds = [[40.712216, -74.22655], [40.773941, -74.12544]];\r\n * L.imageOverlay(imageUrl, imageBounds).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var ImageOverlay = Layer.extend({\r\n\r\n\t// @section\r\n\t// @aka ImageOverlay options\r\n\toptions: {\r\n\t\t// @option opacity: Number = 1.0\r\n\t\t// The opacity of the image overlay.\r\n\t\topacity: 1,\r\n\r\n\t\t// @option alt: String = ''\r\n\t\t// Text for the `alt` attribute of the image (useful for accessibility).\r\n\t\talt: '',\r\n\r\n\t\t// @option interactive: Boolean = false\r\n\t\t// If `true`, the image overlay will emit [mouse events](#interactive-layer) when clicked or hovered.\r\n\t\tinteractive: false,\r\n\r\n\t\t// @option crossOrigin: Boolean|String = false\r\n\t\t// Whether the crossOrigin attribute will be added to the image.\r\n\t\t// If a String is provided, the image will have its crossOrigin attribute set to the String provided. This is needed if you want to access image pixel data.\r\n\t\t// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\r\n\t\tcrossOrigin: false,\r\n\r\n\t\t// @option errorOverlayUrl: String = ''\r\n\t\t// URL to the overlay image to show in place of the overlay that failed to load.\r\n\t\terrorOverlayUrl: '',\r\n\r\n\t\t// @option zIndex: Number = 1\r\n\t\t// The explicit [zIndex](https://developer.mozilla.org/docs/Web/CSS/CSS_Positioning/Understanding_z_index) of the overlay layer.\r\n\t\tzIndex: 1,\r\n\r\n\t\t// @option className: String = ''\r\n\t\t// A custom class name to assign to the image. Empty by default.\r\n\t\tclassName: ''\r\n\t},\r\n\r\n\tinitialize: function (url, bounds, options) { // (String, LatLngBounds, Object)\r\n\t\tthis._url = url;\r\n\t\tthis._bounds = toLatLngBounds(bounds);\r\n\r\n\t\tUtil.setOptions(this, options);\r\n\t},\r\n\r\n\tonAdd: function () {\r\n\t\tif (!this._image) {\r\n\t\t\tthis._initImage();\r\n\r\n\t\t\tif (this.options.opacity < 1) {\r\n\t\t\t\tthis._updateOpacity();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.options.interactive) {\r\n\t\t\tDomUtil.addClass(this._image, 'leaflet-interactive');\r\n\t\t\tthis.addInteractiveTarget(this._image);\r\n\t\t}\r\n\r\n\t\tthis.getPane().appendChild(this._image);\r\n\t\tthis._reset();\r\n\t},\r\n\r\n\tonRemove: function () {\r\n\t\tDomUtil.remove(this._image);\r\n\t\tif (this.options.interactive) {\r\n\t\t\tthis.removeInteractiveTarget(this._image);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method setOpacity(opacity: Number): this\r\n\t// Sets the opacity of the overlay.\r\n\tsetOpacity: function (opacity) {\r\n\t\tthis.options.opacity = opacity;\r\n\r\n\t\tif (this._image) {\r\n\t\t\tthis._updateOpacity();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\tsetStyle: function (styleOpts) {\r\n\t\tif (styleOpts.opacity) {\r\n\t\t\tthis.setOpacity(styleOpts.opacity);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method bringToFront(): this\r\n\t// Brings the layer to the top of all overlays.\r\n\tbringToFront: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toFront(this._image);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method bringToBack(): this\r\n\t// Brings the layer to the bottom of all overlays.\r\n\tbringToBack: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toBack(this._image);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setUrl(url: String): this\r\n\t// Changes the URL of the image.\r\n\tsetUrl: function (url) {\r\n\t\tthis._url = url;\r\n\r\n\t\tif (this._image) {\r\n\t\t\tthis._image.src = url;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setBounds(bounds: LatLngBounds): this\r\n\t// Update the bounds that this ImageOverlay covers\r\n\tsetBounds: function (bounds) {\r\n\t\tthis._bounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (this._map) {\r\n\t\t\tthis._reset();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\tvar events = {\r\n\t\t\tzoom: this._reset,\r\n\t\t\tviewreset: this._reset\r\n\t\t};\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tevents.zoomanim = this._animateZoom;\r\n\t\t}\r\n\r\n\t\treturn events;\r\n\t},\r\n\r\n\t// @method setZIndex(value: Number): this\r\n\t// Changes the [zIndex](#imageoverlay-zindex) of the image overlay.\r\n\tsetZIndex: function (value) {\r\n\t\tthis.options.zIndex = value;\r\n\t\tthis._updateZIndex();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getBounds(): LatLngBounds\r\n\t// Get the bounds that this ImageOverlay covers\r\n\tgetBounds: function () {\r\n\t\treturn this._bounds;\r\n\t},\r\n\r\n\t// @method getElement(): HTMLElement\r\n\t// Returns the instance of [`HTMLImageElement`](https://developer.mozilla.org/docs/Web/API/HTMLImageElement)\r\n\t// used by this overlay.\r\n\tgetElement: function () {\r\n\t\treturn this._image;\r\n\t},\r\n\r\n\t_initImage: function () {\r\n\t\tvar wasElementSupplied = this._url.tagName === 'IMG';\r\n\t\tvar img = this._image = wasElementSupplied ? this._url : DomUtil.create('img');\r\n\r\n\t\tDomUtil.addClass(img, 'leaflet-image-layer');\r\n\t\tif (this._zoomAnimated) { DomUtil.addClass(img, 'leaflet-zoom-animated'); }\r\n\t\tif (this.options.className) { DomUtil.addClass(img, this.options.className); }\r\n\r\n\t\timg.onselectstart = Util.falseFn;\r\n\t\timg.onmousemove = Util.falseFn;\r\n\r\n\t\t// @event load: Event\r\n\t\t// Fired when the ImageOverlay layer has loaded its image\r\n\t\timg.onload = Util.bind(this.fire, this, 'load');\r\n\t\timg.onerror = Util.bind(this._overlayOnError, this, 'error');\r\n\r\n\t\tif (this.options.crossOrigin || this.options.crossOrigin === '') {\r\n\t\t\timg.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\r\n\t\t}\r\n\r\n\t\tif (this.options.zIndex) {\r\n\t\t\tthis._updateZIndex();\r\n\t\t}\r\n\r\n\t\tif (wasElementSupplied) {\r\n\t\t\tthis._url = img.src;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\timg.src = this._url;\r\n\t\timg.alt = this.options.alt;\r\n\t},\r\n\r\n\t_animateZoom: function (e) {\r\n\t\tvar scale = this._map.getZoomScale(e.zoom),\r\n\t\t    offset = this._map._latLngBoundsToNewLayerBounds(this._bounds, e.zoom, e.center).min;\r\n\r\n\t\tDomUtil.setTransform(this._image, offset, scale);\r\n\t},\r\n\r\n\t_reset: function () {\r\n\t\tvar image = this._image,\r\n\t\t    bounds = new Bounds(\r\n\t\t        this._map.latLngToLayerPoint(this._bounds.getNorthWest()),\r\n\t\t        this._map.latLngToLayerPoint(this._bounds.getSouthEast())),\r\n\t\t    size = bounds.getSize();\r\n\r\n\t\tDomUtil.setPosition(image, bounds.min);\r\n\r\n\t\timage.style.width  = size.x + 'px';\r\n\t\timage.style.height = size.y + 'px';\r\n\t},\r\n\r\n\t_updateOpacity: function () {\r\n\t\tDomUtil.setOpacity(this._image, this.options.opacity);\r\n\t},\r\n\r\n\t_updateZIndex: function () {\r\n\t\tif (this._image && this.options.zIndex !== undefined && this.options.zIndex !== null) {\r\n\t\t\tthis._image.style.zIndex = this.options.zIndex;\r\n\t\t}\r\n\t},\r\n\r\n\t_overlayOnError: function () {\r\n\t\t// @event error: Event\r\n\t\t// Fired when the ImageOverlay layer fails to load its image\r\n\t\tthis.fire('error');\r\n\r\n\t\tvar errorUrl = this.options.errorOverlayUrl;\r\n\t\tif (errorUrl && this._url !== errorUrl) {\r\n\t\t\tthis._url = errorUrl;\r\n\t\t\tthis._image.src = errorUrl;\r\n\t\t}\r\n\t},\r\n\r\n\t// @method getCenter(): LatLng\r\n\t// Returns the center of the ImageOverlay.\r\n\tgetCenter: function () {\r\n\t\treturn this._bounds.getCenter();\r\n\t}\r\n});\r\n\r\n// @factory L.imageOverlay(imageUrl: String, bounds: LatLngBounds, options?: ImageOverlay options)\r\n// Instantiates an image overlay object given the URL of the image and the\r\n// geographical bounds it is tied to.\r\nexport var imageOverlay = function (url, bounds, options) {\r\n\treturn new ImageOverlay(url, bounds, options);\r\n};\r\n", "import {ImageOverlay} from './ImageOverlay';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport * as Util from '../core/Util';\r\n\r\n/*\r\n * @class VideoOverlay\r\n * @aka L.VideoOverlay\r\n * @inherits ImageOverlay\r\n *\r\n * Used to load and display a video player over specific bounds of the map. Extends `ImageOverlay`.\r\n *\r\n * A video overlay uses the [`<video>`](https://developer.mozilla.org/docs/Web/HTML/Element/video)\r\n * HTML5 element.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var videoUrl = 'https://www.mapbox.com/bites/00188/patricia_nasa.webm',\r\n * \tvideoBounds = [[ 32, -130], [ 13, -100]];\r\n * L.videoOverlay(videoUrl, videoBounds ).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var VideoOverlay = ImageOverlay.extend({\r\n\r\n\t// @section\r\n\t// @aka VideoOverlay options\r\n\toptions: {\r\n\t\t// @option autoplay: Boolean = true\r\n\t\t// Whether the video starts playing automatically when loaded.\r\n\t\t// On some browsers autoplay will only work with `muted: true`\r\n\t\tautoplay: true,\r\n\r\n\t\t// @option loop: Boolean = true\r\n\t\t// Whether the video will loop back to the beginning when played.\r\n\t\tloop: true,\r\n\r\n\t\t// @option keepAspectRatio: Boolean = true\r\n\t\t// Whether the video will save aspect ratio after the projection.\r\n\t\t// Relevant for supported browsers. See [browser compatibility](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit)\r\n\t\tkeepAspectRatio: true,\r\n\r\n\t\t// @option muted: Boolean = false\r\n\t\t// Whether the video starts on mute when loaded.\r\n\t\tmuted: false,\r\n\r\n\t\t// @option playsInline: Boolean = true\r\n\t\t// Mobile browsers will play the video right where it is instead of open it up in fullscreen mode.\r\n\t\tplaysInline: true\r\n\t},\r\n\r\n\t_initImage: function () {\r\n\t\tvar wasElementSupplied = this._url.tagName === 'VIDEO';\r\n\t\tvar vid = this._image = wasElementSupplied ? this._url : DomUtil.create('video');\r\n\r\n\t\tDomUtil.addClass(vid, 'leaflet-image-layer');\r\n\t\tif (this._zoomAnimated) { DomUtil.addClass(vid, 'leaflet-zoom-animated'); }\r\n\t\tif (this.options.className) { DomUtil.addClass(vid, this.options.className); }\r\n\r\n\t\tvid.onselectstart = Util.falseFn;\r\n\t\tvid.onmousemove = Util.falseFn;\r\n\r\n\t\t// @event load: Event\r\n\t\t// Fired when the video has finished loading the first frame\r\n\t\tvid.onloadeddata = Util.bind(this.fire, this, 'load');\r\n\r\n\t\tif (wasElementSupplied) {\r\n\t\t\tvar sourceElements = vid.getElementsByTagName('source');\r\n\t\t\tvar sources = [];\r\n\t\t\tfor (var j = 0; j < sourceElements.length; j++) {\r\n\t\t\t\tsources.push(sourceElements[j].src);\r\n\t\t\t}\r\n\r\n\t\t\tthis._url = (sourceElements.length > 0) ? sources : [vid.src];\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!Util.isArray(this._url)) { this._url = [this._url]; }\r\n\r\n\t\tif (!this.options.keepAspectRatio && Object.prototype.hasOwnProperty.call(vid.style, 'objectFit')) {\r\n\t\t\tvid.style['objectFit'] = 'fill';\r\n\t\t}\r\n\t\tvid.autoplay = !!this.options.autoplay;\r\n\t\tvid.loop = !!this.options.loop;\r\n\t\tvid.muted = !!this.options.muted;\r\n\t\tvid.playsInline = !!this.options.playsInline;\r\n\t\tfor (var i = 0; i < this._url.length; i++) {\r\n\t\t\tvar source = DomUtil.create('source');\r\n\t\t\tsource.src = this._url[i];\r\n\t\t\tvid.appendChild(source);\r\n\t\t}\r\n\t}\r\n\r\n\t// @method getElement(): HTMLVideoElement\r\n\t// Returns the instance of [`HTMLVideoElement`](https://developer.mozilla.org/docs/Web/API/HTMLVideoElement)\r\n\t// used by this overlay.\r\n});\r\n\r\n\r\n// @factory L.videoOverlay(video: String|Array|HTMLVideoElement, bounds: LatLngBounds, options?: VideoOverlay options)\r\n// Instantiates an image overlay object given the URL of the video (or array of URLs, or even a video element) and the\r\n// geographical bounds it is tied to.\r\n\r\nexport function videoOverlay(video, bounds, options) {\r\n\treturn new VideoOverlay(video, bounds, options);\r\n}\r\n", "import {ImageOverlay} from './ImageOverlay';\nimport * as DomUtil from '../dom/DomUtil';\nimport * as Util from '../core/Util';\n\n/*\n * @class SVGOverlay\n * @aka L.SVGOverlay\n * @inherits ImageOverlay\n *\n * Used to load, display and provide DOM access to an SVG file over specific bounds of the map. Extends `ImageOverlay`.\n *\n * An SVG overlay uses the [`<svg>`](https://developer.mozilla.org/docs/Web/SVG/Element/svg) element.\n *\n * @example\n *\n * ```js\n * var svgElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n * svgElement.setAttribute('xmlns', \"http://www.w3.org/2000/svg\");\n * svgElement.setAttribute('viewBox', \"0 0 200 200\");\n * svgElement.innerHTML = '<rect width=\"200\" height=\"200\"/><rect x=\"75\" y=\"23\" width=\"50\" height=\"50\" style=\"fill:red\"/><rect x=\"75\" y=\"123\" width=\"50\" height=\"50\" style=\"fill:#0013ff\"/>';\n * var svgElementBounds = [ [ 32, -130 ], [ 13, -100 ] ];\n * L.svgOverlay(svgElement, svgElementBounds).addTo(map);\n * ```\n */\n\nexport var SVGOverlay = ImageOverlay.extend({\n\t_initImage: function () {\n\t\tvar el = this._image = this._url;\n\n\t\tDomUtil.addClass(el, 'leaflet-image-layer');\n\t\tif (this._zoomAnimated) { DomUtil.addClass(el, 'leaflet-zoom-animated'); }\n\t\tif (this.options.className) { DomUtil.addClass(el, this.options.className); }\n\n\t\tel.onselectstart = Util.falseFn;\n\t\tel.onmousemove = Util.falseFn;\n\t}\n\n\t// @method getElement(): SVGElement\n\t// Returns the instance of [`SVGElement`](https://developer.mozilla.org/docs/Web/API/SVGElement)\n\t// used by this overlay.\n});\n\n\n// @factory L.svgOverlay(svg: String|SVGElement, bounds: LatLngBounds, options?: SVGOverlay options)\n// Instantiates an image overlay object given an SVG element and the geographical bounds it is tied to.\n// A viewBox attribute is required on the SVG element to zoom in and out properly.\n\nexport function svgOverlay(el, bounds, options) {\n\treturn new SVGOverlay(el, bounds, options);\n}\n", "import {Map} from '../map/Map';\r\nimport {Layer} from './Layer';\r\nimport {FeatureGroup} from './FeatureGroup';\r\nimport * as Util from '../core/Util';\r\nimport {toLatLng, LatLng} from '../geo/LatLng';\r\nimport {toPoint} from '../geometry/Point';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class DivOverlay\r\n * @inherits Interactive layer\r\n * @aka L.DivOverlay\r\n * Base model for L.Popup and L.Tooltip. Inherit from it for custom overlays like plugins.\r\n */\r\n\r\n// @namespace DivOverlay\r\nexport var DivOverlay = Layer.extend({\r\n\r\n\t// @section\r\n\t// @aka DivOverlay options\r\n\toptions: {\r\n\t\t// @option interactive: Boolean = false\r\n\t\t// If true, the popup/tooltip will listen to the mouse events.\r\n\t\tinteractive: false,\r\n\r\n\t\t// @option offset: Point = Point(0, 0)\r\n\t\t// The offset of the overlay position.\r\n\t\toffset: [0, 0],\r\n\r\n\t\t// @option className: String = ''\r\n\t\t// A custom CSS class name to assign to the overlay.\r\n\t\tclassName: '',\r\n\r\n\t\t// @option pane: String = undefined\r\n\t\t// `Map pane` where the overlay will be added.\r\n\t\tpane: undefined,\r\n\r\n\t\t// @option content: String|HTMLElement|Function = ''\r\n\t\t// Sets the HTML content of the overlay while initializing. If a function is passed the source layer will be\r\n\t\t// passed to the function. The function should return a `String` or `HTMLElement` to be used in the overlay.\r\n\t\tcontent: ''\r\n\t},\r\n\r\n\tinitialize: function (options, source) {\r\n\t\tif (options && (options instanceof LatLng || Util.isArray(options))) {\r\n\t\t\tthis._latlng = toLatLng(options);\r\n\t\t\tUtil.setOptions(this, source);\r\n\t\t} else {\r\n\t\t\tUtil.setOptions(this, options);\r\n\t\t\tthis._source = source;\r\n\t\t}\r\n\t\tif (this.options.content) {\r\n\t\t\tthis._content = this.options.content;\r\n\t\t}\r\n\t},\r\n\r\n\t// @method openOn(map: Map): this\r\n\t// Adds the overlay to the map.\r\n\t// Alternative to `map.openPopup(popup)`/`.openTooltip(tooltip)`.\r\n\topenOn: function (map) {\r\n\t\tmap = arguments.length ? map : this._source._map; // experimental, not the part of public api\r\n\t\tif (!map.hasLayer(this)) {\r\n\t\t\tmap.addLayer(this);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method close(): this\r\n\t// Closes the overlay.\r\n\t// Alternative to `map.closePopup(popup)`/`.closeTooltip(tooltip)`\r\n\t// and `layer.closePopup()`/`.closeTooltip()`.\r\n\tclose: function () {\r\n\t\tif (this._map) {\r\n\t\t\tthis._map.removeLayer(this);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method toggle(layer?: Layer): this\r\n\t// Opens or closes the overlay bound to layer depending on its current state.\r\n\t// Argument may be omitted only for overlay bound to layer.\r\n\t// Alternative to `layer.togglePopup()`/`.toggleTooltip()`.\r\n\ttoggle: function (layer) {\r\n\t\tif (this._map) {\r\n\t\t\tthis.close();\r\n\t\t} else {\r\n\t\t\tif (arguments.length) {\r\n\t\t\t\tthis._source = layer;\r\n\t\t\t} else {\r\n\t\t\t\tlayer = this._source;\r\n\t\t\t}\r\n\t\t\tthis._prepareOpen();\r\n\r\n\t\t\t// open the overlay on the map\r\n\t\t\tthis.openOn(layer._map);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis._zoomAnimated = map._zoomAnimated;\r\n\r\n\t\tif (!this._container) {\r\n\t\t\tthis._initLayout();\r\n\t\t}\r\n\r\n\t\tif (map._fadeAnimated) {\r\n\t\t\tDomUtil.setOpacity(this._container, 0);\r\n\t\t}\r\n\r\n\t\tclearTimeout(this._removeTimeout);\r\n\t\tthis.getPane().appendChild(this._container);\r\n\t\tthis.update();\r\n\r\n\t\tif (map._fadeAnimated) {\r\n\t\t\tDomUtil.setOpacity(this._container, 1);\r\n\t\t}\r\n\r\n\t\tthis.bringToFront();\r\n\r\n\t\tif (this.options.interactive) {\r\n\t\t\tDomUtil.addClass(this._container, 'leaflet-interactive');\r\n\t\t\tthis.addInteractiveTarget(this._container);\r\n\t\t}\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tif (map._fadeAnimated) {\r\n\t\t\tDomUtil.setOpacity(this._container, 0);\r\n\t\t\tthis._removeTimeout = setTimeout(Util.bind(DomUtil.remove, undefined, this._container), 200);\r\n\t\t} else {\r\n\t\t\tDomUtil.remove(this._container);\r\n\t\t}\r\n\r\n\t\tif (this.options.interactive) {\r\n\t\t\tDomUtil.removeClass(this._container, 'leaflet-interactive');\r\n\t\t\tthis.removeInteractiveTarget(this._container);\r\n\t\t}\r\n\t},\r\n\r\n\t// @namespace DivOverlay\r\n\t// @method getLatLng: LatLng\r\n\t// Returns the geographical point of the overlay.\r\n\tgetLatLng: function () {\r\n\t\treturn this._latlng;\r\n\t},\r\n\r\n\t// @method setLatLng(latlng: LatLng): this\r\n\t// Sets the geographical point where the overlay will open.\r\n\tsetLatLng: function (latlng) {\r\n\t\tthis._latlng = toLatLng(latlng);\r\n\t\tif (this._map) {\r\n\t\t\tthis._updatePosition();\r\n\t\t\tthis._adjustPan();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getContent: String|HTMLElement\r\n\t// Returns the content of the overlay.\r\n\tgetContent: function () {\r\n\t\treturn this._content;\r\n\t},\r\n\r\n\t// @method setContent(htmlContent: String|HTMLElement|Function): this\r\n\t// Sets the HTML content of the overlay. If a function is passed the source layer will be passed to the function.\r\n\t// The function should return a `String` or `HTMLElement` to be used in the overlay.\r\n\tsetContent: function (content) {\r\n\t\tthis._content = content;\r\n\t\tthis.update();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getElement: String|HTMLElement\r\n\t// Returns the HTML container of the overlay.\r\n\tgetElement: function () {\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\t// @method update: null\r\n\t// Updates the overlay content, layout and position. Useful for updating the overlay after something inside changed, e.g. image loaded.\r\n\tupdate: function () {\r\n\t\tif (!this._map) { return; }\r\n\r\n\t\tthis._container.style.visibility = 'hidden';\r\n\r\n\t\tthis._updateContent();\r\n\t\tthis._updateLayout();\r\n\t\tthis._updatePosition();\r\n\r\n\t\tthis._container.style.visibility = '';\r\n\r\n\t\tthis._adjustPan();\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\tvar events = {\r\n\t\t\tzoom: this._updatePosition,\r\n\t\t\tviewreset: this._updatePosition\r\n\t\t};\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tevents.zoomanim = this._animateZoom;\r\n\t\t}\r\n\t\treturn events;\r\n\t},\r\n\r\n\t// @method isOpen: Boolean\r\n\t// Returns `true` when the overlay is visible on the map.\r\n\tisOpen: function () {\r\n\t\treturn !!this._map && this._map.hasLayer(this);\r\n\t},\r\n\r\n\t// @method bringToFront: this\r\n\t// Brings this overlay in front of other overlays (in the same map pane).\r\n\tbringToFront: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toFront(this._container);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method bringToBack: this\r\n\t// Brings this overlay to the back of other overlays (in the same map pane).\r\n\tbringToBack: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toBack(this._container);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// prepare bound overlay to open: update latlng pos / content source (for FeatureGroup)\r\n\t_prepareOpen: function (latlng) {\r\n\t\tvar source = this._source;\r\n\t\tif (!source._map) { return false; }\r\n\r\n\t\tif (source instanceof FeatureGroup) {\r\n\t\t\tsource = null;\r\n\t\t\tvar layers = this._source._layers;\r\n\t\t\tfor (var id in layers) {\r\n\t\t\t\tif (layers[id]._map) {\r\n\t\t\t\t\tsource = layers[id];\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!source) { return false; } // Unable to get source layer.\r\n\r\n\t\t\t// set overlay source to this layer\r\n\t\t\tthis._source = source;\r\n\t\t}\r\n\r\n\t\tif (!latlng) {\r\n\t\t\tif (source.getCenter) {\r\n\t\t\t\tlatlng = source.getCenter();\r\n\t\t\t} else if (source.getLatLng) {\r\n\t\t\t\tlatlng = source.getLatLng();\r\n\t\t\t} else if (source.getBounds) {\r\n\t\t\t\tlatlng = source.getBounds().getCenter();\r\n\t\t\t} else {\r\n\t\t\t\tthrow new Error('Unable to get source layer LatLng.');\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.setLatLng(latlng);\r\n\r\n\t\tif (this._map) {\r\n\t\t\t// update the overlay (content, layout, etc...)\r\n\t\t\tthis.update();\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_updateContent: function () {\r\n\t\tif (!this._content) { return; }\r\n\r\n\t\tvar node = this._contentNode;\r\n\t\tvar content = (typeof this._content === 'function') ? this._content(this._source || this) : this._content;\r\n\r\n\t\tif (typeof content === 'string') {\r\n\t\t\tnode.innerHTML = content;\r\n\t\t} else {\r\n\t\t\twhile (node.hasChildNodes()) {\r\n\t\t\t\tnode.removeChild(node.firstChild);\r\n\t\t\t}\r\n\t\t\tnode.appendChild(content);\r\n\t\t}\r\n\r\n\t\t// @namespace DivOverlay\r\n\t\t// @section DivOverlay events\r\n\t\t// @event contentupdate: Event\r\n\t\t// Fired when the content of the overlay is updated\r\n\t\tthis.fire('contentupdate');\r\n\t},\r\n\r\n\t_updatePosition: function () {\r\n\t\tif (!this._map) { return; }\r\n\r\n\t\tvar pos = this._map.latLngToLayerPoint(this._latlng),\r\n\t\t    offset = toPoint(this.options.offset),\r\n\t\t    anchor = this._getAnchor();\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tDomUtil.setPosition(this._container, pos.add(anchor));\r\n\t\t} else {\r\n\t\t\toffset = offset.add(pos).add(anchor);\r\n\t\t}\r\n\r\n\t\tvar bottom = this._containerBottom = -offset.y,\r\n\t\t    left = this._containerLeft = -Math.round(this._containerWidth / 2) + offset.x;\r\n\r\n\t\t// bottom position the overlay in case the height of the overlay changes (images loading etc)\r\n\t\tthis._container.style.bottom = bottom + 'px';\r\n\t\tthis._container.style.left = left + 'px';\r\n\t},\r\n\r\n\t_getAnchor: function () {\r\n\t\treturn [0, 0];\r\n\t}\r\n\r\n});\r\n\r\nMap.include({\r\n\t_initOverlay: function (OverlayClass, content, latlng, options) {\r\n\t\tvar overlay = content;\r\n\t\tif (!(overlay instanceof OverlayClass)) {\r\n\t\t\toverlay = new OverlayClass(options).setContent(content);\r\n\t\t}\r\n\t\tif (latlng) {\r\n\t\t\toverlay.setLatLng(latlng);\r\n\t\t}\r\n\t\treturn overlay;\r\n\t}\r\n});\r\n\r\n\r\nLayer.include({\r\n\t_initOverlay: function (OverlayClass, old, content, options) {\r\n\t\tvar overlay = content;\r\n\t\tif (overlay instanceof OverlayClass) {\r\n\t\t\tUtil.setOptions(overlay, options);\r\n\t\t\toverlay._source = this;\r\n\t\t} else {\r\n\t\t\toverlay = (old && !options) ? old : new OverlayClass(options, this);\r\n\t\t\toverlay.setContent(content);\r\n\t\t}\r\n\t\treturn overlay;\r\n\t}\r\n});\r\n", "import {DivOverlay} from './DivOverlay';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport {Point, toPoint} from '../geometry/Point';\r\nimport {Map} from '../map/Map';\r\nimport {Layer} from './Layer';\r\nimport {Path} from './vector/Path';\r\nimport {FeatureGroup} from './FeatureGroup';\r\n\r\n/*\r\n * @class Popup\r\n * @inherits DivOverlay\r\n * @aka L.Popup\r\n * Used to open popups in certain places of the map. Use [Map.openPopup](#map-openpopup) to\r\n * open popups while making sure that only one popup is open at one time\r\n * (recommended for usability), or use [Map.addLayer](#map-addlayer) to open as many as you want.\r\n *\r\n * @example\r\n *\r\n * If you want to just bind a popup to marker click and then open it, it's really easy:\r\n *\r\n * ```js\r\n * marker.bindPopup(popupContent).openPopup();\r\n * ```\r\n * Path overlays like polylines also have a `bindPopup` method.\r\n *\r\n * A popup can be also standalone:\r\n *\r\n * ```js\r\n * var popup = L.popup()\r\n * \t.setLatLng(latlng)\r\n * \t.setContent('<p>Hello world!<br />This is a nice popup.</p>')\r\n * \t.openOn(map);\r\n * ```\r\n * or\r\n * ```js\r\n * var popup = L.popup(latlng, {content: '<p>Hello world!<br />This is a nice popup.</p>')\r\n * \t.openOn(map);\r\n * ```\r\n */\r\n\r\n\r\n// @namespace Popup\r\nexport var Popup = DivOverlay.extend({\r\n\r\n\t// @section\r\n\t// @aka Popup options\r\n\toptions: {\r\n\t\t// @option pane: String = 'popupPane'\r\n\t\t// `Map pane` where the popup will be added.\r\n\t\tpane: 'popupPane',\r\n\r\n\t\t// @option offset: Point = Point(0, 7)\r\n\t\t// The offset of the popup position.\r\n\t\toffset: [0, 7],\r\n\r\n\t\t// @option maxWidth: Number = 300\r\n\t\t// Max width of the popup, in pixels.\r\n\t\tmaxWidth: 300,\r\n\r\n\t\t// @option minWidth: Number = 50\r\n\t\t// Min width of the popup, in pixels.\r\n\t\tminWidth: 50,\r\n\r\n\t\t// @option maxHeight: Number = null\r\n\t\t// If set, creates a scrollable container of the given height\r\n\t\t// inside a popup if its content exceeds it.\r\n\t\t// The scrollable container can be styled using the\r\n\t\t// `leaflet-popup-scrolled` CSS class selector.\r\n\t\tmaxHeight: null,\r\n\r\n\t\t// @option autoPan: Boolean = true\r\n\t\t// Set it to `false` if you don't want the map to do panning animation\r\n\t\t// to fit the opened popup.\r\n\t\tautoPan: true,\r\n\r\n\t\t// @option autoPanPaddingTopLeft: Point = null\r\n\t\t// The margin between the popup and the top left corner of the map\r\n\t\t// view after autopanning was performed.\r\n\t\tautoPanPaddingTopLeft: null,\r\n\r\n\t\t// @option autoPanPaddingBottomRight: Point = null\r\n\t\t// The margin between the popup and the bottom right corner of the map\r\n\t\t// view after autopanning was performed.\r\n\t\tautoPanPaddingBottomRight: null,\r\n\r\n\t\t// @option autoPanPadding: Point = Point(5, 5)\r\n\t\t// Equivalent of setting both top left and bottom right autopan padding to the same value.\r\n\t\tautoPanPadding: [5, 5],\r\n\r\n\t\t// @option keepInView: Boolean = false\r\n\t\t// Set it to `true` if you want to prevent users from panning the popup\r\n\t\t// off of the screen while it is open.\r\n\t\tkeepInView: false,\r\n\r\n\t\t// @option closeButton: Boolean = true\r\n\t\t// Controls the presence of a close button in the popup.\r\n\t\tcloseButton: true,\r\n\r\n\t\t// @option autoClose: Boolean = true\r\n\t\t// Set it to `false` if you want to override the default behavior of\r\n\t\t// the popup closing when another popup is opened.\r\n\t\tautoClose: true,\r\n\r\n\t\t// @option closeOnEscapeKey: Boolean = true\r\n\t\t// Set it to `false` if you want to override the default behavior of\r\n\t\t// the ESC key for closing of the popup.\r\n\t\tcloseOnEscapeKey: true,\r\n\r\n\t\t// @option closeOnClick: Boolean = *\r\n\t\t// Set it if you want to override the default behavior of the popup closing when user clicks\r\n\t\t// on the map. Defaults to the map's [`closePopupOnClick`](#map-closepopuponclick) option.\r\n\r\n\t\t// @option className: String = ''\r\n\t\t// A custom CSS class name to assign to the popup.\r\n\t\tclassName: ''\r\n\t},\r\n\r\n\t// @namespace Popup\r\n\t// @method openOn(map: Map): this\r\n\t// Alternative to `map.openPopup(popup)`.\r\n\t// Adds the popup to the map and closes the previous one.\r\n\topenOn: function (map) {\r\n\t\tmap = arguments.length ? map : this._source._map; // experimental, not the part of public api\r\n\r\n\t\tif (!map.hasLayer(this) && map._popup && map._popup.options.autoClose) {\r\n\t\t\tmap.removeLayer(map._popup);\r\n\t\t}\r\n\t\tmap._popup = this;\r\n\r\n\t\treturn DivOverlay.prototype.openOn.call(this, map);\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tDivOverlay.prototype.onAdd.call(this, map);\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Popup events\r\n\t\t// @event popupopen: PopupEvent\r\n\t\t// Fired when a popup is opened in the map\r\n\t\tmap.fire('popupopen', {popup: this});\r\n\r\n\t\tif (this._source) {\r\n\t\t\t// @namespace Layer\r\n\t\t\t// @section Popup events\r\n\t\t\t// @event popupopen: PopupEvent\r\n\t\t\t// Fired when a popup bound to this layer is opened\r\n\t\t\tthis._source.fire('popupopen', {popup: this}, true);\r\n\t\t\t// For non-path layers, we toggle the popup when clicking\r\n\t\t\t// again the layer, so prevent the map to reopen it.\r\n\t\t\tif (!(this._source instanceof Path)) {\r\n\t\t\t\tthis._source.on('preclick', DomEvent.stopPropagation);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tDivOverlay.prototype.onRemove.call(this, map);\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Popup events\r\n\t\t// @event popupclose: PopupEvent\r\n\t\t// Fired when a popup in the map is closed\r\n\t\tmap.fire('popupclose', {popup: this});\r\n\r\n\t\tif (this._source) {\r\n\t\t\t// @namespace Layer\r\n\t\t\t// @section Popup events\r\n\t\t\t// @event popupclose: PopupEvent\r\n\t\t\t// Fired when a popup bound to this layer is closed\r\n\t\t\tthis._source.fire('popupclose', {popup: this}, true);\r\n\t\t\tif (!(this._source instanceof Path)) {\r\n\t\t\t\tthis._source.off('preclick', DomEvent.stopPropagation);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\tvar events = DivOverlay.prototype.getEvents.call(this);\r\n\r\n\t\tif (this.options.closeOnClick !== undefined ? this.options.closeOnClick : this._map.options.closePopupOnClick) {\r\n\t\t\tevents.preclick = this.close;\r\n\t\t}\r\n\r\n\t\tif (this.options.keepInView) {\r\n\t\t\tevents.moveend = this._adjustPan;\r\n\t\t}\r\n\r\n\t\treturn events;\r\n\t},\r\n\r\n\t_initLayout: function () {\r\n\t\tvar prefix = 'leaflet-popup',\r\n\t\t    container = this._container = DomUtil.create('div',\r\n\t\t\tprefix + ' ' + (this.options.className || '') +\r\n\t\t\t' leaflet-zoom-animated');\r\n\r\n\t\tvar wrapper = this._wrapper = DomUtil.create('div', prefix + '-content-wrapper', container);\r\n\t\tthis._contentNode = DomUtil.create('div', prefix + '-content', wrapper);\r\n\r\n\t\tDomEvent.disableClickPropagation(container);\r\n\t\tDomEvent.disableScrollPropagation(this._contentNode);\r\n\t\tDomEvent.on(container, 'contextmenu', DomEvent.stopPropagation);\r\n\r\n\t\tthis._tipContainer = DomUtil.create('div', prefix + '-tip-container', container);\r\n\t\tthis._tip = DomUtil.create('div', prefix + '-tip', this._tipContainer);\r\n\r\n\t\tif (this.options.closeButton) {\r\n\t\t\tvar closeButton = this._closeButton = DomUtil.create('a', prefix + '-close-button', container);\r\n\t\t\tcloseButton.setAttribute('role', 'button'); // overrides the implicit role=link of <a> elements #7399\r\n\t\t\tcloseButton.setAttribute('aria-label', 'Close popup');\r\n\t\t\tcloseButton.href = '#close';\r\n\t\t\tcloseButton.innerHTML = '<span aria-hidden=\"true\">&#215;</span>';\r\n\r\n\t\t\tDomEvent.on(closeButton, 'click', function (ev) {\r\n\t\t\t\tDomEvent.preventDefault(ev);\r\n\t\t\t\tthis.close();\r\n\t\t\t}, this);\r\n\t\t}\r\n\t},\r\n\r\n\t_updateLayout: function () {\r\n\t\tvar container = this._contentNode,\r\n\t\t    style = container.style;\r\n\r\n\t\tstyle.width = '';\r\n\t\tstyle.whiteSpace = 'nowrap';\r\n\r\n\t\tvar width = container.offsetWidth;\r\n\t\twidth = Math.min(width, this.options.maxWidth);\r\n\t\twidth = Math.max(width, this.options.minWidth);\r\n\r\n\t\tstyle.width = (width + 1) + 'px';\r\n\t\tstyle.whiteSpace = '';\r\n\r\n\t\tstyle.height = '';\r\n\r\n\t\tvar height = container.offsetHeight,\r\n\t\t    maxHeight = this.options.maxHeight,\r\n\t\t    scrolledClass = 'leaflet-popup-scrolled';\r\n\r\n\t\tif (maxHeight && height > maxHeight) {\r\n\t\t\tstyle.height = maxHeight + 'px';\r\n\t\t\tDomUtil.addClass(container, scrolledClass);\r\n\t\t} else {\r\n\t\t\tDomUtil.removeClass(container, scrolledClass);\r\n\t\t}\r\n\r\n\t\tthis._containerWidth = this._container.offsetWidth;\r\n\t},\r\n\r\n\t_animateZoom: function (e) {\r\n\t\tvar pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center),\r\n\t\t    anchor = this._getAnchor();\r\n\t\tDomUtil.setPosition(this._container, pos.add(anchor));\r\n\t},\r\n\r\n\t_adjustPan: function () {\r\n\t\tif (!this.options.autoPan) { return; }\r\n\t\tif (this._map._panAnim) { this._map._panAnim.stop(); }\r\n\r\n\t\t// We can endlessly recurse if keepInView is set and the view resets.\r\n\t\t// Let's guard against that by exiting early if we're responding to our own autopan.\r\n\t\tif (this._autopanning) {\r\n\t\t\tthis._autopanning = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar map = this._map,\r\n\t\t    marginBottom = parseInt(DomUtil.getStyle(this._container, 'marginBottom'), 10) || 0,\r\n\t\t    containerHeight = this._container.offsetHeight + marginBottom,\r\n\t\t    containerWidth = this._containerWidth,\r\n\t\t    layerPos = new Point(this._containerLeft, -containerHeight - this._containerBottom);\r\n\r\n\t\tlayerPos._add(DomUtil.getPosition(this._container));\r\n\r\n\t\tvar containerPos = map.layerPointToContainerPoint(layerPos),\r\n\t\t    padding = toPoint(this.options.autoPanPadding),\r\n\t\t    paddingTL = toPoint(this.options.autoPanPaddingTopLeft || padding),\r\n\t\t    paddingBR = toPoint(this.options.autoPanPaddingBottomRight || padding),\r\n\t\t    size = map.getSize(),\r\n\t\t    dx = 0,\r\n\t\t    dy = 0;\r\n\r\n\t\tif (containerPos.x + containerWidth + paddingBR.x > size.x) { // right\r\n\t\t\tdx = containerPos.x + containerWidth - size.x + paddingBR.x;\r\n\t\t}\r\n\t\tif (containerPos.x - dx - paddingTL.x < 0) { // left\r\n\t\t\tdx = containerPos.x - paddingTL.x;\r\n\t\t}\r\n\t\tif (containerPos.y + containerHeight + paddingBR.y > size.y) { // bottom\r\n\t\t\tdy = containerPos.y + containerHeight - size.y + paddingBR.y;\r\n\t\t}\r\n\t\tif (containerPos.y - dy - paddingTL.y < 0) { // top\r\n\t\t\tdy = containerPos.y - paddingTL.y;\r\n\t\t}\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Popup events\r\n\t\t// @event autopanstart: Event\r\n\t\t// Fired when the map starts autopanning when opening a popup.\r\n\t\tif (dx || dy) {\r\n\t\t\t// Track that we're autopanning, as this function will be re-ran on moveend\r\n\t\t\tif (this.options.keepInView) {\r\n\t\t\t\tthis._autopanning = true;\r\n\t\t\t}\r\n\r\n\t\t\tmap\r\n\t\t\t    .fire('autopanstart')\r\n\t\t\t    .panBy([dx, dy]);\r\n\t\t}\r\n\t},\r\n\r\n\t_getAnchor: function () {\r\n\t\t// Where should we anchor the popup on the source layer?\r\n\t\treturn toPoint(this._source && this._source._getPopupAnchor ? this._source._getPopupAnchor() : [0, 0]);\r\n\t}\r\n\r\n});\r\n\r\n// @namespace Popup\r\n// @factory L.popup(options?: Popup options, source?: Layer)\r\n// Instantiates a `Popup` object given an optional `options` object that describes its appearance and location and an optional `source` object that is used to tag the popup with a reference to the Layer to which it refers.\r\n// @alternative\r\n// @factory L.popup(latlng: LatLng, options?: Popup options)\r\n// Instantiates a `Popup` object given `latlng` where the popup will open and an optional `options` object that describes its appearance and location.\r\nexport var popup = function (options, source) {\r\n\treturn new Popup(options, source);\r\n};\r\n\r\n\r\n/* @namespace Map\r\n * @section Interaction Options\r\n * @option closePopupOnClick: Boolean = true\r\n * Set it to `false` if you don't want popups to close when user clicks the map.\r\n */\r\nMap.mergeOptions({\r\n\tclosePopupOnClick: true\r\n});\r\n\r\n\r\n// @namespace Map\r\n// @section Methods for Layers and Controls\r\nMap.include({\r\n\t// @method openPopup(popup: Popup): this\r\n\t// Opens the specified popup while closing the previously opened (to make sure only one is opened at one time for usability).\r\n\t// @alternative\r\n\t// @method openPopup(content: String|HTMLElement, latlng: LatLng, options?: Popup options): this\r\n\t// Creates a popup with the specified content and options and opens it in the given point on a map.\r\n\topenPopup: function (popup, latlng, options) {\r\n\t\tthis._initOverlay(Popup, popup, latlng, options)\r\n\t\t  .openOn(this);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method closePopup(popup?: Popup): this\r\n\t// Closes the popup previously opened with [openPopup](#map-openpopup) (or the given one).\r\n\tclosePopup: function (popup) {\r\n\t\tpopup = arguments.length ? popup : this._popup;\r\n\t\tif (popup) {\r\n\t\t\tpopup.close();\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n});\r\n\r\n/*\r\n * @namespace Layer\r\n * @section Popup methods example\r\n *\r\n * All layers share a set of methods convenient for binding popups to it.\r\n *\r\n * ```js\r\n * var layer = L.Polygon(latlngs).bindPopup('Hi There!').addTo(map);\r\n * layer.openPopup();\r\n * layer.closePopup();\r\n * ```\r\n *\r\n * Popups will also be automatically opened when the layer is clicked on and closed when the layer is removed from the map or another popup is opened.\r\n */\r\n\r\n// @section Popup methods\r\nLayer.include({\r\n\r\n\t// @method bindPopup(content: String|HTMLElement|Function|Popup, options?: Popup options): this\r\n\t// Binds a popup to the layer with the passed `content` and sets up the\r\n\t// necessary event listeners. If a `Function` is passed it will receive\r\n\t// the layer as the first argument and should return a `String` or `HTMLElement`.\r\n\tbindPopup: function (content, options) {\r\n\t\tthis._popup = this._initOverlay(Popup, this._popup, content, options);\r\n\t\tif (!this._popupHandlersAdded) {\r\n\t\t\tthis.on({\r\n\t\t\t\tclick: this._openPopup,\r\n\t\t\t\tkeypress: this._onKeyPress,\r\n\t\t\t\tremove: this.closePopup,\r\n\t\t\t\tmove: this._movePopup\r\n\t\t\t});\r\n\t\t\tthis._popupHandlersAdded = true;\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method unbindPopup(): this\r\n\t// Removes the popup previously bound with `bindPopup`.\r\n\tunbindPopup: function () {\r\n\t\tif (this._popup) {\r\n\t\t\tthis.off({\r\n\t\t\t\tclick: this._openPopup,\r\n\t\t\t\tkeypress: this._onKeyPress,\r\n\t\t\t\tremove: this.closePopup,\r\n\t\t\t\tmove: this._movePopup\r\n\t\t\t});\r\n\t\t\tthis._popupHandlersAdded = false;\r\n\t\t\tthis._popup = null;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method openPopup(latlng?: LatLng): this\r\n\t// Opens the bound popup at the specified `latlng` or at the default popup anchor if no `latlng` is passed.\r\n\topenPopup: function (latlng) {\r\n\t\tif (this._popup) {\r\n\t\t\tif (!(this instanceof FeatureGroup)) {\r\n\t\t\t\tthis._popup._source = this;\r\n\t\t\t}\r\n\t\t\tif (this._popup._prepareOpen(latlng || this._latlng)) {\r\n\t\t\t\t// open the popup on the map\r\n\t\t\t\tthis._popup.openOn(this._map);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method closePopup(): this\r\n\t// Closes the popup bound to this layer if it is open.\r\n\tclosePopup: function () {\r\n\t\tif (this._popup) {\r\n\t\t\tthis._popup.close();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method togglePopup(): this\r\n\t// Opens or closes the popup bound to this layer depending on its current state.\r\n\ttogglePopup: function () {\r\n\t\tif (this._popup) {\r\n\t\t\tthis._popup.toggle(this);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method isPopupOpen(): boolean\r\n\t// Returns `true` if the popup bound to this layer is currently open.\r\n\tisPopupOpen: function () {\r\n\t\treturn (this._popup ? this._popup.isOpen() : false);\r\n\t},\r\n\r\n\t// @method setPopupContent(content: String|HTMLElement|Popup): this\r\n\t// Sets the content of the popup bound to this layer.\r\n\tsetPopupContent: function (content) {\r\n\t\tif (this._popup) {\r\n\t\t\tthis._popup.setContent(content);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getPopup(): Popup\r\n\t// Returns the popup bound to this layer.\r\n\tgetPopup: function () {\r\n\t\treturn this._popup;\r\n\t},\r\n\r\n\t_openPopup: function (e) {\r\n\t\tif (!this._popup || !this._map) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// prevent map click\r\n\t\tDomEvent.stop(e);\r\n\r\n\t\tvar target = e.layer || e.target;\r\n\t\tif (this._popup._source === target && !(target instanceof Path)) {\r\n\t\t\t// treat it like a marker and figure out\r\n\t\t\t// if we should toggle it open/closed\r\n\t\t\tif (this._map.hasLayer(this._popup)) {\r\n\t\t\t\tthis.closePopup();\r\n\t\t\t} else {\r\n\t\t\t\tthis.openPopup(e.latlng);\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._popup._source = target;\r\n\t\tthis.openPopup(e.latlng);\r\n\t},\r\n\r\n\t_movePopup: function (e) {\r\n\t\tthis._popup.setLatLng(e.latlng);\r\n\t},\r\n\r\n\t_onKeyPress: function (e) {\r\n\t\tif (e.originalEvent.keyCode === 13) {\r\n\t\t\tthis._openPopup(e);\r\n\t\t}\r\n\t}\r\n});\r\n", "import {DivOverlay} from './DivOverlay';\nimport {toPoint} from '../geometry/Point';\nimport {Map} from '../map/Map';\nimport {Layer} from './Layer';\nimport * as DomUtil from '../dom/DomUtil';\nimport * as DomEvent from '../dom/DomEvent';\nimport * as Util from '../core/Util';\nimport {FeatureGroup} from './FeatureGroup';\n\n/*\n * @class Tooltip\n * @inherits DivOverlay\n * @aka L.Tooltip\n * Used to display small texts on top of map layers.\n *\n * @example\n * If you want to just bind a tooltip to marker:\n *\n * ```js\n * marker.bindTooltip(\"my tooltip text\").openTooltip();\n * ```\n * Path overlays like polylines also have a `bindTooltip` method.\n *\n * A tooltip can be also standalone:\n *\n * ```js\n * var tooltip = L.tooltip()\n * \t.setLatLng(latlng)\n * \t.setContent('Hello world!<br />This is a nice tooltip.')\n * \t.addTo(map);\n * ```\n * or\n * ```js\n * var tooltip = L.tooltip(latlng, {content: 'Hello world!<br />This is a nice tooltip.'})\n * \t.addTo(map);\n * ```\n *\n *\n * Note about tooltip offset. Leaflet takes two options in consideration\n * for computing tooltip offsetting:\n * - the `offset` Tooltip option: it defaults to [0, 0], and it's specific to one tooltip.\n *   Add a positive x offset to move the tooltip to the right, and a positive y offset to\n *   move it to the bottom. Negatives will move to the left and top.\n * - the `tooltipAnchor` Icon option: this will only be considered for Marker. You\n *   should adapt this value if you use a custom icon.\n */\n\n\n// @namespace Tooltip\nexport var Tooltip = DivOverlay.extend({\n\n\t// @section\n\t// @aka Tooltip options\n\toptions: {\n\t\t// @option pane: String = 'tooltipPane'\n\t\t// `Map pane` where the tooltip will be added.\n\t\tpane: 'tooltipPane',\n\n\t\t// @option offset: Point = Point(0, 0)\n\t\t// Optional offset of the tooltip position.\n\t\toffset: [0, 0],\n\n\t\t// @option direction: String = 'auto'\n\t\t// Direction where to open the tooltip. Possible values are: `right`, `left`,\n\t\t// `top`, `bottom`, `center`, `auto`.\n\t\t// `auto` will dynamically switch between `right` and `left` according to the tooltip\n\t\t// position on the map.\n\t\tdirection: 'auto',\n\n\t\t// @option permanent: Boolean = false\n\t\t// Whether to open the tooltip permanently or only on mouseover.\n\t\tpermanent: false,\n\n\t\t// @option sticky: Boolean = false\n\t\t// If true, the tooltip will follow the mouse instead of being fixed at the feature center.\n\t\tsticky: false,\n\n\t\t// @option opacity: Number = 0.9\n\t\t// Tooltip container opacity.\n\t\topacity: 0.9\n\t},\n\n\tonAdd: function (map) {\n\t\tDivOverlay.prototype.onAdd.call(this, map);\n\t\tthis.setOpacity(this.options.opacity);\n\n\t\t// @namespace Map\n\t\t// @section Tooltip events\n\t\t// @event tooltipopen: TooltipEvent\n\t\t// Fired when a tooltip is opened in the map.\n\t\tmap.fire('tooltipopen', {tooltip: this});\n\n\t\tif (this._source) {\n\t\t\tthis.addEventParent(this._source);\n\n\t\t\t// @namespace Layer\n\t\t\t// @section Tooltip events\n\t\t\t// @event tooltipopen: TooltipEvent\n\t\t\t// Fired when a tooltip bound to this layer is opened.\n\t\t\tthis._source.fire('tooltipopen', {tooltip: this}, true);\n\t\t}\n\t},\n\n\tonRemove: function (map) {\n\t\tDivOverlay.prototype.onRemove.call(this, map);\n\n\t\t// @namespace Map\n\t\t// @section Tooltip events\n\t\t// @event tooltipclose: TooltipEvent\n\t\t// Fired when a tooltip in the map is closed.\n\t\tmap.fire('tooltipclose', {tooltip: this});\n\n\t\tif (this._source) {\n\t\t\tthis.removeEventParent(this._source);\n\n\t\t\t// @namespace Layer\n\t\t\t// @section Tooltip events\n\t\t\t// @event tooltipclose: TooltipEvent\n\t\t\t// Fired when a tooltip bound to this layer is closed.\n\t\t\tthis._source.fire('tooltipclose', {tooltip: this}, true);\n\t\t}\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = DivOverlay.prototype.getEvents.call(this);\n\n\t\tif (!this.options.permanent) {\n\t\t\tevents.preclick = this.close;\n\t\t}\n\n\t\treturn events;\n\t},\n\n\t_initLayout: function () {\n\t\tvar prefix = 'leaflet-tooltip',\n\t\t    className = prefix + ' ' + (this.options.className || '') + ' leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');\n\n\t\tthis._contentNode = this._container = DomUtil.create('div', className);\n\n\t\tthis._container.setAttribute('role', 'tooltip');\n\t\tthis._container.setAttribute('id', 'leaflet-tooltip-' + Util.stamp(this));\n\t},\n\n\t_updateLayout: function () {},\n\n\t_adjustPan: function () {},\n\n\t_setPosition: function (pos) {\n\t\tvar subX, subY,\n\t\t    map = this._map,\n\t\t    container = this._container,\n\t\t    centerPoint = map.latLngToContainerPoint(map.getCenter()),\n\t\t    tooltipPoint = map.layerPointToContainerPoint(pos),\n\t\t    direction = this.options.direction,\n\t\t    tooltipWidth = container.offsetWidth,\n\t\t    tooltipHeight = container.offsetHeight,\n\t\t    offset = toPoint(this.options.offset),\n\t\t    anchor = this._getAnchor();\n\n\t\tif (direction === 'top') {\n\t\t\tsubX = tooltipWidth / 2;\n\t\t\tsubY = tooltipHeight;\n\t\t} else if (direction === 'bottom') {\n\t\t\tsubX = tooltipWidth / 2;\n\t\t\tsubY = 0;\n\t\t} else if (direction === 'center') {\n\t\t\tsubX = tooltipWidth / 2;\n\t\t\tsubY = tooltipHeight / 2;\n\t\t} else if (direction === 'right') {\n\t\t\tsubX = 0;\n\t\t\tsubY = tooltipHeight / 2;\n\t\t} else if (direction === 'left') {\n\t\t\tsubX = tooltipWidth;\n\t\t\tsubY = tooltipHeight / 2;\n\t\t} else if (tooltipPoint.x < centerPoint.x) {\n\t\t\tdirection = 'right';\n\t\t\tsubX = 0;\n\t\t\tsubY = tooltipHeight / 2;\n\t\t} else {\n\t\t\tdirection = 'left';\n\t\t\tsubX = tooltipWidth + (offset.x + anchor.x) * 2;\n\t\t\tsubY = tooltipHeight / 2;\n\t\t}\n\n\t\tpos = pos.subtract(toPoint(subX, subY, true)).add(offset).add(anchor);\n\n\t\tDomUtil.removeClass(container, 'leaflet-tooltip-right');\n\t\tDomUtil.removeClass(container, 'leaflet-tooltip-left');\n\t\tDomUtil.removeClass(container, 'leaflet-tooltip-top');\n\t\tDomUtil.removeClass(container, 'leaflet-tooltip-bottom');\n\t\tDomUtil.addClass(container, 'leaflet-tooltip-' + direction);\n\t\tDomUtil.setPosition(container, pos);\n\t},\n\n\t_updatePosition: function () {\n\t\tvar pos = this._map.latLngToLayerPoint(this._latlng);\n\t\tthis._setPosition(pos);\n\t},\n\n\tsetOpacity: function (opacity) {\n\t\tthis.options.opacity = opacity;\n\n\t\tif (this._container) {\n\t\t\tDomUtil.setOpacity(this._container, opacity);\n\t\t}\n\t},\n\n\t_animateZoom: function (e) {\n\t\tvar pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center);\n\t\tthis._setPosition(pos);\n\t},\n\n\t_getAnchor: function () {\n\t\t// Where should we anchor the tooltip on the source layer?\n\t\treturn toPoint(this._source && this._source._getTooltipAnchor && !this.options.sticky ? this._source._getTooltipAnchor() : [0, 0]);\n\t}\n\n});\n\n// @namespace Tooltip\n// @factory L.tooltip(options?: Tooltip options, source?: Layer)\n// Instantiates a `Tooltip` object given an optional `options` object that describes its appearance and location and an optional `source` object that is used to tag the tooltip with a reference to the Layer to which it refers.\n// @alternative\n// @factory L.tooltip(latlng: LatLng, options?: Tooltip options)\n// Instantiates a `Tooltip` object given `latlng` where the tooltip will open and an optional `options` object that describes its appearance and location.\nexport var tooltip = function (options, source) {\n\treturn new Tooltip(options, source);\n};\n\n// @namespace Map\n// @section Methods for Layers and Controls\nMap.include({\n\n\t// @method openTooltip(tooltip: Tooltip): this\n\t// Opens the specified tooltip.\n\t// @alternative\n\t// @method openTooltip(content: String|HTMLElement, latlng: LatLng, options?: Tooltip options): this\n\t// Creates a tooltip with the specified content and options and open it.\n\topenTooltip: function (tooltip, latlng, options) {\n\t\tthis._initOverlay(Tooltip, tooltip, latlng, options)\n\t\t  .openOn(this);\n\n\t\treturn this;\n\t},\n\n\t// @method closeTooltip(tooltip: Tooltip): this\n\t// Closes the tooltip given as parameter.\n\tcloseTooltip: function (tooltip) {\n\t\ttooltip.close();\n\t\treturn this;\n\t}\n\n});\n\n/*\n * @namespace Layer\n * @section Tooltip methods example\n *\n * All layers share a set of methods convenient for binding tooltips to it.\n *\n * ```js\n * var layer = L.Polygon(latlngs).bindTooltip('Hi There!').addTo(map);\n * layer.openTooltip();\n * layer.closeTooltip();\n * ```\n */\n\n// @section Tooltip methods\nLayer.include({\n\n\t// @method bindTooltip(content: String|HTMLElement|Function|Tooltip, options?: Tooltip options): this\n\t// Binds a tooltip to the layer with the passed `content` and sets up the\n\t// necessary event listeners. If a `Function` is passed it will receive\n\t// the layer as the first argument and should return a `String` or `HTMLElement`.\n\tbindTooltip: function (content, options) {\n\n\t\tif (this._tooltip && this.isTooltipOpen()) {\n\t\t\tthis.unbindTooltip();\n\t\t}\n\n\t\tthis._tooltip = this._initOverlay(Tooltip, this._tooltip, content, options);\n\t\tthis._initTooltipInteractions();\n\n\t\tif (this._tooltip.options.permanent && this._map && this._map.hasLayer(this)) {\n\t\t\tthis.openTooltip();\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t// @method unbindTooltip(): this\n\t// Removes the tooltip previously bound with `bindTooltip`.\n\tunbindTooltip: function () {\n\t\tif (this._tooltip) {\n\t\t\tthis._initTooltipInteractions(true);\n\t\t\tthis.closeTooltip();\n\t\t\tthis._tooltip = null;\n\t\t}\n\t\treturn this;\n\t},\n\n\t_initTooltipInteractions: function (remove) {\n\t\tif (!remove && this._tooltipHandlersAdded) { return; }\n\t\tvar onOff = remove ? 'off' : 'on',\n\t\t    events = {\n\t\t\tremove: this.closeTooltip,\n\t\t\tmove: this._moveTooltip\n\t\t    };\n\t\tif (!this._tooltip.options.permanent) {\n\t\t\tevents.mouseover = this._openTooltip;\n\t\t\tevents.mouseout = this.closeTooltip;\n\t\t\tevents.click = this._openTooltip;\n\t\t\tif (this._map) {\n\t\t\t\tthis._addFocusListeners();\n\t\t\t} else {\n\t\t\t\tevents.add = this._addFocusListeners;\n\t\t\t}\n\t\t} else {\n\t\t\tevents.add = this._openTooltip;\n\t\t}\n\t\tif (this._tooltip.options.sticky) {\n\t\t\tevents.mousemove = this._moveTooltip;\n\t\t}\n\t\tthis[onOff](events);\n\t\tthis._tooltipHandlersAdded = !remove;\n\t},\n\n\t// @method openTooltip(latlng?: LatLng): this\n\t// Opens the bound tooltip at the specified `latlng` or at the default tooltip anchor if no `latlng` is passed.\n\topenTooltip: function (latlng) {\n\t\tif (this._tooltip) {\n\t\t\tif (!(this instanceof FeatureGroup)) {\n\t\t\t\tthis._tooltip._source = this;\n\t\t\t}\n\t\t\tif (this._tooltip._prepareOpen(latlng)) {\n\t\t\t\t// open the tooltip on the map\n\t\t\t\tthis._tooltip.openOn(this._map);\n\n\t\t\t\tif (this.getElement) {\n\t\t\t\t\tthis._setAriaDescribedByOnLayer(this);\n\t\t\t\t} else if (this.eachLayer) {\n\t\t\t\t\tthis.eachLayer(this._setAriaDescribedByOnLayer, this);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method closeTooltip(): this\n\t// Closes the tooltip bound to this layer if it is open.\n\tcloseTooltip: function () {\n\t\tif (this._tooltip) {\n\t\t\treturn this._tooltip.close();\n\t\t}\n\t},\n\n\t// @method toggleTooltip(): this\n\t// Opens or closes the tooltip bound to this layer depending on its current state.\n\ttoggleTooltip: function () {\n\t\tif (this._tooltip) {\n\t\t\tthis._tooltip.toggle(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method isTooltipOpen(): boolean\n\t// Returns `true` if the tooltip bound to this layer is currently open.\n\tisTooltipOpen: function () {\n\t\treturn this._tooltip.isOpen();\n\t},\n\n\t// @method setTooltipContent(content: String|HTMLElement|Tooltip): this\n\t// Sets the content of the tooltip bound to this layer.\n\tsetTooltipContent: function (content) {\n\t\tif (this._tooltip) {\n\t\t\tthis._tooltip.setContent(content);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method getTooltip(): Tooltip\n\t// Returns the tooltip bound to this layer.\n\tgetTooltip: function () {\n\t\treturn this._tooltip;\n\t},\n\n\t_addFocusListeners: function () {\n\t\tif (this.getElement) {\n\t\t\tthis._addFocusListenersOnLayer(this);\n\t\t} else if (this.eachLayer) {\n\t\t\tthis.eachLayer(this._addFocusListenersOnLayer, this);\n\t\t}\n\t},\n\n\t_addFocusListenersOnLayer: function (layer) {\n\t\tvar el = typeof layer.getElement === 'function' && layer.getElement();\n\t\tif (el) {\n\t\t\tDomEvent.on(el, 'focus', function () {\n\t\t\t\tthis._tooltip._source = layer;\n\t\t\t\tthis.openTooltip();\n\t\t\t}, this);\n\t\t\tDomEvent.on(el, 'blur', this.closeTooltip, this);\n\t\t}\n\t},\n\n\t_setAriaDescribedByOnLayer: function (layer) {\n\t\tvar el = typeof layer.getElement === 'function' && layer.getElement();\n\t\tif (el) {\n\t\t\tel.setAttribute('aria-describedby', this._tooltip._container.id);\n\t\t}\n\t},\n\n\n\t_openTooltip: function (e) {\n\t\tif (!this._tooltip || !this._map) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If the map is moving, we will show the tooltip after it's done.\n\t\tif (this._map.dragging && this._map.dragging.moving() && !this._openOnceFlag) {\n\t\t\tthis._openOnceFlag = true;\n\t\t\tvar that = this;\n\t\t\tthis._map.once('moveend', function () {\n\t\t\t\tthat._openOnceFlag = false;\n\t\t\t\tthat._openTooltip(e);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tthis._tooltip._source = e.layer || e.target;\n\n\t\tthis.openTooltip(this._tooltip.options.sticky ? e.latlng : undefined);\n\t},\n\n\t_moveTooltip: function (e) {\n\t\tvar latlng = e.latlng, containerPoint, layerPoint;\n\t\tif (this._tooltip.options.sticky && e.originalEvent) {\n\t\t\tcontainerPoint = this._map.mouseEventToContainerPoint(e.originalEvent);\n\t\t\tlayerPoint = this._map.containerPointToLayerPoint(containerPoint);\n\t\t\tlatlng = this._map.layerPointToLatLng(layerPoint);\n\t\t}\n\t\tthis._tooltip.setLatLng(latlng);\n\t}\n});\n", "import {Icon} from './Icon';\nimport {toPoint as point} from '../../geometry/Point';\nimport {empty} from '../../dom/DomUtil';\n\n/*\n * @class DivIcon\n * @aka L.DivIcon\n * @inherits Icon\n *\n * Represents a lightweight icon for markers that uses a simple `<div>`\n * element instead of an image. Inherits from `Icon` but ignores the `iconUrl` and shadow options.\n *\n * @example\n * ```js\n * var myIcon = L.divIcon({className: 'my-div-icon'});\n * // you can set .my-div-icon styles in CSS\n *\n * L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);\n * ```\n *\n * By default, it has a 'leaflet-div-icon' CSS class and is styled as a little white square with a shadow.\n */\n\nexport var DivIcon = Icon.extend({\n\toptions: {\n\t\t// @section\n\t\t// @aka DivIcon options\n\t\ticonSize: [12, 12], // also can be set through CSS\n\n\t\t// iconAnchor: (Point),\n\t\t// popupAnchor: (Point),\n\n\t\t// @option html: String|HTMLElement = ''\n\t\t// Custom HTML code to put inside the div element, empty by default. Alternatively,\n\t\t// an instance of `HTMLElement`.\n\t\thtml: false,\n\n\t\t// @option bgPos: Point = [0, 0]\n\t\t// Optional relative position of the background, in pixels\n\t\tbgPos: null,\n\n\t\tclassName: 'leaflet-div-icon'\n\t},\n\n\tcreateIcon: function (oldIcon) {\n\t\tvar div = (oldIcon && oldIcon.tagName === 'DIV') ? oldIcon : document.createElement('div'),\n\t\t    options = this.options;\n\n\t\tif (options.html instanceof Element) {\n\t\t\tempty(div);\n\t\t\tdiv.appendChild(options.html);\n\t\t} else {\n\t\t\tdiv.innerHTML = options.html !== false ? options.html : '';\n\t\t}\n\n\t\tif (options.bgPos) {\n\t\t\tvar bgPos = point(options.bgPos);\n\t\t\tdiv.style.backgroundPosition = (-bgPos.x) + 'px ' + (-bgPos.y) + 'px';\n\t\t}\n\t\tthis._setIconStyles(div, 'icon');\n\n\t\treturn div;\n\t},\n\n\tcreateShadow: function () {\n\t\treturn null;\n\t}\n});\n\n// @factory L.divIcon(options: DivIcon options)\n// Creates a `DivIcon` instance with the given options.\nexport function divIcon(options) {\n\treturn new DivIcon(options);\n}\n", "import {Icon} from './Icon';\nexport {icon} from './Icon';\nimport {IconDefault} from './Icon.Default';\nIcon.Default = IconDefault;\nexport {Icon};\n\nexport {DivIcon, divIcon} from './DivIcon';\nexport {Marker, marker} from './Marker';\n", "import {Layer} from '../Layer';\nimport Browser from '../../core/Browser';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport {Point} from '../../geometry/Point';\nimport {Bounds} from '../../geometry/Bounds';\nimport {LatLngBounds, toLatLngBounds as latLngBounds} from '../../geo/LatLngBounds';\n\n/*\n * @class GridLayer\n * @inherits Layer\n * @aka L.GridLayer\n *\n * Generic class for handling a tiled grid of HTML elements. This is the base class for all tile layers and replaces `TileLayer.Canvas`.\n * GridLayer can be extended to create a tiled grid of HTML elements like `<canvas>`, `<img>` or `<div>`. GridLayer will handle creating and animating these DOM elements for you.\n *\n *\n * @section Synchronous usage\n * @example\n *\n * To create a custom layer, extend GridLayer and implement the `createTile()` method, which will be passed a `Point` object with the `x`, `y`, and `z` (zoom level) coordinates to draw your tile.\n *\n * ```js\n * var CanvasLayer = L.GridLayer.extend({\n *     createTile: function(coords){\n *         // create a <canvas> element for drawing\n *         var tile = L.DomUtil.create('canvas', 'leaflet-tile');\n *\n *         // setup tile width and height according to the options\n *         var size = this.getTileSize();\n *         tile.width = size.x;\n *         tile.height = size.y;\n *\n *         // get a canvas context and draw something on it using coords.x, coords.y and coords.z\n *         var ctx = tile.getContext('2d');\n *\n *         // return the tile so it can be rendered on screen\n *         return tile;\n *     }\n * });\n * ```\n *\n * @section Asynchronous usage\n * @example\n *\n * Tile creation can also be asynchronous, this is useful when using a third-party drawing library. Once the tile is finished drawing it can be passed to the `done()` callback.\n *\n * ```js\n * var CanvasLayer = L.GridLayer.extend({\n *     createTile: function(coords, done){\n *         var error;\n *\n *         // create a <canvas> element for drawing\n *         var tile = L.DomUtil.create('canvas', 'leaflet-tile');\n *\n *         // setup tile width and height according to the options\n *         var size = this.getTileSize();\n *         tile.width = size.x;\n *         tile.height = size.y;\n *\n *         // draw something asynchronously and pass the tile to the done() callback\n *         setTimeout(function() {\n *             done(error, tile);\n *         }, 1000);\n *\n *         return tile;\n *     }\n * });\n * ```\n *\n * @section\n */\n\n\nexport var GridLayer = Layer.extend({\n\n\t// @section\n\t// @aka GridLayer options\n\toptions: {\n\t\t// @option tileSize: Number|Point = 256\n\t\t// Width and height of tiles in the grid. Use a number if width and height are equal, or `L.point(width, height)` otherwise.\n\t\ttileSize: 256,\n\n\t\t// @option opacity: Number = 1.0\n\t\t// Opacity of the tiles. Can be used in the `createTile()` function.\n\t\topacity: 1,\n\n\t\t// @option updateWhenIdle: Boolean = (depends)\n\t\t// Load new tiles only when panning ends.\n\t\t// `true` by default on mobile browsers, in order to avoid too many requests and keep smooth navigation.\n\t\t// `false` otherwise in order to display new tiles _during_ panning, since it is easy to pan outside the\n\t\t// [`keepBuffer`](#gridlayer-keepbuffer) option in desktop browsers.\n\t\tupdateWhenIdle: Browser.mobile,\n\n\t\t// @option updateWhenZooming: Boolean = true\n\t\t// By default, a smooth zoom animation (during a [touch zoom](#map-touchzoom) or a [`flyTo()`](#map-flyto)) will update grid layers every integer zoom level. Setting this option to `false` will update the grid layer only when the smooth animation ends.\n\t\tupdateWhenZooming: true,\n\n\t\t// @option updateInterval: Number = 200\n\t\t// Tiles will not update more than once every `updateInterval` milliseconds when panning.\n\t\tupdateInterval: 200,\n\n\t\t// @option zIndex: Number = 1\n\t\t// The explicit zIndex of the tile layer.\n\t\tzIndex: 1,\n\n\t\t// @option bounds: LatLngBounds = undefined\n\t\t// If set, tiles will only be loaded inside the set `LatLngBounds`.\n\t\tbounds: null,\n\n\t\t// @option minZoom: Number = 0\n\t\t// The minimum zoom level down to which this layer will be displayed (inclusive).\n\t\tminZoom: 0,\n\n\t\t// @option maxZoom: Number = undefined\n\t\t// The maximum zoom level up to which this layer will be displayed (inclusive).\n\t\tmaxZoom: undefined,\n\n\t\t// @option maxNativeZoom: Number = undefined\n\t\t// Maximum zoom number the tile source has available. If it is specified,\n\t\t// the tiles on all zoom levels higher than `maxNativeZoom` will be loaded\n\t\t// from `maxNativeZoom` level and auto-scaled.\n\t\tmaxNativeZoom: undefined,\n\n\t\t// @option minNativeZoom: Number = undefined\n\t\t// Minimum zoom number the tile source has available. If it is specified,\n\t\t// the tiles on all zoom levels lower than `minNativeZoom` will be loaded\n\t\t// from `minNativeZoom` level and auto-scaled.\n\t\tminNativeZoom: undefined,\n\n\t\t// @option noWrap: Boolean = false\n\t\t// Whether the layer is wrapped around the antimeridian. If `true`, the\n\t\t// GridLayer will only be displayed once at low zoom levels. Has no\n\t\t// effect when the [map CRS](#map-crs) doesn't wrap around. Can be used\n\t\t// in combination with [`bounds`](#gridlayer-bounds) to prevent requesting\n\t\t// tiles outside the CRS limits.\n\t\tnoWrap: false,\n\n\t\t// @option pane: String = 'tilePane'\n\t\t// `Map pane` where the grid layer will be added.\n\t\tpane: 'tilePane',\n\n\t\t// @option className: String = ''\n\t\t// A custom class name to assign to the tile layer. Empty by default.\n\t\tclassName: '',\n\n\t\t// @option keepBuffer: Number = 2\n\t\t// When panning the map, keep this many rows and columns of tiles before unloading them.\n\t\tkeepBuffer: 2\n\t},\n\n\tinitialize: function (options) {\n\t\tUtil.setOptions(this, options);\n\t},\n\n\tonAdd: function () {\n\t\tthis._initContainer();\n\n\t\tthis._levels = {};\n\t\tthis._tiles = {};\n\n\t\tthis._resetView(); // implicit _update() call\n\t},\n\n\tbeforeAdd: function (map) {\n\t\tmap._addZoomLimit(this);\n\t},\n\n\tonRemove: function (map) {\n\t\tthis._removeAllTiles();\n\t\tDomUtil.remove(this._container);\n\t\tmap._removeZoomLimit(this);\n\t\tthis._container = null;\n\t\tthis._tileZoom = undefined;\n\t},\n\n\t// @method bringToFront: this\n\t// Brings the tile layer to the top of all tile layers.\n\tbringToFront: function () {\n\t\tif (this._map) {\n\t\t\tDomUtil.toFront(this._container);\n\t\t\tthis._setAutoZIndex(Math.max);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method bringToBack: this\n\t// Brings the tile layer to the bottom of all tile layers.\n\tbringToBack: function () {\n\t\tif (this._map) {\n\t\t\tDomUtil.toBack(this._container);\n\t\t\tthis._setAutoZIndex(Math.min);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method getContainer: HTMLElement\n\t// Returns the HTML element that contains the tiles for this layer.\n\tgetContainer: function () {\n\t\treturn this._container;\n\t},\n\n\t// @method setOpacity(opacity: Number): this\n\t// Changes the [opacity](#gridlayer-opacity) of the grid layer.\n\tsetOpacity: function (opacity) {\n\t\tthis.options.opacity = opacity;\n\t\tthis._updateOpacity();\n\t\treturn this;\n\t},\n\n\t// @method setZIndex(zIndex: Number): this\n\t// Changes the [zIndex](#gridlayer-zindex) of the grid layer.\n\tsetZIndex: function (zIndex) {\n\t\tthis.options.zIndex = zIndex;\n\t\tthis._updateZIndex();\n\n\t\treturn this;\n\t},\n\n\t// @method isLoading: Boolean\n\t// Returns `true` if any tile in the grid layer has not finished loading.\n\tisLoading: function () {\n\t\treturn this._loading;\n\t},\n\n\t// @method redraw: this\n\t// Causes the layer to clear all the tiles and request them again.\n\tredraw: function () {\n\t\tif (this._map) {\n\t\t\tthis._removeAllTiles();\n\t\t\tvar tileZoom = this._clampZoom(this._map.getZoom());\n\t\t\tif (tileZoom !== this._tileZoom) {\n\t\t\t\tthis._tileZoom = tileZoom;\n\t\t\t\tthis._updateLevels();\n\t\t\t}\n\t\t\tthis._update();\n\t\t}\n\t\treturn this;\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = {\n\t\t\tviewprereset: this._invalidateAll,\n\t\t\tviewreset: this._resetView,\n\t\t\tzoom: this._resetView,\n\t\t\tmoveend: this._onMoveEnd\n\t\t};\n\n\t\tif (!this.options.updateWhenIdle) {\n\t\t\t// update tiles on move, but not more often than once per given interval\n\t\t\tif (!this._onMove) {\n\t\t\t\tthis._onMove = Util.throttle(this._onMoveEnd, this.options.updateInterval, this);\n\t\t\t}\n\n\t\t\tevents.move = this._onMove;\n\t\t}\n\n\t\tif (this._zoomAnimated) {\n\t\t\tevents.zoomanim = this._animateZoom;\n\t\t}\n\n\t\treturn events;\n\t},\n\n\t// @section Extension methods\n\t// Layers extending `GridLayer` shall reimplement the following method.\n\t// @method createTile(coords: Object, done?: Function): HTMLElement\n\t// Called only internally, must be overridden by classes extending `GridLayer`.\n\t// Returns the `HTMLElement` corresponding to the given `coords`. If the `done` callback\n\t// is specified, it must be called when the tile has finished loading and drawing.\n\tcreateTile: function () {\n\t\treturn document.createElement('div');\n\t},\n\n\t// @section\n\t// @method getTileSize: Point\n\t// Normalizes the [tileSize option](#gridlayer-tilesize) into a point. Used by the `createTile()` method.\n\tgetTileSize: function () {\n\t\tvar s = this.options.tileSize;\n\t\treturn s instanceof Point ? s : new Point(s, s);\n\t},\n\n\t_updateZIndex: function () {\n\t\tif (this._container && this.options.zIndex !== undefined && this.options.zIndex !== null) {\n\t\t\tthis._container.style.zIndex = this.options.zIndex;\n\t\t}\n\t},\n\n\t_setAutoZIndex: function (compare) {\n\t\t// go through all other layers of the same pane, set zIndex to max + 1 (front) or min - 1 (back)\n\n\t\tvar layers = this.getPane().children,\n\t\t    edgeZIndex = -compare(-Infinity, Infinity); // -Infinity for max, Infinity for min\n\n\t\tfor (var i = 0, len = layers.length, zIndex; i < len; i++) {\n\n\t\t\tzIndex = layers[i].style.zIndex;\n\n\t\t\tif (layers[i] !== this._container && zIndex) {\n\t\t\t\tedgeZIndex = compare(edgeZIndex, +zIndex);\n\t\t\t}\n\t\t}\n\n\t\tif (isFinite(edgeZIndex)) {\n\t\t\tthis.options.zIndex = edgeZIndex + compare(-1, 1);\n\t\t\tthis._updateZIndex();\n\t\t}\n\t},\n\n\t_updateOpacity: function () {\n\t\tif (!this._map) { return; }\n\n\t\t// IE doesn't inherit filter opacity properly, so we're forced to set it on tiles\n\t\tif (Browser.ielt9) { return; }\n\n\t\tDomUtil.setOpacity(this._container, this.options.opacity);\n\n\t\tvar now = +new Date(),\n\t\t    nextFrame = false,\n\t\t    willPrune = false;\n\n\t\tfor (var key in this._tiles) {\n\t\t\tvar tile = this._tiles[key];\n\t\t\tif (!tile.current || !tile.loaded) { continue; }\n\n\t\t\tvar fade = Math.min(1, (now - tile.loaded) / 200);\n\n\t\t\tDomUtil.setOpacity(tile.el, fade);\n\t\t\tif (fade < 1) {\n\t\t\t\tnextFrame = true;\n\t\t\t} else {\n\t\t\t\tif (tile.active) {\n\t\t\t\t\twillPrune = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis._onOpaqueTile(tile);\n\t\t\t\t}\n\t\t\t\ttile.active = true;\n\t\t\t}\n\t\t}\n\n\t\tif (willPrune && !this._noPrune) { this._pruneTiles(); }\n\n\t\tif (nextFrame) {\n\t\t\tUtil.cancelAnimFrame(this._fadeFrame);\n\t\t\tthis._fadeFrame = Util.requestAnimFrame(this._updateOpacity, this);\n\t\t}\n\t},\n\n\t_onOpaqueTile: Util.falseFn,\n\n\t_initContainer: function () {\n\t\tif (this._container) { return; }\n\n\t\tthis._container = DomUtil.create('div', 'leaflet-layer ' + (this.options.className || ''));\n\t\tthis._updateZIndex();\n\n\t\tif (this.options.opacity < 1) {\n\t\t\tthis._updateOpacity();\n\t\t}\n\n\t\tthis.getPane().appendChild(this._container);\n\t},\n\n\t_updateLevels: function () {\n\n\t\tvar zoom = this._tileZoom,\n\t\t    maxZoom = this.options.maxZoom;\n\n\t\tif (zoom === undefined) { return undefined; }\n\n\t\tfor (var z in this._levels) {\n\t\t\tz = Number(z);\n\t\t\tif (this._levels[z].el.children.length || z === zoom) {\n\t\t\t\tthis._levels[z].el.style.zIndex = maxZoom - Math.abs(zoom - z);\n\t\t\t\tthis._onUpdateLevel(z);\n\t\t\t} else {\n\t\t\t\tDomUtil.remove(this._levels[z].el);\n\t\t\t\tthis._removeTilesAtZoom(z);\n\t\t\t\tthis._onRemoveLevel(z);\n\t\t\t\tdelete this._levels[z];\n\t\t\t}\n\t\t}\n\n\t\tvar level = this._levels[zoom],\n\t\t    map = this._map;\n\n\t\tif (!level) {\n\t\t\tlevel = this._levels[zoom] = {};\n\n\t\t\tlevel.el = DomUtil.create('div', 'leaflet-tile-container leaflet-zoom-animated', this._container);\n\t\t\tlevel.el.style.zIndex = maxZoom;\n\n\t\t\tlevel.origin = map.project(map.unproject(map.getPixelOrigin()), zoom).round();\n\t\t\tlevel.zoom = zoom;\n\n\t\t\tthis._setZoomTransform(level, map.getCenter(), map.getZoom());\n\n\t\t\t// force the browser to consider the newly added element for transition\n\t\t\tUtil.falseFn(level.el.offsetWidth);\n\n\t\t\tthis._onCreateLevel(level);\n\t\t}\n\n\t\tthis._level = level;\n\n\t\treturn level;\n\t},\n\n\t_onUpdateLevel: Util.falseFn,\n\n\t_onRemoveLevel: Util.falseFn,\n\n\t_onCreateLevel: Util.falseFn,\n\n\t_pruneTiles: function () {\n\t\tif (!this._map) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar key, tile;\n\n\t\tvar zoom = this._map.getZoom();\n\t\tif (zoom > this.options.maxZoom ||\n\t\t\tzoom < this.options.minZoom) {\n\t\t\tthis._removeAllTiles();\n\t\t\treturn;\n\t\t}\n\n\t\tfor (key in this._tiles) {\n\t\t\ttile = this._tiles[key];\n\t\t\ttile.retain = tile.current;\n\t\t}\n\n\t\tfor (key in this._tiles) {\n\t\t\ttile = this._tiles[key];\n\t\t\tif (tile.current && !tile.active) {\n\t\t\t\tvar coords = tile.coords;\n\t\t\t\tif (!this._retainParent(coords.x, coords.y, coords.z, coords.z - 5)) {\n\t\t\t\t\tthis._retainChildren(coords.x, coords.y, coords.z, coords.z + 2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (key in this._tiles) {\n\t\t\tif (!this._tiles[key].retain) {\n\t\t\t\tthis._removeTile(key);\n\t\t\t}\n\t\t}\n\t},\n\n\t_removeTilesAtZoom: function (zoom) {\n\t\tfor (var key in this._tiles) {\n\t\t\tif (this._tiles[key].coords.z !== zoom) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis._removeTile(key);\n\t\t}\n\t},\n\n\t_removeAllTiles: function () {\n\t\tfor (var key in this._tiles) {\n\t\t\tthis._removeTile(key);\n\t\t}\n\t},\n\n\t_invalidateAll: function () {\n\t\tfor (var z in this._levels) {\n\t\t\tDomUtil.remove(this._levels[z].el);\n\t\t\tthis._onRemoveLevel(Number(z));\n\t\t\tdelete this._levels[z];\n\t\t}\n\t\tthis._removeAllTiles();\n\n\t\tthis._tileZoom = undefined;\n\t},\n\n\t_retainParent: function (x, y, z, minZoom) {\n\t\tvar x2 = Math.floor(x / 2),\n\t\t    y2 = Math.floor(y / 2),\n\t\t    z2 = z - 1,\n\t\t    coords2 = new Point(+x2, +y2);\n\t\tcoords2.z = +z2;\n\n\t\tvar key = this._tileCoordsToKey(coords2),\n\t\t    tile = this._tiles[key];\n\n\t\tif (tile && tile.active) {\n\t\t\ttile.retain = true;\n\t\t\treturn true;\n\n\t\t} else if (tile && tile.loaded) {\n\t\t\ttile.retain = true;\n\t\t}\n\n\t\tif (z2 > minZoom) {\n\t\t\treturn this._retainParent(x2, y2, z2, minZoom);\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_retainChildren: function (x, y, z, maxZoom) {\n\n\t\tfor (var i = 2 * x; i < 2 * x + 2; i++) {\n\t\t\tfor (var j = 2 * y; j < 2 * y + 2; j++) {\n\n\t\t\t\tvar coords = new Point(i, j);\n\t\t\t\tcoords.z = z + 1;\n\n\t\t\t\tvar key = this._tileCoordsToKey(coords),\n\t\t\t\t    tile = this._tiles[key];\n\n\t\t\t\tif (tile && tile.active) {\n\t\t\t\t\ttile.retain = true;\n\t\t\t\t\tcontinue;\n\n\t\t\t\t} else if (tile && tile.loaded) {\n\t\t\t\t\ttile.retain = true;\n\t\t\t\t}\n\n\t\t\t\tif (z + 1 < maxZoom) {\n\t\t\t\t\tthis._retainChildren(i, j, z + 1, maxZoom);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_resetView: function (e) {\n\t\tvar animating = e && (e.pinch || e.flyTo);\n\t\tthis._setView(this._map.getCenter(), this._map.getZoom(), animating, animating);\n\t},\n\n\t_animateZoom: function (e) {\n\t\tthis._setView(e.center, e.zoom, true, e.noUpdate);\n\t},\n\n\t_clampZoom: function (zoom) {\n\t\tvar options = this.options;\n\n\t\tif (undefined !== options.minNativeZoom && zoom < options.minNativeZoom) {\n\t\t\treturn options.minNativeZoom;\n\t\t}\n\n\t\tif (undefined !== options.maxNativeZoom && options.maxNativeZoom < zoom) {\n\t\t\treturn options.maxNativeZoom;\n\t\t}\n\n\t\treturn zoom;\n\t},\n\n\t_setView: function (center, zoom, noPrune, noUpdate) {\n\t\tvar tileZoom = Math.round(zoom);\n\t\tif ((this.options.maxZoom !== undefined && tileZoom > this.options.maxZoom) ||\n\t\t    (this.options.minZoom !== undefined && tileZoom < this.options.minZoom)) {\n\t\t\ttileZoom = undefined;\n\t\t} else {\n\t\t\ttileZoom = this._clampZoom(tileZoom);\n\t\t}\n\n\t\tvar tileZoomChanged = this.options.updateWhenZooming && (tileZoom !== this._tileZoom);\n\n\t\tif (!noUpdate || tileZoomChanged) {\n\n\t\t\tthis._tileZoom = tileZoom;\n\n\t\t\tif (this._abortLoading) {\n\t\t\t\tthis._abortLoading();\n\t\t\t}\n\n\t\t\tthis._updateLevels();\n\t\t\tthis._resetGrid();\n\n\t\t\tif (tileZoom !== undefined) {\n\t\t\t\tthis._update(center);\n\t\t\t}\n\n\t\t\tif (!noPrune) {\n\t\t\t\tthis._pruneTiles();\n\t\t\t}\n\n\t\t\t// Flag to prevent _updateOpacity from pruning tiles during\n\t\t\t// a zoom anim or a pinch gesture\n\t\t\tthis._noPrune = !!noPrune;\n\t\t}\n\n\t\tthis._setZoomTransforms(center, zoom);\n\t},\n\n\t_setZoomTransforms: function (center, zoom) {\n\t\tfor (var i in this._levels) {\n\t\t\tthis._setZoomTransform(this._levels[i], center, zoom);\n\t\t}\n\t},\n\n\t_setZoomTransform: function (level, center, zoom) {\n\t\tvar scale = this._map.getZoomScale(zoom, level.zoom),\n\t\t    translate = level.origin.multiplyBy(scale)\n\t\t        .subtract(this._map._getNewPixelOrigin(center, zoom)).round();\n\n\t\tif (Browser.any3d) {\n\t\t\tDomUtil.setTransform(level.el, translate, scale);\n\t\t} else {\n\t\t\tDomUtil.setPosition(level.el, translate);\n\t\t}\n\t},\n\n\t_resetGrid: function () {\n\t\tvar map = this._map,\n\t\t    crs = map.options.crs,\n\t\t    tileSize = this._tileSize = this.getTileSize(),\n\t\t    tileZoom = this._tileZoom;\n\n\t\tvar bounds = this._map.getPixelWorldBounds(this._tileZoom);\n\t\tif (bounds) {\n\t\t\tthis._globalTileRange = this._pxBoundsToTileRange(bounds);\n\t\t}\n\n\t\tthis._wrapX = crs.wrapLng && !this.options.noWrap && [\n\t\t\tMath.floor(map.project([0, crs.wrapLng[0]], tileZoom).x / tileSize.x),\n\t\t\tMath.ceil(map.project([0, crs.wrapLng[1]], tileZoom).x / tileSize.y)\n\t\t];\n\t\tthis._wrapY = crs.wrapLat && !this.options.noWrap && [\n\t\t\tMath.floor(map.project([crs.wrapLat[0], 0], tileZoom).y / tileSize.x),\n\t\t\tMath.ceil(map.project([crs.wrapLat[1], 0], tileZoom).y / tileSize.y)\n\t\t];\n\t},\n\n\t_onMoveEnd: function () {\n\t\tif (!this._map || this._map._animatingZoom) { return; }\n\n\t\tthis._update();\n\t},\n\n\t_getTiledPixelBounds: function (center) {\n\t\tvar map = this._map,\n\t\t    mapZoom = map._animatingZoom ? Math.max(map._animateToZoom, map.getZoom()) : map.getZoom(),\n\t\t    scale = map.getZoomScale(mapZoom, this._tileZoom),\n\t\t    pixelCenter = map.project(center, this._tileZoom).floor(),\n\t\t    halfSize = map.getSize().divideBy(scale * 2);\n\n\t\treturn new Bounds(pixelCenter.subtract(halfSize), pixelCenter.add(halfSize));\n\t},\n\n\t// Private method to load tiles in the grid's active zoom level according to map bounds\n\t_update: function (center) {\n\t\tvar map = this._map;\n\t\tif (!map) { return; }\n\t\tvar zoom = this._clampZoom(map.getZoom());\n\n\t\tif (center === undefined) { center = map.getCenter(); }\n\t\tif (this._tileZoom === undefined) { return; }\t// if out of minzoom/maxzoom\n\n\t\tvar pixelBounds = this._getTiledPixelBounds(center),\n\t\t    tileRange = this._pxBoundsToTileRange(pixelBounds),\n\t\t    tileCenter = tileRange.getCenter(),\n\t\t    queue = [],\n\t\t    margin = this.options.keepBuffer,\n\t\t    noPruneRange = new Bounds(tileRange.getBottomLeft().subtract([margin, -margin]),\n\t\t                              tileRange.getTopRight().add([margin, -margin]));\n\n\t\t// Sanity check: panic if the tile range contains Infinity somewhere.\n\t\tif (!(isFinite(tileRange.min.x) &&\n\t\t      isFinite(tileRange.min.y) &&\n\t\t      isFinite(tileRange.max.x) &&\n\t\t      isFinite(tileRange.max.y))) { throw new Error('Attempted to load an infinite number of tiles'); }\n\n\t\tfor (var key in this._tiles) {\n\t\t\tvar c = this._tiles[key].coords;\n\t\t\tif (c.z !== this._tileZoom || !noPruneRange.contains(new Point(c.x, c.y))) {\n\t\t\t\tthis._tiles[key].current = false;\n\t\t\t}\n\t\t}\n\n\t\t// _update just loads more tiles. If the tile zoom level differs too much\n\t\t// from the map's, let _setView reset levels and prune old tiles.\n\t\tif (Math.abs(zoom - this._tileZoom) > 1) { this._setView(center, zoom); return; }\n\n\t\t// create a queue of coordinates to load tiles from\n\t\tfor (var j = tileRange.min.y; j <= tileRange.max.y; j++) {\n\t\t\tfor (var i = tileRange.min.x; i <= tileRange.max.x; i++) {\n\t\t\t\tvar coords = new Point(i, j);\n\t\t\t\tcoords.z = this._tileZoom;\n\n\t\t\t\tif (!this._isValidTile(coords)) { continue; }\n\n\t\t\t\tvar tile = this._tiles[this._tileCoordsToKey(coords)];\n\t\t\t\tif (tile) {\n\t\t\t\t\ttile.current = true;\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push(coords);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// sort tile queue to load tiles in order of their distance to center\n\t\tqueue.sort(function (a, b) {\n\t\t\treturn a.distanceTo(tileCenter) - b.distanceTo(tileCenter);\n\t\t});\n\n\t\tif (queue.length !== 0) {\n\t\t\t// if it's the first batch of tiles to load\n\t\t\tif (!this._loading) {\n\t\t\t\tthis._loading = true;\n\t\t\t\t// @event loading: Event\n\t\t\t\t// Fired when the grid layer starts loading tiles.\n\t\t\t\tthis.fire('loading');\n\t\t\t}\n\n\t\t\t// create DOM fragment to append tiles in one batch\n\t\t\tvar fragment = document.createDocumentFragment();\n\n\t\t\tfor (i = 0; i < queue.length; i++) {\n\t\t\t\tthis._addTile(queue[i], fragment);\n\t\t\t}\n\n\t\t\tthis._level.el.appendChild(fragment);\n\t\t}\n\t},\n\n\t_isValidTile: function (coords) {\n\t\tvar crs = this._map.options.crs;\n\n\t\tif (!crs.infinite) {\n\t\t\t// don't load tile if it's out of bounds and not wrapped\n\t\t\tvar bounds = this._globalTileRange;\n\t\t\tif ((!crs.wrapLng && (coords.x < bounds.min.x || coords.x > bounds.max.x)) ||\n\t\t\t    (!crs.wrapLat && (coords.y < bounds.min.y || coords.y > bounds.max.y))) { return false; }\n\t\t}\n\n\t\tif (!this.options.bounds) { return true; }\n\n\t\t// don't load tile if it doesn't intersect the bounds in options\n\t\tvar tileBounds = this._tileCoordsToBounds(coords);\n\t\treturn latLngBounds(this.options.bounds).overlaps(tileBounds);\n\t},\n\n\t_keyToBounds: function (key) {\n\t\treturn this._tileCoordsToBounds(this._keyToTileCoords(key));\n\t},\n\n\t_tileCoordsToNwSe: function (coords) {\n\t\tvar map = this._map,\n\t\t    tileSize = this.getTileSize(),\n\t\t    nwPoint = coords.scaleBy(tileSize),\n\t\t    sePoint = nwPoint.add(tileSize),\n\t\t    nw = map.unproject(nwPoint, coords.z),\n\t\t    se = map.unproject(sePoint, coords.z);\n\t\treturn [nw, se];\n\t},\n\n\t// converts tile coordinates to its geographical bounds\n\t_tileCoordsToBounds: function (coords) {\n\t\tvar bp = this._tileCoordsToNwSe(coords),\n\t\t    bounds = new LatLngBounds(bp[0], bp[1]);\n\n\t\tif (!this.options.noWrap) {\n\t\t\tbounds = this._map.wrapLatLngBounds(bounds);\n\t\t}\n\t\treturn bounds;\n\t},\n\t// converts tile coordinates to key for the tile cache\n\t_tileCoordsToKey: function (coords) {\n\t\treturn coords.x + ':' + coords.y + ':' + coords.z;\n\t},\n\n\t// converts tile cache key to coordinates\n\t_keyToTileCoords: function (key) {\n\t\tvar k = key.split(':'),\n\t\t    coords = new Point(+k[0], +k[1]);\n\t\tcoords.z = +k[2];\n\t\treturn coords;\n\t},\n\n\t_removeTile: function (key) {\n\t\tvar tile = this._tiles[key];\n\t\tif (!tile) { return; }\n\n\t\tDomUtil.remove(tile.el);\n\n\t\tdelete this._tiles[key];\n\n\t\t// @event tileunload: TileEvent\n\t\t// Fired when a tile is removed (e.g. when a tile goes off the screen).\n\t\tthis.fire('tileunload', {\n\t\t\ttile: tile.el,\n\t\t\tcoords: this._keyToTileCoords(key)\n\t\t});\n\t},\n\n\t_initTile: function (tile) {\n\t\tDomUtil.addClass(tile, 'leaflet-tile');\n\n\t\tvar tileSize = this.getTileSize();\n\t\ttile.style.width = tileSize.x + 'px';\n\t\ttile.style.height = tileSize.y + 'px';\n\n\t\ttile.onselectstart = Util.falseFn;\n\t\ttile.onmousemove = Util.falseFn;\n\n\t\t// update opacity on tiles in IE7-8 because of filter inheritance problems\n\t\tif (Browser.ielt9 && this.options.opacity < 1) {\n\t\t\tDomUtil.setOpacity(tile, this.options.opacity);\n\t\t}\n\t},\n\n\t_addTile: function (coords, container) {\n\t\tvar tilePos = this._getTilePos(coords),\n\t\t    key = this._tileCoordsToKey(coords);\n\n\t\tvar tile = this.createTile(this._wrapCoords(coords), Util.bind(this._tileReady, this, coords));\n\n\t\tthis._initTile(tile);\n\n\t\t// if createTile is defined with a second argument (\"done\" callback),\n\t\t// we know that tile is async and will be ready later; otherwise\n\t\tif (this.createTile.length < 2) {\n\t\t\t// mark tile as ready, but delay one frame for opacity animation to happen\n\t\t\tUtil.requestAnimFrame(Util.bind(this._tileReady, this, coords, null, tile));\n\t\t}\n\n\t\tDomUtil.setPosition(tile, tilePos);\n\n\t\t// save tile in cache\n\t\tthis._tiles[key] = {\n\t\t\tel: tile,\n\t\t\tcoords: coords,\n\t\t\tcurrent: true\n\t\t};\n\n\t\tcontainer.appendChild(tile);\n\t\t// @event tileloadstart: TileEvent\n\t\t// Fired when a tile is requested and starts loading.\n\t\tthis.fire('tileloadstart', {\n\t\t\ttile: tile,\n\t\t\tcoords: coords\n\t\t});\n\t},\n\n\t_tileReady: function (coords, err, tile) {\n\t\tif (err) {\n\t\t\t// @event tileerror: TileErrorEvent\n\t\t\t// Fired when there is an error loading a tile.\n\t\t\tthis.fire('tileerror', {\n\t\t\t\terror: err,\n\t\t\t\ttile: tile,\n\t\t\t\tcoords: coords\n\t\t\t});\n\t\t}\n\n\t\tvar key = this._tileCoordsToKey(coords);\n\n\t\ttile = this._tiles[key];\n\t\tif (!tile) { return; }\n\n\t\ttile.loaded = +new Date();\n\t\tif (this._map._fadeAnimated) {\n\t\t\tDomUtil.setOpacity(tile.el, 0);\n\t\t\tUtil.cancelAnimFrame(this._fadeFrame);\n\t\t\tthis._fadeFrame = Util.requestAnimFrame(this._updateOpacity, this);\n\t\t} else {\n\t\t\ttile.active = true;\n\t\t\tthis._pruneTiles();\n\t\t}\n\n\t\tif (!err) {\n\t\t\tDomUtil.addClass(tile.el, 'leaflet-tile-loaded');\n\n\t\t\t// @event tileload: TileEvent\n\t\t\t// Fired when a tile loads.\n\t\t\tthis.fire('tileload', {\n\t\t\t\ttile: tile.el,\n\t\t\t\tcoords: coords\n\t\t\t});\n\t\t}\n\n\t\tif (this._noTilesToLoad()) {\n\t\t\tthis._loading = false;\n\t\t\t// @event load: Event\n\t\t\t// Fired when the grid layer loaded all visible tiles.\n\t\t\tthis.fire('load');\n\n\t\t\tif (Browser.ielt9 || !this._map._fadeAnimated) {\n\t\t\t\tUtil.requestAnimFrame(this._pruneTiles, this);\n\t\t\t} else {\n\t\t\t\t// Wait a bit more than 0.2 secs (the duration of the tile fade-in)\n\t\t\t\t// to trigger a pruning.\n\t\t\t\tsetTimeout(Util.bind(this._pruneTiles, this), 250);\n\t\t\t}\n\t\t}\n\t},\n\n\t_getTilePos: function (coords) {\n\t\treturn coords.scaleBy(this.getTileSize()).subtract(this._level.origin);\n\t},\n\n\t_wrapCoords: function (coords) {\n\t\tvar newCoords = new Point(\n\t\t\tthis._wrapX ? Util.wrapNum(coords.x, this._wrapX) : coords.x,\n\t\t\tthis._wrapY ? Util.wrapNum(coords.y, this._wrapY) : coords.y);\n\t\tnewCoords.z = coords.z;\n\t\treturn newCoords;\n\t},\n\n\t_pxBoundsToTileRange: function (bounds) {\n\t\tvar tileSize = this.getTileSize();\n\t\treturn new Bounds(\n\t\t\tbounds.min.unscaleBy(tileSize).floor(),\n\t\t\tbounds.max.unscaleBy(tileSize).ceil().subtract([1, 1]));\n\t},\n\n\t_noTilesToLoad: function () {\n\t\tfor (var key in this._tiles) {\n\t\t\tif (!this._tiles[key].loaded) { return false; }\n\t\t}\n\t\treturn true;\n\t}\n});\n\n// @factory L.gridLayer(options?: GridLayer options)\n// Creates a new instance of GridLayer with the supplied options.\nexport function gridLayer(options) {\n\treturn new GridLayer(options);\n}\n", "import {GridLayer} from './GridLayer';\r\nimport Browser from '../../core/Browser';\r\nimport * as Util from '../../core/Util';\r\nimport * as DomEvent from '../../dom/DomEvent';\r\nimport * as DomUtil from '../../dom/DomUtil';\r\n\r\n\r\n/*\r\n * @class TileLayer\r\n * @inherits GridLayer\r\n * @aka L.TileLayer\r\n * Used to load and display tile layers on the map. Note that most tile servers require attribution, which you can set under `Layer`. Extends `GridLayer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png?{foo}', {foo: 'bar', attribution: '&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors'}).addTo(map);\n * ```\r\n *\r\n * @section URL template\r\n * @example\r\n *\r\n * A string of the following form:\r\n *\r\n * ```\r\n * 'https://{s}.somedomain.com/blabla/{z}/{x}/{y}{r}.png'\r\n * ```\r\n *\r\n * `{s}` means one of the available subdomains (used sequentially to help with browser parallel requests per domain limitation; subdomain values are specified in options; `a`, `b` or `c` by default, can be omitted), `{z}` — zoom level, `{x}` and `{y}` — tile coordinates. `{r}` can be used to add \"&commat;2x\" to the URL to load retina tiles.\r\n *\r\n * You can use custom keys in the template, which will be [evaluated](#util-template) from TileLayer options, like this:\r\n *\r\n * ```\r\n * L.tileLayer('https://{s}.somedomain.com/{foo}/{z}/{x}/{y}.png', {foo: 'bar'});\r\n * ```\r\n */\r\n\r\n\r\nexport var TileLayer = GridLayer.extend({\r\n\r\n\t// @section\r\n\t// @aka TileLayer options\r\n\toptions: {\r\n\t\t// @option minZoom: Number = 0\r\n\t\t// The minimum zoom level down to which this layer will be displayed (inclusive).\r\n\t\tminZoom: 0,\r\n\r\n\t\t// @option maxZoom: Number = 18\r\n\t\t// The maximum zoom level up to which this layer will be displayed (inclusive).\r\n\t\tmaxZoom: 18,\r\n\r\n\t\t// @option subdomains: String|String[] = 'abc'\r\n\t\t// Subdomains of the tile service. Can be passed in the form of one string (where each letter is a subdomain name) or an array of strings.\r\n\t\tsubdomains: 'abc',\r\n\r\n\t\t// @option errorTileUrl: String = ''\r\n\t\t// URL to the tile image to show in place of the tile that failed to load.\r\n\t\terrorTileUrl: '',\r\n\r\n\t\t// @option zoomOffset: Number = 0\r\n\t\t// The zoom number used in tile URLs will be offset with this value.\r\n\t\tzoomOffset: 0,\r\n\r\n\t\t// @option tms: Boolean = false\r\n\t\t// If `true`, inverses Y axis numbering for tiles (turn this on for [TMS](https://en.wikipedia.org/wiki/Tile_Map_Service) services).\r\n\t\ttms: false,\r\n\r\n\t\t// @option zoomReverse: Boolean = false\r\n\t\t// If set to true, the zoom number used in tile URLs will be reversed (`maxZoom - zoom` instead of `zoom`)\r\n\t\tzoomReverse: false,\r\n\r\n\t\t// @option detectRetina: Boolean = false\r\n\t\t// If `true` and user is on a retina display, it will request four tiles of half the specified size and a bigger zoom level in place of one to utilize the high resolution.\r\n\t\tdetectRetina: false,\r\n\r\n\t\t// @option crossOrigin: Boolean|String = false\r\n\t\t// Whether the crossOrigin attribute will be added to the tiles.\r\n\t\t// If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data.\r\n\t\t// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\r\n\t\tcrossOrigin: false,\r\n\r\n\t\t// @option referrerPolicy: Boolean|String = false\r\n\t\t// Whether the referrerPolicy attribute will be added to the tiles.\r\n\t\t// If a String is provided, all tiles will have their referrerPolicy attribute set to the String provided.\r\n\t\t// This may be needed if your map's rendering context has a strict default but your tile provider expects a valid referrer\r\n\t\t// (e.g. to validate an API token).\r\n\t\t// Refer to [HTMLImageElement.referrerPolicy](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/referrerPolicy) for valid String values.\r\n\t\treferrerPolicy: false\r\n\t},\r\n\r\n\tinitialize: function (url, options) {\r\n\r\n\t\tthis._url = url;\r\n\r\n\t\toptions = Util.setOptions(this, options);\r\n\r\n\t\t// detecting retina displays, adjusting tileSize and zoom levels\r\n\t\tif (options.detectRetina && Browser.retina && options.maxZoom > 0) {\r\n\r\n\t\t\toptions.tileSize = Math.floor(options.tileSize / 2);\r\n\r\n\t\t\tif (!options.zoomReverse) {\r\n\t\t\t\toptions.zoomOffset++;\r\n\t\t\t\toptions.maxZoom = Math.max(options.minZoom, options.maxZoom - 1);\r\n\t\t\t} else {\r\n\t\t\t\toptions.zoomOffset--;\r\n\t\t\t\toptions.minZoom = Math.min(options.maxZoom, options.minZoom + 1);\r\n\t\t\t}\r\n\r\n\t\t\toptions.minZoom = Math.max(0, options.minZoom);\r\n\t\t} else if (!options.zoomReverse) {\r\n\t\t\t// make sure maxZoom is gte minZoom\r\n\t\t\toptions.maxZoom = Math.max(options.minZoom, options.maxZoom);\r\n\t\t} else {\r\n\t\t\t// make sure minZoom is lte maxZoom\r\n\t\t\toptions.minZoom = Math.min(options.maxZoom, options.minZoom);\r\n\t\t}\r\n\r\n\t\tif (typeof options.subdomains === 'string') {\r\n\t\t\toptions.subdomains = options.subdomains.split('');\r\n\t\t}\r\n\r\n\t\tthis.on('tileunload', this._onTileRemove);\r\n\t},\r\n\r\n\t// @method setUrl(url: String, noRedraw?: Boolean): this\r\n\t// Updates the layer's URL template and redraws it (unless `noRedraw` is set to `true`).\r\n\t// If the URL does not change, the layer will not be redrawn unless\r\n\t// the noRedraw parameter is set to false.\r\n\tsetUrl: function (url, noRedraw) {\r\n\t\tif (this._url === url && noRedraw === undefined) {\r\n\t\t\tnoRedraw = true;\r\n\t\t}\r\n\r\n\t\tthis._url = url;\r\n\r\n\t\tif (!noRedraw) {\r\n\t\t\tthis.redraw();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method createTile(coords: Object, done?: Function): HTMLElement\r\n\t// Called only internally, overrides GridLayer's [`createTile()`](#gridlayer-createtile)\r\n\t// to return an `<img>` HTML element with the appropriate image URL given `coords`. The `done`\r\n\t// callback is called when the tile has been loaded.\r\n\tcreateTile: function (coords, done) {\r\n\t\tvar tile = document.createElement('img');\r\n\r\n\t\tDomEvent.on(tile, 'load', Util.bind(this._tileOnLoad, this, done, tile));\r\n\t\tDomEvent.on(tile, 'error', Util.bind(this._tileOnError, this, done, tile));\r\n\r\n\t\tif (this.options.crossOrigin || this.options.crossOrigin === '') {\r\n\t\t\ttile.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\r\n\t\t}\r\n\r\n\t\t// for this new option we follow the documented behavior\r\n\t\t// more closely by only setting the property when string\r\n\t\tif (typeof this.options.referrerPolicy === 'string') {\r\n\t\t\ttile.referrerPolicy = this.options.referrerPolicy;\r\n\t\t}\r\n\r\n\t\t// The alt attribute is set to the empty string,\r\n\t\t// allowing screen readers to ignore the decorative image tiles.\r\n\t\t// https://www.w3.org/WAI/tutorials/images/decorative/\r\n\t\t// https://www.w3.org/TR/html-aria/#el-img-empty-alt\r\n\t\ttile.alt = '';\r\n\r\n\t\ttile.src = this.getTileUrl(coords);\r\n\r\n\t\treturn tile;\r\n\t},\r\n\r\n\t// @section Extension methods\r\n\t// @uninheritable\r\n\t// Layers extending `TileLayer` might reimplement the following method.\r\n\t// @method getTileUrl(coords: Object): String\r\n\t// Called only internally, returns the URL for a tile given its coordinates.\r\n\t// Classes extending `TileLayer` can override this function to provide custom tile URL naming schemes.\r\n\tgetTileUrl: function (coords) {\r\n\t\tvar data = {\r\n\t\t\tr: Browser.retina ? '@2x' : '',\r\n\t\t\ts: this._getSubdomain(coords),\r\n\t\t\tx: coords.x,\r\n\t\t\ty: coords.y,\r\n\t\t\tz: this._getZoomForUrl()\r\n\t\t};\r\n\t\tif (this._map && !this._map.options.crs.infinite) {\r\n\t\t\tvar invertedY = this._globalTileRange.max.y - coords.y;\r\n\t\t\tif (this.options.tms) {\r\n\t\t\t\tdata['y'] = invertedY;\r\n\t\t\t}\r\n\t\t\tdata['-y'] = invertedY;\r\n\t\t}\r\n\r\n\t\treturn Util.template(this._url, Util.extend(data, this.options));\r\n\t},\r\n\r\n\t_tileOnLoad: function (done, tile) {\r\n\t\t// For https://github.com/Leaflet/Leaflet/issues/3332\r\n\t\tif (Browser.ielt9) {\r\n\t\t\tsetTimeout(Util.bind(done, this, null, tile), 0);\r\n\t\t} else {\r\n\t\t\tdone(null, tile);\r\n\t\t}\r\n\t},\r\n\r\n\t_tileOnError: function (done, tile, e) {\r\n\t\tvar errorUrl = this.options.errorTileUrl;\r\n\t\tif (errorUrl && tile.getAttribute('src') !== errorUrl) {\r\n\t\t\ttile.src = errorUrl;\r\n\t\t}\r\n\t\tdone(e, tile);\r\n\t},\r\n\r\n\t_onTileRemove: function (e) {\r\n\t\te.tile.onload = null;\r\n\t},\r\n\r\n\t_getZoomForUrl: function () {\r\n\t\tvar zoom = this._tileZoom,\r\n\t\tmaxZoom = this.options.maxZoom,\r\n\t\tzoomReverse = this.options.zoomReverse,\r\n\t\tzoomOffset = this.options.zoomOffset;\r\n\r\n\t\tif (zoomReverse) {\r\n\t\t\tzoom = maxZoom - zoom;\r\n\t\t}\r\n\r\n\t\treturn zoom + zoomOffset;\r\n\t},\r\n\r\n\t_getSubdomain: function (tilePoint) {\r\n\t\tvar index = Math.abs(tilePoint.x + tilePoint.y) % this.options.subdomains.length;\r\n\t\treturn this.options.subdomains[index];\r\n\t},\r\n\r\n\t// stops loading all tiles in the background layer\r\n\t_abortLoading: function () {\r\n\t\tvar i, tile;\r\n\t\tfor (i in this._tiles) {\r\n\t\t\tif (this._tiles[i].coords.z !== this._tileZoom) {\r\n\t\t\t\ttile = this._tiles[i].el;\r\n\r\n\t\t\t\ttile.onload = Util.falseFn;\r\n\t\t\t\ttile.onerror = Util.falseFn;\r\n\r\n\t\t\t\tif (!tile.complete) {\r\n\t\t\t\t\ttile.src = Util.emptyImageUrl;\r\n\t\t\t\t\tvar coords = this._tiles[i].coords;\r\n\t\t\t\t\tDomUtil.remove(tile);\r\n\t\t\t\t\tdelete this._tiles[i];\r\n\t\t\t\t\t// @event tileabort: TileEvent\r\n\t\t\t\t\t// Fired when a tile was loading but is now not wanted.\r\n\t\t\t\t\tthis.fire('tileabort', {\r\n\t\t\t\t\t\ttile: tile,\r\n\t\t\t\t\t\tcoords: coords\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_removeTile: function (key) {\r\n\t\tvar tile = this._tiles[key];\r\n\t\tif (!tile) { return; }\r\n\r\n\t\t// Cancels any pending http requests associated with the tile\r\n\t\ttile.el.setAttribute('src', Util.emptyImageUrl);\r\n\r\n\t\treturn GridLayer.prototype._removeTile.call(this, key);\r\n\t},\r\n\r\n\t_tileReady: function (coords, err, tile) {\r\n\t\tif (!this._map || (tile && tile.getAttribute('src') === Util.emptyImageUrl)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\treturn GridLayer.prototype._tileReady.call(this, coords, err, tile);\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.tilelayer(urlTemplate: String, options?: TileLayer options)\r\n// Instantiates a tile layer object given a `URL template` and optionally an options object.\r\n\r\nexport function tileLayer(url, options) {\r\n\treturn new TileLayer(url, options);\r\n}\r\n", "import {TileLayer} from './TileLayer';\r\nimport {extend, setOptions, getParamString} from '../../core/Util';\r\nimport Browser from '../../core/Browser';\r\nimport {EPSG4326} from '../../geo/crs/CRS.EPSG4326';\r\nimport {toBounds} from '../../geometry/Bounds';\r\n\r\n/*\r\n * @class TileLayer.WMS\r\n * @inherits TileLayer\r\n * @aka L.TileLayer.WMS\r\n * Used to display [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services as tile layers on the map. Extends `TileLayer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var nexrad = L.tileLayer.wms(\"http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi\", {\r\n * \tlayers: 'nexrad-n0r-900913',\r\n * \tformat: 'image/png',\r\n * \ttransparent: true,\r\n * \tattribution: \"Weather data © 2012 IEM Nexrad\"\r\n * });\r\n * ```\r\n */\r\n\r\nexport var TileLayerWMS = TileLayer.extend({\r\n\r\n\t// @section\r\n\t// @aka TileLayer.WMS options\r\n\t// If any custom options not documented here are used, they will be sent to the\r\n\t// WMS server as extra parameters in each request URL. This can be useful for\r\n\t// [non-standard vendor WMS parameters](https://docs.geoserver.org/stable/en/user/services/wms/vendor.html).\r\n\tdefaultWmsParams: {\r\n\t\tservice: 'WMS',\r\n\t\trequest: 'GetMap',\r\n\r\n\t\t// @option layers: String = ''\r\n\t\t// **(required)** Comma-separated list of WMS layers to show.\r\n\t\tlayers: '',\r\n\r\n\t\t// @option styles: String = ''\r\n\t\t// Comma-separated list of WMS styles.\r\n\t\tstyles: '',\r\n\r\n\t\t// @option format: String = 'image/jpeg'\r\n\t\t// WMS image format (use `'image/png'` for layers with transparency).\r\n\t\tformat: 'image/jpeg',\r\n\r\n\t\t// @option transparent: Boolean = false\r\n\t\t// If `true`, the WMS service will return images with transparency.\r\n\t\ttransparent: false,\r\n\r\n\t\t// @option version: String = '1.1.1'\r\n\t\t// Version of the WMS service to use\r\n\t\tversion: '1.1.1'\r\n\t},\r\n\r\n\toptions: {\r\n\t\t// @option crs: CRS = null\r\n\t\t// Coordinate Reference System to use for the WMS requests, defaults to\r\n\t\t// map CRS. Don't change this if you're not sure what it means.\r\n\t\tcrs: null,\r\n\r\n\t\t// @option uppercase: Boolean = false\r\n\t\t// If `true`, WMS request parameter keys will be uppercase.\r\n\t\tuppercase: false\r\n\t},\r\n\r\n\tinitialize: function (url, options) {\r\n\r\n\t\tthis._url = url;\r\n\r\n\t\tvar wmsParams = extend({}, this.defaultWmsParams);\r\n\r\n\t\t// all keys that are not TileLayer options go to WMS params\r\n\t\tfor (var i in options) {\r\n\t\t\tif (!(i in this.options)) {\r\n\t\t\t\twmsParams[i] = options[i];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\toptions = setOptions(this, options);\r\n\r\n\t\tvar realRetina = options.detectRetina && Browser.retina ? 2 : 1;\r\n\t\tvar tileSize = this.getTileSize();\r\n\t\twmsParams.width = tileSize.x * realRetina;\r\n\t\twmsParams.height = tileSize.y * realRetina;\r\n\r\n\t\tthis.wmsParams = wmsParams;\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\r\n\t\tthis._crs = this.options.crs || map.options.crs;\r\n\t\tthis._wmsVersion = parseFloat(this.wmsParams.version);\r\n\r\n\t\tvar projectionKey = this._wmsVersion >= 1.3 ? 'crs' : 'srs';\r\n\t\tthis.wmsParams[projectionKey] = this._crs.code;\r\n\r\n\t\tTileLayer.prototype.onAdd.call(this, map);\r\n\t},\r\n\r\n\tgetTileUrl: function (coords) {\r\n\r\n\t\tvar tileBounds = this._tileCoordsToNwSe(coords),\r\n\t\t    crs = this._crs,\r\n\t\t    bounds = toBounds(crs.project(tileBounds[0]), crs.project(tileBounds[1])),\r\n\t\t    min = bounds.min,\r\n\t\t    max = bounds.max,\r\n\t\t    bbox = (this._wmsVersion >= 1.3 && this._crs === EPSG4326 ?\r\n\t\t    [min.y, min.x, max.y, max.x] :\r\n\t\t    [min.x, min.y, max.x, max.y]).join(','),\r\n\t\t    url = TileLayer.prototype.getTileUrl.call(this, coords);\r\n\t\treturn url +\r\n\t\t\tgetParamString(this.wmsParams, url, this.options.uppercase) +\r\n\t\t\t(this.options.uppercase ? '&BBOX=' : '&bbox=') + bbox;\r\n\t},\r\n\r\n\t// @method setParams(params: Object, noRedraw?: Boolean): this\r\n\t// Merges an object with the new parameters and re-requests tiles on the current screen (unless `noRedraw` was set to true).\r\n\tsetParams: function (params, noRedraw) {\r\n\r\n\t\textend(this.wmsParams, params);\r\n\r\n\t\tif (!noRedraw) {\r\n\t\t\tthis.redraw();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.tileLayer.wms(baseUrl: String, options: TileLayer.WMS options)\r\n// Instantiates a WMS tile layer object given a base URL of the WMS service and a WMS parameters/options object.\r\nexport function tileLayerWMS(url, options) {\r\n\treturn new TileLayerWMS(url, options);\r\n}\r\n", "export {GridLayer, gridLayer} from './GridLayer';\nimport {TileLayer, tileLayer} from './TileLayer';\nimport {TileLayerWMS, tileLayerWMS} from './TileLayer.WMS';\nTileLayer.WMS = TileLayerWMS;\ntileLayer.wms = tileLayerWMS;\nexport {TileLayer, tileLayer};\n", "import {Layer} from '../Layer';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as Util from '../../core/Util';\nimport Browser from '../../core/Browser';\nimport {Bounds} from '../../geometry/Bounds';\n\n\n\n/*\n * @class Renderer\n * @inherits Layer\n * @aka L.Renderer\n *\n * Base class for vector renderer implementations (`SVG`, `Canvas`). Handles the\n * DOM container of the renderer, its bounds, and its zoom animation.\n *\n * A `Renderer` works as an implicit layer group for all `Path`s - the renderer\n * itself can be added or removed to the map. All paths use a renderer, which can\n * be implicit (the map will decide the type of renderer and use it automatically)\n * or explicit (using the [`renderer`](#path-renderer) option of the path).\n *\n * Do not use this class directly, use `SVG` and `Canvas` instead.\n *\n * @event update: Event\n * Fired when the renderer updates its bounds, center and zoom, for example when\n * its map has moved\n */\n\nexport var Renderer = Layer.extend({\n\n\t// @section\n\t// @aka Renderer options\n\toptions: {\n\t\t// @option padding: Number = 0.1\n\t\t// How much to extend the clip area around the map view (relative to its size)\n\t\t// e.g. 0.1 would be 10% of map view in each direction\n\t\tpadding: 0.1\n\t},\n\n\tinitialize: function (options) {\n\t\tUtil.setOptions(this, options);\n\t\tUtil.stamp(this);\n\t\tthis._layers = this._layers || {};\n\t},\n\n\tonAdd: function () {\n\t\tif (!this._container) {\n\t\t\tthis._initContainer(); // defined by renderer implementations\n\n\t\t\t// always keep transform-origin as 0 0\n\t\t\tDomUtil.addClass(this._container, 'leaflet-zoom-animated');\n\t\t}\n\n\t\tthis.getPane().appendChild(this._container);\n\t\tthis._update();\n\t\tthis.on('update', this._updatePaths, this);\n\t},\n\n\tonRemove: function () {\n\t\tthis.off('update', this._updatePaths, this);\n\t\tthis._destroyContainer();\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = {\n\t\t\tviewreset: this._reset,\n\t\t\tzoom: this._onZoom,\n\t\t\tmoveend: this._update,\n\t\t\tzoomend: this._onZoomEnd\n\t\t};\n\t\tif (this._zoomAnimated) {\n\t\t\tevents.zoomanim = this._onAnimZoom;\n\t\t}\n\t\treturn events;\n\t},\n\n\t_onAnimZoom: function (ev) {\n\t\tthis._updateTransform(ev.center, ev.zoom);\n\t},\n\n\t_onZoom: function () {\n\t\tthis._updateTransform(this._map.getCenter(), this._map.getZoom());\n\t},\n\n\t_updateTransform: function (center, zoom) {\n\t\tvar scale = this._map.getZoomScale(zoom, this._zoom),\n\t\t    viewHalf = this._map.getSize().multiplyBy(0.5 + this.options.padding),\n\t\t    currentCenterPoint = this._map.project(this._center, zoom),\n\n\t\t    topLeftOffset = viewHalf.multiplyBy(-scale).add(currentCenterPoint)\n\t\t\t\t  .subtract(this._map._getNewPixelOrigin(center, zoom));\n\n\t\tif (Browser.any3d) {\n\t\t\tDomUtil.setTransform(this._container, topLeftOffset, scale);\n\t\t} else {\n\t\t\tDomUtil.setPosition(this._container, topLeftOffset);\n\t\t}\n\t},\n\n\t_reset: function () {\n\t\tthis._update();\n\t\tthis._updateTransform(this._center, this._zoom);\n\n\t\tfor (var id in this._layers) {\n\t\t\tthis._layers[id]._reset();\n\t\t}\n\t},\n\n\t_onZoomEnd: function () {\n\t\tfor (var id in this._layers) {\n\t\t\tthis._layers[id]._project();\n\t\t}\n\t},\n\n\t_updatePaths: function () {\n\t\tfor (var id in this._layers) {\n\t\t\tthis._layers[id]._update();\n\t\t}\n\t},\n\n\t_update: function () {\n\t\t// Update pixel bounds of renderer container (for positioning/sizing/clipping later)\n\t\t// Subclasses are responsible of firing the 'update' event.\n\t\tvar p = this.options.padding,\n\t\t    size = this._map.getSize(),\n\t\t    min = this._map.containerPointToLayerPoint(size.multiplyBy(-p)).round();\n\n\t\tthis._bounds = new Bounds(min, min.add(size.multiplyBy(1 + p * 2)).round());\n\n\t\tthis._center = this._map.getCenter();\n\t\tthis._zoom = this._map.getZoom();\n\t}\n});\n", "import {Renderer} from './Renderer';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as DomEvent from '../../dom/DomEvent';\nimport Browser from '../../core/Browser';\nimport * as Util from '../../core/Util';\nimport {Bounds} from '../../geometry/Bounds';\n\n/*\n * @class Canvas\n * @inherits Renderer\n * @aka L.Canvas\n *\n * Allows vector layers to be displayed with [`<canvas>`](https://developer.mozilla.org/docs/Web/API/Canvas_API).\n * Inherits `Renderer`.\n *\n * Due to [technical limitations](https://caniuse.com/canvas), Canvas is not\n * available in all web browsers, notably IE8, and overlapping geometries might\n * not display properly in some edge cases.\n *\n * @example\n *\n * Use Canvas by default for all paths in the map:\n *\n * ```js\n * var map = L.map('map', {\n * \trenderer: L.canvas()\n * });\n * ```\n *\n * Use a Canvas renderer with extra padding for specific vector geometries:\n *\n * ```js\n * var map = L.map('map');\n * var myRenderer = L.canvas({ padding: 0.5 });\n * var line = L.polyline( coordinates, { renderer: myRenderer } );\n * var circle = L.circle( center, { renderer: myRenderer } );\n * ```\n */\n\nexport var Canvas = Renderer.extend({\n\n\t// @section\n\t// @aka Canvas options\n\toptions: {\n\t\t// @option tolerance: Number = 0\n\t\t// How much to extend the click tolerance around a path/object on the map.\n\t\ttolerance: 0\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = Renderer.prototype.getEvents.call(this);\n\t\tevents.viewprereset = this._onViewPreReset;\n\t\treturn events;\n\t},\n\n\t_onViewPreReset: function () {\n\t\t// Set a flag so that a viewprereset+moveend+viewreset only updates&redraws once\n\t\tthis._postponeUpdatePaths = true;\n\t},\n\n\tonAdd: function () {\n\t\tRenderer.prototype.onAdd.call(this);\n\n\t\t// Redraw vectors since canvas is cleared upon removal,\n\t\t// in case of removing the renderer itself from the map.\n\t\tthis._draw();\n\t},\n\n\t_initContainer: function () {\n\t\tvar container = this._container = document.createElement('canvas');\n\n\t\tDomEvent.on(container, 'mousemove', this._onMouseMove, this);\n\t\tDomEvent.on(container, 'click dblclick mousedown mouseup contextmenu', this._onClick, this);\n\t\tDomEvent.on(container, 'mouseout', this._handleMouseOut, this);\n\t\tcontainer['_leaflet_disable_events'] = true;\n\n\t\tthis._ctx = container.getContext('2d');\n\t},\n\n\t_destroyContainer: function () {\n\t\tUtil.cancelAnimFrame(this._redrawRequest);\n\t\tdelete this._ctx;\n\t\tDomUtil.remove(this._container);\n\t\tDomEvent.off(this._container);\n\t\tdelete this._container;\n\t},\n\n\t_updatePaths: function () {\n\t\tif (this._postponeUpdatePaths) { return; }\n\n\t\tvar layer;\n\t\tthis._redrawBounds = null;\n\t\tfor (var id in this._layers) {\n\t\t\tlayer = this._layers[id];\n\t\t\tlayer._update();\n\t\t}\n\t\tthis._redraw();\n\t},\n\n\t_update: function () {\n\t\tif (this._map._animatingZoom && this._bounds) { return; }\n\n\t\tRenderer.prototype._update.call(this);\n\n\t\tvar b = this._bounds,\n\t\t    container = this._container,\n\t\t    size = b.getSize(),\n\t\t    m = Browser.retina ? 2 : 1;\n\n\t\tDomUtil.setPosition(container, b.min);\n\n\t\t// set canvas size (also clearing it); use double size on retina\n\t\tcontainer.width = m * size.x;\n\t\tcontainer.height = m * size.y;\n\t\tcontainer.style.width = size.x + 'px';\n\t\tcontainer.style.height = size.y + 'px';\n\n\t\tif (Browser.retina) {\n\t\t\tthis._ctx.scale(2, 2);\n\t\t}\n\n\t\t// translate so we use the same path coordinates after canvas element moves\n\t\tthis._ctx.translate(-b.min.x, -b.min.y);\n\n\t\t// Tell paths to redraw themselves\n\t\tthis.fire('update');\n\t},\n\n\t_reset: function () {\n\t\tRenderer.prototype._reset.call(this);\n\n\t\tif (this._postponeUpdatePaths) {\n\t\t\tthis._postponeUpdatePaths = false;\n\t\t\tthis._updatePaths();\n\t\t}\n\t},\n\n\t_initPath: function (layer) {\n\t\tthis._updateDashArray(layer);\n\t\tthis._layers[Util.stamp(layer)] = layer;\n\n\t\tvar order = layer._order = {\n\t\t\tlayer: layer,\n\t\t\tprev: this._drawLast,\n\t\t\tnext: null\n\t\t};\n\t\tif (this._drawLast) { this._drawLast.next = order; }\n\t\tthis._drawLast = order;\n\t\tthis._drawFirst = this._drawFirst || this._drawLast;\n\t},\n\n\t_addPath: function (layer) {\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_removePath: function (layer) {\n\t\tvar order = layer._order;\n\t\tvar next = order.next;\n\t\tvar prev = order.prev;\n\n\t\tif (next) {\n\t\t\tnext.prev = prev;\n\t\t} else {\n\t\t\tthis._drawLast = prev;\n\t\t}\n\t\tif (prev) {\n\t\t\tprev.next = next;\n\t\t} else {\n\t\t\tthis._drawFirst = next;\n\t\t}\n\n\t\tdelete layer._order;\n\n\t\tdelete this._layers[Util.stamp(layer)];\n\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_updatePath: function (layer) {\n\t\t// Redraw the union of the layer's old pixel\n\t\t// bounds and the new pixel bounds.\n\t\tthis._extendRedrawBounds(layer);\n\t\tlayer._project();\n\t\tlayer._update();\n\t\t// The redraw will extend the redraw bounds\n\t\t// with the new pixel bounds.\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_updateStyle: function (layer) {\n\t\tthis._updateDashArray(layer);\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_updateDashArray: function (layer) {\n\t\tif (typeof layer.options.dashArray === 'string') {\n\t\t\tvar parts = layer.options.dashArray.split(/[, ]+/),\n\t\t\t    dashArray = [],\n\t\t\t    dashValue,\n\t\t\t    i;\n\t\t\tfor (i = 0; i < parts.length; i++) {\n\t\t\t\tdashValue = Number(parts[i]);\n\t\t\t\t// Ignore dash array containing invalid lengths\n\t\t\t\tif (isNaN(dashValue)) { return; }\n\t\t\t\tdashArray.push(dashValue);\n\t\t\t}\n\t\t\tlayer.options._dashArray = dashArray;\n\t\t} else {\n\t\t\tlayer.options._dashArray = layer.options.dashArray;\n\t\t}\n\t},\n\n\t_requestRedraw: function (layer) {\n\t\tif (!this._map) { return; }\n\n\t\tthis._extendRedrawBounds(layer);\n\t\tthis._redrawRequest = this._redrawRequest || Util.requestAnimFrame(this._redraw, this);\n\t},\n\n\t_extendRedrawBounds: function (layer) {\n\t\tif (layer._pxBounds) {\n\t\t\tvar padding = (layer.options.weight || 0) + 1;\n\t\t\tthis._redrawBounds = this._redrawBounds || new Bounds();\n\t\t\tthis._redrawBounds.extend(layer._pxBounds.min.subtract([padding, padding]));\n\t\t\tthis._redrawBounds.extend(layer._pxBounds.max.add([padding, padding]));\n\t\t}\n\t},\n\n\t_redraw: function () {\n\t\tthis._redrawRequest = null;\n\n\t\tif (this._redrawBounds) {\n\t\t\tthis._redrawBounds.min._floor();\n\t\t\tthis._redrawBounds.max._ceil();\n\t\t}\n\n\t\tthis._clear(); // clear layers in redraw bounds\n\t\tthis._draw(); // draw layers\n\n\t\tthis._redrawBounds = null;\n\t},\n\n\t_clear: function () {\n\t\tvar bounds = this._redrawBounds;\n\t\tif (bounds) {\n\t\t\tvar size = bounds.getSize();\n\t\t\tthis._ctx.clearRect(bounds.min.x, bounds.min.y, size.x, size.y);\n\t\t} else {\n\t\t\tthis._ctx.save();\n\t\t\tthis._ctx.setTransform(1, 0, 0, 1, 0, 0);\n\t\t\tthis._ctx.clearRect(0, 0, this._container.width, this._container.height);\n\t\t\tthis._ctx.restore();\n\t\t}\n\t},\n\n\t_draw: function () {\n\t\tvar layer, bounds = this._redrawBounds;\n\t\tthis._ctx.save();\n\t\tif (bounds) {\n\t\t\tvar size = bounds.getSize();\n\t\t\tthis._ctx.beginPath();\n\t\t\tthis._ctx.rect(bounds.min.x, bounds.min.y, size.x, size.y);\n\t\t\tthis._ctx.clip();\n\t\t}\n\n\t\tthis._drawing = true;\n\n\t\tfor (var order = this._drawFirst; order; order = order.next) {\n\t\t\tlayer = order.layer;\n\t\t\tif (!bounds || (layer._pxBounds && layer._pxBounds.intersects(bounds))) {\n\t\t\t\tlayer._updatePath();\n\t\t\t}\n\t\t}\n\n\t\tthis._drawing = false;\n\n\t\tthis._ctx.restore();  // Restore state before clipping.\n\t},\n\n\t_updatePoly: function (layer, closed) {\n\t\tif (!this._drawing) { return; }\n\n\t\tvar i, j, len2, p,\n\t\t    parts = layer._parts,\n\t\t    len = parts.length,\n\t\t    ctx = this._ctx;\n\n\t\tif (!len) { return; }\n\n\t\tctx.beginPath();\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tfor (j = 0, len2 = parts[i].length; j < len2; j++) {\n\t\t\t\tp = parts[i][j];\n\t\t\t\tctx[j ? 'lineTo' : 'moveTo'](p.x, p.y);\n\t\t\t}\n\t\t\tif (closed) {\n\t\t\t\tctx.closePath();\n\t\t\t}\n\t\t}\n\n\t\tthis._fillStroke(ctx, layer);\n\n\t\t// TODO optimization: 1 fill/stroke for all features with equal style instead of 1 for each feature\n\t},\n\n\t_updateCircle: function (layer) {\n\n\t\tif (!this._drawing || layer._empty()) { return; }\n\n\t\tvar p = layer._point,\n\t\t    ctx = this._ctx,\n\t\t    r = Math.max(Math.round(layer._radius), 1),\n\t\t    s = (Math.max(Math.round(layer._radiusY), 1) || r) / r;\n\n\t\tif (s !== 1) {\n\t\t\tctx.save();\n\t\t\tctx.scale(1, s);\n\t\t}\n\n\t\tctx.beginPath();\n\t\tctx.arc(p.x, p.y / s, r, 0, Math.PI * 2, false);\n\n\t\tif (s !== 1) {\n\t\t\tctx.restore();\n\t\t}\n\n\t\tthis._fillStroke(ctx, layer);\n\t},\n\n\t_fillStroke: function (ctx, layer) {\n\t\tvar options = layer.options;\n\n\t\tif (options.fill) {\n\t\t\tctx.globalAlpha = options.fillOpacity;\n\t\t\tctx.fillStyle = options.fillColor || options.color;\n\t\t\tctx.fill(options.fillRule || 'evenodd');\n\t\t}\n\n\t\tif (options.stroke && options.weight !== 0) {\n\t\t\tif (ctx.setLineDash) {\n\t\t\t\tctx.setLineDash(layer.options && layer.options._dashArray || []);\n\t\t\t}\n\t\t\tctx.globalAlpha = options.opacity;\n\t\t\tctx.lineWidth = options.weight;\n\t\t\tctx.strokeStyle = options.color;\n\t\t\tctx.lineCap = options.lineCap;\n\t\t\tctx.lineJoin = options.lineJoin;\n\t\t\tctx.stroke();\n\t\t}\n\t},\n\n\t// Canvas obviously doesn't have mouse events for individual drawn objects,\n\t// so we emulate that by calculating what's under the mouse on mousemove/click manually\n\n\t_onClick: function (e) {\n\t\tvar point = this._map.mouseEventToLayerPoint(e), layer, clickedLayer;\n\n\t\tfor (var order = this._drawFirst; order; order = order.next) {\n\t\t\tlayer = order.layer;\n\t\t\tif (layer.options.interactive && layer._containsPoint(point)) {\n\t\t\t\tif (!(e.type === 'click' || e.type === 'preclick') || !this._map._draggableMoved(layer)) {\n\t\t\t\t\tclickedLayer = layer;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis._fireEvent(clickedLayer ? [clickedLayer] : false, e);\n\t},\n\n\t_onMouseMove: function (e) {\n\t\tif (!this._map || this._map.dragging.moving() || this._map._animatingZoom) { return; }\n\n\t\tvar point = this._map.mouseEventToLayerPoint(e);\n\t\tthis._handleMouseHover(e, point);\n\t},\n\n\n\t_handleMouseOut: function (e) {\n\t\tvar layer = this._hoveredLayer;\n\t\tif (layer) {\n\t\t\t// if we're leaving the layer, fire mouseout\n\t\t\tDomUtil.removeClass(this._container, 'leaflet-interactive');\n\t\t\tthis._fireEvent([layer], e, 'mouseout');\n\t\t\tthis._hoveredLayer = null;\n\t\t\tthis._mouseHoverThrottled = false;\n\t\t}\n\t},\n\n\t_handleMouseHover: function (e, point) {\n\t\tif (this._mouseHoverThrottled) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar layer, candidateHoveredLayer;\n\n\t\tfor (var order = this._drawFirst; order; order = order.next) {\n\t\t\tlayer = order.layer;\n\t\t\tif (layer.options.interactive && layer._containsPoint(point)) {\n\t\t\t\tcandidateHoveredLayer = layer;\n\t\t\t}\n\t\t}\n\n\t\tif (candidateHoveredLayer !== this._hoveredLayer) {\n\t\t\tthis._handleMouseOut(e);\n\n\t\t\tif (candidateHoveredLayer) {\n\t\t\t\tDomUtil.addClass(this._container, 'leaflet-interactive'); // change cursor\n\t\t\t\tthis._fireEvent([candidateHoveredLayer], e, 'mouseover');\n\t\t\t\tthis._hoveredLayer = candidateHoveredLayer;\n\t\t\t}\n\t\t}\n\n\t\tthis._fireEvent(this._hoveredLayer ? [this._hoveredLayer] : false, e);\n\n\t\tthis._mouseHoverThrottled = true;\n\t\tsetTimeout(Util.bind(function () {\n\t\t\tthis._mouseHoverThrottled = false;\n\t\t}, this), 32);\n\t},\n\n\t_fireEvent: function (layers, e, type) {\n\t\tthis._map._fireDOMEvent(e, type || e.type, layers);\n\t},\n\n\t_bringToFront: function (layer) {\n\t\tvar order = layer._order;\n\n\t\tif (!order) { return; }\n\n\t\tvar next = order.next;\n\t\tvar prev = order.prev;\n\n\t\tif (next) {\n\t\t\tnext.prev = prev;\n\t\t} else {\n\t\t\t// Already last\n\t\t\treturn;\n\t\t}\n\t\tif (prev) {\n\t\t\tprev.next = next;\n\t\t} else if (next) {\n\t\t\t// Update first entry unless this is the\n\t\t\t// single entry\n\t\t\tthis._drawFirst = next;\n\t\t}\n\n\t\torder.prev = this._drawLast;\n\t\tthis._drawLast.next = order;\n\n\t\torder.next = null;\n\t\tthis._drawLast = order;\n\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_bringToBack: function (layer) {\n\t\tvar order = layer._order;\n\n\t\tif (!order) { return; }\n\n\t\tvar next = order.next;\n\t\tvar prev = order.prev;\n\n\t\tif (prev) {\n\t\t\tprev.next = next;\n\t\t} else {\n\t\t\t// Already first\n\t\t\treturn;\n\t\t}\n\t\tif (next) {\n\t\t\tnext.prev = prev;\n\t\t} else if (prev) {\n\t\t\t// Update last entry unless this is the\n\t\t\t// single entry\n\t\t\tthis._drawLast = prev;\n\t\t}\n\n\t\torder.prev = null;\n\n\t\torder.next = this._drawFirst;\n\t\tthis._drawFirst.prev = order;\n\t\tthis._drawFirst = order;\n\n\t\tthis._requestRedraw(layer);\n\t}\n});\n\n// @factory L.canvas(options?: Renderer options)\n// Creates a Canvas renderer with the given options.\nexport function canvas(options) {\n\treturn Browser.canvas ? new Canvas(options) : null;\n}\n", "import * as DomUtil from '../../dom/DomUtil';\nimport * as Util from '../../core/Util';\nimport {Renderer} from './Renderer';\n\n/*\n * Thanks to Dmitry Baranovsky and his Raphael library for inspiration!\n */\n\n\nexport var vmlCreate = (function () {\n\ttry {\n\t\tdocument.namespaces.add('lvml', 'urn:schemas-microsoft-com:vml');\n\t\treturn function (name) {\n\t\t\treturn document.createElement('<lvml:' + name + ' class=\"lvml\">');\n\t\t};\n\t} catch (e) {\n\t\t// Do not return fn from catch block so `e` can be garbage collected\n\t\t// See https://github.com/Leaflet/Leaflet/pull/7279\n\t}\n\treturn function (name) {\n\t\treturn document.createElement('<' + name + ' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"lvml\">');\n\t};\n})();\n\n\n/*\n * @class SVG\n *\n *\n * VML was deprecated in 2012, which means VML functionality exists only for backwards compatibility\n * with old versions of Internet Explorer.\n */\n\n// mixin to redefine some SVG methods to handle VML syntax which is similar but with some differences\nexport var vmlMixin = {\n\n\t_initContainer: function () {\n\t\tthis._container = DomUtil.create('div', 'leaflet-vml-container');\n\t},\n\n\t_update: function () {\n\t\tif (this._map._animatingZoom) { return; }\n\t\tRenderer.prototype._update.call(this);\n\t\tthis.fire('update');\n\t},\n\n\t_initPath: function (layer) {\n\t\tvar container = layer._container = vmlCreate('shape');\n\n\t\tDomUtil.addClass(container, 'leaflet-vml-shape ' + (this.options.className || ''));\n\n\t\tcontainer.coordsize = '1 1';\n\n\t\tlayer._path = vmlCreate('path');\n\t\tcontainer.appendChild(layer._path);\n\n\t\tthis._updateStyle(layer);\n\t\tthis._layers[Util.stamp(layer)] = layer;\n\t},\n\n\t_addPath: function (layer) {\n\t\tvar container = layer._container;\n\t\tthis._container.appendChild(container);\n\n\t\tif (layer.options.interactive) {\n\t\t\tlayer.addInteractiveTarget(container);\n\t\t}\n\t},\n\n\t_removePath: function (layer) {\n\t\tvar container = layer._container;\n\t\tDomUtil.remove(container);\n\t\tlayer.removeInteractiveTarget(container);\n\t\tdelete this._layers[Util.stamp(layer)];\n\t},\n\n\t_updateStyle: function (layer) {\n\t\tvar stroke = layer._stroke,\n\t\t    fill = layer._fill,\n\t\t    options = layer.options,\n\t\t    container = layer._container;\n\n\t\tcontainer.stroked = !!options.stroke;\n\t\tcontainer.filled = !!options.fill;\n\n\t\tif (options.stroke) {\n\t\t\tif (!stroke) {\n\t\t\t\tstroke = layer._stroke = vmlCreate('stroke');\n\t\t\t}\n\t\t\tcontainer.appendChild(stroke);\n\t\t\tstroke.weight = options.weight + 'px';\n\t\t\tstroke.color = options.color;\n\t\t\tstroke.opacity = options.opacity;\n\n\t\t\tif (options.dashArray) {\n\t\t\t\tstroke.dashStyle = Util.isArray(options.dashArray) ?\n\t\t\t\t    options.dashArray.join(' ') :\n\t\t\t\t    options.dashArray.replace(/( *, *)/g, ' ');\n\t\t\t} else {\n\t\t\t\tstroke.dashStyle = '';\n\t\t\t}\n\t\t\tstroke.endcap = options.lineCap.replace('butt', 'flat');\n\t\t\tstroke.joinstyle = options.lineJoin;\n\n\t\t} else if (stroke) {\n\t\t\tcontainer.removeChild(stroke);\n\t\t\tlayer._stroke = null;\n\t\t}\n\n\t\tif (options.fill) {\n\t\t\tif (!fill) {\n\t\t\t\tfill = layer._fill = vmlCreate('fill');\n\t\t\t}\n\t\t\tcontainer.appendChild(fill);\n\t\t\tfill.color = options.fillColor || options.color;\n\t\t\tfill.opacity = options.fillOpacity;\n\n\t\t} else if (fill) {\n\t\t\tcontainer.removeChild(fill);\n\t\t\tlayer._fill = null;\n\t\t}\n\t},\n\n\t_updateCircle: function (layer) {\n\t\tvar p = layer._point.round(),\n\t\t    r = Math.round(layer._radius),\n\t\t    r2 = Math.round(layer._radiusY || r);\n\n\t\tthis._setPath(layer, layer._empty() ? 'M0 0' :\n\t\t\t'AL ' + p.x + ',' + p.y + ' ' + r + ',' + r2 + ' 0,' + (65535 * 360));\n\t},\n\n\t_setPath: function (layer, path) {\n\t\tlayer._path.v = path;\n\t},\n\n\t_bringToFront: function (layer) {\n\t\tDomUtil.toFront(layer._container);\n\t},\n\n\t_bringToBack: function (layer) {\n\t\tDomUtil.toBack(layer._container);\n\t}\n};\n", "import {Renderer} from './Renderer';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as DomEvent from '../../dom/DomEvent';\nimport Browser from '../../core/Browser';\nimport {stamp} from '../../core/Util';\nimport {svgCreate, pointsToPath} from './SVG.Util';\nexport {pointsToPath};\nimport {vmlMixin, vmlCreate} from './SVG.VML';\n\nexport var create = Browser.vml ? vmlCreate : svgCreate;\n\n/*\n * @class SVG\n * @inherits Renderer\n * @aka L.SVG\n *\n * Allows vector layers to be displayed with [SVG](https://developer.mozilla.org/docs/Web/SVG).\n * Inherits `Renderer`.\n *\n * Due to [technical limitations](https://caniuse.com/svg), SVG is not\n * available in all web browsers, notably Android 2.x and 3.x.\n *\n * Although SVG is not available on IE7 and IE8, these browsers support\n * [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language)\n * (a now deprecated technology), and the SVG renderer will fall back to VML in\n * this case.\n *\n * @example\n *\n * Use SVG by default for all paths in the map:\n *\n * ```js\n * var map = L.map('map', {\n * \trenderer: L.svg()\n * });\n * ```\n *\n * Use a SVG renderer with extra padding for specific vector geometries:\n *\n * ```js\n * var map = L.map('map');\n * var myRenderer = L.svg({ padding: 0.5 });\n * var line = L.polyline( coordinates, { renderer: myRenderer } );\n * var circle = L.circle( center, { renderer: myRenderer } );\n * ```\n */\n\nexport var SVG = Renderer.extend({\n\n\t_initContainer: function () {\n\t\tthis._container = create('svg');\n\n\t\t// makes it possible to click through svg root; we'll reset it back in individual paths\n\t\tthis._container.setAttribute('pointer-events', 'none');\n\n\t\tthis._rootGroup = create('g');\n\t\tthis._container.appendChild(this._rootGroup);\n\t},\n\n\t_destroyContainer: function () {\n\t\tDomUtil.remove(this._container);\n\t\tDomEvent.off(this._container);\n\t\tdelete this._container;\n\t\tdelete this._rootGroup;\n\t\tdelete this._svgSize;\n\t},\n\n\t_update: function () {\n\t\tif (this._map._animatingZoom && this._bounds) { return; }\n\n\t\tRenderer.prototype._update.call(this);\n\n\t\tvar b = this._bounds,\n\t\t    size = b.getSize(),\n\t\t    container = this._container;\n\n\t\t// set size of svg-container if changed\n\t\tif (!this._svgSize || !this._svgSize.equals(size)) {\n\t\t\tthis._svgSize = size;\n\t\t\tcontainer.setAttribute('width', size.x);\n\t\t\tcontainer.setAttribute('height', size.y);\n\t\t}\n\n\t\t// movement: update container viewBox so that we don't have to change coordinates of individual layers\n\t\tDomUtil.setPosition(container, b.min);\n\t\tcontainer.setAttribute('viewBox', [b.min.x, b.min.y, size.x, size.y].join(' '));\n\n\t\tthis.fire('update');\n\t},\n\n\t// methods below are called by vector layers implementations\n\n\t_initPath: function (layer) {\n\t\tvar path = layer._path = create('path');\n\n\t\t// @namespace Path\n\t\t// @option className: String = null\n\t\t// Custom class name set on an element. Only for SVG renderer.\n\t\tif (layer.options.className) {\n\t\t\tDomUtil.addClass(path, layer.options.className);\n\t\t}\n\n\t\tif (layer.options.interactive) {\n\t\t\tDomUtil.addClass(path, 'leaflet-interactive');\n\t\t}\n\n\t\tthis._updateStyle(layer);\n\t\tthis._layers[stamp(layer)] = layer;\n\t},\n\n\t_addPath: function (layer) {\n\t\tif (!this._rootGroup) { this._initContainer(); }\n\t\tthis._rootGroup.appendChild(layer._path);\n\t\tlayer.addInteractiveTarget(layer._path);\n\t},\n\n\t_removePath: function (layer) {\n\t\tDomUtil.remove(layer._path);\n\t\tlayer.removeInteractiveTarget(layer._path);\n\t\tdelete this._layers[stamp(layer)];\n\t},\n\n\t_updatePath: function (layer) {\n\t\tlayer._project();\n\t\tlayer._update();\n\t},\n\n\t_updateStyle: function (layer) {\n\t\tvar path = layer._path,\n\t\t    options = layer.options;\n\n\t\tif (!path) { return; }\n\n\t\tif (options.stroke) {\n\t\t\tpath.setAttribute('stroke', options.color);\n\t\t\tpath.setAttribute('stroke-opacity', options.opacity);\n\t\t\tpath.setAttribute('stroke-width', options.weight);\n\t\t\tpath.setAttribute('stroke-linecap', options.lineCap);\n\t\t\tpath.setAttribute('stroke-linejoin', options.lineJoin);\n\n\t\t\tif (options.dashArray) {\n\t\t\t\tpath.setAttribute('stroke-dasharray', options.dashArray);\n\t\t\t} else {\n\t\t\t\tpath.removeAttribute('stroke-dasharray');\n\t\t\t}\n\n\t\t\tif (options.dashOffset) {\n\t\t\t\tpath.setAttribute('stroke-dashoffset', options.dashOffset);\n\t\t\t} else {\n\t\t\t\tpath.removeAttribute('stroke-dashoffset');\n\t\t\t}\n\t\t} else {\n\t\t\tpath.setAttribute('stroke', 'none');\n\t\t}\n\n\t\tif (options.fill) {\n\t\t\tpath.setAttribute('fill', options.fillColor || options.color);\n\t\t\tpath.setAttribute('fill-opacity', options.fillOpacity);\n\t\t\tpath.setAttribute('fill-rule', options.fillRule || 'evenodd');\n\t\t} else {\n\t\t\tpath.setAttribute('fill', 'none');\n\t\t}\n\t},\n\n\t_updatePoly: function (layer, closed) {\n\t\tthis._setPath(layer, pointsToPath(layer._parts, closed));\n\t},\n\n\t_updateCircle: function (layer) {\n\t\tvar p = layer._point,\n\t\t    r = Math.max(Math.round(layer._radius), 1),\n\t\t    r2 = Math.max(Math.round(layer._radiusY), 1) || r,\n\t\t    arc = 'a' + r + ',' + r2 + ' 0 1,0 ';\n\n\t\t// drawing a circle with two half-arcs\n\t\tvar d = layer._empty() ? 'M0 0' :\n\t\t\t'M' + (p.x - r) + ',' + p.y +\n\t\t\tarc + (r * 2) + ',0 ' +\n\t\t\tarc + (-r * 2) + ',0 ';\n\n\t\tthis._setPath(layer, d);\n\t},\n\n\t_setPath: function (layer, path) {\n\t\tlayer._path.setAttribute('d', path);\n\t},\n\n\t// SVG does not have the concept of zIndex so we resort to changing the DOM order of elements\n\t_bringToFront: function (layer) {\n\t\tDomUtil.toFront(layer._path);\n\t},\n\n\t_bringToBack: function (layer) {\n\t\tDomUtil.toBack(layer._path);\n\t}\n});\n\nif (Browser.vml) {\n\tSVG.include(vmlMixin);\n}\n\n// @namespace SVG\n// @factory L.svg(options?: Renderer options)\n// Creates a SVG renderer with the given options.\nexport function svg(options) {\n\treturn Browser.svg || Browser.vml ? new SVG(options) : null;\n}\n", "import {Map} from '../../map/Map';\nimport {canvas} from './Canvas';\nimport {svg} from './SVG';\n\nMap.include({\n\t// @namespace Map; @method getRenderer(layer: Path): Renderer\n\t// Returns the instance of `Renderer` that should be used to render the given\n\t// `Path`. It will ensure that the `renderer` options of the map and paths\n\t// are respected, and that the renderers do exist on the map.\n\tgetRenderer: function (layer) {\n\t\t// @namespace Path; @option renderer: Renderer\n\t\t// Use this specific instance of `Renderer` for this path. Takes\n\t\t// precedence over the map's [default renderer](#map-renderer).\n\t\tvar renderer = layer.options.renderer || this._getPaneRenderer(layer.options.pane) || this.options.renderer || this._renderer;\n\n\t\tif (!renderer) {\n\t\t\trenderer = this._renderer = this._createRenderer();\n\t\t}\n\n\t\tif (!this.hasLayer(renderer)) {\n\t\t\tthis.addLayer(renderer);\n\t\t}\n\t\treturn renderer;\n\t},\n\n\t_getPaneRenderer: function (name) {\n\t\tif (name === 'overlayPane' || name === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar renderer = this._paneRenderers[name];\n\t\tif (renderer === undefined) {\n\t\t\trenderer = this._createRenderer({pane: name});\n\t\t\tthis._paneRenderers[name] = renderer;\n\t\t}\n\t\treturn renderer;\n\t},\n\n\t_createRenderer: function (options) {\n\t\t// @namespace Map; @option preferCanvas: Boolean = false\n\t\t// Whether `Path`s should be rendered on a `Canvas` renderer.\n\t\t// By default, all `Path`s are rendered in a `SVG` renderer.\n\t\treturn (this.options.preferCanvas && canvas(options)) || svg(options);\n\t}\n});\n", "import {Polygon} from './Polygon';\nimport {toLatLngBounds} from '../../geo/LatLngBounds';\n\n/*\n * L.Rectangle extends Polygon and creates a rectangle when passed a LatLngBounds object.\n */\n\n/*\n * @class Rectangle\n * @aka L.Rectangle\n * @inherits Polygon\n *\n * A class for drawing rectangle overlays on a map. Extends `Polygon`.\n *\n * @example\n *\n * ```js\n * // define rectangle geographical bounds\n * var bounds = [[54.559322, -5.767822], [56.1210604, -3.021240]];\n *\n * // create an orange rectangle\n * L.rectangle(bounds, {color: \"#ff7800\", weight: 1}).addTo(map);\n *\n * // zoom the map to the rectangle bounds\n * map.fitBounds(bounds);\n * ```\n *\n */\n\n\nexport var Rectangle = Polygon.extend({\n\tinitialize: function (latLngBounds, options) {\n\t\tPolygon.prototype.initialize.call(this, this._boundsToLatLngs(latLngBounds), options);\n\t},\n\n\t// @method setBounds(latLngBounds: LatLngBounds): this\n\t// Redraws the rectangle with the passed bounds.\n\tsetBounds: function (latLngBounds) {\n\t\treturn this.setLatLngs(this._boundsToLatLngs(latLngBounds));\n\t},\n\n\t_boundsToLatLngs: function (latLngBounds) {\n\t\tlatLngBounds = toLatLngBounds(latLngBounds);\n\t\treturn [\n\t\t\tlatLngBounds.getSouthWest(),\n\t\t\tlatLngBounds.getNorthWest(),\n\t\t\tlatLngBounds.getNorthEast(),\n\t\t\tlatLngBounds.getSouthEast()\n\t\t];\n\t}\n});\n\n\n// @factory L.rectangle(latLngBounds: LatLngBounds, options?: Polyline options)\nexport function rectangle(latLngBounds, options) {\n\treturn new Rectangle(latLngBounds, options);\n}\n", "export {Renderer} from './Renderer';\nexport {Canvas, canvas} from './Canvas';\nimport {SVG, create, pointsToPath, svg} from './SVG';\nSVG.create = create;\nSVG.pointsToPath = pointsToPath;\nexport {SVG, svg};\nimport './Renderer.getRenderer';\t// This is a bit of a hack, but needed because circular dependencies\n\nexport {Path} from './Path';\nexport {CircleMarker, circleMarker} from './CircleMarker';\nexport {Circle, circle} from './Circle';\nexport {Polyline, polyline} from './Polyline';\nexport {Polygon, polygon} from './Polygon';\nexport {Rectangle, rectangle} from './Rectangle';\n", "export {Layer} from './Layer';\nexport {LayerGroup, layerGroup} from './LayerGroup';\nexport {FeatureGroup, featureGroup} from './FeatureGroup';\nimport {GeoJSON, geoJSON, geoJson, geometryToLayer, coordsToLatLng, coordsToLatLngs, latLngToCoords, latLngsToCoords, getFeature, asFeature} from './GeoJSON';\nGeoJSON.geometryToLayer = geometryToLayer;\nGeoJSON.coordsToLatLng = coordsToLatLng;\nGeoJSON.coordsToLatLngs = coordsToLatLngs;\nGeoJSON.latLngToCoords = latLngToCoords;\nGeoJSON.latLngsToCoords = latLngsToCoords;\nGeoJSON.getFeature = getFeature;\nGeoJSON.asFeature = asFeature;\nexport {GeoJSON, geoJSON, geoJson};\n\nexport {ImageOverlay, imageOverlay} from './ImageOverlay';\nexport {VideoOverlay, videoOverlay} from './VideoOverlay';\nexport {SVGOverlay, svgOverlay} from './SVGOverlay';\n\nexport {DivOverlay} from './DivOverlay';\nexport {Popup, popup} from './Popup';\nexport {Tooltip, tooltip} from './Tooltip';\n\nexport * from './marker/index';\nexport * from './tile/index';\nexport * from './vector/index';\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as DomEvent from '../../dom/DomEvent';\nimport {LatLngBounds} from '../../geo/LatLngBounds';\nimport {Bounds} from '../../geometry/Bounds';\n\n/*\n * L.Handler.BoxZoom is used to add shift-drag zoom interaction to the map\n * (zoom to a selected bounding box), enabled by default.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @option boxZoom: Boolean = true\n\t// Whether the map can be zoomed to a rectangular area specified by\n\t// dragging the mouse while pressing the shift key.\n\tboxZoom: true\n});\n\nexport var BoxZoom = Handler.extend({\n\tinitialize: function (map) {\n\t\tthis._map = map;\n\t\tthis._container = map._container;\n\t\tthis._pane = map._panes.overlayPane;\n\t\tthis._resetStateTimeout = 0;\n\t\tmap.on('unload', this._destroy, this);\n\t},\n\n\taddHooks: function () {\n\t\tDomEvent.on(this._container, 'mousedown', this._onMouseDown, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tDomEvent.off(this._container, 'mousedown', this._onMouseDown, this);\n\t},\n\n\tmoved: function () {\n\t\treturn this._moved;\n\t},\n\n\t_destroy: function () {\n\t\tDomUtil.remove(this._pane);\n\t\tdelete this._pane;\n\t},\n\n\t_resetState: function () {\n\t\tthis._resetStateTimeout = 0;\n\t\tthis._moved = false;\n\t},\n\n\t_clearDeferredResetState: function () {\n\t\tif (this._resetStateTimeout !== 0) {\n\t\t\tclearTimeout(this._resetStateTimeout);\n\t\t\tthis._resetStateTimeout = 0;\n\t\t}\n\t},\n\n\t_onMouseDown: function (e) {\n\t\tif (!e.shiftKey || ((e.which !== 1) && (e.button !== 1))) { return false; }\n\n\t\t// Clear the deferred resetState if it hasn't executed yet, otherwise it\n\t\t// will interrupt the interaction and orphan a box element in the container.\n\t\tthis._clearDeferredResetState();\n\t\tthis._resetState();\n\n\t\tDomUtil.disableTextSelection();\n\t\tDomUtil.disableImageDrag();\n\n\t\tthis._startPoint = this._map.mouseEventToContainerPoint(e);\n\n\t\tDomEvent.on(document, {\n\t\t\tcontextmenu: DomEvent.stop,\n\t\t\tmousemove: this._onMouseMove,\n\t\t\tmouseup: this._onMouseUp,\n\t\t\tkeydown: this._onKeyDown\n\t\t}, this);\n\t},\n\n\t_onMouseMove: function (e) {\n\t\tif (!this._moved) {\n\t\t\tthis._moved = true;\n\n\t\t\tthis._box = DomUtil.create('div', 'leaflet-zoom-box', this._container);\n\t\t\tDomUtil.addClass(this._container, 'leaflet-crosshair');\n\n\t\t\tthis._map.fire('boxzoomstart');\n\t\t}\n\n\t\tthis._point = this._map.mouseEventToContainerPoint(e);\n\n\t\tvar bounds = new Bounds(this._point, this._startPoint),\n\t\t    size = bounds.getSize();\n\n\t\tDomUtil.setPosition(this._box, bounds.min);\n\n\t\tthis._box.style.width  = size.x + 'px';\n\t\tthis._box.style.height = size.y + 'px';\n\t},\n\n\t_finish: function () {\n\t\tif (this._moved) {\n\t\t\tDomUtil.remove(this._box);\n\t\t\tDomUtil.removeClass(this._container, 'leaflet-crosshair');\n\t\t}\n\n\t\tDomUtil.enableTextSelection();\n\t\tDomUtil.enableImageDrag();\n\n\t\tDomEvent.off(document, {\n\t\t\tcontextmenu: DomEvent.stop,\n\t\t\tmousemove: this._onMouseMove,\n\t\t\tmouseup: this._onMouseUp,\n\t\t\tkeydown: this._onKeyDown\n\t\t}, this);\n\t},\n\n\t_onMouseUp: function (e) {\n\t\tif ((e.which !== 1) && (e.button !== 1)) { return; }\n\n\t\tthis._finish();\n\n\t\tif (!this._moved) { return; }\n\t\t// Postpone to next JS tick so internal click event handling\n\t\t// still see it as \"moved\".\n\t\tthis._clearDeferredResetState();\n\t\tthis._resetStateTimeout = setTimeout(Util.bind(this._resetState, this), 0);\n\n\t\tvar bounds = new LatLngBounds(\n\t\t        this._map.containerPointToLatLng(this._startPoint),\n\t\t        this._map.containerPointToLatLng(this._point));\n\n\t\tthis._map\n\t\t\t.fitBounds(bounds)\n\t\t\t.fire('boxzoomend', {boxZoomBounds: bounds});\n\t},\n\n\t_onKeyDown: function (e) {\n\t\tif (e.keyCode === 27) {\n\t\t\tthis._finish();\n\t\t\tthis._clearDeferredResetState();\n\t\t\tthis._resetState();\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property boxZoom: Handler\n// Box (shift-drag with mouse) zoom handler.\nMap.addInitHook('addHandler', 'boxZoom', BoxZoom);\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\n\n/*\n * L.Handler.DoubleClickZoom is used to handle double-click zoom on the map, enabled by default.\n */\n\n// @namespace Map\n// @section Interaction Options\n\nMap.mergeOptions({\n\t// @option doubleClickZoom: Boolean|String = true\n\t// Whether the map can be zoomed in by double clicking on it and\n\t// zoomed out by double clicking while holding shift. If passed\n\t// `'center'`, double-click zoom will zoom to the center of the\n\t//  view regardless of where the mouse was.\n\tdoubleClickZoom: true\n});\n\nexport var DoubleClickZoom = Handler.extend({\n\taddHooks: function () {\n\t\tthis._map.on('dblclick', this._onDoubleClick, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tthis._map.off('dblclick', this._onDoubleClick, this);\n\t},\n\n\t_onDoubleClick: function (e) {\n\t\tvar map = this._map,\n\t\t    oldZoom = map.getZoom(),\n\t\t    delta = map.options.zoomDelta,\n\t\t    zoom = e.originalEvent.shiftKey ? oldZoom - delta : oldZoom + delta;\n\n\t\tif (map.options.doubleClickZoom === 'center') {\n\t\t\tmap.setZoom(zoom);\n\t\t} else {\n\t\t\tmap.setZoomAround(e.containerPoint, zoom);\n\t\t}\n\t}\n});\n\n// @section Handlers\n//\n// Map properties include interaction handlers that allow you to control\n// interaction behavior in runtime, enabling or disabling certain features such\n// as dragging or touch zoom (see `Handler` methods). For example:\n//\n// ```js\n// map.doubleClickZoom.disable();\n// ```\n//\n// @property doubleClickZoom: Handler\n// Double click zoom handler.\nMap.addInitHook('addHandler', 'doubleClickZoom', DoubleClickZoom);\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport {Draggable} from '../../dom/Draggable';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport {toLatLngBounds as latLngBounds} from '../../geo/LatLngBounds';\nimport {toBounds} from '../../geometry/Bounds';\n\n/*\n * L.Handler.MapDrag is used to make the map draggable (with panning inertia), enabled by default.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @option dragging: Boolean = true\n\t// Whether the map is draggable with mouse/touch or not.\n\tdragging: true,\n\n\t// @section Panning Inertia Options\n\t// @option inertia: Boolean = *\n\t// If enabled, panning of the map will have an inertia effect where\n\t// the map builds momentum while dragging and continues moving in\n\t// the same direction for some time. Feels especially nice on touch\n\t// devices. Enabled by default.\n\tinertia: true,\n\n\t// @option inertiaDeceleration: Number = 3000\n\t// The rate with which the inertial movement slows down, in pixels/second².\n\tinertiaDeceleration: 3400, // px/s^2\n\n\t// @option inertiaMaxSpeed: Number = Infinity\n\t// Max speed of the inertial movement, in pixels/second.\n\tinertiaMaxSpeed: Infinity, // px/s\n\n\t// @option easeLinearity: Number = 0.2\n\teaseLinearity: 0.2,\n\n\t// TODO refactor, move to CRS\n\t// @option worldCopyJump: Boolean = false\n\t// With this option enabled, the map tracks when you pan to another \"copy\"\n\t// of the world and seamlessly jumps to the original one so that all overlays\n\t// like markers and vector layers are still visible.\n\tworldCopyJump: false,\n\n\t// @option maxBoundsViscosity: Number = 0.0\n\t// If `maxBounds` is set, this option will control how solid the bounds\n\t// are when dragging the map around. The default value of `0.0` allows the\n\t// user to drag outside the bounds at normal speed, higher values will\n\t// slow down map dragging outside bounds, and `1.0` makes the bounds fully\n\t// solid, preventing the user from dragging outside the bounds.\n\tmaxBoundsViscosity: 0.0\n});\n\nexport var Drag = Handler.extend({\n\taddHooks: function () {\n\t\tif (!this._draggable) {\n\t\t\tvar map = this._map;\n\n\t\t\tthis._draggable = new Draggable(map._mapPane, map._container);\n\n\t\t\tthis._draggable.on({\n\t\t\t\tdragstart: this._onDragStart,\n\t\t\t\tdrag: this._onDrag,\n\t\t\t\tdragend: this._onDragEnd\n\t\t\t}, this);\n\n\t\t\tthis._draggable.on('predrag', this._onPreDragLimit, this);\n\t\t\tif (map.options.worldCopyJump) {\n\t\t\t\tthis._draggable.on('predrag', this._onPreDragWrap, this);\n\t\t\t\tmap.on('zoomend', this._onZoomEnd, this);\n\n\t\t\t\tmap.whenReady(this._onZoomEnd, this);\n\t\t\t}\n\t\t}\n\t\tDomUtil.addClass(this._map._container, 'leaflet-grab leaflet-touch-drag');\n\t\tthis._draggable.enable();\n\t\tthis._positions = [];\n\t\tthis._times = [];\n\t},\n\n\tremoveHooks: function () {\n\t\tDomUtil.removeClass(this._map._container, 'leaflet-grab');\n\t\tDomUtil.removeClass(this._map._container, 'leaflet-touch-drag');\n\t\tthis._draggable.disable();\n\t},\n\n\tmoved: function () {\n\t\treturn this._draggable && this._draggable._moved;\n\t},\n\n\tmoving: function () {\n\t\treturn this._draggable && this._draggable._moving;\n\t},\n\n\t_onDragStart: function () {\n\t\tvar map = this._map;\n\n\t\tmap._stop();\n\t\tif (this._map.options.maxBounds && this._map.options.maxBoundsViscosity) {\n\t\t\tvar bounds = latLngBounds(this._map.options.maxBounds);\n\n\t\t\tthis._offsetLimit = toBounds(\n\t\t\t\tthis._map.latLngToContainerPoint(bounds.getNorthWest()).multiplyBy(-1),\n\t\t\t\tthis._map.latLngToContainerPoint(bounds.getSouthEast()).multiplyBy(-1)\n\t\t\t\t\t.add(this._map.getSize()));\n\n\t\t\tthis._viscosity = Math.min(1.0, Math.max(0.0, this._map.options.maxBoundsViscosity));\n\t\t} else {\n\t\t\tthis._offsetLimit = null;\n\t\t}\n\n\t\tmap\n\t\t    .fire('movestart')\n\t\t    .fire('dragstart');\n\n\t\tif (map.options.inertia) {\n\t\t\tthis._positions = [];\n\t\t\tthis._times = [];\n\t\t}\n\t},\n\n\t_onDrag: function (e) {\n\t\tif (this._map.options.inertia) {\n\t\t\tvar time = this._lastTime = +new Date(),\n\t\t\t    pos = this._lastPos = this._draggable._absPos || this._draggable._newPos;\n\n\t\t\tthis._positions.push(pos);\n\t\t\tthis._times.push(time);\n\n\t\t\tthis._prunePositions(time);\n\t\t}\n\n\t\tthis._map\n\t\t    .fire('move', e)\n\t\t    .fire('drag', e);\n\t},\n\n\t_prunePositions: function (time) {\n\t\twhile (this._positions.length > 1 && time - this._times[0] > 50) {\n\t\t\tthis._positions.shift();\n\t\t\tthis._times.shift();\n\t\t}\n\t},\n\n\t_onZoomEnd: function () {\n\t\tvar pxCenter = this._map.getSize().divideBy(2),\n\t\t    pxWorldCenter = this._map.latLngToLayerPoint([0, 0]);\n\n\t\tthis._initialWorldOffset = pxWorldCenter.subtract(pxCenter).x;\n\t\tthis._worldWidth = this._map.getPixelWorldBounds().getSize().x;\n\t},\n\n\t_viscousLimit: function (value, threshold) {\n\t\treturn value - (value - threshold) * this._viscosity;\n\t},\n\n\t_onPreDragLimit: function () {\n\t\tif (!this._viscosity || !this._offsetLimit) { return; }\n\n\t\tvar offset = this._draggable._newPos.subtract(this._draggable._startPos);\n\n\t\tvar limit = this._offsetLimit;\n\t\tif (offset.x < limit.min.x) { offset.x = this._viscousLimit(offset.x, limit.min.x); }\n\t\tif (offset.y < limit.min.y) { offset.y = this._viscousLimit(offset.y, limit.min.y); }\n\t\tif (offset.x > limit.max.x) { offset.x = this._viscousLimit(offset.x, limit.max.x); }\n\t\tif (offset.y > limit.max.y) { offset.y = this._viscousLimit(offset.y, limit.max.y); }\n\n\t\tthis._draggable._newPos = this._draggable._startPos.add(offset);\n\t},\n\n\t_onPreDragWrap: function () {\n\t\t// TODO refactor to be able to adjust map pane position after zoom\n\t\tvar worldWidth = this._worldWidth,\n\t\t    halfWidth = Math.round(worldWidth / 2),\n\t\t    dx = this._initialWorldOffset,\n\t\t    x = this._draggable._newPos.x,\n\t\t    newX1 = (x - halfWidth + dx) % worldWidth + halfWidth - dx,\n\t\t    newX2 = (x + halfWidth + dx) % worldWidth - halfWidth - dx,\n\t\t    newX = Math.abs(newX1 + dx) < Math.abs(newX2 + dx) ? newX1 : newX2;\n\n\t\tthis._draggable._absPos = this._draggable._newPos.clone();\n\t\tthis._draggable._newPos.x = newX;\n\t},\n\n\t_onDragEnd: function (e) {\n\t\tvar map = this._map,\n\t\t    options = map.options,\n\n\t\t    noInertia = !options.inertia || e.noInertia || this._times.length < 2;\n\n\t\tmap.fire('dragend', e);\n\n\t\tif (noInertia) {\n\t\t\tmap.fire('moveend');\n\n\t\t} else {\n\t\t\tthis._prunePositions(+new Date());\n\n\t\t\tvar direction = this._lastPos.subtract(this._positions[0]),\n\t\t\t    duration = (this._lastTime - this._times[0]) / 1000,\n\t\t\t    ease = options.easeLinearity,\n\n\t\t\t    speedVector = direction.multiplyBy(ease / duration),\n\t\t\t    speed = speedVector.distanceTo([0, 0]),\n\n\t\t\t    limitedSpeed = Math.min(options.inertiaMaxSpeed, speed),\n\t\t\t    limitedSpeedVector = speedVector.multiplyBy(limitedSpeed / speed),\n\n\t\t\t    decelerationDuration = limitedSpeed / (options.inertiaDeceleration * ease),\n\t\t\t    offset = limitedSpeedVector.multiplyBy(-decelerationDuration / 2).round();\n\n\t\t\tif (!offset.x && !offset.y) {\n\t\t\t\tmap.fire('moveend');\n\n\t\t\t} else {\n\t\t\t\toffset = map._limitOffset(offset, map.options.maxBounds);\n\n\t\t\t\tUtil.requestAnimFrame(function () {\n\t\t\t\t\tmap.panBy(offset, {\n\t\t\t\t\t\tduration: decelerationDuration,\n\t\t\t\t\t\teaseLinearity: ease,\n\t\t\t\t\t\tnoMoveStart: true,\n\t\t\t\t\t\tanimate: true\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property dragging: Handler\n// Map dragging handler (by both mouse and touch).\nMap.addInitHook('addHandler', 'dragging', Drag);\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport {on, off, stop} from '../../dom/DomEvent';\nimport {toPoint} from '../../geometry/Point';\n\n\n/*\n * L.Map.Keyboard is handling keyboard interaction with the map, enabled by default.\n */\n\n// @namespace Map\n// @section Keyboard Navigation Options\nMap.mergeOptions({\n\t// @option keyboard: Boolean = true\n\t// Makes the map focusable and allows users to navigate the map with keyboard\n\t// arrows and `+`/`-` keys.\n\tkeyboard: true,\n\n\t// @option keyboardPanDelta: Number = 80\n\t// Amount of pixels to pan when pressing an arrow key.\n\tkeyboardPanDelta: 80\n});\n\nexport var Keyboard = Handler.extend({\n\n\tkeyCodes: {\n\t\tleft:    [37],\n\t\tright:   [39],\n\t\tdown:    [40],\n\t\tup:      [38],\n\t\tzoomIn:  [187, 107, 61, 171],\n\t\tzoomOut: [189, 109, 54, 173]\n\t},\n\n\tinitialize: function (map) {\n\t\tthis._map = map;\n\n\t\tthis._setPanDelta(map.options.keyboardPanDelta);\n\t\tthis._setZoomDelta(map.options.zoomDelta);\n\t},\n\n\taddHooks: function () {\n\t\tvar container = this._map._container;\n\n\t\t// make the container focusable by tabbing\n\t\tif (container.tabIndex <= 0) {\n\t\t\tcontainer.tabIndex = '0';\n\t\t}\n\n\t\ton(container, {\n\t\t\tfocus: this._onFocus,\n\t\t\tblur: this._onBlur,\n\t\t\tmousedown: this._onMouseDown\n\t\t}, this);\n\n\t\tthis._map.on({\n\t\t\tfocus: this._addHooks,\n\t\t\tblur: this._removeHooks\n\t\t}, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tthis._removeHooks();\n\n\t\toff(this._map._container, {\n\t\t\tfocus: this._onFocus,\n\t\t\tblur: this._onBlur,\n\t\t\tmousedown: this._onMouseDown\n\t\t}, this);\n\n\t\tthis._map.off({\n\t\t\tfocus: this._addHooks,\n\t\t\tblur: this._removeHooks\n\t\t}, this);\n\t},\n\n\t_onMouseDown: function () {\n\t\tif (this._focused) { return; }\n\n\t\tvar body = document.body,\n\t\t    docEl = document.documentElement,\n\t\t    top = body.scrollTop || docEl.scrollTop,\n\t\t    left = body.scrollLeft || docEl.scrollLeft;\n\n\t\tthis._map._container.focus();\n\n\t\twindow.scrollTo(left, top);\n\t},\n\n\t_onFocus: function () {\n\t\tthis._focused = true;\n\t\tthis._map.fire('focus');\n\t},\n\n\t_onBlur: function () {\n\t\tthis._focused = false;\n\t\tthis._map.fire('blur');\n\t},\n\n\t_setPanDelta: function (panDelta) {\n\t\tvar keys = this._panKeys = {},\n\t\t    codes = this.keyCodes,\n\t\t    i, len;\n\n\t\tfor (i = 0, len = codes.left.length; i < len; i++) {\n\t\t\tkeys[codes.left[i]] = [-1 * panDelta, 0];\n\t\t}\n\t\tfor (i = 0, len = codes.right.length; i < len; i++) {\n\t\t\tkeys[codes.right[i]] = [panDelta, 0];\n\t\t}\n\t\tfor (i = 0, len = codes.down.length; i < len; i++) {\n\t\t\tkeys[codes.down[i]] = [0, panDelta];\n\t\t}\n\t\tfor (i = 0, len = codes.up.length; i < len; i++) {\n\t\t\tkeys[codes.up[i]] = [0, -1 * panDelta];\n\t\t}\n\t},\n\n\t_setZoomDelta: function (zoomDelta) {\n\t\tvar keys = this._zoomKeys = {},\n\t\t    codes = this.keyCodes,\n\t\t    i, len;\n\n\t\tfor (i = 0, len = codes.zoomIn.length; i < len; i++) {\n\t\t\tkeys[codes.zoomIn[i]] = zoomDelta;\n\t\t}\n\t\tfor (i = 0, len = codes.zoomOut.length; i < len; i++) {\n\t\t\tkeys[codes.zoomOut[i]] = -zoomDelta;\n\t\t}\n\t},\n\n\t_addHooks: function () {\n\t\ton(document, 'keydown', this._onKeyDown, this);\n\t},\n\n\t_removeHooks: function () {\n\t\toff(document, 'keydown', this._onKeyDown, this);\n\t},\n\n\t_onKeyDown: function (e) {\n\t\tif (e.altKey || e.ctrlKey || e.metaKey) { return; }\n\n\t\tvar key = e.keyCode,\n\t\t    map = this._map,\n\t\t    offset;\n\n\t\tif (key in this._panKeys) {\n\t\t\tif (!map._panAnim || !map._panAnim._inProgress) {\n\t\t\t\toffset = this._panKeys[key];\n\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\toffset = toPoint(offset).multiplyBy(3);\n\t\t\t\t}\n\n\t\t\t\tif (map.options.maxBounds) {\n\t\t\t\t\toffset = map._limitOffset(toPoint(offset), map.options.maxBounds);\n\t\t\t\t}\n\n\t\t\t\tif (map.options.worldCopyJump) {\n\t\t\t\t\tvar newLatLng = map.wrapLatLng(map.unproject(map.project(map.getCenter()).add(offset)));\n\t\t\t\t\tmap.panTo(newLatLng);\n\t\t\t\t} else {\n\t\t\t\t\tmap.panBy(offset);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (key in this._zoomKeys) {\n\t\t\tmap.setZoom(map.getZoom() + (e.shiftKey ? 3 : 1) * this._zoomKeys[key]);\n\n\t\t} else if (key === 27 && map._popup && map._popup.options.closeOnEscapeKey) {\n\t\t\tmap.closePopup();\n\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\n\t\tstop(e);\n\t}\n});\n\n// @section Handlers\n// @section Handlers\n// @property keyboard: Handler\n// Keyboard navigation handler.\nMap.addInitHook('addHandler', 'keyboard', Keyboard);\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as DomEvent from '../../dom/DomEvent';\nimport * as Util from '../../core/Util';\n\n/*\n * L.Handler.ScrollWheelZoom is used by L.Map to enable mouse scroll wheel zoom on the map.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @section Mouse wheel options\n\t// @option scrollWheelZoom: Boolean|String = true\n\t// Whether the map can be zoomed by using the mouse wheel. If passed `'center'`,\n\t// it will zoom to the center of the view regardless of where the mouse was.\n\tscrollWheelZoom: true,\n\n\t// @option wheelDebounceTime: Number = 40\n\t// Limits the rate at which a wheel can fire (in milliseconds). By default\n\t// user can't zoom via wheel more often than once per 40 ms.\n\twheelDebounceTime: 40,\n\n\t// @option wheelPxPerZoomLevel: Number = 60\n\t// How many scroll pixels (as reported by [L.DomEvent.getWheelDelta](#domevent-getwheeldelta))\n\t// mean a change of one full zoom level. Smaller values will make wheel-zooming\n\t// faster (and vice versa).\n\twheelPxPerZoomLevel: 60\n});\n\nexport var ScrollWheelZoom = Handler.extend({\n\taddHooks: function () {\n\t\tDomEvent.on(this._map._container, 'wheel', this._onWheelScroll, this);\n\n\t\tthis._delta = 0;\n\t},\n\n\tremoveHooks: function () {\n\t\tDomEvent.off(this._map._container, 'wheel', this._onWheelScroll, this);\n\t},\n\n\t_onWheelScroll: function (e) {\n\t\tvar delta = DomEvent.getWheelDelta(e);\n\n\t\tvar debounce = this._map.options.wheelDebounceTime;\n\n\t\tthis._delta += delta;\n\t\tthis._lastMousePos = this._map.mouseEventToContainerPoint(e);\n\n\t\tif (!this._startTime) {\n\t\t\tthis._startTime = +new Date();\n\t\t}\n\n\t\tvar left = Math.max(debounce - (+new Date() - this._startTime), 0);\n\n\t\tclearTimeout(this._timer);\n\t\tthis._timer = setTimeout(Util.bind(this._performZoom, this), left);\n\n\t\tDomEvent.stop(e);\n\t},\n\n\t_performZoom: function () {\n\t\tvar map = this._map,\n\t\t    zoom = map.getZoom(),\n\t\t    snap = this._map.options.zoomSnap || 0;\n\n\t\tmap._stop(); // stop panning and fly animations if any\n\n\t\t// map the delta with a sigmoid function to -4..4 range leaning on -1..1\n\t\tvar d2 = this._delta / (this._map.options.wheelPxPerZoomLevel * 4),\n\t\t    d3 = 4 * Math.log(2 / (1 + Math.exp(-Math.abs(d2)))) / Math.LN2,\n\t\t    d4 = snap ? Math.ceil(d3 / snap) * snap : d3,\n\t\t    delta = map._limitZoom(zoom + (this._delta > 0 ? d4 : -d4)) - zoom;\n\n\t\tthis._delta = 0;\n\t\tthis._startTime = null;\n\n\t\tif (!delta) { return; }\n\n\t\tif (map.options.scrollWheelZoom === 'center') {\n\t\t\tmap.setZoom(zoom + delta);\n\t\t} else {\n\t\t\tmap.setZoomAround(this._lastMousePos, zoom + delta);\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property scrollWheelZoom: Handler\n// Scroll wheel zoom handler.\nMap.addInitHook('addHandler', 'scrollWheelZoom', ScrollWheelZoom);\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as DomEvent from '../../dom/DomEvent';\nimport {Point} from '../../geometry/Point';\nimport * as Util from '../../core/Util';\nimport Browser from '../../core/Browser';\n\n/*\n * L.Map.TapHold is used to simulate `contextmenu` event on long hold,\n * which otherwise is not fired by mobile Safari.\n */\n\nvar tapHoldDelay = 600;\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @section Touch interaction options\n\t// @option tapHold: Boolean\n\t// Enables simulation of `contextmenu` event, default is `true` for mobile Safari.\n\ttapHold: Browser.touchNative && Browser.safari && Browser.mobile,\n\n\t// @option tapTolerance: Number = 15\n\t// The max number of pixels a user can shift his finger during touch\n\t// for it to be considered a valid tap.\n\ttapTolerance: 15\n});\n\nexport var TapHold = Handler.extend({\n\taddHooks: function () {\n\t\tDomEvent.on(this._map._container, 'touchstart', this._onDown, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tDomEvent.off(this._map._container, 'touchstart', this._onDown, this);\n\t},\n\n\t_onDown: function (e) {\n\t\tclearTimeout(this._holdTimeout);\n\t\tif (e.touches.length !== 1) { return; }\n\n\t\tvar first = e.touches[0];\n\t\tthis._startPos = this._newPos = new Point(first.clientX, first.clientY);\n\n\t\tthis._holdTimeout = setTimeout(Util.bind(function () {\n\t\t\tthis._cancel();\n\t\t\tif (!this._isTapValid()) { return; }\n\n\t\t\t// prevent simulated mouse events https://w3c.github.io/touch-events/#mouse-events\n\t\t\tDomEvent.on(document, 'touchend', DomEvent.preventDefault);\n\t\t\tDomEvent.on(document, 'touchend touchcancel', this._cancelClickPrevent);\n\t\t\tthis._simulateEvent('contextmenu', first);\n\t\t}, this), tapHoldDelay);\n\n\t\tDomEvent.on(document, 'touchend touchcancel contextmenu', this._cancel, this);\n\t\tDomEvent.on(document, 'touchmove', this._onMove, this);\n\t},\n\n\t_cancelClickPrevent: function cancelClickPrevent() {\n\t\tDomEvent.off(document, 'touchend', DomEvent.preventDefault);\n\t\tDomEvent.off(document, 'touchend touchcancel', cancelClickPrevent);\n\t},\n\n\t_cancel: function () {\n\t\tclearTimeout(this._holdTimeout);\n\t\tDomEvent.off(document, 'touchend touchcancel contextmenu', this._cancel, this);\n\t\tDomEvent.off(document, 'touchmove', this._onMove, this);\n\t},\n\n\t_onMove: function (e) {\n\t\tvar first = e.touches[0];\n\t\tthis._newPos = new Point(first.clientX, first.clientY);\n\t},\n\n\t_isTapValid: function () {\n\t\treturn this._newPos.distanceTo(this._startPos) <= this._map.options.tapTolerance;\n\t},\n\n\t_simulateEvent: function (type, e) {\n\t\tvar simulatedEvent = new MouseEvent(type, {\n\t\t\tbubbles: true,\n\t\t\tcancelable: true,\n\t\t\tview: window,\n\t\t\t// detail: 1,\n\t\t\tscreenX: e.screenX,\n\t\t\tscreenY: e.screenY,\n\t\t\tclientX: e.clientX,\n\t\t\tclientY: e.clientY,\n\t\t\t// button: 2,\n\t\t\t// buttons: 2\n\t\t});\n\n\t\tsimulatedEvent._simulated = true;\n\n\t\te.target.dispatchEvent(simulatedEvent);\n\t}\n});\n\n// @section Handlers\n// @property tapHold: Handler\n// Long tap handler to simulate `contextmenu` event (useful in mobile Safari).\nMap.addInitHook('addHandler', 'tapHold', TapHold);\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as DomEvent from '../../dom/DomEvent';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport Browser from '../../core/Browser';\n\n/*\n * L.Handler.TouchZoom is used by L.Map to add pinch zoom on supported mobile browsers.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @section Touch interaction options\n\t// @option touchZoom: Boolean|String = *\n\t// Whether the map can be zoomed by touch-dragging with two fingers. If\n\t// passed `'center'`, it will zoom to the center of the view regardless of\n\t// where the touch events (fingers) were. Enabled for touch-capable web\n\t// browsers.\n\ttouchZoom: Browser.touch,\n\n\t// @option bounceAtZoomLimits: Boolean = true\n\t// Set it to false if you don't want the map to zoom beyond min/max zoom\n\t// and then bounce back when pinch-zooming.\n\tbounceAtZoomLimits: true\n});\n\nexport var TouchZoom = Handler.extend({\n\taddHooks: function () {\n\t\tDomUtil.addClass(this._map._container, 'leaflet-touch-zoom');\n\t\tDomEvent.on(this._map._container, 'touchstart', this._onTouchStart, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tDomUtil.removeClass(this._map._container, 'leaflet-touch-zoom');\n\t\tDomEvent.off(this._map._container, 'touchstart', this._onTouchStart, this);\n\t},\n\n\t_onTouchStart: function (e) {\n\t\tvar map = this._map;\n\t\tif (!e.touches || e.touches.length !== 2 || map._animatingZoom || this._zooming) { return; }\n\n\t\tvar p1 = map.mouseEventToContainerPoint(e.touches[0]),\n\t\t    p2 = map.mouseEventToContainerPoint(e.touches[1]);\n\n\t\tthis._centerPoint = map.getSize()._divideBy(2);\n\t\tthis._startLatLng = map.containerPointToLatLng(this._centerPoint);\n\t\tif (map.options.touchZoom !== 'center') {\n\t\t\tthis._pinchStartLatLng = map.containerPointToLatLng(p1.add(p2)._divideBy(2));\n\t\t}\n\n\t\tthis._startDist = p1.distanceTo(p2);\n\t\tthis._startZoom = map.getZoom();\n\n\t\tthis._moved = false;\n\t\tthis._zooming = true;\n\n\t\tmap._stop();\n\n\t\tDomEvent.on(document, 'touchmove', this._onTouchMove, this);\n\t\tDomEvent.on(document, 'touchend touchcancel', this._onTouchEnd, this);\n\n\t\tDomEvent.preventDefault(e);\n\t},\n\n\t_onTouchMove: function (e) {\n\t\tif (!e.touches || e.touches.length !== 2 || !this._zooming) { return; }\n\n\t\tvar map = this._map,\n\t\t    p1 = map.mouseEventToContainerPoint(e.touches[0]),\n\t\t    p2 = map.mouseEventToContainerPoint(e.touches[1]),\n\t\t    scale = p1.distanceTo(p2) / this._startDist;\n\n\t\tthis._zoom = map.getScaleZoom(scale, this._startZoom);\n\n\t\tif (!map.options.bounceAtZoomLimits && (\n\t\t\t(this._zoom < map.getMinZoom() && scale < 1) ||\n\t\t\t(this._zoom > map.getMaxZoom() && scale > 1))) {\n\t\t\tthis._zoom = map._limitZoom(this._zoom);\n\t\t}\n\n\t\tif (map.options.touchZoom === 'center') {\n\t\t\tthis._center = this._startLatLng;\n\t\t\tif (scale === 1) { return; }\n\t\t} else {\n\t\t\t// Get delta from pinch to center, so centerLatLng is delta applied to initial pinchLatLng\n\t\t\tvar delta = p1._add(p2)._divideBy(2)._subtract(this._centerPoint);\n\t\t\tif (scale === 1 && delta.x === 0 && delta.y === 0) { return; }\n\t\t\tthis._center = map.unproject(map.project(this._pinchStartLatLng, this._zoom).subtract(delta), this._zoom);\n\t\t}\n\n\t\tif (!this._moved) {\n\t\t\tmap._moveStart(true, false);\n\t\t\tthis._moved = true;\n\t\t}\n\n\t\tUtil.cancelAnimFrame(this._animRequest);\n\n\t\tvar moveFn = Util.bind(map._move, map, this._center, this._zoom, {pinch: true, round: false}, undefined);\n\t\tthis._animRequest = Util.requestAnimFrame(moveFn, this, true);\n\n\t\tDomEvent.preventDefault(e);\n\t},\n\n\t_onTouchEnd: function () {\n\t\tif (!this._moved || !this._zooming) {\n\t\t\tthis._zooming = false;\n\t\t\treturn;\n\t\t}\n\n\t\tthis._zooming = false;\n\t\tUtil.cancelAnimFrame(this._animRequest);\n\n\t\tDomEvent.off(document, 'touchmove', this._onTouchMove, this);\n\t\tDomEvent.off(document, 'touchend touchcancel', this._onTouchEnd, this);\n\n\t\t// Pinch updates GridLayers' levels only when zoomSnap is off, so zoomSnap becomes noUpdate.\n\t\tif (this._map.options.zoomAnimation) {\n\t\t\tthis._map._animateZoom(this._center, this._map._limitZoom(this._zoom), true, this._map.options.zoomSnap);\n\t\t} else {\n\t\t\tthis._map._resetView(this._center, this._map._limitZoom(this._zoom));\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property touchZoom: Handler\n// Touch zoom handler.\nMap.addInitHook('addHandler', 'touchZoom', TouchZoom);\n", "import {Map} from './Map';\nimport {BoxZoom} from './handler/Map.BoxZoom';\nMap.BoxZoom = BoxZoom;\nimport {DoubleClickZoom} from './handler/Map.DoubleClickZoom';\nMap.DoubleClickZoom = DoubleClickZoom;\nimport {Drag} from './handler/Map.Drag';\nMap.Drag = Drag;\nimport {Keyboard} from './handler/Map.Keyboard';\nMap.Keyboard = Keyboard;\nimport {ScrollWheelZoom} from './handler/Map.ScrollWheelZoom';\nMap.ScrollWheelZoom = ScrollWheelZoom;\nimport {TapHold} from './handler/Map.TapHold';\nMap.TapHold = TapHold;\nimport {TouchZoom} from './handler/Map.TouchZoom';\nMap.TouchZoom = TouchZoom;\n\nexport {Map, createMap as map} from './Map';\n", "(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.braintree = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(_dereq_,module,exports){\n\"use strict\";\nvar scriptPromiseCache = {};\nfunction buildLoadError(src, failureKind, startTime) {\n    var suffix = failureKind === \"abort\" ? \"has aborted.\" : \"failed to load.\";\n    var error = new Error(\"\".concat(src, \" \").concat(suffix));\n    error.src = src;\n    error.failureKind = failureKind;\n    error.timing = performance.now() - startTime;\n    error.onLine = navigator.onLine;\n    return error;\n}\nfunction loadScript(options) {\n    var scriptLoadPromise;\n    var stringifiedOptions = JSON.stringify(options);\n    if (!options.forceScriptReload) {\n        scriptLoadPromise = scriptPromiseCache[stringifiedOptions];\n        if (scriptLoadPromise) {\n            return scriptLoadPromise;\n        }\n    }\n    var script = document.createElement(\"script\");\n    var attrs = options.dataAttributes || {};\n    var container = options.container || document.head;\n    script.src = options.src;\n    script.id = options.id || \"\";\n    script.async = true;\n    if (options.type) {\n        script.setAttribute(\"type\", \"\".concat(options.type));\n    }\n    if (options.crossorigin) {\n        script.setAttribute(\"crossorigin\", \"\".concat(options.crossorigin));\n    }\n    if (options.integrity) {\n        script.setAttribute(\"integrity\", \"\".concat(options.integrity));\n    }\n    Object.keys(attrs).forEach(function (key) {\n        script.setAttribute(\"data-\".concat(key), \"\".concat(attrs[key]));\n    });\n    scriptLoadPromise = new Promise(function (resolve, reject) {\n        var startTime = performance.now();\n        script.addEventListener(\"load\", function () {\n            resolve(script);\n        });\n        script.addEventListener(\"error\", function () {\n            reject(buildLoadError(options.src, \"error\", startTime));\n        });\n        script.addEventListener(\"abort\", function () {\n            reject(buildLoadError(options.src, \"abort\", startTime));\n        });\n        container.appendChild(script);\n    });\n    scriptPromiseCache[stringifiedOptions] = scriptLoadPromise;\n    return scriptLoadPromise;\n}\nloadScript.clearCache = function () {\n    scriptPromiseCache = {};\n};\nmodule.exports = loadScript;\n\n},{}],2:[function(_dereq_,module,exports){\nmodule.exports = _dereq_(\"./dist/load-script\");\n\n},{\"./dist/load-script\":1}],3:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function isAndroid(ua) {\n    ua = ua || window.navigator.userAgent;\n    return /Android/i.test(ua);\n};\n\n},{}],4:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function isChromeOS(ua) {\n    ua = ua || window.navigator.userAgent;\n    return /CrOS/i.test(ua);\n};\n\n},{}],5:[function(_dereq_,module,exports){\n\"use strict\";\nvar isEdge = _dereq_(\"./is-edge\");\nvar isSamsung = _dereq_(\"./is-samsung\");\nvar isDuckDuckGo = _dereq_(\"./is-duckduckgo\");\nvar isOpera = _dereq_(\"./is-opera\");\nvar isSilk = _dereq_(\"./is-silk\");\nmodule.exports = function isChrome(ua) {\n    ua = ua || window.navigator.userAgent;\n    return ((ua.indexOf(\"Chrome\") !== -1 || ua.indexOf(\"CriOS\") !== -1) &&\n        !isEdge(ua) &&\n        !isSamsung(ua) &&\n        !isDuckDuckGo(ua) &&\n        !isOpera(ua) &&\n        !isSilk(ua));\n};\n\n},{\"./is-duckduckgo\":6,\"./is-edge\":7,\"./is-opera\":17,\"./is-samsung\":19,\"./is-silk\":20}],6:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function isDuckDuckGo(ua) {\n    ua = ua || window.navigator.userAgent;\n    return ua.indexOf(\"DuckDuckGo/\") !== -1;\n};\n\n},{}],7:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function isEdge(ua) {\n    ua = ua || window.navigator.userAgent;\n    return ua.indexOf(\"Edge/\") !== -1 || ua.indexOf(\"Edg/\") !== -1;\n};\n\n},{}],8:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function isFirefox(ua) {\n    ua = ua || window.navigator.userAgent;\n    return /Firefox/i.test(ua);\n};\n\n},{}],9:[function(_dereq_,module,exports){\n\"use strict\";\nvar detectIncognito = _dereq_(\"detectincognitojs\");\nmodule.exports = function isIncognito() {\n    return detectIncognito.detectIncognito();\n};\n\n},{\"detectincognitojs\":52}],10:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function isIosFirefox(ua) {\n    ua = ua || window.navigator.userAgent;\n    return /FxiOS/i.test(ua);\n};\n\n},{}],11:[function(_dereq_,module,exports){\n\"use strict\";\nvar isIos = _dereq_(\"./is-ios\");\nfunction isGoogleSearchApp(ua) {\n    return /\\bGSA\\b/.test(ua);\n}\nmodule.exports = function isIosGoogleSearchApp(ua) {\n    ua = ua || window.navigator.userAgent;\n    return isIos(ua) && isGoogleSearchApp(ua);\n};\n\n},{\"./is-ios\":15}],12:[function(_dereq_,module,exports){\n\"use strict\";\nvar isIos = _dereq_(\"./is-ios\");\nvar isIosFirefox = _dereq_(\"./is-ios-firefox\");\nvar webkitRegexp = /webkit/i;\nfunction isWebkit(ua) {\n    return webkitRegexp.test(ua);\n}\nfunction isIosChrome(ua) {\n    return ua.indexOf(\"CriOS\") > -1;\n}\nfunction isFacebook(ua) {\n    return ua.indexOf(\"FBAN\") > -1;\n}\nmodule.exports = function isIosSafari(ua) {\n    ua = ua || window.navigator.userAgent;\n    return (isIos(ua) &&\n        isWebkit(ua) &&\n        !isIosChrome(ua) &&\n        !isIosFirefox(ua) &&\n        !isFacebook(ua));\n};\n\n},{\"./is-ios\":15,\"./is-ios-firefox\":10}],13:[function(_dereq_,module,exports){\n\"use strict\";\nvar isIos = _dereq_(\"./is-ios\");\nvar isIosGoogleSearchApp = _dereq_(\"./is-ios-google-search-app\");\nmodule.exports = function isIosWebview(ua) {\n    ua = ua || window.navigator.userAgent;\n    if (isIos(ua)) {\n        // The Google Search iOS app is technically a webview and doesn't support popups.\n        if (isIosGoogleSearchApp(ua)) {\n            return true;\n        }\n        // Historically, a webview could be identified by the presence of AppleWebKit and _no_ presence of Safari after.\n        return /.+AppleWebKit(?!.*Safari)/i.test(ua);\n    }\n    return false;\n};\n\n},{\"./is-ios\":15,\"./is-ios-google-search-app\":11}],14:[function(_dereq_,module,exports){\n\"use strict\";\nvar isIosWebview = _dereq_(\"./is-ios-webview\");\nmodule.exports = function isIosWKWebview(ua, statusBarVisible) {\n    statusBarVisible =\n        typeof statusBarVisible !== \"undefined\"\n            ? statusBarVisible\n            : window.statusbar.visible;\n    return isIosWebview(ua) && statusBarVisible;\n};\n\n},{\"./is-ios-webview\":13}],15:[function(_dereq_,module,exports){\n\"use strict\";\nvar isIpadOS = _dereq_(\"./is-ipados\");\nmodule.exports = function isIos(ua, checkIpadOS, document) {\n    if (checkIpadOS === void 0) { checkIpadOS = true; }\n    ua = ua || window.navigator.userAgent;\n    var iOsTest = /iPhone|iPod|iPad/i.test(ua);\n    return checkIpadOS ? iOsTest || isIpadOS(ua, document) : iOsTest;\n};\n\n},{\"./is-ipados\":16}],16:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function isIpadOS(ua, document) {\n    ua = ua || window.navigator.userAgent;\n    document = document || window.document;\n    // \"ontouchend\" is used to determine if a browser is on an iPad, otherwise\n    // user-agents for iPadOS behave/identify as a desktop browser\n    return /Mac|iPad/i.test(ua) && \"ontouchend\" in document;\n};\n\n},{}],17:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function isOpera(ua) {\n    ua = ua || window.navigator.userAgent;\n    return (ua.indexOf(\"OPR/\") !== -1 ||\n        ua.indexOf(\"Opera/\") !== -1 ||\n        ua.indexOf(\"OPT/\") !== -1);\n};\n\n},{}],18:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function isSafari(ua) {\n    ua = ua || window.navigator.userAgent;\n    return (/^Mozilla\\/5\\.0.*Safari\\//.test(ua) &&\n        !/(iPhone|iPad|iPod|Android|SM-)/i.test(ua) &&\n        !/Chrome|CriOS|FxiOS|OPiOS|mercury/i.test(ua));\n};\n\n},{}],19:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function isSamsungBrowser(ua) {\n    ua = ua || window.navigator.userAgent;\n    return /SamsungBrowser/i.test(ua);\n};\n\n},{}],20:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function isSilk(ua) {\n    ua = ua || window.navigator.userAgent;\n    return ua.indexOf(\"Silk/\") !== -1;\n};\n\n},{}],21:[function(_dereq_,module,exports){\n\"use strict\";\nvar MINIMUM_SUPPORTED_CHROME_IOS_VERSION = 48;\nvar isAndroid = _dereq_(\"./is-android\");\nvar isIosFirefox = _dereq_(\"./is-ios-firefox\");\nvar isIosWebview = _dereq_(\"./is-ios-webview\");\nvar isChrome = _dereq_(\"./is-chrome\");\nvar isSamsungBrowser = _dereq_(\"./is-samsung\");\nvar isDuckDuckGo = _dereq_(\"./is-duckduckgo\");\nfunction isUnsupportedIosChrome(ua) {\n    ua = ua || window.navigator.userAgent;\n    var match = ua.match(/CriOS\\/(\\d+)\\./);\n    if (!match) {\n        return false;\n    }\n    var version = parseInt(match[1], 10);\n    return version < MINIMUM_SUPPORTED_CHROME_IOS_VERSION;\n}\nfunction isOperaMini(ua) {\n    ua = ua || window.navigator.userAgent;\n    return ua.indexOf(\"Opera Mini\") > -1;\n}\nfunction isAndroidWebview(ua) {\n    var androidWebviewRegExp = /Version\\/[\\d.]+/i;\n    ua = ua || window.navigator.userAgent;\n    if (isAndroid(ua)) {\n        return (androidWebviewRegExp.test(ua) && !isOperaMini(ua) && !isDuckDuckGo(ua));\n    }\n    return false;\n}\nfunction isOldSamsungBrowserOrSamsungWebview(ua) {\n    return !isChrome(ua) && !isSamsungBrowser(ua) && /samsung/i.test(ua);\n}\nmodule.exports = function supportsPopups(ua) {\n    ua = ua || window.navigator.userAgent;\n    return !(isIosWebview(ua) ||\n        isIosFirefox(ua) ||\n        isAndroidWebview(ua) ||\n        isOperaMini(ua) ||\n        isUnsupportedIosChrome(ua) ||\n        isOldSamsungBrowserOrSamsungWebview(ua));\n};\n\n},{\"./is-android\":3,\"./is-chrome\":5,\"./is-duckduckgo\":6,\"./is-ios-firefox\":10,\"./is-ios-webview\":13,\"./is-samsung\":19}],22:[function(_dereq_,module,exports){\nmodule.exports = _dereq_(\"./dist/is-android\");\n\n},{\"./dist/is-android\":3}],23:[function(_dereq_,module,exports){\nmodule.exports = _dereq_(\"./dist/is-chrome-os\");\n\n},{\"./dist/is-chrome-os\":4}],24:[function(_dereq_,module,exports){\nmodule.exports = _dereq_(\"./dist/is-chrome\");\n\n},{\"./dist/is-chrome\":5}],25:[function(_dereq_,module,exports){\nmodule.exports = _dereq_(\"./dist/is-firefox\");\n\n},{\"./dist/is-firefox\":8}],26:[function(_dereq_,module,exports){\nmodule.exports = _dereq_(\"./dist/is-incognito\");\n\n},{\"./dist/is-incognito\":9}],27:[function(_dereq_,module,exports){\nmodule.exports = _dereq_(\"./dist/is-ios-safari\");\n\n},{\"./dist/is-ios-safari\":12}],28:[function(_dereq_,module,exports){\nmodule.exports = _dereq_(\"./dist/is-ios-webview\");\n\n},{\"./dist/is-ios-webview\":13}],29:[function(_dereq_,module,exports){\nmodule.exports = _dereq_(\"./dist/is-ios-wkwebview\");\n\n},{\"./dist/is-ios-wkwebview\":14}],30:[function(_dereq_,module,exports){\nmodule.exports = _dereq_(\"./dist/is-ios\");\n\n},{\"./dist/is-ios\":15}],31:[function(_dereq_,module,exports){\nmodule.exports = _dereq_(\"./dist/is-safari\");\n\n},{\"./dist/is-safari\":18}],32:[function(_dereq_,module,exports){\nmodule.exports = _dereq_(\"./dist/supports-popups\");\n\n},{\"./dist/supports-popups\":21}],33:[function(_dereq_,module,exports){\n\"use strict\";\nvar EventEmitter = /** @class */ (function () {\n    function EventEmitter() {\n        this._events = {};\n    }\n    EventEmitter.prototype.on = function (event, callback) {\n        if (this._events[event]) {\n            this._events[event].push(callback);\n        }\n        else {\n            this._events[event] = [callback];\n        }\n    };\n    EventEmitter.prototype.off = function (event, callback) {\n        var eventCallbacks = this._events[event];\n        if (!eventCallbacks) {\n            return;\n        }\n        var indexOfCallback = eventCallbacks.indexOf(callback);\n        eventCallbacks.splice(indexOfCallback, 1);\n    };\n    EventEmitter.prototype._emit = function (event) {\n        var args = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n        }\n        var eventCallbacks = this._events[event];\n        if (!eventCallbacks) {\n            return;\n        }\n        eventCallbacks.forEach(function (callback) {\n            callback.apply(void 0, args);\n        });\n    };\n    EventEmitter.prototype.hasListener = function (event) {\n        var eventCallbacks = this._events[event];\n        if (!eventCallbacks) {\n            return false;\n        }\n        return eventCallbacks.length > 0;\n    };\n    EventEmitter.createChild = function (ChildObject) {\n        ChildObject.prototype = Object.create(EventEmitter.prototype, {\n            constructor: ChildObject,\n        });\n    };\n    return EventEmitter;\n}());\nmodule.exports = EventEmitter;\n\n},{}],34:[function(_dereq_,module,exports){\n\"use strict\";\nvar GlobalPromise = (typeof Promise !== \"undefined\"\n    ? Promise // eslint-disable-line no-undef\n    : null);\nvar ExtendedPromise = /** @class */ (function () {\n    function ExtendedPromise(options) {\n        var _this = this;\n        if (typeof options === \"function\") {\n            this._promise = new ExtendedPromise.Promise(options);\n            return;\n        }\n        this._promise = new ExtendedPromise.Promise(function (resolve, reject) {\n            _this._resolveFunction = resolve;\n            _this._rejectFunction = reject;\n        });\n        options = options || {};\n        this._onResolve = options.onResolve || ExtendedPromise.defaultOnResolve;\n        this._onReject = options.onReject || ExtendedPromise.defaultOnReject;\n        if (ExtendedPromise.shouldCatchExceptions(options)) {\n            this._promise.catch(function () {\n                // prevents unhandled promise rejection warning\n                // in the console for extended promises that\n                // that catch the error in an asynchronous manner\n            });\n        }\n        this._resetState();\n    }\n    ExtendedPromise.defaultOnResolve = function (result) {\n        return ExtendedPromise.Promise.resolve(result);\n    };\n    ExtendedPromise.defaultOnReject = function (err) {\n        return ExtendedPromise.Promise.reject(err);\n    };\n    ExtendedPromise.setPromise = function (PromiseClass) {\n        ExtendedPromise.Promise = PromiseClass;\n    };\n    ExtendedPromise.shouldCatchExceptions = function (options) {\n        if (options.hasOwnProperty(\"suppressUnhandledPromiseMessage\")) {\n            return Boolean(options.suppressUnhandledPromiseMessage);\n        }\n        return Boolean(ExtendedPromise.suppressUnhandledPromiseMessage);\n    };\n    // start Promise methods documented in:\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise#Methods\n    ExtendedPromise.all = function (args) {\n        return ExtendedPromise.Promise.all(args);\n    };\n    ExtendedPromise.allSettled = function (args) {\n        return ExtendedPromise.Promise.allSettled(args);\n    };\n    ExtendedPromise.race = function (args) {\n        return ExtendedPromise.Promise.race(args);\n    };\n    ExtendedPromise.reject = function (arg) {\n        return ExtendedPromise.Promise.reject(arg);\n    };\n    ExtendedPromise.resolve = function (arg) {\n        return ExtendedPromise.Promise.resolve(arg);\n    };\n    ExtendedPromise.prototype.then = function () {\n        var _a;\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return (_a = this._promise).then.apply(_a, args);\n    };\n    ExtendedPromise.prototype.catch = function () {\n        var _a;\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return (_a = this._promise).catch.apply(_a, args);\n    };\n    ExtendedPromise.prototype.resolve = function (arg) {\n        var _this = this;\n        if (this.isFulfilled) {\n            return this;\n        }\n        this._setResolved();\n        ExtendedPromise.Promise.resolve()\n            .then(function () {\n            return _this._onResolve(arg);\n        })\n            .then(function (argForResolveFunction) {\n            _this._resolveFunction(argForResolveFunction);\n        })\n            .catch(function (err) {\n            _this._resetState();\n            _this.reject(err);\n        });\n        return this;\n    };\n    ExtendedPromise.prototype.reject = function (arg) {\n        var _this = this;\n        if (this.isFulfilled) {\n            return this;\n        }\n        this._setRejected();\n        ExtendedPromise.Promise.resolve()\n            .then(function () {\n            return _this._onReject(arg);\n        })\n            .then(function (result) {\n            _this._setResolved();\n            _this._resolveFunction(result);\n        })\n            .catch(function (err) {\n            return _this._rejectFunction(err);\n        });\n        return this;\n    };\n    ExtendedPromise.prototype._resetState = function () {\n        this.isFulfilled = false;\n        this.isResolved = false;\n        this.isRejected = false;\n    };\n    ExtendedPromise.prototype._setResolved = function () {\n        this.isFulfilled = true;\n        this.isResolved = true;\n        this.isRejected = false;\n    };\n    ExtendedPromise.prototype._setRejected = function () {\n        this.isFulfilled = true;\n        this.isResolved = false;\n        this.isRejected = true;\n    };\n    ExtendedPromise.Promise = GlobalPromise;\n    return ExtendedPromise;\n}());\nmodule.exports = ExtendedPromise;\n\n},{}],35:[function(_dereq_,module,exports){\n\"use strict\";\nvar set_attributes_1 = _dereq_(\"./lib/set-attributes\");\nvar default_attributes_1 = _dereq_(\"./lib/default-attributes\");\nvar assign_1 = _dereq_(\"./lib/assign\");\nmodule.exports = function createFrame(options) {\n    if (options === void 0) { options = {}; }\n    var iframe = document.createElement(\"iframe\");\n    var config = (0, assign_1.assign)({}, default_attributes_1.defaultAttributes, options);\n    if (config.style && typeof config.style !== \"string\") {\n        (0, assign_1.assign)(iframe.style, config.style);\n        delete config.style;\n    }\n    (0, set_attributes_1.setAttributes)(iframe, config);\n    if (!iframe.getAttribute(\"id\")) {\n        iframe.id = iframe.name;\n    }\n    return iframe;\n};\n\n},{\"./lib/assign\":36,\"./lib/default-attributes\":37,\"./lib/set-attributes\":38}],36:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.assign = void 0;\nfunction assign(\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntarget) {\n    var objs = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        objs[_i - 1] = arguments[_i];\n    }\n    objs.forEach(function (obj) {\n        if (typeof obj !== \"object\") {\n            return;\n        }\n        Object.keys(obj).forEach(function (key) {\n            target[key] = obj[key];\n        });\n    });\n    return target;\n}\nexports.assign = assign;\n\n},{}],37:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.defaultAttributes = void 0;\nexports.defaultAttributes = {\n    src: \"about:blank\",\n    frameBorder: 0,\n    allowtransparency: true,\n    scrolling: \"no\",\n};\n\n},{}],38:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.setAttributes = void 0;\nfunction setAttributes(element, \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nattributes) {\n    for (var key in attributes) {\n        if (attributes.hasOwnProperty(key)) {\n            var value = attributes[key];\n            if (value == null) {\n                element.removeAttribute(key);\n            }\n            else {\n                element.setAttribute(key, value);\n            }\n        }\n    }\n}\nexports.setAttributes = setAttributes;\n\n},{}],39:[function(_dereq_,module,exports){\n\"use strict\";\n\nfunction uuid() {\n  // Try native crypto.randomUUID first (browser)\n  if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n    try {\n      return crypto.randomUUID();\n    } catch (e) {\n      // Fall through\n    }\n  }\n\n  // Browser Web Crypto API\n  if (typeof crypto !== 'undefined' && typeof crypto.getRandomValues === 'function') {\n    var bytes = new Uint8Array(16);\n    crypto.getRandomValues(bytes);\n\n    bytes[6] = (bytes[6] & 0x0f) | 0x40;\n    bytes[8] = (bytes[8] & 0x3f) | 0x80;\n\n    var hex = new Array(256);\n    for (var i = 0; i < 256; i++) hex[i] = (i < 16 ? \"0\" : \"\") + i.toString(16);\n\n    return (\n      hex[bytes[0]] + hex[bytes[1]] + hex[bytes[2]] + hex[bytes[3]] + \"-\" +\n      hex[bytes[4]] + hex[bytes[5]] + \"-\" +\n      hex[bytes[6]] + hex[bytes[7]] + \"-\" +\n      hex[bytes[8]] + hex[bytes[9]] + \"-\" +\n      hex[bytes[10]] + hex[bytes[11]] + hex[bytes[12]] + hex[bytes[13]] + hex[bytes[14]] + hex[bytes[15]]\n    );\n  }\n\n  throw new Error('@braintree/uuid: No secure random source available');\n}\n\nmodule.exports = uuid;\n},{}],40:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction deferred(fn) {\n    return function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        setTimeout(function () {\n            try {\n                fn.apply(void 0, args);\n            }\n            catch (err) {\n                /* eslint-disable no-console */\n                console.log(\"Error in callback function\");\n                console.log(err);\n                /* eslint-enable no-console */\n            }\n        }, 1);\n    };\n}\nexports.deferred = deferred;\n\n},{}],41:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction once(fn) {\n    var called = false;\n    return function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        if (!called) {\n            called = true;\n            fn.apply(void 0, args);\n        }\n    };\n}\nexports.once = once;\n\n},{}],42:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/* eslint-disable consistent-return */\nfunction promiseOrCallback(promise, callback) {\n    if (!callback) {\n        return promise;\n    }\n    promise.then(function (data) { return callback(null, data); }).catch(function (err) { return callback(err); });\n}\nexports.promiseOrCallback = promiseOrCallback;\n\n},{}],43:[function(_dereq_,module,exports){\n\"use strict\";\nvar deferred_1 = _dereq_(\"./lib/deferred\");\nvar once_1 = _dereq_(\"./lib/once\");\nvar promise_or_callback_1 = _dereq_(\"./lib/promise-or-callback\");\nfunction wrapPromise(fn) {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    return function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var callback;\n        var lastArg = args[args.length - 1];\n        if (typeof lastArg === \"function\") {\n            callback = args.pop();\n            callback = once_1.once(deferred_1.deferred(callback));\n        }\n        // I know, I know, this looks bad. But it's a quirk of the library that\n        // we need to allow passing the this context to the original function\n        // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n        // @ts-ignore: this has an implicit any\n        return promise_or_callback_1.promiseOrCallback(fn.apply(this, args), callback); // eslint-disable-line no-invalid-this\n    };\n}\nwrapPromise.wrapPrototype = function (target, options) {\n    if (options === void 0) { options = {}; }\n    var ignoreMethods = options.ignoreMethods || [];\n    var includePrivateMethods = options.transformPrivateMethods === true;\n    var methods = Object.getOwnPropertyNames(target.prototype).filter(function (method) {\n        var isNotPrivateMethod;\n        var isNonConstructorFunction = method !== \"constructor\" &&\n            typeof target.prototype[method] === \"function\";\n        var isNotAnIgnoredMethod = ignoreMethods.indexOf(method) === -1;\n        if (includePrivateMethods) {\n            isNotPrivateMethod = true;\n        }\n        else {\n            isNotPrivateMethod = method.charAt(0) !== \"_\";\n        }\n        return (isNonConstructorFunction && isNotPrivateMethod && isNotAnIgnoredMethod);\n    });\n    methods.forEach(function (method) {\n        var original = target.prototype[method];\n        target.prototype[method] = wrapPromise(original);\n    });\n    return target;\n};\nmodule.exports = wrapPromise;\n\n},{\"./lib/deferred\":40,\"./lib/once\":41,\"./lib/promise-or-callback\":42}],44:[function(_dereq_,module,exports){\n(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n    typeof define === 'function' && define.amd ? define(['exports'], factory) :\n    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.loadAxo = {}));\n})(this, (function (exports) { 'use strict';\n\n    /*! *****************************************************************************\r\n    Copyright (c) Microsoft Corporation.\r\n\r\n    Permission to use, copy, modify, and/or distribute this software for any\r\n    purpose with or without fee is hereby granted.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\n    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\n    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\n    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\n    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\n    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n    PERFORMANCE OF THIS SOFTWARE.\r\n    ***************************************************************************** */\r\n    /* global Reflect, Promise */\r\n\r\n\r\n    function __awaiter(thisArg, _arguments, P, generator) {\r\n        function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n        return new (P || (P = Promise))(function (resolve, reject) {\r\n            function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n            function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n            function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n            step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n        });\r\n    }\r\n\r\n    function __generator(thisArg, body) {\r\n        var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n        return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n        function verb(n) { return function (v) { return step([n, v]); }; }\r\n        function step(op) {\r\n            if (f) throw new TypeError(\"Generator is already executing.\");\r\n            while (_) try {\r\n                if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n                if (y = 0, t) op = [op[0] & 2, t.value];\r\n                switch (op[0]) {\r\n                    case 0: case 1: t = op; break;\r\n                    case 4: _.label++; return { value: op[1], done: false };\r\n                    case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                    case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                    default:\r\n                        if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                        if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                        if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                        if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                        if (t[2]) _.ops.pop();\r\n                        _.trys.pop(); continue;\r\n                }\r\n                op = body.call(thisArg, _);\r\n            } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n            if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n        }\r\n    }\n\n    var dist = {};\n\n    var scriptPromiseCache = {};\n    function loadScript$1(options) {\n        var scriptLoadPromise;\n        var stringifiedOptions = JSON.stringify(options);\n        if (!options.forceScriptReload) {\n            scriptLoadPromise = scriptPromiseCache[stringifiedOptions];\n            if (scriptLoadPromise) {\n                return scriptLoadPromise;\n            }\n        }\n        var script = document.createElement(\"script\");\n        var attrs = options.dataAttributes || {};\n        var container = options.container || document.head;\n        script.src = options.src;\n        script.id = options.id || \"\";\n        script.async = true;\n        if (options.type) {\n            script.setAttribute(\"type\", \"\".concat(options.type));\n        }\n        if (options.crossorigin) {\n            script.setAttribute(\"crossorigin\", \"\".concat(options.crossorigin));\n        }\n        Object.keys(attrs).forEach(function (key) {\n            script.setAttribute(\"data-\".concat(key), \"\".concat(attrs[key]));\n        });\n        scriptLoadPromise = new Promise(function (resolve, reject) {\n            script.addEventListener(\"load\", function () {\n                resolve(script);\n            });\n            script.addEventListener(\"error\", function () {\n                reject(new Error(\"\".concat(options.src, \" failed to load.\")));\n            });\n            script.addEventListener(\"abort\", function () {\n                reject(new Error(\"\".concat(options.src, \" has aborted.\")));\n            });\n            container.appendChild(script);\n        });\n        scriptPromiseCache[stringifiedOptions] = scriptLoadPromise;\n        return scriptLoadPromise;\n    }\n    loadScript$1.clearCache = function () {\n        scriptPromiseCache = {};\n    };\n    var loadScript_1$1 = loadScript$1;\n\n    var loadStylesheet$1 = function loadStylesheet(options) {\n        var stylesheet = document.querySelector(\"link[href=\\\"\".concat(options.href, \"\\\"]\"));\n        if (stylesheet) {\n            return Promise.resolve(stylesheet);\n        }\n        stylesheet = document.createElement(\"link\");\n        var container = options.container || document.head;\n        stylesheet.setAttribute(\"rel\", \"stylesheet\");\n        stylesheet.setAttribute(\"type\", \"text/css\");\n        stylesheet.setAttribute(\"href\", options.href);\n        stylesheet.setAttribute(\"id\", options.id);\n        if (container.firstChild) {\n            container.insertBefore(stylesheet, container.firstChild);\n        }\n        else {\n            container.appendChild(stylesheet);\n        }\n        return Promise.resolve(stylesheet);\n    };\n\n    Object.defineProperty(dist, \"__esModule\", { value: true });\n    dist.loadStylesheet = loadScript_1 = dist.loadScript = void 0;\n    var loadScript = loadScript_1$1;\n    var loadScript_1 = dist.loadScript = loadScript;\n    var loadStylesheet = loadStylesheet$1;\n    dist.loadStylesheet = loadStylesheet;\n\n    var CDNX_PROD = \"https://www.paypalobjects.com\";\n    var ASSET_NAME = {\n        minified: \"axo.min\",\n        unminified: \"axo\",\n    };\n    var FL_NAMESPACE = \"fastlane\";\n    var ASSET_PATH = \"connect-boba\";\n    var LOCALE_PATH = \"\".concat(ASSET_PATH, \"/locales/\");\n    var constants = {\n        AXO_ASSET_NAME: ASSET_NAME,\n        AXO_ASSET_PATH: ASSET_PATH,\n        LOCALE_PATH: LOCALE_PATH,\n        CDNX_PROD: CDNX_PROD,\n    };\n\n    var AxoSupportedPlatforms = {\n        BT: \"BT\",\n        PPCP: \"PPCP\",\n    };\n\n    /**\n     * Checks if the current environment is an AMD environment.\n     *\n     * @returns {boolean} True if the environment is AMD, false otherwise.\n     */\n    function isAmdEnv() {\n        return typeof window.define === \"function\" && !!window.define.amd;\n    }\n    /**\n     * Checks if the current environment is a RequireJS environment.\n     *\n     * @returns {boolean} True if the environment is RequireJS, false otherwise.\n     */\n    function isRequireJsEnv() {\n        return (isAmdEnv() &&\n            typeof window.requirejs === \"function\" &&\n            typeof window.requirejs.config === \"function\");\n    }\n\n    /**\n     * Safely loads BT modules by checking if the module already exists and verifying if versions mismatch\n     *\n     * @param loadConfig <BtModuleLoadConfig> Configuration of BT Module to load\n     * @param version <string> version that should be passed from the client getVersion\n     * @returns Promise<HTMLScriptElement>\n     * @returns Promise<true> when BT module with same version already exists\n     * @returns Promise.reject(err) when BT module already exists but versions mismatch or empty version passed in\n     */\n    function safeLoadBtModule(loadConfig, version, minified) {\n        var _a, _b;\n        if (minified === void 0) { minified = true; }\n        return __awaiter(this, void 0, void 0, function () {\n            var bt, existingVersion;\n            return __generator(this, function (_c) {\n                bt = getBraintree();\n                if (bt && bt[loadConfig.module]) {\n                    if (version && ((_a = bt[loadConfig.module]) === null || _a === void 0 ? void 0 : _a.VERSION) !== version) {\n                        existingVersion = (_b = bt[loadConfig.module]) === null || _b === void 0 ? void 0 : _b.VERSION;\n                        throw new Error(\"\".concat(loadConfig.module, \" already loaded with version \").concat(existingVersion, \" cannot load version \").concat(version));\n                    }\n                    else {\n                        return [2 /*return*/, true];\n                    }\n                }\n                if (!version) {\n                    throw new Error(\"Attempted to load \".concat(loadConfig.module, \" without specifying version\"));\n                }\n                return [2 /*return*/, loadBtModule(loadConfig, version, minified)];\n            });\n        });\n    }\n    /**\n     * Reads the version and to load the correct version of Bt module\n     *\n     * @param loadConfig <BtModuleLoadConfig> Configuration of BT Module to load\n     * @param version <string> Bt module version\n     * @returns Promise<HTMLScriptElement> or\n     */\n    function loadBtModule(loadConfig, version, minified) {\n        if (minified === void 0) { minified = true; }\n        if (isAmdEnv()) {\n            var module_1 = minified\n                ? loadConfig.amdModule.minified\n                : loadConfig.amdModule.unminified;\n            return new Promise(function (resolve, reject) {\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                window.require([module_1], resolve, reject);\n            });\n        }\n        var script = minified\n            ? loadConfig.script.minified\n            : loadConfig.script.unminified;\n        return loadScript_1({\n            id: \"\".concat(loadConfig.id, \"-\").concat(version),\n            src: \"https://js.braintreegateway.com/web/\".concat(version, \"/js/\").concat(script),\n        });\n    }\n    /**\n     * Looks for the Braintree web sdk on the window object\n     *\n     * @returns Braintree web sdk\n     */\n    function getBraintree() {\n        return window === null || window === void 0 ? void 0 : window.braintree;\n    }\n\n    var _a, _b;\n    /**\n     * Maps to the BT module namespace created on the window.braintree object\n     */\n    var BtModule = {\n        Client: \"client\",\n        HostedCardFields: \"hostedFields\",\n    };\n    var BT_NAMESPACE = \"braintree\";\n    var BT_ASSET_NAME = (_a = {},\n        _a[BtModule.Client] = \"client\",\n        _a[BtModule.HostedCardFields] = \"hosted-fields\",\n        _a);\n    var btModulesLoadConfig = (_b = {},\n        _b[BtModule.Client] = {\n            id: \"client\",\n            module: BtModule.Client,\n            amdModule: {\n                unminified: \"\".concat(BT_NAMESPACE, \"/\").concat(BT_ASSET_NAME[BtModule.Client]),\n                minified: \"\".concat(BT_NAMESPACE, \"/\").concat(BT_ASSET_NAME[BtModule.Client], \".min\"),\n            },\n            script: {\n                unminified: \"\".concat(BT_ASSET_NAME[BtModule.Client], \".js\"),\n                minified: \"\".concat(BT_ASSET_NAME[BtModule.Client], \".min.js\"),\n            },\n        },\n        _b[BtModule.HostedCardFields] = {\n            id: \"hcf\",\n            module: BtModule.HostedCardFields,\n            amdModule: {\n                unminified: \"\".concat(BT_NAMESPACE, \"/\").concat(BT_ASSET_NAME[BtModule.HostedCardFields]),\n                minified: \"\".concat(BT_NAMESPACE, \"/\").concat(BT_ASSET_NAME[BtModule.HostedCardFields], \".min\"),\n            },\n            script: {\n                unminified: \"\".concat(BT_ASSET_NAME[BtModule.HostedCardFields], \".js\"),\n                minified: \"\".concat(BT_ASSET_NAME[BtModule.HostedCardFields], \".min.js\"),\n            },\n        },\n        _b);\n\n    /**\n     * Loads accelerated checkout components.\n     * @param options object with a minified parameter to determine if the script that is loaded should be minified or not (defaults to true if)\n     * @returns an object with metadata with a localeUrl parameter to be read by AXO SDK\n     */\n    function loadAxo(options) {\n        return __awaiter(this, void 0, void 0, function () {\n            var btSdkVersion, minified, assetUrl, localeUrl;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        performance.mark(\"pp_axo_sdk_init_invoked\");\n                        btSdkVersion = options.btSdkVersion, minified = options.minified;\n                        assetUrl = getAssetsUrl(options);\n                        localeUrl = getLocaleUrl(options);\n                        if (!(options.platform === AxoSupportedPlatforms.BT)) return [3 /*break*/, 2];\n                        return [4 /*yield*/, Promise.all([\n                                safeLoadBtModule(btModulesLoadConfig.hostedFields, btSdkVersion, minified),\n                                loadAXOScript(assetUrl, minified),\n                            ])];\n                    case 1:\n                        _a.sent();\n                        return [3 /*break*/, 5];\n                    case 2:\n                        if (!(options.platform === AxoSupportedPlatforms.PPCP)) return [3 /*break*/, 4];\n                        return [4 /*yield*/, Promise.all([\n                                safeLoadBtModule(btModulesLoadConfig.client, btSdkVersion, minified),\n                                safeLoadBtModule(btModulesLoadConfig.hostedFields, btSdkVersion, minified),\n                                loadAXOScript(assetUrl, minified),\n                            ])];\n                    case 3:\n                        _a.sent();\n                        return [3 /*break*/, 5];\n                    case 4: throw new Error(\"unsupported axo platform\");\n                    case 5: return [2 /*return*/, { metadata: { localeUrl: localeUrl } }];\n                }\n            });\n        });\n    }\n    /**\n     * Reads the url and to load the axo bundle script\n     * @param url (Required) string url for the correct axo asset\n     * @returns Promise<HTMLScriptElement>\n     */\n    function loadAXOScript(url, minified) {\n        var _a;\n        if (minified === void 0) { minified = true; }\n        if (isAmdEnv()) {\n            // AMD environment\n            if (isRequireJsEnv()) {\n                // Let's configure RequireJS\n                requirejs.config({\n                    paths: (_a = {},\n                        _a[FL_NAMESPACE] = url,\n                        _a),\n                });\n            }\n            var moduleName_1 = \"\".concat(FL_NAMESPACE, \"/\").concat(minified\n                ? constants.AXO_ASSET_NAME.minified\n                : constants.AXO_ASSET_NAME.unminified);\n            return new Promise(function (resolve, reject) {\n                window.require([moduleName_1], resolve, reject);\n            });\n        }\n        // Not an AMD environment\n        return loadScript_1({\n            id: \"axo-id\",\n            src: url,\n            forceScriptReload: true,\n        });\n    }\n    /**\n     * Prepends the domain to the asset url\n     * @param options object with assetUrl and bundleid parameters to determine which URL to return\n     * @returns full domain and assets URL as string\n     */\n    function generateAssetUrl(_a) {\n        var assetUrl = _a.assetUrl, bundleId = _a.bundleId;\n        return bundleId\n            ? \"https://cdn-\".concat(bundleId, \".static.engineering.dev.paypalinc.com/\").concat(assetUrl)\n            : \"\".concat(constants.CDNX_PROD, \"/\").concat(assetUrl);\n    }\n    /**\n     * Retrieves either the minified or unminified assets URL as specified\n     * @param options (Optional) object with a minified and metadata with bundleIdOverride parameters to determine which URL to return\n     * @returns assets URL as string\n     */\n    function getAssetsUrl(options) {\n        var _a;\n        var assetName = (options === null || options === void 0 ? void 0 : options.minified) !== false\n            ? constants.AXO_ASSET_NAME.minified\n            : constants.AXO_ASSET_NAME.unminified;\n        var assetUrl = isAmdEnv()\n            ? constants.AXO_ASSET_PATH\n            : \"\".concat(constants.AXO_ASSET_PATH, \"/\").concat(assetName, \".js\");\n        return generateAssetUrl({\n            assetUrl: assetUrl,\n            bundleId: (_a = options === null || options === void 0 ? void 0 : options.metadata) === null || _a === void 0 ? void 0 : _a.bundleIdOverride,\n        });\n    }\n    /**\n     * Retrieves the Locales URL, the path to our language files\n     * @param options (Optional) object with a minified and metadata with bundleIdOverride parameters to determine which URL to return\n     * @returns locale URL as string\n     */\n    function getLocaleUrl(options) {\n        var _a;\n        return generateAssetUrl({\n            assetUrl: constants.LOCALE_PATH,\n            bundleId: (_a = options === null || options === void 0 ? void 0 : options.metadata) === null || _a === void 0 ? void 0 : _a.bundleIdOverride,\n        });\n    }\n\n    exports.constants = constants;\n    exports.loadAxo = loadAxo;\n\n}));\n\n},{}],45:[function(_dereq_,module,exports){\n\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar cardTypes = _dereq_(\"./lib/card-types\");\nvar add_matching_cards_to_results_1 = _dereq_(\"./lib/add-matching-cards-to-results\");\nvar is_valid_input_type_1 = _dereq_(\"./lib/is-valid-input-type\");\nvar find_best_match_1 = _dereq_(\"./lib/find-best-match\");\nvar clone_1 = _dereq_(\"./lib/clone\");\nvar customCards = {};\nvar cardNames = {\n    VISA: \"visa\",\n    MASTERCARD: \"mastercard\",\n    AMERICAN_EXPRESS: \"american-express\",\n    DINERS_CLUB: \"diners-club\",\n    DISCOVER: \"discover\",\n    JCB: \"jcb\",\n    UNIONPAY: \"unionpay\",\n    NARANJA: \"naranja\",\n    VERVE: \"verve\",\n    MAESTRO: \"maestro\",\n    ELO: \"elo\",\n    MIR: \"mir\",\n    HIPER: \"hiper\",\n    HIPERCARD: \"hipercard\",\n};\nvar ORIGINAL_TEST_ORDER = [\n    cardNames.VISA,\n    cardNames.MASTERCARD,\n    cardNames.AMERICAN_EXPRESS,\n    cardNames.DINERS_CLUB,\n    cardNames.DISCOVER,\n    cardNames.JCB,\n    cardNames.UNIONPAY,\n    cardNames.NARANJA,\n    cardNames.VERVE,\n    cardNames.MAESTRO,\n    cardNames.ELO,\n    cardNames.MIR,\n    cardNames.HIPER,\n    cardNames.HIPERCARD,\n];\nvar testOrder = (0, clone_1.clone)(ORIGINAL_TEST_ORDER);\nfunction findType(cardType) {\n    return customCards[cardType] || cardTypes[cardType];\n}\nfunction getAllCardTypes() {\n    return testOrder.map(function (cardType) { return (0, clone_1.clone)(findType(cardType)); });\n}\nfunction getCardPosition(name, ignoreErrorForNotExisting) {\n    if (ignoreErrorForNotExisting === void 0) { ignoreErrorForNotExisting = false; }\n    var position = testOrder.indexOf(name);\n    if (!ignoreErrorForNotExisting && position === -1) {\n        throw new Error('\"' + name + '\" is not a supported card type.');\n    }\n    return position;\n}\nfunction creditCardType(cardNumber) {\n    var results = [];\n    if (!(0, is_valid_input_type_1.isValidInputType)(cardNumber)) {\n        return results;\n    }\n    if (cardNumber.length === 0) {\n        return getAllCardTypes();\n    }\n    testOrder.forEach(function (cardType) {\n        var cardConfiguration = findType(cardType);\n        (0, add_matching_cards_to_results_1.addMatchingCardsToResults)(cardNumber, cardConfiguration, results);\n    });\n    var bestMatch = (0, find_best_match_1.findBestMatch)(results);\n    if (bestMatch) {\n        return [bestMatch];\n    }\n    return results;\n}\ncreditCardType.getTypeInfo = function (cardType) {\n    return (0, clone_1.clone)(findType(cardType));\n};\ncreditCardType.removeCard = function (name) {\n    var position = getCardPosition(name);\n    testOrder.splice(position, 1);\n};\ncreditCardType.addCard = function (config) {\n    var existingCardPosition = getCardPosition(config.type, true);\n    customCards[config.type] = config;\n    if (existingCardPosition === -1) {\n        testOrder.push(config.type);\n    }\n};\ncreditCardType.updateCard = function (cardType, updates) {\n    var originalObject = customCards[cardType] || cardTypes[cardType];\n    if (!originalObject) {\n        throw new Error(\"\\\"\".concat(cardType, \"\\\" is not a recognized type. Use `addCard` instead.'\"));\n    }\n    if (updates.type && originalObject.type !== updates.type) {\n        throw new Error(\"Cannot overwrite type parameter.\");\n    }\n    var clonedCard = (0, clone_1.clone)(originalObject);\n    clonedCard = __assign(__assign({}, clonedCard), updates);\n    customCards[clonedCard.type] = clonedCard;\n};\ncreditCardType.changeOrder = function (name, position) {\n    var currentPosition = getCardPosition(name);\n    testOrder.splice(currentPosition, 1);\n    testOrder.splice(position, 0, name);\n};\ncreditCardType.resetModifications = function () {\n    testOrder = (0, clone_1.clone)(ORIGINAL_TEST_ORDER);\n    customCards = {};\n};\ncreditCardType.types = cardNames;\nmodule.exports = creditCardType;\n\n},{\"./lib/add-matching-cards-to-results\":46,\"./lib/card-types\":47,\"./lib/clone\":48,\"./lib/find-best-match\":49,\"./lib/is-valid-input-type\":50}],46:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addMatchingCardsToResults = addMatchingCardsToResults;\nvar clone_1 = _dereq_(\"./clone\");\nvar matches_1 = _dereq_(\"./matches\");\nfunction addMatchingCardsToResults(cardNumber, cardConfiguration, results) {\n    var i, patternLength;\n    for (i = 0; i < cardConfiguration.patterns.length; i++) {\n        var pattern = cardConfiguration.patterns[i];\n        if (!(0, matches_1.matches)(cardNumber, pattern)) {\n            continue;\n        }\n        var clonedCardConfiguration = (0, clone_1.clone)(cardConfiguration);\n        if (Array.isArray(pattern)) {\n            patternLength = String(pattern[0]).length;\n        }\n        else {\n            patternLength = String(pattern).length;\n        }\n        if (cardNumber.length >= patternLength) {\n            clonedCardConfiguration.matchStrength = patternLength;\n        }\n        results.push(clonedCardConfiguration);\n        break;\n    }\n}\n\n},{\"./clone\":48,\"./matches\":51}],47:[function(_dereq_,module,exports){\n\"use strict\";\nvar cardTypes = {\n    visa: {\n        niceType: \"Visa\",\n        type: \"visa\",\n        patterns: [4],\n        gaps: [4, 8, 12],\n        lengths: [16, 18, 19],\n        code: {\n            name: \"CVV\",\n            size: 3,\n        },\n    },\n    mastercard: {\n        niceType: \"Mastercard\",\n        type: \"mastercard\",\n        patterns: [[51, 55], [2221, 2229], [223, 229], [23, 26], [270, 271], 2720],\n        gaps: [4, 8, 12],\n        lengths: [16],\n        code: {\n            name: \"CVC\",\n            size: 3,\n        },\n    },\n    \"american-express\": {\n        niceType: \"American Express\",\n        type: \"american-express\",\n        patterns: [34, 37],\n        gaps: [4, 10],\n        lengths: [15],\n        code: {\n            name: \"CID\",\n            size: 4,\n        },\n    },\n    \"diners-club\": {\n        niceType: \"Diners Club\",\n        type: \"diners-club\",\n        patterns: [[300, 305], 36, 38, 39],\n        gaps: [4, 10],\n        lengths: [14, 16, 19],\n        code: {\n            name: \"CVV\",\n            size: 3,\n        },\n    },\n    discover: {\n        niceType: \"Discover\",\n        type: \"discover\",\n        patterns: [6011, [644, 649], 65],\n        gaps: [4, 8, 12],\n        lengths: [16, 19],\n        code: {\n            name: \"CID\",\n            size: 3,\n        },\n    },\n    jcb: {\n        niceType: \"JCB\",\n        type: \"jcb\",\n        patterns: [2131, 1800, [3528, 3589]],\n        gaps: [4, 8, 12],\n        lengths: [16, 17, 18, 19],\n        code: {\n            name: \"CVV\",\n            size: 3,\n        },\n    },\n    unionpay: {\n        niceType: \"UnionPay\",\n        type: \"unionpay\",\n        patterns: [\n            620,\n            [62100, 62182],\n            [62184, 62187],\n            [62185, 62197],\n            [62200, 62205],\n            [622010, 622999],\n            622018,\n            [62207, 62209],\n            [623, 626],\n            6270,\n            6272,\n            6276,\n            [627700, 627779],\n            [627781, 627799],\n            [6282, 6289],\n            6291,\n            6292,\n            810,\n            [8110, 8131],\n            [8132, 8151],\n            [8152, 8163],\n            [8164, 8171],\n        ],\n        gaps: [4, 8, 12],\n        lengths: [14, 15, 16, 17, 18, 19],\n        code: {\n            name: \"CVN\",\n            size: 3,\n        },\n    },\n    maestro: {\n        niceType: \"Maestro\",\n        type: \"maestro\",\n        patterns: [\n            493698,\n            [500000, 504174],\n            [504176, 506698],\n            [506779, 508999],\n            [56, 59],\n            63,\n            67,\n            6,\n        ],\n        gaps: [4, 8, 12],\n        lengths: [12, 13, 14, 15, 16, 17, 18, 19],\n        code: {\n            name: \"CVC\",\n            size: 3,\n        },\n    },\n    elo: {\n        niceType: \"Elo\",\n        type: \"elo\",\n        patterns: [\n            401178,\n            401179,\n            438935,\n            457631,\n            457632,\n            431274,\n            451416,\n            457393,\n            504175,\n            [506699, 506778],\n            [509000, 509999],\n            627780,\n            636297,\n            636368,\n            [650031, 650033],\n            [650035, 650051],\n            [650405, 650439],\n            [650485, 650538],\n            [650541, 650598],\n            [650700, 650718],\n            [650720, 650727],\n            [650901, 650978],\n            [651652, 651679],\n            [655000, 655019],\n            [655021, 655058],\n        ],\n        gaps: [4, 8, 12],\n        lengths: [16],\n        code: {\n            name: \"CVE\",\n            size: 3,\n        },\n    },\n    mir: {\n        niceType: \"Mir\",\n        type: \"mir\",\n        patterns: [[2200, 2204]],\n        gaps: [4, 8, 12],\n        lengths: [16, 17, 18, 19],\n        code: {\n            name: \"CVP2\",\n            size: 3,\n        },\n    },\n    hiper: {\n        niceType: \"Hiper\",\n        type: \"hiper\",\n        patterns: [637095, 63737423, 63743358, 637568, 637599, 637609, 637612],\n        gaps: [4, 8, 12],\n        lengths: [16],\n        code: {\n            name: \"CVC\",\n            size: 3,\n        },\n    },\n    hipercard: {\n        niceType: \"Hipercard\",\n        type: \"hipercard\",\n        patterns: [606282],\n        gaps: [4, 8, 12],\n        lengths: [16],\n        code: {\n            name: \"CVC\",\n            size: 3,\n        },\n    },\n    naranja: {\n        niceType: \"Naranja\",\n        type: \"naranja\",\n        patterns: [589562, 402918, 527572],\n        gaps: [4, 8, 12],\n        lengths: [16],\n        code: {\n            name: \"CVV\",\n            size: 3,\n        },\n    },\n    verve: {\n        niceType: \"Verve\",\n        type: \"verve\",\n        patterns: [\n            [506099, 506127],\n            506129,\n            [506133, 506150],\n            [506158, 506163],\n            506166,\n            506168,\n            506170,\n            506173,\n            [506176, 506180],\n            506184,\n            [506187, 506188],\n            506191,\n            506195,\n            506197,\n            507865,\n            507866,\n            [507868, 507877],\n            [507880, 507888],\n            507900,\n            507941,\n        ],\n        gaps: [4, 8, 12],\n        lengths: [16, 18, 19],\n        code: {\n            name: \"CVV\",\n            size: 3,\n        },\n    },\n};\nmodule.exports = cardTypes;\n\n},{}],48:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.clone = clone;\nfunction clone(originalObject) {\n    if (!originalObject) {\n        return null;\n    }\n    return JSON.parse(JSON.stringify(originalObject));\n}\n\n},{}],49:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.findBestMatch = findBestMatch;\nfunction hasEnoughResultsToDetermineBestMatch(results) {\n    var numberOfResultsWithMaxStrengthProperty = results.filter(function (result) { return result.matchStrength; }).length;\n    /*\n     * if all possible results have a maxStrength property that means the card\n     * number is sufficiently long enough to determine conclusively what the card\n     * type is\n     * */\n    return (numberOfResultsWithMaxStrengthProperty > 0 &&\n        numberOfResultsWithMaxStrengthProperty === results.length);\n}\nfunction findBestMatch(results) {\n    if (!hasEnoughResultsToDetermineBestMatch(results)) {\n        return null;\n    }\n    return results.reduce(function (bestMatch, result) {\n        if (!bestMatch) {\n            return result;\n        }\n        /*\n         * If the current best match pattern is less specific than this result, set\n         * the result as the new best match\n         * */\n        if (Number(bestMatch.matchStrength) < Number(result.matchStrength)) {\n            return result;\n        }\n        return bestMatch;\n    });\n}\n\n},{}],50:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isValidInputType = isValidInputType;\nfunction isValidInputType(cardNumber) {\n    return typeof cardNumber === \"string\" || cardNumber instanceof String;\n}\n\n},{}],51:[function(_dereq_,module,exports){\n\"use strict\";\n/*\n * Adapted from https://github.com/polvo-labs/card-type/blob/aaab11f80fa1939bccc8f24905a06ae3cd864356/src/cardType.js#L37-L42\n * */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.matches = matches;\nfunction matchesRange(cardNumber, min, max) {\n    var maxLengthToCheck = String(min).length;\n    var substr = cardNumber.substr(0, maxLengthToCheck);\n    var integerRepresentationOfCardNumber = parseInt(substr, 10);\n    min = parseInt(String(min).substr(0, substr.length), 10);\n    max = parseInt(String(max).substr(0, substr.length), 10);\n    return (integerRepresentationOfCardNumber >= min &&\n        integerRepresentationOfCardNumber <= max);\n}\nfunction matchesPattern(cardNumber, pattern) {\n    pattern = String(pattern);\n    return (pattern.substring(0, cardNumber.length) ===\n        cardNumber.substring(0, pattern.length));\n}\nfunction matches(cardNumber, pattern) {\n    if (Array.isArray(pattern)) {\n        return matchesRange(cardNumber, pattern[0], pattern[1]);\n    }\n    return matchesPattern(cardNumber, pattern);\n}\n\n},{}],52:[function(_dereq_,module,exports){\n\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nexports.__esModule = true;\nexports.detectIncognito = void 0;\nfunction detectIncognito() {\n    return __awaiter(this, void 0, void 0, function () {\n        return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0: return [4 /*yield*/, new Promise(function (resolve, reject) {\n                        var browserName = 'Unknown';\n                        var callbackSettled = false;\n                        function __callback(isPrivate) {\n                            if (callbackSettled) {\n                                return;\n                            }\n                            callbackSettled = true;\n                            resolve({\n                                isPrivate: isPrivate,\n                                browserName: browserName\n                            });\n                        }\n                        function identifyChromium() {\n                            var ua = navigator.userAgent;\n                            if (ua.match(/Chrome/)) {\n                                if (navigator.brave !== undefined) {\n                                    return 'Brave';\n                                }\n                                else if (ua.match(/Edg/)) {\n                                    return 'Edge';\n                                }\n                                else if (ua.match(/OPR/)) {\n                                    return 'Opera';\n                                }\n                                return 'Chrome';\n                            }\n                            else {\n                                return 'Chromium';\n                            }\n                        }\n                        function assertEvalToString(value) {\n                            try {\n                                return value === eval.toString().length;\n                            }\n                            catch (e) {\n                                return false;\n                            }\n                        }\n                        function feid() {\n                            var toFixedEngineID = 0;\n                            var neg = parseInt(\"-1\");\n                            try {\n                                neg.toFixed(neg);\n                            }\n                            catch (e) {\n                                toFixedEngineID = e.message.length;\n                            }\n                            return toFixedEngineID;\n                        }\n                        function isSafari() {\n                            return feid() === 44;\n                        }\n                        function isChrome() {\n                            return feid() === 51;\n                        }\n                        function isFirefox() {\n                            return feid() === 25;\n                        }\n                        function isMSIE() {\n                            return (navigator.msSaveBlob !== undefined && assertEvalToString(39));\n                        }\n                        /**\n                         * Safari (Safari for iOS & macOS)\n                         **/\n                        function currentSafariTest() {\n                            var _a;\n                            return __awaiter(this, void 0, void 0, function () {\n                                var e_1, message, matchesExpectedError;\n                                return __generator(this, function (_b) {\n                                    switch (_b.label) {\n                                        case 0:\n                                            _b.trys.push([0, 2, , 3]);\n                                            return [4 /*yield*/, navigator.storage.getDirectory()];\n                                        case 1:\n                                            _b.sent();\n                                            __callback(false);\n                                            return [3 /*break*/, 3];\n                                        case 2:\n                                            e_1 = _b.sent();\n                                            message = e_1;\n                                            if (e_1 instanceof Error) {\n                                                message = (_a = e_1.message) !== null && _a !== void 0 ? _a : e_1;\n                                            }\n                                            if (typeof message !== 'string') {\n                                                __callback(false);\n                                                return [2 /*return*/];\n                                            }\n                                            matchesExpectedError = message.includes('unknown transient reason');\n                                            if (matchesExpectedError) {\n                                                __callback(true);\n                                            }\n                                            else {\n                                                __callback(false);\n                                            }\n                                            return [3 /*break*/, 3];\n                                        case 3: return [2 /*return*/];\n                                    }\n                                });\n                            });\n                        }\n                        function safari13to18Test() {\n                            var tmp = String(Math.random());\n                            try {\n                                var dbReq = indexedDB.open(tmp, 1);\n                                dbReq.onupgradeneeded = function (ev) {\n                                    var db = ev.target.result;\n                                    var finish = function (priv) { __callback(priv); };\n                                    try {\n                                        db.createObjectStore('t', { autoIncrement: true }).put(new Blob());\n                                        finish(false);\n                                    }\n                                    catch (err) {\n                                        var msg = err.message || '';\n                                        if (msg.includes('are not yet supported'))\n                                            finish(true);\n                                        else\n                                            finish(false);\n                                    }\n                                    finally {\n                                        db.close();\n                                        indexedDB.deleteDatabase(tmp);\n                                    }\n                                };\n                                dbReq.onerror = function () { return __callback(false); };\n                            }\n                            catch (_a) {\n                                __callback(false);\n                            }\n                        }\n                        function oldSafariTest() {\n                            var openDB = window.openDatabase;\n                            var storage = window.localStorage;\n                            try {\n                                openDB(null, null, null, null);\n                            }\n                            catch (e) {\n                                __callback(true);\n                                return;\n                            }\n                            try {\n                                storage.setItem('test', '1');\n                                storage.removeItem('test');\n                            }\n                            catch (e) {\n                                __callback(true);\n                                return;\n                            }\n                            __callback(false);\n                        }\n                        function safariPrivateTest() {\n                            var _a;\n                            return __awaiter(this, void 0, void 0, function () {\n                                return __generator(this, function (_b) {\n                                    switch (_b.label) {\n                                        case 0:\n                                            if (!(((_a = navigator.storage) === null || _a === void 0 ? void 0 : _a.getDirectory) !== undefined)) return [3 /*break*/, 2];\n                                            return [4 /*yield*/, currentSafariTest()];\n                                        case 1:\n                                            _b.sent();\n                                            return [3 /*break*/, 3];\n                                        case 2:\n                                            if (navigator.maxTouchPoints !== undefined) {\n                                                safari13to18Test();\n                                            }\n                                            else {\n                                                oldSafariTest();\n                                            }\n                                            _b.label = 3;\n                                        case 3: return [2 /*return*/];\n                                    }\n                                });\n                            });\n                        }\n                        /**\n                         * Chrome\n                         **/\n                        function getQuotaLimit() {\n                            var w = window;\n                            if (w.performance !== undefined &&\n                                w.performance.memory !== undefined &&\n                                w.performance.memory.jsHeapSizeLimit !== undefined) {\n                                return performance.memory.jsHeapSizeLimit;\n                            }\n                            return 1073741824;\n                        }\n                        // >= 76\n                        function storageQuotaChromePrivateTest() {\n                            navigator.webkitTemporaryStorage.queryUsageAndQuota(function (_, quota) {\n                                var quotaInMib = Math.round(quota / (1024 * 1024));\n                                var quotaLimitInMib = Math.round(getQuotaLimit() / (1024 * 1024)) * 2;\n                                __callback(quotaInMib < quotaLimitInMib);\n                            }, function (e) {\n                                reject(new Error('detectIncognito somehow failed to query storage quota: ' +\n                                    e.message));\n                            });\n                        }\n                        // 50 to 75\n                        function oldChromePrivateTest() {\n                            var fs = window.webkitRequestFileSystem;\n                            var success = function () {\n                                __callback(false);\n                            };\n                            var error = function () {\n                                __callback(true);\n                            };\n                            fs(0, 1, success, error);\n                        }\n                        function chromePrivateTest() {\n                            if (self.Promise !== undefined && self.Promise.allSettled !== undefined) {\n                                storageQuotaChromePrivateTest();\n                            }\n                            else {\n                                oldChromePrivateTest();\n                            }\n                        }\n                        /**\n                         * Firefox\n                         **/\n                        function firefoxPrivateTest() {\n                            return __awaiter(this, void 0, void 0, function () {\n                                var e_2, message, matchesExpectedError;\n                                return __generator(this, function (_a) {\n                                    switch (_a.label) {\n                                        case 0:\n                                            if (!(navigator.storage && navigator.storage.getDirectory)) return [3 /*break*/, 4];\n                                            _a.label = 1;\n                                        case 1:\n                                            _a.trys.push([1, 3, , 4]);\n                                            return [4 /*yield*/, navigator.storage.getDirectory()];\n                                        case 2:\n                                            _a.sent();\n                                            __callback(false);\n                                            return [3 /*break*/, 4];\n                                        case 3:\n                                            e_2 = _a.sent();\n                                            message = (e_2 instanceof Error && typeof e_2.message === 'string') ? e_2.message : String(e_2);\n                                            if (typeof message !== 'string') {\n                                                __callback(false);\n                                                return [2 /*return*/];\n                                            }\n                                            matchesExpectedError = message.includes('Security error');\n                                            __callback(matchesExpectedError);\n                                            return [2 /*return*/];\n                                        case 4:\n                                            __callback(navigator.serviceWorker === undefined);\n                                            return [2 /*return*/];\n                                    }\n                                });\n                            });\n                        }\n                        /**\n                         * MSIE\n                         **/\n                        function msiePrivateTest() {\n                            __callback(window.indexedDB === undefined);\n                        }\n                        function main() {\n                            return __awaiter(this, void 0, void 0, function () {\n                                return __generator(this, function (_a) {\n                                    switch (_a.label) {\n                                        case 0:\n                                            if (!isSafari()) return [3 /*break*/, 2];\n                                            browserName = 'Safari';\n                                            return [4 /*yield*/, safariPrivateTest()];\n                                        case 1:\n                                            _a.sent();\n                                            return [3 /*break*/, 6];\n                                        case 2:\n                                            if (!isChrome()) return [3 /*break*/, 3];\n                                            browserName = identifyChromium();\n                                            chromePrivateTest();\n                                            return [3 /*break*/, 6];\n                                        case 3:\n                                            if (!isFirefox()) return [3 /*break*/, 5];\n                                            browserName = 'Firefox';\n                                            return [4 /*yield*/, firefoxPrivateTest()];\n                                        case 4:\n                                            _a.sent();\n                                            return [3 /*break*/, 6];\n                                        case 5:\n                                            if (isMSIE()) {\n                                                browserName = 'Internet Explorer';\n                                                msiePrivateTest();\n                                            }\n                                            else {\n                                                reject(new Error('detectIncognito cannot determine the browser'));\n                                            }\n                                            _a.label = 6;\n                                        case 6: return [2 /*return*/];\n                                    }\n                                });\n                            });\n                        }\n                        main()[\"catch\"](reject);\n                    })];\n                case 1: return [2 /*return*/, _a.sent()];\n            }\n        });\n    });\n}\nexports.detectIncognito = detectIncognito;\nif (typeof window !== 'undefined') {\n    window.detectIncognito = detectIncognito;\n}\nexports[\"default\"] = detectIncognito;\n\n},{}],53:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Framebus = void 0;\nvar lib_1 = _dereq_(\"./lib\");\nvar DefaultPromise = (typeof window !== \"undefined\" &&\n    window.Promise);\nvar Framebus = /** @class */ (function () {\n    function Framebus(options) {\n        if (options === void 0) { options = {}; }\n        this.origin = options.origin || \"*\";\n        this.channel = options.channel || \"\";\n        this.verifyDomain = options.verifyDomain;\n        // if a targetFrames configuration is not passed in,\n        // the default behavior is to broadcast the payload\n        // to the top level window or to the frame itself.\n        // By default, the broadcast function will loop through\n        // all the known siblings and children of the window.\n        // If a targetFrames array is passed, it will instead\n        // only broadcast to those specified targetFrames\n        this.targetFrames = options.targetFrames || [];\n        this.limitBroadcastToFramesArray = Boolean(options.targetFrames);\n        this.isDestroyed = false;\n        this.listeners = [];\n        this.hasAdditionalChecksForOnListeners = Boolean(this.verifyDomain || this.limitBroadcastToFramesArray);\n    }\n    Framebus.setPromise = function (PromiseGlobal) {\n        Framebus.Promise = PromiseGlobal;\n    };\n    Framebus.target = function (options) {\n        return new Framebus(options);\n    };\n    Framebus.prototype.addTargetFrame = function (frame) {\n        if (!this.limitBroadcastToFramesArray) {\n            return;\n        }\n        this.targetFrames.push(frame);\n    };\n    Framebus.prototype.include = function (childWindow) {\n        if (childWindow == null) {\n            return false;\n        }\n        if (childWindow.Window == null) {\n            return false;\n        }\n        if (childWindow.constructor !== childWindow.Window) {\n            return false;\n        }\n        lib_1.childWindows.push(childWindow);\n        return true;\n    };\n    Framebus.prototype.target = function (options) {\n        return Framebus.target(options);\n    };\n    Framebus.prototype.emit = function (eventName, data, reply) {\n        if (this.isDestroyed) {\n            return false;\n        }\n        var origin = this.origin;\n        eventName = this.namespaceEvent(eventName);\n        if ((0, lib_1.isntString)(eventName)) {\n            return false;\n        }\n        if ((0, lib_1.isntString)(origin)) {\n            return false;\n        }\n        if (typeof data === \"function\") {\n            reply = data;\n            data = undefined; // eslint-disable-line no-undefined\n        }\n        var payload = (0, lib_1.packagePayload)(eventName, origin, data, reply);\n        if (!payload) {\n            return false;\n        }\n        if (this.limitBroadcastToFramesArray) {\n            this.targetFramesAsWindows().forEach(function (frame) {\n                (0, lib_1.sendMessage)(frame, payload, origin);\n            });\n        }\n        else {\n            (0, lib_1.broadcast)(payload, {\n                origin: origin,\n                frame: window.top || window.self,\n            });\n        }\n        return true;\n    };\n    Framebus.prototype.emitAsPromise = function (eventName, data) {\n        var _this = this;\n        return new Framebus.Promise(function (resolve, reject) {\n            var didAttachListener = _this.emit(eventName, data, function (payload) {\n                resolve(payload);\n            });\n            if (!didAttachListener) {\n                reject(new Error(\"Listener not added for \\\"\".concat(eventName, \"\\\"\")));\n            }\n        });\n    };\n    Framebus.prototype.on = function (eventName, originalHandler) {\n        if (this.isDestroyed) {\n            return false;\n        }\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        var self = this;\n        var origin = this.origin;\n        var handler = originalHandler;\n        eventName = this.namespaceEvent(eventName);\n        if ((0, lib_1.subscriptionArgsInvalid)(eventName, handler, origin)) {\n            return false;\n        }\n        if (this.hasAdditionalChecksForOnListeners) {\n            /* eslint-disable no-invalid-this, @typescript-eslint/ban-ts-comment */\n            handler = function () {\n                var args = [];\n                for (var _i = 0; _i < arguments.length; _i++) {\n                    args[_i] = arguments[_i];\n                }\n                // @ts-ignore\n                if (!self.passesVerifyDomainCheck(this && this.origin)) {\n                    return;\n                }\n                // @ts-ignore\n                if (!self.hasMatchingTargetFrame(this && this.source)) {\n                    return;\n                }\n                originalHandler.apply(void 0, args);\n            };\n            /* eslint-enable no-invalid-this, @typescript-eslint/ban-ts-comment */\n        }\n        this.listeners.push({\n            eventName: eventName,\n            handler: handler,\n            originalHandler: originalHandler,\n        });\n        lib_1.subscribers[origin] = lib_1.subscribers[origin] || {};\n        lib_1.subscribers[origin][eventName] = lib_1.subscribers[origin][eventName] || [];\n        lib_1.subscribers[origin][eventName].push(handler);\n        return true;\n    };\n    Framebus.prototype.off = function (eventName, originalHandler) {\n        var handler = originalHandler;\n        if (this.isDestroyed) {\n            return false;\n        }\n        if (this.hasAdditionalChecksForOnListeners) {\n            for (var i = 0; i < this.listeners.length; i++) {\n                var listener = this.listeners[i];\n                if (listener.originalHandler === originalHandler) {\n                    handler = listener.handler;\n                }\n            }\n        }\n        eventName = this.namespaceEvent(eventName);\n        var origin = this.origin;\n        if ((0, lib_1.subscriptionArgsInvalid)(eventName, handler, origin)) {\n            return false;\n        }\n        var subscriberList = lib_1.subscribers[origin] && lib_1.subscribers[origin][eventName];\n        if (!subscriberList) {\n            return false;\n        }\n        for (var i = 0; i < subscriberList.length; i++) {\n            if (subscriberList[i] === handler) {\n                subscriberList.splice(i, 1);\n                return true;\n            }\n        }\n        return false;\n    };\n    Framebus.prototype.teardown = function () {\n        if (this.isDestroyed) {\n            return;\n        }\n        this.isDestroyed = true;\n        for (var i = 0; i < this.listeners.length; i++) {\n            var listener = this.listeners[i];\n            this.off(listener.eventName, listener.handler);\n        }\n        this.listeners.length = 0;\n    };\n    Framebus.prototype.passesVerifyDomainCheck = function (origin) {\n        if (!this.verifyDomain) {\n            // always pass this check if no verifyDomain option was set\n            return true;\n        }\n        return this.checkOrigin(origin);\n    };\n    Framebus.prototype.targetFramesAsWindows = function () {\n        if (!this.limitBroadcastToFramesArray) {\n            return [];\n        }\n        return this.targetFrames\n            .map(function (frame) {\n            // we can't pull off the contentWindow\n            // when the iframe is originally added\n            // to the array, because if it is not\n            // in the DOM at that time, it will have\n            // a contentWindow of `null`\n            if (frame instanceof HTMLIFrameElement) {\n                return frame.contentWindow;\n            }\n            return frame;\n        })\n            .filter(function (win) {\n            // just in case an iframe element\n            // was removed from the DOM\n            // and the contentWindow property\n            // is null\n            return win;\n        });\n    };\n    Framebus.prototype.hasMatchingTargetFrame = function (source) {\n        if (!this.limitBroadcastToFramesArray) {\n            // always pass this check if we aren't limiting to the target frames\n            return true;\n        }\n        var matchingFrame = this.targetFramesAsWindows().find(function (frame) {\n            return frame === source;\n        });\n        return Boolean(matchingFrame);\n    };\n    Framebus.prototype.checkOrigin = function (postMessageOrigin) {\n        var merchantHost;\n        var a = document.createElement(\"a\");\n        a.href = location.href;\n        if (a.protocol === \"https:\") {\n            merchantHost = a.host.replace(/:443$/, \"\");\n        }\n        else if (a.protocol === \"http:\") {\n            merchantHost = a.host.replace(/:80$/, \"\");\n        }\n        else {\n            merchantHost = a.host;\n        }\n        var merchantOrigin = a.protocol + \"//\" + merchantHost;\n        if (merchantOrigin === postMessageOrigin) {\n            return true;\n        }\n        if (this.verifyDomain) {\n            return this.verifyDomain(postMessageOrigin);\n        }\n        return true;\n    };\n    Framebus.prototype.namespaceEvent = function (eventName) {\n        if (!this.channel) {\n            return eventName;\n        }\n        return \"\".concat(this.channel, \":\").concat(eventName);\n    };\n    Framebus.Promise = DefaultPromise;\n    return Framebus;\n}());\nexports.Framebus = Framebus;\n\n},{\"./lib\":61}],54:[function(_dereq_,module,exports){\n\"use strict\";\nvar lib_1 = _dereq_(\"./lib\");\nvar framebus_1 = _dereq_(\"./framebus\");\n(0, lib_1.attach)();\nmodule.exports = framebus_1.Framebus;\n\n},{\"./framebus\":53,\"./lib\":61}],55:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.detach = exports.attach = void 0;\nvar _1 = _dereq_(\"./\");\nvar isAttached = false;\nfunction attach() {\n    if (isAttached || typeof window === \"undefined\") {\n        return;\n    }\n    isAttached = true;\n    window.addEventListener(\"message\", _1.onMessage, false);\n}\nexports.attach = attach;\n// removeIf(production)\nfunction detach() {\n    isAttached = false;\n    window.removeEventListener(\"message\", _1.onMessage, false);\n}\nexports.detach = detach;\n// endRemoveIf(production)\n\n},{\"./\":61}],56:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.broadcastToChildWindows = void 0;\nvar _1 = _dereq_(\"./\");\nfunction broadcastToChildWindows(payload, origin, source) {\n    for (var i = _1.childWindows.length - 1; i >= 0; i--) {\n        var childWindow = _1.childWindows[i];\n        if (childWindow.closed) {\n            _1.childWindows.splice(i, 1);\n        }\n        else if (source !== childWindow) {\n            (0, _1.broadcast)(payload, {\n                origin: origin,\n                frame: childWindow.top,\n            });\n        }\n    }\n}\nexports.broadcastToChildWindows = broadcastToChildWindows;\n\n},{\"./\":61}],57:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.broadcast = void 0;\nvar _1 = _dereq_(\"./\");\nfunction broadcast(payload, options) {\n    var i = 0;\n    var frameToBroadcastTo;\n    var origin = options.origin, frame = options.frame;\n    try {\n        frame.postMessage(payload, origin);\n        if ((0, _1.hasOpener)(frame) && frame.opener.top !== window.top) {\n            broadcast(payload, {\n                origin: origin,\n                frame: frame.opener.top,\n            });\n        }\n        // previously, our max value was frame.frames.length\n        // but frames.length inherits from window.length\n        // which can be overwritten if a developer does\n        // `var length = value;` outside of a function\n        // scope, it'll prevent us from looping through\n        // all the frames. With this, we loop through\n        // until there are no longer any frames\n        // eslint-disable-next-line no-cond-assign\n        while ((frameToBroadcastTo = frame.frames[i])) {\n            broadcast(payload, {\n                origin: origin,\n                frame: frameToBroadcastTo,\n            });\n            i++;\n        }\n    }\n    catch (_) {\n        /* ignored */\n    }\n}\nexports.broadcast = broadcast;\n\n},{\"./\":61}],58:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.subscribers = exports.childWindows = exports.prefix = void 0;\nexports.prefix = \"/*framebus*/\";\nexports.childWindows = [];\nexports.subscribers = {};\n\n},{}],59:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.dispatch = void 0;\nvar _1 = _dereq_(\"./\");\nfunction dispatch(origin, event, data, reply, e) {\n    if (!_1.subscribers[origin]) {\n        return;\n    }\n    if (!_1.subscribers[origin][event]) {\n        return;\n    }\n    var args = [];\n    if (data) {\n        args.push(data);\n    }\n    if (reply) {\n        args.push(reply);\n    }\n    for (var i = 0; i < _1.subscribers[origin][event].length; i++) {\n        _1.subscribers[origin][event][i].apply(e, args);\n    }\n}\nexports.dispatch = dispatch;\n\n},{\"./\":61}],60:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hasOpener = void 0;\nfunction hasOpener(frame) {\n    if (frame.top !== frame) {\n        return false;\n    }\n    if (frame.opener == null) {\n        return false;\n    }\n    if (frame.opener === frame) {\n        return false;\n    }\n    if (frame.opener.closed === true) {\n        return false;\n    }\n    return true;\n}\nexports.hasOpener = hasOpener;\n\n},{}],61:[function(_dereq_,module,exports){\n\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(_dereq_(\"./attach\"), exports);\n__exportStar(_dereq_(\"./broadcast-to-child-windows\"), exports);\n__exportStar(_dereq_(\"./broadcast\"), exports);\n__exportStar(_dereq_(\"./constants\"), exports);\n__exportStar(_dereq_(\"./dispatch\"), exports);\n__exportStar(_dereq_(\"./has-opener\"), exports);\n__exportStar(_dereq_(\"./is-not-string\"), exports);\n__exportStar(_dereq_(\"./message\"), exports);\n__exportStar(_dereq_(\"./package-payload\"), exports);\n__exportStar(_dereq_(\"./send-message\"), exports);\n__exportStar(_dereq_(\"./subscribe-replier\"), exports);\n__exportStar(_dereq_(\"./subscription-args-invalid\"), exports);\n__exportStar(_dereq_(\"./types\"), exports);\n__exportStar(_dereq_(\"./unpack-payload\"), exports);\n\n},{\"./attach\":55,\"./broadcast\":57,\"./broadcast-to-child-windows\":56,\"./constants\":58,\"./dispatch\":59,\"./has-opener\":60,\"./is-not-string\":62,\"./message\":63,\"./package-payload\":64,\"./send-message\":65,\"./subscribe-replier\":66,\"./subscription-args-invalid\":67,\"./types\":68,\"./unpack-payload\":69}],62:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isntString = void 0;\nfunction isntString(str) {\n    return typeof str !== \"string\";\n}\nexports.isntString = isntString;\n\n},{}],63:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.onMessage = void 0;\nvar _1 = _dereq_(\"./\");\nfunction onMessage(e) {\n    if ((0, _1.isntString)(e.data)) {\n        return;\n    }\n    var payload = (0, _1.unpackPayload)(e);\n    if (!payload) {\n        return;\n    }\n    var data = payload.eventData;\n    var reply = payload.reply;\n    (0, _1.dispatch)(\"*\", payload.event, data, reply, e);\n    (0, _1.dispatch)(e.origin, payload.event, data, reply, e);\n    (0, _1.broadcastToChildWindows)(e.data, payload.origin, e.source);\n}\nexports.onMessage = onMessage;\n\n},{\"./\":61}],64:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.packagePayload = void 0;\nvar _1 = _dereq_(\"./\");\nfunction packagePayload(event, origin, data, reply) {\n    var packaged;\n    var payload = {\n        event: event,\n        origin: origin,\n    };\n    if (typeof reply === \"function\") {\n        payload.reply = (0, _1.subscribeReplier)(reply, origin);\n    }\n    payload.eventData = data;\n    try {\n        packaged = _1.prefix + JSON.stringify(payload);\n    }\n    catch (e) {\n        throw new Error(\"Could not stringify event: \".concat(e.message));\n    }\n    return packaged;\n}\nexports.packagePayload = packagePayload;\n\n},{\"./\":61}],65:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sendMessage = void 0;\n/**\n * A basic function for wrapping the sending of postMessages to frames.\n */\nfunction sendMessage(frame, payload, origin) {\n    try {\n        frame.postMessage(payload, origin);\n    }\n    catch (error) {\n        /* ignored */\n    }\n}\nexports.sendMessage = sendMessage;\n\n},{}],66:[function(_dereq_,module,exports){\n\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.subscribeReplier = void 0;\nvar framebus_1 = _dereq_(\"../framebus\");\nvar uuid_1 = __importDefault(_dereq_(\"@braintree/uuid\"));\nfunction subscribeReplier(fn, origin) {\n    var uuid = (0, uuid_1.default)();\n    function replier(data, replyOriginHandler) {\n        fn(data, replyOriginHandler);\n        framebus_1.Framebus.target({\n            origin: origin,\n        }).off(uuid, replier);\n    }\n    framebus_1.Framebus.target({\n        origin: origin,\n    }).on(uuid, replier);\n    return uuid;\n}\nexports.subscribeReplier = subscribeReplier;\n\n},{\"../framebus\":53,\"@braintree/uuid\":39}],67:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.subscriptionArgsInvalid = void 0;\nvar _1 = _dereq_(\"./\");\nfunction subscriptionArgsInvalid(event, fn, origin) {\n    if ((0, _1.isntString)(event)) {\n        return true;\n    }\n    if (typeof fn !== \"function\") {\n        return true;\n    }\n    return (0, _1.isntString)(origin);\n}\nexports.subscriptionArgsInvalid = subscriptionArgsInvalid;\n\n},{\"./\":61}],68:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n\n},{}],69:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.unpackPayload = void 0;\nvar _1 = _dereq_(\"./\");\nfunction unpackPayload(e) {\n    var payload;\n    if (e.data.slice(0, _1.prefix.length) !== _1.prefix) {\n        return false;\n    }\n    try {\n        payload = JSON.parse(e.data.slice(_1.prefix.length));\n    }\n    catch (err) {\n        return false;\n    }\n    if (payload.reply) {\n        var replyOrigin_1 = e.origin;\n        var replySource_1 = e.source;\n        var replyEvent_1 = payload.reply;\n        payload.reply = function reply(replyData) {\n            if (!replySource_1) {\n                return;\n            }\n            var replyPayload = (0, _1.packagePayload)(replyEvent_1, replyOrigin_1, replyData);\n            if (!replyPayload) {\n                return;\n            }\n            replySource_1.postMessage(replyPayload, replyOrigin_1);\n        };\n    }\n    return payload;\n}\nexports.unpackPayload = unpackPayload;\n\n},{\"./\":61}],70:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isIos = exports.isIE9 = exports.isSamsungBrowser = exports.isAndroidChrome = exports.isKitKatWebview = void 0;\n// server side rendering check\nvar UA = (typeof window !== \"undefined\" &&\n    window.navigator &&\n    window.navigator.userAgent);\n// TODO remove this when browser detection is converted to typescript\n/* eslint-disable @typescript-eslint/ban-ts-comment */\n// @ts-ignore\nvar isAndroid = _dereq_(\"@braintree/browser-detection/is-android\");\n// @ts-ignore\nvar isChromeOs = _dereq_(\"@braintree/browser-detection/is-chrome-os\");\n// @ts-ignore\nvar isChrome = _dereq_(\"@braintree/browser-detection/is-chrome\");\n// @ts-ignore\nvar isIos = _dereq_(\"@braintree/browser-detection/is-ios\");\nexports.isIos = isIos;\n// @ts-ignore\nvar isIE9 = _dereq_(\"@braintree/browser-detection/is-ie9\");\nexports.isIE9 = isIE9;\n/* eslint-enable @typescript-eslint/ban-ts-comment */\n// Old Android Webviews used specific versions of Chrome with 0.0.0 as their version suffix\n// https://developer.chrome.com/multidevice/user-agent#webview_user_agent\nvar KITKAT_WEBVIEW_REGEX = /Version\\/\\d\\.\\d* Chrome\\/\\d*\\.0\\.0\\.0/;\nfunction isOldSamsungBrowserOrSamsungWebview(ua) {\n    return !isChrome(ua) && ua.indexOf(\"Samsung\") > -1;\n}\nfunction isKitKatWebview(ua) {\n    if (ua === void 0) { ua = UA; }\n    return isAndroid(ua) && KITKAT_WEBVIEW_REGEX.test(ua);\n}\nexports.isKitKatWebview = isKitKatWebview;\nfunction isAndroidChrome(ua) {\n    if (ua === void 0) { ua = UA; }\n    return (isAndroid(ua) || isChromeOs(ua)) && isChrome(ua);\n}\nexports.isAndroidChrome = isAndroidChrome;\nfunction isSamsungBrowser(ua) {\n    if (ua === void 0) { ua = UA; }\n    return /SamsungBrowser/.test(ua) || isOldSamsungBrowserOrSamsungWebview(ua);\n}\nexports.isSamsungBrowser = isSamsungBrowser;\n\n},{\"@braintree/browser-detection/is-android\":83,\"@braintree/browser-detection/is-chrome\":85,\"@braintree/browser-detection/is-chrome-os\":84,\"@braintree/browser-detection/is-ie9\":86,\"@braintree/browser-detection/is-ios\":87}],71:[function(_dereq_,module,exports){\n\"use strict\";\nvar device_1 = _dereq_(\"./lib/device\");\nmodule.exports = function supportsInputFormatting() {\n    // Digits get dropped in samsung browser\n    return !(0, device_1.isSamsungBrowser)();\n};\n\n},{\"./lib/device\":70}],72:[function(_dereq_,module,exports){\narguments[4][3][0].apply(exports,arguments)\n},{\"dup\":3}],73:[function(_dereq_,module,exports){\narguments[4][4][0].apply(exports,arguments)\n},{\"dup\":4}],74:[function(_dereq_,module,exports){\narguments[4][5][0].apply(exports,arguments)\n},{\"./is-duckduckgo\":75,\"./is-edge\":76,\"./is-opera\":80,\"./is-samsung\":81,\"./is-silk\":82,\"dup\":5}],75:[function(_dereq_,module,exports){\narguments[4][6][0].apply(exports,arguments)\n},{\"dup\":6}],76:[function(_dereq_,module,exports){\narguments[4][7][0].apply(exports,arguments)\n},{\"dup\":7}],77:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function isIe9(ua) {\n    ua = ua || window.navigator.userAgent;\n    return ua.indexOf(\"MSIE 9\") !== -1;\n};\n\n},{}],78:[function(_dereq_,module,exports){\narguments[4][15][0].apply(exports,arguments)\n},{\"./is-ipados\":79,\"dup\":15}],79:[function(_dereq_,module,exports){\narguments[4][16][0].apply(exports,arguments)\n},{\"dup\":16}],80:[function(_dereq_,module,exports){\narguments[4][17][0].apply(exports,arguments)\n},{\"dup\":17}],81:[function(_dereq_,module,exports){\narguments[4][19][0].apply(exports,arguments)\n},{\"dup\":19}],82:[function(_dereq_,module,exports){\narguments[4][20][0].apply(exports,arguments)\n},{\"dup\":20}],83:[function(_dereq_,module,exports){\narguments[4][22][0].apply(exports,arguments)\n},{\"./dist/is-android\":72,\"dup\":22}],84:[function(_dereq_,module,exports){\narguments[4][23][0].apply(exports,arguments)\n},{\"./dist/is-chrome-os\":73,\"dup\":23}],85:[function(_dereq_,module,exports){\narguments[4][24][0].apply(exports,arguments)\n},{\"./dist/is-chrome\":74,\"dup\":24}],86:[function(_dereq_,module,exports){\nmodule.exports = _dereq_(\"./dist/is-ie9\");\n\n},{\"./dist/is-ie9\":77}],87:[function(_dereq_,module,exports){\narguments[4][30][0].apply(exports,arguments)\n},{\"./dist/is-ios\":78,\"dup\":30}],88:[function(_dereq_,module,exports){\nmodule.exports = _dereq_(\"./dist/supports-input-formatting\");\n\n},{\"./dist/supports-input-formatting\":71}],89:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar errors = _dereq_(\"./errors\");\nvar assign = _dereq_(\"../lib/assign\").assign;\nvar methods = _dereq_(\"../lib/methods\");\nvar convertMethodsToError = _dereq_(\"../lib/convert-methods-to-error\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\n\n/**\n * @class\n * @param {object} options Options\n * @description <strong>You cannot use this constructor directly. Use {@link module:braintree-web/american-express.create|braintree.american-express.create} instead.</strong>\n * @classdesc This class allows you use a nonce to interact with American Express Checkout. To accept American Express cards, use Hosted Fields.\n */\nfunction AmericanExpress(options) {\n  this._client = options.client;\n}\n\n/**\n * Gets the rewards balance associated with a Braintree nonce.\n * @public\n * @param {object} options Request options\n * @param {string} options.nonce An existing Braintree nonce.\n * @param {callback} [callback] The second argument, <code>data</code>, is the returned server data. If no callback is provided, `getRewardsBalance` returns a promise that resolves with the server data.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * var americanExpress = require('braintree-web/american-express');\n *\n * americanExpress.create({client: clientInstance}, function (createErr, americanExpressInstance) {\n *   var options = {nonce: existingBraintreeNonce};\n *   americanExpressInstance.getRewardsBalance(options, function (getErr, payload) {\n *     if (getErr || payload.error) {\n *       // Handle error\n *       return;\n *     }\n *\n *     console.log('Rewards amount: ' + payload.rewardsAmount);\n *   });\n * });\n */\nAmericanExpress.prototype.getRewardsBalance = function (options) {\n  var nonce = options.nonce;\n  var data;\n\n  if (!nonce) {\n    return Promise.reject(\n      new BraintreeError({\n        type: errors.AMEX_NONCE_REQUIRED.type,\n        code: errors.AMEX_NONCE_REQUIRED.code,\n        message: \"getRewardsBalance must be called with a nonce.\",\n      })\n    );\n  }\n\n  data = assign(\n    {\n      _meta: { source: \"american-express\" },\n      paymentMethodNonce: nonce,\n    },\n    options\n  );\n\n  delete data.nonce;\n\n  return this._client\n    .request({\n      method: \"get\",\n      endpoint: \"payment_methods/amex_rewards_balance\",\n      data: data,\n    })\n    .catch(function (err) {\n      return Promise.reject(\n        new BraintreeError({\n          type: errors.AMEX_NETWORK_ERROR.type,\n          code: errors.AMEX_NETWORK_ERROR.code,\n          message:\n            \"A network error occurred when getting the American Express rewards balance.\",\n          details: {\n            originalError: err,\n          },\n        })\n      );\n    });\n};\n\n/**\n * Gets the Express Checkout nonce profile given a nonce from American Express.\n * @public\n * @param {object} options Request options\n * @param {string} options.nonce An existing nonce from American Express (note that this is <em>not</em> a nonce from Braintree).\n * @param {callback} [callback] The second argument, <code>data</code>, is the returned server data. If no callback is provided, `getExpressCheckoutProfile` returns a promise that resolves with the server data.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * var americanExpress = require('braintree-web/american-express');\n *\n * americanExpress.create({client: clientInstance}, function (createErr, americanExpressInstance) {\n *   var options = {nonce: existingAmericanExpressNonce};\n *   americanExpressInstance.getExpressCheckoutProfile(options, function (getErr, payload) {\n *     if (getErr) {\n *       // Handle error\n *       return;\n *     }\n *\n *     console.log('Number of cards: ' + payload.amexExpressCheckoutCards.length);\n *   });\n * });\n */\nAmericanExpress.prototype.getExpressCheckoutProfile = function (options) {\n  if (!options.nonce) {\n    return Promise.reject(\n      new BraintreeError({\n        type: errors.AMEX_NONCE_REQUIRED.type,\n        code: errors.AMEX_NONCE_REQUIRED.code,\n        message: \"getExpressCheckoutProfile must be called with a nonce.\",\n      })\n    );\n  }\n\n  return this._client\n    .request({\n      method: \"get\",\n      endpoint: \"payment_methods/amex_express_checkout_cards/\" + options.nonce,\n      data: {\n        _meta: { source: \"american-express\" },\n        paymentMethodNonce: options.nonce,\n      },\n    })\n    .catch(function (err) {\n      return Promise.reject(\n        new BraintreeError({\n          type: errors.AMEX_NETWORK_ERROR.type,\n          code: errors.AMEX_NETWORK_ERROR.code,\n          message:\n            \"A network error occurred when getting the American Express Checkout nonce profile.\",\n          details: {\n            originalError: err,\n          },\n        })\n      );\n    });\n};\n\n/**\n * Cleanly tear down anything set up by {@link module:braintree-web/american-express.create|create}.\n * @public\n * @param {callback} [callback] Called once teardown is complete. No data is returned if teardown completes successfully.\n * @example\n * americanExpressInstance.teardown();\n * @example <caption>With callback</caption>\n * americanExpressInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nAmericanExpress.prototype.teardown = function () {\n  convertMethodsToError(this, methods(AmericanExpress.prototype));\n\n  return Promise.resolve();\n};\n\nmodule.exports = wrapPromise.wrapPrototype(AmericanExpress);\n\n},{\"../lib/assign\":146,\"../lib/braintree-error\":149,\"../lib/convert-methods-to-error\":151,\"../lib/methods\":182,\"./errors\":90,\"@braintree/wrap-promise\":43}],90:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.American Express - getRewardsBalance Error Codes\n * @description Errors that occur when creating components.\n * @property {MERCHANT} AMEX_NONCE_REQUIRED Occurs when a nonce is not provided to method.\n * @property {NETWORK} AMEX_NETWORK_ERROR Occurs when there is an error communicating with the Braintree gateway.\n */\n\n/**\n * @name BraintreeError.American Express - getExpressCheckoutProfile Error Codes\n * @description Errors that occur when creating components.\n * @property {MERCHANT} AMEX_NONCE_REQUIRED Occurs when a nonce is not provided to method.\n * @property {NETWORK} AMEX_NETWORK_ERROR Occurs when there is an error communicating with the Braintree gateway.\n */\n\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\n\nmodule.exports = {\n  AMEX_NONCE_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"AMEX_NONCE_REQUIRED\",\n  },\n  AMEX_NETWORK_ERROR: {\n    type: BraintreeError.types.NETWORK,\n    code: \"AMEX_NETWORK_ERROR\",\n  },\n};\n\n},{\"../lib/braintree-error\":149}],91:[function(_dereq_,module,exports){\n\"use strict\";\n/**\n * @module braintree-web/american-express\n * @description This module is for use with Amex Express Checkout. To accept American Express cards, use Hosted Fields.\n */\n\nvar AmericanExpress = _dereq_(\"./american-express\");\nvar basicComponentVerification = _dereq_(\"../lib/basic-component-verification\");\nvar createDeferredClient = _dereq_(\"../lib/create-deferred-client\");\nvar createAssetsUrl = _dereq_(\"../lib/create-assets-url\");\nvar VERSION = \"3.145.0\";\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {callback} [callback] The second argument, `data`, is the {@link AmericanExpress} instance. If no callback is provided, `create` returns a promise that resolves with the {@link AmericanExpress} instance.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nfunction create(options) {\n  var name = \"American Express\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      return createDeferredClient.create({\n        authorization: options.authorization,\n        client: options.client,\n        debug: options.debug,\n        assetsUrl: createAssetsUrl.create(options.authorization),\n        name: name,\n      });\n    })\n    .then(function (client) {\n      options.client = client;\n\n      return new AmericanExpress(options);\n    });\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `{@pkg version}`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/basic-component-verification\":147,\"../lib/create-assets-url\":153,\"../lib/create-deferred-client\":155,\"./american-express\":89,\"@braintree/wrap-promise\":43}],92:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar analytics = _dereq_(\"../lib/analytics\");\nvar errors = _dereq_(\"./errors\");\nvar methods = _dereq_(\"../lib/methods\");\nvar convertMethodsToError = _dereq_(\"../lib/convert-methods-to-error\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar inIframe = _dereq_(\"../lib/in-iframe\");\n\n/**\n * @typedef {object} ApplePay~tokenizePayload\n * @property {string} nonce The payment method nonce.\n * @property {object} details Additional details.\n * @property {string} details.cardType Type of card, ex: Visa, MasterCard.\n * @property {string} details.cardHolderName The name of the card holder.\n * @property {string} details.dpanLastTwo Last two digits of card number.\n * @property {boolean} details.isDeviceToken Whether this tokenized card is a\n * device-specific account number (DPAN) ('true') or merchant/cloud token (MPAN) ('false').\n * @property {string} description A human-readable description.\n * @property {string} type The payment method type, always `ApplePayCard`.\n * @property {object} binData Information about the card based on the bin.\n * @property {string} binData.commercial Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.countryOfIssuance The country of issuance.\n * @property {string} binData.debit Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.durbinRegulated Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.healthcare Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.issuingBank The issuing bank.\n * @property {string} binData.payroll Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.prepaid Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.productId The product id.\n * @property {string} binData.business Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.consumer Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.purchase Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.corporate Possible values: 'Yes', 'No', 'Unknown'.\n */\n\n/**\n * An Apple Pay Payment Authorization Event object.\n * @typedef {object} ApplePayPaymentAuthorizedEvent\n * @external ApplePayPaymentAuthorizedEvent\n * @see {@link https://developer.apple.com/reference/applepayjs/applepaypaymentauthorizedevent ApplePayPaymentAuthorizedEvent}\n */\n\n/**\n * An Apple Pay Payment Request object.\n * @typedef {object} ApplePayPaymentRequest\n * @external ApplePayPaymentRequest\n * @see {@link https://developer.apple.com/reference/applepayjs/1916082-applepay_js_data_types/paymentrequest PaymentRequest}\n */\n\n/**\n * @class\n * @param {object} options Options\n * @description <strong>You cannot use this constructor directly. Use {@link module:braintree-web/apple-pay.create|braintree.applePay.create} instead.</strong>\n * @classdesc This class represents an Apple Pay component. Instances of this class have methods for validating the merchant server and tokenizing payments.\n */\nfunction ApplePay(options) {\n  this._instantiatedWithClient = Boolean(!options.useDeferredClient);\n  this._client = options.client;\n  this._createPromise = options.createPromise;\n\n  if (this._client) {\n    this._setMerchantIdentifier();\n  }\n}\n\nApplePay.prototype._waitForClient = function () {\n  if (this._client) {\n    return Promise.resolve();\n  }\n\n  return this._createPromise.then(\n    function (client) {\n      this._client = client;\n\n      this._setMerchantIdentifier();\n    }.bind(this)\n  );\n};\n\nApplePay.prototype._setMerchantIdentifier = function () {\n  var applePayConfig =\n    this._client.getConfiguration().gatewayConfiguration.applePayWeb;\n\n  if (!applePayConfig) {\n    return;\n  }\n  /**\n   * @name ApplePay#merchantIdentifier\n   * @description A special merchant ID which represents the merchant association with Braintree. Required when using `ApplePaySession.canMakePaymentsWithActiveCard`.\n   * @example\n   * var promise = ApplePaySession.canMakePaymentsWithActiveCard(applePayInstance.merchantIdentifier);\n   * promise.then(function (canMakePaymentsWithActiveCard) {\n   *   if (canMakePaymentsWithActiveCard) {\n   *     // Set up Apple Pay buttons\n   *   }\n   * });\n   */\n  Object.defineProperty(this, \"merchantIdentifier\", {\n    value: applePayConfig.merchantIdentifier,\n    configurable: false,\n    writable: false,\n  });\n};\n\n/**\n * Merges a payment request with Braintree defaults to return an {external:ApplePayPaymentRequest}.\n *\n * The following properties are assigned to `paymentRequest` if not already defined. Their default values come from the Braintree gateway.\n * - `countryCode`\n * - `currencyCode`\n * - `merchantCapabilities`\n * - `supportedNetworks`\n * @public\n * @param {external:ApplePayPaymentRequest} paymentRequest The payment request details to apply on top of those from Braintree.\n * @returns {external:ApplePayPaymentRequest|Promise} The decorated `paymentRequest` object. If `useDeferredClient` is used along with an `authorization`, this method will return a promise that resolves with the `paymentRequest` object.\n * @example\n * var applePay = require('braintree-web/apple-pay');\n *\n * applePay.create({client: clientInstance}, function (applePayErr, applePayInstance) {\n *   if (applePayErr) {\n *     // Handle error here\n *     return;\n *   }\n *\n *   var paymentRequest = applePayInstance.createPaymentRequest({\n *     total: {\n *       label: 'My Company',\n *       amount: '19.99'\n *     }\n *   });\n *\n *   var session = new ApplePaySession(3, paymentRequest);\n *\n *   // ...\n * @example <caption>With deferred client</caption>\n * var applePay = require('braintree-web/apple-pay');\n *\n * applePay.create({\n *   authorization: 'client-token-or-tokenization-key',\n *   useDeferredClient: true\n * }, function (applePayErr, applePayInstance) {\n *   if (applePayErr) {\n *     // Handle error here\n *     return;\n *   }\n *\n *   applePayInstance.createPaymentRequest({\n *     total: {\n *       label: 'My Company',\n *       amount: '19.99'\n *     }\n *   }).then(function (paymentRequest) {\n *     var session = new ApplePaySession(3, paymentRequest);\n *\n *     // ...\n *   });\n */\nApplePay.prototype.createPaymentRequest = function (paymentRequest) {\n  if (this._instantiatedWithClient) {\n    return this._createPaymentRequestSynchronously(paymentRequest);\n  }\n\n  return this._waitForClient().then(\n    function () {\n      return this._createPaymentRequestSynchronously(paymentRequest);\n    }.bind(this)\n  );\n};\n\nApplePay.prototype._createPaymentRequestSynchronously = function (\n  paymentRequest\n) {\n  var applePay =\n    this._client.getConfiguration().gatewayConfiguration.applePayWeb;\n  var defaults = {\n    countryCode: applePay.countryCode,\n    currencyCode: applePay.currencyCode,\n    merchantCapabilities: applePay.merchantCapabilities || [\"supports3DS\"],\n    supportedNetworks: applePay.supportedNetworks.map(function (network) {\n      return network === \"mastercard\" ? \"masterCard\" : network;\n    }),\n  };\n\n  return Object.assign({}, defaults, paymentRequest);\n};\n\n/**\n * Validates your merchant website, as required by `ApplePaySession` before payment can be authorized.\n * @public\n * @param {object} options Options\n * @param {string} options.validationURL The validationURL from an `ApplePayValidateMerchantEvent`.\n * @param {string} options.displayName The canonical name for your store. Use a non-localized name. This parameter should be a UTF-8 string that is a maximum of 64 characters. The system may display this name to the user.\n * @param {callback} [callback] The second argument, <code>data</code>, is the Apple Pay merchant session object. If no callback is provided, `performValidation` returns a promise.\n * Pass the merchant session to your Apple Pay session's `completeMerchantValidation` method.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * var applePay = require('braintree-web/apple-pay');\n *\n * applePay.create({client: clientInstance}, function (applePayErr, applePayInstance) {\n *   if (applePayErr) {\n *     // Handle error here\n *     return;\n *   }\n *\n *   var paymentRequest = applePayInstance.createPaymentRequest({\n *     total: {\n *       label: 'My Company',\n *       amount: '19.99'\n *     }\n *   });\n *   var session = new ApplePaySession(3, paymentRequest);\n *\n *   session.onvalidatemerchant = function (event) {\n *     applePayInstance.performValidation({\n *       validationURL: event.validationURL,\n *       displayName: 'My Great Store'\n *     }, function (validationErr, validationData) {\n *       if (validationErr) {\n *         console.error(validationErr);\n *         session.abort();\n *         return;\n *       }\n *\n *       session.completeMerchantValidation(validationData);\n *     });\n *   };\n * });\n */\nApplePay.prototype.performValidation = function (options) {\n  var self = this;\n\n  if (!options || !options.validationURL) {\n    return Promise.reject(\n      new BraintreeError(errors.APPLE_PAY_VALIDATION_URL_REQUIRED)\n    );\n  }\n\n  return this._waitForClient()\n    .then(function () {\n      var applePayWebSession = {\n        validationUrl: options.validationURL,\n        domainName:\n          options.domainName ||\n          (inIframe()\n            ? window.parent.location.hostname\n            : window.location.hostname),\n        merchantIdentifier:\n          options.merchantIdentifier || self.merchantIdentifier,\n      };\n\n      if (options.displayName != null) {\n        applePayWebSession.displayName = options.displayName;\n      }\n\n      return self._client.request({\n        method: \"post\",\n        endpoint: \"apple_pay_web/sessions\",\n        data: {\n          _meta: { source: \"apple-pay\" },\n          applePayWebSession: applePayWebSession,\n        },\n      });\n    })\n    .then(function (response) {\n      analytics.sendEvent(self._client, \"applepay.performValidation.succeeded\");\n\n      return Promise.resolve(response);\n    })\n    .catch(function (err) {\n      analytics.sendEvent(self._client, \"applepay.performValidation.failed\");\n\n      if (err.code === \"CLIENT_REQUEST_ERROR\") {\n        return Promise.reject(\n          new BraintreeError({\n            type: errors.APPLE_PAY_MERCHANT_VALIDATION_FAILED.type,\n            code: errors.APPLE_PAY_MERCHANT_VALIDATION_FAILED.code,\n            message: errors.APPLE_PAY_MERCHANT_VALIDATION_FAILED.message,\n            details: {\n              originalError: err.details.originalError,\n            },\n          })\n        );\n      }\n\n      return Promise.reject(\n        new BraintreeError({\n          type: errors.APPLE_PAY_MERCHANT_VALIDATION_NETWORK.type,\n          code: errors.APPLE_PAY_MERCHANT_VALIDATION_NETWORK.code,\n          message: errors.APPLE_PAY_MERCHANT_VALIDATION_NETWORK.message,\n          details: {\n            originalError: err,\n          },\n        })\n      );\n    });\n};\n\n/**\n * Tokenizes an Apple Pay payment. This will likely be called in your `ApplePaySession`'s `onpaymentauthorized` callback.\n * @public\n * @param {object} options Options\n * @param {object} options.token The `payment.token` property of an {@link external:ApplePayPaymentAuthorizedEvent}.\n * @param {callback} [callback] The second argument, <code>data</code>, is a {@link ApplePay~tokenizePayload|tokenizePayload}. If no callback is provided, `tokenize` returns a promise that resolves with a {@link ApplePay~tokenizePayload|tokenizePayload}.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * var applePay = require('braintree-web/apple-pay');\n *\n * applePay.create({client: clientInstance}, function (applePayErr, applePayInstance) {\n *   if (applePayErr) {\n *     // Handle error here\n *     return;\n *   }\n *\n *   var paymentRequest = applePayInstance.createPaymentRequest({\n *     total: {\n *       label: 'My Company',\n *       amount: '19.99'\n *     }\n *   });\n *   var session = new ApplePaySession(3, paymentRequest);\n *\n *   session.onpaymentauthorized = function (event) {\n *     applePayInstance.tokenize({\n *       token: event.payment.token\n *     }, function (tokenizeErr, tokenizedPayload) {\n *       if (tokenizeErr) {\n *         session.completePayment(ApplePaySession.STATUS_FAILURE);\n *         return;\n *       }\n *       // Send the tokenizedPayload to your server here!\n *\n *       // Once the transaction is complete, call completePayment\n *       // to close the Apple Pay sheet\n *       session.completePayment(ApplePaySession.STATUS_SUCCESS);\n *     });\n *   };\n *\n *   // ...\n * });\n */\nApplePay.prototype.tokenize = function (options) {\n  var self = this;\n\n  if (!options.token) {\n    return Promise.reject(\n      new BraintreeError(errors.APPLE_PAY_PAYMENT_TOKEN_REQUIRED)\n    );\n  }\n\n  return this._waitForClient()\n    .then(function () {\n      return self._client.request({\n        method: \"post\",\n        endpoint: \"payment_methods/apple_payment_tokens\",\n        data: {\n          _meta: {\n            source: \"apple-pay\",\n          },\n          applePaymentToken: Object.assign({}, options.token, {\n            // The gateway requires this key to be base64-encoded.\n            paymentData: btoa(JSON.stringify(options.token.paymentData)),\n          }),\n        },\n      });\n    })\n    .then(function (response) {\n      analytics.sendEvent(self._client, \"applepay.tokenize.succeeded\");\n\n      return Promise.resolve(response.applePayCards[0]);\n    })\n    .catch(function (err) {\n      analytics.sendEvent(self._client, \"applepay.tokenize.failed\");\n\n      return Promise.reject(\n        new BraintreeError({\n          type: errors.APPLE_PAY_TOKENIZATION.type,\n          code: errors.APPLE_PAY_TOKENIZATION.code,\n          message: errors.APPLE_PAY_TOKENIZATION.message,\n          details: {\n            originalError: err,\n          },\n        })\n      );\n    });\n};\n\n/**\n * Cleanly tear down anything set up by {@link module:braintree-web/apple-pay.create|create}.\n * @public\n * @param {callback} [callback] Called once teardown is complete. No data is returned if teardown completes successfully.\n * @example\n * applePayInstance.teardown();\n * @example <caption>With callback</caption>\n * applePayInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nApplePay.prototype.teardown = function () {\n  convertMethodsToError(this, methods(ApplePay.prototype));\n\n  return Promise.resolve();\n};\n\nmodule.exports = wrapPromise.wrapPrototype(ApplePay);\n\n},{\"../lib/analytics\":143,\"../lib/braintree-error\":149,\"../lib/convert-methods-to-error\":151,\"../lib/in-iframe\":176,\"../lib/methods\":182,\"./errors\":93,\"@braintree/wrap-promise\":43}],93:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Apple Pay - Creation Error Codes\n * @description Errors that occur when [creating the Apple Pay component](./module-braintree-web_apple-pay.html#.create).\n * @property {MERCHANT} APPLE_PAY_NOT_ENABLED Occurs when the authorization used is not authorized to process Apple Pay.\n */\n\n/**\n * @name BraintreeError.Apple Pay - performValidation Error Codes\n * @description Errors that occur when [validating](./ApplePay.html#performValidation).\n * @property {MERCHANT} APPLE_PAY_VALIDATION_URL_REQUIRED Occurs when the `validationURL` option is not passed in.\n * @property {MERCHANT} APPLE_PAY_MERCHANT_VALIDATION_FAILED Occurs when the website domain has not been registered in the Braintree control panel.\n * @property {NETWORK} APPLE_PAY_MERCHANT_VALIDATION_NETWORK Occurs when an unknown network error occurs.\n */\n\n/**\n * @name BraintreeError.Apple Pay - tokenize Error Codes\n * @description Errors that occur when [tokenizing](./ApplePay.html#tokenize).\n * @property {MERCHANT} APPLE_PAY_PAYMENT_TOKEN_REQUIRED Occurs when the `token` option is not passed in.\n * @property {NETWORK} APPLE_PAY_TOKENIZATION Occurs when an unknown network error occurs.\n */\n\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\n\nmodule.exports = {\n  APPLE_PAY_NOT_ENABLED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"APPLE_PAY_NOT_ENABLED\",\n    message: \"Apple Pay is not enabled for this merchant.\",\n  },\n  APPLE_PAY_VALIDATION_URL_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"APPLE_PAY_VALIDATION_URL_REQUIRED\",\n    message: \"performValidation must be called with a validationURL.\",\n  },\n  APPLE_PAY_MERCHANT_VALIDATION_NETWORK: {\n    type: BraintreeError.types.NETWORK,\n    code: \"APPLE_PAY_MERCHANT_VALIDATION_NETWORK\",\n    message: \"A network error occurred when validating the Apple Pay merchant.\",\n  },\n  APPLE_PAY_MERCHANT_VALIDATION_FAILED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"APPLE_PAY_MERCHANT_VALIDATION_FAILED\",\n    message:\n      \"Make sure you have registered your domain name in the Braintree Control Panel.\",\n  },\n  APPLE_PAY_PAYMENT_TOKEN_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"APPLE_PAY_PAYMENT_TOKEN_REQUIRED\",\n    message: \"tokenize must be called with a payment token.\",\n  },\n  APPLE_PAY_TOKENIZATION: {\n    type: BraintreeError.types.NETWORK,\n    code: \"APPLE_PAY_TOKENIZATION\",\n    message: \"A network error occurred when processing the Apple Pay payment.\",\n  },\n};\n\n},{\"../lib/braintree-error\":149}],94:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * @module braintree-web/apple-pay\n * @description Accept Apple Pay on the Web. *This component is currently in beta and is subject to change.*\n */\n\nvar ApplePay = _dereq_(\"./apple-pay\");\nvar analytics = _dereq_(\"../lib/analytics\");\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar basicComponentVerification = _dereq_(\"../lib/basic-component-verification\");\nvar createAssetsUrl = _dereq_(\"../lib/create-assets-url\");\nvar createDeferredClient = _dereq_(\"../lib/create-deferred-client\");\nvar errors = _dereq_(\"./errors\");\nvar VERSION = \"3.145.0\";\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {boolean} [options.useDeferredClient] Used in conjunction with `authorization`, allows the Apple Pay instance to be available right away by fetching the client configuration in the background. When this option is used, {@link ApplePay#createPaymentRequest} will return a promise that resolves with the configuration instead of returning synchronously.\n * @param {callback} [callback] The second argument, `data`, is the {@link ApplePay} instance. If no callback is provided, `create` returns a promise that resolves with the {@link ApplePay} instance.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nfunction create(options) {\n  var name = \"Apple Pay\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      var applePayInstance;\n      var createPromise = createDeferredClient\n        .create({\n          authorization: options.authorization,\n          client: options.client,\n          debug: options.debug,\n          assetsUrl: createAssetsUrl.create(options.authorization),\n          name: name,\n        })\n        .then(function (client) {\n          if (!client.getConfiguration().gatewayConfiguration.applePayWeb) {\n            return Promise.reject(\n              new BraintreeError(errors.APPLE_PAY_NOT_ENABLED)\n            );\n          }\n\n          analytics.sendEvent(client, \"applepay.initialized\");\n\n          return client;\n        });\n\n      options.createPromise = createPromise;\n      applePayInstance = new ApplePay(options);\n\n      if (!options.useDeferredClient) {\n        return createPromise.then(function (client) {\n          applePayInstance._client = client;\n\n          return applePayInstance;\n        });\n      }\n\n      return applePayInstance;\n    });\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `{@pkg version}`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/analytics\":143,\"../lib/basic-component-verification\":147,\"../lib/braintree-error\":149,\"../lib/create-assets-url\":153,\"../lib/create-deferred-client\":155,\"./apple-pay\":92,\"./errors\":93,\"@braintree/wrap-promise\":43}],95:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar BRAINTREE_VERSION = _dereq_(\"./constants\").BRAINTREE_VERSION;\n\nvar GraphQL = _dereq_(\"./request/graphql\");\nvar request = _dereq_(\"./request\");\nvar isVerifiedDomain = _dereq_(\"../lib/is-verified-domain\");\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar convertToBraintreeError = _dereq_(\"../lib/convert-to-braintree-error\");\nvar getGatewayConfiguration = _dereq_(\"./get-configuration\").getConfiguration;\nvar createAuthorizationData = _dereq_(\"../lib/create-authorization-data\");\nvar metadata = _dereq_(\"../lib/add-metadata\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar once = _dereq_(\"../lib/once\");\nvar deferred = _dereq_(\"../lib/deferred\");\nvar assign = _dereq_(\"../lib/assign\").assign;\nvar analytics = _dereq_(\"../lib/analytics\");\nvar errors = _dereq_(\"./errors\");\nvar VERSION = _dereq_(\"../lib/constants\").VERSION;\nvar GRAPHQL_URLS = _dereq_(\"../lib/constants\").GRAPHQL_URLS;\nvar methods = _dereq_(\"../lib/methods\");\nvar convertMethodsToError = _dereq_(\"../lib/convert-methods-to-error\");\nvar assets = _dereq_(\"../lib/assets\");\nvar FRAUDNET_FNCLS = _dereq_(\"../lib/constants\").FRAUDNET_FNCLS;\nvar FRAUDNET_SOURCE = _dereq_(\"../lib/constants\").FRAUDNET_SOURCE;\nvar FRAUDNET_URL = _dereq_(\"../lib/constants\").FRAUDNET_URL;\n\nvar cachedClients = {};\n\n/**\n * This object is returned by {@link Client#getConfiguration|getConfiguration}. This information is used extensively by other Braintree modules to properly configure themselves.\n * @typedef {object} Client~configuration\n * @property {object} client The braintree-web/client parameters.\n * @property {string} client.authorization A tokenizationKey or clientToken.\n * @property {object} gatewayConfiguration Gateway-supplied configuration.\n * @property {object} analyticsMetadata Analytics-specific data.\n * @property {string} analyticsMetadata.sessionId Uniquely identifies a browsing session.\n * @property {string} analyticsMetadata.sdkVersion The braintree.js version.\n * @property {string} analyticsMetadata.merchantAppId Identifies the merchant's web app.\n */\n\n/**\n * @class\n * @param {Client~configuration} configuration Options\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/client.create|braintree.client.create} instead.</strong>\n * @classdesc This class is required by many other Braintree components. It serves as the base API layer that communicates with our servers. It is also capable of being used to formulate direct calls to our servers, such as direct credit card tokenization. See {@link Client#request}.\n */\nfunction Client(configuration) {\n  var configurationJSON, gatewayConfiguration;\n\n  configuration = configuration || {};\n\n  configurationJSON = JSON.stringify(configuration);\n  gatewayConfiguration = configuration.gatewayConfiguration;\n\n  if (!gatewayConfiguration) {\n    throw new BraintreeError(errors.CLIENT_MISSING_GATEWAY_CONFIGURATION);\n  }\n\n  [\"assetsUrl\", \"clientApiUrl\", \"configUrl\"].forEach(function (property) {\n    if (\n      property in gatewayConfiguration &&\n      !isVerifiedDomain(gatewayConfiguration[property])\n    ) {\n      throw new BraintreeError({\n        type: errors.CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN.type,\n        code: errors.CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN.code,\n        message: property + \" property is on an invalid domain.\",\n      });\n    }\n  });\n\n  /**\n   * Returns a copy of the configuration values.\n   * @public\n   * @returns {Client~configuration} configuration\n   */\n  this.getConfiguration = function () {\n    return JSON.parse(configurationJSON);\n  };\n\n  this._request = request;\n  this._configuration = this.getConfiguration();\n\n  this._clientApiBaseUrl = gatewayConfiguration.clientApiUrl + \"/v1/\";\n\n  if (gatewayConfiguration.graphQL) {\n    if (!isVerifiedDomain(gatewayConfiguration.graphQL.url)) {\n      throw new BraintreeError({\n        type: errors.CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN.type,\n        code: errors.CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN.code,\n        message: \"graphQL.url property is on an invalid domain.\",\n      });\n    }\n\n    this._graphQL = new GraphQL({\n      graphQL: gatewayConfiguration.graphQL,\n    });\n  }\n}\n\nClient.initialize = function (options) {\n  var clientInstance, authData;\n  var promise = cachedClients[options.authorization];\n\n  if (promise) {\n    analytics.sendEvent(promise, \"custom.client.load.cached\");\n\n    return promise;\n  }\n\n  try {\n    authData = createAuthorizationData(options.authorization);\n    // eslint-disable-next-line no-unused-vars\n  } catch (err) {\n    return Promise.reject(\n      new BraintreeError(errors.CLIENT_INVALID_AUTHORIZATION)\n    );\n  }\n\n  promise = getGatewayConfiguration(authData, options.sessionId).then(\n    function (configuration) {\n      if (options.debug) {\n        configuration.isDebug = true;\n      }\n\n      configuration.authorization = options.authorization;\n\n      clientInstance = new Client(configuration);\n\n      return clientInstance;\n    }\n  );\n\n  cachedClients[options.authorization] = promise;\n\n  analytics.sendEvent(promise, \"custom.client.load.initialized\");\n\n  return promise\n    .then(function (client) {\n      analytics.sendEvent(clientInstance, \"custom.client.load.succeeded\");\n\n      return client;\n    })\n    .catch(function (err) {\n      delete cachedClients[options.authorization];\n\n      return Promise.reject(err);\n    });\n};\n\n// Primarily used for testing the client initalization call\nClient.clearCache = function () {\n  cachedClients = {};\n};\n\nClient.prototype._findOrCreateFraudnetJSON = function (clientMetadataId) {\n  var el = document.querySelector('script[fncls=\"' + FRAUDNET_FNCLS + '\"]');\n  var config, additionalData, authorizationFingerprint, parameters;\n\n  if (!el) {\n    el = document.body.appendChild(document.createElement(\"script\"));\n    el.type = \"application/json\";\n    el.setAttribute(\"fncls\", FRAUDNET_FNCLS);\n  }\n\n  config = this.getConfiguration();\n  additionalData = {\n    rda_tenant: \"bt_card\", // eslint-disable-line camelcase\n    mid: config.gatewayConfiguration.merchantId,\n  };\n  authorizationFingerprint = config.authorizationFingerprint;\n\n  if (authorizationFingerprint) {\n    authorizationFingerprint.split(\"&\").forEach(function (pieces) {\n      var component = pieces.split(\"=\");\n\n      if (component[0] === \"customer_id\" && component.length > 1) {\n        additionalData.cid = component[1];\n      }\n    });\n  }\n\n  parameters = {\n    f: clientMetadataId.substr(0, 32),\n    fp: additionalData,\n    bu: false,\n    s: FRAUDNET_SOURCE,\n  };\n  el.text = JSON.stringify(parameters);\n};\n\n/**\n * Used by other modules to formulate all network requests to the Braintree gateway. It is also capable of being used directly from your own form to tokenize credit card information. However, be sure to satisfy PCI compliance if you use direct card tokenization.\n * @public\n * @param {object} options Request options:\n * @param {string} options.method HTTP method, e.g. \"get\" or \"post\".\n * @param {string} options.endpoint Endpoint path, e.g. \"payment_methods\".\n * @param {object} options.data Data to send with the request.\n * @param {number} [options.timeout=60000] Set a timeout (in milliseconds) for the request.\n * @param {callback} [callback] The second argument, <code>data</code>, is the returned server data.\n * @example\n * <caption>Direct Credit Card Tokenization</caption>\n * var createClient = require('braintree-web/client').create;\n *\n * createClient({\n *   authorization: CLIENT_AUTHORIZATION\n * }, function (createErr, clientInstance) {\n *   var form = document.getElementById('my-form-id');\n *   var data = {\n *     creditCard: {\n *       number: form['cc-number'].value,\n *       cvv: form['cc-cvv'].value,\n *       expirationDate: form['cc-expiration-date'].value,\n *       billingAddress: {\n *         postalCode: form['cc-postal-code'].value\n *       },\n *       options: {\n *         validate: false\n *       }\n *     }\n *   };\n *\n *   // Warning: For a merchant to be eligible for the easiest level of PCI compliance (SAQ A),\n *   // payment fields cannot be hosted on your checkout page.\n *   // For an alternative to the following, use Hosted Fields.\n *   clientInstance.request({\n *     endpoint: 'payment_methods/credit_cards',\n *     method: 'post',\n *     data: data\n *   }, function (requestErr, response) {\n *     // More detailed example of handling API errors: https://codepen.io/braintree/pen/MbwjdM\n *     if (requestErr) { throw new Error(requestErr); }\n *\n *     console.log('Got nonce:', response.creditCards[0].nonce);\n *   });\n * });\n * @example\n * <caption>Tokenizing Fields for AVS Checks</caption>\n * var createClient = require('braintree-web/client').create;\n *\n * createClient({\n *   authorization: CLIENT_AUTHORIZATION\n * }, function (createErr, clientInstance) {\n *   var form = document.getElementById('my-form-id');\n *   var data = {\n *     creditCard: {\n *       number: form['cc-number'].value,\n *       cvv: form['cc-cvv'].value,\n *       expirationDate: form['cc-date'].value,\n *       // The billing address can be checked with AVS rules.\n *       // See: https://articles.braintreepayments.com/support/guides/fraud-tools/basic/avs-cvv-rules\n *       billingAddress: {\n *         postalCode: form['cc-postal-code'].value,\n *         streetAddress: form['cc-street-address'].value,\n *         countryName: form['cc-country-name'].value,\n *         countryCodeAlpha2: form['cc-country-alpha2'].value,\n *         countryCodeAlpha3: form['cc-country-alpha3'].value,\n *         countryCodeNumeric: form['cc-country-numeric'].value\n *       },\n *       options: {\n *         validate: false\n *       }\n *     }\n *   };\n *\n *   // Warning: For a merchant to be eligible for the easiest level of PCI compliance (SAQ A),\n *   // payment fields cannot be hosted on your checkout page.\n *   // For an alternative to the following, use Hosted Fields.\n *   clientInstance.request({\n *     endpoint: 'payment_methods/credit_cards',\n *     method: 'post',\n *     data: data\n *   }, function (requestErr, response) {\n *     // More detailed example of handling API errors: https://codepen.io/braintree/pen/MbwjdM\n *     if (requestErr) { throw new Error(requestErr); }\n *\n *     console.log('Got nonce:', response.creditCards[0].nonce);\n *   });\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nClient.prototype.request = function (options, callback) {\n  var self = this;\n  var requestPromise = new Promise(function (resolve, reject) {\n    var optionName, api, baseUrl, requestOptions;\n    var shouldCollectData = Boolean(\n      options.endpoint === \"payment_methods/credit_cards\" &&\n      self.getConfiguration().gatewayConfiguration.creditCards.collectDeviceData\n    );\n\n    if (options.api !== \"graphQLApi\") {\n      if (!options.method) {\n        optionName = \"options.method\";\n      } else if (!options.endpoint) {\n        optionName = \"options.endpoint\";\n      }\n    }\n\n    if (optionName) {\n      throw new BraintreeError({\n        type: errors.CLIENT_OPTION_REQUIRED.type,\n        code: errors.CLIENT_OPTION_REQUIRED.code,\n        message: optionName + \" is required when making a request.\",\n      });\n    }\n\n    if (\"api\" in options) {\n      api = options.api;\n    } else {\n      api = \"clientApi\";\n    }\n\n    requestOptions = {\n      method: options.method,\n      graphQL: self._graphQL,\n      timeout: options.timeout,\n      metadata: self._configuration.analyticsMetadata,\n    };\n\n    if (api === \"clientApi\") {\n      baseUrl = self._clientApiBaseUrl;\n\n      requestOptions.data = metadata.addMetadata(\n        self._configuration,\n        options.data\n      );\n    } else if (api === \"graphQLApi\") {\n      baseUrl =\n        GRAPHQL_URLS[self._configuration.gatewayConfiguration.environment];\n      options.endpoint = \"\";\n      requestOptions.method = \"post\";\n      requestOptions.data = assign(\n        {\n          clientSdkMetadata: {\n            platform: self._configuration.analyticsMetadata.platform,\n            source: self._configuration.analyticsMetadata.source,\n            integration: self._configuration.analyticsMetadata.integration,\n            sessionId: self._configuration.analyticsMetadata.sessionId,\n            version: VERSION,\n          },\n        },\n        options.data\n      );\n\n      requestOptions.headers = getAuthorizationHeadersForGraphQL(\n        self._configuration\n      );\n    } else {\n      throw new BraintreeError({\n        type: errors.CLIENT_OPTION_INVALID.type,\n        code: errors.CLIENT_OPTION_INVALID.code,\n        message: \"options.api is invalid.\",\n      });\n    }\n\n    requestOptions.url = baseUrl + options.endpoint;\n    requestOptions.sendAnalyticsEvent = function (kind, extraFields) {\n      if (extraFields) {\n        analytics.sendEventPlus(self, kind, extraFields);\n      } else {\n        analytics.sendEvent(self, kind);\n      }\n    };\n\n    self._request(requestOptions, function (err, data, status) {\n      var resolvedData, requestError;\n\n      requestError = formatRequestError(status, err);\n\n      if (requestError) {\n        reject(requestError);\n\n        return;\n      }\n\n      if (api === \"graphQLApi\" && data.errors) {\n        reject(\n          convertToBraintreeError(data.errors, {\n            type: errors.CLIENT_GRAPHQL_REQUEST_ERROR.type,\n            code: errors.CLIENT_GRAPHQL_REQUEST_ERROR.code,\n            message: errors.CLIENT_GRAPHQL_REQUEST_ERROR.message,\n          })\n        );\n\n        return;\n      }\n\n      resolvedData = assign({ _httpStatus: status }, data);\n\n      if (\n        shouldCollectData &&\n        resolvedData.creditCards &&\n        resolvedData.creditCards.length > 0\n      ) {\n        self._findOrCreateFraudnetJSON(resolvedData.creditCards[0].nonce);\n\n        assets.loadScript({\n          src: FRAUDNET_URL,\n          forceScriptReload: true,\n        });\n      }\n      resolve(resolvedData);\n    });\n  });\n\n  if (typeof callback === \"function\") {\n    callback = once(deferred(callback));\n\n    requestPromise\n      .then(function (response) {\n        callback(null, response, response._httpStatus);\n      })\n      .catch(function (err) {\n        var status = err && err.details && err.details.httpStatus;\n\n        callback(err, null, status);\n      });\n\n    return;\n  }\n\n  return requestPromise; // eslint-disable-line consistent-return\n};\n\n// eslint-disable-next-line consistent-return\nfunction formatRequestError(status, err) {\n  var requestError;\n\n  if (status === -1) {\n    requestError = new BraintreeError(errors.CLIENT_REQUEST_TIMEOUT);\n  } else if (status === 401) {\n    requestError = new BraintreeError(errors.CLIENT_AUTHORIZATION_INVALID);\n  } else if (status === 403) {\n    requestError = new BraintreeError(errors.CLIENT_AUTHORIZATION_INSUFFICIENT);\n  } else if (status === 429) {\n    requestError = new BraintreeError(errors.CLIENT_RATE_LIMITED);\n  } else if (status >= 500) {\n    requestError = new BraintreeError(errors.CLIENT_GATEWAY_NETWORK);\n  } else if (status < 200 || status >= 400) {\n    requestError = convertToBraintreeError(err, {\n      type: errors.CLIENT_REQUEST_ERROR.type,\n      code: errors.CLIENT_REQUEST_ERROR.code,\n      message: errors.CLIENT_REQUEST_ERROR.message,\n    });\n  }\n\n  if (requestError) {\n    requestError.details = requestError.details || {};\n    requestError.details.httpStatus = status;\n\n    return requestError;\n  }\n}\n\nClient.prototype.toJSON = function () {\n  return this.getConfiguration();\n};\n\n/**\n * Returns the Client version.\n * @public\n * @returns {String} The created client's version.\n * @example\n * var createClient = require('braintree-web/client').create;\n *\n * createClient({\n *   authorization: CLIENT_AUTHORIZATION\n * }, function (createErr, clientInstance) {\n *   console.log(clientInstance.getVersion()); // Ex: 1.0.0\n * });\n */\nClient.prototype.getVersion = function () {\n  return VERSION;\n};\n\n/**\n * Cleanly tear down anything set up by {@link module:braintree-web/client.create|create}.\n * @public\n * @param {callback} [callback] Called once teardown is complete. No data is returned if teardown completes successfully.\n * @example\n * clientInstance.teardown();\n * @example <caption>With callback</caption>\n * clientInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nClient.prototype.teardown = wrapPromise(function () {\n  var self = this;\n\n  delete cachedClients[self.getConfiguration().authorization];\n  convertMethodsToError(self, methods(Client.prototype));\n\n  return Promise.resolve();\n});\n\nfunction getAuthorizationHeadersForGraphQL(configuration) {\n  var token =\n    configuration.authorizationFingerprint || configuration.authorization;\n\n  return {\n    Authorization: \"Bearer \" + token,\n    \"Braintree-Version\": BRAINTREE_VERSION,\n  };\n}\n\nmodule.exports = Client;\n\n},{\"../lib/add-metadata\":142,\"../lib/analytics\":143,\"../lib/assets\":145,\"../lib/assign\":146,\"../lib/braintree-error\":149,\"../lib/constants\":150,\"../lib/convert-methods-to-error\":151,\"../lib/convert-to-braintree-error\":152,\"../lib/create-authorization-data\":154,\"../lib/deferred\":156,\"../lib/is-verified-domain\":180,\"../lib/methods\":182,\"../lib/once\":183,\"./constants\":96,\"./errors\":97,\"./get-configuration\":98,\"./request\":111,\"./request/graphql\":109,\"@braintree/wrap-promise\":43}],96:[function(_dereq_,module,exports){\n\"use strict\";\n\nmodule.exports = {\n  BRAINTREE_VERSION: \"2018-05-10\",\n};\n\n},{}],97:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Client - Internal Error Codes\n * @ignore\n * @description These codes should never be experienced by the merchant directly.\n * @property {MERCHANT} CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN An error to prevent client creation for domains that are not allowed in the JS.\n * @property {INTERNAL} CLIENT_MISSING_GATEWAY_CONFIGURATION Occurs when the client is created without a gateway configuration. Should never happen.\n */\n\n/**\n * @name BraintreeError.Client - Create Error Codes\n * @description Errors that may occur when [creating the client](./module-braintree-web_client.html#.create)\n * @property {MERCHANT} CLIENT_INVALID_AUTHORIZATION Occurs when client token cannot be parsed.\n */\n\n/**\n * @name BraintreeError.Client - Request Error Codes\n * @description Errors that may occur when [using the request method](./Client.html#request)\n * @property {MERCHANT} CLIENT_OPTION_REQUIRED An option required in the request method was not provided. Usually `options.method` or `options.endpoint`\n * @property {MERCHANT} CLIENT_OPTION_INVALID The request option provided is invalid.\n * @property {MERCHANT} CLIENT_GATEWAY_NETWORK The Braintree gateway could not be contacted.\n * @property {NETWORK} CLIENT_REQUEST_TIMEOUT The request took too long to complete and timed out.\n * @property {NETWORK} CLIENT_REQUEST_ERROR The response from a request had status 400 or greater.\n * @property {NETWORK} CLIENT_GRAPHQL_REQUEST_ERROR The response from a request to GraphQL contained an error.\n * @property {MERCHANT} CLIENT_RATE_LIMITED The response from a request had a status of 429, indicating rate limiting.\n * @property {MERCHANT} CLIENT_AUTHORIZATION_INSUFFICIENT The user associated with the client token or tokenization key does not have permissions to make the request.\n * @property {MERCHANT} CLIENT_AUTHORIZATION_INVALID The provided authorization could not be found. Either the client token has expired and a new client token must be generated or the tokenization key used is set to be inactive or has been deleted.\n */\n\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\n\nmodule.exports = {\n  CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN\",\n  },\n  CLIENT_OPTION_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"CLIENT_OPTION_REQUIRED\",\n  },\n  CLIENT_OPTION_INVALID: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"CLIENT_OPTION_INVALID\",\n  },\n  CLIENT_MISSING_GATEWAY_CONFIGURATION: {\n    type: BraintreeError.types.INTERNAL,\n    code: \"CLIENT_MISSING_GATEWAY_CONFIGURATION\",\n    message: \"Missing gatewayConfiguration.\",\n  },\n  CLIENT_INVALID_AUTHORIZATION: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"CLIENT_INVALID_AUTHORIZATION\",\n    message:\n      \"Authorization is invalid. Make sure your client token or tokenization key is valid.\",\n  },\n  CLIENT_GATEWAY_NETWORK: {\n    type: BraintreeError.types.NETWORK,\n    code: \"CLIENT_GATEWAY_NETWORK\",\n    message: \"Cannot contact the gateway at this time.\",\n  },\n  CLIENT_REQUEST_TIMEOUT: {\n    type: BraintreeError.types.NETWORK,\n    code: \"CLIENT_REQUEST_TIMEOUT\",\n    message: \"Request timed out waiting for a reply.\",\n  },\n  CLIENT_REQUEST_ERROR: {\n    type: BraintreeError.types.NETWORK,\n    code: \"CLIENT_REQUEST_ERROR\",\n    message: \"There was a problem with your request.\",\n  },\n  CLIENT_GRAPHQL_REQUEST_ERROR: {\n    type: BraintreeError.types.NETWORK,\n    code: \"CLIENT_GRAPHQL_REQUEST_ERROR\",\n    message: \"There was a problem with your request.\",\n  },\n  CLIENT_RATE_LIMITED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"CLIENT_RATE_LIMITED\",\n    message: \"You are being rate-limited; please try again in a few minutes.\",\n  },\n  CLIENT_AUTHORIZATION_INSUFFICIENT: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"CLIENT_AUTHORIZATION_INSUFFICIENT\",\n    message: \"The authorization used has insufficient privileges.\",\n  },\n  CLIENT_AUTHORIZATION_INVALID: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"CLIENT_AUTHORIZATION_INVALID\",\n    message:\n      \"Either the client token has expired and a new one should be generated or the tokenization key has been deactivated or deleted.\",\n  },\n};\n\n},{\"../lib/braintree-error\":149}],98:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar request = _dereq_(\"./request\");\nvar uuid = _dereq_(\"@braintree/uuid\");\nvar constants = _dereq_(\"../lib/constants\");\nvar errors = _dereq_(\"./errors\");\nvar GraphQL = _dereq_(\"./request/graphql\");\nvar GRAPHQL_URLS = _dereq_(\"../lib/constants\").GRAPHQL_URLS;\nvar isDateStringBeforeOrOn = _dereq_(\"../lib/is-date-string-before-or-on\");\n\nvar BRAINTREE_VERSION = _dereq_(\"./constants\").BRAINTREE_VERSION;\n\nfunction getConfiguration(authData, inputSessionId) {\n  return new Promise(function (resolve, reject) {\n    var configuration, attrs, configUrl, reqOptions;\n    var sessionId = inputSessionId || uuid();\n    var analyticsMetadata = {\n      merchantAppId: window.location.host,\n      platform: constants.PLATFORM,\n      sdkVersion: constants.VERSION,\n      source: constants.SOURCE,\n      // NEXT_MAJOR_VERSION remove one of these to not duplicate data. Target parity with mobile platforms approach.\n      integration: constants.INTEGRATION,\n      integrationType: constants.INTEGRATION,\n      sessionId: sessionId,\n    };\n\n    attrs = authData.attrs;\n    configUrl = authData.configUrl;\n\n    attrs._meta = analyticsMetadata;\n    attrs.braintreeLibraryVersion = constants.BRAINTREE_LIBRARY_VERSION;\n    attrs.configVersion = \"3\";\n\n    reqOptions = {\n      url: configUrl,\n      method: \"GET\",\n      data: attrs,\n    };\n\n    if (attrs.authorizationFingerprint && authData.graphQL) {\n      if (isDateStringBeforeOrOn(authData.graphQL.date, BRAINTREE_VERSION)) {\n        reqOptions.graphQL = new GraphQL({\n          graphQL: {\n            url: authData.graphQL.url,\n            features: [\"configuration\"],\n          },\n        });\n      }\n\n      reqOptions.metadata = analyticsMetadata;\n    } else if (attrs.tokenizationKey) {\n      reqOptions.graphQL = new GraphQL({\n        graphQL: {\n          url: GRAPHQL_URLS[authData.environment],\n          features: [\"configuration\"],\n        },\n      });\n\n      reqOptions.metadata = analyticsMetadata;\n    }\n\n    request(reqOptions, function (err, response, status) {\n      var errorTemplate;\n\n      if (err) {\n        if (status === 403) {\n          errorTemplate = errors.CLIENT_AUTHORIZATION_INSUFFICIENT;\n        } else if (status === 401) {\n          errorTemplate = errors.CLIENT_AUTHORIZATION_INVALID;\n        } else {\n          errorTemplate = errors.CLIENT_GATEWAY_NETWORK;\n        }\n\n        reject(\n          new BraintreeError({\n            type: errorTemplate.type,\n            code: errorTemplate.code,\n            message: errorTemplate.message,\n            details: {\n              originalError: err,\n            },\n          })\n        );\n\n        return;\n      }\n\n      configuration = {\n        authorizationType: attrs.tokenizationKey\n          ? \"TOKENIZATION_KEY\"\n          : \"CLIENT_TOKEN\",\n        authorizationFingerprint: attrs.authorizationFingerprint,\n        paymentMethodIdJwt: authData.paymentMethodIdJwt,\n        analyticsMetadata: analyticsMetadata,\n        gatewayConfiguration: response,\n      };\n\n      resolve(configuration);\n    });\n  });\n}\n\nmodule.exports = {\n  getConfiguration: wrapPromise(getConfiguration),\n};\n\n},{\"../lib/braintree-error\":149,\"../lib/constants\":150,\"../lib/is-date-string-before-or-on\":177,\"./constants\":96,\"./errors\":97,\"./request\":111,\"./request/graphql\":109,\"@braintree/uuid\":39,\"@braintree/wrap-promise\":43}],99:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar Client = _dereq_(\"./client\");\nvar VERSION = \"3.145.0\";\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar sharedErrors = _dereq_(\"../lib/errors\");\n\n/** @module braintree-web/client */\n\n/**\n * @function create\n * @description This function is the entry point for the <code>braintree.client</code> module. It is used for creating {@link Client} instances that service communication to Braintree servers.\n * @param {object} options Object containing all {@link Client} options:\n * @param {string} options.authorization A tokenizationKey or clientToken.\n * @param {callback} [callback] The second argument, <code>data</code>, is the {@link Client} instance.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * var createClient = require('braintree-web/client').create;\n *\n * createClient({\n *   authorization: CLIENT_AUTHORIZATION\n * }, function (createErr, clientInstance) {\n *   if (createErr) {\n *     if (createErr.code === 'CLIENT_AUTHORIZATION_INVALID') {\n *       // either the client token has expired, and a new one should be generated\n *       // or the tokenization key was deactivated or deleted\n *     } else {\n *       console.log('something went wrong creating the client instance', createErr);\n *     }\n *     return;\n *   }\n *\n *  // set up other components\n * });\n * @static\n */\nfunction create(options) {\n  if (!options.authorization) {\n    return Promise.reject(\n      new BraintreeError({\n        type: sharedErrors.INSTANTIATION_OPTION_REQUIRED.type,\n        code: sharedErrors.INSTANTIATION_OPTION_REQUIRED.code,\n        message:\n          \"options.authorization is required when instantiating a client.\",\n      })\n    );\n  }\n\n  return Client.initialize(options);\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `{@pkg version}`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/braintree-error\":149,\"../lib/errors\":160,\"./client\":95,\"@braintree/wrap-promise\":43}],100:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar querystring = _dereq_(\"../../lib/querystring\");\nvar assign = _dereq_(\"../../lib/assign\").assign;\nvar prepBody = _dereq_(\"./prep-body\");\nvar parseBody = _dereq_(\"./parse-body\");\nvar xhr = _dereq_(\"./xhr\");\nvar isXHRAvailable = xhr.isAvailable;\nvar GraphQLRequest = _dereq_(\"./graphql/request\");\nvar DefaultRequest = _dereq_(\"./default-request\");\n\nvar MAX_TCP_RETRYCOUNT = 1;\nvar TCP_PRECONNECT_BUG_STATUS_CODE = 408;\nvar MERCHANT_ID_PATTERN = /\\/merchants\\/[A-Za-z0-9_-]+\\/client_api/;\nvar THREE_D_SECURE_PAYMENT_METHOD_PATTERN =\n  /payment_methods\\/.*\\/three_d_secure/;\n\nfunction requestShouldRetry(status) {\n  return !status || status === TCP_PRECONNECT_BUG_STATUS_CODE;\n}\n\nfunction sendApiLatencyAnalytics(url, options) {\n  var domain, path, cleanedPath, parsedUrl, normalizedUrl;\n  var analyticsConnectionStartTime, analyticsRequestStartTime, analyticsEndTime;\n  var finalStartTime;\n  var entries, entry;\n\n  try {\n    parsedUrl = new URL(url);\n    domain = parsedUrl.hostname;\n    path = parsedUrl.pathname;\n    // eslint-disable-next-line no-unused-vars\n  } catch (e) {\n    domain = (url.match(/^https?:\\/\\/([^\\/]+)/) || [])[1] || \"\";\n    path = (url.match(/^https?:\\/\\/[^\\/]+(\\/.*)$/) || [])[1] || url;\n  }\n  cleanedPath = path\n    .replace(MERCHANT_ID_PATTERN, \"\")\n    .replace(\n      THREE_D_SECURE_PAYMENT_METHOD_PATTERN,\n      \"payment_methods/three_d_secure\"\n    );\n\n  if (cleanedPath === \"/v1/tracking/batch/events\") {\n    return;\n  }\n\n  // Remove default HTTPS port (:443) to match Performance API entries\n  normalizedUrl = url.replace(/:443(\\/|$)/, \"$1\");\n\n  if (\n    typeof window !== \"undefined\" &&\n    window.performance &&\n    window.performance.getEntriesByName\n  ) {\n    entries = window.performance.getEntriesByName(normalizedUrl);\n    if (entries && entries.length > 0) {\n      entry = entries[entries.length - 1];\n      analyticsConnectionStartTime = entry.connectStart\n        ? Math.round(entry.connectStart)\n        : null;\n      analyticsRequestStartTime = entry.requestStart\n        ? Math.round(entry.requestStart)\n        : null;\n      finalStartTime = Math.round(entry.startTime);\n      analyticsEndTime = Math.round(entry.responseEnd);\n\n      /* eslint-disable camelcase */\n      options.sendAnalyticsEvent(\"core.api-request-latency\", {\n        connect_start_time: analyticsConnectionStartTime,\n        domain: domain,\n        endpoint: cleanedPath,\n        end_time: analyticsEndTime,\n        request_start_time: analyticsRequestStartTime,\n        start_time: finalStartTime,\n      });\n      /* eslint-enable camelcase */\n    }\n  }\n}\n\nfunction graphQLRequestShouldRetryWithClientApi(body) {\n  var errorClass =\n    !body.data &&\n    body.errors &&\n    body.errors[0] &&\n    body.errors[0].extensions &&\n    body.errors[0].extensions.errorClass;\n\n  return errorClass === \"UNKNOWN\" || errorClass === \"INTERNAL\";\n}\n\nfunction _requestWithRetry(options, tcpRetryCount, cb) {\n  var status, resBody, ajaxRequest, body, method, headers, parsedBody;\n  var url = options.url;\n  var graphQL = options.graphQL;\n  var timeout = options.timeout;\n  var req = xhr.getRequestObject();\n  var callback = cb;\n  var isGraphQLRequest = Boolean(\n    graphQL && graphQL.isGraphQLRequest(url, options.data)\n  );\n\n  options.headers = assign(\n    { \"Content-Type\": \"application/json\" },\n    options.headers\n  );\n\n  if (isGraphQLRequest) {\n    ajaxRequest = new GraphQLRequest(options);\n  } else {\n    ajaxRequest = new DefaultRequest(options);\n  }\n\n  url = ajaxRequest.getUrl();\n  body = ajaxRequest.getBody();\n  method = ajaxRequest.getMethod();\n  headers = ajaxRequest.getHeaders();\n\n  if (method === \"GET\") {\n    url = querystring.queryify(url, body);\n    body = null;\n  }\n\n  if (isXHRAvailable) {\n    req.onreadystatechange = function () {\n      if (req.readyState !== 4) {\n        return;\n      }\n\n      if (req.status === 0 && isGraphQLRequest) {\n        // If a merchant experiences a connection\n        // issue to the GraphQL endpoint (possibly\n        // due to a Content Security Policy), retry\n        // the request against the old client API.\n        delete options.graphQL;\n        _requestWithRetry(options, tcpRetryCount, cb);\n\n        return;\n      }\n\n      parsedBody = parseBody(req.responseText);\n      resBody = ajaxRequest.adaptResponseBody(parsedBody);\n      status = ajaxRequest.determineStatus(req.status, parsedBody);\n\n      if (options.sendAnalyticsEvent) {\n        sendApiLatencyAnalytics(url, options);\n      }\n\n      if (status >= 400 || status < 200) {\n        if (\n          isGraphQLRequest &&\n          graphQLRequestShouldRetryWithClientApi(parsedBody)\n        ) {\n          delete options.graphQL;\n          _requestWithRetry(options, tcpRetryCount, cb);\n\n          return;\n        }\n\n        if (tcpRetryCount < MAX_TCP_RETRYCOUNT && requestShouldRetry(status)) {\n          tcpRetryCount++;\n          _requestWithRetry(options, tcpRetryCount, cb);\n\n          return;\n        }\n        callback(resBody || \"error\", null, status || 500);\n      } else {\n        callback(null, resBody, status);\n      }\n    };\n  } else {\n    if (options.headers) {\n      url = querystring.queryify(url, headers);\n    }\n\n    req.onload = function () {\n      callback(null, parseBody(req.responseText), req.status);\n    };\n\n    req.onerror = function () {\n      // XDomainRequest does not report a body or status for errors, so\n      // hardcode to 'error' and 500, respectively\n      callback(\"error\", null, 500);\n    };\n\n    // This must remain for IE9 to work\n    req.onprogress = function () {};\n\n    req.ontimeout = function () {\n      callback(\"timeout\", null, -1);\n    };\n  }\n\n  try {\n    req.open(method, url, true);\n  } catch (requestOpenError) {\n    // If a merchant has a Content Security Policy and they have\n    // not allowed our endpoints, some browsers may\n    // synchronously throw an error. If it is not a GraphQL\n    // request, we throw the error. If it is a GraphQL request\n    // we remove the GraphQL option and try the request against\n    // the old client API.\n    if (!isGraphQLRequest) {\n      throw requestOpenError;\n    }\n\n    delete options.graphQL;\n\n    _requestWithRetry(options, tcpRetryCount, cb);\n\n    return;\n  }\n\n  req.timeout = timeout;\n\n  if (isXHRAvailable) {\n    Object.keys(headers).forEach(function (headerKey) {\n      req.setRequestHeader(headerKey, headers[headerKey]);\n    });\n  }\n\n  try {\n    req.send(prepBody(method, body));\n    // eslint-disable-next-line no-unused-vars\n  } catch (err) {\n    /* ignored */\n  }\n}\n\nfunction request(options, cb) {\n  _requestWithRetry(options, 0, cb);\n}\n\nmodule.exports = {\n  request: request,\n};\n\n},{\"../../lib/assign\":146,\"../../lib/querystring\":184,\"./default-request\":101,\"./graphql/request\":110,\"./parse-body\":112,\"./prep-body\":113,\"./xhr\":114}],101:[function(_dereq_,module,exports){\n\"use strict\";\n\nfunction DefaultRequest(options) {\n  this._url = options.url;\n  this._data = options.data;\n  this._method = options.method;\n  this._headers = options.headers;\n}\n\nDefaultRequest.prototype.getUrl = function () {\n  return this._url;\n};\n\nDefaultRequest.prototype.getBody = function () {\n  return this._data;\n};\n\nDefaultRequest.prototype.getMethod = function () {\n  return this._method;\n};\n\nDefaultRequest.prototype.getHeaders = function () {\n  return this._headers;\n};\n\nDefaultRequest.prototype.adaptResponseBody = function (parsedBody) {\n  return parsedBody;\n};\n\nDefaultRequest.prototype.determineStatus = function (status) {\n  return status;\n};\n\nmodule.exports = DefaultRequest;\n\n},{}],102:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar errorResponseAdapter = _dereq_(\"./error\");\nvar assign = _dereq_(\"../../../../lib/assign\").assign;\n\nvar cardTypeTransforms = {\n  creditCard: {\n    AMERICAN_EXPRESS: \"American Express\",\n    DISCOVER: \"Discover\",\n    INTERNATIONAL_MAESTRO: \"Maestro\",\n    JCB: \"JCB\",\n    MASTERCARD: \"MasterCard\",\n    SOLO: \"Solo\",\n    UK_MAESTRO: \"UK Maestro\",\n    UNION_PAY: \"UnionPay\",\n    VISA: \"Visa\",\n    ELO: \"Elo\",\n    HIPER: \"Hiper\",\n    HIPERCARD: \"Hipercard\",\n  },\n  applePayWeb: {\n    VISA: \"visa\",\n    MASTERCARD: \"mastercard\",\n    DISCOVER: \"discover\",\n    AMERICAN_EXPRESS: \"amex\",\n    INTERNATIONAL_MAESTRO: \"maestro\",\n    ELO: \"elo\",\n  },\n  visaCheckout: {\n    VISA: \"Visa\",\n    MASTERCARD: \"MasterCard\",\n    DISCOVER: \"Discover\",\n    AMERICAN_EXPRESS: \"American Express\",\n  },\n  googlePay: {\n    VISA: \"visa\",\n    MASTERCARD: \"mastercard\",\n    DISCOVER: \"discover\",\n    AMERICAN_EXPRESS: \"amex\",\n    INTERNATIONAL_MAESTRO: \"maestro\",\n    ELO: \"elo\",\n  },\n  masterpass: {\n    VISA: \"visa\",\n    MASTERCARD: \"master\",\n    DISCOVER: \"discover\",\n    AMERICAN_EXPRESS: \"amex\",\n    DINERS: \"diners\",\n    INTERNATIONAL_MAESTRO: \"maestro\",\n    JCB: \"jcb\",\n  },\n};\n\nfunction configurationResponseAdapter(responseBody, ctx) {\n  var adaptedResponse;\n\n  if (responseBody.data && !responseBody.errors) {\n    adaptedResponse = adaptConfigurationResponseBody(responseBody, ctx);\n  } else {\n    adaptedResponse = errorResponseAdapter(responseBody);\n  }\n\n  return adaptedResponse;\n}\n\nfunction adaptConfigurationResponseBody(body, ctx) {\n  var configuration = body.data.clientConfiguration;\n  var response;\n\n  response = {\n    environment: configuration.environment.toLowerCase(),\n    clientApiUrl: configuration.clientApiUrl,\n    assetsUrl: configuration.assetsUrl,\n    analytics: {\n      url: configuration.analyticsUrl,\n    },\n    merchantId: configuration.merchantId,\n    venmo: \"off\",\n  };\n\n  if (configuration.supportedFeatures) {\n    response.graphQL = {\n      url: ctx._graphQL._config.url,\n      features: configuration.supportedFeatures.map(function (feature) {\n        return feature.toLowerCase();\n      }),\n    };\n  }\n\n  if (configuration.braintreeApi) {\n    response.braintreeApi = configuration.braintreeApi;\n  }\n\n  if (configuration.applePayWeb) {\n    response.applePayWeb = configuration.applePayWeb;\n    response.applePayWeb.supportedNetworks = mapCardTypes(\n      configuration.applePayWeb.supportedCardBrands,\n      cardTypeTransforms.applePayWeb\n    );\n\n    delete response.applePayWeb.supportedCardBrands;\n  }\n\n  if (configuration.fastlane) {\n    response.fastlane = configuration.fastlane;\n  }\n\n  if (configuration.ideal) {\n    response.ideal = configuration.ideal;\n  }\n\n  if (configuration.creditCard) {\n    response.challenges = configuration.creditCard.challenges.map(\n      function (challenge) {\n        return challenge.toLowerCase();\n      }\n    );\n\n    response.creditCards = {\n      supportedCardTypes: mapCardTypes(\n        configuration.creditCard.supportedCardBrands,\n        cardTypeTransforms.creditCard\n      ),\n    };\n    response.threeDSecureEnabled = configuration.creditCard.threeDSecureEnabled;\n    response.threeDSecure = configuration.creditCard.threeDSecure;\n  } else {\n    response.challenges = [];\n    response.creditCards = {\n      supportedCardTypes: [],\n    };\n    response.threeDSecureEnabled = false;\n  }\n\n  if (configuration.googlePay) {\n    response.androidPay = {\n      displayName: configuration.googlePay.displayName,\n      enabled: true,\n      environment: configuration.googlePay.environment.toLowerCase(),\n      googleAuthorizationFingerprint:\n        configuration.googlePay.googleAuthorization,\n      paypalClientId: configuration.googlePay.paypalClientId,\n      supportedNetworks: mapCardTypes(\n        configuration.googlePay.supportedCardBrands,\n        cardTypeTransforms.googlePay\n      ),\n    };\n  }\n\n  if (configuration.venmo) {\n    response.payWithVenmo = {\n      merchantId: configuration.venmo.merchantId,\n      accessToken: configuration.venmo.accessToken,\n      environment: configuration.venmo.environment.toLowerCase(),\n      enrichedCustomerDataEnabled:\n        configuration.venmo.enrichedCustomerDataEnabled,\n    };\n  }\n\n  if (configuration.paypal) {\n    response.paypalEnabled = true;\n    response.paypal = assign({}, configuration.paypal);\n    response.paypal.currencyIsoCode = response.paypal.currencyCode;\n    response.paypal.environment = response.paypal.environment.toLowerCase();\n\n    delete response.paypal.currencyCode;\n  } else {\n    response.paypalEnabled = false;\n  }\n\n  if (configuration.unionPay) {\n    response.unionPay = {\n      enabled: true,\n      merchantAccountId: configuration.unionPay.merchantAccountId,\n    };\n  }\n\n  if (configuration.visaCheckout) {\n    response.visaCheckout = {\n      apikey: configuration.visaCheckout.apiKey,\n      encryptionKey: configuration.visaCheckout.encryptionKey,\n      externalClientId: configuration.visaCheckout.externalClientId,\n      supportedCardTypes: mapCardTypes(\n        configuration.visaCheckout.supportedCardBrands,\n        cardTypeTransforms.visaCheckout\n      ),\n    };\n  }\n\n  if (configuration.masterpass) {\n    response.masterpass = {\n      merchantCheckoutId: configuration.masterpass.merchantCheckoutId,\n      supportedNetworks: mapCardTypes(\n        configuration.masterpass.supportedCardBrands,\n        cardTypeTransforms.masterpass\n      ),\n    };\n  }\n\n  if (configuration.usBankAccount) {\n    response.usBankAccount = {\n      routeId: configuration.usBankAccount.routeId,\n      plaid: {\n        publicKey: configuration.usBankAccount.plaidPublicKey,\n      },\n    };\n  }\n\n  if (configuration.openBanking) {\n    response.openBanking = {\n      businessNames: configuration.openBanking.businessNames,\n      allowListedDomains: configuration.openBanking.allowListedDomains,\n      profileId: configuration.openBanking.profileId,\n    };\n  }\n\n  return response;\n}\n\nfunction mapCardTypes(cardTypes, cardTypeTransformMap) {\n  return cardTypes.reduce(function (acc, type) {\n    if (cardTypeTransformMap.hasOwnProperty(type)) {\n      return acc.concat(cardTypeTransformMap[type]);\n    }\n\n    return acc;\n  }, []);\n}\n\nmodule.exports = configurationResponseAdapter;\n\n},{\"../../../../lib/assign\":146,\"./error\":105}],103:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar errorResponseAdapter = _dereq_(\"./error\");\n\nvar CARD_BRAND_MAP = {\n  AMERICAN_EXPRESS: \"American Express\",\n  DINERS: \"Discover\",\n  DISCOVER: \"Discover\",\n  ELO: \"Elo\",\n  HIPER: \"Hiper\",\n  HIPERCARD: \"Hipercard\",\n  INTERNATIONAL_MAESTRO: \"Maestro\",\n  JCB: \"JCB\",\n  MASTERCARD: \"MasterCard\",\n  UK_MAESTRO: \"Maestro\",\n  UNION_PAY: \"UnionPay\",\n  VISA: \"Visa\",\n};\n\nvar BIN_DATA_MAP = {\n  YES: \"Yes\",\n  NO: \"No\",\n  UNKNOWN: \"Unknown\",\n};\n\nvar AUTHENTICATION_INSIGHT_MAP = {\n  PSDTWO: \"psd2\",\n};\n\nfunction creditCardTokenizationFastlaneResponseAdapter(responseBody) {\n  var adaptedResponse;\n\n  if (responseBody.data && !responseBody.errors) {\n    adaptedResponse =\n      adaptTokenizeCreditCardForFastlaneResponseBody(responseBody);\n  } else {\n    adaptedResponse = errorResponseAdapter(responseBody);\n  }\n\n  return adaptedResponse;\n}\n\nfunction adaptTokenizeCreditCardForFastlaneResponseBody(body) {\n  var data = body.data.tokenizeCreditCardForPayPalConnect;\n  var creditCard = data.paymentMethod.details;\n  var lastTwo = creditCard.last4 ? creditCard.last4.substr(2, 4) : \"\";\n  var binData = creditCard.binData;\n  var response, regulationEnvironment;\n\n  if (binData) {\n    [\n      \"commercial\",\n      \"debit\",\n      \"durbinRegulated\",\n      \"healthcare\",\n      \"payroll\",\n      \"prepaid\",\n    ].forEach(function (key) {\n      if (binData[key]) {\n        binData[key] = BIN_DATA_MAP[binData[key]];\n      } else {\n        binData[key] = \"Unknown\";\n      }\n    });\n\n    [\n      \"issuingBank\",\n      \"countryOfIssuance\",\n      \"productId\",\n      \"business\",\n      \"consumer\",\n      \"purchase\",\n      \"corporate\",\n    ].forEach(function (key) {\n      if (!binData[key]) {\n        binData[key] = \"Unknown\";\n      }\n    });\n  }\n\n  response = {\n    creditCards: [\n      {\n        binData: binData,\n        consumed: false,\n        description: lastTwo ? \"ending in \" + lastTwo : \"\",\n        nonce: data.paymentMethod.id,\n        details: {\n          cardholderName: creditCard.cardholderName,\n          expirationMonth: creditCard.expirationMonth,\n          expirationYear: creditCard.expirationYear,\n          bin: creditCard.bin || \"\",\n          cardType: CARD_BRAND_MAP[creditCard.brandCode] || \"Unknown\",\n          lastFour: creditCard.last4 || \"\",\n          lastTwo: lastTwo,\n        },\n        type: \"CreditCard\",\n        threeDSecureInfo: null,\n      },\n    ],\n  };\n\n  if (data.authenticationInsight) {\n    regulationEnvironment =\n      data.authenticationInsight.customerAuthenticationRegulationEnvironment;\n    response.creditCards[0].authenticationInsight = {\n      regulationEnvironment:\n        AUTHENTICATION_INSIGHT_MAP[regulationEnvironment] ||\n        regulationEnvironment.toLowerCase(),\n    };\n  }\n\n  return response;\n}\n\nmodule.exports = creditCardTokenizationFastlaneResponseAdapter;\n\n},{\"./error\":105}],104:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar errorResponseAdapter = _dereq_(\"./error\");\n\nvar CARD_BRAND_MAP = {\n  AMERICAN_EXPRESS: \"American Express\",\n  DINERS: \"Discover\",\n  DISCOVER: \"Discover\",\n  ELO: \"Elo\",\n  HIPER: \"Hiper\",\n  HIPERCARD: \"Hipercard\",\n  INTERNATIONAL_MAESTRO: \"Maestro\",\n  JCB: \"JCB\",\n  MASTERCARD: \"MasterCard\",\n  UK_MAESTRO: \"Maestro\",\n  UNION_PAY: \"UnionPay\",\n  VISA: \"Visa\",\n};\n\nvar BIN_DATA_MAP = {\n  YES: \"Yes\",\n  NO: \"No\",\n  UNKNOWN: \"Unknown\",\n};\n\nvar AUTHENTICATION_INSIGHT_MAP = {\n  PSDTWO: \"psd2\",\n};\n\nfunction creditCardTokenizationResponseAdapter(responseBody) {\n  var adaptedResponse;\n\n  if (responseBody.data && !responseBody.errors) {\n    adaptedResponse = adaptTokenizeCreditCardResponseBody(responseBody);\n  } else {\n    adaptedResponse = errorResponseAdapter(responseBody);\n  }\n\n  return adaptedResponse;\n}\n\nfunction adaptTokenizeCreditCardResponseBody(body) {\n  var data = body.data.tokenizeCreditCard;\n  var creditCard = data.creditCard;\n  var lastTwo = creditCard.last4 ? creditCard.last4.substr(2, 4) : \"\";\n  var binData = creditCard.binData;\n  var response, regulationEnvironment;\n\n  if (binData) {\n    [\n      \"commercial\",\n      \"debit\",\n      \"durbinRegulated\",\n      \"healthcare\",\n      \"payroll\",\n      \"prepaid\",\n    ].forEach(function (key) {\n      if (binData[key]) {\n        binData[key] = BIN_DATA_MAP[binData[key]];\n      } else {\n        binData[key] = \"Unknown\";\n      }\n    });\n\n    [\n      \"issuingBank\",\n      \"countryOfIssuance\",\n      \"productId\",\n      \"business\",\n      \"consumer\",\n      \"purchase\",\n      \"corporate\",\n    ].forEach(function (key) {\n      if (!binData[key]) {\n        binData[key] = \"Unknown\";\n      }\n    });\n  }\n\n  response = {\n    creditCards: [\n      {\n        binData: binData,\n        consumed: false,\n        description: lastTwo ? \"ending in \" + lastTwo : \"\",\n        nonce: data.token,\n        details: {\n          cardholderName: creditCard.cardholderName,\n          expirationMonth: creditCard.expirationMonth,\n          expirationYear: creditCard.expirationYear,\n          bin: creditCard.bin || \"\",\n          cardType: CARD_BRAND_MAP[creditCard.brandCode] || \"Unknown\",\n          lastFour: creditCard.last4 || \"\",\n          lastTwo: lastTwo,\n        },\n        type: \"CreditCard\",\n        threeDSecureInfo: null,\n      },\n    ],\n  };\n\n  if (data.authenticationInsight) {\n    regulationEnvironment =\n      data.authenticationInsight.customerAuthenticationRegulationEnvironment;\n    response.creditCards[0].authenticationInsight = {\n      regulationEnvironment:\n        AUTHENTICATION_INSIGHT_MAP[regulationEnvironment] ||\n        regulationEnvironment.toLowerCase(),\n    };\n  }\n\n  return response;\n}\n\nmodule.exports = creditCardTokenizationResponseAdapter;\n\n},{\"./error\":105}],105:[function(_dereq_,module,exports){\n\"use strict\";\n\nfunction errorResponseAdapter(responseBody) {\n  var response;\n  var errorClass =\n    responseBody.errors &&\n    responseBody.errors[0] &&\n    responseBody.errors[0].extensions &&\n    responseBody.errors[0].extensions.errorClass;\n\n  if (errorClass === \"VALIDATION\") {\n    response = userErrorResponseAdapter(responseBody);\n  } else if (errorClass) {\n    response = errorWithClassResponseAdapter(responseBody);\n  } else {\n    response = {\n      error: { message: \"There was a problem serving your request\" },\n      fieldErrors: [],\n    };\n  }\n\n  return response;\n}\n\nfunction errorWithClassResponseAdapter(responseBody) {\n  return {\n    error: { message: responseBody.errors[0].message },\n    fieldErrors: [],\n  };\n}\n\nfunction userErrorResponseAdapter(responseBody) {\n  var fieldErrors = buildFieldErrors(responseBody.errors);\n\n  if (fieldErrors.length === 0) {\n    return { error: { message: responseBody.errors[0].message } };\n  }\n\n  return {\n    error: { message: getLegacyMessage(fieldErrors) },\n    fieldErrors: fieldErrors,\n  };\n}\n\nfunction buildFieldErrors(errors) {\n  var fieldErrors = [];\n\n  errors.forEach(function (error) {\n    if (!(error.extensions && error.extensions.inputPath)) {\n      return;\n    }\n    addFieldError(error.extensions.inputPath.slice(1), error, fieldErrors);\n  });\n\n  return fieldErrors;\n}\n\nfunction addFieldError(inputPath, errorDetail, fieldErrors) {\n  var fieldError;\n  var legacyCode = errorDetail.extensions.legacyCode;\n  var inputField = inputPath[0];\n\n  if (inputPath.length === 1) {\n    fieldErrors.push({\n      code: legacyCode,\n      field: inputField,\n      message: errorDetail.message,\n    });\n\n    return;\n  }\n\n  fieldErrors.forEach(function (candidate) {\n    if (candidate.field === inputField) {\n      fieldError = candidate;\n    }\n  });\n\n  if (!fieldError) {\n    fieldError = { field: inputField, fieldErrors: [] };\n    fieldErrors.push(fieldError);\n  }\n\n  addFieldError(inputPath.slice(1), errorDetail, fieldError.fieldErrors);\n}\n\nfunction getLegacyMessage(errors) {\n  var legacyMessages = {\n    creditCard: \"Credit card is invalid\",\n  };\n\n  var field = errors[0].field;\n\n  return legacyMessages[field];\n}\n\nmodule.exports = errorResponseAdapter;\n\n},{}],106:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar CONFIGURATION_QUERY =\n  \"query ClientConfiguration { \" +\n  \"  clientConfiguration { \" +\n  \"    analyticsUrl \" +\n  \"    environment \" +\n  \"    merchantId \" +\n  \"    assetsUrl \" +\n  \"    clientApiUrl \" +\n  \"    creditCard { \" +\n  \"      supportedCardBrands \" +\n  \"      challenges \" +\n  \"      threeDSecureEnabled \" +\n  \"      threeDSecure { \" +\n  \"        cardinalAuthenticationJWT \" +\n  \"        cardinalSongbirdUrl \" +\n  \"        cardinalSongbirdIdentityHash \" +\n  \"      } \" +\n  \"    } \" +\n  \"    applePayWeb { \" +\n  \"      countryCode \" +\n  \"      currencyCode \" +\n  \"      merchantIdentifier \" +\n  \"      supportedCardBrands \" +\n  \"    } \" +\n  \"    fastlane { \" +\n  \"      enabled \" +\n  \"      tokensOnDemand { \" +\n  \"        enabled \" +\n  \"        tokenExchange { \" +\n  \"          enabled \" +\n  \"        } \" +\n  \"      } \" +\n  \"    } \" +\n  \"    googlePay { \" +\n  \"      displayName \" +\n  \"      supportedCardBrands \" +\n  \"      environment \" +\n  \"      googleAuthorization \" +\n  \"      paypalClientId \" +\n  \"    } \" +\n  \"    ideal { \" +\n  \"      routeId \" +\n  \"      assetsUrl \" +\n  \"    } \" +\n  \"    masterpass { \" +\n  \"      merchantCheckoutId \" +\n  \"      supportedCardBrands \" +\n  \"    } \" +\n  \"    openBanking { \" +\n  \"      businessNames \" +\n  \"      allowListedDomains \" +\n  \"      profileId \" +\n  \"    } \" +\n  \"    paypal { \" +\n  \"      displayName \" +\n  \"      clientId \" +\n  \"      assetsUrl \" +\n  \"      environment \" +\n  \"      environmentNoNetwork \" +\n  \"      unvettedMerchant \" +\n  \"      braintreeClientId \" +\n  \"      billingAgreementsEnabled \" +\n  \"      merchantAccountId \" +\n  \"      currencyCode \" +\n  \"      payeeEmail \" +\n  \"    } \" +\n  \"    unionPay { \" +\n  \"      merchantAccountId \" +\n  \"    } \" +\n  \"    usBankAccount { \" +\n  \"      routeId \" +\n  \"      plaidPublicKey \" +\n  \"    } \" +\n  \"    venmo { \" +\n  \"      merchantId \" +\n  \"      accessToken \" +\n  \"      environment \" +\n  \"      enrichedCustomerDataEnabled\" +\n  \"    } \" +\n  \"    visaCheckout { \" +\n  \"      apiKey \" +\n  \"      externalClientId \" +\n  \"      supportedCardBrands \" +\n  \"    } \" +\n  \"    braintreeApi { \" +\n  \"      accessToken \" +\n  \"      url \" +\n  \"    } \" +\n  \"    supportedFeatures \" +\n  \"  } \" +\n  \"}\";\n\nfunction configuration() {\n  return {\n    query: CONFIGURATION_QUERY,\n    operationName: \"ClientConfiguration\",\n  };\n}\n\nmodule.exports = configuration;\n\n},{}],107:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar assign = _dereq_(\"../../../../lib/assign\").assign;\n\nfunction createMutation(config) {\n  var hasAuthenticationInsight = config.hasAuthenticationInsight;\n  var mutation =\n    \"mutation TokenizeCreditCardForPayPalConnect($input: TokenizeCreditCardForPayPalConnectInput!\";\n\n  if (hasAuthenticationInsight) {\n    mutation += \", $authenticationInsightInput: AuthenticationInsightInput!\";\n  }\n\n  mutation +=\n    \") { \" +\n    \"  tokenizeCreditCardForPayPalConnect(input: $input) { \" +\n    \"    clientMutationId \" +\n    \"    paymentMethod { \" +\n    \"      id \" +\n    \"      details { \" +\n    \"        ... on CreditCardDetails { \" +\n    \"      bin \" +\n    \"      brandCode \" +\n    \"      last4 \" +\n    \"      cardholderName \" +\n    \"      expirationMonth\" +\n    \"      expirationYear\" +\n    \"      binData { \" +\n    \"        prepaid \" +\n    \"        healthcare \" +\n    \"        debit \" +\n    \"        durbinRegulated \" +\n    \"        commercial \" +\n    \"        payroll \" +\n    \"        issuingBank \" +\n    \"        countryOfIssuance \" +\n    \"        productId \" +\n    \"        business \" +\n    \"        consumer \" +\n    \"        purchase \" +\n    \"        corporate \" +\n    \"      } \" +\n    \"        } \" +\n    \"      } \" +\n    \"    }\";\n\n  if (hasAuthenticationInsight) {\n    mutation +=\n      \"    authenticationInsight(input: $authenticationInsightInput) {\" +\n      \"      customerAuthenticationRegulationEnvironment\" +\n      \"    }\";\n  }\n\n  mutation += \"  } }\";\n\n  return mutation;\n}\n\nfunction createCreditCardForFastlaneTokenizationBody(body, options) {\n  var creditCard = body.creditCard;\n  var fastlane = creditCard.fastlane || {};\n  var termsAndConditionsVersion =\n    \"fastlane\" in creditCard &&\n    \"termsAndConditionsVersion\" in creditCard.fastlane &&\n    creditCard.fastlane.termsAndConditionsVersion;\n  var termsAndConditionsCountry =\n    \"fastlane\" in creditCard &&\n    \"termsAndConditionsCountry\" in creditCard.fastlane &&\n    creditCard.fastlane.termsAndConditionsCountry;\n  var email = creditCard.email;\n  var optIn = \"hasBuyerConsent\" in fastlane && fastlane.hasBuyerConsent;\n  var shippingAddress = creditCard.shippingAddress;\n  var variables = createCreditCardTokenizationBody(body, options);\n\n  var ccpcVariables = assign({}, variables.input, {\n    email: email,\n    optIn: optIn,\n    phone: creditCard.phone,\n  });\n\n  if (termsAndConditionsVersion) {\n    ccpcVariables.termsAndConditionsVersion = termsAndConditionsVersion;\n  }\n\n  if (termsAndConditionsCountry) {\n    ccpcVariables.termsAndConditionsCountry = termsAndConditionsCountry;\n  }\n\n  if (\"authAssertion\" in fastlane) {\n    ccpcVariables.authAssertion = fastlane.authAssertion;\n  }\n\n  if (shippingAddress) {\n    ccpcVariables.shippingAddress = shippingAddress;\n  }\n\n  return { input: ccpcVariables };\n}\n\nfunction createCreditCardTokenizationBody(body, options) {\n  var cc = body.creditCard;\n  var billingAddress = cc && cc.billingAddress;\n  var expDate = cc && cc.expirationDate;\n  var expirationMonth =\n    cc && (cc.expirationMonth || (expDate && expDate.split(\"/\")[0].trim()));\n  var expirationYear =\n    cc && (cc.expirationYear || (expDate && expDate.split(\"/\")[1].trim()));\n  var variables = {\n    input: {\n      creditCard: {\n        number: cc && cc.number,\n        expirationMonth: expirationMonth,\n        expirationYear: expirationYear,\n        cvv: cc && cc.cvv,\n        cardholderName: cc && cc.cardholderName,\n      },\n\n      options: {},\n    },\n  };\n\n  if (options.hasAuthenticationInsight) {\n    variables.authenticationInsightInput = {\n      merchantAccountId: body.merchantAccountId,\n    };\n  }\n\n  if (billingAddress) {\n    variables.input.creditCard.billingAddress = billingAddress;\n  }\n\n  variables.input = addValidationRule(body, variables.input);\n\n  return variables;\n}\n\nfunction addValidationRule(body, input) {\n  var validate;\n\n  if (\n    body.creditCard &&\n    body.creditCard.options &&\n    typeof body.creditCard.options.validate === \"boolean\"\n  ) {\n    validate = body.creditCard.options.validate;\n  } else if (\n    (body.authorizationFingerprint && body.tokenizationKey) ||\n    body.authorizationFingerprint\n  ) {\n    validate = true;\n  } else if (body.tokenizationKey) {\n    validate = false;\n  }\n\n  if (typeof validate === \"boolean\") {\n    input.options = assign(\n      {\n        validate: validate,\n      },\n      input.options\n    );\n  }\n\n  return input;\n}\n\nfunction creditCardForFastlaneTokenization(body) {\n  var options = {\n    hasAuthenticationInsight: Boolean(\n      body.authenticationInsight && body.merchantAccountId\n    ),\n  };\n\n  return {\n    query: createMutation(options),\n    variables: createCreditCardForFastlaneTokenizationBody(body, options),\n    operationName: \"TokenizeCreditCardForPayPalConnect\",\n  };\n}\n\nmodule.exports = creditCardForFastlaneTokenization;\n\n},{\"../../../../lib/assign\":146}],108:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar assign = _dereq_(\"../../../../lib/assign\").assign;\n\nfunction createMutation(config) {\n  var hasAuthenticationInsight = config.hasAuthenticationInsight;\n  var mutation = \"mutation TokenizeCreditCard($input: TokenizeCreditCardInput!\";\n\n  if (hasAuthenticationInsight) {\n    mutation += \", $authenticationInsightInput: AuthenticationInsightInput!\";\n  }\n\n  mutation +=\n    \") { \" +\n    \"  tokenizeCreditCard(input: $input) { \" +\n    \"    token \" +\n    \"    creditCard { \" +\n    \"      bin \" +\n    \"      brandCode \" +\n    \"      last4 \" +\n    \"      cardholderName \" +\n    \"      expirationMonth\" +\n    \"      expirationYear\" +\n    \"      binData { \" +\n    \"        prepaid \" +\n    \"        healthcare \" +\n    \"        debit \" +\n    \"        durbinRegulated \" +\n    \"        commercial \" +\n    \"        payroll \" +\n    \"        issuingBank \" +\n    \"        countryOfIssuance \" +\n    \"        productId \" +\n    \"        business \" +\n    \"        consumer \" +\n    \"        purchase \" +\n    \"        corporate \" +\n    \"      } \" +\n    \"    } \";\n\n  if (hasAuthenticationInsight) {\n    mutation +=\n      \"    authenticationInsight(input: $authenticationInsightInput) {\" +\n      \"      customerAuthenticationRegulationEnvironment\" +\n      \"    }\";\n  }\n\n  mutation += \"  } }\";\n\n  return mutation;\n}\n\nfunction createCreditCardTokenizationBody(body, options) {\n  var cc = body.creditCard;\n  var billingAddress = cc && cc.billingAddress;\n  var expDate = cc && cc.expirationDate;\n  var expirationMonth =\n    cc && (cc.expirationMonth || (expDate && expDate.split(\"/\")[0].trim()));\n  var expirationYear =\n    cc && (cc.expirationYear || (expDate && expDate.split(\"/\")[1].trim()));\n  var variables = {\n    input: {\n      creditCard: {\n        number: cc && cc.number,\n        expirationMonth: expirationMonth,\n        expirationYear: expirationYear,\n        cvv: cc && cc.cvv,\n        cardholderName: cc && cc.cardholderName,\n      },\n      options: {},\n    },\n  };\n\n  if (options.hasAuthenticationInsight) {\n    variables.authenticationInsightInput = {\n      merchantAccountId: body.merchantAccountId,\n    };\n  }\n\n  if (billingAddress) {\n    variables.input.creditCard.billingAddress = billingAddress;\n  }\n\n  variables.input = addValidationRule(body, variables.input);\n\n  return variables;\n}\n\nfunction addValidationRule(body, input) {\n  var validate;\n\n  if (\n    body.creditCard &&\n    body.creditCard.options &&\n    typeof body.creditCard.options.validate === \"boolean\"\n  ) {\n    validate = body.creditCard.options.validate;\n  } else if (\n    (body.authorizationFingerprint && body.tokenizationKey) ||\n    body.authorizationFingerprint\n  ) {\n    validate = true;\n  } else if (body.tokenizationKey) {\n    validate = false;\n  }\n\n  if (typeof validate === \"boolean\") {\n    input.options = assign(\n      {\n        validate: validate,\n      },\n      input.options\n    );\n  }\n\n  return input;\n}\n\nfunction creditCardTokenization(body) {\n  var options = {\n    hasAuthenticationInsight: Boolean(\n      body.authenticationInsight && body.merchantAccountId\n    ),\n  };\n\n  return {\n    query: createMutation(options),\n    variables: createCreditCardTokenizationBody(body, options),\n    operationName: \"TokenizeCreditCard\",\n  };\n}\n\nmodule.exports = creditCardTokenization;\n\n},{\"../../../../lib/assign\":146}],109:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar features = {\n  tokenize_credit_cards: \"payment_methods/credit_cards\", // eslint-disable-line camelcase\n  configuration: \"configuration\",\n};\n\nvar disallowedInputPaths = [\"creditCard.options.unionPayEnrollment\"];\n\nfunction GraphQL(config) {\n  this._config = config.graphQL;\n}\n\nGraphQL.prototype.getGraphQLEndpoint = function () {\n  return this._config.url;\n};\n\nGraphQL.prototype.isGraphQLRequest = function (url, body) {\n  var featureEnabled;\n  var path = this.getClientApiPath(url);\n\n  if (!this._isGraphQLEnabled() || !path) {\n    return false;\n  }\n\n  featureEnabled = this._config.features.some(function (feature) {\n    return features[feature] === path;\n  });\n\n  if (containsDisallowedlistedKeys(body)) {\n    return false;\n  }\n\n  return featureEnabled;\n};\n\nGraphQL.prototype.getClientApiPath = function (url) {\n  var path;\n  var clientApiPrefix = \"/client_api/v1/\";\n  var pathParts = url.split(clientApiPrefix);\n\n  if (pathParts.length > 1) {\n    path = pathParts[1].split(\"?\")[0];\n  }\n\n  return path;\n};\n\nGraphQL.prototype._isGraphQLEnabled = function () {\n  return Boolean(this._config);\n};\n\nfunction containsDisallowedlistedKeys(body) {\n  return disallowedInputPaths.some(function (keys) {\n    var value = keys.split(\".\").reduce(function (accumulator, key) {\n      return accumulator && accumulator[key];\n    }, body);\n\n    return value !== undefined;\n  });\n}\n\nmodule.exports = GraphQL;\n\n},{}],110:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar BRAINTREE_VERSION = _dereq_(\"../../constants\").BRAINTREE_VERSION;\n\nvar assign = _dereq_(\"../../../lib/assign\").assign;\nvar snakeCaseToCamelCase = _dereq_(\"../../../lib/snake-case-to-camel-case\");\nvar isFastlaneCheckout = _dereq_(\"../../../lib/is-fastlane-checkout\");\n\nvar creditCardTokenizationBodyGenerator = _dereq_(\"./generators/credit-card-tokenization\");\nvar creditCardTokenizationResponseAdapter = _dereq_(\"./adapters/credit-card-tokenization\");\nvar creditCardTokenizationFastlaneResponseAdapter = _dereq_(\"./adapters/credit-card-tokenization-fastlane\");\nvar creditCardForFastlaneTokenizationBodyGenerator = _dereq_(\"./generators/credit-card-for-fastlane-tokenization\");\n\nvar configurationBodyGenerator = _dereq_(\"./generators/configuration\");\nvar configurationResponseAdapter = _dereq_(\"./adapters/configuration\");\n\nvar generators = {\n  \"payment_methods/credit_cards\": function (data, isFastlane) {\n    if (isFastlane) {\n      // Only want to use this generator when using the Fastlane flow\n      return creditCardForFastlaneTokenizationBodyGenerator(data);\n    }\n\n    return creditCardTokenizationBodyGenerator(data);\n  },\n  configuration: configurationBodyGenerator,\n};\n\nvar adapters = {\n  \"payment_methods/credit_cards\": function (parsedBody, context, isFastlane) {\n    if (isFastlane) {\n      // Only want to use this adapter when using the Fastlane flow\n      return creditCardTokenizationFastlaneResponseAdapter(parsedBody, context);\n    }\n\n    return creditCardTokenizationResponseAdapter(parsedBody, context);\n  },\n  configuration: configurationResponseAdapter,\n};\n\nfunction GraphQLRequest(options) {\n  var clientApiPath = options.graphQL.getClientApiPath(options.url);\n\n  this._graphQL = options.graphQL;\n  this._data = options.data;\n  this._method = options.method;\n  this._headers = options.headers;\n  this._clientSdkMetadata = {\n    source: options.metadata.source,\n    integration: options.metadata.integration,\n    sessionId: options.metadata.sessionId,\n  };\n  this._sendAnalyticsEvent = options.sendAnalyticsEvent || Function.prototype;\n\n  this._generator = generators[clientApiPath];\n  this._adapter = adapters[clientApiPath];\n\n  this._sendAnalyticsEvent(\"graphql.init\");\n}\n\nGraphQLRequest.prototype.getUrl = function () {\n  return this._graphQL.getGraphQLEndpoint();\n};\n\nGraphQLRequest.prototype.getBody = function () {\n  var formattedBody = formatBodyKeys(this._data);\n  var generatedBody = this._generator(\n    formattedBody,\n    // Since this is used for all GQL requests, we only want this if it's a Fastlane Tokenization request\n    isFastlaneCheckout(this._data.creditCard)\n  );\n  var body = assign(\n    { clientSdkMetadata: this._clientSdkMetadata },\n    generatedBody\n  );\n\n  return JSON.stringify(body);\n};\n\nGraphQLRequest.prototype.getMethod = function () {\n  return \"POST\";\n};\n\nGraphQLRequest.prototype.getHeaders = function () {\n  var authorization, headers;\n\n  if (this._data.authorizationFingerprint) {\n    this._sendAnalyticsEvent(\"graphql.authorization-fingerprint\");\n    authorization = this._data.authorizationFingerprint;\n  } else {\n    this._sendAnalyticsEvent(\"graphql.tokenization-key\");\n    authorization = this._data.tokenizationKey;\n  }\n\n  headers = {\n    Authorization: \"Bearer \" + authorization,\n    \"Braintree-Version\": BRAINTREE_VERSION,\n  };\n\n  return assign({}, this._headers, headers);\n};\n\nGraphQLRequest.prototype.adaptResponseBody = function (parsedBody) {\n  return this._adapter(\n    parsedBody,\n    this,\n    // Since this is used for all GQL requests, we only want this if it's a Fastlane Checkout Tokenization request\n    \"creditCard\" in this._data && isFastlaneCheckout(this._data.creditCard)\n  );\n};\n\nGraphQLRequest.prototype.determineStatus = function (\n  httpStatus,\n  parsedResponse\n) {\n  var status, errorClass;\n\n  if (httpStatus === 200) {\n    errorClass =\n      parsedResponse.errors &&\n      parsedResponse.errors[0] &&\n      parsedResponse.errors[0].extensions &&\n      parsedResponse.errors[0].extensions.errorClass;\n\n    if (parsedResponse.data && !parsedResponse.errors) {\n      status = 200;\n    } else if (errorClass === \"VALIDATION\") {\n      status = 422;\n    } else if (errorClass === \"AUTHORIZATION\") {\n      status = 403;\n    } else if (errorClass === \"AUTHENTICATION\") {\n      status = 401;\n    } else if (isGraphQLError(errorClass, parsedResponse)) {\n      status = 403;\n    } else {\n      status = 500;\n    }\n  } else if (!httpStatus) {\n    status = 500;\n  } else {\n    status = httpStatus;\n  }\n\n  this._sendAnalyticsEvent(\"graphql.status.\" + httpStatus);\n  this._sendAnalyticsEvent(\"graphql.determinedStatus.\" + status);\n\n  return status;\n};\n\nfunction isGraphQLError(errorClass, parsedResponse) {\n  return !errorClass && parsedResponse.errors[0].message;\n}\n\n/**\n * @ignore\n * This function formats the body consistently so _everything_ is camelCase.\n * @param {object} originalBody the body to format\n * @returns {object} The formatted object\n */\nfunction formatBodyKeys(originalBody) {\n  var body = {};\n\n  Object.keys(originalBody).forEach(function (key) {\n    var camelCaseKey = snakeCaseToCamelCase(key);\n\n    if (typeof originalBody[key] === \"object\") {\n      body[camelCaseKey] = formatBodyKeys(originalBody[key]);\n    } else if (typeof originalBody[key] === \"number\") {\n      body[camelCaseKey] = String(originalBody[key]);\n    } else {\n      body[camelCaseKey] = originalBody[key];\n    }\n  });\n\n  return body;\n}\n\nmodule.exports = GraphQLRequest;\n\n},{\"../../../lib/assign\":146,\"../../../lib/is-fastlane-checkout\":178,\"../../../lib/snake-case-to-camel-case\":186,\"../../constants\":96,\"./adapters/configuration\":102,\"./adapters/credit-card-tokenization\":104,\"./adapters/credit-card-tokenization-fastlane\":103,\"./generators/configuration\":106,\"./generators/credit-card-for-fastlane-tokenization\":107,\"./generators/credit-card-tokenization\":108}],111:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar once = _dereq_(\"../../lib/once\");\nvar AJAXDriver = _dereq_(\"./ajax-driver\");\n\nmodule.exports = function (options, cb) {\n  cb = once(cb || Function.prototype);\n  options.method = (options.method || \"GET\").toUpperCase();\n  options.timeout = options.timeout == null ? 60000 : options.timeout;\n  options.data = options.data || {};\n\n  AJAXDriver.request(options, cb);\n};\n\n},{\"../../lib/once\":183,\"./ajax-driver\":100}],112:[function(_dereq_,module,exports){\n\"use strict\";\n\nmodule.exports = function (body) {\n  try {\n    body = JSON.parse(body);\n    // eslint-disable-next-line no-unused-vars\n  } catch (err) {\n    /* ignored */\n  }\n\n  return body;\n};\n\n},{}],113:[function(_dereq_,module,exports){\n\"use strict\";\n\nmodule.exports = function (method, body) {\n  if (typeof method !== \"string\") {\n    throw new Error(\"Method must be a string\");\n  }\n\n  if (method.toLowerCase() !== \"get\" && body != null) {\n    body = typeof body === \"string\" ? body : JSON.stringify(body);\n  }\n\n  return body;\n};\n\n},{}],114:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar isXHRAvailable =\n  typeof window !== \"undefined\" &&\n  window.XMLHttpRequest &&\n  \"withCredentials\" in new window.XMLHttpRequest();\n\nfunction getRequestObject() {\n  return isXHRAvailable\n    ? new window.XMLHttpRequest()\n    : new window.XDomainRequest();\n}\n\nmodule.exports = {\n  isAvailable: isXHRAvailable,\n  getRequestObject: getRequestObject,\n};\n\n},{}],115:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Data Collector - Creation Error Codes\n * @description Errors that occur when [creating the Data Collector component](./module-braintree-web_data-collector.html#.create).\n * @property {MERCHANT} DATA_COLLECTOR_REQUIRES_CREATE_OPTIONS Occurs when PayPal Fraudnet could not be enabled.\n */\n\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\n\nmodule.exports = {\n  DATA_COLLECTOR_REQUIRES_CREATE_OPTIONS: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"DATA_COLLECTOR_REQUIRES_CREATE_OPTIONS\",\n    message: \"Data Collector must be created with Kount and/or PayPal.\",\n  },\n};\n\n},{\"../lib/braintree-error\":149}],116:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar analytics = _dereq_(\"../lib/analytics\");\nvar assetLoadDetail = _dereq_(\"../lib/asset-load-detail\");\nvar FRAUDNET_FNCLS = _dereq_(\"../lib/constants\").FRAUDNET_FNCLS;\nvar FRAUDNET_SOURCE = _dereq_(\"../lib/constants\").FRAUDNET_SOURCE;\nvar FRAUDNET_URL = _dereq_(\"../lib/constants\").FRAUDNET_URL;\nvar loadScript = _dereq_(\"../lib/assets\").loadScript;\n\nvar TRUNCATION_LENGTH = 32;\n\nvar cachedSessionId;\n\nfunction setup(options) {\n  var fraudNet = new Fraudnet();\n\n  options = options || {};\n\n  if (!options.sessionId && cachedSessionId) {\n    fraudNet.sessionId = cachedSessionId;\n\n    return Promise.resolve(fraudNet);\n  }\n\n  return fraudNet.initialize(options);\n}\n\nfunction clearSessionIdCache() {\n  cachedSessionId = null;\n}\n\nfunction Fraudnet() {}\n\nFraudnet.prototype.initialize = function (options) {\n  var self = this;\n\n  this.sessionId = options.sessionId || options.clientSessionId;\n\n  if (this.sessionId) {\n    this.sessionId = this.sessionId.substring(0, TRUNCATION_LENGTH);\n  }\n\n  if (!options.sessionId) {\n    cachedSessionId = this.sessionId;\n  }\n\n  var parameterBlockConfig = {\n    f: this.sessionId,\n    s: FRAUDNET_SOURCE,\n  };\n\n  if (!options.hasOwnProperty(\"beacon\") || options.beacon === true) {\n    parameterBlockConfig.b = _generateBeaconId(this.sessionId);\n  } else {\n    parameterBlockConfig.bu = false;\n  }\n\n  if (options.hasOwnProperty(\"cb1\")) {\n    parameterBlockConfig.cb1 = options.cb1;\n  }\n\n  this._parameterBlock = _createParameterBlock(\n    parameterBlockConfig,\n    options.environment\n  );\n\n  return loadScript({\n    src: FRAUDNET_URL,\n  })\n    .then(function (block) {\n      self._thirdPartyBlock = block;\n\n      return self;\n    })\n    .catch(function (err) {\n      if (options.client) {\n        analytics.sendEventPlus(\n          options.client,\n          \"data-collector.fraudnet.load-failed\",\n          assetLoadDetail(err)\n        );\n      }\n\n      return null;\n    });\n};\n\nFraudnet.prototype.teardown = function () {\n  removeElementIfOnPage(document.querySelector('iframe[title=\"ppfniframe\"]'));\n  removeElementIfOnPage(document.querySelector('iframe[title=\"pbf\"]'));\n\n  removeElementIfOnPage(this._parameterBlock);\n  removeElementIfOnPage(this._thirdPartyBlock);\n};\n\nfunction removeElementIfOnPage(element) {\n  if (element && element.parentNode) {\n    element.parentNode.removeChild(element);\n  }\n}\n\nfunction _generateBeaconId(sessionId) {\n  var timestamp = new Date().getTime() / 1000;\n\n  return (\n    \"https://b.stats.paypal.com/counter.cgi\" +\n    \"?i=127.0.0.1\" +\n    \"&p=\" +\n    sessionId +\n    \"&t=\" +\n    timestamp +\n    \"&a=14\"\n  );\n}\n\nfunction _createParameterBlock(config, environment) {\n  var el = document.body.appendChild(document.createElement(\"script\"));\n  // for some reason, the presence of the sandbox\n  // attribute in a production environment causes\n  // some weird behavior with what url paths are\n  // hit, so instead, we only apply this attribute\n  // when it is not a production environment\n  if (environment !== \"production\") {\n    config.sandbox = true;\n  }\n\n  el.type = \"application/json\";\n  el.setAttribute(\"fncls\", FRAUDNET_FNCLS);\n  el.text = JSON.stringify(config);\n\n  return el;\n}\n\nmodule.exports = {\n  setup: setup,\n  clearSessionIdCache: clearSessionIdCache,\n};\n\n},{\"../lib/analytics\":143,\"../lib/asset-load-detail\":144,\"../lib/assets\":145,\"../lib/constants\":150}],117:[function(_dereq_,module,exports){\n\"use strict\";\n/** @module braintree-web/data-collector */\n\nvar fraudnet = _dereq_(\"./fraudnet\");\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar basicComponentVerification = _dereq_(\"../lib/basic-component-verification\");\nvar createDeferredClient = _dereq_(\"../lib/create-deferred-client\");\nvar createAssetsUrl = _dereq_(\"../lib/create-assets-url\");\nvar methods = _dereq_(\"../lib/methods\");\nvar convertMethodsToError = _dereq_(\"../lib/convert-methods-to-error\");\nvar VERSION = \"3.145.0\";\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar errors = _dereq_(\"./errors\");\n\n/**\n * @class\n * @global\n * @name DataCollector\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/data-collector.create|braintree-web.data-collector.create} instead.</strong>\n * @classdesc This class is used for fraud integration with PayPal. Instances of this class have {@link DataCollector#deviceData|deviceData} which is used to correlate user sessions with server transactions.\n */\n\n/**\n * @memberof DataCollector\n * @name deviceData\n * @type string\n * @description JSON string to pass with server transactions.\n * @instance\n */\n\n/**\n * @memberof DataCollector\n * @name rawDeviceData\n * @type object\n * @description The device data as an object instead of a string.\n * @instance\n */\n\n/**\n * @memberof DataCollector\n * @name teardown\n * @function\n * @description Cleanly remove anything set up by {@link module:braintree-web/data-collector.create|create}.\n * @param {callback} [callback] Called on completion. If no callback is provided, `teardown` returns a promise.\n * @instance\n * @example\n * dataCollectorInstance.teardown();\n * @example <caption>With callback</caption>\n * dataCollectorInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\n\n/**\n * @memberof DataCollector\n * @name getDeviceData\n * @function\n * @description Resolves with device data once it is ready.\n * @param {object} [options] Options for how device data is resolved.\n * @param {boolean} [options.raw=false] When set to true, the device data will resolve as an object instead of a JSON string.\n * @param {callback} [callback] Called on completion. If no callback is provided, `getDeviceData` returns a promise.\n * @instance\n * @example\n * dataCollectorInstance.getDeviceData();\n * @example <caption>Without options</caption>\n * dataCollectorInstance.getDeviceData().then(function (deviceData) {\n *   // typeof deviceData === 'string'\n *   // pass onto your server with the payment method nonce\n * });\n * @example <caption>With options</caption>\n * dataCollectorInstance.getDeviceData({\n *   raw: true\n * }).then(function (deviceData) {\n *   // typeof deviceData === 'object'\n *   // for if you'd like to parse the data before sending it to your server\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\n\n/**\n * @static\n * @function create\n * @description Creates a DataCollector instance and collects device data based on your merchant configuration. We recommend that you call this method as early as possible, e.g. as soon as your website loads. If that's too early, call it at the beginning of customer checkout.\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {boolean} [options.useDeferredClient] Used in conjunction with `authorization`, allows the Data Collector instance to be available right away by fetching the client configuration in the background. When this option is used, {@link GooglePayment#getDeviceData} must be used to collect the device data.\n * @param {boolean} [options.paypal] *Deprecated:* PayPal fraud data collection will occur when the DataCollector instance is created.\n * @param {string} [options.riskCorrelationId] Pass a custom risk correlation id when creating the data collector.\n * @param {string} [options.clientMetadataId] Deprecated. Use `options.riskCorrelationId` instead.\n * @param {string} [options.correlationId] Deprecated. Use `options.riskCorrelationId` instead.\n * @param {string} [options.cb1] Callback name for fraudnet that will be invoked on the window object when fraudnet is finished initializing.\n * @param {callback} [callback] The second argument, `data`, is the {@link DataCollector} instance.\n * @returns {(Promise|void)} Returns a promise that resolves the {@link DataCollector} instance if no callback is provided.\n */\nfunction create(options) {\n  var name = \"Data Collector\";\n  var result = {\n    _instances: [],\n  };\n  var data = {};\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      result._instantiatedWithAClient = !options.useDeferredClient;\n      result._createPromise = createDeferredClient\n        .create({\n          authorization: options.authorization,\n          client: options.client,\n          debug: options.debug,\n          assetsUrl: createAssetsUrl.create(options.authorization),\n          name: name,\n        })\n        .then(function (client) {\n          var clientConfiguration = client.getConfiguration();\n          var fraudnetConfig = {\n            client: client,\n            sessionId:\n              options.riskCorrelationId ||\n              options.clientMetadataId ||\n              options.correlationId,\n            clientSessionId: clientConfiguration.analyticsMetadata.sessionId,\n            environment: clientConfiguration.gatewayConfiguration.environment,\n            cb1: options.cb1,\n          };\n          if (options.hasOwnProperty(\"beacon\")) {\n            fraudnetConfig.beacon = options.beacon;\n          }\n          return fraudnet\n            .setup(fraudnetConfig)\n            .then(function (fraudnetInstance) {\n              if (fraudnetInstance) {\n                data.correlation_id = fraudnetInstance.sessionId; // eslint-disable-line camelcase\n                result._instances.push(fraudnetInstance);\n              }\n            });\n        })\n        .then(function () {\n          if (result._instances.length === 0) {\n            // NEXT_MAJOR_VERSION either this should error with a specific error that\n            // no data collector instances could be set up, or we should just swallow\n            // the error and document that no device data will be returned if\n            // data collector cannot be instantiated. We can't change the error code here\n            // without possibly breaking merchant integrations relying on this inccorrect\n            // behavior.\n            return Promise.reject(\n              new BraintreeError(errors.DATA_COLLECTOR_REQUIRES_CREATE_OPTIONS)\n            );\n          }\n\n          result.deviceData = JSON.stringify(data);\n          result.rawDeviceData = data;\n\n          return result;\n        });\n\n      result.teardown = createTeardownMethod(result);\n      result.getDeviceData = createGetDeviceDataMethod(result);\n\n      if (result._instantiatedWithAClient) {\n        return result._createPromise;\n      }\n\n      return result;\n    });\n}\n\nfunction createTeardownMethod(result) {\n  return wrapPromise(function teardown() {\n    return result._createPromise.then(function () {\n      result._instances.forEach(function (instance) {\n        if (instance) {\n          instance.teardown();\n        }\n      });\n\n      convertMethodsToError(result, methods(result));\n    });\n  });\n}\n\nfunction createGetDeviceDataMethod(result) {\n  return wrapPromise(function getDeviceData(options) {\n    options = options || {};\n\n    return result._createPromise.then(function () {\n      if (options.raw) {\n        return Promise.resolve(result.rawDeviceData);\n      }\n\n      return Promise.resolve(result.deviceData);\n    });\n  });\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `{@pkg version}`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/basic-component-verification\":147,\"../lib/braintree-error\":149,\"../lib/convert-methods-to-error\":151,\"../lib/create-assets-url\":153,\"../lib/create-deferred-client\":155,\"../lib/methods\":182,\"./errors\":115,\"./fraudnet\":116,\"@braintree/wrap-promise\":43}],118:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\n\nmodule.exports = {\n  FASTLANE_SDK_LOAD_ERROR: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"FASTLANE_SDK_LOAD_ERROR\",\n    message: \"Fastlane SDK failed to load.\",\n  },\n};\n\n},{\"../lib/braintree-error\":149}],119:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar convertToBraintreeError = _dereq_(\"../lib/convert-to-braintree-error\");\nvar errors = _dereq_(\"./errors\");\nvar loadFastlane = _dereq_(\"../lib/assets\").loadFastlane;\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar assign = _dereq_(\"../lib/assign\").assign;\n\nfunction fastlane(options) {\n  var config = options.client.getConfiguration();\n  var sdkVersion = options.client.getVersion();\n  var environment = config.gatewayConfiguration.environment;\n\n  var minified = true;\n\n  if (environment !== \"production\") {\n    minified = false;\n  }\n\n  return loadFastlane(\n    assign(\n      { platform: \"BT\", btSdkVersion: sdkVersion, minified: minified },\n      options\n    )\n  )\n    .then(function (result) {\n      var platformOptions = {\n        platform: \"BT\",\n        authorization: options.authorization,\n        client: options.client,\n        deviceData: options.deviceData,\n      };\n\n      // We need the following options to be nested inside platformOptions rather than\n      // top level\n      delete options.authorization;\n      delete options.client;\n      delete options.deviceData;\n\n      // The following are options that we know are needed for the Fastlane Loader, but which\n      // we know are not needed for initializing the fastlane sdk.\n      delete options.minified;\n      delete options.btSdkVersion;\n\n      var createFn;\n      if (window.braintree._fastlane && window.braintree._fastlane.create) {\n        createFn = window.braintree._fastlane.create;\n      } else {\n        createFn = window.braintree.fastlane.create;\n      }\n\n      return createFn(\n        assign({ platformOptions: platformOptions }, options, result.metadata)\n      );\n    })\n    .catch(function (err) {\n      return Promise.reject(\n        convertToBraintreeError(err, errors.FASTLANE_SDK_LOAD_ERROR)\n      );\n    });\n}\n\nmodule.exports = wrapPromise(fastlane);\n\n},{\"../lib/assets\":145,\"../lib/assign\":146,\"../lib/convert-to-braintree-error\":152,\"./errors\":118,\"@braintree/wrap-promise\":43}],120:[function(_dereq_,module,exports){\n\"use strict\";\n\n/** @module braintree-web/fastlane */\n\nvar basicComponentVerification = _dereq_(\"../lib/basic-component-verification\");\nvar fastlane = _dereq_(\"./fastlane\");\nvar createAssetsUrl = _dereq_(\"../lib/create-assets-url\");\nvar createDeferredClient = _dereq_(\"../lib/create-deferred-client\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar VERSION = \"3.145.0\";\nvar assign = _dereq_(\"../lib/assign\").assign;\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {string} [options.deviceData] A {@link DataCollector} instance.\n * @example\n * braintree.fastlane.create({\n *   client: clientInstance,\n *   deviceData: dataCollectorInstance\n * }).then(function (fastlaneInstance) {\n *   // fastlaneInstance is ready to create an identity instance.\n *     identity = fastlaneInstance.identity\n * }).catch(function (createErr) {\n *   console.error('Error creating fastlane instance', createErr);\n * });\n * @example <caption>Creating a fastlane component</caption>\n * braintree.fastlane.create({\n *   client: clientInstance,\n *   deviceData: dataCollectorInstance\n * }).then(function (fastlaneInstance) {\n *   // fastlaneInstance is ready to create an identity instance.\n *     identity = fastlaneInstance.identity\n * }).catch(function (createErr) {\n *   console.error('Error creating fastlane instance', createErr);\n * });\n * @returns {(Promise|void)} Returns the fastlane instance.\n */\n\nfunction create(options) {\n  var name = \"fastlane\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      return createDeferredClient.create({\n        authorization: options.authorization,\n        client: options.client,\n        assetsUrl: createAssetsUrl.create(options.authorization),\n        name: name,\n      });\n    })\n    .then(function (client) {\n      return fastlane(\n        assign(\n          {\n            client: client,\n            deviceData: options.deviceData,\n          },\n          options\n        )\n      );\n    });\n}\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `{@pkg version}`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/assign\":146,\"../lib/basic-component-verification\":147,\"../lib/create-assets-url\":153,\"../lib/create-deferred-client\":155,\"./fastlane\":119,\"@braintree/wrap-promise\":43}],121:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Google Payment - Creation Error Codes\n * @description Errors that occur when [creating the Google Payment component](./module-braintree-web_google-payment.html#.create).\n * @property {MERCHANT} GOOGLE_PAYMENT_NOT_ENABLED Occurs when Google Pay is not enabled on the Braintree control panel.\n * @property {MERCHANT} GOOGLE_PAYMENT_UNSUPPORTED_VERSION Occurs when a Google Pay version is used that is not supported by the Braintree SDK.\n */\n\n/**\n * @name BraintreeError.Google Payment - parseResponse Error Codes\n * @description Errors that occur when [parsing the response from Google](./GooglePayment.html#parseResponse).\n * @property {UNKNOWN} GOOGLE_PAYMENT_GATEWAY_ERROR Occurs when Google Pay could not be tokenized.\n */\n\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\n\nmodule.exports = {\n  GOOGLE_PAYMENT_NOT_ENABLED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"GOOGLE_PAYMENT_NOT_ENABLED\",\n    message: \"Google Pay is not enabled for this merchant.\",\n  },\n  GOOGLE_PAYMENT_GATEWAY_ERROR: {\n    code: \"GOOGLE_PAYMENT_GATEWAY_ERROR\",\n    message:\n      \"There was an error when tokenizing the Google Pay payment method.\",\n    type: BraintreeError.types.UNKNOWN,\n  },\n  GOOGLE_PAYMENT_UNSUPPORTED_VERSION: {\n    code: \"GOOGLE_PAYMENT_UNSUPPORTED_VERSION\",\n    type: BraintreeError.types.MERCHANT,\n  },\n};\n\n},{\"../lib/braintree-error\":149}],122:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar analytics = _dereq_(\"../lib/analytics\");\nvar assign = _dereq_(\"../lib/assign\").assign;\nvar convertMethodsToError = _dereq_(\"../lib/convert-methods-to-error\");\nvar find = _dereq_(\"../lib/find\");\nvar generateGooglePayConfiguration = _dereq_(\"../lib/generate-google-pay-configuration\");\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar errors = _dereq_(\"./errors\");\nvar methods = _dereq_(\"../lib/methods\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\n\nvar CREATE_PAYMENT_DATA_REQUEST_METHODS = {\n  1: \"_createV1PaymentDataRequest\",\n  2: \"_createV2PaymentDataRequest\",\n};\n\n/**\n * @typedef {object} GooglePayment~tokenizePayload\n * @property {string} nonce The payment method nonce.\n * @property {object} details Additional account details.\n * @property {string} details.cardType Type of card, ex: Visa, MasterCard.\n * @property {string} details.lastFour Last four digits of card number.\n * @property {string} details.lastTwo Last two digits of card number.\n * @property {boolean} details.isNetworkTokenized True if the card is network tokenized.\n * @property {string} details.bin First six digits of card number.\n * @property {string} description A human-readable description.\n * @property {string} type The payment method type, `CreditCard` or `AndroidPayCard`.\n * @property {object} binData Information about the card based on the bin.\n * @property {string} binData.commercial Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.countryOfIssuance The country of issuance.\n * @property {string} binData.debit Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.durbinRegulated Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.healthcare Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.issuingBank The issuing bank.\n * @property {string} binData.payroll Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.prepaid Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.productId The product id.\n * @property {string} binData.business Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.consumer Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.purchase Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.corporate Possible values: 'Yes', 'No', 'Unknown'.\n */\n\n/**\n * @class GooglePayment\n * @param {object} options Google Payment {@link module:braintree-web/google-payment.create create} options.\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/google-payment.create|braintree-web.google-payment.create} instead.</strong>\n * @classdesc This class represents a Google Payment component produced by {@link module:braintree-web/google-payment.create|braintree-web/google-payment.create}. Instances of this class have methods for initializing the Google Pay flow.\n */\nfunction GooglePayment(options) {\n  this._createPromise = options.createPromise;\n  this._client = options.client;\n  this._useDeferredClient = options.useDeferredClient;\n  // NEXT_MAJOR_VERSION this should be updated to 2 (or whatever the current latest version is)\n  this._googlePayVersion = options.googlePayVersion || 1;\n  this._googleMerchantId = options.googleMerchantId;\n\n  if (this._isUnsupportedGooglePayAPIVersion()) {\n    throw new BraintreeError({\n      code: errors.GOOGLE_PAYMENT_UNSUPPORTED_VERSION.code,\n      message:\n        \"The Braintree SDK does not support Google Pay version \" +\n        this._googlePayVersion +\n        \". Please upgrade the version of your Braintree SDK and contact support if this error persists.\",\n      type: errors.GOOGLE_PAYMENT_UNSUPPORTED_VERSION.type,\n    });\n  }\n}\n\nGooglePayment.prototype._waitForClient = function () {\n  if (this._client) {\n    return Promise.resolve();\n  }\n\n  return this._createPromise.then(\n    function (client) {\n      this._client = client;\n    }.bind(this)\n  );\n};\n\nGooglePayment.prototype._isUnsupportedGooglePayAPIVersion = function () {\n  // if we don't have createPaymentDatqRequest method for the specific\n  // API version, then the version is not supported\n  return !(this._googlePayVersion in CREATE_PAYMENT_DATA_REQUEST_METHODS);\n};\n\nGooglePayment.prototype._getDefaultConfig = function () {\n  if (!this._defaultConfig) {\n    this._defaultConfig = generateGooglePayConfiguration(\n      this._client.getConfiguration(),\n      this._googlePayVersion,\n      this._googleMerchantId\n    );\n  }\n\n  return this._defaultConfig;\n};\n\nGooglePayment.prototype._createV1PaymentDataRequest = function (\n  paymentDataRequest\n) {\n  var defaultConfig = this._getDefaultConfig();\n  var overrideCardNetworks =\n    paymentDataRequest.cardRequirements &&\n    paymentDataRequest.cardRequirements.allowedCardNetworks;\n  var defaultConfigCardNetworks =\n    defaultConfig.cardRequirements.allowedCardNetworks;\n  var allowedCardNetworks = overrideCardNetworks || defaultConfigCardNetworks;\n\n  paymentDataRequest = assign({}, defaultConfig, paymentDataRequest);\n\n  // this way we can preserve allowedCardNetworks from default integration\n  // if merchant did not pass any in `cardRequirements`\n  paymentDataRequest.cardRequirements.allowedCardNetworks = allowedCardNetworks;\n\n  return paymentDataRequest;\n};\n\nGooglePayment.prototype._createV2PaymentDataRequest = function (\n  paymentDataRequest\n) {\n  var defaultConfig = this._getDefaultConfig();\n\n  if (paymentDataRequest.allowedPaymentMethods) {\n    paymentDataRequest.allowedPaymentMethods.forEach(function (paymentMethod) {\n      var defaultPaymentMethod = find(\n        defaultConfig.allowedPaymentMethods,\n        \"type\",\n        paymentMethod.type\n      );\n\n      if (defaultPaymentMethod) {\n        applyDefaultsToPaymentMethodConfiguration(\n          paymentMethod,\n          defaultPaymentMethod\n        );\n      }\n    });\n  }\n\n  paymentDataRequest = assign({}, defaultConfig, paymentDataRequest);\n\n  return paymentDataRequest;\n};\n\n/**\n * Create a configuration object for use in the `loadPaymentData` method.\n *\n * **Note**: Version 1 of the Google Pay Api is deprecated and will become unsupported in a future version. Until then, version 1 will continue to be used by default, and version 1 schema parameters and overrides will remain functional on existing integrations. However, new integrations and all following examples will be presented in the GooglePay version 2 schema. See [Google Pay's upgrade guide](https://developers.google.com/pay/api/web/guides/resources/update-to-latest-version) to see how to update your integration.\n *\n * If `options.googlePayVersion === 2` was set during the initial {@link module:braintree-web/google-payment.create|create} call, overrides must match the Google Pay v2 schema to be valid.\n *\n * @public\n * @param {object} overrides The supplied parameters for creating the PaymentDataRequest object. Required parameters are:\n *  @param {object} overrides.transactionInfo Object according to the [Google Pay Transaction Info](https://developers.google.com/pay/api/web/reference/object#TransactionInfo) spec.\n *  Optionally, any of the parameters in the [PaymentDataRequest](https://developers.google.com/pay/api/web/reference/object#PaymentDataRequest) parameters can be overridden, but note that it is recommended only to override top level parameters to avoid squashing deeply nested configuration objects. An example can be found below showing how to safely edit these deeply nested objects.\n * @example\n * var paymentDataRequest = googlePaymentInstance.createPaymentDataRequest({\n *   merchantInfo: {\n *     merchantId: 'my-merchant-id-from-google'\n *   },\n *   transactionInfo: {\n *     currencyCode: 'USD',\n *     totalPriceStatus: 'FINAL',\n *     totalPrice: '100.00'\n *   }\n * });\n *\n * // Update card payment methods to require billing address\n * var cardPaymentMethod = paymentDataRequest.allowedPaymentMethods;\n * cardPaymentMethod.parameters.billingAddressRequired = true;\n * cardPaymentMethod.parameters.billingAddressParameters = {\n *   format: 'FULL',\n *   phoneNumberRequired: true\n * };\n *\n * var paymentsClient = new google.payments.api.PaymentsClient({\n *   environment: 'TEST' // or 'PRODUCTION'\n * })\n *\n * paymentsClient.loadPaymentData(paymentDataRequest).then(function (response) {\n *   // handle response with googlePaymentInstance.parseResponse\n *   // (see below)\n * });\n * @example <caption>With deferred client</caption>\n * googlePaymentInstance.createPaymentDataRequest({\n *   merchantInfo: {\n *     merchantId: 'my-merchant-id-from-google'\n *   },\n *   transactionInfo: {\n *     currencyCode: 'USD',\n *     totalPriceStatus: 'FINAL',\n *     totalPrice: '100.00'\n *   }\n * }).then(function (paymentDataRequest) {\n *   // Update card payment methods to require billing address\n *   var cardPaymentMethod = paymentDataRequest.allowedPaymentMethods;\n *   cardPaymentMethod.parameters.billingAddressRequired = true;\n *   cardPaymentMethod.parameters.billingAddressParameters = {\n *     format: 'FULL',\n *     phoneNumberRequired: true\n *   };\n *\n *   var paymentsClient = new google.payments.api.PaymentsClient({\n *     environment: 'TEST' // or 'PRODUCTION'\n *   })\n *\n *   return paymentsClient.loadPaymentData(paymentDataRequest);\n * }).then(function (response) {\n *   // handle response with googlePaymentInstance.parseResponse\n *   // (see below)\n * });\n * @returns {object|Promise} Returns a configuration object for Google PaymentDataRequest. If instantiated with `useDeferredClient` and an `authorization` it will return a promise that resolves with the configuration.\n */\nGooglePayment.prototype.createPaymentDataRequest = function (overrides) {\n  if (!this._useDeferredClient) {\n    return this._createPaymentDataRequestSyncronously(overrides);\n  }\n\n  return this._waitForClient().then(\n    function () {\n      return this._createPaymentDataRequestSyncronously(overrides);\n    }.bind(this)\n  );\n};\n\nGooglePayment.prototype._createPaymentDataRequestSyncronously = function (\n  overrides\n) {\n  var paymentDataRequest = assign({}, overrides);\n  var version = this._googlePayVersion;\n  var createPaymentDataRequestMethod =\n    CREATE_PAYMENT_DATA_REQUEST_METHODS[version];\n\n  if (\n    paymentDataRequest.transactionInfo &&\n    paymentDataRequest.transactionInfo.totalPrice\n  ) {\n    paymentDataRequest.transactionInfo.totalPrice =\n      paymentDataRequest.transactionInfo.totalPrice.toString();\n  }\n\n  analytics.sendEvent(\n    this._createPromise,\n    \"google-payment.v\" + version + \".createPaymentDataRequest\"\n  );\n\n  return this[createPaymentDataRequestMethod](paymentDataRequest);\n};\n\n/**\n * Parse the response from the tokenization.\n * @public\n * @param {object} response The response back from the Google Pay tokenization.\n * @param {callback} [callback] The second argument, <code>data</code>, is a {@link GooglePay~tokenizePayload|tokenizePayload}. If no callback is provided, `parseResponse` returns a promise that resolves with a {@link GooglePayment~tokenizePayload|tokenizePayload}.\n * @example with callback\n * var paymentsClient = new google.payments.api.PaymentsClient({\n *   environment: 'TEST' // or 'PRODUCTION'\n * })\n *\n * paymentsClient.loadPaymentData(paymentDataRequestFromCreatePaymentDataRequest).then(function (response) {\n *   googlePaymentInstance.parseResponse(response, function (err, data) {\n *     if (err) {\n *       // handle errors\n *     }\n *     // send parsedResponse.nonce to your server\n *   });\n * });\n * @example with promise\n * var paymentsClient = new google.payments.api.PaymentsClient({\n *   environment: 'TEST' // or 'PRODUCTION'\n * })\n *\n * paymentsClient.loadPaymentData(paymentDataRequestFromCreatePaymentDataRequest).then(function (response) {\n *   return googlePaymentInstance.parseResponse(response);\n * }).then(function (parsedResponse) {\n *   // send parsedResponse.nonce to your server\n * }).catch(function (err) {\n *   // handle errors\n * });\n * @returns {(Promise|void)} Returns a promise that resolves the parsed response if no callback is provided.\n */\nGooglePayment.prototype.parseResponse = function (response) {\n  var self = this;\n\n  return Promise.resolve()\n    .then(function () {\n      var payload;\n      var rawResponse =\n        response.apiVersion === 2\n          ? response.paymentMethodData.tokenizationData.token\n          : response.paymentMethodToken.token;\n      var parsedResponse = JSON.parse(rawResponse);\n      var error = parsedResponse.error;\n\n      if (error) {\n        return Promise.reject(error);\n      }\n\n      analytics.sendEvent(\n        self._createPromise,\n        \"google-payment.parseResponse.succeeded\"\n      );\n\n      if (parsedResponse.paypalAccounts) {\n        payload = parsedResponse.paypalAccounts[0];\n        analytics.sendEvent(\n          self._createPromise,\n          \"google-payment.parseResponse.succeeded.paypal\"\n        );\n\n        return Promise.resolve({\n          nonce: payload.nonce,\n          type: payload.type,\n          description: payload.description,\n        });\n      }\n      payload = parsedResponse.androidPayCards[0];\n      analytics.sendEvent(\n        self._createPromise,\n        \"google-payment.parseResponse.succeeded.google-payment\"\n      );\n\n      return Promise.resolve({\n        nonce: payload.nonce,\n        type: payload.type,\n        description: payload.description,\n        details: {\n          cardType: payload.details.cardType,\n          lastFour: payload.details.lastFour,\n          lastTwo: payload.details.lastTwo,\n          isNetworkTokenized: payload.details.isNetworkTokenized,\n          bin: payload.details.bin,\n        },\n        binData: payload.binData,\n      });\n    })\n    .catch(function (error) {\n      analytics.sendEvent(\n        self._createPromise,\n        \"google-payment.parseResponse.failed\"\n      );\n\n      return Promise.reject(\n        new BraintreeError({\n          code: errors.GOOGLE_PAYMENT_GATEWAY_ERROR.code,\n          message: errors.GOOGLE_PAYMENT_GATEWAY_ERROR.message,\n          type: errors.GOOGLE_PAYMENT_GATEWAY_ERROR.type,\n          details: {\n            originalError: error,\n          },\n        })\n      );\n    });\n};\n\n/**\n * Cleanly tear down anything set up by {@link module:braintree-web/google-payment.create|create}.\n * @public\n * @param {callback} [callback] Called once teardown is complete. No data is returned if teardown completes successfully.\n * @example\n * googlePaymentInstance.teardown();\n * @example <caption>With callback</caption>\n * googlePaymentInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nGooglePayment.prototype.teardown = function () {\n  convertMethodsToError(this, methods(GooglePayment.prototype));\n\n  return Promise.resolve();\n};\n\nfunction applyDefaultsToPaymentMethodConfiguration(\n  merchantSubmittedPaymentMethod,\n  defaultPaymentMethod\n) {\n  Object.keys(defaultPaymentMethod).forEach(function (parameter) {\n    if (typeof defaultPaymentMethod[parameter] === \"object\") {\n      merchantSubmittedPaymentMethod[parameter] = assign(\n        {},\n        defaultPaymentMethod[parameter],\n        merchantSubmittedPaymentMethod[parameter]\n      );\n    } else {\n      merchantSubmittedPaymentMethod[parameter] =\n        merchantSubmittedPaymentMethod[parameter] ||\n        defaultPaymentMethod[parameter];\n    }\n  });\n}\n\nmodule.exports = wrapPromise.wrapPrototype(GooglePayment);\n\n},{\"../lib/analytics\":143,\"../lib/assign\":146,\"../lib/braintree-error\":149,\"../lib/convert-methods-to-error\":151,\"../lib/find\":162,\"../lib/generate-google-pay-configuration\":174,\"../lib/methods\":182,\"./errors\":121,\"@braintree/wrap-promise\":43}],123:[function(_dereq_,module,exports){\n\"use strict\";\n/**\n * @module braintree-web/google-payment\n * @description A component to integrate with Google Pay. The majority of the integration uses [Google's pay.js JavaScript file](https://pay.google.com/gp/p/js/pay.js). The Braintree component generates the configuration object necessary for Google Pay to initiate the Payment Request and parse the returned data to retrieve the payment method nonce which is used to process the transaction on the server.\n */\n\nvar GooglePayment = _dereq_(\"./google-payment\");\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar createAssetsUrl = _dereq_(\"../lib/create-assets-url\");\nvar createDeferredClient = _dereq_(\"../lib/create-deferred-client\");\nvar basicComponentVerification = _dereq_(\"../lib/basic-component-verification\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar VERSION = \"3.145.0\";\nvar errors = _dereq_(\"./errors\");\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {boolean} [options.useDeferredClient] Used in conjunction with `authorization`, allows the Google Payment instance to be available right away by fetching the client configuration in the background. When this option is used, {@link GooglePayment#createPaymentDataRequest} will return a promise that resolves with the configuration instead of returning synchronously.\n * @param {number} [options.googlePayVersion] The version of the Google Pay API to use. Value of 2 is required to accept parameters documented [by Google](https://developers.google.com/pay/api/web/reference/object). Omit this parameter to use the deprecated Google Pay Version 1.\n * @param {string} [options.googleMerchantId] A Google merchant identifier issued after your website is approved by Google. Required when PaymentsClient is initialized with an environment property of PRODUCTION, but may be omitted in TEST environment.\n * @param {callback} [callback] The second argument, `data`, is the {@link GooglePayment} instance. If no callback is provided, `create` returns a promise that resolves with the {@link GooglePayment} instance.\n * @example <caption>Simple Example</caption>\n * // include https://pay.google.com/gp/p/js/pay.js in a script tag\n * // on your page to load the `google.payments.api.PaymentsClient` global object.\n *\n * var paymentButton = document.querySelector('#google-pay-button');\n * var paymentsClient = new google.payments.api.PaymentsClient({\n *   environment: 'TEST' // or 'PRODUCTION'\n * });\n *\n * braintree.client.create({\n *   authorization: 'tokenization-key-or-client-token'\n * }).then(function (clientInstance) {\n *   return braintree.googlePayment.create({\n *     client: clientInstance,\n *      googlePayVersion: 2,\n *      googleMerchantId: 'your-merchant-id-from-google'\n *   });\n * }).then(function (googlePaymentInstance) {\n *   paymentButton.addEventListener('click', function (event) {\n *     var paymentDataRequest;\n *\n *     event.preventDefault();\n *\n *     paymentDataRequest = googlePaymentInstance.createPaymentDataRequest({\n *       transactionInfo: {\n *         currencyCode: 'USD',\n *         totalPriceStatus: 'FINAL',\n *         totalPrice: '100.00'\n *       }\n *     });\n *\n *     paymentsClient.loadPaymentData(paymentDataRequest).then(function (paymentData) {\n *       return googlePaymentInstance.parseResponse(paymentData);\n *     }).then(function (result) {\n *       // send result.nonce to your server\n *     }).catch(function (err) {\n *       // handle err\n *     });\n *   });\n * });\n * @example <caption>Check Browser and Customer Compatibility</caption>\n * var paymentsClient = new google.payments.api.PaymentsClient({\n *   environment: 'TEST' // or 'PRODUCTION'\n * });\n *\n * function setupGooglePayButton(googlePaymentInstance) {\n *   var button = document.createElement('button');\n *\n *   button.id = 'google-pay';\n *   button.appendChild(document.createTextNode('Google Pay'));\n *   button.addEventListener('click', function (event) {\n *     var paymentRequestData;\n *\n *     event.preventDefault();\n *\n *     paymentDataRequest = googlePaymentInstance.createPaymentDataRequest({\n *       transactionInfo: {\n *         currencyCode: 'USD',\n *         totalPriceStatus: 'FINAL',\n *         totalPrice: '100.00' // your amount\n *       }\n *     });\n *\n *     paymentsClient.loadPaymentData(paymentDataRequest).then(function (paymentData) {\n *       return googlePaymentInstance.parseResponse(paymentData);\n *       }).then(function (result) {\n *       // send result.nonce to your server\n *     }).catch(function (err) {\n *       // handle errors\n *     });\n *   });\n *\n *   document.getElementById('container').appendChild(button);\n * }\n *\n * braintree.client.create({\n *   authorization: 'tokenization-key-or-client-token'\n * }).then(function (clientInstance) {\n *   return braintree.googlePayment.create({\n *     client: clientInstance,\n *     googlePayVersion: 2,\n *     googleMerchantId: 'your-merchant-id-from-google'\n *   });\n * }).then(function (googlePaymentInstance) {\n *\n *   return paymentsClient.isReadyToPay({\n *     // see https://developers.google.com/pay/api/web/reference/object#IsReadyToPayRequest for all options\n *     apiVersion: 2,\n *     apiVersionMinor: 0,\n *     allowedPaymentMethods: googlePaymentInstance.createPaymentDataRequest().allowedPaymentMethods,\n *     existingPaymentMethodRequired: true\n *   });\n * }).then(function (response) {\n *   if (response.result) {\n *     setupGooglePayButton(googlePaymentInstance);\n *   }\n * }).catch(function (err) {\n *   // handle setup errors\n * });\n *\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nfunction create(options) {\n  var name = \"Google Pay\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      var createPromise, instance;\n\n      createPromise = createDeferredClient\n        .create({\n          authorization: options.authorization,\n          client: options.client,\n          debug: options.debug,\n          assetsUrl: createAssetsUrl.create(options.authorization),\n          name: name,\n        })\n        .then(function (client) {\n          var configuration = client.getConfiguration();\n\n          options.client = client;\n          if (!configuration.gatewayConfiguration.androidPay) {\n            return Promise.reject(\n              new BraintreeError(errors.GOOGLE_PAYMENT_NOT_ENABLED)\n            );\n          }\n\n          return client;\n        });\n\n      options.createPromise = createPromise;\n      instance = new GooglePayment(options);\n\n      if (!options.useDeferredClient) {\n        return createPromise.then(function (client) {\n          instance._client = client;\n\n          return instance;\n        });\n      }\n\n      return instance;\n    });\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `{@pkg version}`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/basic-component-verification\":147,\"../lib/braintree-error\":149,\"../lib/create-assets-url\":153,\"../lib/create-deferred-client\":155,\"./errors\":121,\"./google-payment\":122,\"@braintree/wrap-promise\":43}],124:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar BraintreeError = _dereq_(\"../../lib/braintree-error\");\nvar errors = _dereq_(\"../shared/errors\");\nvar allowedAttributes = _dereq_(\"../shared/constants\").allowedAttributes;\n\nfunction attributeValidationError(attribute, value) {\n  var err;\n\n  if (!allowedAttributes.hasOwnProperty(attribute)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_ATTRIBUTE_NOT_SUPPORTED.type,\n      code: errors.HOSTED_FIELDS_ATTRIBUTE_NOT_SUPPORTED.code,\n      message:\n        'The \"' + attribute + '\" attribute is not supported in Hosted Fields.',\n    });\n  } else if (value != null && !_isValid(attribute, value)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_ATTRIBUTE_VALUE_NOT_ALLOWED.type,\n      code: errors.HOSTED_FIELDS_ATTRIBUTE_VALUE_NOT_ALLOWED.code,\n      message:\n        'Value \"' +\n        value +\n        '\" is not allowed for \"' +\n        attribute +\n        '\" attribute.',\n    });\n  }\n\n  return err;\n}\n\nfunction _isValid(attribute, value) {\n  if (allowedAttributes[attribute] === \"string\") {\n    return typeof value === \"string\" || typeof value === \"number\";\n  }\n  if (allowedAttributes[attribute] === \"boolean\") {\n    return String(value) === \"true\" || String(value) === \"false\";\n  }\n\n  return false;\n}\n\nmodule.exports = attributeValidationError;\n\n},{\"../../lib/braintree-error\":149,\"../shared/constants\":132,\"../shared/errors\":133}],125:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar constants = _dereq_(\"../shared/constants\");\nvar useMin = _dereq_(\"../../lib/use-min\");\n\nmodule.exports = function composeUrl(assetsUrl, componentId, isDebug) {\n  return (\n    assetsUrl +\n    \"/web/\" +\n    constants.VERSION +\n    \"/html/hosted-fields-frame\" +\n    useMin(isDebug) +\n    \".html#\" +\n    componentId\n  );\n};\n\n},{\"../../lib/use-min\":188,\"../shared/constants\":132}],126:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar directions = _dereq_(\"../shared/constants\").navigationDirections;\nvar browserDetection = _dereq_(\"../shared/browser-detection\");\nvar focusIntercept = _dereq_(\"../shared/focus-intercept\");\nvar findParentTags = _dereq_(\"../shared/find-parent-tags\");\nvar userFocusableTagNames = [\"INPUT\", \"SELECT\", \"TEXTAREA\"];\n// Devices with software keyboards do not or cannot focus on input types\n// that do not require keyboard-based interaction.\nvar unfocusedInputTypes = [\n  \"hidden\",\n  \"button\",\n  \"reset\",\n  \"submit\",\n  \"checkbox\",\n  \"radio\",\n  \"file\",\n];\n\nfunction _isUserFocusableElement(element) {\n  if (!browserDetection.hasSoftwareKeyboard()) {\n    // on desktop browsers, the only input type that isn't focusable\n    // is the hidden input\n    return element.type !== \"hidden\";\n  }\n\n  return (\n    userFocusableTagNames.indexOf(element.tagName) > -1 &&\n    unfocusedInputTypes.indexOf(element.type) < 0\n  );\n}\n\nfunction _createNavigationHelper(direction, numberOfElementsInForm) {\n  switch (direction) {\n    case directions.BACK:\n      return {\n        checkIndexBounds: function (index) {\n          return index < 0;\n        },\n        indexChange: -1,\n      };\n    case directions.FORWARD:\n      return {\n        checkIndexBounds: function (index) {\n          return index > numberOfElementsInForm - 1;\n        },\n        indexChange: 1,\n      };\n    default:\n  }\n\n  return {};\n}\n\nfunction _findFirstFocusableElement(elementsInForm) {\n  var elementsIndex, element;\n\n  for (\n    elementsIndex = 0;\n    elementsIndex < elementsInForm.length;\n    elementsIndex++\n  ) {\n    element = elementsInForm[elementsIndex];\n\n    if (_isUserFocusableElement(element)) {\n      return element;\n    }\n  }\n\n  return null;\n}\n\nmodule.exports = {\n  removeExtraFocusElements: function (checkoutForm, onRemoveFocusIntercepts) {\n    var elements = Array.prototype.slice.call(checkoutForm.elements);\n    var firstFocusableInput = _findFirstFocusableElement(elements);\n    var lastFocusableInput = _findFirstFocusableElement(elements.reverse());\n\n    // these should never be identical, because there will at least be the\n    // before and the after input\n    [firstFocusableInput, lastFocusableInput].forEach(function (input) {\n      if (!input) {\n        return;\n      }\n\n      if (focusIntercept.matchFocusElement(input.getAttribute(\"id\"))) {\n        onRemoveFocusIntercepts(input.getAttribute(\"id\"));\n      }\n    });\n  },\n\n  createFocusChangeHandler: function (hostedFieldsId, callbacks) {\n    return function (data) {\n      var currentIndex, targetElement, checkoutForm, navHelper;\n      var sourceElement = document.getElementById(\n        \"bt-\" + data.field + \"-\" + data.direction + \"-\" + hostedFieldsId\n      );\n\n      if (!sourceElement) {\n        return;\n      }\n\n      checkoutForm = findParentTags(sourceElement, \"form\")[0];\n\n      if (document.forms.length < 1 || !checkoutForm) {\n        callbacks.onRemoveFocusIntercepts();\n\n        return;\n      }\n\n      checkoutForm = [].slice.call(checkoutForm.elements);\n      currentIndex = checkoutForm.indexOf(sourceElement);\n      navHelper = _createNavigationHelper(data.direction, checkoutForm.length);\n\n      do {\n        currentIndex += navHelper.indexChange;\n        if (navHelper.checkIndexBounds(currentIndex)) {\n          return;\n        }\n        targetElement = checkoutForm[currentIndex];\n      } while (!_isUserFocusableElement(targetElement));\n\n      if (focusIntercept.matchFocusElement(targetElement.getAttribute(\"id\"))) {\n        callbacks.onTriggerInputFocus(\n          targetElement.getAttribute(\"data-braintree-type\")\n        );\n      } else {\n        targetElement.focus();\n      }\n    };\n  },\n};\n\n},{\"../shared/browser-detection\":131,\"../shared/constants\":132,\"../shared/find-parent-tags\":134,\"../shared/focus-intercept\":135}],127:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar allowedStyles = _dereq_(\"../shared/constants\").allowedStyles;\n\nmodule.exports = function getStylesFromClass(cssClass) {\n  var element = document.createElement(\"input\");\n  var styles = {};\n  var computedStyles;\n\n  if (cssClass[0] === \".\") {\n    cssClass = cssClass.substring(1);\n  }\n\n  element.className = cssClass;\n  element.style.display = \"none !important\";\n  element.style.position = \"fixed !important\";\n  element.style.left = \"-99999px !important\";\n  element.style.top = \"-99999px !important\";\n  document.body.appendChild(element);\n\n  computedStyles = window.getComputedStyle(element);\n\n  allowedStyles.forEach(function (style) {\n    var value = computedStyles[style];\n\n    if (value) {\n      styles[style] = value;\n    }\n  });\n\n  document.body.removeChild(element);\n\n  return styles;\n};\n\n},{\"../shared/constants\":132}],128:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar assign = _dereq_(\"../../lib/assign\").assign;\nvar createAssetsUrl = _dereq_(\"../../lib/create-assets-url\");\nvar isVerifiedDomain = _dereq_(\"../../lib/is-verified-domain\");\nvar Destructor = _dereq_(\"../../lib/destructor\");\nvar iFramer = _dereq_(\"@braintree/iframer\");\nvar Bus = _dereq_(\"framebus\");\nvar createDeferredClient = _dereq_(\"../../lib/create-deferred-client\");\nvar BraintreeError = _dereq_(\"../../lib/braintree-error\");\nvar composeUrl = _dereq_(\"./compose-url\");\nvar getStylesFromClass = _dereq_(\"./get-styles-from-class\");\nvar constants = _dereq_(\"../shared/constants\");\nvar errors = _dereq_(\"../shared/errors\");\nvar INTEGRATION_TIMEOUT_MS =\n  _dereq_(\"../../lib/constants\").INTEGRATION_TIMEOUT_MS;\nvar uuid = _dereq_(\"@braintree/uuid\");\nvar findParentTags = _dereq_(\"../shared/find-parent-tags\");\nvar browserDetection = _dereq_(\"../shared/browser-detection\");\nvar events = constants.events;\nvar EventEmitter = _dereq_(\"@braintree/event-emitter\");\nvar injectFrame = _dereq_(\"./inject-frame\");\nvar analytics = _dereq_(\"../../lib/analytics\");\nvar allowedFields = constants.allowedFields;\nvar methods = _dereq_(\"../../lib/methods\");\nvar shadow = _dereq_(\"../../lib/shadow\");\nvar findRootNode = _dereq_(\"../../lib/find-root-node\");\nvar convertMethodsToError = _dereq_(\"../../lib/convert-methods-to-error\");\nvar sharedErrors = _dereq_(\"../../lib/errors\");\nvar getCardTypes = _dereq_(\"../shared/get-card-types\");\nvar attributeValidationError = _dereq_(\"./attribute-validation-error\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar focusChange = _dereq_(\"./focus-change\");\nvar destroyFocusIntercept = _dereq_(\"../shared/focus-intercept\").destroy;\n\nvar SAFARI_FOCUS_TIMEOUT = 5;\n\n/**\n * @typedef {object} HostedFields~tokenizePayload\n * @property {string} nonce The payment method nonce.\n * @property {object} authenticationInsight Info about the [regulatory environment](https://developer.paypal.com/braintree/docs/guides/3d-secure/advanced-options/javascript/v3#authentication-insight) of the tokenized card. Only available if `authenticationInsight.merchantAccountId` is passed in the `tokenize` method options.\n * @property {string} authenticationInsight.regulationEnvironment The [regulation environment](https://developer.paypal.com/braintree/docs/guides/3d-secure/advanced-options/javascript/v3#authentication-insight) for the tokenized card.\n * @property {object} details Additional account details.\n * @property {string} details.bin The BIN number of the card.\n * @property {string} details.cardType Type of card, ex: Visa, MasterCard.\n * @property {string} details.expirationMonth The expiration month of the card.\n * @property {string} details.expirationYear The expiration year of the card.\n * @property {string} details.cardholderName The cardholder name tokenized with the card.\n * @property {string} details.lastFour Last four digits of card number.\n * @property {string} details.lastTwo Last two digits of card number.\n * @property {string} description A human-readable description.\n * @property {string} type The payment method type, always `CreditCard`.\n * @property {object} binData Information about the card based on the bin.\n * @property {string} binData.commercial Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.countryOfIssuance The country of issuance.\n * @property {string} binData.debit Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.durbinRegulated Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.healthcare Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.issuingBank The issuing bank.\n * @property {string} binData.payroll Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.prepaid Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.productId The product id.\n * @property {string} binData.business Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.consumer Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.purchase Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.corporate Possible values: 'Yes', 'No', 'Unknown'.\n */\n\n/**\n * @typedef {object} HostedFields~stateObject\n * @description The event payload sent from {@link HostedFields#on|on} or {@link HostedFields#getState|getState}.\n * @property {HostedFields~hostedFieldsCard[]} cards\n * This will return an array of potential {@link HostedFields~hostedFieldsCard|cards}. If the card type has been determined, the array will contain only one card.\n * Internally, Hosted Fields uses <a href=\"https://github.com/braintree/credit-card-type\">credit-card-type</a>,\n * an open-source card detection library.\n * @property {string} emittedBy\n * The name of the field associated with an event. This will not be included if returned by {@link HostedFields#getState|getState}. It will be one of the following strings:<br>\n * - `\"number\"`\n * - `\"cvv\"`\n * - `\"expirationDate\"`\n * - `\"expirationMonth\"`\n * - `\"expirationYear\"`\n * - `\"postalCode\"`\n * - `\"cardholderName\"`\n * @property {object} fields\n * @property {?HostedFields~hostedFieldsFieldData} fields.number {@link HostedFields~hostedFieldsFieldData|hostedFieldsFieldData} for the number field, if it is present.\n * @property {?HostedFields~hostedFieldsFieldData} fields.cvv {@link HostedFields~hostedFieldsFieldData|hostedFieldsFieldData} for the CVV field, if it is present.\n * @property {?HostedFields~hostedFieldsFieldData} fields.expirationDate {@link HostedFields~hostedFieldsFieldData|hostedFieldsFieldData} for the expiration date field, if it is present.\n * @property {?HostedFields~hostedFieldsFieldData} fields.expirationMonth {@link HostedFields~hostedFieldsFieldData|hostedFieldsFieldData} for the expiration month field, if it is present.\n * @property {?HostedFields~hostedFieldsFieldData} fields.expirationYear {@link HostedFields~hostedFieldsFieldData|hostedFieldsFieldData} for the expiration year field, if it is present.\n * @property {?HostedFields~hostedFieldsFieldData} fields.postalCode {@link HostedFields~hostedFieldsFieldData|hostedFieldsFieldData} for the postal code field, if it is present.\n * @property {?HostedFields~hostedFieldsFieldData} fields.cardholderName {@link HostedFields~hostedFieldsFieldData|hostedFieldsFieldData} for the cardholder name field, if it is present.\n */\n\n/**\n * @typedef {object} HostedFields~binPayload\n * @description The event payload sent from {@link HostedFields#on|on} when the {@link HostedFields#event:binAvailable|binAvailable} event is emitted.\n * @property {string} bin The first 6 or 8 digits (BIN) of the card number, depending on configuration.\n */\n\n/**\n * @typedef {object} HostedFields~hostedFieldsFieldData\n * @description Data about Hosted Fields fields, sent in {@link HostedFields~stateObject|stateObjects}.\n * @property {HTMLElement} container Reference to the container DOM element on your page associated with the current event.\n * @property {boolean} isFocused Whether or not the input is currently focused.\n * @property {boolean} isEmpty Whether or not the user has entered a value in the input.\n * @property {boolean} isPotentiallyValid\n * A determination based on the future validity of the input value.\n * This is helpful when a user is entering a card number and types <code>\"41\"</code>.\n * While that value is not valid for submission, it is still possible for\n * it to become a fully qualified entry. However, if the user enters <code>\"4x\"</code>\n * it is clear that the card number can never become valid and isPotentiallyValid will\n * return false.\n * @property {boolean} isValid Whether or not the value of the associated input is <i>fully</i> qualified for submission.\n */\n\n/**\n * @typedef {object} HostedFields~hostedFieldsCard\n * @description Information about the card type, sent in {@link HostedFields~stateObject|stateObjects}.\n * @property {string} type The code-friendly representation of the card type. It will be one of the following strings:\n * - `american-express`\n * - `diners-club`\n * - `discover`\n * - `elo`\n * - `hiper`\n * - `hipercard`\n * - `jcb`\n * - `maestro`\n * - `master-card`\n * - `unionpay`\n * - `visa`\n * @property {string} niceType The pretty-printed card type. It will be one of the following strings:\n * - `American Express`\n * - `Diners Club`\n * - `Discover`\n * - `Elo`\n * - `Hiper`\n * - `Hipercard`\n * - `JCB`\n * - `Maestro`\n * - `MasterCard`\n * - `UnionPay`\n * - `Visa`\n * @property {object} code\n * This object contains data relevant to the security code requirements of the card brand.\n * For example, on a Visa card there will be a <code>CVV</code> of 3 digits, whereas an\n * American Express card requires a 4-digit <code>CID</code>.\n * @property {string} code.name <code>\"CVV\"</code> <code>\"CID\"</code> <code>\"CVC\"</code>\n * @property {number} code.size The expected length of the security code. Typically, this is 3 or 4.\n */\n\n/**\n * @name HostedFields#on\n * @function\n * @param {string} event The name of the event to which you are subscribing.\n * @param {function} handler A callback to handle the event.\n * @description Subscribes a handler function to a named event.\n *\n * **Events that emit a {@link HostedFields~stateObject|stateObject}.**\n * * {@link HostedFields#event:blur|blur}\n * * {@link HostedFields#event:focus|focus}\n * * {@link HostedFields#event:empty|empty}\n * * {@link HostedFields#event:notEmpty|notEmpty}\n * * {@link HostedFields#event:cardTypeChange|cardTypeChange}\n * * {@link HostedFields#event:validityChange|validityChange}\n * * {@link HostedFields#event:inputSubmitRequest|inputSubmitRequest}\n *\n * **Other Events**\n * * {@link HostedFields#event:binAvailable|binAvailable} - emits a {@link HostedFields~binPayload|bin payload}. Note: If you are using a [Referrer-Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy) header that prevents the origin from being sent, this event will not fire.\n * @example\n * <caption>Listening to a Hosted Field event, in this case 'focus'</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('focus', function (event) {\n *     console.log(event.emittedBy, 'has been focused');\n *   });\n * });\n * @returns {void}\n */\n\n/**\n * @name HostedFields#off\n * @function\n * @param {string} event The name of the event to which you are unsubscribing.\n * @param {function} handler The callback for the event you are unsubscribing from.\n * @description Unsubscribes the handler function to a named event.\n * @example\n * <caption>Subscribing and then unsubscribing from a Hosted Field event, in this case 'focus'</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   var callback = function (event) {\n *     console.log(event.emittedBy, 'has been focused');\n *   };\n *   hostedFieldsInstance.on('focus', callback);\n *\n *   // later on\n *   hostedFieldsInstance.off('focus', callback);\n * });\n * @returns {void}\n */\n\n/**\n * This event is emitted when the user requests submission of an input field, such as by pressing the Enter or Return key on their keyboard, or mobile equivalent.\n * @event HostedFields#inputSubmitRequest\n * @type {HostedFields~stateObject}\n * @example\n * <caption>Clicking a submit button upon hitting Enter (or equivalent) within a Hosted Field</caption>\n * var hostedFields = require('braintree-web/hosted-fields');\n * var submitButton = document.querySelector('input[type=\"submit\"]');\n *\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('inputSubmitRequest', function () {\n *     // User requested submission, e.g. by pressing Enter or equivalent\n *     submitButton.click();\n *   });\n * });\n */\n\n/**\n * This event is emitted when a field transitions from having data to being empty.\n * @event HostedFields#empty\n * @type {HostedFields~stateObject}\n * @example\n * <caption>Listening to an empty event</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('empty', function (event) {\n *     console.log(event.emittedBy, 'is now empty');\n *   });\n * });\n */\n\n/**\n * This event is emitted when a field transitions from being empty to having data.\n * @event HostedFields#notEmpty\n * @type {HostedFields~stateObject}\n * @example\n * <caption>Listening to an notEmpty event</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('notEmpty', function (event) {\n *     console.log(event.emittedBy, 'is now not empty');\n *   });\n * });\n */\n\n/**\n * This event is emitted when a field loses focus.\n * @event HostedFields#blur\n * @type {HostedFields~stateObject}\n * @example\n * <caption>Listening to a blur event</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('blur', function (event) {\n *     console.log(event.emittedBy, 'lost focus');\n *   });\n * });\n */\n\n/**\n * This event is emitted when a field gains focus.\n * @event HostedFields#focus\n * @type {HostedFields~stateObject}\n * @example\n * <caption>Listening to a focus event</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('focus', function (event) {\n *     console.log(event.emittedBy, 'gained focus');\n *   });\n * });\n */\n\n/**\n * This event is emitted when activity within the number field has changed such that the possible card type has changed.\n * @event HostedFields#cardTypeChange\n * @type {HostedFields~stateObject}\n * @example\n * <caption>Listening to a cardTypeChange event</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('cardTypeChange', function (event) {\n *     if (event.cards.length === 1) {\n *       console.log(event.cards[0].type);\n *     } else {\n *       console.log('Type of card not yet known');\n *     }\n *   });\n * });\n */\n\n/**\n * This event is emitted when the validity of a field has changed. Validity is represented in the {@link HostedFields~stateObject|stateObject} as two booleans: `isValid` and `isPotentiallyValid`.\n * @event HostedFields#validityChange\n * @type {HostedFields~stateObject}\n * @example\n * <caption>Listening to a validityChange event</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('validityChange', function (event) {\n *     var field = event.fields[event.emittedBy];\n *\n *     if (field.isValid) {\n *       console.log(event.emittedBy, 'is fully valid');\n *     } else if (field.isPotentiallyValid) {\n *       console.log(event.emittedBy, 'is potentially valid');\n *     } else {\n *       console.log(event.emittedBy, 'is not valid');\n *     }\n *   });\n * });\n */\n\n/**\n * This event is emitted when the first 6 or 8 digits (BIN) of the card number have been entered by the customer. The number of digits depends on the `binVerificationLength` option (default is 6).\n * @event HostedFields#binAvailable\n * @type {HostedFields~binPayload}\n * @example\n * <caption>Listening to a `binAvailable` event (6-digit BIN by default)</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('binAvailable', function (event) {\n *     event.bin // 6 digits by default, e.g. \"411111\"\n *   });\n * });\n * @example\n * <caption>Listening to a `binAvailable` event with 8-digit BIN</caption>\n * hostedFields.create({\n *   binVerificationLength: 8,\n *   fields: { ... }\n * }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('binAvailable', function (event) {\n *     event.bin // 8 digits, e.g. \"41111111\"\n *   });\n * });\n */\n\nfunction createInputEventHandler(fields) {\n  return function (eventData) {\n    var field;\n    var merchantPayload = eventData.merchantPayload;\n    var emittedBy = merchantPayload.emittedBy;\n    var container = fields[emittedBy].containerElement;\n\n    Object.keys(merchantPayload.fields).forEach(function (key) {\n      merchantPayload.fields[key].container = fields[key].containerElement;\n    });\n\n    field = merchantPayload.fields[emittedBy];\n\n    container.classList.toggle(\n      constants.externalClasses.FOCUSED,\n      field.isFocused\n    );\n    container.classList.toggle(constants.externalClasses.VALID, field.isValid);\n\n    container.classList.toggle(\n      constants.externalClasses.INVALID,\n      !field.isPotentiallyValid\n    );\n\n    this._state = {\n      cards: merchantPayload.cards,\n      fields: merchantPayload.fields,\n    };\n\n    this._emit(eventData.type, merchantPayload);\n  };\n}\n\nfunction isVisibleEnough(node) {\n  var boundingBox = node.getBoundingClientRect();\n  var verticalMidpoint = Math.floor(boundingBox.height / 2);\n  var horizontalMidpoint = Math.floor(boundingBox.width / 2);\n\n  return (\n    boundingBox.top <\n      (window.innerHeight - verticalMidpoint ||\n        document.documentElement.clientHeight - verticalMidpoint) &&\n    boundingBox.right > horizontalMidpoint &&\n    boundingBox.bottom > verticalMidpoint &&\n    boundingBox.left <\n      (window.innerWidth - horizontalMidpoint ||\n        document.documentElement.clientWidth - horizontalMidpoint)\n  );\n}\n\n/**\n * @class HostedFields\n * @param {object} options The Hosted Fields {@link module:braintree-web/hosted-fields.create create} options.\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/hosted-fields.create|braintree-web.hosted-fields.create} instead.</strong>\n * @classdesc This class represents a Hosted Fields component produced by {@link module:braintree-web/hosted-fields.create|braintree-web/hosted-fields.create}. Instances of this class have methods for interacting with the input fields within Hosted Fields' iframes.\n */\nfunction HostedFields(options) {\n  var failureTimeout, clientConfig, assetsUrl, isDebug, hostedFieldsUrl;\n  var self = this;\n  var fields = {};\n  var frameReadyPromiseResolveFunctions = {};\n  var frameReadyPromises = [];\n  var componentId = uuid();\n  var sessionId = options.sessionId;\n\n  this._merchantConfigurationOptions = assign({}, options);\n\n  if (options.client) {\n    clientConfig = options.client.getConfiguration(undefined, sessionId);\n    assetsUrl = clientConfig.gatewayConfiguration.assetsUrl;\n    isDebug = clientConfig.isDebug;\n  } else {\n    assetsUrl = createAssetsUrl.create(options.authorization);\n    isDebug = Boolean(options.isDebug);\n  }\n\n  this._clientPromise = createDeferredClient.create({\n    client: options.client,\n    authorization: options.authorization,\n    debug: isDebug,\n    assetsUrl: assetsUrl,\n    name: \"Hosted Fields\",\n    sessionId: sessionId,\n  });\n  // Default URL (used in production)\n  hostedFieldsUrl = composeUrl(assetsUrl, componentId, isDebug);\n\n  if (!options.fields || Object.keys(options.fields).length === 0) {\n    throw new BraintreeError({\n      type: sharedErrors.INSTANTIATION_OPTION_REQUIRED.type,\n      code: sharedErrors.INSTANTIATION_OPTION_REQUIRED.code,\n      message: \"options.fields is required when instantiating Hosted Fields.\",\n    });\n  }\n\n  if (options.binVerificationLength !== undefined) {\n    if (\n      typeof options.binVerificationLength !== \"number\" ||\n      (options.binVerificationLength !== 6 &&\n        options.binVerificationLength !== 8)\n    ) {\n      throw new BraintreeError({\n        type: sharedErrors.INSTANTIATION_OPTION_INVALID.type,\n        code: sharedErrors.INSTANTIATION_OPTION_INVALID.code,\n        message: \"options.binVerificationLength must be either 6 or 8.\",\n      });\n    }\n  }\n\n  EventEmitter.call(this);\n\n  this._injectedNodes = [];\n  this._destructor = new Destructor();\n  this._fields = fields;\n  this._state = {\n    fields: {},\n    cards: getCardTypes(\"\"),\n  };\n\n  this._bus = new Bus({\n    channel: componentId,\n    verifyDomain: isVerifiedDomain,\n    targetFrames: [window],\n  });\n\n  this._destructor.registerFunctionForTeardown(function () {\n    self._bus.teardown();\n  });\n\n  if (!options.client) {\n    analytics.sendEvent(\n      this._clientPromise,\n      \"custom.hosted-fields.initialized.deferred-client\"\n    );\n  } else {\n    analytics.sendEvent(\n      this._clientPromise,\n      \"custom.hosted-fields.initialized\"\n    );\n  }\n\n  Object.keys(options.fields).forEach(\n    function (key) {\n      var field, externalContainer, internalContainer, frame, frameReadyPromise;\n\n      if (!constants.allowedFields.hasOwnProperty(key)) {\n        throw new BraintreeError({\n          type: errors.HOSTED_FIELDS_INVALID_FIELD_KEY.type,\n          code: errors.HOSTED_FIELDS_INVALID_FIELD_KEY.code,\n          message: '\"' + key + '\" is not a valid field.',\n        });\n      }\n\n      field = options.fields[key];\n      // NEXT_MAJOR_VERSION remove selector as an option\n      // and simply make the API take a container\n      externalContainer = field.container || field.selector;\n\n      if (typeof externalContainer === \"string\") {\n        externalContainer = document.querySelector(externalContainer);\n      }\n\n      if (!externalContainer || externalContainer.nodeType !== 1) {\n        throw new BraintreeError({\n          type: errors.HOSTED_FIELDS_INVALID_FIELD_SELECTOR.type,\n          code: errors.HOSTED_FIELDS_INVALID_FIELD_SELECTOR.code,\n          message: errors.HOSTED_FIELDS_INVALID_FIELD_SELECTOR.message,\n          details: {\n            fieldSelector: field.selector,\n            fieldContainer: field.container,\n            fieldKey: key,\n          },\n        });\n      } else if (\n        externalContainer.querySelector('iframe[name^=\"braintree-\"]')\n      ) {\n        throw new BraintreeError({\n          type: errors.HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME.type,\n          code: errors.HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME.code,\n          message: errors.HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME.message,\n          details: {\n            fieldSelector: field.selector,\n            fieldContainer: field.container,\n            fieldKey: key,\n          },\n        });\n      }\n\n      internalContainer = externalContainer;\n\n      if (shadow.isShadowElement(internalContainer)) {\n        internalContainer = shadow.transformToSlot(\n          internalContainer,\n          \"height: 100%\"\n        );\n      }\n\n      if (field.maxlength && typeof field.maxlength !== \"number\") {\n        throw new BraintreeError({\n          type: errors.HOSTED_FIELDS_FIELD_PROPERTY_INVALID.type,\n          code: errors.HOSTED_FIELDS_FIELD_PROPERTY_INVALID.code,\n          message: \"The value for maxlength must be a number.\",\n          details: {\n            fieldKey: key,\n          },\n        });\n      }\n\n      if (field.minlength && typeof field.minlength !== \"number\") {\n        throw new BraintreeError({\n          type: errors.HOSTED_FIELDS_FIELD_PROPERTY_INVALID.type,\n          code: errors.HOSTED_FIELDS_FIELD_PROPERTY_INVALID.code,\n          message: \"The value for minlength must be a number.\",\n          details: {\n            fieldKey: key,\n          },\n        });\n      }\n\n      frame = iFramer({\n        type: key,\n        name: \"braintree-hosted-field-\" + key,\n        style: constants.defaultIFrameStyle,\n        title:\n          field.iframeTitle ||\n          \"Secure Credit Card Frame - \" + constants.allowedFields[key].label,\n      });\n      this._bus.addTargetFrame(frame);\n\n      this._injectedNodes.push.apply(\n        this._injectedNodes,\n        injectFrame(componentId, frame, internalContainer, function () {\n          self.focus(key);\n        })\n      );\n\n      this._setupLabelFocus(key, externalContainer);\n      fields[key] = {\n        frameElement: frame,\n        containerElement: externalContainer,\n      };\n      frameReadyPromise = new Promise(function (resolve) {\n        frameReadyPromiseResolveFunctions[key] = resolve;\n      });\n      frameReadyPromises.push(frameReadyPromise);\n\n      this._state.fields[key] = {\n        isEmpty: true,\n        isValid: false,\n        isPotentiallyValid: true,\n        isFocused: false,\n        container: externalContainer,\n      };\n\n      // prevents loading the iframe from blocking the code\n      setTimeout(function () {\n        frame.src = hostedFieldsUrl;\n      }, 0);\n    }.bind(this)\n  );\n\n  if (this._merchantConfigurationOptions.styles) {\n    Object.keys(this._merchantConfigurationOptions.styles).forEach(\n      function (selector) {\n        var className = self._merchantConfigurationOptions.styles[selector];\n\n        if (typeof className === \"string\") {\n          self._merchantConfigurationOptions.styles[selector] =\n            getStylesFromClass(className);\n        }\n      }\n    );\n  }\n\n  this._bus.on(events.REMOVE_FOCUS_INTERCEPTS, function (data) {\n    destroyFocusIntercept(data && data.id);\n  });\n\n  this._bus.on(\n    events.TRIGGER_FOCUS_CHANGE,\n    focusChange.createFocusChangeHandler(componentId, {\n      onRemoveFocusIntercepts: function (element) {\n        self._bus.emit(events.REMOVE_FOCUS_INTERCEPTS, {\n          id: element,\n        });\n      },\n      onTriggerInputFocus: function (targetType) {\n        self.focus(targetType);\n      },\n    })\n  );\n\n  this._bus.on(events.READY_FOR_CLIENT, function (reply) {\n    self._clientPromise.then(function (client) {\n      reply(client);\n    });\n  });\n\n  this._bus.on(events.CARD_FORM_ENTRY_HAS_BEGUN, function () {\n    analytics.sendEvent(self._clientPromise, \"hosted-fields.input.started\");\n  });\n\n  this._bus.on(events.BIN_AVAILABLE, function (bin) {\n    self._emit(\"binAvailable\", {\n      bin: bin,\n    });\n  });\n\n  failureTimeout = setTimeout(function () {\n    analytics.sendEvent(\n      self._clientPromise,\n      \"custom.hosted-fields.load.timed-out\"\n    );\n    self._emit(\"timeout\");\n  }, INTEGRATION_TIMEOUT_MS);\n\n  Promise.all(frameReadyPromises).then(function (results) {\n    var reply = results[0];\n\n    clearTimeout(failureTimeout);\n    reply(\n      formatMerchantConfigurationForIframes(self._merchantConfigurationOptions)\n    );\n\n    self._cleanUpFocusIntercepts();\n\n    self._emit(\"ready\");\n  });\n\n  this._bus.on(events.FRAME_READY, function (data, reply) {\n    frameReadyPromiseResolveFunctions[data.field](reply);\n  });\n\n  this._bus.on(events.INPUT_EVENT, createInputEventHandler(fields).bind(this));\n\n  this._destructor.registerFunctionForTeardown(function () {\n    var j, node, parent;\n\n    for (j = 0; j < self._injectedNodes.length; j++) {\n      node = self._injectedNodes[j];\n      parent = node.parentNode;\n\n      parent.removeChild(node);\n\n      parent.classList.remove(\n        constants.externalClasses.FOCUSED,\n        constants.externalClasses.INVALID,\n        constants.externalClasses.VALID\n      );\n    }\n  });\n\n  this._destructor.registerFunctionForTeardown(function () {\n    destroyFocusIntercept();\n  });\n\n  this._destructor.registerFunctionForTeardown(function () {\n    var methodNames = methods(HostedFields.prototype).concat(\n      methods(EventEmitter.prototype)\n    );\n\n    convertMethodsToError(self, methodNames);\n  });\n}\n\nEventEmitter.createChild(HostedFields);\n\nHostedFields.prototype._setupLabelFocus = function (type, container) {\n  var labels, i;\n  var self = this;\n  var rootNode = findRootNode(container);\n\n  if (container.id == null) {\n    return;\n  }\n\n  function triggerFocus() {\n    self.focus(type);\n  }\n\n  // find any labels in the normal DOM\n  labels = Array.prototype.slice.call(\n    document.querySelectorAll('label[for=\"' + container.id + '\"]')\n  );\n  if (rootNode !== document) {\n    // find any labels within the shadow dom\n    labels = labels.concat(\n      Array.prototype.slice.call(\n        rootNode.querySelectorAll('label[for=\"' + container.id + '\"]')\n      )\n    );\n  }\n  // find any labels surrounding the container that don't also have the `for` attribute\n  labels = labels.concat(findParentTags(container, \"label\"));\n  // filter out any accidental duplicates\n  labels = labels.filter(function (label, index, arr) {\n    return arr.indexOf(label) === index;\n  });\n\n  for (i = 0; i < labels.length; i++) {\n    labels[i].addEventListener(\"click\", triggerFocus, false);\n  }\n\n  this._destructor.registerFunctionForTeardown(function () {\n    for (i = 0; i < labels.length; i++) {\n      labels[i].removeEventListener(\"click\", triggerFocus, false);\n    }\n  });\n};\n\nHostedFields.prototype._getAnyFieldContainer = function () {\n  var self = this;\n\n  return Object.keys(this._fields).reduce(function (found, field) {\n    return found || self._fields[field].containerElement;\n  }, null);\n};\n\nHostedFields.prototype._cleanUpFocusIntercepts = function () {\n  var iframeContainer, checkoutForm;\n\n  if (document.forms.length < 1) {\n    this._bus.emit(events.REMOVE_FOCUS_INTERCEPTS);\n  } else {\n    iframeContainer = this._getAnyFieldContainer();\n    checkoutForm = findParentTags(iframeContainer, \"form\")[0];\n\n    if (checkoutForm) {\n      focusChange.removeExtraFocusElements(\n        checkoutForm,\n        function (id) {\n          this._bus.emit(events.REMOVE_FOCUS_INTERCEPTS, {\n            id: id,\n          });\n        }.bind(this)\n      );\n    } else {\n      this._bus.emit(events.REMOVE_FOCUS_INTERCEPTS);\n    }\n  }\n};\n\nHostedFields.prototype._attachInvalidFieldContainersToError = function (err) {\n  if (\n    !(\n      err.details &&\n      err.details.invalidFieldKeys &&\n      err.details.invalidFieldKeys.length > 0\n    )\n  ) {\n    return;\n  }\n  err.details.invalidFields = {};\n  err.details.invalidFieldKeys.forEach(\n    function (field) {\n      err.details.invalidFields[field] = this._fields[field].containerElement;\n    }.bind(this)\n  );\n};\n\n/**\n * Get card verification challenges, such as requirements for cvv and postal code.\n * @public\n * @param {callback} [callback] Called on completion, containing an error if one occurred. If no callback is provided, `getChallenges` returns a promise.\n * @example\n * hostedFieldsInstance.getChallenges().then(function (challenges) {\n *   challenges // ['cvv', 'postal_code']\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.getChallenges = function () {\n  return this._clientPromise.then(function (client) {\n    return client.getConfiguration().gatewayConfiguration.challenges;\n  });\n};\n\n/**\n * Get supported card types configured in the Braintree Control Panel\n * @public\n * @param {callback} [callback] Called on completion, containing an error if one occurred. If no callback is provided, `getSupportedCardTypes` returns a promise.\n * @example\n * hostedFieldsInstance.getSupportedCardTypes().then(function (cardTypes) {\n *   cardTypes // ['Visa', 'American Express', 'Mastercard']\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.getSupportedCardTypes = function () {\n  return this._clientPromise.then(function (client) {\n    var cards = client\n      .getConfiguration()\n      .gatewayConfiguration.creditCards.supportedCardTypes.map(\n        function (cardType) {\n          if (cardType === \"MasterCard\") {\n            // Mastercard changed their branding. We can't update our\n            // config without creating a breaking change, so we just\n            // hard code the change here\n            return \"Mastercard\";\n          }\n\n          return cardType;\n        }\n      );\n\n    return cards;\n  });\n};\n\n/**\n * Cleanly remove anything set up by {@link module:braintree-web/hosted-fields.create|create}.\n * @public\n * @param {callback} [callback] Called on completion, containing an error if one occurred. No data is returned if teardown completes successfully. If no callback is provided, `teardown` returns a promise.\n * @example\n * hostedFieldsInstance.teardown(function (teardownErr) {\n *   if (teardownErr) {\n *     console.error('Could not tear down Hosted Fields!');\n *   } else {\n *     console.info('Hosted Fields has been torn down!');\n *   }\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.teardown = function () {\n  var self = this;\n\n  return new Promise(function (resolve, reject) {\n    self._destructor.teardown(function (err) {\n      analytics.sendEvent(\n        self._clientPromise,\n        \"custom.hosted-fields.teardown-completed\"\n      );\n\n      if (err) {\n        reject(err);\n      } else {\n        resolve();\n      }\n    });\n  });\n};\n\n/**\n * Tokenizes fields and returns a nonce payload.\n * @public\n * @param {object} [options] All tokenization options for the Hosted Fields component.\n * @param {boolean} [options.vault=false] When true, will vault the tokenized card. Cards will only be vaulted when using a client created with a client token that includes a customer ID. Note: merchants using Advanced Fraud Tools should not use this option, as device data will not be included.\n * @param {object} [options.authenticationInsight] Options for checking authentication insight - the [regulatory environment](https://developer.paypal.com/braintree/docs/guides/3d-secure/advanced-options/javascript/v3#authentication-insight) of the tokenized card.\n * @param {string} options.authenticationInsight.merchantAccountId The Braintree merchant account id to use to look up the authentication insight information.\n * @param {array} [options.fieldsToTokenize] By default, all fields will be tokenized. You may specify which fields specifically you wish to tokenize with this property. Valid options are `'number'`, `'cvv'`, `'expirationDate'`, `'expirationMonth'`, `'expirationYear'`, `'postalCode'`, `'cardholderName'`.\n * @param {string} [options.cardholderName] When supplied, the cardholder name to be tokenized with the contents of the fields.\n * @param {string} [options.billingAddress.postalCode] When supplied, this postal code will be tokenized along with the contents of the fields. If a postal code is provided as part of the Hosted Fields configuration, the value of the field will be tokenized and this value will be ignored.\n * @param {string} [options.billingAddress.firstName] When supplied, this customer first name will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.lastName] When supplied, this customer last name will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.company] When supplied, this company name will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.streetAddress] When supplied, this street address will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.extendedAddress] When supplied, this extended address will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.locality] When supplied, this locality (the city) will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.region] When supplied, this region (the state) will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.countryCodeNumeric] When supplied, this numeric country code will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.countryCodeAlpha2] When supplied, this alpha 2 representation of a country will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.countryCodeAlpha3] When supplied, this alpha 3 representation of a country will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.countryName] When supplied, this country name will be tokenized along with the contents of the fields.\n *\n * @param {callback} [callback] May be used as the only parameter of the function if no options are passed in. The second argument, <code>data</code>, is a {@link HostedFields~tokenizePayload|tokenizePayload}. If no callback is provided, `tokenize` returns a function that resolves with a {@link HostedFields~tokenizePayload|tokenizePayload}.\n * @example <caption>Tokenize a card</caption>\n * hostedFieldsInstance.tokenize(function (tokenizeErr, payload) {\n *   if (tokenizeErr) {\n *     switch (tokenizeErr.code) {\n *       case 'HOSTED_FIELDS_FIELDS_EMPTY':\n *         // occurs when none of the fields are filled in\n *         console.error('All fields are empty! Please fill out the form.');\n *         break;\n *       case 'HOSTED_FIELDS_FIELDS_INVALID':\n *         // occurs when certain fields do not pass client side validation\n *         console.error('Some fields are invalid:', tokenizeErr.details.invalidFieldKeys);\n *\n *         // you can also programmatically access the field containers for the invalid fields\n *         tokenizeErr.details.invalidFields.forEach(function (fieldContainer) {\n *           fieldContainer.className = 'invalid';\n *         });\n *         break;\n *       case 'HOSTED_FIELDS_TOKENIZATION_FAIL_ON_DUPLICATE':\n *         // occurs when:\n *         //   * the client token used for client authorization was generated\n *         //     with a customer ID and the fail on duplicate payment method\n *         //     option is set to true\n *         //   * the card being tokenized has previously been vaulted (with any customer)\n *         // See: https://developer.paypal.com/braintree/docs/reference/request/client-token/generate#options.fail_on_duplicate_payment_method\n *         console.error('This payment method already exists in your vault.');\n *         break;\n *       case 'HOSTED_FIELDS_TOKENIZATION_CVV_VERIFICATION_FAILED':\n *         // occurs when:\n *         //   * the client token used for client authorization was generated\n *         //     with a customer ID and the verify card option is set to true\n *         //     and you have credit card verification turned on in the Braintree\n *         //     control panel\n *         //   * the cvv does not pass verification (https://developer.paypal.com/braintree/docs/reference/general/testing#avs-and-cvv/cid-responses)\n *         // See: https://developer.paypal.com/braintree/docs/reference/request/client-token/generate#options.verify_card\n *         console.error('CVV did not pass verification');\n *         break;\n *       case 'HOSTED_FIELDS_FAILED_TOKENIZATION':\n *         // occurs for any other tokenization error on the server\n *         console.error('Tokenization failed server side. Is the card valid?');\n *         break;\n *       case 'HOSTED_FIELDS_TOKENIZATION_NETWORK_ERROR':\n *         // occurs when the Braintree gateway cannot be contacted\n *         console.error('Network error occurred when tokenizing.');\n *         break;\n *       default:\n *         console.error('Something bad happened!', tokenizeErr);\n *     }\n *   } else {\n *     console.log('Got nonce:', payload.nonce);\n *   }\n * });\n * @example <caption>Tokenize and vault a card</caption>\n * hostedFieldsInstance.tokenize({\n *   vault: true\n * }, function (tokenizeErr, payload) {\n *   if (tokenizeErr) {\n *     console.error(tokenizeErr);\n *   } else {\n *     console.log('Got nonce:', payload.nonce);\n *   }\n * });\n * @example <caption>Tokenize a card with non-Hosted Fields cardholder name</caption>\n * hostedFieldsInstance.tokenize({\n *   cardholderName: 'First Last'\n * }, function (tokenizeErr, payload) {\n *   if (tokenizeErr) {\n *     console.error(tokenizeErr);\n *   } else {\n *     console.log('Got nonce:', payload.nonce);\n *   }\n * });\n * @example <caption>Tokenize a card with non-Hosted Fields postal code option</caption>\n * hostedFieldsInstance.tokenize({\n *   billingAddress: {\n *     postalCode: '11111'\n *   }\n * }, function (tokenizeErr, payload) {\n *   if (tokenizeErr) {\n *     console.error(tokenizeErr);\n *   } else {\n *     console.log('Got nonce:', payload.nonce);\n *   }\n * });\n * @example <caption>Tokenize a card with additional billing address options</caption>\n * hostedFieldsInstance.tokenize({\n *   billingAddress: {\n *     firstName: 'First',\n *     lastName: 'Last',\n *     company: 'Company',\n *     streetAddress: '123 Street',\n *     extendedAddress: 'Unit 1',\n *     // passing just one of the country options is sufficient to\n *     // associate the card details with a particular country\n *     // valid country names and codes can be found here:\n *     // https://developer.paypal.com/braintree/docs/reference/general/countries/ruby#list-of-countries\n *     countryName: 'United States',\n *     countryCodeAlpha2: 'US',\n *     countryCodeAlpha3: 'USA',\n *     countryCodeNumeric: '840'\n *   }\n * }, function (tokenizeErr, payload) {\n *   if (tokenizeErr) {\n *     console.error(tokenizeErr);\n *   } else {\n *     console.log('Got nonce:', payload.nonce);\n *   }\n * });\n * @example <caption>Allow tokenization with empty cardholder name field</caption>\n * var state = hostedFieldsInstance.getState();\n * var fields = Object.keys(state.fields);\n *\n * // normally, if you tried to tokenize an empty cardholder name field\n * // you would get an error, to allow making this field optional,\n * // tokenize all the fields except for the cardholder name field\n * // when the cardholder name field is empty. Otherwise, tokenize\n * // all the fields\n * if (state.fields.cardholderName.isEmpty) {\n *  fields = fields.filter(function (field) {\n *    return field !== 'cardholderName';\n *  });\n * }\n *\n * hostedFieldsInstance.tokenize({\n *  fieldsToTokenize: fields\n * }, function (tokenizeErr, payload) {\n *   if (tokenizeErr) {\n *     console.error(tokenizeErr);\n *   } else {\n *     console.log('Got nonce:', payload.nonce);\n *   }\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.tokenize = function (options) {\n  var self = this;\n\n  if (!options) {\n    options = {};\n  }\n\n  return new Promise(function (resolve, reject) {\n    self._bus.emit(events.TOKENIZATION_REQUEST, options, function (response) {\n      var err = response[0];\n      var payload = response[1];\n\n      if (err) {\n        self._attachInvalidFieldContainersToError(err);\n        reject(new BraintreeError(err));\n      } else {\n        resolve(payload);\n      }\n    });\n  });\n};\n\n/**\n * Add a class to a {@link module:braintree-web/hosted-fields~field field}. Useful for updating field styles when events occur elsewhere in your checkout.\n * @public\n * @param {string} field The field you wish to add a class to. Must be a valid {@link module:braintree-web/hosted-fields~fieldOptions fieldOption}.\n * @param {string} classname The class to be added.\n * @param {callback} [callback] Callback executed on completion, containing an error if one occurred. No data is returned if the class is added successfully.\n *\n * @example\n * hostedFieldsInstance.addClass('number', 'custom-class', function (addClassErr) {\n *   if (addClassErr) {\n *     console.error(addClassErr);\n *   }\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.addClass = function (field, classname) {\n  var err;\n\n  if (!allowedFields.hasOwnProperty(field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_INVALID.type,\n      code: errors.HOSTED_FIELDS_FIELD_INVALID.code,\n      message:\n        '\"' +\n        field +\n        '\" is not a valid field. You must use a valid field option when adding a class.',\n    });\n  } else if (!this._fields.hasOwnProperty(field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.type,\n      code: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.code,\n      message:\n        'Cannot add class to \"' +\n        field +\n        '\" field because it is not part of the current Hosted Fields options.',\n    });\n  } else {\n    this._bus.emit(events.ADD_CLASS, {\n      field: field,\n      classname: classname,\n    });\n  }\n\n  if (err) {\n    return Promise.reject(err);\n  }\n\n  return Promise.resolve();\n};\n\n/**\n * Removes a class to a {@link module:braintree-web/hosted-fields~field field}. Useful for updating field styles when events occur elsewhere in your checkout.\n * @public\n * @param {string} field The field you wish to remove a class from. Must be a valid {@link module:braintree-web/hosted-fields~fieldOptions fieldOption}.\n * @param {string} classname The class to be removed.\n * @param {callback} [callback] Callback executed on completion, containing an error if one occurred. No data is returned if the class is removed successfully.\n *\n * @example\n * hostedFieldsInstance.addClass('number', 'custom-class', function (addClassErr) {\n *   if (addClassErr) {\n *     console.error(addClassErr);\n *     return;\n *   }\n *\n *   // some time later...\n *   hostedFieldsInstance.removeClass('number', 'custom-class');\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.removeClass = function (field, classname) {\n  var err;\n\n  if (!allowedFields.hasOwnProperty(field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_INVALID.type,\n      code: errors.HOSTED_FIELDS_FIELD_INVALID.code,\n      message:\n        '\"' +\n        field +\n        '\" is not a valid field. You must use a valid field option when removing a class.',\n    });\n  } else if (!this._fields.hasOwnProperty(field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.type,\n      code: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.code,\n      message:\n        'Cannot remove class from \"' +\n        field +\n        '\" field because it is not part of the current Hosted Fields options.',\n    });\n  } else {\n    this._bus.emit(events.REMOVE_CLASS, {\n      field: field,\n      classname: classname,\n    });\n  }\n\n  if (err) {\n    return Promise.reject(err);\n  }\n\n  return Promise.resolve();\n};\n\n/**\n * Sets an attribute of a {@link module:braintree-web/hosted-fields~field field}.\n * Supported attributes are `aria-invalid`, `aria-required`, `disabled`, and `placeholder`.\n *\n * @public\n * @param {object} options The options for the attribute you wish to set.\n * @param {string} options.field The field to which you wish to add an attribute. Must be a valid {@link module:braintree-web/hosted-fields~fieldOptions fieldOption}.\n * @param {string} options.attribute The name of the attribute you wish to add to the field.\n * @param {string} options.value The value for the attribute.\n * @param {callback} [callback] Callback executed on completion, containing an error if one occurred. No data is returned if the attribute is set successfully.\n *\n * @example <caption>Set the placeholder attribute of a field</caption>\n * hostedFieldsInstance.setAttribute({\n *   field: 'number',\n *   attribute: 'placeholder',\n *   value: '1111 1111 1111 1111'\n * }, function (attributeErr) {\n *   if (attributeErr) {\n *     console.error(attributeErr);\n *   }\n * });\n *\n * @example <caption>Set the aria-required attribute of a field</caption>\n * hostedFieldsInstance.setAttribute({\n *   field: 'number',\n *   attribute: 'aria-required',\n *   value: true\n * }, function (attributeErr) {\n *   if (attributeErr) {\n *     console.error(attributeErr);\n *   }\n * });\n *\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.setAttribute = function (options) {\n  var attributeErr, err;\n\n  if (!allowedFields.hasOwnProperty(options.field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_INVALID.type,\n      code: errors.HOSTED_FIELDS_FIELD_INVALID.code,\n      message:\n        '\"' +\n        options.field +\n        '\" is not a valid field. You must use a valid field option when setting an attribute.',\n    });\n  } else if (!this._fields.hasOwnProperty(options.field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.type,\n      code: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.code,\n      message:\n        'Cannot set attribute for \"' +\n        options.field +\n        '\" field because it is not part of the current Hosted Fields options.',\n    });\n  } else {\n    attributeErr = attributeValidationError(options.attribute, options.value);\n\n    if (attributeErr) {\n      err = attributeErr;\n    } else {\n      this._bus.emit(events.SET_ATTRIBUTE, {\n        field: options.field,\n        attribute: options.attribute,\n        value: options.value,\n      });\n    }\n  }\n\n  if (err) {\n    return Promise.reject(err);\n  }\n\n  return Promise.resolve();\n};\n\n/**\n * Sets the month options for the expiration month field when presented as a select element.\n *\n * @public\n * @param {array} options An array of 12 entries corresponding to the 12 months.\n * @param {callback} [callback] Callback executed on completion, containing an error if one occurred. No data is returned if the options are updated successfully. Errors if expirationMonth is not configured on the Hosted Fields instance or if the expirationMonth field is not configured to be a select input.\n *\n * @example <caption>Update the month options to spanish</caption>\n * hostedFieldsInstance.setMonthOptions([\n *   '01 - enero',\n *   '02 - febrero',\n *   '03 - marzo',\n *   '04 - abril',\n *   '05 - mayo',\n *   '06 - junio',\n *   '07 - julio',\n *   '08 - agosto',\n *   '09 - septiembre',\n *   '10 - octubre',\n *   '11 - noviembre',\n *   '12 - diciembre'\n * ]);\n *\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.setMonthOptions = function (options) {\n  var self = this;\n  var merchantOptions = this._merchantConfigurationOptions.fields;\n  var errorMessage;\n\n  if (!merchantOptions.expirationMonth) {\n    errorMessage = \"Expiration month field must exist to use setMonthOptions.\";\n  } else if (!merchantOptions.expirationMonth.select) {\n    errorMessage = \"Expiration month field must be a select element.\";\n  }\n\n  if (errorMessage) {\n    return Promise.reject(\n      new BraintreeError({\n        type: errors.HOSTED_FIELDS_FIELD_PROPERTY_INVALID.type,\n        code: errors.HOSTED_FIELDS_FIELD_PROPERTY_INVALID.code,\n        message: errorMessage,\n      })\n    );\n  }\n\n  return new Promise(function (resolve) {\n    self._bus.emit(events.SET_MONTH_OPTIONS, options, resolve);\n  });\n};\n\n/**\n * Sets a visually hidden message (for screen readers) on a {@link module:braintree-web/hosted-fields~field field}.\n *\n * @public\n * @param {object} options The options for the attribute you wish to set.\n * @param {string} options.field The field to which you wish to add an attribute. Must be a valid {@link module:braintree-web/hosted-fields~field field}.\n * @param {string} options.message The message to set.\n *\n * @example <caption>Set an error message on a field</caption>\n * hostedFieldsInstance.setMessage({\n *   field: 'number',\n *   message: 'Invalid card number'\n * });\n *\n * @example <caption>Remove the message on a field</caption>\n * hostedFieldsInstance.setMessage({\n *   field: 'number',\n *   message: ''\n * });\n *\n * @returns {void}\n */\nHostedFields.prototype.setMessage = function (options) {\n  this._bus.emit(events.SET_MESSAGE, {\n    field: options.field,\n    message: options.message,\n  });\n};\n\n/**\n * Removes a supported attribute from a {@link module:braintree-web/hosted-fields~field field}.\n *\n * @public\n * @param {object} options The options for the attribute you wish to remove.\n * @param {string} options.field The field from which you wish to remove an attribute. Must be a valid {@link module:braintree-web/hosted-fields~fieldOptions fieldOption}.\n * @param {string} options.attribute The name of the attribute you wish to remove from the field.\n * @param {callback} [callback] Callback executed on completion, containing an error if one occurred. No data is returned if the attribute is removed successfully.\n *\n * @example <caption>Remove the placeholder attribute of a field</caption>\n * hostedFieldsInstance.removeAttribute({\n *   field: 'number',\n *   attribute: 'placeholder'\n * }, function (attributeErr) {\n *   if (attributeErr) {\n *     console.error(attributeErr);\n *   }\n * });\n *\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.removeAttribute = function (options) {\n  var attributeErr, err;\n\n  if (!allowedFields.hasOwnProperty(options.field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_INVALID.type,\n      code: errors.HOSTED_FIELDS_FIELD_INVALID.code,\n      message:\n        '\"' +\n        options.field +\n        '\" is not a valid field. You must use a valid field option when removing an attribute.',\n    });\n  } else if (!this._fields.hasOwnProperty(options.field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.type,\n      code: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.code,\n      message:\n        'Cannot remove attribute for \"' +\n        options.field +\n        '\" field because it is not part of the current Hosted Fields options.',\n    });\n  } else {\n    attributeErr = attributeValidationError(options.attribute);\n\n    if (attributeErr) {\n      err = attributeErr;\n    } else {\n      this._bus.emit(events.REMOVE_ATTRIBUTE, {\n        field: options.field,\n        attribute: options.attribute,\n      });\n    }\n  }\n\n  if (err) {\n    return Promise.reject(err);\n  }\n\n  return Promise.resolve();\n};\n\n/**\n * @deprecated since version 3.8.0. Use {@link HostedFields#setAttribute|setAttribute} instead.\n *\n * @public\n * @param {string} field The field whose placeholder you wish to change. Must be a valid {@link module:braintree-web/hosted-fields~fieldOptions fieldOption}.\n * @param {string} placeholder Will be used as the `placeholder` attribute of the input.\n * @param {callback} [callback] Callback executed on completion, containing an error if one occurred. No data is returned if the placeholder updated successfully.\n *\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.setPlaceholder = function (field, placeholder) {\n  return this.setAttribute({\n    field: field,\n    attribute: \"placeholder\",\n    value: placeholder,\n  });\n};\n\n/**\n * Clear the value of a {@link module:braintree-web/hosted-fields~field field}.\n * @public\n * @param {string} field The field you wish to clear. Must be a valid {@link module:braintree-web/hosted-fields~fieldOptions fieldOption}.\n * @param {callback} [callback] Callback executed on completion, containing an error if one occurred. No data is returned if the field cleared successfully.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * hostedFieldsInstance.clear('number', function (clearErr) {\n *   if (clearErr) {\n *     console.error(clearErr);\n *   }\n * });\n *\n * @example <caption>Clear several fields</caption>\n * hostedFieldsInstance.clear('number');\n * hostedFieldsInstance.clear('cvv');\n * hostedFieldsInstance.clear('expirationDate');\n */\nHostedFields.prototype.clear = function (field) {\n  var err;\n\n  if (!allowedFields.hasOwnProperty(field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_INVALID.type,\n      code: errors.HOSTED_FIELDS_FIELD_INVALID.code,\n      message:\n        '\"' +\n        field +\n        '\" is not a valid field. You must use a valid field option when clearing a field.',\n    });\n  } else if (!this._fields.hasOwnProperty(field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.type,\n      code: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.code,\n      message:\n        'Cannot clear \"' +\n        field +\n        '\" field because it is not part of the current Hosted Fields options.',\n    });\n  } else {\n    this._bus.emit(events.CLEAR_FIELD, {\n      field: field,\n    });\n  }\n\n  if (err) {\n    return Promise.reject(err);\n  }\n\n  return Promise.resolve();\n};\n\n/**\n * Programmatically focus a {@link module:braintree-web/hosted-fields~field field}.\n * @public\n * @param {string} field The field you want to focus. Must be a valid {@link module:braintree-web/hosted-fields~fieldOptions fieldOption}.\n * @param {callback} [callback] Callback executed on completion, containing an error if one occurred. No data is returned if the field focused successfully.\n * @returns {void}\n * @example\n * hostedFieldsInstance.focus('number', function (focusErr) {\n *   if (focusErr) {\n *     console.error(focusErr);\n *   }\n * });\n * @example <caption>Using an event listener</caption>\n * myElement.addEventListener('click', function (e) {\n *   // In Firefox, the focus method can be suppressed\n *   //   if the element has a tabindex property or the element\n *   //   is an anchor link with an href property.\n *   e.preventDefault();\n *   hostedFieldsInstance.focus('number');\n * });\n */\nHostedFields.prototype.focus = function (field) {\n  var err;\n  var fieldConfig = this._fields[field];\n\n  if (!allowedFields.hasOwnProperty(field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_INVALID.type,\n      code: errors.HOSTED_FIELDS_FIELD_INVALID.code,\n      message:\n        '\"' +\n        field +\n        '\" is not a valid field. You must use a valid field option when focusing a field.',\n    });\n  } else if (!this._fields.hasOwnProperty(field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.type,\n      code: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.code,\n      message:\n        'Cannot focus \"' +\n        field +\n        '\" field because it is not part of the current Hosted Fields options.',\n    });\n  } else {\n    fieldConfig.frameElement.focus();\n\n    this._bus.emit(events.TRIGGER_INPUT_FOCUS, {\n      field: field,\n    });\n\n    if (browserDetection.isIos()) {\n      // Inputs outside of the viewport don't always scroll into view on\n      // focus in iOS Safari. 5ms timeout gives the browser a chance to\n      // do the right thing and prevents stuttering.\n      setTimeout(function () {\n        if (!isVisibleEnough(fieldConfig.containerElement)) {\n          fieldConfig.containerElement.scrollIntoView();\n        }\n      }, SAFARI_FOCUS_TIMEOUT);\n    }\n  }\n\n  if (err) {\n    return Promise.reject(err);\n  }\n\n  return Promise.resolve();\n};\n\n/**\n * Returns an {@link HostedFields~stateObject|object} that includes the state of all fields and possible card types.\n * @public\n * @returns {object} {@link HostedFields~stateObject|stateObject}\n * @example <caption>Check if all fields are valid</caption>\n * var state = hostedFieldsInstance.getState();\n *\n * var formValid = Object.keys(state.fields).every(function (key) {\n *   return state.fields[key].isValid;\n * });\n */\nHostedFields.prototype.getState = function () {\n  return this._state;\n};\n\n// React adds decorations to DOM nodes that cause\n// circular dependencies, so we remove them from the\n// config before sending it to the iframes. However,\n// we don't want to mutate the original object that\n// was passed in, so we create fresh objects via assign\nfunction formatMerchantConfigurationForIframes(config) {\n  var formattedConfig = assign({}, config);\n\n  formattedConfig.fields = assign({}, formattedConfig.fields);\n  Object.keys(formattedConfig.fields).forEach(function (field) {\n    formattedConfig.fields[field] = assign({}, formattedConfig.fields[field]);\n    delete formattedConfig.fields[field].container;\n  });\n\n  return formattedConfig;\n}\n\nmodule.exports = wrapPromise.wrapPrototype(HostedFields);\n\n},{\"../../lib/analytics\":143,\"../../lib/assign\":146,\"../../lib/braintree-error\":149,\"../../lib/constants\":150,\"../../lib/convert-methods-to-error\":151,\"../../lib/create-assets-url\":153,\"../../lib/create-deferred-client\":155,\"../../lib/destructor\":157,\"../../lib/errors\":160,\"../../lib/find-root-node\":161,\"../../lib/is-verified-domain\":180,\"../../lib/methods\":182,\"../../lib/shadow\":185,\"../shared/browser-detection\":131,\"../shared/constants\":132,\"../shared/errors\":133,\"../shared/find-parent-tags\":134,\"../shared/focus-intercept\":135,\"../shared/get-card-types\":136,\"./attribute-validation-error\":124,\"./compose-url\":125,\"./focus-change\":126,\"./get-styles-from-class\":127,\"./inject-frame\":129,\"@braintree/event-emitter\":33,\"@braintree/iframer\":35,\"@braintree/uuid\":39,\"@braintree/wrap-promise\":43,\"framebus\":54}],129:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar focusIntercept = _dereq_(\"../shared/focus-intercept\");\nvar directions = _dereq_(\"../shared/constants\").navigationDirections;\n\nmodule.exports = function injectFrame(id, frame, container, focusHandler) {\n  var frameType = frame.getAttribute(\"type\");\n  var clearboth = document.createElement(\"div\");\n  var fragment = document.createDocumentFragment();\n  var focusInterceptBefore = focusIntercept.generate(\n    id,\n    frameType,\n    directions.BACK,\n    focusHandler\n  );\n  var focusInterceptAfter = focusIntercept.generate(\n    id,\n    frameType,\n    directions.FORWARD,\n    focusHandler\n  );\n\n  clearboth.style.clear = \"both\";\n\n  fragment.appendChild(focusInterceptBefore);\n  fragment.appendChild(frame);\n  fragment.appendChild(focusInterceptAfter);\n  fragment.appendChild(clearboth);\n\n  container.appendChild(fragment);\n\n  return [frame, clearboth];\n};\n\n},{\"../shared/constants\":132,\"../shared/focus-intercept\":135}],130:[function(_dereq_,module,exports){\n\"use strict\";\n/** @module braintree-web/hosted-fields */\n\nvar HostedFields = _dereq_(\"./external/hosted-fields\");\nvar basicComponentVerification = _dereq_(\"../lib/basic-component-verification\");\nvar errors = _dereq_(\"./shared/errors\");\nvar supportsInputFormatting = _dereq_(\"restricted-input/supports-input-formatting\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar VERSION = \"3.145.0\";\n\n/**\n * Fields used in {@link module:braintree-web/hosted-fields~fieldOptions fields options}\n * @typedef {object} field\n * @property {string} selector Deprecated: Now an alias for `options.container`.\n * @property {(string|HTMLElement)} container A DOM node or CSS selector to find the container where the hosted field will be inserted.\n * @property {string} [placeholder] Will be used as the `placeholder` attribute of the input. If `placeholder` is not natively supported by the browser, it will be polyfilled.\n * @property {string} [type] Will be used as the `type` attribute of the input. To mask `cvv` input, for instance, `type: \"password\"` can be used.\n * @property {string} [iframeTitle] The title used for the iframe containing the credit card input. By default, this will be `Secure Credit Card Frame - <the name of the specific field>`.\n * @property {string} [internalLabel] Each Hosted Field iframe has a hidden label that is used by screen readers to identify the input. The `internalLabel` property can be used to customize the field for localization purposes. The default values are:\n * * number: Credit Card Number\n * * cvv: CVV\n * * expirationDate: Expiration Date\n * * expirationMonth: Expiration Month\n * * expirationYear: Expiration Year\n * * postalCode: Postal Code\n * * cardholderName: Cardholder Name\n * @property {boolean} [formatInput=true] Enable or disable automatic formatting on this field.\n * @property {(object|boolean)} [maskInput=false] Enable or disable input masking when input is not focused. If set to `true` instead of an object, the defaults for the `maskInput` parameters will be used.\n * @property {string} [maskInput.character=\u2022] The character to use when masking the input. The default character ('\u2022') uses a unicode symbol, so the webpage must support UTF-8 characters when using the default.\n * @property {Boolean} [maskInput.showLastFour=false] Only applicable for the credit card field. Whether or not to show the last 4 digits of the card when masking.\n * @property {(object|boolean)} [select] If truthy, this field becomes a `<select>` dropdown list. This can only be used for `expirationMonth` and `expirationYear` fields. If you do not use a `placeholder` property for the field, the current month/year will be the default selected value.\n * @property {string[]} [select.options] An array of 12 strings, one per month. This can only be used for the `expirationMonth` field. For example, the array can look like `['01 - January', '02 - February', ...]`.\n * @property {number} [maxCardLength] This option applies only to the number field. Allows a limit to the length of the card number, even if the card brand may support numbers of a greater length. If the value passed is greater than the max length for a card brand, the smaller number of the 2 values will be used. For example, is `maxCardLength` is set to 16, but an American Express card is entered (which has a max card length of 15), a max card length of 15 will be used.\n * @property {number} [maxlength] This option applies only to the CVV and postal code fields. Will be used as the `maxlength` attribute of the input. The primary use cases for the `maxlength` option are: limiting the length of the CVV input for CVV-only verifications when the card type is known and setting the length of the postal code input when cards are coming from a known region. The default `maxlength` for the postal code input is `10`.\n * @property {number} [minlength=3] This option applies only to the cvv and postal code fields. Will be used as the `minlength` attribute of the input.\n * For postal code fields, the default value is 3, representing the Icelandic postal code length. This option's primary use case is to increase the `minlength`, e.g. for US customers, the postal code `minlength` can be set to 5.\n * For cvv fields, the default value is 3. The `minlength` attribute only applies to integrations capturing a cvv without a number field.\n * @property {string} [prefill] A value to prefill the field with. For example, when creating an update card form, you can prefill the expiration date fields with the old expiration date data.\n * @property {boolean} [rejectUnsupportedCards=false] Deprecated since version 3.46.0, use `supportedCardBrands` instead. Only allow card types that your merchant account is able to process. Unsupported card types will invalidate the card form. e.g. if you only process Visa cards, a customer entering a American Express card would get an invalid card field. This can only be used for the `number` field.\n * @property {object} [supportedCardBrands] Override card brands that are supported by the card form. Pass `'card-brand-id': true` to override the default in the merchant configuration and enable a card brand. Pass `'card-brand-id': false` to disable a card brand. Unsupported card types will invalidate the card form. e.g. if you only process Visa cards, a customer entering an American Express card would get an invalid card field. This can only be used for the  `number` field. (Note: only allow card types that your merchant account is actually able to process.)\n *\n * Valid card brand ids are:\n * * visa\n * * mastercard\n * * american-express\n * * diners-club\n * * discover\n * * jcb\n * * union-pay\n * * maestro\n * * elo\n * * mir\n * * hiper\n * * hipercard\n */\n\n/**\n * An object that has {@link module:braintree-web/hosted-fields~field field objects} for each field. Used in {@link module:braintree-web/hosted-fields~create create}.\n * @typedef {object} fieldOptions\n * @property {field} [number] A field for card number.\n * @property {field} [expirationDate] A field for expiration date in `MM/YYYY` or `MM/YY` format. This should not be used with the `expirationMonth` and `expirationYear` properties.\n * @property {field} [expirationMonth] A field for expiration month in `MM` format. This should be used with the `expirationYear` property.\n * @property {field} [expirationYear] A field for expiration year in `YYYY` or `YY` format. This should be used with the `expirationMonth` property.\n * @property {field} [cvv] A field for 3 or 4 digit card verification code (like CVV or CID). If you wish to create a CVV-only payment method nonce to verify a card already stored in your Vault, omit all other fields to only collect CVV.\n * @property {field} [postalCode] A field for postal or region code.\n * @property {field} [cardholderName] A field for the cardholder name on the customer's credit card.\n */\n\n/**\n * An object that represents CSS that will be applied in each hosted field. This object looks similar to CSS. Typically, these styles involve fonts (such as `font-family` or `color`).\n *\n * You may also pass the name of a class on your site that contains the styles you would like to apply. The style properties will be automatically pulled off the class and applied to the Hosted Fields inputs. Note: this is recommended for `input` elements only. If using a `select` for the expiration date, unexpected styling may occur.\n *\n * These are the CSS properties that Hosted Fields supports. Any other CSS should be specified on your page and outside of any Braintree configuration. Trying to set unsupported properties will fail and put a warning in the console.\n *\n * Supported CSS properties are:\n * `appearance`\n * `box-shadow`\n * `color`\n * `direction`\n * `font-family`\n * `font-size-adjust`\n * `font-size`\n * `font-stretch`\n * `font-style`\n * `font-variant-alternates`\n * `font-variant-caps`\n * `font-variant-east-asian`\n * `font-variant-ligatures`\n * `font-variant-numeric`\n * `font-variant`\n * `font-weight`\n * `font`\n * `letter-spacing`\n * `line-height`\n * `opacity`\n * `outline`\n * `margin`\n * `margin-top`\n * `margin-right`\n * `margin-bottom`\n * `margin-left`\n * `padding`\n * `padding-top`\n * `padding-right`\n * `padding-bottom`\n * `padding-left`\n * `text-align`\n * `text-shadow`\n * `transition`\n * `-moz-appearance`\n * `-moz-box-shadow`\n * `-moz-osx-font-smoothing`\n * `-moz-tap-highlight-color`\n * `-moz-transition`\n * `-webkit-appearance`\n * `-webkit-box-shadow`\n * `-webkit-font-smoothing`\n * `-webkit-tap-highlight-color`\n * `-webkit-transition`\n * @typedef {object} styleOptions\n */\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {fieldOptions} options.fields A {@link module:braintree-web/hosted-fields~fieldOptions set of options for each field}.\n * @param {styleOptions} [options.styles] {@link module:braintree-web/hosted-fields~styleOptions Styles} applied to each field.\n * @param {boolean} [options.preventAutofill=false] When true, browsers will not try to prompt the customer to autofill their credit card information.\n * @param {number} [options.binVerificationLength=6] The number of digits to use for BIN verification. Must be either 6 or 8. Default is 6.\n * @param {string} [options.sessionId] Used in specific cases where associating SDK events with a specific external id is required.\n * @param {callback} [callback] The second argument, `data`, is the {@link HostedFields} instance. If no callback is provided, `create` returns a promise that resolves with the {@link HostedFields} instance.\n * @returns {void}\n * @example\n * braintree.hostedFields.create({\n *   client: clientInstance,\n *   styles: {\n *     'input': {\n *       'font-size': '16pt',\n *       'color': '#3A3A3A'\n *     },\n *     '.number': {\n *       'font-family': 'monospace'\n *     },\n *     '.valid': {\n *       'color': 'green'\n *     }\n *   },\n *   fields: {\n *     number: {\n *       container: '#card-number'\n *     },\n *     cvv: {\n *       container: '#cvv',\n *       placeholder: '\u2022\u2022\u2022'\n *     },\n *     expirationDate: {\n *       container: '#expiration-date'\n *     }\n *   }\n * }, callback);\n * @example <caption>With cardholder name</caption>\n * braintree.hostedFields.create({\n *   client: clientInstance,\n *   fields: {\n *     number: {\n *       container: '#card-number'\n *     },\n *     cardholderName: {\n *       container: '#cardholder-name'\n *     },\n *     cvv: {\n *       container: '#cvv',\n *     },\n *     expirationDate: {\n *       container: '#expiration-date'\n *     }\n *   }\n * }, callback);\n * @example <caption>Applying styles with a class name</caption>\n * // in document head\n * <style>\n *   .braintree-input-class {\n *     color: black;\n *   }\n *   .braintree-valid-class {\n *     color: green;\n *   }\n *   .braintree-invalid-class {\n *     color: red;\n *   }\n * </style>\n * // in a script tag\n * braintree.hostedFields.create({\n *   client: clientInstance,\n *   styles: {\n *     'input': 'braintree-input-class',\n *     '.invalid': 'braintree-invalid-class',\n *     '.valid': {\n *       // you can also use the object syntax alongside\n *       // the class name syntax\n *       color: green;\n *     }\n *   },\n *   fields: {\n *     number: {\n *       container: '#card-number'\n *     },\n *     // etc...\n *   }\n * }, callback);\n * @example <caption>Right to Left Language Support</caption>\n * braintree.hostedFields.create({\n *   client: clientInstance,\n *   styles: {\n *     'input': {\n *       // other styles\n *       direction: 'rtl'\n *     },\n *   },\n *   fields: {\n *     number: {\n *       container: '#card-number',\n *       // Credit card formatting is not currently supported\n *       // with RTL languages, so we need to turn it off for the number input\n *       formatInput: false\n *     },\n *     cvv: {\n *       container: '#cvv',\n *       placeholder: '\u2022\u2022\u2022'\n *     },\n *     expirationDate: {\n *       container: '#expiration-date',\n *       type: 'month'\n *     }\n *   }\n * }, callback);\n * @example <caption>Setting up Hosted Fields to tokenize CVV only</caption>\n * braintree.hostedFields.create({\n *   client: clientInstance,\n *   fields: {\n *     // Only add the `cvv` option.\n *     cvv: {\n *       container: '#cvv',\n *       placeholder: '\u2022\u2022\u2022'\n *     }\n *   }\n * }, callback);\n * @example <caption>Creating an expiration date update form with prefilled data</caption>\n * var storedCreditCardInformation = {\n *   // get this info from your server\n *   // with a payment method lookup\n *   month: '09',\n *   year: '2017'\n * };\n *\n * braintree.hostedFields.create({\n *   client: clientInstance,\n *   fields: {\n *     expirationMonth: {\n *       container: '#expiration-month',\n *       prefill: storedCreditCardInformation.month\n *     },\n *     expirationYear: {\n *       container: '#expiration-year',\n *       prefill: storedCreditCardInformation.year\n *     }\n *   }\n * }, callback);\n * @example <caption>Validate the card form for supported card types</caption>\n * braintree.hostedFields.create({\n *   client: clientInstance,\n *   fields: {\n *     number: {\n *       container: '#card-number',\n *       supportedCardBrands: {\n *         visa: false, // prevents Visas from showing up as valid even when the Braintree control panel is configured to allow them\n *         'diners-club': true // allow Diners Club cards to be valid (processed as Discover cards on the Braintree backend)\n *       }\n *     },\n *     cvv: {\n *       container: '#cvv',\n *       placeholder: '\u2022\u2022\u2022'\n *     },\n *     expirationDate: {\n *       container: '#expiration-date',\n *       type: 'month'\n *     }\n *   },\n * }, callback);\n * @example <caption>Using 8-digit BIN support</caption>\n * braintree.hostedFields.create({\n *   client: clientInstance,\n *   binVerificationLength: 8, // Enable 8-digit BIN detection\n *   fields: {\n *     number: {\n *       container: '#card-number'\n *     },\n *     cvv: {\n *       container: '#cvv',\n *       placeholder: '\u2022\u2022\u2022'\n *     },\n *     expirationDate: {\n *       container: '#expiration-date'\n *     }\n *   }\n * }, function(err, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('binAvailable', function(event) {\n *     console.log('BIN:', event.bin); // Will be 8 digits when binVerificationLength is 8\n *     // Use the BIN for more accurate card identification\n *   });\n * });\n */\nfunction create(options) {\n  return basicComponentVerification\n    .verify({\n      name: \"Hosted Fields\",\n      authorization: options.authorization,\n      client: options.client,\n    })\n    .then(function () {\n      var integration = new HostedFields(options);\n\n      return new Promise(function (resolve, reject) {\n        integration.on(\"ready\", function () {\n          resolve(integration);\n        });\n        integration.on(\"timeout\", function () {\n          reject(new BraintreeError(errors.HOSTED_FIELDS_TIMEOUT));\n        });\n      });\n    });\n}\n\nmodule.exports = {\n  /**\n   * @static\n   * @function supportsInputFormatting\n   * @description Returns false if input formatting will be automatically disabled due to browser incompatibility. Otherwise, returns true. For a list of unsupported browsers, [go here](https://github.com/braintree/restricted-input/blob/main/README.md#browsers-where-formatting-is-turned-off-automatically).\n   * @returns {Boolean} Returns false if input formatting will be automatically disabled due to browser incompatibility. Otherwise, returns true.\n   * @example\n   * <caption>Conditionally choosing split expiration date inputs if formatting is unavailable</caption>\n   * var canFormat = braintree.hostedFields.supportsInputFormatting();\n   * var fields = {\n   *   number: {\n   *     container: '#card-number'\n   *   },\n   *   cvv: {\n   *     container: '#cvv'\n   *   }\n   * };\n   *\n   * if (canFormat) {\n   *   fields.expirationDate = {\n   *     selection: '#expiration-date'\n   *   };\n   *   functionToCreateAndInsertExpirationDateDivToForm();\n   * } else {\n   *   fields.expirationMonth = {\n   *     selection: '#expiration-month'\n   *   };\n   *   fields.expirationYear = {\n   *     selection: '#expiration-year'\n   *   };\n   *   functionToCreateAndInsertExpirationMonthAndYearDivsToForm();\n   * }\n   *\n   * braintree.hostedFields.create({\n   *   client: clientInstance,\n   *   styles: {\n   *     // Styles\n   *   },\n   *   fields: fields\n   * }, callback);\n   */\n  supportsInputFormatting: supportsInputFormatting,\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `{@pkg version}`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/basic-component-verification\":147,\"../lib/braintree-error\":149,\"./external/hosted-fields\":128,\"./shared/errors\":133,\"@braintree/wrap-promise\":43,\"restricted-input/supports-input-formatting\":88}],131:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar isAndroid = _dereq_(\"@braintree/browser-detection/is-android\");\nvar isChromeOS = _dereq_(\"@braintree/browser-detection/is-chrome-os\");\nvar isIos = _dereq_(\"@braintree/browser-detection/is-ios\");\nvar isChrome = _dereq_(\"@braintree/browser-detection/is-chrome\");\nvar isSafari = _dereq_(\"@braintree/browser-detection/is-safari\");\nvar isIosSafari = _dereq_(\"@braintree/browser-detection/is-ios-safari\");\n\nfunction hasSoftwareKeyboard() {\n  return isAndroid() || isChromeOS() || isIos();\n}\n\nfunction isChromeIos() {\n  return isChrome() && isIos();\n}\n\nmodule.exports = {\n  isAndroid: isAndroid,\n  isChromeOS: isChromeOS,\n  isChromeIos: isChromeIos,\n  isFirefox: _dereq_(\"@braintree/browser-detection/is-firefox\"),\n  isIos: isIos,\n  isIosWebview: _dereq_(\"@braintree/browser-detection/is-ios-webview\"),\n  isSafari: isSafari,\n  isIosSafari: isIosSafari,\n  hasSoftwareKeyboard: hasSoftwareKeyboard,\n};\n\n},{\"@braintree/browser-detection/is-android\":22,\"@braintree/browser-detection/is-chrome\":24,\"@braintree/browser-detection/is-chrome-os\":23,\"@braintree/browser-detection/is-firefox\":25,\"@braintree/browser-detection/is-ios\":30,\"@braintree/browser-detection/is-ios-safari\":27,\"@braintree/browser-detection/is-ios-webview\":28,\"@braintree/browser-detection/is-safari\":31}],132:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar enumerate = _dereq_(\"../../lib/enumerate\");\nvar errors = _dereq_(\"./errors\");\nvar VERSION = \"3.145.0\";\n\nvar constants = {\n  VERSION: VERSION,\n  maxExpirationYearAge: 19,\n  externalEvents: {\n    FOCUS: \"focus\",\n    BLUR: \"blur\",\n    EMPTY: \"empty\",\n    NOT_EMPTY: \"notEmpty\",\n    VALIDITY_CHANGE: \"validityChange\",\n    CARD_TYPE_CHANGE: \"cardTypeChange\",\n  },\n  defaultMaxLengths: {\n    number: 19,\n    postalCode: 8,\n    expirationDate: 7,\n    expirationMonth: 2,\n    expirationYear: 4,\n    cvv: 3,\n  },\n  externalClasses: {\n    FOCUSED: \"braintree-hosted-fields-focused\",\n    INVALID: \"braintree-hosted-fields-invalid\",\n    VALID: \"braintree-hosted-fields-valid\",\n  },\n  navigationDirections: {\n    BACK: \"before\",\n    FORWARD: \"after\",\n  },\n  defaultIFrameStyle: {\n    border: \"none\",\n    width: \"100%\",\n    height: \"100%\",\n    float: \"left\",\n  },\n  tokenizationErrorCodes: {\n    81724: errors.HOSTED_FIELDS_TOKENIZATION_FAIL_ON_DUPLICATE,\n    // NEXT_MAJOR_VERSION this error triggers for both AVS and CVV errors\n    // but the code name implies that it would only trigger for CVV verification\n    // failures\n    81736: errors.HOSTED_FIELDS_TOKENIZATION_CVV_VERIFICATION_FAILED,\n  },\n  allowedStyles: [\n    \"-moz-appearance\",\n    \"-moz-box-shadow\",\n    \"-moz-osx-font-smoothing\",\n    \"-moz-tap-highlight-color\",\n    \"-moz-transition\",\n    \"-webkit-appearance\",\n    \"-webkit-box-shadow\",\n    \"-webkit-font-smoothing\",\n    \"-webkit-tap-highlight-color\",\n    \"-webkit-text-fill-color\",\n    \"-webkit-transition\",\n    \"appearance\",\n    \"box-shadow\",\n    \"color\",\n    \"direction\",\n    \"font\",\n    \"font-family\",\n    \"font-size\",\n    \"font-size-adjust\",\n    \"font-stretch\",\n    \"font-style\",\n    \"font-variant\",\n    \"font-variant-alternates\",\n    \"font-variant-caps\",\n    \"font-variant-east-asian\",\n    \"font-variant-ligatures\",\n    \"font-variant-numeric\",\n    \"font-weight\",\n    \"letter-spacing\",\n    \"line-height\",\n    \"margin\",\n    \"margin-top\",\n    \"margin-right\",\n    \"margin-bottom\",\n    \"margin-left\",\n    \"opacity\",\n    \"outline\",\n    \"padding\",\n    \"padding-top\",\n    \"padding-right\",\n    \"padding-bottom\",\n    \"padding-left\",\n    \"text-align\",\n    \"text-shadow\",\n    \"transition\",\n  ],\n  allowedFields: {\n    cardholderName: {\n      name: \"cardholder-name\",\n      label: \"Cardholder Name\",\n    },\n    number: {\n      name: \"credit-card-number\",\n      label: \"Credit Card Number\",\n    },\n    cvv: {\n      name: \"cvv\",\n      label: \"CVV\",\n    },\n    expirationDate: {\n      name: \"expiration\",\n      label: \"Expiration Date\",\n    },\n    expirationMonth: {\n      name: \"expiration-month\",\n      label: \"Expiration Month\",\n    },\n    expirationYear: {\n      name: \"expiration-year\",\n      label: \"Expiration Year\",\n    },\n    postalCode: {\n      name: \"postal-code\",\n      label: \"Postal Code\",\n    },\n  },\n  allowedAttributes: {\n    \"aria-invalid\": \"boolean\",\n    \"aria-required\": \"boolean\",\n    disabled: \"boolean\",\n    placeholder: \"string\",\n  },\n  allowedBillingAddressFields: [\n    \"company\",\n    \"countryCodeNumeric\",\n    \"countryCodeAlpha2\",\n    \"countryCodeAlpha3\",\n    \"countryName\",\n    \"extendedAddress\",\n    \"locality\",\n    \"region\",\n    \"firstName\",\n    \"lastName\",\n    \"postalCode\",\n    \"streetAddress\",\n  ],\n  allowedShippingAddressFields: [\n    \"company\",\n    \"countryCodeNumeric\",\n    \"countryCodeAlpha2\",\n    \"countryCodeAlpha3\",\n    \"countryName\",\n    \"extendedAddress\",\n    \"locality\",\n    \"region\",\n    \"firstName\",\n    \"lastName\",\n    \"postalCode\",\n    \"streetAddress\",\n  ],\n  autocompleteMappings: {\n    \"cardholder-name\": \"cc-name\",\n    \"credit-card-number\": \"cc-number\",\n    expiration: \"cc-exp\",\n    \"expiration-month\": \"cc-exp-month\",\n    \"expiration-year\": \"cc-exp-year\",\n    cvv: \"cc-csc\",\n    \"postal-code\": \"billing postal-code\",\n  },\n};\n\nconstants.events = enumerate(\n  [\n    \"ADD_CLASS\",\n    \"AUTOFILL_DATA_AVAILABLE\",\n    \"BIN_AVAILABLE\",\n    \"CARD_FORM_ENTRY_HAS_BEGUN\",\n    \"CLEAR_FIELD\",\n    \"CONFIGURATION\",\n    \"FRAME_READY\",\n    \"INPUT_EVENT\",\n    \"READY_FOR_CLIENT\",\n    \"REMOVE_ATTRIBUTE\",\n    \"REMOVE_CLASS\",\n    \"REMOVE_FOCUS_INTERCEPTS\",\n    \"SET_ATTRIBUTE\",\n    \"SET_MESSAGE\",\n    \"SET_MONTH_OPTIONS\",\n    \"TOKENIZATION_REQUEST\",\n    \"TRIGGER_FOCUS_CHANGE\",\n    \"TRIGGER_INPUT_FOCUS\",\n    \"VALIDATE_STRICT\",\n  ],\n  \"hosted-fields:\"\n);\n\nmodule.exports = constants;\n\n},{\"../../lib/enumerate\":159,\"./errors\":133}],133:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Hosted Fields - Creation Error Codes\n * @description Errors that occur when [creating the Hosted Fields component](./module-braintree-web_hosted-fields.html#.create).\n * @property {UNKNOWN} HOSTED_FIELDS_TIMEOUT Occurs when Hosted Fields does not finish setting up within 60 seconds.\n * @property {MERCHANT} HOSTED_FIELDS_INVALID_FIELD_KEY Occurs when Hosted Fields is instantiated with an invalid Field option.\n * @property {MERCHANT} HOSTED_FIELDS_INVALID_FIELD_SELECTOR Occurs when Hosted Fields given a field selector that is not valid.\n * @property {MERCHANT} HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME Occurs when Hosted Fields given a field selector that already contains an iframe.\n * @property {MERCHANT} HOSTED_FIELDS_FIELD_PROPERTY_INVALID Occurs when a field configuration option is not valid.\n */\n\n/**\n * @name BraintreeError.Hosted Fields - Field Manipulation Error Codes\n * @description Errors that occur when modifying fields through [`addClass`](./HostedFields.html#addClass), [`removeClass`](./HostedFields.html#removeClass), [`setAttribute`](./HostedFields.html#setAttribute), [`removeAttribute`](./HostedFields.html#removeAttribute), [`clear`](./HostedFields.html#clear), [`focus`](./HostedFields.html#focus), and [`setMonthOptions`](./HostedFields.html#setMonthOptions).\n * @property {MERCHANT} HOSTED_FIELDS_FIELD_INVALID Occurs when attempting to modify a field that is not a valid Hosted Fields option.\n * @property {MERCHANT} HOSTED_FIELDS_FIELD_NOT_PRESENT Occurs when attempting to modify a field that is not configured with Hosted Fields.\n * @property {MERCHANT} HOSTED_FIELDS_FIELD_PROPERTY_INVALID Occurs when a field configuration option is not valid.\n */\n\n/**\n * @name BraintreeError.Hosted Fields - Set Attribute Error Codes\n * @description Errors that occur when using the [`setAttribute` method](./HostedFields.html#setAttribute)\n * @property {MERCHANT} HOSTED_FIELDS_ATTRIBUTE_NOT_SUPPORTED Occurs when trying to set an attribute that is not supported to be set.\n * @property {MERCHANT} HOSTED_FIELDS_ATTRIBUTE_VALUE_NOT_ALLOWED Occurs when the type of value for an attribute is not allowed to be set.\n */\n\n/**\n * @name BraintreeError.Hosted Fields - Tokenize Error Codes\n * @description Errors that occur when [tokenizing the card details with Hosted Fields](./HostedFields.html#tokenize).\n * @property {NETWORK} HOSTED_FIELDS_TOKENIZATION_NETWORK_ERROR Occurs when the Braintree gateway cannot be contacted.\n * @property {CUSTOMER} HOSTED_FIELDS_TOKENIZATION_FAIL_ON_DUPLICATE Occurs when attempting to vault a card, but the client token being used is configured to fail if the card already exists in the vault.\n * @property {CUSTOMER} HOSTED_FIELDS_TOKENIZATION_CVV_VERIFICATION_FAILED Occurs when cvv verification is turned on in the Braintree control panel.\n * @property {CUSTOMER} HOSTED_FIELDS_FAILED_TOKENIZATION Occurs when the credit card details were sent to Braintree, but failed to tokenize.\n * @property {CUSTOMER} HOSTED_FIELDS_FIELDS_EMPTY Occurs when all the Hosted Fields inputs are empty.\n * @property {CUSTOMER} HOSTED_FIELDS_FIELDS_INVALID Occurs when one ore more fields are invalid.\n */\n\nvar BraintreeError = _dereq_(\"../../lib/braintree-error\");\n\nmodule.exports = {\n  HOSTED_FIELDS_TIMEOUT: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"HOSTED_FIELDS_TIMEOUT\",\n    message: \"Hosted Fields timed out when attempting to set up.\",\n  },\n  HOSTED_FIELDS_INVALID_FIELD_KEY: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"HOSTED_FIELDS_INVALID_FIELD_KEY\",\n  },\n  HOSTED_FIELDS_INVALID_FIELD_SELECTOR: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"HOSTED_FIELDS_INVALID_FIELD_SELECTOR\",\n    message: \"Selector does not reference a valid DOM node.\",\n  },\n  HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME\",\n    message: \"Element already contains a Braintree iframe.\",\n  },\n  HOSTED_FIELDS_FIELD_INVALID: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"HOSTED_FIELDS_FIELD_INVALID\",\n  },\n  HOSTED_FIELDS_FIELD_NOT_PRESENT: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"HOSTED_FIELDS_FIELD_NOT_PRESENT\",\n  },\n  HOSTED_FIELDS_TOKENIZATION_NETWORK_ERROR: {\n    type: BraintreeError.types.NETWORK,\n    code: \"HOSTED_FIELDS_TOKENIZATION_NETWORK_ERROR\",\n    message: \"A tokenization network error occurred.\",\n  },\n  HOSTED_FIELDS_TOKENIZATION_FAIL_ON_DUPLICATE: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"HOSTED_FIELDS_TOKENIZATION_FAIL_ON_DUPLICATE\",\n    message: \"This credit card already exists in the merchant's vault.\",\n  },\n  HOSTED_FIELDS_TOKENIZATION_CVV_VERIFICATION_FAILED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"HOSTED_FIELDS_TOKENIZATION_CVV_VERIFICATION_FAILED\",\n    message: \"CVV verification failed during tokenization.\",\n  },\n  HOSTED_FIELDS_FAILED_TOKENIZATION: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"HOSTED_FIELDS_FAILED_TOKENIZATION\",\n    message: \"The supplied card data failed tokenization.\",\n  },\n  HOSTED_FIELDS_FIELDS_EMPTY: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"HOSTED_FIELDS_FIELDS_EMPTY\",\n    message: \"All fields are empty. Cannot tokenize empty card fields.\",\n  },\n  HOSTED_FIELDS_FIELDS_INVALID: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"HOSTED_FIELDS_FIELDS_INVALID\",\n    message:\n      \"Some payment input fields are invalid. Cannot tokenize invalid card fields.\",\n  },\n  HOSTED_FIELDS_ATTRIBUTE_NOT_SUPPORTED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"HOSTED_FIELDS_ATTRIBUTE_NOT_SUPPORTED\",\n  },\n  HOSTED_FIELDS_ATTRIBUTE_VALUE_NOT_ALLOWED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"HOSTED_FIELDS_ATTRIBUTE_VALUE_NOT_ALLOWED\",\n  },\n  HOSTED_FIELDS_FIELD_PROPERTY_INVALID: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"HOSTED_FIELDS_FIELD_PROPERTY_INVALID\",\n  },\n};\n\n},{\"../../lib/braintree-error\":149}],134:[function(_dereq_,module,exports){\n\"use strict\";\n\nfunction findParentTags(element, tag) {\n  var parent = element.parentNode;\n  var parents = [];\n\n  while (parent != null) {\n    if (parent.tagName != null && parent.tagName.toLowerCase() === tag) {\n      parents.push(parent);\n    }\n\n    parent = parent.parentNode;\n  }\n\n  return parents;\n}\n\nmodule.exports = findParentTags;\n\n},{}],135:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar browserDetection = _dereq_(\"./browser-detection\");\nvar constants = _dereq_(\"./constants\");\nvar allowedFields = Object.keys(constants.allowedFields);\nvar directions = constants.navigationDirections;\n\nvar focusIntercept = {\n  generate: function (hostedFieldsId, type, direction, handler) {\n    var input = document.createElement(\"input\");\n    var focusInterceptStyles = {\n      border: \"none !important\",\n      display: \"block !important\",\n      height: \"1px !important\",\n      left: \"-1px !important\",\n      opacity: \"0 !important\",\n      position: \"absolute !important\",\n      top: \"-1px !important\",\n      width: \"1px !important\",\n    };\n    var shouldCreateFocusIntercept =\n      browserDetection.hasSoftwareKeyboard() || browserDetection.isFirefox();\n\n    if (!shouldCreateFocusIntercept) {\n      return document.createDocumentFragment();\n    }\n\n    input.setAttribute(\"aria-hidden\", \"true\");\n    input.setAttribute(\"autocomplete\", \"off\");\n    input.setAttribute(\"data-braintree-direction\", direction);\n    input.setAttribute(\"data-braintree-type\", type);\n    input.setAttribute(\n      \"id\",\n      \"bt-\" + type + \"-\" + direction + \"-\" + hostedFieldsId\n    );\n    input.setAttribute(\n      \"style\",\n      JSON.stringify(focusInterceptStyles)\n        .replace(/[{}\"]/g, \"\")\n        .replace(/,/g, \";\")\n    );\n\n    input.classList.add(\"focus-intercept\");\n\n    input.addEventListener(\"focus\", function (event) {\n      handler(event);\n\n      /*\n        Certain browsers without software keyboards (Firefox, Internet\n        Explorer) need the focus intercept inputs that get inserted\n        around the actual input to blur themselves, otherwise the\n        browser gets confused about what should have focus. Can't\n        apply this to browsers with software keyboards however,\n        because it blurs everything, and focus on the actual input is\n        also lost.\n      */\n      if (!browserDetection.hasSoftwareKeyboard()) {\n        input.blur();\n      }\n    });\n\n    return input;\n  },\n  destroy: function (idString) {\n    var focusInputs;\n\n    if (!idString) {\n      focusInputs = document.querySelectorAll(\"[data-braintree-direction]\");\n      focusInputs = [].slice.call(focusInputs);\n    } else {\n      focusInputs = [document.getElementById(idString)];\n    }\n\n    focusInputs.forEach(function (node) {\n      if (\n        node &&\n        node.nodeType === 1 &&\n        focusIntercept.matchFocusElement(node.getAttribute(\"id\"))\n      ) {\n        node.parentNode.removeChild(node);\n      }\n    });\n  },\n  matchFocusElement: function (idString) {\n    var idComponents, hasBTPrefix, isAllowedType, isValidDirection;\n\n    if (!idString) {\n      return false;\n    }\n\n    idComponents = idString.split(\"-\");\n\n    if (idComponents.length < 4) {\n      return false;\n    }\n\n    hasBTPrefix = idComponents[0] === \"bt\";\n    isAllowedType = allowedFields.indexOf(idComponents[1]) > -1;\n    isValidDirection =\n      idComponents[2] === directions.BACK ||\n      idComponents[2] === directions.FORWARD;\n\n    return Boolean(hasBTPrefix && isAllowedType && isValidDirection);\n  },\n};\n\nmodule.exports = focusIntercept;\n\n},{\"./browser-detection\":131,\"./constants\":132}],136:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar creditCardType = _dereq_(\"credit-card-type\");\n\nmodule.exports = function (number) {\n  var results = creditCardType(number);\n\n  results.forEach(function (card) {\n    // NEXT_MAJOR_VERSION credit-card-type fixed the mastercard enum\n    // but we still pass master-card in the braintree API\n    // in a major version bump, we can remove this and\n    // this will be mastercard instead of master-card\n    if (card.type === \"mastercard\") {\n      card.type = \"master-card\";\n    }\n  });\n\n  return results;\n};\n\n},{\"credit-card-type\":45}],137:[function(_dereq_,module,exports){\n\"use strict\";\n/**\n * @module braintree-web\n * @description This is the top-level module exported by the Braintree JavaScript SDK. In a browser environment, this will be the global <code>braintree</code> object. In a CommonJS environment (like Browserify or Webpack), it will be the default export of the <code>braintree-web</code> package. In AMD environments (like RequireJS), it can be `require`d like other modules.\n * @example\n * <caption>CommonJS</caption>\n * var braintree = require('braintree-web');\n *\n * braintree.client.create(...);\n * @example\n * <caption>In the browser</caption>\n * <script src=\"https://js.braintreegateway.com/web/{@pkg version}/js/client.min.js\"></script>\n * <script>\n *   window.braintree.client.create(...);\n * </script>\n * @example\n * <caption>AMD</caption>\n * // main.js\n * require.config({\n *   paths: {\n *     braintreeClient: 'https://js.braintreegateway.com/web/{@pkg version}/js/client.min'\n *   }\n * });\n *\n * require(['braintreeClient'], function (braintreeClient) {\n *   braintreeClient.create(...);\n * });\n */\n\n/**\n * @global\n * @callback callback\n * @param {?BraintreeError} [err] `null` or `undefined` if there was no error.\n * @param {?any} [data] The successful result of the asynchronous function call (if data exists).\n * @description The Node.js-style callback pattern used throughout the SDK.\n * @returns {void}\n */\n\nvar americanExpress = _dereq_(\"./american-express\");\nvar applePay = _dereq_(\"./apple-pay\");\nvar client = _dereq_(\"./client\");\nvar fastlane = _dereq_(\"./fastlane\");\nvar dataCollector = _dereq_(\"./data-collector\");\nvar hostedFields = _dereq_(\"./hosted-fields\");\nvar localPayment = _dereq_(\"./local-payment\");\nvar masterpass = _dereq_(\"./masterpass\");\nvar instantVerification = _dereq_(\"./instant-verification\");\nvar paymentRequest = _dereq_(\"./payment-request\");\nvar paymentReady = _dereq_(\"./payment-ready\");\nvar paypal = _dereq_(\"./paypal\");\nvar paypalCheckout = _dereq_(\"./paypal-checkout\");\nvar paypalCheckoutV6 = _dereq_(\"./paypal-checkout-v6\");\nvar googlePayment = _dereq_(\"./google-payment\");\nvar sepa = _dereq_(\"./sepa\");\nvar threeDSecure = _dereq_(\"./three-d-secure\");\nvar unionpay = _dereq_(\"./unionpay\");\nvar usBankAccount = _dereq_(\"./us-bank-account\");\nvar vaultManager = _dereq_(\"./vault-manager\");\nvar venmo = _dereq_(\"./venmo\");\nvar visaCheckout = _dereq_(\"./visa-checkout\");\nvar preferredPaymentMethods = _dereq_(\"./preferred-payment-methods\");\nvar VERSION = \"3.145.0\";\n\nmodule.exports = {\n  /** @type {module:braintree-web/fastlane} */\n  fastlane: fastlane,\n  /** @type {module:braintree-web/american-express} */\n  americanExpress: americanExpress,\n  /** @type {module:braintree-web/apple-pay} */\n  applePay: applePay,\n  /** @type {module:braintree-web/client} */\n  client: client,\n  /** @type {module:braintree-web/data-collector} */\n  dataCollector: dataCollector,\n  /** @type {module:braintree-web/hosted-fields} */\n  hostedFields: hostedFields,\n  /** @type {module:braintree-web/instant-verification} */\n  instantVerification: instantVerification,\n  /** @type {module:braintree-web/local-payment} */\n  localPayment: localPayment,\n  /** @type {module:braintree-web/masterpass} */\n  masterpass: masterpass,\n  /** @type {module:braintree-web/google-payment} */\n  googlePayment: googlePayment,\n  /** @type {module:braintree-web/payment-request} */\n  paymentRequest: paymentRequest,\n  /** @type {module:braintree-web/payment-ready} */\n  paymentReady: paymentReady,\n  /** @type {module:braintree-web/paypal} */\n  paypal: paypal,\n  /** @type {module:braintree-web/paypal-checkout} */\n  paypalCheckout: paypalCheckout,\n  /** @type {module:braintree-web/paypal-checkout-v6} */\n  paypalCheckoutV6: paypalCheckoutV6,\n  /** @type {module:braintree-web/three-d-secure} */\n  threeDSecure: threeDSecure,\n  /** @type {module:braintree-web/unionpay} */\n  unionpay: unionpay,\n  /** @type {module:braintree-web/us-bank-account} */\n  usBankAccount: usBankAccount,\n  /** @type {module:braintree-web/vault-manager} */\n  vaultManager: vaultManager,\n  /** @type {module:braintree-web/venmo} */\n  venmo: venmo,\n  /** @type {module:braintree-web/visa-checkout} */\n  visaCheckout: visaCheckout,\n  /** @type {module:braintree-web/sepa} */\n  sepa: sepa,\n  /** @type {module:braintree-web/preferred-payment-methods} */\n  preferredPaymentMethods: preferredPaymentMethods,\n  /**\n   * @description The current version of the SDK, i.e. `{@pkg version}`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"./american-express\":91,\"./apple-pay\":94,\"./client\":99,\"./data-collector\":117,\"./fastlane\":120,\"./google-payment\":123,\"./hosted-fields\":130,\"./instant-verification\":140,\"./local-payment\":193,\"./masterpass\":197,\"./payment-ready\":203,\"./payment-request\":206,\"./paypal\":217,\"./paypal-checkout\":214,\"./paypal-checkout-v6\":211,\"./preferred-payment-methods\":220,\"./sepa\":224,\"./three-d-secure\":234,\"./unionpay\":238,\"./us-bank-account\":244,\"./vault-manager\":247,\"./venmo\":252,\"./visa-checkout\":262}],138:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar EXPERIENCE_URL = {\n  sandbox:\n    \"https://www.sandbox.paypal.com/openfinance/v1/bank/payment-method/create\",\n  production:\n    \"https://www.paypal.com/openfinance/v1/bank/payment-method/create\",\n};\n\n// endRemoveIf(production)\n\nvar ACH_MANDATE_DETAILS_QUERY =\n  \"query AchMandateDetails($id: ID!) { \" +\n  \"node(id: $id) { \" +\n  \"id \" +\n  \"... on PaymentMethod { \" +\n  \"id \" +\n  \"legacyId \" +\n  \"usage \" +\n  \"createdAt \" +\n  \"verifications { \" +\n  \"edges { \" +\n  \"node { \" +\n  \"status \" +\n  \"} \" +\n  \"} \" +\n  \"} \" +\n  \"details { \" +\n  \"__typename \" +\n  \"... on UsBankAccountDetails { \" +\n  \"accountholderName \" +\n  \"accountType \" +\n  \"ownershipType \" +\n  \"bankName \" +\n  \"last4 \" +\n  \"routingNumber \" +\n  \"verified \" +\n  \"} \" +\n  \"} \" +\n  \"} \" +\n  \"} \" +\n  \"}\";\n\nmodule.exports = {\n  EXPERIENCE_URL: EXPERIENCE_URL,\n  ACH_MANDATE_DETAILS_QUERY: ACH_MANDATE_DETAILS_QUERY,\n};\n\n},{}],139:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\n\n/**\n * @name BraintreeError.InstantVerification - Creation Error Codes\n * @description Errors that occur when [creating the Instant Verification component](./module-braintree-web_instant-verification.html#.create).\n * @property {MERCHANT} INSTANT_VERIFICATION_NOT_ENABLED Occurs when Instant Verification is not enabled on the Braintree control panel.\n */\n\n/**\n * @name BraintreeError.InstantVerification - startPayment Error Codes\n * @description Errors that occur when using the [`startPayment` method](./InstantVerification.html#startPayment).\n * @property {MERCHANT} INSTANT_VERIFICATION_JWT_MISSING Occurs when the JWT parameter is missing from the startPayment call.\n */\n\n/**\n * @name BraintreeError.InstantVerification - handleRedirect Error Codes\n * @description Errors that occur when using the [`handleRedirect` method](./InstantVerification.html#handleRedirect).\n * @property {CUSTOMER} INSTANT_VERIFICATION_CANCELED Occurs when the customer cancels the Instant Verification payment before authorizing.\n * @property {UNKNOWN} INSTANT_VERIFICATION_FAILURE Occurs when the Instant Verification payment fails during the authorization process.\n */\n\n/**\n * @name BraintreeError.InstantVerification - General Error Codes\n * @description General errors that can occur when using Instant Verification.\n * @property {MERCHANT} INSTANT_VERIFICATION_ERROR Occurs when a general Instant Verification error is encountered.\n */\n\nmodule.exports = {\n  INSTANT_VERIFICATION_ERROR: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"INSTANT_VERIFICATION_ERROR\",\n  },\n  INSTANT_VERIFICATION_NOT_ENABLED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"INSTANT_VERIFICATION_NOT_ENABLED\",\n    message: \"Instant Verification is not enabled for this merchant account.\",\n  },\n  INSTANT_VERIFICATION_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"INSTANT_VERIFICATION_CANCELED\",\n    message:\n      \"Customer canceled the Instant Verification payment before authorizing.\",\n  },\n  INSTANT_VERIFICATION_FAILURE: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"INSTANT_VERIFICATION_FAILURE\",\n    message: \"Instant Verification payment failed during authorizing.\",\n  },\n  INSTANT_VERIFICATION_JWT_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"INSTANT_VERIFICATION_JWT_MISSING\",\n    message: \"JWT is required for Instant Verification payment flow.\",\n  },\n  INSTANT_VERIFICATION_MANDATE_ID_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"INSTANT_VERIFICATION_MANDATE_ID_REQUIRED\",\n    message: \"Mandate ID is required to fetch ACH mandate details.\",\n  },\n  INSTANT_VERIFICATION_MANDATE_DETAILS_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"INSTANT_VERIFICATION_MANDATE_DETAILS_FAILED\",\n    message: \"Failed to fetch ACH mandate details.\",\n  },\n};\n\n},{\"../lib/braintree-error\":149}],140:[function(_dereq_,module,exports){\n\"use strict\";\n\n/** @module braintree-web/instant-verification */\n\nvar basicComponentVerification = _dereq_(\"../lib/basic-component-verification\");\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar createAssetsUrl = _dereq_(\"../lib/create-assets-url\");\nvar createDeferredClient = _dereq_(\"../lib/create-deferred-client\");\nvar errors = _dereq_(\"./errors\");\nvar InstantVerification = _dereq_(\"./instant-verification\");\nvar VERSION = \"3.145.0\";\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {callback} [callback] When provided, will be used instead of a promise. First argument is an error object, second is an instance of {@link InstantVerification}.\n * @returns {Promise<InstantVerification|error>} Returns the InstantVerification instance.\n * @example\n * braintree.instantVerification.create({\n *   client: clientInstance\n * }).then(function (instantVerificationInstance) {\n *   // instantVerificationInstance is ready to be used.\n * }).catch(function (createErr) {\n *   console.error('Error creating Instant Verification instance', createErr);\n * });\n */\nfunction create(options) {\n  var instantVerification;\n  var name = \"Instant Verification\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      return createDeferredClient.create({\n        authorization: options.authorization,\n        client: options.client,\n        debug: options.debug,\n        assetsUrl: createAssetsUrl.create(options.authorization),\n        name: name,\n      });\n    })\n    .then(function (client) {\n      options.client = client;\n\n      // GraphQL Team decided to stick to the OpenBanking in the clientConfiguration\n      instantVerification =\n        options.client.getConfiguration().gatewayConfiguration.openBanking;\n\n      if (!instantVerification) {\n        return Promise.reject(\n          new BraintreeError(errors.INSTANT_VERIFICATION_NOT_ENABLED)\n        );\n      }\n\n      return new InstantVerification(options);\n    });\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `{@pkg version}`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/basic-component-verification\":147,\"../lib/braintree-error\":149,\"../lib/create-assets-url\":153,\"../lib/create-deferred-client\":155,\"./errors\":139,\"./instant-verification\":141,\"@braintree/wrap-promise\":43}],141:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar atob = _dereq_(\"../lib/vendor/polyfill\").atob;\nvar analytics = _dereq_(\"../lib/analytics\");\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar constants = _dereq_(\"./constants\");\nvar errors = _dereq_(\"./errors\");\nvar querystring = _dereq_(\"../lib/querystring\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\n\n/**\n * @class\n * @param {object} options see {@link module:braintree-web/instant-verification.create|instant-verification.create}\n * @classdesc This class represents an InstantVerification component. Instances of this class open an InstantVerification window for paying using banking account details in specific regions. Any additional UI, such as disabling the page while authentication is taking place, is up to the developer.\n *\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/instant-verification.create|braintree-web.instant-verification.create} instead.</strong>\n */\nfunction InstantVerification(options) {\n  this._instantiatedWithClient = Boolean(!options.useDeferredClient);\n  this._client = options.client;\n  this._createPromise = options.createPromise;\n\n  analytics.sendEvent(\n    this._client,\n    \"instant-verification.component.initialized\"\n  );\n}\n\n/**\n * Options used for startPayment\n * @typedef {object} InstantVerification~startPaymentOptions\n * @property {string} jwt - A JSON Web Token (JWT) containing the redirect URL and callback URL for the Instant Verification payment flow.\n */\n\n/**\n * Initiates the Instant Verification payment flow by redirecting to the authorization page.\n * @public\n * @param {InstantVerification~startPaymentOptions} options The options for starting a payment session.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * button.addEventListener('click', function () {\n *   instantVerificationInstance.startPayment({\n *     jwt: 'JWT_STRING_FROM_YOUR_SERVER',\n *   }).catch(function (err) {\n *     // Handle error\n *     console.error(err);\n *   });\n * });\n */\nInstantVerification.prototype.startPayment = function (options) {\n  var self = this;\n\n  var clientAuthFingerprint =\n    self._client.getConfiguration().authorizationFingerprint;\n\n  var redirectUrl = \"\";\n\n  // Check if jwt is provided\n  if (!options.jwt) {\n    return Promise.reject(\n      new BraintreeError(errors.INSTANT_VERIFICATION_JWT_REQUIRED)\n    );\n  }\n\n  redirectUrl =\n    getBaseUrl(self._client.getConfiguration()) +\n    \"?\" +\n    querystring.stringify({\n      ct: options.jwt,\n      at: clientAuthFingerprint,\n    });\n\n  // Just perform the redirect directly instead of using _createPromise\n  if (typeof window !== \"undefined\" && window.location) {\n    analytics.sendEvent(\n      self._client,\n      \"instant-verification.redirect.initiated\"\n    );\n    window.location.href = redirectUrl;\n  }\n\n  return Promise.resolve();\n};\n\nfunction getBaseUrl(configuration) {\n  var url = constants.EXPERIENCE_URL.production;\n\n  if (\n    configuration &&\n    configuration.gatewayConfiguration &&\n    configuration.gatewayConfiguration.environment &&\n    constants.EXPERIENCE_URL[configuration.gatewayConfiguration.environment]\n  ) {\n    url =\n      constants.EXPERIENCE_URL[configuration.gatewayConfiguration.environment];\n  }\n\n  return url;\n}\n\n/**\n * Handle redirect back to merchant page from Instant Verification experience.\n * @param {object} options - Options for the handling redirect back from Instant Verification UI.\n * @param {string} [options.success] URL query param returned from Instant Verification UI\n * @param {string} [options.cancel] URL query param return from Instant Verification UI\n * @param {string} [options.error] URL query param return from Instant Verification UI\n * @returns {Promise<string>|BraintreeError}  Returns a promise if no callback is provided.\n * If the redirect from the Instant Verification page is successful, the Promise will resolve with a nonce.\n * Otherwise, the promise rejects with a `BraintreeError`.\n * @example\n * const urlParams = new URL(window.location.href).searchParams;\n * instantVerificationInstance.handleRedirect({\n *   success: urlParams.get('success');,\n *   cancel: urlParams.get('cancel');,\n *   error: urlParams.get('error');\n * })\n * .then((result) => {\n *   if (result) {\n *     console.log('nonce: %s', result);\n *   } else {\n *     console.log('empty result');\n *   }\n * })\n * .catch((err) => {\n *   console.error(error: ${JSON.stringify(err)}`);\n * })\n */\nInstantVerification.prototype.handleRedirect = function (options) {\n  var self = this;\n  var error, payload, nonce;\n\n  if (options.success) {\n    payload = JSON.parse(atob(options.success));\n\n    analytics.sendEvent(\n      self._client,\n      \"instant-verification.redirect.completed.success\"\n    );\n\n    if (payload.tokenizedAccounts && payload.tokenizedAccounts[0]) {\n      nonce = payload.tokenizedAccounts[0].tokenized_account;\n    }\n\n    return Promise.resolve(nonce);\n  }\n\n  if (options.cancel) {\n    payload = JSON.parse(atob(options.cancel));\n    analytics.sendEvent(\n      self._client,\n      \"instant-verification.redirect.completed.canceled\"\n    );\n    error = new BraintreeError(errors.INSTANT_VERIFICATION_CANCELED);\n  }\n\n  if (options.error) {\n    payload = JSON.parse(atob(options.error));\n    analytics.sendEvent(\n      self._client,\n      \"instant-verification.redirect.completed.error\"\n    );\n    error = new BraintreeError(errors.INSTANT_VERIFICATION_FAILURE);\n  }\n\n  return Promise.reject(error);\n};\n\n/**\n * Fetches ACH mandate details for a specific mandate ID.\n * @public\n * @param {object} options - Options for fetching ACH mandate details.\n * @param {string} options.mandateId - The ID of the mandate to retrieve details for.\n * @returns {Promise<object>} Returns a promise that resolves with the ACH mandate details.\n * If successful, the promise resolves with an object containing mandate information.\n * Otherwise, the promise rejects with a `BraintreeError`.\n * @example\n * instantVerificationInstance.getAchMandateDetails({\n *   mandateId: 'mandate-id-from-tokenization'\n * })\n * .then(function (mandateDetails) {\n *   console.log('Bank name:', mandateDetails.bankName);\n *   console.log('Account holder:', mandateDetails.accountHolderName);\n *   console.log('Last 4:', mandateDetails.last4);\n *   console.log('Routing number:', mandateDetails.routingNumber);\n * })\n * .catch(function (err) {\n *   if (err.code === 'INSTANT_VERIFICATION_MANDATE_ID_REQUIRED') {\n *     console.error('A mandate ID is required');\n *   } else if (err.code === 'INSTANT_VERIFICATION_MANDATE_DETAILS_FAILED') {\n *     console.error('Failed to fetch mandate details:', err);\n *   }\n * });\n */\nInstantVerification.prototype.getAchMandateDetails = function (options) {\n  var self = this;\n  var mandateId = options && options.mandateId;\n\n  return new Promise(function (resolve, reject) {\n    if (!mandateId) {\n      reject(\n        new BraintreeError(errors.INSTANT_VERIFICATION_MANDATE_ID_REQUIRED)\n      );\n      return;\n    }\n    self._client.request(\n      {\n        api: \"graphQLApi\",\n        method: \"post\",\n        data: {\n          query: constants.ACH_MANDATE_DETAILS_QUERY,\n          variables: { id: mandateId },\n          operationName: \"AchMandateDetails\",\n        },\n      },\n      function (err, response) {\n        if (err) {\n          analytics.sendEvent(\n            self._client,\n            \"instant-verification.ach-mandate-details.failed\"\n          );\n\n          reject(\n            new BraintreeError({\n              type: errors.INSTANT_VERIFICATION_MANDATE_DETAILS_FAILED.type,\n              code: errors.INSTANT_VERIFICATION_MANDATE_DETAILS_FAILED.code,\n              message:\n                errors.INSTANT_VERIFICATION_MANDATE_DETAILS_FAILED.message,\n              details: { originalError: err },\n            })\n          );\n          return;\n        }\n\n        if (!response.data || !response.data.node) {\n          reject(\n            new BraintreeError({\n              type: errors.INSTANT_VERIFICATION_MANDATE_DETAILS_FAILED.type,\n              code: errors.INSTANT_VERIFICATION_MANDATE_DETAILS_FAILED.code,\n              message: \"No mandate details found for the provided ID.\",\n            })\n          );\n          return;\n        }\n\n        var node = response.data.node;\n\n        if (!node.details) {\n          reject(\n            new BraintreeError({\n              type: errors.INSTANT_VERIFICATION_MANDATE_DETAILS_FAILED.type,\n              code: errors.INSTANT_VERIFICATION_MANDATE_DETAILS_FAILED.code,\n              message: \"Mandate details are missing in the response.\",\n            })\n          );\n          return;\n        }\n\n        analytics.sendEvent(\n          self._client,\n          \"instant-verification.ach-mandate-details.succeeded\"\n        );\n\n        resolve(_formatMandateResponse(node));\n      }\n    );\n  });\n};\n\nfunction _formatMandateResponse(nodeData) {\n  return {\n    accountHolderName: nodeData.details.accountholderName,\n    accountType: nodeData.details.accountType,\n    bankName: nodeData.details.bankName,\n    last4: nodeData.details.last4,\n    ownershipType: nodeData.details.ownershipType,\n    routingNumber: nodeData.details.routingNumber,\n  };\n}\n\nmodule.exports = wrapPromise.wrapPrototype(InstantVerification);\n\n},{\"../lib/analytics\":143,\"../lib/braintree-error\":149,\"../lib/querystring\":184,\"../lib/vendor/polyfill\":189,\"./constants\":138,\"./errors\":139,\"@braintree/wrap-promise\":43}],142:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar createAuthorizationData = _dereq_(\"./create-authorization-data\");\nvar jsonClone = _dereq_(\"./json-clone\");\nvar constants = _dereq_(\"./constants\");\n\nfunction addMetadata(configuration, data) {\n  var key;\n  var attrs = data ? jsonClone(data) : {};\n  var authAttrs = createAuthorizationData(configuration.authorization).attrs;\n  var _meta = jsonClone(configuration.analyticsMetadata);\n\n  attrs.braintreeLibraryVersion = constants.BRAINTREE_LIBRARY_VERSION;\n\n  for (key in attrs._meta) {\n    if (attrs._meta.hasOwnProperty(key)) {\n      _meta[key] = attrs._meta[key];\n    }\n  }\n\n  attrs._meta = _meta;\n\n  if (authAttrs.tokenizationKey) {\n    attrs.tokenizationKey = authAttrs.tokenizationKey;\n  } else {\n    attrs.authorizationFingerprint = authAttrs.authorizationFingerprint;\n  }\n\n  return attrs;\n}\n\nfunction addEventMetadata(clientInstanceOrPromise) {\n  var configuration = clientInstanceOrPromise.getConfiguration();\n  var authAttrs = createAuthorizationData(configuration.authorization).attrs;\n  var isProd = configuration.gatewayConfiguration.environment === \"production\";\n\n  /* eslint-disable camelcase */\n  var metadata = {\n    api_integration_type: configuration.analyticsMetadata.integrationType,\n    app_id: window.location.host,\n    c_sdk_ver: constants.VERSION,\n    component: \"braintreeclientsdk\",\n    merchant_sdk_env: isProd ? \"production\" : \"sandbox\",\n    merchant_id: configuration.gatewayConfiguration.merchantId,\n    event_source: \"web\",\n    platform: constants.PLATFORM,\n    platform_version: window.navigator.userAgent,\n    session_id: configuration.analyticsMetadata.sessionId,\n    client_session_id: configuration.analyticsMetadata.sessionId,\n    tenant_name: \"braintree\",\n    product_name: \"BT_DCC\",\n    space_key: \"SKDUYK\",\n  };\n  /* eslint-enable camelcase */\n\n  if (authAttrs.tokenizationKey) {\n    metadata.tokenization_key = authAttrs.tokenizationKey; // eslint-disable-line camelcase\n  } else {\n    metadata.auth_fingerprint = authAttrs.authorizationFingerprint; // eslint-disable-line camelcase\n  }\n\n  return metadata;\n}\n\nmodule.exports = {\n  addMetadata: addMetadata,\n  addEventMetadata: addEventMetadata,\n};\n\n},{\"./constants\":150,\"./create-authorization-data\":154,\"./json-clone\":181}],143:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar constants = _dereq_(\"./constants\");\nvar metadata = _dereq_(\"./add-metadata\");\nvar assign = _dereq_(\"./assign\").assign;\n\nfunction sendPaypalEvent(clientInstanceOrPromise, eventName, callback) {\n  return sendPaypalEventPlusFields(\n    clientInstanceOrPromise,\n    eventName,\n    {},\n    callback\n  );\n}\n\nfunction sendPaypalEventPlusFields(\n  clientInstanceOrPromise,\n  eventName,\n  extraFields,\n  callback\n) {\n  var timestamp = Date.now();\n  if (extraFields.flow === \"vault\") {\n    extraFields.context_type = \"BA_Token\"; //eslint-disable-line camelcase\n  } else if (extraFields.flow === \"checkout\") {\n    extraFields.context_type = \"EC_Token\"; //eslint-disable-line camelcase\n  }\n\n  return Promise.resolve(clientInstanceOrPromise)\n    .then(function (client) {\n      var request = client._request;\n      var url = constants.ANALYTICS_URL;\n      var qualifiedEvent = constants.ANALYTICS_PREFIX + eventName;\n      var configuration = client.getConfiguration();\n      var isProd =\n        configuration.gatewayConfiguration.environment === \"production\";\n      var data = {\n        events: [],\n        tracking: [],\n      };\n      var trackingMeta = metadata.addEventMetadata(client, data);\n\n      trackingMeta.event_name = qualifiedEvent; // eslint-disable-line camelcase\n      trackingMeta.t = timestamp;\n\n      data.events = [\n        {\n          level: \"info\",\n          event: qualifiedEvent,\n          payload: assign(\n            {\n              env: isProd ? \"production\" : \"sandbox\",\n              timestamp: timestamp,\n            },\n            extraFields\n          ),\n        },\n      ];\n      data.tracking = [trackingMeta];\n\n      if (extraFields && typeof extraFields === \"object\") {\n        data.tracking = [appendExtraFieldsTo(trackingMeta, extraFields)];\n      }\n\n      return request(\n        {\n          url: url,\n          method: \"post\",\n          data: data,\n          timeout: constants.ANALYTICS_REQUEST_TIMEOUT_MS,\n        },\n        callback\n      );\n    })\n    .catch(function (err) {\n      if (callback) {\n        callback(err);\n      }\n    });\n}\n\nfunction appendExtraFieldsTo(trackingMeta, extraFields) {\n  var result = {};\n  var allowedExtraFields = assign({}, extraFields);\n\n  Object.keys(allowedExtraFields).forEach(function (field) {\n    if (constants.ALLOWED_EXTRA_EVENT_FIELDS.indexOf(field) === -1) {\n      delete allowedExtraFields[field];\n    }\n  });\n\n  result = assign(trackingMeta, allowedExtraFields);\n\n  return result;\n}\n\nmodule.exports = {\n  sendEvent: sendPaypalEvent,\n  sendEventPlus: sendPaypalEventPlusFields,\n};\n\n},{\"./add-metadata\":142,\"./assign\":146,\"./constants\":150}],144:[function(_dereq_,module,exports){\n\"use strict\";\n\n// Flattens an AssetLoadError (from @braintree/asset-loader) into a detail\n// object for analytics events. Always returns an object so sendEventPlus\n// never reads fields off undefined.\nfunction assetLoadDetail(err) {\n  err = err || {};\n\n  return {\n    src: err.src,\n    failure_kind: err.failureKind, // eslint-disable-line camelcase\n    timing: err.timing,\n    on_line: err.onLine, // eslint-disable-line camelcase\n    description: err.message,\n  };\n}\n\nmodule.exports = assetLoadDetail;\n\n},{}],145:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar loadScript = _dereq_(\"@braintree/asset-loader/load-script\");\nvar loadConnectScript = _dereq_(\"@paypal/fastlane-sdk-loader\");\n\nmodule.exports = {\n  loadScript: loadScript,\n  loadFastlane: loadConnectScript.loadAxo,\n};\n\n},{\"@braintree/asset-loader/load-script\":2,\"@paypal/fastlane-sdk-loader\":44}],146:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar assignNormalized =\n  typeof Object.assign === \"function\" ? Object.assign : assignPolyfill;\n\nfunction assignPolyfill(destination) {\n  var i, source, key;\n\n  for (i = 1; i < arguments.length; i++) {\n    source = arguments[i];\n    for (key in source) {\n      if (source.hasOwnProperty(key)) {\n        destination[key] = source[key];\n      }\n    }\n  }\n\n  return destination;\n}\n\nmodule.exports = {\n  assign: assignNormalized,\n  _assign: assignPolyfill,\n};\n\n},{}],147:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar BraintreeError = _dereq_(\"./braintree-error\");\nvar sharedErrors = _dereq_(\"./errors\");\nvar VERSION = \"3.145.0\";\n\nfunction basicComponentVerification(options) {\n  var client, authorization, name;\n\n  if (!options) {\n    return Promise.reject(\n      new BraintreeError({\n        type: sharedErrors.INVALID_USE_OF_INTERNAL_FUNCTION.type,\n        code: sharedErrors.INVALID_USE_OF_INTERNAL_FUNCTION.code,\n        message:\n          \"Options must be passed to basicComponentVerification function.\",\n      })\n    );\n  }\n\n  name = options.name;\n  client = options.client;\n  authorization = options.authorization;\n\n  if (!client && !authorization) {\n    return Promise.reject(\n      new BraintreeError({\n        type: sharedErrors.INSTANTIATION_OPTION_REQUIRED.type,\n        code: sharedErrors.INSTANTIATION_OPTION_REQUIRED.code,\n        // NEXT_MAJOR_VERSION in major version, we expose passing in authorization for all components\n        // instead of passing in a client instance. Leave this a silent feature for now.\n        message: \"options.client is required when instantiating \" + name + \".\",\n      })\n    );\n  }\n\n  if (!authorization && client.getVersion() !== VERSION) {\n    return Promise.reject(\n      new BraintreeError({\n        type: sharedErrors.INCOMPATIBLE_VERSIONS.type,\n        code: sharedErrors.INCOMPATIBLE_VERSIONS.code,\n        message:\n          \"Client (version \" +\n          client.getVersion() +\n          \") and \" +\n          name +\n          \" (version \" +\n          VERSION +\n          \") components must be from the same SDK version.\",\n      })\n    );\n  }\n\n  return Promise.resolve();\n}\n\nmodule.exports = {\n  verify: basicComponentVerification,\n};\n\n},{\"./braintree-error\":149,\"./errors\":160}],148:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar once = _dereq_(\"./once\");\n\nfunction call(fn, callback) {\n  var isSync = fn.length === 0;\n\n  if (isSync) {\n    fn();\n    callback(null);\n  } else {\n    fn(callback);\n  }\n}\n\nmodule.exports = function (functions, cb) {\n  var i;\n  var length = functions.length;\n  var remaining = length;\n  var callback = once(cb);\n\n  if (length === 0) {\n    callback(null);\n\n    return;\n  }\n\n  function finish(err) {\n    if (err) {\n      callback(err);\n\n      return;\n    }\n\n    remaining -= 1;\n    if (remaining === 0) {\n      callback(null);\n    }\n  }\n\n  for (i = 0; i < length; i++) {\n    call(functions[i], finish);\n  }\n};\n\n},{\"./once\":183}],149:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar enumerate = _dereq_(\"./enumerate\");\n\n/**\n * @class\n * @global\n * @param {object} options Construction options\n * @classdesc This class is used to report error conditions, frequently as the first parameter to callbacks throughout the Braintree SDK.\n * @description <strong>You cannot use this constructor directly. Interact with instances of this class through {@link callback callbacks}.</strong>\n */\nfunction BraintreeError(options) {\n  if (!BraintreeError.types.hasOwnProperty(options.type)) {\n    throw new Error(options.type + \" is not a valid type.\");\n  }\n\n  if (!options.code) {\n    throw new Error(\"Error code required.\");\n  }\n\n  if (!options.message) {\n    throw new Error(\"Error message required.\");\n  }\n\n  this.name = \"BraintreeError\";\n\n  /**\n   * @type {string}\n   * @description A code that corresponds to specific errors.\n   */\n  this.code = options.code;\n\n  /**\n   * @type {string}\n   * @description A short description of the error.\n   */\n  this.message = options.message;\n\n  /**\n   * @type {BraintreeError.types}\n   * @description The type of error.\n   */\n  this.type = options.type;\n\n  /**\n   * @type {object=}\n   * @description Additional information about the error, such as an underlying network error response.\n   */\n  this.details = options.details;\n}\n\nBraintreeError.prototype = Object.create(Error.prototype);\nBraintreeError.prototype.constructor = BraintreeError;\n\n/**\n * Enum for {@link BraintreeError} types.\n * @name BraintreeError.types\n * @enum\n * @readonly\n * @memberof BraintreeError\n * @property {string} CUSTOMER An error caused by the customer.\n * @property {string} MERCHANT An error that is actionable by the merchant.\n * @property {string} NETWORK An error due to a network problem.\n * @property {string} INTERNAL An error caused by Braintree code.\n * @property {string} UNKNOWN An error where the origin is unknown.\n */\nBraintreeError.types = enumerate([\n  \"CUSTOMER\",\n  \"MERCHANT\",\n  \"NETWORK\",\n  \"INTERNAL\",\n  \"UNKNOWN\",\n]);\n\nBraintreeError.findRootError = function (err) {\n  if (\n    err instanceof BraintreeError &&\n    err.details &&\n    err.details.originalError\n  ) {\n    return BraintreeError.findRootError(err.details.originalError);\n  }\n\n  return err;\n};\n\nmodule.exports = BraintreeError;\n\n},{\"./enumerate\":159}],150:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar VERSION = \"3.145.0\";\nvar PLATFORM = \"web\";\n\nvar CLIENT_API_URLS = {\n  production: \"https://api.braintreegateway.com:443\",\n  sandbox: \"https://api.sandbox.braintreegateway.com:443\",\n};\n\nvar ASSETS_URLS = {\n  production: \"https://assets.braintreegateway.com\",\n  sandbox: \"https://assets.braintreegateway.com\",\n};\n\nvar GRAPHQL_URLS = {\n  production: \"https://payments.braintree-api.com/graphql\",\n  sandbox: \"https://payments.sandbox.braintree-api.com/graphql\",\n};\n\n// endRemoveIf(production)\n\nmodule.exports = {\n  ANALYTICS_PREFIX: PLATFORM + \".\",\n  ANALYTICS_REQUEST_TIMEOUT_MS: 2000,\n  ANALYTICS_URL: \"https://www.paypal.com/xoplatform/logger/api/logger\",\n  ASSETS_URLS: ASSETS_URLS,\n  CLIENT_API_URLS: CLIENT_API_URLS,\n  FRAUDNET_SOURCE: \"BRAINTREE_SIGNIN\",\n  FRAUDNET_FNCLS: \"fnparams-dede7cc5-15fd-4c75-a9f4-36c430ee3a99\",\n  FRAUDNET_URL: \"https://c.paypal.com/da/r/fb.js\",\n  BUS_CONFIGURATION_REQUEST_EVENT: \"BUS_CONFIGURATION_REQUEST\",\n  GRAPHQL_URLS: GRAPHQL_URLS,\n  INTEGRATION_TIMEOUT_MS: 60000,\n  VERSION: VERSION,\n  INTEGRATION: \"custom\",\n  SOURCE: \"client\",\n  PLATFORM: PLATFORM,\n  BRAINTREE_LIBRARY_VERSION: \"braintree/\" + PLATFORM + \"/\" + VERSION,\n  ALLOWED_EXTRA_EVENT_FIELDS: [\n    \"context_id\",\n    \"context_type\",\n    \"payment_ready_button_order\",\n    \"payment_ready_experiment_type\",\n    \"payment_ready_page_type\",\n    \"payment_ready_session_id\",\n    \"button_type\",\n    \"connect_start_time\",\n    \"domain\",\n    \"endpoint\",\n    \"end_time\",\n    \"request_start_time\",\n    \"start_time\",\n  ],\n};\n\n},{}],151:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar BraintreeError = _dereq_(\"./braintree-error\");\nvar sharedErrors = _dereq_(\"./errors\");\n\nmodule.exports = function (instance, methodNames) {\n  methodNames.forEach(function (methodName) {\n    instance[methodName] = function () {\n      throw new BraintreeError({\n        type: sharedErrors.METHOD_CALLED_AFTER_TEARDOWN.type,\n        code: sharedErrors.METHOD_CALLED_AFTER_TEARDOWN.code,\n        message: methodName + \" cannot be called after teardown.\",\n      });\n    };\n  });\n};\n\n},{\"./braintree-error\":149,\"./errors\":160}],152:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar BraintreeError = _dereq_(\"./braintree-error\");\n\nfunction convertToBraintreeError(originalErr, btErrorObject) {\n  if (originalErr instanceof BraintreeError) {\n    return originalErr;\n  }\n\n  return new BraintreeError({\n    type: btErrorObject.type,\n    code: btErrorObject.code,\n    message: btErrorObject.message,\n    details: {\n      originalError: originalErr,\n    },\n  });\n}\n\nmodule.exports = convertToBraintreeError;\n\n},{\"./braintree-error\":149}],153:[function(_dereq_,module,exports){\n\"use strict\";\n\n// endRemoveIf(production)\nvar ASSETS_URLS = _dereq_(\"./constants\").ASSETS_URLS;\n\nfunction createAssetsUrl(authorization) {\n  // endRemoveIf(production)\n\n  return ASSETS_URLS.production;\n}\n/* eslint-enable */\n\nmodule.exports = {\n  create: createAssetsUrl,\n};\n\n},{\"./constants\":150}],154:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar atob = _dereq_(\"../lib/vendor/polyfill\").atob;\nvar CLIENT_API_URLS = _dereq_(\"../lib/constants\").CLIENT_API_URLS;\n\nfunction _isTokenizationKey(str) {\n  return /^[a-zA-Z0-9]+_[a-zA-Z0-9]+_[a-zA-Z0-9_]+$/.test(str);\n}\n\nfunction _parseTokenizationKey(tokenizationKey) {\n  var tokens = tokenizationKey.split(\"_\");\n  var environment = tokens[0];\n  var merchantId = tokens.slice(2).join(\"_\");\n\n  return {\n    merchantId: merchantId,\n    environment: environment,\n  };\n}\n\nfunction createAuthorizationData(authorization) {\n  var parsedClientToken, parsedTokenizationKey;\n  var data = {\n    attrs: {},\n    configUrl: \"\",\n  };\n\n  if (_isTokenizationKey(authorization)) {\n    parsedTokenizationKey = _parseTokenizationKey(authorization);\n    data.environment = parsedTokenizationKey.environment;\n    data.attrs.tokenizationKey = authorization;\n    data.configUrl =\n      CLIENT_API_URLS[parsedTokenizationKey.environment] +\n      \"/merchants/\" +\n      parsedTokenizationKey.merchantId +\n      \"/client_api/v1/configuration\";\n  } else {\n    parsedClientToken = JSON.parse(atob(authorization));\n    data.environment = parsedClientToken.environment;\n    data.attrs.authorizationFingerprint =\n      parsedClientToken.authorizationFingerprint;\n    data.paymentMethodIdJwt = parsedClientToken.paymentMethodIdJwt;\n    data.configUrl = parsedClientToken.configUrl;\n    data.graphQL = parsedClientToken.graphQL;\n  }\n\n  return data;\n}\n\nmodule.exports = createAuthorizationData;\n\n},{\"../lib/constants\":150,\"../lib/vendor/polyfill\":189}],155:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar BraintreeError = _dereq_(\"./braintree-error\");\nvar assets = _dereq_(\"./assets\");\nvar analytics = _dereq_(\"./analytics\");\nvar assetLoadDetail = _dereq_(\"./asset-load-detail\");\nvar sharedErrors = _dereq_(\"./errors\");\n\nvar VERSION = \"3.145.0\";\n\nfunction loadClientScript(src, forceReload) {\n  var options = { src: src };\n\n  if (forceReload) {\n    options.forceScriptReload = true;\n  }\n\n  return assets.loadScript(options);\n}\n\nfunction createDeferredClient(options) {\n  var didRetry = false;\n  var firstError;\n  var promise = Promise.resolve();\n  var src;\n\n  if (options.client) {\n    return Promise.resolve(options.client);\n  }\n\n  if (!(window.braintree && window.braintree.client)) {\n    src = options.assetsUrl + \"/web/\" + VERSION + \"/js/client.min.js\";\n\n    promise = loadClientScript(src, false)\n      .catch(function (err) {\n        // A load killed by an app suspend caches a rejected promise, so\n        // retry once with a cache-busting reload before giving up.\n        didRetry = true;\n        firstError = err;\n\n        return loadClientScript(src, true);\n      })\n      .catch(function (err) {\n        return Promise.reject(\n          new BraintreeError({\n            type: sharedErrors.CLIENT_SCRIPT_FAILED_TO_LOAD.type,\n            code: sharedErrors.CLIENT_SCRIPT_FAILED_TO_LOAD.code,\n            message:\n              \"Braintree client script failed to load (\" +\n              (err && err.failureKind ? err.failureKind : \"error\") +\n              \").\",\n            details: {\n              originalError: err,\n            },\n          })\n        );\n      });\n  }\n\n  return promise\n    .then(function () {\n      if (window.braintree.client.VERSION !== VERSION) {\n        return Promise.reject(\n          new BraintreeError({\n            type: sharedErrors.INCOMPATIBLE_VERSIONS.type,\n            code: sharedErrors.INCOMPATIBLE_VERSIONS.code,\n            message:\n              \"Client (version \" +\n              window.braintree.client.VERSION +\n              \") and \" +\n              options.name +\n              \" (version \" +\n              VERSION +\n              \") components must be from the same SDK version.\",\n          })\n        );\n      }\n\n      return window.braintree.client.create({\n        authorization: options.authorization,\n        debug: options.debug,\n      });\n    })\n    .then(function (client) {\n      if (didRetry) {\n        analytics.sendEventPlus(\n          client,\n          options.name + \".deferred-client.load-recovered\",\n          assetLoadDetail(firstError)\n        );\n      }\n\n      return client;\n    });\n}\n\nmodule.exports = {\n  create: createDeferredClient,\n};\n\n},{\"./analytics\":143,\"./asset-load-detail\":144,\"./assets\":145,\"./braintree-error\":149,\"./errors\":160}],156:[function(_dereq_,module,exports){\n\"use strict\";\n\nmodule.exports = function (fn) {\n  return function () {\n    // IE9 doesn't support passing arguments to setTimeout so we have to emulate it.\n    var args = arguments;\n\n    setTimeout(function () {\n      fn.apply(null, args);\n    }, 1);\n  };\n};\n\n},{}],157:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar batchExecuteFunctions = _dereq_(\"./batch-execute-functions\");\n\nfunction Destructor() {\n  this._teardownRegistry = [];\n\n  this._isTearingDown = false;\n}\n\nDestructor.prototype.registerFunctionForTeardown = function (fn) {\n  if (typeof fn === \"function\") {\n    this._teardownRegistry.push(fn);\n  }\n};\n\nDestructor.prototype.teardown = function (callback) {\n  if (this._isTearingDown) {\n    callback(new Error(\"Destructor is already tearing down\"));\n\n    return;\n  }\n\n  this._isTearingDown = true;\n\n  batchExecuteFunctions(\n    this._teardownRegistry,\n    function (err) {\n      this._teardownRegistry = [];\n      this._isTearingDown = false;\n\n      if (typeof callback === \"function\") {\n        callback(err);\n      }\n    }.bind(this)\n  );\n};\n\nmodule.exports = Destructor;\n\n},{\"./batch-execute-functions\":148}],158:[function(_dereq_,module,exports){\n\"use strict\";\n\n// Cross-browser Page Visibility helpers. Some browsers only expose the\n// vendor-prefixed hidden property and change event, so resolve both together\n// to keep the event we listen for and the property we read consistent.\n\nfunction getVisibilityChangeEventName() {\n  if (typeof window.document.hidden !== \"undefined\") {\n    return \"visibilitychange\";\n  }\n\n  if (typeof window.document.msHidden !== \"undefined\") {\n    return \"msvisibilitychange\";\n  }\n\n  if (typeof window.document.webkitHidden !== \"undefined\") {\n    return \"webkitvisibilitychange\";\n  }\n\n  return \"visibilitychange\";\n}\n\nfunction isDocumentHidden() {\n  return Boolean(\n    window.document.hidden ||\n    window.document.msHidden ||\n    window.document.webkitHidden\n  );\n}\n\nmodule.exports = {\n  getVisibilityChangeEventName: getVisibilityChangeEventName,\n  isDocumentHidden: isDocumentHidden,\n};\n\n},{}],159:[function(_dereq_,module,exports){\n\"use strict\";\n\nfunction enumerate(values, prefix) {\n  prefix = prefix == null ? \"\" : prefix;\n\n  return values.reduce(function (enumeration, value) {\n    enumeration[value] = prefix + value;\n\n    return enumeration;\n  }, {});\n}\n\nmodule.exports = enumerate;\n\n},{}],160:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Shared Internal Error Codes\n * @ignore\n * @description These codes should never be experienced by the merchant directly.\n * @property {INTERNAL} INVALID_USE_OF_INTERNAL_FUNCTION Occurs when the client is created without a gateway configuration. Should never happen.\n */\n\n/**\n * @name BraintreeError.Shared Errors - Component Creation Error Codes\n * @description Errors that occur when creating components.\n * @property {MERCHANT} INSTANTIATION_OPTION_REQUIRED Occurs when a component is created that is missing a required option.\n * @property {MERCHANT} INCOMPATIBLE_VERSIONS Occurs when a component is created with a client with a different version than the component.\n * @property {NETWORK} CLIENT_SCRIPT_FAILED_TO_LOAD Occurs when a component attempts to load the Braintree client script, but the request fails.\n * @property {MERCHANT} INSTANTIATION_OPTION_INVALID Occurs when a component is created with an invalid option value.\n */\n\n/**\n * @name BraintreeError.Shared Errors - Component Instance Error Codes\n * @description Errors that occur when using instances of components.\n * @property {MERCHANT} METHOD_CALLED_AFTER_TEARDOWN Occurs when a method is called on a component instance after it has been torn down.\n */\n\nvar BraintreeError = _dereq_(\"./braintree-error\");\n\nmodule.exports = {\n  INVALID_USE_OF_INTERNAL_FUNCTION: {\n    type: BraintreeError.types.INTERNAL,\n    code: \"INVALID_USE_OF_INTERNAL_FUNCTION\",\n  },\n  INSTANTIATION_OPTION_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"INSTANTIATION_OPTION_REQUIRED\",\n  },\n  INCOMPATIBLE_VERSIONS: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"INCOMPATIBLE_VERSIONS\",\n  },\n  CLIENT_SCRIPT_FAILED_TO_LOAD: {\n    type: BraintreeError.types.NETWORK,\n    code: \"CLIENT_SCRIPT_FAILED_TO_LOAD\",\n    message: \"Braintree client script could not be loaded.\",\n  },\n  METHOD_CALLED_AFTER_TEARDOWN: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"METHOD_CALLED_AFTER_TEARDOWN\",\n  },\n  INSTANTIATION_OPTION_INVALID: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"INSTANTIATION_OPTION_INVALID\",\n  },\n};\n\n},{\"./braintree-error\":149}],161:[function(_dereq_,module,exports){\n\"use strict\";\n\nmodule.exports = function findRootNode(element) {\n  while (element.parentNode) {\n    element = element.parentNode;\n  }\n\n  return element;\n};\n\n},{}],162:[function(_dereq_,module,exports){\n\"use strict\";\n\nmodule.exports = function (array, key, value) {\n  var i;\n\n  for (i = 0; i < array.length; i++) {\n    if (array[i].hasOwnProperty(key) && array[i][key] === value) {\n      return array[i];\n    }\n  }\n\n  return null;\n};\n\n},{}],163:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar Popup = _dereq_(\"./strategies/popup\");\nvar PopupBridge = _dereq_(\"./strategies/popup-bridge\");\nvar Modal = _dereq_(\"./strategies/modal\");\nvar Bus = _dereq_(\"framebus\");\nvar events = _dereq_(\"../shared/events\");\nvar errors = _dereq_(\"../shared/errors\");\nvar constants = _dereq_(\"../shared/constants\");\nvar uuid = _dereq_(\"@braintree/uuid\");\nvar iFramer = _dereq_(\"@braintree/iframer\");\nvar BraintreeError = _dereq_(\"../../braintree-error\");\nvar browserDetection = _dereq_(\"../shared/browser-detection\");\nvar assign = _dereq_(\"./../../assign\").assign;\nvar documentVisibility = _dereq_(\"../../document-visibility\");\nvar BUS_CONFIGURATION_REQUEST_EVENT =\n  _dereq_(\"../../constants\").BUS_CONFIGURATION_REQUEST_EVENT;\nvar isVerifiedDomain = _dereq_(\"../../is-verified-domain\");\n\nvar REQUIRED_CONFIG_KEYS = [\"name\", \"dispatchFrameUrl\", \"openFrameUrl\"];\n\nfunction noop() {}\n\nfunction _validateFrameConfiguration(options) {\n  if (!options) {\n    throw new Error(\"Valid configuration is required\");\n  }\n\n  REQUIRED_CONFIG_KEYS.forEach(function (key) {\n    if (!options.hasOwnProperty(key)) {\n      throw new Error(\"A valid frame \" + key + \" must be provided\");\n    }\n  });\n\n  if (!/^[\\w_]+$/.test(options.name)) {\n    throw new Error(\"A valid frame name must be provided\");\n  }\n}\n\nfunction FrameService(options) {\n  _validateFrameConfiguration(options);\n\n  this._serviceId = uuid().replace(/-/g, \"\");\n\n  this._options = {\n    name: options.name + \"_\" + this._serviceId,\n    dispatchFrameUrl: options.dispatchFrameUrl,\n    openFrameUrl: options.openFrameUrl,\n    height: options.height,\n    width: options.width,\n    top: options.top,\n    left: options.left,\n  };\n  this.state = options.state || {};\n\n  this._bus = new Bus({\n    channel: this._serviceId,\n    verifyDomain: isVerifiedDomain,\n    // Initially empty because the target dispatch frame is not created yet\n    targetFrames: [],\n  });\n  this._setBusEvents();\n}\n\nFrameService.prototype.initialize = function (callback) {\n  var dispatchFrameReadyHandler = function () {\n    callback();\n    this._bus.off(events.DISPATCH_FRAME_READY, dispatchFrameReadyHandler);\n  }.bind(this);\n\n  this._bus.on(events.DISPATCH_FRAME_READY, dispatchFrameReadyHandler);\n  this._writeDispatchFrame();\n};\n\nFrameService.prototype._writeDispatchFrame = function () {\n  var frameName = constants.DISPATCH_FRAME_NAME + \"_\" + this._serviceId;\n  var frameSrc = this._options.dispatchFrameUrl;\n\n  this._dispatchFrame = iFramer({\n    \"aria-hidden\": true,\n    name: frameName,\n    title: frameName,\n    src: frameSrc,\n    class: constants.DISPATCH_FRAME_CLASS,\n    height: 0,\n    width: 0,\n    style: {\n      position: \"absolute\",\n      left: \"-9999px\",\n    },\n  });\n\n  document.body.appendChild(this._dispatchFrame);\n  // Dispatch frame now created, add as a target frame for the bus\n  this._bus.addTargetFrame(this._dispatchFrame);\n};\n\nFrameService.prototype._setBusEvents = function () {\n  this._bus.on(\n    events.DISPATCH_FRAME_REPORT,\n    function (res, reply) {\n      if (this._onCompleteCallback) {\n        this._onCompleteCallback.call(null, res.err, res.payload);\n      }\n      this._frame.close();\n\n      this._onCompleteCallback = null;\n\n      this._cleanupFrame();\n\n      if (reply) {\n        reply();\n      }\n    }.bind(this)\n  );\n\n  this._bus.on(\n    BUS_CONFIGURATION_REQUEST_EVENT,\n    function (reply) {\n      reply(this.state);\n    }.bind(this)\n  );\n};\n\nFrameService.prototype.open = function (options, callback) {\n  options = options || {};\n  this._frame = this._getFrameForEnvironment(options);\n\n  this._frame.initialize(callback);\n\n  if (this._frame instanceof PopupBridge) {\n    // Frameservice loads a spinner then redirects to the final destination url.\n    // For Popupbridge it doesn't have the same rules around popups since it's deferred to the mobile side\n    // therefore, skips the regular open path and instead uses `#redirect` to handle things\n    return;\n  }\n\n  assign(this.state, options.state);\n\n  this._onCompleteCallback = callback;\n  this._onSuspend = options.onSuspend;\n  this._onResume = options.onResume;\n  this._frame.open();\n\n  if (this.isFrameClosed()) {\n    this._cleanupFrame();\n\n    if (callback) {\n      callback(new BraintreeError(errors.FRAME_SERVICE_FRAME_OPEN_FAILED));\n    }\n\n    return;\n  }\n  this._pollForPopupClose();\n\n  this._addVisibilityListeners();\n};\n\nFrameService.prototype.redirect = function (url) {\n  if (this._frame && !this.isFrameClosed()) {\n    this._frame.redirect(url);\n  }\n};\n\nFrameService.prototype.close = function () {\n  if (!this.isFrameClosed()) {\n    this._frame.close();\n  }\n};\n\nFrameService.prototype.focus = function () {\n  if (!this.isFrameClosed()) {\n    this._frame.focus();\n  }\n};\n\nFrameService.prototype.createHandler = function (options) {\n  options = options || {};\n\n  return {\n    close: function () {\n      if (options.beforeClose) {\n        options.beforeClose();\n      }\n\n      this.close();\n    }.bind(this),\n    focus: function () {\n      if (options.beforeFocus) {\n        options.beforeFocus();\n      }\n\n      this.focus();\n    }.bind(this),\n  };\n};\n\nFrameService.prototype.createNoopHandler = function () {\n  return {\n    close: noop,\n    focus: noop,\n  };\n};\n\nFrameService.prototype.teardown = function () {\n  this.close();\n  this._dispatchFrame.parentNode.removeChild(this._dispatchFrame);\n  this._dispatchFrame = null;\n  this._cleanupFrame();\n};\n\nFrameService.prototype.isFrameClosed = function () {\n  return this._frame == null || this._frame.isClosed();\n};\n\nFrameService.prototype._cleanupFrame = function () {\n  this._frame = null;\n  clearInterval(this._popupInterval);\n  this._popupInterval = null;\n  this._removeVisibilityListeners();\n};\n\nFrameService.prototype._reportFrameClosed = function () {\n  var callback = this._onCompleteCallback;\n\n  this._onCompleteCallback = null;\n  this._cleanupFrame();\n\n  if (callback) {\n    callback(new BraintreeError(errors.FRAME_SERVICE_FRAME_CLOSED));\n  }\n};\n\nFrameService.prototype._pollForPopupClose = function () {\n  this._popupInterval = setInterval(\n    function () {\n      if (this.isFrameClosed()) {\n        this._reportFrameClosed();\n      }\n    }.bind(this),\n    constants.POPUP_POLL_INTERVAL\n  );\n\n  return this._popupInterval;\n};\n\nFrameService.prototype._addVisibilityListeners = function () {\n  var self = this;\n\n  this._onVisibilityChange = function () {\n    if (documentVisibility.isDocumentHidden()) {\n      self._handleSuspend();\n    } else {\n      self._handleResume();\n    }\n  };\n\n  this._onPageShow = function (event) {\n    if (event && event.persisted) {\n      self._handleResume();\n    }\n  };\n\n  // Attach after a delay so the outbound app switch, which flips the page\n  // hidden then visible on its way out, doesn't trip the resume handler.\n  this._visibilityInstallTimeout = setTimeout(function () {\n    window.document.addEventListener(\n      documentVisibility.getVisibilityChangeEventName(),\n      self._onVisibilityChange\n    );\n    window.addEventListener(\"pageshow\", self._onPageShow);\n  }, constants.VISIBILITY_CHANGE_LISTENER_INSTALL_DELAY);\n};\n\nFrameService.prototype._removeVisibilityListeners = function () {\n  clearTimeout(this._visibilityInstallTimeout);\n  this._visibilityInstallTimeout = null;\n\n  clearTimeout(this._resumeRecheckTimeout);\n  this._resumeRecheckTimeout = null;\n\n  this._backgrounded = false;\n\n  if (this._onVisibilityChange) {\n    window.document.removeEventListener(\n      documentVisibility.getVisibilityChangeEventName(),\n      this._onVisibilityChange\n    );\n    this._onVisibilityChange = null;\n  }\n\n  if (this._onPageShow) {\n    window.removeEventListener(\"pageshow\", this._onPageShow);\n    this._onPageShow = null;\n  }\n};\n\nFrameService.prototype._handleSuspend = function () {\n  if (this._backgrounded) {\n    return;\n  }\n  this._backgrounded = true;\n\n  if (this._onSuspend) {\n    this._onSuspend();\n  }\n};\n\nFrameService.prototype._handleResume = function () {\n  var self = this;\n\n  // A bfcache restore can fire both pageshow and visibilitychange; only\n  // process the first resume that follows a suspend.\n  if (!this._backgrounded) {\n    return;\n  }\n  this._backgrounded = false;\n\n  if (this._onResume) {\n    this._onResume();\n  }\n\n  // The close poll is throttled while backgrounded, so re-check the frame\n  // state directly on return rather than waiting for the next poll tick.\n  clearTimeout(this._resumeRecheckTimeout);\n  this._resumeRecheckTimeout = setTimeout(function () {\n    if (self.isFrameClosed()) {\n      self._reportFrameClosed();\n    }\n  }, constants.RESUME_PROCESS_DELAY);\n};\n\nFrameService.prototype._getFrameForEnvironment = function (options) {\n  var usePopup = browserDetection.supportsPopups();\n  var popupBridgeExists = Boolean(window.popupBridge);\n\n  var initOptions = assign({}, this._options, options);\n\n  if (popupBridgeExists) {\n    return new PopupBridge(initOptions);\n  }\n  if (usePopup) {\n    return new Popup(initOptions);\n  }\n\n  return new Modal(initOptions);\n};\n\nmodule.exports = FrameService;\n\n},{\"../../braintree-error\":149,\"../../constants\":150,\"../../document-visibility\":158,\"../../is-verified-domain\":180,\"../shared/browser-detection\":170,\"../shared/constants\":171,\"../shared/errors\":172,\"../shared/events\":173,\"./../../assign\":146,\"./strategies/modal\":165,\"./strategies/popup\":168,\"./strategies/popup-bridge\":166,\"@braintree/iframer\":35,\"@braintree/uuid\":39,\"framebus\":54}],164:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar FrameService = _dereq_(\"./frame-service\");\n\n/**\n * @ignore\n * @function create\n * Initializing FrameService should be done at the point when the component is created, so it is ready whenever a component needs to open a popup window.\n * Browsers have varying rules around what constitutes and async action worth blocking a popup for, but the likes of Safari\n * will block the popup if `frameService#create` is invoked during any asynchronous process (such as an API request to tokenize payment details).\n *\n * The process of setting up the dispatch frame and subsequent framebus communications via event listeners are considered async by Safari's standards.\n *\n * @param {object} options The options provided to frameservice\n * @param {string} options.name The name to use for identifying the various pieces associated with frameservice.\n * @param {string} options.dispatchFrameUrl The static asset to load for use as the dispatch frame. This allows for secure communication between the iframe and the popup, since they are on the same asset domain (usually checkout.paypal.com or assets.braintreegateway.com)\n * @param {string} options.openFrameUrl The url to load in the popup. Sometimes it is the case that you'll need info that comes _after_ the popup loads in which case we load the `landing-frame` that's a loading spinner then redirect to the proper/final destination. See the PayPal component for an example.\n * Otherwise if all the info needed is ready up-front, then you can forego a landing frame and go straight to the final destination.\n * @param {string} [options.height] The desired popup height.\n * @param {string} [options.width] The desired popup width.\n * @param {string} [options.top] The desired top value of the popup for positioning.\n * @param {string} [options.left] The desired left value of the popup for positioning.\n * @param {object} [options.state] Seems to be dead code, but allows for injecting data in to popup. NEXT_MAJOR_VERSION remove this param if no usage exists.\n * @param {function} callback The function to invoke once the frameservice is created and ready to use. FrameService instance is returned.\n */\nmodule.exports = {\n  create: function createFrameService(options, callback) {\n    var frameService = new FrameService(options);\n\n    frameService.initialize(function () {\n      callback(frameService);\n    });\n  },\n};\n\n},{\"./frame-service\":163}],165:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar iFramer = _dereq_(\"@braintree/iframer\");\nvar assign = _dereq_(\"../../../assign\").assign;\nvar browserDetection = _dereq_(\"../../shared/browser-detection\");\n\nvar ELEMENT_STYLES = {\n  position: \"fixed\",\n  top: 0,\n  left: 0,\n  bottom: 0,\n  padding: 0,\n  margin: 0,\n  border: 0,\n  outline: \"none\",\n  zIndex: 20001,\n  background: \"#FFFFFF\",\n};\n\nfunction noop() {}\n\n/**\n *\n * We should not ever really use the Modal. Modals are _like_  popups, but the key difference is that the customer can't actually verify it's app domain and thus secure/valid. Old PP sdk (./src/paypal) uses this\n * to get info from webviews (e.g. facebook).\n */\n\nfunction Modal(options) {\n  this._closed = null;\n  this._frame = null;\n  this._options = options || {};\n  this._container = this._options.container || document.body;\n}\n\nModal.prototype.initialize = noop;\n\nModal.prototype.open = function () {\n  var iframerConfig = {\n    src: this._options.openFrameUrl,\n    name: this._options.name,\n    scrolling: \"yes\",\n    height: \"100%\",\n    width: \"100%\",\n    style: assign({}, ELEMENT_STYLES),\n    title: \"Lightbox Frame\",\n  };\n\n  if (browserDetection.isIos()) {\n    // WKWebView has buggy behavior when scrolling a fixed position modal. The workaround is to lock scrolling in\n    // the background. When modal is closed, we restore scrolling and return to the previous scroll position.\n    if (browserDetection.isIosWKWebview()) {\n      this._lockScrolling();\n      // Allows WKWebView to scroll all the way down to bottom\n      iframerConfig.style = {};\n    }\n\n    this._el = document.createElement(\"div\");\n\n    assign(this._el.style, ELEMENT_STYLES, {\n      height: \"100%\",\n      width: \"100%\",\n      overflow: \"auto\",\n      \"-webkit-overflow-scrolling\": \"touch\",\n    });\n\n    this._frame = iFramer(iframerConfig);\n    this._el.appendChild(this._frame);\n  } else {\n    this._el = this._frame = iFramer(iframerConfig);\n  }\n  this._closed = false;\n\n  this._container.appendChild(this._el);\n};\n\nModal.prototype.focus = noop;\n\nModal.prototype.close = function () {\n  this._container.removeChild(this._el);\n  this._frame = null;\n  this._closed = true;\n  if (browserDetection.isIosWKWebview()) {\n    this._unlockScrolling();\n  }\n};\n\nModal.prototype.isClosed = function () {\n  return Boolean(this._closed);\n};\n\nModal.prototype.redirect = function (redirectUrl) {\n  this._frame.src = redirectUrl;\n};\n\nModal.prototype._unlockScrolling = function () {\n  document.body.style.overflow = this._savedBodyProperties.overflowStyle;\n  document.body.style.position = this._savedBodyProperties.positionStyle;\n  window.scrollTo(\n    this._savedBodyProperties.left,\n    this._savedBodyProperties.top\n  );\n  delete this._savedBodyProperties;\n};\n\nModal.prototype._lockScrolling = function () {\n  var doc = document.documentElement;\n\n  // From https://stackoverflow.com/questions/9538868/prevent-body-from-scrolling-when-a-modal-is-opened#comment65626743_24727206\n  this._savedBodyProperties = {\n    left: (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0),\n    top: (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0),\n    overflowStyle: document.body.style.overflow,\n    positionStyle: document.body.style.position,\n  };\n  document.body.style.overflow = \"hidden\";\n  document.body.style.position = \"fixed\";\n  window.scrollTo(0, 0);\n};\n\nmodule.exports = Modal;\n\n},{\"../../../assign\":146,\"../../shared/browser-detection\":170,\"@braintree/iframer\":35}],166:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar BraintreeError = _dereq_(\"../../../braintree-error\");\nvar errors = _dereq_(\"../../shared/errors\");\n\nfunction noop() {}\n\nfunction PopupBridge(options) {\n  this._closed = null;\n  this._options = options;\n}\n\nPopupBridge.prototype.initialize = function (callback) {\n  var self = this;\n\n  window.popupBridge.onComplete = function (err, payload) {\n    var popupDismissed = !payload && !err;\n\n    self._closed = true;\n\n    if (err || popupDismissed) {\n      // User clicked \"Done\" button of browser view\n      callback(new BraintreeError(errors.FRAME_SERVICE_FRAME_CLOSED));\n\n      return;\n    }\n    // User completed popup flow (includes success and cancel cases)\n    callback(null, payload);\n  };\n};\n\nPopupBridge.prototype.open = function (options) {\n  var url;\n\n  options = options || {};\n  url = options.openFrameUrl || this._options.openFrameUrl;\n\n  this._closed = false;\n  window.popupBridge.open(url);\n};\n\nPopupBridge.prototype.focus = noop;\n\nPopupBridge.prototype.close = noop;\n\nPopupBridge.prototype.isClosed = function () {\n  return Boolean(this._closed);\n};\n\nPopupBridge.prototype.redirect = function (redirectUrl) {\n  this.open({ openFrameUrl: redirectUrl });\n};\n\nmodule.exports = PopupBridge;\n\n},{\"../../../braintree-error\":149,\"../../shared/errors\":172}],167:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar constants = _dereq_(\"../../../shared/constants\");\nvar position = _dereq_(\"./position\");\n\nfunction calculatePosition(type, userDefinedPosition, size) {\n  if (typeof userDefinedPosition !== \"undefined\") {\n    return userDefinedPosition;\n  }\n\n  return position[type](size);\n}\n\nmodule.exports = function composePopupOptions(options) {\n  var height = options.height || constants.DEFAULT_POPUP_HEIGHT;\n  var width = options.width || constants.DEFAULT_POPUP_WIDTH;\n  var top = calculatePosition(\"top\", options.top, height);\n  var left = calculatePosition(\"left\", options.left, width);\n\n  return [\n    constants.POPUP_BASE_OPTIONS,\n    \"height=\" + height,\n    \"width=\" + width,\n    \"top=\" + top,\n    \"left=\" + left,\n  ].join(\",\");\n};\n\n},{\"../../../shared/constants\":171,\"./position\":169}],168:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar composeOptions = _dereq_(\"./compose-options\");\n\nfunction noop() {}\n\nfunction Popup(options) {\n  this._frame = null;\n  this._options = options || {};\n}\n\nPopup.prototype.initialize = noop;\n\nPopup.prototype.open = function () {\n  this._frame = window.open(\n    this._options.openFrameUrl,\n    this._options.name,\n    composeOptions(this._options)\n  );\n};\n\nPopup.prototype.focus = function () {\n  this._frame.focus();\n};\n\nPopup.prototype.close = function () {\n  if (this._frame.closed) {\n    return;\n  }\n  this._frame.close();\n};\n\nPopup.prototype.isClosed = function () {\n  return !this._frame || Boolean(this._frame.closed);\n};\n\nPopup.prototype.redirect = function (redirectUrl) {\n  this._frame.location.href = redirectUrl;\n};\n\nmodule.exports = Popup;\n\n},{\"./compose-options\":167}],169:[function(_dereq_,module,exports){\n\"use strict\";\n\nfunction top(height) {\n  var windowHeight =\n    window.outerHeight || document.documentElement.clientHeight;\n  var windowTop = window.screenY == null ? window.screenTop : window.screenY;\n\n  return center(windowHeight, height, windowTop);\n}\n\nfunction left(width) {\n  var windowWidth = window.outerWidth || document.documentElement.clientWidth;\n  var windowLeft = window.screenX == null ? window.screenLeft : window.screenX;\n\n  return center(windowWidth, width, windowLeft);\n}\n\nfunction center(windowMetric, popupMetric, offset) {\n  return (windowMetric - popupMetric) / 2 + offset;\n}\n\nmodule.exports = {\n  top: top,\n  left: left,\n  center: center,\n};\n\n},{}],170:[function(_dereq_,module,exports){\n\"use strict\";\n\nmodule.exports = {\n  isIos: _dereq_(\"@braintree/browser-detection/is-ios\"),\n  isIosWKWebview: _dereq_(\"@braintree/browser-detection/is-ios-wkwebview\"),\n  supportsPopups: _dereq_(\"@braintree/browser-detection/supports-popups\"),\n};\n\n},{\"@braintree/browser-detection/is-ios\":30,\"@braintree/browser-detection/is-ios-wkwebview\":29,\"@braintree/browser-detection/supports-popups\":32}],171:[function(_dereq_,module,exports){\n\"use strict\";\n\nmodule.exports = {\n  DISPATCH_FRAME_NAME: \"dispatch\",\n  DISPATCH_FRAME_CLASS: \"braintree-dispatch-frame\",\n  POPUP_BASE_OPTIONS: \"resizable,scrollbars\",\n  DEFAULT_POPUP_WIDTH: 450,\n  DEFAULT_POPUP_HEIGHT: 535,\n  POPUP_POLL_INTERVAL: 100,\n  POPUP_CLOSE_TIMEOUT: 100,\n  VISIBILITY_CHANGE_LISTENER_INSTALL_DELAY: 500,\n  RESUME_PROCESS_DELAY: 1000,\n};\n\n},{}],172:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Popup Related Error Codes\n * @ignore\n * @description Errors that occur when using a component that opens a popup window.\n * @property {INTERNAL} FRAME_SERVICE_FRAME_CLOSED - Occurs when the frame is closed before tokenization can occur.\n * @property {INTERNAL} FRAME_SERVICE_FRAME_OPEN_FAILED - Occurs when the popup could not be opened.\n */\n\nvar BraintreeError = _dereq_(\"../../braintree-error\");\n\nmodule.exports = {\n  FRAME_SERVICE_FRAME_CLOSED: {\n    type: BraintreeError.types.INTERNAL,\n    code: \"FRAME_SERVICE_FRAME_CLOSED\",\n    message: \"Frame closed before tokenization could occur.\",\n  },\n  FRAME_SERVICE_FRAME_OPEN_FAILED: {\n    type: BraintreeError.types.INTERNAL,\n    code: \"FRAME_SERVICE_FRAME_OPEN_FAILED\",\n    message: \"Frame failed to open.\",\n  },\n};\n\n},{\"../../braintree-error\":149}],173:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar enumerate = _dereq_(\"../../enumerate\");\n\nmodule.exports = enumerate(\n  [\"DISPATCH_FRAME_READY\", \"DISPATCH_FRAME_REPORT\"],\n  \"frameService:\"\n);\n\n},{\"../../enumerate\":159}],174:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar VERSION = \"3.145.0\";\nvar assign = _dereq_(\"./assign\").assign;\n\nfunction generateTokenizationParameters(configuration, overrides) {\n  var metadata = configuration.analyticsMetadata;\n  var basicTokenizationParameters = {\n    gateway: \"braintree\",\n    \"braintree:merchantId\": configuration.gatewayConfiguration.merchantId,\n    \"braintree:apiVersion\": \"v1\",\n    \"braintree:sdkVersion\": VERSION,\n    \"braintree:metadata\": JSON.stringify({\n      source: metadata.source,\n      integration: metadata.integration,\n      sessionId: metadata.sessionId,\n      version: VERSION,\n      platform: metadata.platform,\n    }),\n  };\n\n  return assign({}, basicTokenizationParameters, overrides);\n}\n\nmodule.exports = function (configuration, googlePayVersion, googleMerchantId) {\n  var data, paypalPaymentMethod;\n  var androidPayConfiguration = configuration.gatewayConfiguration.androidPay;\n  var environment =\n    configuration.gatewayConfiguration.environment === \"production\"\n      ? \"PRODUCTION\"\n      : \"TEST\";\n\n  if (googlePayVersion === 2) {\n    data = {\n      apiVersion: 2,\n      apiVersionMinor: 0,\n      environment: environment,\n      allowedPaymentMethods: [\n        {\n          type: \"CARD\",\n          parameters: {\n            allowedAuthMethods: [\"PAN_ONLY\", \"CRYPTOGRAM_3DS\"],\n            allowedCardNetworks: androidPayConfiguration.supportedNetworks.map(\n              function (card) {\n                return card.toUpperCase();\n              }\n            ),\n          },\n          tokenizationSpecification: {\n            type: \"PAYMENT_GATEWAY\",\n            parameters: generateTokenizationParameters(configuration, {\n              \"braintree:authorizationFingerprint\":\n                androidPayConfiguration.googleAuthorizationFingerprint,\n            }),\n          },\n        },\n      ],\n    };\n\n    if (googleMerchantId) {\n      data.merchantInfo = {\n        merchantId: googleMerchantId,\n      };\n    }\n\n    if (androidPayConfiguration.paypalClientId) {\n      paypalPaymentMethod = {\n        type: \"PAYPAL\",\n        parameters: {\n          /* eslint-disable camelcase */\n          purchase_context: {\n            purchase_units: [\n              {\n                payee: {\n                  client_id: androidPayConfiguration.paypalClientId,\n                },\n                recurring_payment: true,\n              },\n            ],\n          },\n          /* eslint-enable camelcase */\n        },\n        tokenizationSpecification: {\n          type: \"PAYMENT_GATEWAY\",\n          parameters: generateTokenizationParameters(configuration, {\n            \"braintree:paypalClientId\": androidPayConfiguration.paypalClientId,\n          }),\n        },\n      };\n\n      data.allowedPaymentMethods.push(paypalPaymentMethod);\n    }\n  } else {\n    data = {\n      environment: environment,\n      allowedPaymentMethods: [\"CARD\", \"TOKENIZED_CARD\"],\n      paymentMethodTokenizationParameters: {\n        tokenizationType: \"PAYMENT_GATEWAY\",\n        parameters: generateTokenizationParameters(configuration, {\n          \"braintree:authorizationFingerprint\":\n            androidPayConfiguration.googleAuthorizationFingerprint,\n        }),\n      },\n      cardRequirements: {\n        allowedCardNetworks: androidPayConfiguration.supportedNetworks.map(\n          function (card) {\n            return card.toUpperCase();\n          }\n        ),\n      },\n    };\n\n    if (configuration.authorizationType === \"TOKENIZATION_KEY\") {\n      data.paymentMethodTokenizationParameters.parameters[\n        \"braintree:clientKey\"\n      ] = configuration.authorization;\n    }\n\n    if (googleMerchantId) {\n      data.merchantId = googleMerchantId;\n    }\n\n    if (googlePayVersion) {\n      data.apiVersion = googlePayVersion;\n    }\n  }\n\n  return data;\n};\n\n},{\"./assign\":146}],175:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * @ignore\n * @static\n * @function hasMissingOption\n * @param {object} options All options provided for validating required properties.\n * @param {array} required A list of required inputs that must be included as part of the options.\n * @returns {boolean} Returns `true` if any required option is missing, `false` otherwise.\n */\nfunction hasMissingOption(options, required) {\n  var i, option;\n\n  required = required || [];\n\n  for (i = 0; i < required.length; i++) {\n    option = required[i];\n\n    if (!options.hasOwnProperty(option)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nmodule.exports = hasMissingOption;\n\n},{}],176:[function(_dereq_,module,exports){\n\"use strict\";\n\nmodule.exports = function inIframe(win) {\n  win = win || window;\n\n  try {\n    return win.self !== win.top;\n    // eslint-disable-next-line no-unused-vars\n  } catch (err) {\n    return true;\n  }\n};\n\n},{}],177:[function(_dereq_,module,exports){\n\"use strict\";\n\nfunction convertDateStringToDate(dateString) {\n  var splitDate = dateString.split(\"-\");\n\n  return new Date(splitDate[0], splitDate[1], splitDate[2]);\n}\n\nfunction isDateStringBeforeOrOn(firstDate, secondDate) {\n  return (\n    convertDateStringToDate(firstDate) <= convertDateStringToDate(secondDate)\n  );\n}\n\nmodule.exports = isDateStringBeforeOrOn;\n\n},{}],178:[function(_dereq_,module,exports){\n\"use strict\";\n\nmodule.exports = function (creditCardDetails) {\n  return (\n    creditCardDetails &&\n    creditCardDetails.hasOwnProperty(\"fastlane\") &&\n    creditCardDetails.fastlane\n  );\n};\n\n},{}],179:[function(_dereq_,module,exports){\n\"use strict\";\n\nfunction isHTTPS(protocol) {\n  protocol = protocol || window.location.protocol;\n\n  return protocol === \"https:\";\n}\n\nmodule.exports = {\n  isHTTPS: isHTTPS,\n};\n\n},{}],180:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar parser;\nvar legalHosts = {\n  \"paypal.com\": 1,\n  \"braintreepayments.com\": 1,\n  \"braintreegateway.com\": 1,\n  \"braintree-api.com\": 1,\n};\n\n// endRemoveIf(production)\n\nfunction stripSubdomains(domain) {\n  return domain.split(\".\").slice(-2).join(\".\");\n}\n\nfunction isVerifiedDomain(url) {\n  var mainDomain;\n\n  url = url.toLowerCase();\n\n  if (!/^https:/.test(url)) {\n    return false;\n  }\n\n  parser = parser || document.createElement(\"a\");\n  parser.href = url;\n  mainDomain = stripSubdomains(parser.hostname);\n\n  return legalHosts.hasOwnProperty(mainDomain);\n}\n\nmodule.exports = isVerifiedDomain;\n\n},{}],181:[function(_dereq_,module,exports){\n\"use strict\";\n\nmodule.exports = function (value) {\n  return JSON.parse(JSON.stringify(value));\n};\n\n},{}],182:[function(_dereq_,module,exports){\n\"use strict\";\n\nmodule.exports = function (obj) {\n  return Object.keys(obj).filter(function (key) {\n    return typeof obj[key] === \"function\";\n  });\n};\n\n},{}],183:[function(_dereq_,module,exports){\n\"use strict\";\n\nfunction once(fn) {\n  var called = false;\n\n  return function () {\n    if (!called) {\n      called = true;\n      fn.apply(null, arguments);\n    }\n  };\n}\n\nmodule.exports = once;\n\n},{}],184:[function(_dereq_,module,exports){\n\"use strict\";\n\nfunction _notEmpty(obj) {\n  var key;\n\n  for (key in obj) {\n    if (obj.hasOwnProperty(key)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction _isArray(value) {\n  return (\n    (value &&\n      typeof value === \"object\" &&\n      typeof value.length === \"number\" &&\n      Object.prototype.toString.call(value) === \"[object Array]\") ||\n    false\n  );\n}\n\nfunction hasQueryParams(url) {\n  url = url || window.location.href;\n\n  return /\\?/.test(url);\n}\n\nfunction parse(url) {\n  var query, params;\n\n  url = url || window.location.href;\n\n  if (!hasQueryParams(url)) {\n    return {};\n  }\n\n  query = url.split(\"?\")[1] || \"\";\n  query = query.replace(/#.*$/, \"\").split(\"&\");\n\n  params = query.reduce(function (toReturn, keyValue) {\n    var parts = keyValue.split(\"=\");\n    var key = decodeURIComponent(parts[0]);\n    var value = decodeURIComponent(parts[1]);\n\n    toReturn[key] = value;\n\n    return toReturn;\n  }, {});\n\n  return params;\n}\n\nfunction stringify(params, namespace) {\n  var k, v, p;\n  var query = [];\n\n  for (p in params) {\n    if (!params.hasOwnProperty(p)) {\n      continue;\n    }\n\n    v = params[p];\n\n    if (namespace) {\n      if (_isArray(params)) {\n        k = namespace + \"[]\";\n      } else {\n        k = namespace + \"[\" + p + \"]\";\n      }\n    } else {\n      k = p;\n    }\n    if (typeof v === \"object\") {\n      query.push(stringify(v, k));\n    } else {\n      query.push(encodeURIComponent(k) + \"=\" + encodeURIComponent(v));\n    }\n  }\n\n  return query.join(\"&\");\n}\n\nfunction queryify(url, params) {\n  url = url || \"\";\n\n  if (params != null && typeof params === \"object\" && _notEmpty(params)) {\n    url += url.indexOf(\"?\") === -1 ? \"?\" : \"\";\n    url += url.indexOf(\"=\") !== -1 ? \"&\" : \"\";\n    url += stringify(params);\n  }\n\n  return url;\n}\n\nmodule.exports = {\n  parse: parse,\n  stringify: stringify,\n  queryify: queryify,\n  hasQueryParams: hasQueryParams,\n};\n\n},{}],185:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar uuid = _dereq_(\"@braintree/uuid\");\nvar findRootNode = _dereq_(\"./find-root-node\");\n\n// based on https://github.com/krakenjs/belter/blob/cdddc4f8ddb172d29db9e7e1ad1eeeacfb93e215/src/dom.js#L981-L1031\n// thanks @bluepnume\n\nfunction isShadowElement(element) {\n  element = findRootNode(element);\n\n  return element.toString() === \"[object ShadowRoot]\";\n}\n\nfunction getShadowHost(element) {\n  element = findRootNode(element);\n\n  if (!isShadowElement(element)) {\n    return null;\n  }\n\n  return element.host;\n}\n\nfunction transformToSlot(element, styles) {\n  var styleNode = findRootNode(element).querySelector(\"style\");\n  var shadowHost = getShadowHost(element);\n  var slotName = \"shadow-slot-\" + uuid();\n  var slot = document.createElement(\"slot\");\n  var slotProvider = document.createElement(\"div\");\n\n  slot.setAttribute(\"name\", slotName);\n  element.appendChild(slot);\n\n  slotProvider.setAttribute(\"slot\", slotName);\n  shadowHost.appendChild(slotProvider);\n\n  if (styles) {\n    if (!styleNode) {\n      styleNode = document.createElement(\"style\");\n      element.appendChild(styleNode);\n    }\n\n    styleNode.sheet.insertRule(\n      '::slotted([slot=\"' + slotName + '\"]) { ' + styles + \" }\"\n    );\n  }\n\n  if (isShadowElement(shadowHost)) {\n    return transformToSlot(slotProvider, styles);\n  }\n\n  return slotProvider;\n}\n\nmodule.exports = {\n  isShadowElement: isShadowElement,\n  getShadowHost: getShadowHost,\n  transformToSlot: transformToSlot,\n};\n\n},{\"./find-root-node\":161,\"@braintree/uuid\":39}],186:[function(_dereq_,module,exports){\n\"use strict\";\n\nmodule.exports = function (snakeString) {\n  if (snakeString.indexOf(\"_\") === -1) {\n    return snakeString;\n  }\n\n  return snakeString.toLowerCase().replace(/(\\_\\w)/g, function (match) {\n    return match[1].toUpperCase();\n  });\n};\n\n},{}],187:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar querystring = _dereq_(\"./querystring\");\n\nfunction getUrlParams() {\n  var targetUrl = window.location.href;\n\n  // If in same-origin iframe, prefer top window (where redirect params are)\n  try {\n    if (window.top && window.top !== window && window.top.location) {\n      targetUrl = window.top.location.href;\n    }\n    // eslint-disable-next-line no-unused-vars\n  } catch (_e) {\n    // Cross-origin iframe - fall back to current window\n  }\n\n  return querystring.parse(targetUrl);\n}\n\nmodule.exports = {\n  getUrlParams: getUrlParams,\n};\n\n},{\"./querystring\":184}],188:[function(_dereq_,module,exports){\n\"use strict\";\n\nfunction useMin(isDebug) {\n  return isDebug ? \"\" : \".min\";\n}\n\nmodule.exports = useMin;\n\n},{}],189:[function(_dereq_,module,exports){\n\"use strict\";\n\n// NEXT_MAJOR_VERSION old versions of IE don't have atob, in the\n// next major version, we're dropping support for those versions\n// so we can eliminate the need to have this atob polyfill\nvar atobNormalized = typeof atob === \"function\" ? atob : atobPolyfill;\n\nfunction atobPolyfill(base64String) {\n  var a, b, c, b1, b2, b3, b4, i;\n  var base64Matcher =\n    /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})([=]{1,2})?$/;\n  var characters =\n    \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n  var result = \"\";\n\n  if (!base64Matcher.test(base64String)) {\n    throw new Error(\"Non base64 encoded input passed to window.atob polyfill\");\n  }\n\n  i = 0;\n  do {\n    b1 = characters.indexOf(base64String.charAt(i++));\n    b2 = characters.indexOf(base64String.charAt(i++));\n    b3 = characters.indexOf(base64String.charAt(i++));\n    b4 = characters.indexOf(base64String.charAt(i++));\n\n    a = ((b1 & 0x3f) << 2) | ((b2 >> 4) & 0x3);\n    b = ((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf);\n    c = ((b3 & 0x3) << 6) | (b4 & 0x3f);\n\n    result +=\n      String.fromCharCode(a) +\n      (b ? String.fromCharCode(b) : \"\") +\n      (c ? String.fromCharCode(c) : \"\");\n  } while (i < base64String.length);\n\n  return result;\n}\n\nmodule.exports = {\n  atob: function (base64String) {\n    return atobNormalized.call(window, base64String);\n  },\n  _atob: atobPolyfill,\n};\n\n},{}],190:[function(_dereq_,module,exports){\n\"use strict\";\n\nmodule.exports = {\n  REQUIRED_OPTIONS_FOR_START_PAYMENT: [\n    \"givenName\",\n    \"surname\",\n    \"currencyCode\",\n    \"paymentType\",\n    \"amount\",\n    \"fallback\",\n  ],\n  REQUIRED_OPTIONS_FOR_PAY_UPON_INVOICE_PAYMENT_TYPE: [\n    \"givenName\",\n    \"surname\",\n    \"currencyCode\",\n    \"onPaymentStart\",\n    \"paymentType\",\n    \"amount\",\n    \"address\",\n    \"billingAddress\",\n    \"birthDate\",\n    \"email\",\n    \"locale\",\n    \"customerServiceInstructions\",\n    \"correlationId\",\n    \"phone\",\n    \"phoneCountryCode\",\n    \"lineItems\",\n  ],\n  REQUIRED_OPTIONS_FOR_ADDRESS: [\n    \"streetAddress\",\n    \"locality\",\n    \"postalCode\",\n    \"countryCode\",\n  ],\n  REQUIRED_OPTIONS_FOR_LINE_ITEMS: [\n    \"category\",\n    \"name\",\n    \"quantity\",\n    \"unitAmount\",\n    \"unitTaxAmount\",\n  ],\n  REQUIRED_OPTIONS_FOR_BLIK_SEAMLESS_PAYMENT_TYPE: [\n    \"givenName\",\n    \"surname\",\n    \"currencyCode\",\n    \"paymentType\",\n    \"amount\",\n  ],\n  REQUIRED_OPTIONS_FOR_BLIK_OPTIONS_LEVEL_0: [\"authCode\"],\n  REQUIRED_OPTIONS_FOR_BLIK_OPTIONS_ONE_CLICK_FIRST: [\n    \"authCode\",\n    \"consumerReference\",\n    \"aliasLabel\",\n  ],\n  REQUIRED_OPTIONS_FOR_BLIK_OPTIONS_ONE_CLICK_SUBSEQUENT: [\n    \"consumerReference\",\n    \"aliasKey\",\n  ],\n};\n\n},{}],191:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar BraintreeError = _dereq_(\"../../lib/braintree-error\");\nvar errors = _dereq_(\"../shared/errors\");\n\n/**\n * Injects a QR code image into a specified container element.\n * @function\n * @param {string} base64Data The base64 encoded QR code image data.\n * @param {(string|HTMLElement)} container A CSS selector string or HTML element to inject the QR code into.\n * @returns {HTMLImageElement} The created image element containing the QR code.\n * @throws {BraintreeError} Throws an error if the container is invalid or base64 data is invalid.\n */\nfunction injectQrCode(base64Data, container) {\n  var containerElement, imageElement;\n  var base64regex =\n    /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n\n  if (\n    !base64Data ||\n    typeof base64Data !== \"string\" ||\n    !base64regex.test(base64Data)\n  ) {\n    throw new BraintreeError(errors.LOCAL_PAYMENT_QR_CODE_INVALID_DATA);\n  }\n\n  if (typeof container === \"string\") {\n    containerElement = document.querySelector(container);\n    if (!containerElement) {\n      throw new BraintreeError({\n        type: BraintreeError.types.MERCHANT,\n        code: \"LOCAL_PAYMENT_QR_CODE_CONTAINER_NOT_FOUND\",\n        message: \"QR code container element not found: \" + container,\n      });\n    }\n  } else if (container && container.nodeType === Node.ELEMENT_NODE) {\n    containerElement = container;\n  } else {\n    throw new BraintreeError(errors.LOCAL_PAYMENT_QR_CODE_INVALID_CONTAINER);\n  }\n\n  containerElement.innerHTML = \"\";\n\n  imageElement = document.createElement(\"img\");\n  imageElement.src = \"data:image/png;base64,\" + base64Data;\n  imageElement.alt = \"QR Code for payment\";\n  imageElement.style.display = \"block\";\n  imageElement.style.maxWidth = \"100%\";\n  imageElement.style.height = \"auto\";\n\n  containerElement.appendChild(imageElement);\n\n  return imageElement;\n}\n\nmodule.exports = injectQrCode;\n\n},{\"../../lib/braintree-error\":149,\"../shared/errors\":195}],192:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar frameService = _dereq_(\"../../lib/frame-service/external\");\nvar BraintreeError = _dereq_(\"../../lib/braintree-error\");\nvar useMin = _dereq_(\"../../lib/use-min\");\nvar VERSION = \"3.145.0\";\nvar INTEGRATION_TIMEOUT_MS =\n  _dereq_(\"../../lib/constants\").INTEGRATION_TIMEOUT_MS;\nvar analytics = _dereq_(\"../../lib/analytics\");\nvar methods = _dereq_(\"../../lib/methods\");\nvar convertMethodsToError = _dereq_(\"../../lib/convert-methods-to-error\");\nvar convertToBraintreeError = _dereq_(\"../../lib/convert-to-braintree-error\");\nvar ExtendedPromise = _dereq_(\"@braintree/extended-promise\");\nvar querystring = _dereq_(\"../../lib/querystring\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar constants = _dereq_(\"./constants\");\nvar errors = _dereq_(\"../shared/errors\");\nvar assign = _dereq_(\"../../lib/assign\").assign;\nvar inIframe = _dereq_(\"../../lib/in-iframe\");\nvar isMobileDevice = _dereq_(\"../shared/browser-detection\");\nvar injectQrCode = _dereq_(\"./inject-qr-code\");\n\nvar DEFAULT_WINDOW_WIDTH = 1282;\nvar DEFAULT_WINDOW_HEIGHT = 720;\n\nExtendedPromise.suppressUnhandledPromiseMessage = true;\n\n/**\n * @class\n * @param {object} options see {@link module:braintree-web/local-payment.create|local-payment.create}\n * @classdesc This class represents a LocalPayment component. Instances of this class can open a LocalPayment window for paying with alternate payments local to a specific country. Any additional UI, such as disabling the page while authentication is taking place, is up to the developer.\n *\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/local-payment.create|braintree-web.local-payment.create} instead.</strong>\n */\nfunction LocalPayment(options) {\n  this._client = options.client;\n  this._assetsUrl =\n    options.client.getConfiguration().gatewayConfiguration.assetsUrl +\n    \"/web/\" +\n    VERSION;\n  this._isDebug = options.client.getConfiguration().isDebug;\n  this._loadingFrameUrl =\n    this._assetsUrl +\n    \"/html/local-payment-landing-frame\" +\n    useMin(this._isDebug) +\n    \".html\";\n  this._authorizationInProgress = false;\n  this._paymentType = \"unknown\";\n  this._merchantAccountId = options.merchantAccountId;\n  if (options.redirectUrl) {\n    this._redirectUrl = options.redirectUrl;\n    this._isRedirectFlow = true;\n  }\n}\n\nLocalPayment.prototype._initialize = function () {\n  var self = this;\n  var client = this._client;\n  var failureTimeout = setTimeout(function () {\n    analytics.sendEvent(client, \"local-payment.load.timed-out\");\n  }, INTEGRATION_TIMEOUT_MS);\n\n  return new Promise(function (resolve) {\n    frameService.create(\n      {\n        name: \"localpaymentlandingpage\",\n        dispatchFrameUrl:\n          self._assetsUrl +\n          \"/html/dispatch-frame\" +\n          useMin(self._isDebug) +\n          \".html\",\n        openFrameUrl: self._loadingFrameUrl,\n      },\n      function (service) {\n        self._frameService = service;\n        clearTimeout(failureTimeout);\n        analytics.sendEvent(client, \"local-payment.load.succeeded\");\n        resolve(self);\n      }\n    );\n  });\n};\n\n/**\n * Options used for most local payment types.\n * @typedef {object} LocalPayment~StartPaymentOptions\n * @property {object} fallback Configuration for what to do when app switching back from a Bank app on a mobile device. Only applicable to the popup flow.\n * @property {string} fallback.buttonText The text to display in a button to redirect back to the merchant page.\n * @property {string} fallback.url The url to redirect to when the redirect button is pressed. Query params will be added to the url to process the data returned from the bank.\n * @property {string} fallback.cancelButtonText The text to display in a button to redirect back to the merchant page when the customer cancels. If no `cancelButtonText` is provided, `buttonText` will be used.\n * @property {string} fallback.cancelUrl The url to redirect to when the redirect button is pressed when the customer cancels. Query params will be added to the url to check the state of the payment. If no `cancelUrl` is provided, `url` will be used.\n * @property {object} [windowOptions] The options for configuring the window that is opened when starting the payment. Only applicable to the popup flow.\n * @property {number} [windowOptions.width=1282] The width in pixels of the window opened when starting the payment. The default width size is this large to allow various banking partner landing pages to display the QR Code to be scanned by the bank's mobile app. Many will not display the QR code when the window size is smaller than a standard desktop screen.\n * @property {number} [windowOptions.height=720] The height in pixels of the window opened when starting the payment.\n * @property {string} amount The amount to authorize for the transaction.\n * @property {string} currencyCode The currency to process the payment (three-character ISO-4217).\n * @property {string} [displayName] The merchant name displayed inside of the window that is opened when starting the payment.\n * @property {string} paymentType The type of local payment. See https://developer.paypal.com/braintree/docs/guides/local-payment-methods/client-side-custom\n * @property {string} paymentTypeCountryCode The country code of the local payment. This value must be one of the supported country codes for a given local payment type listed {@link https://developer.paypal.com/braintree/docs/guides/local-payment-methods/client-side-custom/javascript/v3#render-local-payment-method-buttons|here}. For local payments supported in multiple countries, this value may determine which banks are presented to the customer.\n * @property {string} email Payer email of the customer.\n * @property {string} givenName First name of the customer.\n * @property {string} surname Last name of the customer.\n * @property {string} phone Phone number of the customer.\n * @property {boolean} recurrent Enable recurrent payment.\n * @property {string} customerId The customer's id in merchant's system (required for recurrent payments).\n * @property {boolean} shippingAddressRequired Indicates whether or not the payment needs to be shipped. For digital goods, this should be false. Defaults to false.\n * @property {object} address The shipping address.\n * @property {string} address.streetAddress Line 1 of the Address (eg. number, street, etc). An error will occur if this address is not valid.\n * @property {string} address.extendedAddress Line 2 of the Address (eg. suite, apt #, etc.). An error will occur if this address is not valid.\n * @property {string} address.locality Customer's city.\n * @property {string} address.region Customer's region or state.\n * @property {string} address.postalCode Customer's postal code.\n * @property {string} address.countryCode Customer's country code (two-character ISO 3166-1 code).\n * @property {function} onPaymentStart A function that will be called with two parameters: an object containing the  `paymentId` and a `continueCallback` that must be called to launch the flow. You can use method to do any preprocessing on your server before the flow begins..\n */\n\n/**\n * Options used for the Swish local payment type.\n * @typedef {object} LocalPayment~StartPaymentSwishOptions\n * @property {string} amount The amount to authorize for the transaction.\n * @property {string} currencyCode The currency to process the payment (three-character ISO-4217).\n * @property {string} [displayName] The merchant name displayed inside of the window that is opened when starting the payment.\n * @property {string} paymentType The type of local payment. Must be `swish`.\n * @property {string} paymentTypeCountryCode The country code of the local payment. Must be `SE` for Swish payments.\n * @property {string} email Payer email of the customer.\n * @property {string} givenName First name of the customer.\n * @property {string} surname Last name of the customer.\n * @property {string} phone Phone number of the customer.\n * @property {object} [swishOptions] Swish-specific options.\n * @property {boolean} [swishOptions.requestQrCode=false] For non-mobile devices, whether to use QR code data from the response with the intent of rendering the QR code on your page instead of following the standard redirect flow. Note: When using this option, it is important to store data.paymentId on your server so it can be mapped to a webhook sent by Braintree once the buyer completes their payment.\n * @property {(string|HTMLElement)} swishOptions.qrContainer Required when `swishOptions.requestQrCode` is set to `true`. A CSS selector string or HTML element where the QR code image will be automatically injected.\n * @property {string} swishOptions.returnUrl Required when using Swish Standard flow on mobile devices. The URL where users will be redirected after completing the Swish payment.\n * @property {function} [onPaymentStart] A function that will be called with an object containing the `paymentId`.\n */\n\n/**\n * Options used for the Crypto local payment type.\n * @typedef {object} LocalPayment~StartPaymentCryptoOptions\n * @property {string} paymentType The type of local payment. Must be `crypto`.\n * @property {object} cryptoOptions Crypto-specific options.\n * @property {string} cryptoOptions.approvalUrl The URL where users will be redirected to approve the crypto payment.\n */\n\n/**\n * Options used for the Pay Upon Invoice local payment type.\n * @typedef {object} LocalPayment~StartPaymentPayUponInvoiceOptions\n * @property {string} amount The amount to authorize for the transaction.\n * @property {string} currencyCode The currency to process the payment (three-character ISO-4217).\n * @property {string} [displayName] The merchant name displayed inside of the window that is opened when starting the payment.\n * @property {string} paymentType The type of local payment. Must be `pay_upon_invoice`.\n * @property {string} [paymentTypeCountryCode] The country code of the local payment. This value must be one of the supported country codes for a given local payment type listed {@link https://developer.paypal.com/braintree/docs/guides/local-payment-methods/client-side-custom/javascript/v3#render-local-payment-method-buttons|here}. For local payments supported in multiple countries, this value may determine which banks are presented to the customer.\n * @property {string} email Payer email of the customer.\n * @property {string} givenName First name of the customer.\n * @property {string} surname Last name of the customer.\n * @property {string} phone Phone number of the customer.\n * @property {string} phoneCountryCode The country calling code.\n * @property {string} birthDate The birth date of the customer in `YYYY-MM-DD` format.\n * @property {object} address The shipping address.\n * @property {string} address.streetAddress Line 1 of the Address (eg. number, street, etc). An error will occur if this address is not valid.\n * @property {string} [address.extendedAddress] Line 2 of the Address (eg. suite, apt #, etc.). An error will occur if this address is not valid.\n * @property {string} address.locality Customer's city.\n * @property {string} [address.region] Customer's region or state.\n * @property {string} address.postalCode Customer's postal code.\n * @property {string} address.countryCode Customer's country code (two-character ISO 3166-1 code).\n * @property {string} [shippingAmount] The shipping fee for all items. This value can not be a negative number.\n * @property {string} [discountAmount] The discount for all items. This value can not be a negative number.\n * @property {object} billingAddress The billing address.\n * @property {string} billingAddress.streetAddress Line 1 of the Address (eg. number, street, etc). An error will occur if this address is not valid.\n * @property {string} [billingAddress.extendedAddress] Line 2 of the Address (eg. suite, apt #, etc.). An error will occur if this address is not valid.\n * @property {string} billingAddress.locality Customer's city.\n * @property {string} [billingAddress.region] Customer's region or state.\n * @property {string} billingAddress.postalCode Customer's postal code.\n * @property {string} billingAddress.countryCode Customer's country code (two-character ISO 3166-1 code).\n * @property {object[]} lineItems List of line items.\n * @property {string} lineItems.category The item category type: `'DIGITAL_GOODS'`, `'PHYSICAL_GOODS'`, or `'DONATION'`.\n * @property {string} lineItems.name Item name. Maximum 127 characters.\n * @property {string} lineItems.quantity Number of units of the item purchased. This value must be a whole number and can't be negative or zero.\n * @property {string} lineItems.unitAmount Per-unit price of the item. Can include up to 2 decimal places. This value can't be negative or zero.\n * @property {string} lineItems.unitTaxAmount Per-unit tax price of the item. Can include up to 2 decimal places. This value can't be negative.\n * @property {string} locale The BCP 47-formatted locale. PayPal supports a five-character code. For example, `en-DE`, `da-DK`, `he-IL`, `id-ID`, `ja-JP`, `no-NO`, `pt-BR`, `ru-RU`, `sv-SE`, `th-TH`, `zh-CN`, `zh-HK`, or `zh-TW`.\n * @property {string} customerServiceInstructions Instructions for how to contact the merchant's customer service. Maximum 4,000 characters.\n * @property {string} correlationId Used to correlate user sessions with server transactions.\n * @property {function} onPaymentStart A function that will be called with an object containing the `paymentId`. The `continueCallback` is not provided as it is not needed for this use case.\n */\n\n/**\n * Options used for the seamless/oneclick BLIK local payment type.\n * @typedef {object} LocalPayment~StartPaymentOptions\n * @property {string} amount The amount to authorize for the transaction.\n * @property {string} currencyCode The currency to process the payment (three-character ISO-4217).\n * @property {string} [displayName] The merchant name displayed inside of the window that is opened when starting the payment.\n * @property {string} paymentType The type of local payment. Must be `blik`.\n * @property {string} paymentTypeCountryCode The country code of the local payment. This value must be one of the supported country codes for a given local payment type listed {@link https://developer.paypal.com/braintree/docs/guides/local-payment-methods/client-side-custom/javascript/v3#render-local-payment-method-buttons|here}. For local payments supported in multiple countries, this value may determine which banks are presented to the customer.\n * @property {string} email Payer email of the customer.\n * @property {string} givenName First name of the customer.\n * @property {string} surname Last name of the customer.\n * @property {string} phone Phone number of the customer.\n * @property {boolean} shippingAddressRequired Indicates whether or not the payment needs to be shipped. For digital goods, this should be false. Defaults to false.\n * @property {object} address The shipping address.\n * @property {string} address.streetAddress Line 1 of the Address (eg. number, street, etc). An error will occur if this address is not valid.\n * @property {string} address.extendedAddress Line 2 of the Address (eg. suite, apt #, etc.). An error will occur if this address is not valid.\n * @property {string} address.locality Customer's city.\n * @property {string} address.region Customer's region or state.\n * @property {string} address.postalCode Customer's postal code.\n * @property {string} address.countryCode Customer's country code (two-character ISO 3166-1 code).\n * @property {object} blikOptions Blik seamless/oneclick specific options. Should contain only one object: `level_0` or `oneClick`.\n * @property {object} blikOptions.level_0 Blik seamless specific options.\n * @property {string} blikOptions.level_0.authCode 6-digit code used to authenticate a consumer within BLIK.\n * @property {object} blikOptions.oneClick Blik oneclick specific options.\n * @property {string} blikOptions.oneClick.authCode 6-digit code used to authenticate a consumer within BLIK.\n * @property {string} blikOptions.oneClick.consumerReference The merchant generated, unique reference serving as a primary identifier for accounts connected between Blik and a merchant.\n * @property {string} blikOptions.oneClick.aliasLabel A bank defined identifier used as a display name to allow the payer to differentiate between multiple registered bank accounts.\n * @property {string} blikOptions.oneClick.aliasKey A Blik-defined identifier for a specific Blik-enabled bank account that is associated with a given merchant. Used only in conjunction with a Consumer Reference.\n * @property {function} onPaymentStart A function that will be called with an object containing the `paymentId`. The `continueCallback` is not provided as it is not needed for this use case.\n */\n\n/**\n * Launches the local payment flow and returns a nonce payload. Only one local payment flow should be active at a time. One way to achieve this is to disable your local payment button while the flow is open.\n * @public\n * @function\n * @param {LocalPayment~StartPaymentOptions|LocalPayment~StartPaymentPayUponInvoiceOptions|LocalPayment~StartPaymentSwishOptions} options Options for initiating the local payment payment flow.\n * @param {callback} callback The second argument, <code>data</code>, is a {@link LocalPayment~startPaymentPayload|startPaymentPayload}. If no callback is provided, the method will return a Promise that resolves with a {@link LocalPayment~startPaymentPayload|startPaymentPayload}.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * localPaymentInstance.startPayment({\n *   paymentType: 'ideal',\n *   paymentTypeCountryCode: 'NL',\n *   fallback: {\n *     buttonText: 'Return to Merchant',\n *     url: 'https://example.com/my-checkout-page'\n *   },\n *   amount: '10.00',\n *   currencyCode: 'EUR',\n *   givenName: 'Joe',\n *   surname: 'Doe',\n *   address: {\n *     countryCode: 'NL'\n *   },\n *   onPaymentStart: function (data, continueCallback) {\n *     // Do any preprocessing before starting the flow\n *     // data.paymentId is the ID of the localPayment\n *     continueCallback();\n *   }\n * }).then(function (payload) {\n *   // Submit payload.nonce to your server\n * }).catch(function (startPaymentError) {\n *   // Handle flow errors or premature flow closure\n *   console.error('Error!', startPaymentError);\n * });\n * @example <caption>Pay Upon Invoice</caption>\n * localPaymentInstance.startPayment({\n *   paymentType: 'pay_upon_invoice',\n *   amount: '100.00',\n *   currencyCode: 'EUR',\n *   givenName: 'Max',\n *   surname: 'Mustermann',\n *   address: { // This is used as the shipping address.\n *     streetAddress: 'Taunusanlage 12',\n *     locality: 'Frankfurt',\n *     postalCode: '60325',\n *     countryCode: 'DE',\n *   },\n *   billingAddress: {\n *     streetAddress: 'Sch\u00F6nhauser Allee 84',\n *     locality: 'Berlin',\n *     postalCode: '10439',\n *     countryCode: 'DE'\n *   },\n *   birthDate: '1990-01-01',\n *   email: 'buyer@example.com',\n *   locale: 'en-DE',\n *   customerServiceInstructions: 'Customer service phone is +49 6912345678.',\n *   lineItems: [{\n *     category: 'PHYSICAL_GOODS',\n *     name: 'Basketball Shoes',\n *     quantity: '1',\n *     unitAmount: '81.00',\n *     unitTaxAmount: '19.00',\n *   }],\n *   phone: '6912345678',\n *   phoneCountryCode: '49',\n *   correlationId: correlationId,\n *   onPaymentStart: function (data) {\n *     // NOTE: It is critical here to store data.paymentId on your server\n *     //       so it can be mapped to a webhook sent by Braintree once the\n *     //       buyer completes their payment.\n *     console.log('Payment ID:', data.paymentId);\n *   },\n * }).catch(function (err) {\n *   // Handle any error calling startPayment.\n *   console.error(err);\n * });\n * @example <caption>BLIK seamless</caption>\n * localPaymentInstance.startPayment({\n *   paymentType: 'blik',\n *   paymentTypeCountryCode: 'PL',\n *   amount: '10.00',\n *   currencyCode: 'PLN',\n *   givenName: 'Joe',\n *   surname: 'Doe',\n *   phone: '1234566789',\n *   address: {\n *     streetAddress: 'Mokotowska 1234',\n *     locality: 'Warsaw',\n *     postalCode: '02-697',\n *     countryCode: 'PL',\n *   },\n *   blikOptions: {\n *     level_0: {\n *       authCode: \"123456\",\n *     },\n *   },\n *   onPaymentStart: function (data) {\n *     // NOTE: It is critical here to store data.paymentId on your server\n *     //       so it can be mapped to a webhook sent by Braintree once the\n *     //       buyer completes their payment.\n *     console.log('Payment ID:', data.paymentId);\n *   },\n * }).catch(function (err) {\n *   // Handle any error calling startPayment.\n *   console.error(err);\n * });\n * @example <caption>BLIK oneclick first payment</caption>\n * localPaymentInstance.startPayment({\n *   paymentType: 'blik',\n *   paymentTypeCountryCode: 'PL',\n *   amount: '10.00',\n *   currencyCode: 'PLN',\n *   givenName: 'Joe',\n *   surname: 'Doe',\n *   phone: '1234566789',\n *   address: {\n *     streetAddress: 'Mokotowska 1234',\n *     locality: 'Warsaw',\n *     postalCode: '02-697',\n *     countryCode: 'PL',\n *   },\n *   blikOptions: {\n *     oneClick: {\n *       authCode: \"123456\",\n *       consumerReference: \"ABCde123\",\n *       aliasLabel: \"my uniq alias\",\n *     },\n *   },\n *   onPaymentStart: function (data) {\n *     // NOTE: It is critical here to store data.paymentId on your server\n *     //       so it can be mapped to a webhook sent by Braintree once the\n *     //       buyer completes their payment.\n *     console.log('Payment ID:', data.paymentId);\n *   },\n * }).catch(function (err) {\n *   // Handle any error calling startPayment.\n *   console.error(err);\n * });\n * @example <caption>BLIK oneclick subsequent payment</caption>\n * localPaymentInstance.startPayment({\n *   paymentType: 'blik',\n *   paymentTypeCountryCode: 'PL',\n *   amount: '10.00',\n *   currencyCode: 'PLN',\n *   givenName: 'Joe',\n *   surname: 'Doe',\n *   phone: '1234566789',\n *   address: {\n *     streetAddress: 'Mokotowska 1234',\n *     locality: 'Warsaw',\n *     postalCode: '02-697',\n *     countryCode: 'PL',\n *   },\n *   blikOptions: {\n *     oneClick: {\n *       consumerReference: \"ABCde123\",\n *       aliasKey: \"123456789\",\n *     },\n *   },\n *   onPaymentStart: function (data) {\n *     // NOTE: It is critical here to store data.paymentId on your server\n *     //       so it can be mapped to a webhook sent by Braintree once the\n *     //       buyer completes their payment.\n *     console.log('Payment ID:', data.paymentId);\n *   },\n * }).catch(function (err) {\n *   // Handle any error calling startPayment.\n *   console.error(err);\n * });\n * @example <caption>MB WAY</caption>\n * localPaymentInstance.startPayment({\n *   paymentType: 'mbway',\n *   amount: '10.00',\n *   currencyCode: 'EUR',\n *   givenName: 'Joe',\n *   surname: 'Doe',\n *   phone: '1234566789',\n *   phoneCountryCode: '351'\n *   address: {\n *     streetAddress: 'Rua Escura 12',\n *     locality: 'Porto',\n *     postalCode: '4465-283',\n *     countryCode: 'PT',\n *   },\n *   onPaymentStart: function (data) {\n *     // NOTE: It is critical here to store data.paymentId on your server\n *     //       so it can be mapped to a webhook sent by Braintree once the\n *     //       buyer completes their payment.\n *     console.log('Payment ID:', data.paymentId);\n *   },\n * }).catch(function (err) {\n *   // Handle any error calling startPayment.\n *   console.error(err);\n * });\n * @example <caption>BANCOMAT PAY</caption>\n * localPaymentInstance.startPayment({\n *   paymentType: 'bancomatpay',\n *   amount: '10.00',\n *   currencyCode: 'EUR',\n *   givenName: 'Joe',\n *   surname: 'Doe',\n *   phone: '1234566789',\n *   phoneCountryCode: '49'\n *   address: {\n *     streetAddress: 'Via del Corso 12',\n *     locality: 'Roma',\n *     postalCode: '00100',\n *     countryCode: 'IT',\n *   },\n *   onPaymentStart: function (data) {\n *     // NOTE: It is critical here to store data.paymentId on your server\n *     //       so it can be mapped to a webhook sent by Braintree once the\n *     //       buyer completes their payment.\n *     console.log('Payment ID:', data.paymentId);\n *   },\n * }).catch(function (err) {\n *   // Handle any error calling startPayment.\n *   console.error(err);\n * });\n * @example <caption>Swish with QR Code (for desktop)</caption>\n * localPaymentInstance.startPayment({\n *   paymentType: 'swish',\n *   paymentTypeCountryCode: 'SE',\n *   amount: '10.00',\n *   currencyCode: 'SEK',\n *   givenName: 'Joe',\n *   surname: 'Doe',\n *   phone: '1234566789',\n *   email: 'joe.doe@example.com',\n *   swishOptions: {\n *     requestQrCode: true,\n *     qrContainer: '#qr-code-container' // QR code will be automatically injected here\n *   },\n *   onPaymentStart: function (data) {\n *     console.log('Payment ID:', data.paymentId);\n *     // QR code is already displayed in the container\n *   },\n * }).catch(function (err) {\n *   // Handle any error calling startPayment.\n *   console.error(err);\n * });\n * @example <caption>Swish with redirect</caption>\n * localPaymentInstance.startPayment({\n *   paymentType: 'swish',\n *   paymentTypeCountryCode: 'SE',\n *   amount: '10.00',\n *   currencyCode: 'SEK',\n *   givenName: 'Joe',\n *   surname: 'Doe',\n *   phone: '1234566789',\n *   email: 'joe.doe@example.com',\n *   swishOptions: {\n *     returnUrl: 'https://example.com/return'\n *   },\n *   fallback: {\n *     buttonText: 'Return to Store',\n *     url: 'https://example.com/my-checkout-page'\n *   },\n *   onPaymentStart: function (data, continueCallback) {\n *     // On desktop, this follows standard redirect flow\n *     console.log('Payment ID:', data.paymentId);\n *     continueCallback();\n *   }\n * }).then(function (payload) {\n *   // Submit payload.nonce to your server\n * }).catch(function (err) {\n *   // Handle any error calling startPayment.\n *   console.error(err);\n * });\n * @example <caption>Crypto</caption>\n * localPaymentInstance.startPayment({\n *  paymentType: 'crypto',\n *  cryptoOptions: {\n *    approvalUrl: 'https://example.com/approval'\n *   }\n * })\n * .catch((error) => {\n *   console.error(error);\n * });\n */\n// eslint-disable-next-line complexity\nLocalPayment.prototype.startPayment = function (options) {\n  var missingOption,\n    missingError,\n    address,\n    fallback,\n    params,\n    promise,\n    billingAddress,\n    windowOptions,\n    onPaymentStartPromise,\n    serviceId,\n    cancelUrl,\n    returnUrl;\n  var self = this;\n\n  if (self._isRedirectFlow) {\n    options.redirectUrl = self._redirectUrl;\n  } else {\n    serviceId = self._frameService._serviceId;\n  }\n  // In order to provide the merchant with appropriate error messaging,\n  // more robust validation is being done on the client-side, since some\n  // option names are mapped to legacy names for the sake of the API.\n  // For example, if `billingAddress.streetAddress` was missing, then\n  // the API error response would say that `billing_address.line1` was\n  // missing. This client-side validation will correctly tell the\n  // merchant that `billingAddress.streetAddress` was missing.\n  missingOption = hasMissingOption(options);\n  if (missingOption) {\n    missingError = new BraintreeError(\n      errors.LOCAL_PAYMENT_START_PAYMENT_MISSING_REQUIRED_OPTION\n    );\n    if (typeof missingOption === \"string\") {\n      missingError.details = \"Missing required '\" + missingOption + \"' option.\";\n    }\n\n    return Promise.reject(missingError);\n  }\n\n  if (\n    options.paymentType &&\n    options.paymentType.toLowerCase() === \"swish\" &&\n    options.swishOptions &&\n    options.swishOptions.requestQrCode\n  ) {\n    if (isMobileDevice.isMobileDevice()) {\n      return Promise.reject(\n        new BraintreeError(errors.LOCAL_PAYMENT_QR_CODE_NOT_SUPPORTED)\n      );\n    }\n    if (!options.swishOptions.qrContainer) {\n      return Promise.reject(\n        new BraintreeError(\n          errors.LOCAL_PAYMENT_START_PAYMENT_MISSING_REQUIRED_OPTION\n        )\n      );\n    }\n  }\n\n  windowOptions = options.windowOptions || {};\n  address = options.address || {};\n  fallback = options.fallback || {};\n  billingAddress = options.billingAddress || {};\n  params = {\n    amount: options.amount,\n    billingAddress: {\n      line1: billingAddress.streetAddress,\n      line2: billingAddress.extendedAddress,\n      city: billingAddress.locality,\n      state: billingAddress.region,\n      postalCode: billingAddress.postalCode,\n      countryCode: billingAddress.countryCode,\n    },\n    birthDate: options.birthDate,\n    blikOptions: options.blikOptions,\n    city: address.locality,\n    correlationId: options.correlationId,\n    countryCode: address.countryCode,\n    currencyIsoCode: options.currencyCode,\n    discountAmount: options.discountAmount,\n    experienceProfile: {\n      brandName: options.displayName,\n      customerServiceInstructions: options.customerServiceInstructions,\n      locale: options.locale,\n      noShipping: !options.shippingAddressRequired,\n    },\n    firstName: options.givenName,\n    fundingSource: options.paymentType,\n    intent: \"sale\",\n    lastName: options.surname,\n    line1: address.streetAddress,\n    line2: address.extendedAddress,\n    lineItems: options.lineItems,\n    merchantAccountId: self._merchantAccountId,\n    merchantOrPartnerCustomerId: options.customerId,\n    payerEmail: options.email,\n    paymentTypeCountryCode: options.paymentTypeCountryCode,\n    phone: options.phone,\n    phoneCountryCode: options.phoneCountryCode,\n    postalCode: address.postalCode,\n    recurrent: options.recurrent,\n    shippingAmount: options.shippingAmount,\n    state: address.region,\n  };\n\n  self._paymentType = options.paymentType.toLowerCase();\n\n  if (self._paymentType === \"swish\") {\n    if (isMobileDevice.isMobileDevice()) {\n      params.redirectToApp = true;\n      self._isRedirectFlow = true; // Set to true to trigger app switch for Swish\n    }\n  }\n\n  if (self._paymentType === \"crypto\") {\n    self._isRedirectFlow = true;\n  }\n\n  if (self._isRedirectFlow) {\n    if (\n      self._paymentType === \"swish\" &&\n      options.swishOptions &&\n      options.swishOptions.returnUrl &&\n      isMobileDevice.isMobileDevice()\n    ) {\n      cancelUrl = querystring.queryify(options.swishOptions.returnUrl, {\n        wasCanceled: true,\n      });\n      returnUrl = options.swishOptions.returnUrl;\n    } else {\n      cancelUrl = querystring.queryify(self._redirectUrl, {\n        wasCanceled: true,\n      });\n      returnUrl = self._redirectUrl;\n    }\n  } else {\n    cancelUrl = querystring.queryify(\n      self._assetsUrl +\n        \"/html/local-payment-redirect-frame\" +\n        useMin(self._isDebug) +\n        \".html\",\n      {\n        channel: serviceId,\n        r: fallback.cancelUrl || fallback.url,\n        t: fallback.cancelButtonText || fallback.buttonText,\n        c: 1, // indicating we went through the cancel flow\n      }\n    );\n    returnUrl = querystring.queryify(\n      self._assetsUrl +\n        \"/html/local-payment-redirect-frame\" +\n        useMin(self._isDebug) +\n        \".html\",\n      {\n        channel: serviceId,\n        r: fallback.url,\n        t: fallback.buttonText,\n      }\n    );\n  }\n\n  assign(params, { cancelUrl: cancelUrl, returnUrl: returnUrl });\n\n  if (self._authorizationInProgress && !self._isRedirectFlow) {\n    analytics.sendEvent(\n      self._client,\n      self._paymentType + \".local-payment.start-payment.error.already-opened\"\n    );\n\n    return Promise.reject(\n      new BraintreeError(errors.LOCAL_PAYMENT_ALREADY_IN_PROGRESS)\n    );\n  }\n\n  self._authorizationInProgress = true;\n\n  promise = new ExtendedPromise();\n\n  // For deferred payment types, the popup window should not be opened,\n  // since the actual payment will be done outside of this session.\n  if (!isDeferredPaymentTypeOptions(options) && !self._isRedirectFlow) {\n    self._startPaymentCallback = self._createStartPaymentCallback(\n      function (val) {\n        promise.resolve(val);\n      },\n      function (err) {\n        promise.reject(err);\n      }\n    );\n\n    self._popupSawResume = false;\n    self._frameService.open(\n      {\n        width: windowOptions.width || DEFAULT_WINDOW_WIDTH,\n        height: windowOptions.height || DEFAULT_WINDOW_HEIGHT,\n        onSuspend: function () {\n          analytics.sendEvent(\n            self._client,\n            self._paymentType + \".local-payment.popup.suspended\"\n          );\n        },\n        onResume: function () {\n          self._popupSawResume = true;\n          analytics.sendEvent(\n            self._client,\n            self._paymentType + \".local-payment.popup.resumed\"\n          );\n        },\n      },\n      self._startPaymentCallback\n    );\n  }\n\n  if (self._paymentType === \"crypto\") {\n    analytics.sendEvent(\n      self._client,\n      self._paymentType + \".local-payment.start-payment.redirected\"\n    );\n    self._redirectToPaymentResource(options.cryptoOptions.approvalUrl);\n    promise.resolve();\n\n    return promise;\n  }\n\n  self._client\n    .request({\n      method: \"post\",\n      endpoint: \"local_payments/create\",\n      data: params,\n    })\n    .then(function (response) {\n      var redirectUrl = response.paymentResource.redirectUrl;\n\n      if (self._isRedirectFlow) {\n        analytics.sendEvent(\n          self._client,\n          self._paymentType + \".local-payment.start-payment.redirected\"\n        );\n      } else {\n        analytics.sendEvent(\n          self._client,\n          self._paymentType + \".local-payment.start-payment.opened\"\n        );\n      }\n      self._startPaymentOptions = options;\n\n      if (isSwishQrFlow(options, response, self._paymentType)) {\n        self._authorizationInProgress = false;\n\n        try {\n          injectQrCode(\n            response.paymentResource.qrDetails.qrImage,\n            options.swishOptions.qrContainer\n          );\n        } catch (injectError) {\n          return promise.reject(injectError);\n        }\n\n        if (typeof options.onPaymentStart === \"function\") {\n          onPaymentStartPromise = options.onPaymentStart({\n            paymentId: response.paymentResource.paymentToken,\n          });\n\n          if (onPaymentStartPromise instanceof Promise) {\n            onPaymentStartPromise\n              .then(function () {\n                promise.resolve();\n              })\n              .catch(function (error) {\n                promise.reject(error);\n              });\n          } else {\n            promise.resolve();\n          }\n        } else {\n          promise.resolve();\n        }\n      } else if (isDeferredPaymentTypeOptions(options)) {\n        self._authorizationInProgress = false;\n\n        if (typeof redirectUrl === \"string\" && redirectUrl.length) {\n          promise.reject(\n            new BraintreeError(\n              errors.LOCAL_PAYMENT_START_PAYMENT_DEFERRED_PAYMENT_FAILED\n            )\n          );\n        } else {\n          onPaymentStartPromise = options.onPaymentStart({\n            paymentId: response.paymentResource.paymentToken,\n          });\n\n          if (onPaymentStartPromise instanceof Promise) {\n            onPaymentStartPromise\n              .then(function () {\n                promise.resolve();\n              })\n              .catch(function (error) {\n                promise.reject(error);\n              });\n          } else {\n            promise.resolve();\n          }\n        }\n      } else if (typeof options.onPaymentStart === \"function\") {\n        Promise.resolve(\n          options.onPaymentStart(\n            { paymentId: response.paymentResource.paymentToken },\n            function () {\n              if (!self._isRedirectFlow) {\n                self._frameService.redirect(redirectUrl);\n              }\n            }\n          )\n        ).then(function () {\n          if (self._isRedirectFlow) {\n            self._redirectToPaymentResource(redirectUrl);\n            promise.resolve();\n          }\n        });\n      } else if (self._isRedirectFlow) {\n        self._redirectToPaymentResource(redirectUrl);\n\n        promise.resolve();\n      } else if (!self._isRedirectFlow) {\n        self._frameService.redirect(redirectUrl);\n      }\n\n      return promise;\n    })\n    .catch(function (err) {\n      var status = err.details && err.details.httpStatus;\n\n      if (!self._isRedirectFlow) {\n        self._frameService.close();\n      }\n      self._authorizationInProgress = false;\n\n      if (status === 422) {\n        promise.reject(\n          new BraintreeError({\n            type: errors.LOCAL_PAYMENT_INVALID_PAYMENT_OPTION.type,\n            code: errors.LOCAL_PAYMENT_INVALID_PAYMENT_OPTION.code,\n            message: errors.LOCAL_PAYMENT_INVALID_PAYMENT_OPTION.message,\n            details: {\n              originalError: err,\n            },\n          })\n        );\n\n        return;\n      }\n\n      promise.reject(\n        convertToBraintreeError(err, {\n          type: errors.LOCAL_PAYMENT_START_PAYMENT_FAILED.type,\n          code: errors.LOCAL_PAYMENT_START_PAYMENT_FAILED.code,\n          message: errors.LOCAL_PAYMENT_START_PAYMENT_FAILED.message,\n        })\n      );\n    });\n\n  return promise;\n};\n\nLocalPayment.prototype._redirectToPaymentResource = function (redirectUrl) {\n  if (inIframe()) {\n    window.top.location.href = redirectUrl;\n  } else {\n    window.location.href = redirectUrl;\n  }\n};\n\n/**\n * Manually tokenizes params for a local payment received from PayPal.When app switching back from a mobile application (such as a bank application for an iDEAL payment), the window may lose context with the parent page. In that case, a fallback url is used, and this method can be used to finish the flow.\n * @public\n * @function\n * @param {object} [params] All options for tokenizing local payment parameters. If no params are passed in, the params will be pulled off of the query string of the page.\n * @param {string} params.btLpToken The token representing the local payment. Aliased to `token` if `btLpToken` is not present.\n * @param {string} params.btLpPaymentId The payment id for the local payment. Aliased to `paymentId` if `btLpPaymentId` is not present.\n * @param {string} params.btLpPayerId The payer id for the local payment. Aliased to `PayerID` if `btLpPayerId` is not present.\n * @param {callback} [callback] The second argument, <code>data</code>, is a {@link LocalPayment~startPaymentPayload|startPaymentPayload}. If no callback is provided, the method will return a Promise that resolves with a {@link LocalPayment~startPaymentPayload|startPaymentPayload}.\n * @example\n * localPaymentInstance.tokenize().then(function (payload) {\n *   // send payload.nonce to your server\n * }).catch(function (err) {\n *   // handle tokenization error\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nLocalPayment.prototype.tokenize = function (params) {\n  var self = this;\n  var client = this._client;\n\n  params = params || querystring.parse();\n\n  // iOS Safari parses query params by adding the params inside an object called: queryItems\n  if (params.queryItems) {\n    params = params.queryItems;\n  }\n\n  if (params.c || params.wasCanceled) {\n    return Promise.reject(\n      new BraintreeError({\n        type: errors.LOCAL_PAYMENT_CANCELED.type,\n        code: errors.LOCAL_PAYMENT_CANCELED.code,\n        message: errors.LOCAL_PAYMENT_CANCELED.message,\n        details: {\n          originalError: {\n            errorcode: params.errorcode,\n            token: params.btLpToken,\n          },\n        },\n      })\n    );\n  }\n  if (params.errorcode) {\n    return Promise.reject(\n      new BraintreeError({\n        type: errors.LOCAL_PAYMENT_START_PAYMENT_FAILED.type,\n        code: errors.LOCAL_PAYMENT_START_PAYMENT_FAILED.code,\n        message: errors.LOCAL_PAYMENT_START_PAYMENT_FAILED.message,\n        details: {\n          originalError: {\n            errorcode: params.errorcode,\n            token: params.btLpToken,\n          },\n        },\n      })\n    );\n  }\n\n  return client\n    .request({\n      endpoint: \"payment_methods/paypal_accounts\",\n      method: \"post\",\n      data: this._formatTokenizeData(params),\n    })\n    .then(function (response) {\n      var payload = self._formatTokenizePayload(response);\n\n      if (window.popupBridge) {\n        analytics.sendEvent(\n          client,\n          self._paymentType + \".local-payment.tokenization.success-popupbridge\"\n        );\n      } else {\n        analytics.sendEvent(\n          client,\n          self._paymentType + \".local-payment.tokenization.success\"\n        );\n      }\n\n      return payload;\n    })\n    .catch(function (err) {\n      analytics.sendEvent(\n        client,\n        self._paymentType + \".local-payment.tokenization.failed\"\n      );\n\n      return Promise.reject(\n        convertToBraintreeError(err, {\n          type: errors.LOCAL_PAYMENT_TOKENIZATION_FAILED.type,\n          code: errors.LOCAL_PAYMENT_TOKENIZATION_FAILED.code,\n          message: errors.LOCAL_PAYMENT_TOKENIZATION_FAILED.message,\n        })\n      );\n    });\n};\n\n/**\n * Closes the LocalPayment window if it is open.\n * @public\n * @example\n * localPaymentInstance.closeWindow();\n * @returns {void}\n */\nLocalPayment.prototype.closeWindow = function () {\n  if (this._authoriztionInProgress) {\n    analytics.sendEvent(\n      this._client,\n      this._paymentType + \".local-payment.start-payment.closed.by-merchant\"\n    );\n  }\n  this._frameService.close();\n};\n\n/**\n * Focuses the LocalPayment window if it is open.\n * @public\n * @example\n * localPaymentInstance.focusWindow();\n * @returns {void}\n */\nLocalPayment.prototype.focusWindow = function () {\n  this._frameService.focus();\n};\n\nLocalPayment.prototype._createStartPaymentCallback = function (\n  resolve,\n  reject\n) {\n  var self = this;\n  var client = this._client;\n\n  return function (err, params) {\n    self._authorizationInProgress = false;\n\n    if (self._popupSawResume && !err && params) {\n      analytics.sendEvent(\n        client,\n        self._paymentType + \".local-payment.popup.recovered\"\n      );\n    }\n    self._popupSawResume = false;\n\n    if (err) {\n      if (err.code === \"FRAME_SERVICE_FRAME_CLOSED\") {\n        if (params && params.errorcode === \"processing_error\") {\n          // something failed within the payment window (rather than when\n          // tokenizing with Braintree)\n          analytics.sendEvent(\n            client,\n            self._paymentType + \".local-payment.failed-in-window\"\n          );\n          reject(new BraintreeError(errors.LOCAL_PAYMENT_START_PAYMENT_FAILED));\n\n          return;\n        }\n\n        // its possible to have a query param with errorcode=payment_error, which\n        // indicates that the customer cancelled the flow from within the UI,\n        // but as there's no meaningful difference to the merchant whether the\n        // customer closes via the UI or by manually closing the window, we\n        // don't differentiate these\n        analytics.sendEvent(\n          client,\n          self._paymentType + \".local-payment.tokenization.closed.by-user\"\n        );\n        reject(new BraintreeError(errors.LOCAL_PAYMENT_WINDOW_CLOSED));\n      } else if (\n        err.code &&\n        err.code.indexOf(\"FRAME_SERVICE_FRAME_OPEN_FAILED\") > -1\n      ) {\n        reject(\n          new BraintreeError({\n            code: errors.LOCAL_PAYMENT_WINDOW_OPEN_FAILED.code,\n            type: errors.LOCAL_PAYMENT_WINDOW_OPEN_FAILED.type,\n            message: errors.LOCAL_PAYMENT_WINDOW_OPEN_FAILED.message,\n            details: {\n              originalError: err,\n            },\n          })\n        );\n      }\n    } else if (params) {\n      if (!window.popupBridge) {\n        self._frameService.redirect(self._loadingFrameUrl);\n      }\n      self\n        .tokenize(params)\n        .then(resolve)\n        .catch(reject)\n        .then(function () {\n          self._frameService.close();\n        });\n    }\n  };\n};\n\nLocalPayment.prototype._formatTokenizePayload = function (response) {\n  var payload;\n  var account = {};\n\n  if (response.paypalAccounts) {\n    account = response.paypalAccounts[0];\n  }\n\n  payload = {\n    nonce: account.nonce,\n    details: {},\n    type: account.type,\n  };\n\n  if (account.details) {\n    if (account.details.payerInfo) {\n      payload.details = account.details.payerInfo;\n    }\n    if (account.details.correlationId) {\n      payload.correlationId = account.details.correlationId;\n    }\n  }\n\n  return payload;\n};\n\n/**\n * Checks if required tokenization parameters are available in querystring for manual tokenization requests.\n * @public\n * @function\n * @example\n * // if query string contains\n * // ?btLpToken=token&btLpPaymentId=payment-id&btLpPayerId=payer-id\n * localPaymentInstance.hasTokenizationParams(); // true\n *\n * // if query string has token: (full page redirect flow)\n * // ?token=abcdefg123456789\n * localPaymentInstance.hasTokenizationParams(); // true\n *\n * // if query string is missing required params\n * localPaymentInstance.hasTokenizationParams(); // false\n *\n * if (localPaymentInstance.hasTokenizationParams()) {\n *   localPaymentInstance.tokenize();\n * }\n * @returns {Boolean} Returns a Boolean value for the state of the query string.\n */\nLocalPayment.prototype.hasTokenizationParams = function () {\n  var params = querystring.parse();\n\n  if (params.errorcode || params.token) {\n    return true;\n  }\n\n  return Boolean(\n    params.btLpToken && params.btLpPaymentId && params.btLpPayerId\n  );\n};\n\nLocalPayment.prototype._formatTokenizeData = function (params) {\n  var clientConfiguration = this._client.getConfiguration();\n  var gatewayConfiguration = clientConfiguration.gatewayConfiguration;\n  var data = {\n    merchantAccountId: this._merchantAccountId,\n    paypalAccount: {\n      correlationId: params.btLpToken || params.token,\n      paymentToken: params.btLpPaymentId || params.paymentId,\n      payerId: params.btLpPayerId || params.PayerID,\n      unilateral: gatewayConfiguration.paypal.unvettedMerchant,\n      intent: \"sale\",\n    },\n  };\n\n  return data;\n};\n\n// Some payment types are deferred. Meaning, the actual payment will\n// occur at a later time outside of this session. For example, with\n// Pay Upon Invoice, the customer will later receive an email that will\n// be used to make the actual payment through RatePay. This function\n// will return `true` if the given options contain `paymentType` of\n// a deferred payment type; and/or some payments, like blik, may have\n// specific extra options to be treated as deferred. Otherwise, it\n// will return `false`.\nfunction isDeferredPaymentTypeOptions(options) {\n  var blikOptions = options.blikOptions || {};\n  var paymentType =\n    typeof options.paymentType === \"string\"\n      ? options.paymentType.toLowerCase()\n      : options.paymentType;\n\n  if (paymentType === \"blik\") {\n    return (\n      blikOptions.hasOwnProperty(\"level_0\") ||\n      blikOptions.hasOwnProperty(\"oneClick\")\n    );\n  }\n\n  if (\n    paymentType === \"swish\" &&\n    options.swishOptions &&\n    options.swishOptions.requestQrCode\n  ) {\n    return true;\n  }\n\n  return [\"pay_upon_invoice\", \"mbway\", \"bancomatpay\"].includes(paymentType);\n}\n\nfunction hasMissingAddressOption(options) {\n  var i, option;\n\n  for (i = 0; i < constants.REQUIRED_OPTIONS_FOR_ADDRESS.length; i++) {\n    option = constants.REQUIRED_OPTIONS_FOR_ADDRESS[i];\n    if (!options.hasOwnProperty(option)) {\n      return option;\n    }\n  }\n\n  return false;\n}\n\nfunction hasMissingLineItemsOption(items) {\n  var i, j, item, option;\n\n  for (j = 0; j < items.length; j++) {\n    item = items[j];\n    for (i = 0; i < constants.REQUIRED_OPTIONS_FOR_LINE_ITEMS.length; i++) {\n      option = constants.REQUIRED_OPTIONS_FOR_LINE_ITEMS[i];\n      if (!item.hasOwnProperty(option)) {\n        return option;\n      }\n    }\n  }\n\n  return false;\n}\n\nfunction hasMissingBlikOptions(options) {\n  var i, option, oneClick;\n  var blikOptions = options.blikOptions || {};\n\n  if (!options.redirectUrl) {\n    constants.REQUIRED_OPTIONS_FOR_BLIK_SEAMLESS_PAYMENT_TYPE.push(\n      \"onPaymentStart\"\n    );\n  }\n\n  for (\n    i = 0;\n    i < constants.REQUIRED_OPTIONS_FOR_BLIK_SEAMLESS_PAYMENT_TYPE.length;\n    i++\n  ) {\n    option = constants.REQUIRED_OPTIONS_FOR_BLIK_SEAMLESS_PAYMENT_TYPE[i];\n    if (!options.hasOwnProperty(option)) {\n      return option;\n    }\n  }\n\n  if (blikOptions.hasOwnProperty(\"level_0\")) {\n    for (\n      i = 0;\n      i < constants.REQUIRED_OPTIONS_FOR_BLIK_OPTIONS_LEVEL_0.length;\n      i++\n    ) {\n      option = constants.REQUIRED_OPTIONS_FOR_BLIK_OPTIONS_LEVEL_0[i];\n\n      if (!blikOptions.level_0.hasOwnProperty(option)) {\n        return \"blikOptions.level_0.\" + option;\n      }\n    }\n  } else if (blikOptions.hasOwnProperty(\"oneClick\")) {\n    oneClick = blikOptions.oneClick || {};\n\n    if (oneClick.hasOwnProperty(\"aliasKey\")) {\n      for (\n        i = 0;\n        i <\n        constants.REQUIRED_OPTIONS_FOR_BLIK_OPTIONS_ONE_CLICK_SUBSEQUENT.length;\n        i++\n      ) {\n        option =\n          constants.REQUIRED_OPTIONS_FOR_BLIK_OPTIONS_ONE_CLICK_SUBSEQUENT[i];\n\n        if (!oneClick.hasOwnProperty(option)) {\n          return \"blikOptions.oneClick.\" + option;\n        }\n      }\n    } else {\n      for (\n        i = 0;\n        i < constants.REQUIRED_OPTIONS_FOR_BLIK_OPTIONS_ONE_CLICK_FIRST.length;\n        i++\n      ) {\n        option = constants.REQUIRED_OPTIONS_FOR_BLIK_OPTIONS_ONE_CLICK_FIRST[i];\n\n        if (!oneClick.hasOwnProperty(option)) {\n          return \"blikOptions.oneClick.\" + option;\n        }\n      }\n    }\n  }\n\n  return false;\n}\n\nfunction hasMissingCryptoOptions(options) {\n  var cryptoOptions = options.cryptoOptions || {};\n\n  if (!cryptoOptions.approvalUrl) {\n    return \"cryptoOptions.approvalUrl\";\n  }\n\n  return false;\n}\n\nfunction hasMissingSwishOptions(options) {\n  var i, option;\n  var swishOptions = options.swishOptions || {};\n  var requiredSwishOptions = [\n    \"givenName\",\n    \"surname\",\n    \"currencyCode\",\n    \"paymentType\",\n    \"amount\",\n  ];\n\n  for (i = 0; i < requiredSwishOptions.length; i++) {\n    option = requiredSwishOptions[i];\n    if (!options.hasOwnProperty(option)) {\n      return option;\n    }\n  }\n\n  // If requestQrCode is true, qrContainer is required\n  if (swishOptions.requestQrCode && !swishOptions.qrContainer) {\n    return \"swishOptions.qrContainer\";\n  }\n\n  if (\n    !swishOptions.requestQrCode &&\n    !swishOptions.returnUrl &&\n    !options.redirectUrl &&\n    isMobileDevice.isMobileDevice()\n  ) {\n    return \"swishOptions.returnUrl\";\n  }\n\n  return false;\n}\n\nfunction isSwishQrFlow(options, response, paymentType) {\n  if (\n    paymentType === \"swish\" &&\n    options.swishOptions &&\n    options.swishOptions.requestQrCode &&\n    response.paymentResource.qrDetails &&\n    response.paymentResource.qrDetails.qrImage\n  ) {\n    return true;\n  }\n  return false;\n}\n\n// This will return the name of the first missing required option that\n// is found or `true` if `options` itself is not defined. Otherwise, it\n// will return `false`.\n// eslint-disable-next-line complexity\nfunction hasMissingOption(options) {\n  var i, option, missingAddressOption, missingLineItemOption, paymentType;\n\n  if (!options) {\n    return true;\n  }\n\n  paymentType = options.paymentType || \"\";\n\n  if (paymentType.toLowerCase() === \"crypto\") {\n    return hasMissingCryptoOptions(options);\n  }\n\n  if (paymentType.toLowerCase() === \"swish\") {\n    return hasMissingSwishOptions(options);\n  }\n  if (isDeferredPaymentTypeOptions(options)) {\n    if (paymentType.toLowerCase() === \"pay_upon_invoice\") {\n      for (\n        i = 0;\n        i < constants.REQUIRED_OPTIONS_FOR_PAY_UPON_INVOICE_PAYMENT_TYPE.length;\n        i++\n      ) {\n        option =\n          constants.REQUIRED_OPTIONS_FOR_PAY_UPON_INVOICE_PAYMENT_TYPE[i];\n        if (!options.hasOwnProperty(option)) {\n          return option;\n        }\n        if (option === \"address\" || option === \"billingAddress\") {\n          missingAddressOption = hasMissingAddressOption(options[option]);\n          if (missingAddressOption) {\n            return option + \".\" + missingAddressOption;\n          }\n        } else if (option === \"lineItems\") {\n          missingLineItemOption = hasMissingLineItemsOption(options[option]);\n          if (missingLineItemOption) {\n            return option + \".\" + missingLineItemOption;\n          }\n        }\n      }\n    } else if (paymentType.toLowerCase() === \"blik\") {\n      return hasMissingBlikOptions(options);\n    }\n  } else {\n    if (!options.redirectUrl) {\n      constants.REQUIRED_OPTIONS_FOR_START_PAYMENT.push(\"onPaymentStart\");\n    }\n\n    for (i = 0; i < constants.REQUIRED_OPTIONS_FOR_START_PAYMENT.length; i++) {\n      option = constants.REQUIRED_OPTIONS_FOR_START_PAYMENT[i];\n\n      if (!options.hasOwnProperty(option)) {\n        return option;\n      }\n    }\n\n    if (!options.fallback.url) {\n      return \"fallback.url\";\n    }\n    if (!options.fallback.buttonText) {\n      return \"fallback.buttonText\";\n    }\n    if (options.recurrent === true && !options.customerId) {\n      return \"customerId\";\n    }\n  }\n\n  return false;\n}\n\n/**\n * Cleanly remove anything set up by {@link module:braintree-web/local-payment.create|create}.\n * @public\n * @param {callback} [callback] Called on completion.\n * @example\n * localPaymentInstance.teardown();\n * @example <caption>With callback</caption>\n * localPaymentInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nLocalPayment.prototype.teardown = function () {\n  var self = this;\n\n  if (!self._isRedirectFlow) {\n    self._frameService.teardown();\n  }\n\n  convertMethodsToError(self, methods(LocalPayment.prototype));\n\n  analytics.sendEvent(self._client, \"local-payment.teardown-completed\");\n\n  return Promise.resolve();\n};\n\nmodule.exports = wrapPromise.wrapPrototype(LocalPayment);\n\n},{\"../../lib/analytics\":143,\"../../lib/assign\":146,\"../../lib/braintree-error\":149,\"../../lib/constants\":150,\"../../lib/convert-methods-to-error\":151,\"../../lib/convert-to-braintree-error\":152,\"../../lib/frame-service/external\":164,\"../../lib/in-iframe\":176,\"../../lib/methods\":182,\"../../lib/querystring\":184,\"../../lib/use-min\":188,\"../shared/browser-detection\":194,\"../shared/errors\":195,\"./constants\":190,\"./inject-qr-code\":191,\"@braintree/extended-promise\":34,\"@braintree/wrap-promise\":43}],193:[function(_dereq_,module,exports){\n\"use strict\";\n/**\n * @module braintree-web/local-payment\n * @description A component to integrate with local payment methods. *This component is currently in beta and is subject to change.*\n */\n\nvar analytics = _dereq_(\"../lib/analytics\");\nvar basicComponentVerification = _dereq_(\"../lib/basic-component-verification\");\nvar createDeferredClient = _dereq_(\"../lib/create-deferred-client\");\nvar createAssetsUrl = _dereq_(\"../lib/create-assets-url\");\nvar LocalPayment = _dereq_(\"./external/local-payment\");\nvar VERSION = \"3.145.0\";\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar errors = _dereq_(\"./shared/errors\");\nvar parse = _dereq_(\"../lib/querystring\").parse;\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {string} [options.merchantAccountId] A non-default merchant account ID to use for tokenization and creation of the authorizing transaction. Braintree strongly recommends specifying this parameter.\n * @param {string} [options.redirectUrl] When provided, triggers full page redirect flow instead of popup flow.\n * @param {callback} callback The second argument, `data`, is the {@link LocalPayment} instance.\n * @example <caption>Using the local payment component to set up an iDEAL button</caption>\n * var idealButton = document.querySelector('.ideal-button');\n *\n * braintree.client.create({\n *   authorization: CLIENT_AUTHORIZATION\n * }, function (clientErr, clientInstance) {\n *   if (clientErr) {\n *     console.error('Error creating client:', clientErr);\n *     return;\n *   }\n *\n *   braintree.localPayment.create({\n *     client: clientInstance,\n *     merchantAccountId: 'merchantAccountEUR',\n *   }, function (localPaymentErr, localPaymentInstance) {\n *     if (localPaymentErr) {\n *       console.error('Error creating local payment component:', localPaymentErr);\n *       return;\n *     }\n *\n *     idealButton.removeAttribute('disabled');\n *\n *     // When the button is clicked, attempt to start the payment flow.\n *     idealButton.addEventListener('click', function (event) {\n *       // Because this opens a popup, this has to be called as a result of\n *       // customer action, like clicking a button. You cannot call this at any time.\n *       localPaymentInstance.startPayment({\n *         paymentType: 'ideal',\n *         amount: '10.67',\n *         city: 'Den Haag',\n *         countryCode: 'NL',\n *         firstName: 'Test',\n *         lastName: 'McTester',\n *         line1: '123 of 456 Fake Lane',\n *         line2: 'Apartment 789',\n *         payerEmail: 'payer@example.com',\n *         phone: '123456789',\n *         postalCode: '1234 AA',\n *         currencyCode: 'EUR',\n *         onPaymentStart: function (data, continueCallback) {\n *           // Do any preprocessing to store the ID and setup webhook\n *           // Call start to initiate the popup\n *           continueCallback();\n *         }\n **       }, function (startPaymentErr, payload) {\n *         if (startPaymentErr) {\n *           if (startPaymentErr.type !== 'CUSTOMER') {\n *             console.error('Error starting payment:', startPaymentErr);\n *           }\n *           return;\n *         }\n *\n *         idealButton.setAttribute('disabled', true);\n *\n *         console.log(payload.paymentId);\n *       });\n *     }, false);\n *   });\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nfunction create(options) {\n  var name = \"Local Payment\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      return createDeferredClient.create({\n        authorization: options.authorization,\n        client: options.client,\n        debug: options.debug,\n        assetsUrl: createAssetsUrl.create(options.authorization),\n        name: name,\n      });\n    })\n    .then(function (client) {\n      var localPaymentInstance, params;\n      var config = client.getConfiguration();\n\n      options.client = client;\n\n      if (config.gatewayConfiguration.paypalEnabled !== true) {\n        return Promise.reject(\n          new BraintreeError(errors.LOCAL_PAYMENT_NOT_ENABLED)\n        );\n      }\n\n      analytics.sendEvent(client, \"local-payment.initialized\");\n\n      localPaymentInstance = new LocalPayment(options);\n      if (options.redirectUrl) {\n        params = parse(window.location.href);\n\n        if (params.token || params.wasCanceled) {\n          return localPaymentInstance\n            .tokenize(params)\n            .then(function (payload) {\n              localPaymentInstance.tokenizePayload = payload;\n\n              return localPaymentInstance;\n            })\n            .catch(function (err) {\n              console.log(\"Error while tokenizing: \", err); // eslint-disable-line no-console\n\n              return localPaymentInstance;\n            });\n        }\n\n        return localPaymentInstance;\n      }\n\n      return localPaymentInstance._initialize();\n    });\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `{@pkg version}`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/analytics\":143,\"../lib/basic-component-verification\":147,\"../lib/braintree-error\":149,\"../lib/create-assets-url\":153,\"../lib/create-deferred-client\":155,\"../lib/querystring\":184,\"./external/local-payment\":192,\"./shared/errors\":195,\"@braintree/wrap-promise\":43}],194:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar isAndroid = _dereq_(\"@braintree/browser-detection/is-android\");\nvar isIos = _dereq_(\"@braintree/browser-detection/is-ios\");\n\nfunction isMobileDevice() {\n  return isAndroid() || isIos();\n}\n\nmodule.exports = {\n  isMobileDevice: isMobileDevice,\n};\n\n},{\"@braintree/browser-detection/is-android\":22,\"@braintree/browser-detection/is-ios\":30}],195:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.LocalPayment - Creation Error Codes\n * @description Errors that occur when [creating the Local Payment component](./module-braintree-web_local-payment.html#.create).\n * @property {MERCHANT} LOCAL_PAYMENT_NOT_ENABLED Occurs when Local Payment is not enabled on the Braintree control panel.\n */\n\n/**\n * @name BraintreeError.LocalPayment - startPayment Error Codes\n * @description Errors that occur when using the [`startPayment` method](./LocalPayment.html#startPayment).\n * @property {MERCHANT} LOCAL_PAYMENT_START_PAYMENT_MISSING_REQUIRED_OPTION Occurs when a startPayment is missing a required option.\n * @property {MERCHANT} LOCAL_PAYMENT_ALREADY_IN_PROGRESS Occurs when a startPayment call is already in progress.\n * @property {MERCHANT} LOCAL_PAYMENT_INVALID_PAYMENT_OPTION Occurs when a startPayment call has an invalid option.\n * @property {NETWORK} LOCAL_PAYMENT_START_PAYMENT_FAILED Occurs when a startPayment call fails.\n * @property {NETWORK} LOCAL_PAYMENT_TOKENIZATION_FAILED Occurs when a startPayment call fails to tokenize the result from authorization.\n * @property {CUSTOMER} LOCAL_PAYMENT_CANCELED Occurs when the customer cancels the Local Payment.\n * @property {CUSTOMER} LOCAL_PAYMENT_WINDOW_CLOSED Occurs when the customer closes the Local Payment window.\n * @property {MERCHANT} LOCAL_PAYMENT_WINDOW_OPEN_FAILED Occurs when the Local Payment window fails to open. Usually because `startPayment` was not called as a direct result of a user action.\n * @property {MERCHANT} LOCAL_PAYMENT_QR_CODE_INVALID_DATA Occurs when QR code data is not a valid base64 string.\n * @property {MERCHANT} LOCAL_PAYMENT_QR_CODE_CONTAINER_NOT_FOUND Occurs when the specified QR code container element cannot be found.\n * @property {MERCHANT} LOCAL_PAYMENT_QR_CODE_INVALID_CONTAINER Occurs when the QR code container is not a valid CSS selector string or HTML element.\n */\n\nvar BraintreeError = _dereq_(\"../../lib/braintree-error\");\n\nmodule.exports = {\n  LOCAL_PAYMENT_NOT_ENABLED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"LOCAL_PAYMENT_NOT_ENABLED\",\n    message: \"LocalPayment is not enabled for this merchant.\",\n  },\n  LOCAL_PAYMENT_ALREADY_IN_PROGRESS: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"LOCAL_PAYMENT_ALREADY_IN_PROGRESS\",\n    message: \"LocalPayment payment is already in progress.\",\n  },\n  LOCAL_PAYMENT_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"LOCAL_PAYMENT_CANCELED\",\n    message: \"Customer canceled the LocalPayment before authorizing.\",\n  },\n  LOCAL_PAYMENT_WINDOW_CLOSED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"LOCAL_PAYMENT_WINDOW_CLOSED\",\n    message: \"Customer closed LocalPayment window before authorizing.\",\n  },\n  LOCAL_PAYMENT_WINDOW_OPEN_FAILED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"LOCAL_PAYMENT_WINDOW_OPEN_FAILED\",\n    message:\n      \"LocalPayment window failed to open; make sure startPayment was called in response to a user action.\",\n  },\n  LOCAL_PAYMENT_START_PAYMENT_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"LOCAL_PAYMENT_START_PAYMENT_FAILED\",\n    message: \"LocalPayment startPayment failed.\",\n  },\n  LOCAL_PAYMENT_START_PAYMENT_MISSING_REQUIRED_OPTION: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"LOCAL_PAYMENT_START_PAYMENT_MISSING_REQUIRED_OPTION\",\n    message: \"Missing required option for startPayment.\",\n  },\n  LOCAL_PAYMENT_START_PAYMENT_DEFERRED_PAYMENT_FAILED: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"LOCAL_PAYMENT_START_PAYMENT_DEFERRED_PAYMENT_FAILED\",\n    message: \"LocalPayment startPayment deferred payment failed.\",\n  },\n  LOCAL_PAYMENT_TOKENIZATION_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"LOCAL_PAYMENT_TOKENIZATION_FAILED\",\n    message: \"Could not tokenize user's local payment method.\",\n  },\n  LOCAL_PAYMENT_INVALID_PAYMENT_OPTION: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"LOCAL_PAYMENT_INVALID_PAYMENT_OPTION\",\n    message: \"Local payment options are invalid.\",\n  },\n  LOCAL_PAYMENT_QR_CODE_INVALID_DATA: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"LOCAL_PAYMENT_QR_CODE_INVALID_DATA\",\n    message: \"QR code data must be a valid base64 string.\",\n  },\n  LOCAL_PAYMENT_QR_CODE_CONTAINER_NOT_FOUND: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"LOCAL_PAYMENT_QR_CODE_CONTAINER_NOT_FOUND\",\n    message: \"QR code container element not found.\",\n  },\n  LOCAL_PAYMENT_QR_CODE_INVALID_CONTAINER: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"LOCAL_PAYMENT_QR_CODE_INVALID_CONTAINER\",\n    message:\n      \"QR code container must be a valid CSS selector string or HTML element.\",\n  },\n  LOCAL_PAYMENT_QR_CODE_NOT_SUPPORTED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"LOCAL_PAYMENT_QR_CODE_NOT_SUPPORTED\",\n    message: \"QR code is only supported on desktop devices.\",\n  },\n};\n\n},{\"../../lib/braintree-error\":149}],196:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar frameService = _dereq_(\"../../lib/frame-service/external\");\nvar BraintreeError = _dereq_(\"../../lib/braintree-error\");\nvar errors = _dereq_(\"../shared/errors\");\nvar VERSION = \"3.145.0\";\nvar methods = _dereq_(\"../../lib/methods\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar analytics = _dereq_(\"../../lib/analytics\");\nvar convertMethodsToError = _dereq_(\"../../lib/convert-methods-to-error\");\nvar convertToBraintreeError = _dereq_(\"../../lib/convert-to-braintree-error\");\nvar constants = _dereq_(\"../shared/constants\");\n\nvar INTEGRATION_TIMEOUT_MS =\n  _dereq_(\"../../lib/constants\").INTEGRATION_TIMEOUT_MS;\n\n/**\n * Masterpass Address object.\n * @typedef {object} Masterpass~Address\n * @property {string} countryCodeAlpha2 The customer's country code.\n * @property {string} extendedAddress The customer's extended address.\n * @property {string} locality The customer's locality.\n * @property {string} postalCode The customer's postal code.\n * @property {string} region The customer's region.\n * @property {string} streetAddress The customer's street address.\n */\n\n/**\n * @typedef {object} Masterpass~tokenizePayload\n * @property {string} nonce The payment method nonce.\n * @property {string} description The human readable description.\n * @property {string} type The payment method type, always `MasterpassCard`.\n * @property {object} details Additional account details.\n * @property {string} details.cardType Type of card, ex: Visa, MasterCard.\n * @property {string} details.lastFour Last four digits of card number.\n * @property {string} details.lastTwo Last two digits of card number.\n * @property {object} contact The customer's contact information.\n * @property {string} contact.firstName The customer's first name.\n * @property {string} contact.lastName The customer's last name.\n * @property {string} contact.phoneNumber The customer's phone number.\n * @property {string} contact.emailAddress The customer's email address.\n * @property {Masterpass~Address} billingAddress The customer's billing address.\n * @property {Masterpass~Address} shippingAddress The customer's shipping address.\n * @property {object} binData Information about the card based on the bin.\n * @property {string} binData.commercial Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.countryOfIssuance The country of issuance.\n * @property {string} binData.debit Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.durbinRegulated Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.healthcare Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.issuingBank The issuing bank.\n * @property {string} binData.payroll Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.prepaid Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.productId The product id.\n * @property {string} binData.business Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.consumer Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.purchase Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.corporate Possible values: 'Yes', 'No', 'Unknown'.\n */\n\n/**\n * @class\n * @param {object} options see {@link module:braintree-web/masterpass.create|masterpass.create}\n * @description <strong>You cannot use this constructor directly. Use {@link module:braintree-web/masterpass.create|braintree.masterpass.create} instead.</strong>\n * @classdesc This class represents an Masterpass component. Instances of this class have methods for launching a new window to process a transaction with Masterpass.\n */\nfunction Masterpass(options) {\n  var configuration = options.client.getConfiguration();\n\n  this._client = options.client;\n  this._assetsUrl =\n    configuration.gatewayConfiguration.assetsUrl + \"/web/\" + VERSION;\n  this._isDebug = configuration.isDebug;\n  this._authInProgress = false;\n  if (\n    window.popupBridge &&\n    typeof window.popupBridge.getReturnUrlPrefix === \"function\"\n  ) {\n    this._callbackUrl = window.popupBridge.getReturnUrlPrefix() + \"return\";\n  } else {\n    this._callbackUrl =\n      this._assetsUrl +\n      \"/html/redirect-frame\" +\n      (this._isDebug ? \"\" : \".min\") +\n      \".html\";\n  }\n}\n\nMasterpass.prototype._initialize = function () {\n  var self = this;\n\n  return new Promise(function (resolve) {\n    var failureTimeout = setTimeout(function () {\n      analytics.sendEvent(self._client, \"masterpass.load.timed-out\");\n    }, INTEGRATION_TIMEOUT_MS);\n\n    frameService.create(\n      {\n        name: constants.LANDING_FRAME_NAME,\n        height: constants.POPUP_HEIGHT,\n        width: constants.POPUP_WIDTH,\n        dispatchFrameUrl:\n          self._assetsUrl +\n          \"/html/dispatch-frame\" +\n          (self._isDebug ? \"\" : \".min\") +\n          \".html\",\n        openFrameUrl:\n          self._assetsUrl +\n          \"/html/masterpass-landing-frame\" +\n          (self._isDebug ? \"\" : \".min\") +\n          \".html\",\n      },\n      function (service) {\n        self._frameService = service;\n        clearTimeout(failureTimeout);\n        analytics.sendEvent(self._client, \"masterpass.load.succeeded\");\n        resolve(self);\n      }\n    );\n  });\n};\n\n/**\n * Launches the Masterpass flow and returns a nonce payload. Only one Masterpass flow should be active at a time. One way to achieve this is to disable your Masterpass button while the flow is open.\n *\n * Braintree will apply these properties in `options.config`. Merchants should not override these values, except for advanced usage.\n *  - `environment`\n *  - `requestToken`\n *  - `callbackUrl`\n *  - `merchantCheckoutId`\n *  - `allowedCardTypes`\n *  - `version`\n *\n * @public\n * @param {object} options All options for initiating the Masterpass payment flow.\n * @param {string} options.currencyCode The currency code to process the payment.\n * @param {string} options.subtotal The amount to authorize for the transaction.\n * @param {object} [options.config] All configuration parameters accepted by Masterpass lightbox, except `function` data type. These options will override the values set by Braintree server. Please see {@link Masterpass Lightbox Parameters|https://developer.mastercard.com/page/masterpass-lightbox-parameters} for more information.\n * @param {object} [options.frameOptions] Used to configure the window that contains the Masterpass login.\n * @param {number} [options.frameOptions.width] Popup width to be used instead of default value (450px).\n * @param {number} [options.frameOptions.height] Popup height to be used instead of default value (660px).\n * @param {number} [options.frameOptions.top] The top position of the popup window to be used instead of default value, that is calculated based on provided height, and parent window size.\n * @param {number} [options.frameOptions.left] The left position to the popup window to be used instead of default value, that is calculated based on provided width, and parent window size.\n * @param {callback} [callback] The second argument, <code>data</code>, is a {@link Masterpass~tokenizePayload|tokenizePayload}. If no callback is provided, the method will return a Promise that resolves with a {@link Masterpass~tokenizePayload|tokenizePayload}.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * button.addEventListener('click', function () {\n *   // Disable the button so that we don't attempt to open multiple popups.\n *   button.setAttribute('disabled', 'disabled');\n *\n *   // Because tokenize opens a new window, this must be called\n *   // as a result of a user action, such as a button click.\n *   masterpassInstance.tokenize({\n *     currencyCode: 'USD',\n *     subtotal: '10.00'\n *   }).then(function (payload) {\n *     button.removeAttribute('disabled');\n *     // Submit payload.nonce to your server\n *   }).catch(function (tokenizeError) {\n *     button.removeAttribute('disabled');\n *     // Handle flow errors or premature flow closure\n *\n *     switch (tokenizeErr.code) {\n *       case 'MASTERPASS_POPUP_CLOSED':\n *         console.error('Customer closed Masterpass popup.');\n *         break;\n *       case 'MASTERPASS_ACCOUNT_TOKENIZATION_FAILED':\n *         console.error('Masterpass tokenization failed. See details:', tokenizeErr.details);\n *         break;\n *       case 'MASTERPASS_FLOW_FAILED':\n *         console.error('Unable to initialize Masterpass flow. Are your options correct?', tokenizeErr.details);\n *         break;\n *       default:\n *         console.error('Error!', tokenizeErr);\n *     }\n *   });\n * });\n */\nMasterpass.prototype.tokenize = function (options) {\n  var self = this;\n\n  if (!options || hasMissingOption(options)) {\n    return Promise.reject(\n      new BraintreeError(errors.MASTERPASS_TOKENIZE_MISSING_REQUIRED_OPTION)\n    );\n  }\n\n  if (self._authInProgress) {\n    return Promise.reject(\n      new BraintreeError(errors.MASTERPASS_TOKENIZATION_ALREADY_IN_PROGRESS)\n    );\n  }\n\n  return new Promise(function (resolve, reject) {\n    self._navigateFrameToLoadingPage(options).catch(reject);\n    // This MUST happen after _navigateFrameToLoadingPage for Metro browsers to work.\n    self._frameService.open(\n      options.frameOptions,\n      self._createFrameOpenHandler(resolve, reject)\n    );\n  });\n};\n\nMasterpass.prototype._navigateFrameToLoadingPage = function (options) {\n  var self = this;\n\n  this._authInProgress = true;\n\n  return this._client\n    .request({\n      method: \"post\",\n      endpoint: \"masterpass/request_token\",\n      data: {\n        requestToken: {\n          originUrl: window.location.protocol + \"//\" + window.location.hostname,\n          subtotal: options.subtotal,\n          currencyCode: options.currencyCode,\n          callbackUrl: this._callbackUrl,\n        },\n      },\n    })\n    .then(function (response) {\n      var redirectUrl =\n        self._assetsUrl +\n        \"/html/masterpass-loading-frame\" +\n        (self._isDebug ? \"\" : \".min\") +\n        \".html?\";\n      var gatewayConfiguration =\n        self._client.getConfiguration().gatewayConfiguration;\n      var config = options.config || {};\n      var queryParams;\n\n      queryParams = {\n        environment: gatewayConfiguration.environment,\n        requestToken: response.requestToken,\n        callbackUrl: self._callbackUrl,\n        merchantCheckoutId: gatewayConfiguration.masterpass.merchantCheckoutId,\n        allowedCardTypes: gatewayConfiguration.masterpass.supportedNetworks,\n        version: constants.MASTERPASS_VERSION,\n      };\n\n      Object.keys(config).forEach(function (key) {\n        if (typeof config[key] !== \"function\") {\n          queryParams[key] = config[key];\n        }\n      });\n\n      redirectUrl += Object.keys(queryParams)\n        .map(function (key) {\n          return key + \"=\" + queryParams[key];\n        })\n        .join(\"&\");\n\n      self._frameService.redirect(redirectUrl);\n    })\n    .catch(function (err) {\n      var status = err.details && err.details.httpStatus;\n\n      self._closeWindow();\n\n      if (status === 422) {\n        return Promise.reject(\n          convertToBraintreeError(err, errors.MASTERPASS_INVALID_PAYMENT_OPTION)\n        );\n      }\n\n      return Promise.reject(\n        convertToBraintreeError(err, errors.MASTERPASS_FLOW_FAILED)\n      );\n    });\n};\n\nMasterpass.prototype._createFrameOpenHandler = function (resolve, reject) {\n  var self = this;\n\n  if (window.popupBridge) {\n    return function (popupBridgeErr, payload) {\n      self._authInProgress = false;\n\n      if (popupBridgeErr) {\n        analytics.sendEvent(\n          self._client,\n          \"masterpass.tokenization.closed-popupbridge.by-user\"\n        );\n        reject(\n          convertToBraintreeError(\n            popupBridgeErr,\n            errors.MASTERPASS_POPUP_CLOSED\n          )\n        );\n\n        return;\n      }\n      if (!payload.queryItems) {\n        analytics.sendEvent(\n          self._client,\n          \"masterpass.tokenization.failed-popupbridge\"\n        );\n        reject(new BraintreeError(errors.MASTERPASS_FLOW_FAILED));\n\n        return;\n      }\n\n      self._tokenizeMasterpass(payload.queryItems).then(resolve).catch(reject);\n    };\n  }\n\n  return function (frameServiceErr, payload) {\n    if (frameServiceErr) {\n      self._authInProgress = false;\n\n      if (frameServiceErr.code === \"FRAME_SERVICE_FRAME_CLOSED\") {\n        analytics.sendEvent(\n          self._client,\n          \"masterpass.tokenization.closed.by-user\"\n        );\n        reject(new BraintreeError(errors.MASTERPASS_POPUP_CLOSED));\n\n        return;\n      }\n\n      if (\n        frameServiceErr.code &&\n        frameServiceErr.code.indexOf(\"FRAME_SERVICE_FRAME_OPEN_FAILED\") > -1\n      ) {\n        analytics.sendEvent(\n          self._client,\n          \"masterpass.tokenization.failed.to-open\"\n        );\n        reject(\n          new BraintreeError({\n            code: errors.MASTERPASS_POPUP_OPEN_FAILED.code,\n            type: errors.MASTERPASS_POPUP_OPEN_FAILED.type,\n            message: errors.MASTERPASS_POPUP_OPEN_FAILED.message,\n            details: {\n              originalError: frameServiceErr,\n            },\n          })\n        );\n\n        return;\n      }\n\n      analytics.sendEvent(self._client, \"masterpass.tokenization.failed\");\n      self._closeWindow();\n      reject(\n        convertToBraintreeError(frameServiceErr, errors.MASTERPASS_FLOW_FAILED)\n      );\n\n      return;\n    }\n\n    self._tokenizeMasterpass(payload).then(resolve).catch(reject);\n  };\n};\n\nMasterpass.prototype._tokenizeMasterpass = function (payload) {\n  var self = this;\n\n  if (payload.mpstatus !== \"success\") {\n    analytics.sendEvent(self._client, \"masterpass.tokenization.closed.by-user\");\n    self._closeWindow();\n\n    return Promise.reject(new BraintreeError(errors.MASTERPASS_POPUP_CLOSED));\n  }\n\n  if (isMissingRequiredPayload(payload)) {\n    analytics.sendEvent(\n      self._client,\n      \"masterpass.tokenization.closed.missing-payload\"\n    );\n    self._closeWindow();\n\n    return Promise.reject(\n      new BraintreeError(errors.MASTERPASS_POPUP_MISSING_REQUIRED_PARAMETERS)\n    );\n  }\n\n  return self._client\n    .request({\n      endpoint: \"payment_methods/masterpass_cards\",\n      method: \"post\",\n      data: {\n        masterpassCard: {\n          checkoutResourceUrl: payload.checkout_resource_url,\n          requestToken: payload.oauth_token,\n          verifierToken: payload.oauth_verifier,\n        },\n      },\n    })\n    .then(function (response) {\n      self._closeWindow();\n      if (window.popupBridge) {\n        analytics.sendEvent(\n          self._client,\n          \"masterpass.tokenization.success-popupbridge\"\n        );\n      } else {\n        analytics.sendEvent(self._client, \"masterpass.tokenization.success\");\n      }\n\n      return response.masterpassCards[0];\n    })\n    .catch(function (tokenizeErr) {\n      self._closeWindow();\n      if (window.popupBridge) {\n        analytics.sendEvent(\n          self._client,\n          \"masterpass.tokenization.failed-popupbridge\"\n        );\n      } else {\n        analytics.sendEvent(self._client, \"masterpass.tokenization.failed\");\n      }\n\n      return Promise.reject(\n        convertToBraintreeError(\n          tokenizeErr,\n          errors.MASTERPASS_ACCOUNT_TOKENIZATION_FAILED\n        )\n      );\n    });\n};\n\nfunction isMissingRequiredPayload(payload) {\n  return [\n    payload.oauth_verifier,\n    payload.oauth_token,\n    payload.checkout_resource_url,\n  ].some(function (element) {\n    return element == null || element === \"null\";\n  });\n}\n\nMasterpass.prototype._closeWindow = function () {\n  this._authInProgress = false;\n  this._frameService.close();\n};\n\n/**\n * Cleanly tear down anything set up by {@link module:braintree-web/masterpass.create|create}.\n * @public\n * @param {callback} [callback] Called on completion. If no callback is provided, `teardown` returns a promise.\n * @example\n * masterpassInstance.teardown();\n * @example <caption>With callback</caption>\n * masterpassInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nMasterpass.prototype.teardown = function () {\n  var self = this;\n\n  return new Promise(function (resolve) {\n    self._frameService.teardown();\n\n    convertMethodsToError(self, methods(Masterpass.prototype));\n\n    analytics.sendEvent(self._client, \"masterpass.teardown-completed\");\n\n    resolve();\n  });\n};\n\nfunction hasMissingOption(options) {\n  var i, option;\n\n  for (i = 0; i < constants.REQUIRED_OPTIONS_FOR_TOKENIZE.length; i++) {\n    option = constants.REQUIRED_OPTIONS_FOR_TOKENIZE[i];\n\n    if (!options.hasOwnProperty(option)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nmodule.exports = wrapPromise.wrapPrototype(Masterpass);\n\n},{\"../../lib/analytics\":143,\"../../lib/braintree-error\":149,\"../../lib/constants\":150,\"../../lib/convert-methods-to-error\":151,\"../../lib/convert-to-braintree-error\":152,\"../../lib/frame-service/external\":164,\"../../lib/methods\":182,\"../shared/constants\":199,\"../shared/errors\":200,\"@braintree/wrap-promise\":43}],197:[function(_dereq_,module,exports){\n\"use strict\";\n/** @module braintree-web/masterpass\n * @description Processes Masterpass. *This component is currently in beta and is subject to change.*\n */\n\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar basicComponentVerification = _dereq_(\"../lib/basic-component-verification\");\nvar browserDetection = _dereq_(\"./shared/browser-detection\");\nvar Masterpass = _dereq_(\"./external/masterpass\");\nvar createDeferredClient = _dereq_(\"../lib/create-deferred-client\");\nvar createAssetsUrl = _dereq_(\"../lib/create-assets-url\");\nvar VERSION = \"3.145.0\";\nvar errors = _dereq_(\"./shared/errors\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {callback} [callback] The second argument, `data`, is the {@link Masterpass} instance. If no callback is passed in, the create function returns a promise that resolves the {@link Masterpass} instance.\n * @example\n * braintree.masterpass.create({\n *   client: clientInstance\n * }, function (createErr, masterpassInstance) {\n *   if (createErr) {\n *     if (createErr.code === 'MASTERPASS_BROWSER_NOT_SUPPORTED') {\n *       console.error('This browser is not supported.');\n *     } else {\n *       console.error('Error!', createErr);\n *     }\n *     return;\n *   }\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nfunction create(options) {\n  var name = \"Masterpass\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      if (!isSupported()) {\n        return Promise.reject(\n          new BraintreeError(errors.MASTERPASS_BROWSER_NOT_SUPPORTED)\n        );\n      }\n\n      return Promise.resolve();\n    })\n    .then(function () {\n      return createDeferredClient.create({\n        authorization: options.authorization,\n        client: options.client,\n        debug: options.debug,\n        assetsUrl: createAssetsUrl.create(options.authorization),\n        name: name,\n      });\n    })\n    .then(function (client) {\n      var masterpassInstance, configuration;\n\n      options.client = client;\n      configuration = options.client.getConfiguration().gatewayConfiguration;\n\n      if (!configuration.masterpass) {\n        return Promise.reject(\n          new BraintreeError(errors.MASTERPASS_NOT_ENABLED)\n        );\n      }\n\n      masterpassInstance = new Masterpass(options);\n\n      return masterpassInstance._initialize();\n    });\n}\n\n/**\n * @static\n * @function isSupported\n * @description Returns true if Masterpass supports this browser.\n * @example\n * if (braintree.masterpass.isSupported()) {\n *   // Add Masterpass button to the page\n * } else {\n *   // Hide Masterpass payment option\n * }\n * @returns {Boolean} Returns true if Masterpass supports this browser.\n */\nfunction isSupported() {\n  return Boolean(window.popupBridge || browserDetection.supportsPopups());\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  isSupported: isSupported,\n  /**\n   * @description The current version of the SDK, i.e. `{@pkg version}`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/basic-component-verification\":147,\"../lib/braintree-error\":149,\"../lib/create-assets-url\":153,\"../lib/create-deferred-client\":155,\"./external/masterpass\":196,\"./shared/browser-detection\":198,\"./shared/errors\":200,\"@braintree/wrap-promise\":43}],198:[function(_dereq_,module,exports){\n\"use strict\";\n\nmodule.exports = {\n  supportsPopups: _dereq_(\"@braintree/browser-detection/supports-popups\"),\n};\n\n},{\"@braintree/browser-detection/supports-popups\":32}],199:[function(_dereq_,module,exports){\n\"use strict\";\n\nmodule.exports = {\n  LANDING_FRAME_NAME: \"braintreemasterpasslanding\",\n  POPUP_WIDTH: 450,\n  POPUP_HEIGHT: 660,\n  MASTERPASS_VERSION: \"v6\",\n  REQUIRED_OPTIONS_FOR_TOKENIZE: [\"subtotal\", \"currencyCode\"],\n};\n\n},{}],200:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Masterpass - Creation Error Codes\n * @description Errors that occur when [creating the Masterpass component](./module-braintree-web_masterpass#.create).\n * @property {CUSTOMER} MASTERPASS_BROWSER_NOT_SUPPORTED Occurs when browser is not a supported browser for Masterpass.\n * @property {MERCHANT} MASTERPASS_NOT_ENABLED Occurs when Masterpass is not enabled in the Braintree control panel.\n */\n\n/**\n * @name BraintreeError.Masterpass - Tokenize Error Codes\n * @description Errors that occur when [tokenizing](./Masterpass.html#tokenize).\n * @property {MERCHANT} MASTERPASS_TOKENIZE_MISSING_REQUIRED_OPTION Occurs when tokenize is called without a required option.\n * @property {MERCHANT} MASTERPASS_TOKENIZATION_ALREADY_IN_PROGRESS Occurs if tokenization flow is initialized while another flow is already in progress.\n * @property {NETWORK} MASTERPASS_ACCOUNT_TOKENIZATION_FAILED Occurs when tokenization of Masterpass details fails.\n * @property {MERCHANT} MASTERPASS_POPUP_OPEN_FAILED Occurs when the popup fails to open.\n * @property {MERCHANT} MASTERPASS_POPUP_MISSING_REQUIRED_PARAMETERS Occurs when Masterpass is missing required parameters for tokenization.\n * @property {CUSTOMER} MASTERPASS_POPUP_CLOSED Occurs when the popup is closed by the customer.\n * @property {MERCHANT} MASTERPASS_INVALID_PAYMENT_OPTION Occurs when an invalid payment option is used to tokenize Masterpass.\n * @property {NETWORK} MASTERPASS_FLOW_FAILED Occurs when an error is returned from request to tokenize.\n */\n\nvar BraintreeError = _dereq_(\"../../lib/braintree-error\");\n\nmodule.exports = {\n  MASTERPASS_BROWSER_NOT_SUPPORTED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"MASTERPASS_BROWSER_NOT_SUPPORTED\",\n    message: \"Browser is not supported.\",\n  },\n  MASTERPASS_NOT_ENABLED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"MASTERPASS_NOT_ENABLED\",\n    message: \"Masterpass is not enabled for this merchant.\",\n  },\n  MASTERPASS_TOKENIZE_MISSING_REQUIRED_OPTION: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"MASTERPASS_TOKENIZE_MISSING_REQUIRED_OPTION\",\n    message: \"Missing required option for tokenize.\",\n  },\n  MASTERPASS_TOKENIZATION_ALREADY_IN_PROGRESS: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"MASTERPASS_TOKENIZATION_ALREADY_IN_PROGRESS\",\n    message: \"Masterpass tokenization is already in progress.\",\n  },\n  MASTERPASS_ACCOUNT_TOKENIZATION_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"MASTERPASS_ACCOUNT_TOKENIZATION_FAILED\",\n    message: \"Could not tokenize user's Masterpass account.\",\n  },\n  MASTERPASS_POPUP_OPEN_FAILED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"MASTERPASS_POPUP_OPEN_FAILED\",\n    message:\n      \"Masterpass popup failed to open. Make sure to tokenize in response to a user action, such as a click.\",\n  },\n  MASTERPASS_POPUP_MISSING_REQUIRED_PARAMETERS: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"MASTERPASS_POPUP_MISSING_REQUIRED_PARAMETERS\",\n    message:\n      \"Masterpass popup failed to return all required parameters needed to continue tokenization.\",\n  },\n  MASTERPASS_POPUP_CLOSED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"MASTERPASS_POPUP_CLOSED\",\n    message: \"Customer closed Masterpass popup before authorizing.\",\n  },\n  MASTERPASS_INVALID_PAYMENT_OPTION: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"MASTERPASS_INVALID_PAYMENT_OPTION\",\n    message: \"Masterpass payment options are invalid.\",\n  },\n  MASTERPASS_FLOW_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"MASTERPASS_FLOW_FAILED\",\n    message: \"Could not initialize Masterpass flow.\",\n  },\n};\n\n},{\"../../lib/braintree-error\":149}],201:[function(_dereq_,module,exports){\n\"use strict\";\n\nmodule.exports = {\n  CREATE_PAYMENT_READY_SESSION_QUERY:\n    \"mutation CreateCustomerSession($input: CreateCustomerSessionInput!) {\\n  createCustomerSession(input: $input) {\\n    sessionId\\n clientMutationId\\n }\\n}\",\n\n  /**\n   * @typedef PaymentReady~BUTTON_ORDER\n   * @property {string} FIRST \"first\"\n   * @property {string} SECOND \"second\"\n   * @property {string} THIRD \"third\"\n   * @property {string} FOURTH \"fourth\"\n   * @property {string} FIFTH \"fifth\"\n   * @property {string} SIXTH \"sixth\"\n   * @property {string} SEVENTH \"seventh\"\n   * @property {string} EIGHT \"eight\"\n   * @property {string} OTHER \"other\"\n   */\n  BUTTON_ORDER: {\n    FIRST: \"first\",\n    SECOND: \"second\",\n    THIRD: \"third\",\n    FOURTH: \"fourth\",\n    FIFTH: \"fifth\",\n    SIXTH: \"sixth\",\n    SEVENTH: \"seventh\",\n    EIGHT: \"eight\",\n    OTHER: \"other\",\n  },\n\n  /**\n   * @typedef PaymentReady~BUTTON_TYPE\n   * @property {string} PAYPAL \"paypal\"\n   * @property {string} VENMO \"venmo\"\n   * @property {string} OTHER \"other\"\n   */\n  BUTTON_TYPE: {\n    PAYPAL: \"paypal\",\n    VENMO: \"venmo\",\n    OTHER: \"other\",\n  },\n\n  EVENT_BUTTON_PRESENTED: \"payment-ready.button_presented\",\n  EVENT_BUTTON_SELECTED: \"payment-ready.button_selected\",\n\n  /**\n   * @typedef PaymentReady~EXPERIMENT_TYPE\n   * @property {string} CONTROL \"control\"\n   * @property {string} TEST \"test\"\n   */\n  EXPERIMENT_TYPE: {\n    CONTROL: \"control\",\n    TEST: \"test\",\n  },\n\n  /**\n   * @typedef PaymentReady~PAGE_TYPE\n   * @property {string} ABOUT \"about\"\n   * @property {string} CART \"cart\"\n   * @property {string} CHECKOUT \"checkout\"\n   * @property {string} HOMEPAGE \"homepage\"\n   * @property {string} MINICART \"minicart\"\n   * @property {string} ORDER_CONFIRMATION \"order_confirmation\"\n   * @property {string} ORDER_REVIEW \"order_review\"\n   * @property {string} PRODUCT_CATEGORY \"product_category\"\n   * @property {string} PRODUCT_DETAILS \"product_details\"\n   * @property {string} SEARCH \"search\"\n   * @property {string} OTHER \"other\"\n   */\n  PAGE_TYPE: {\n    HOMEPAGE: \"homepage\",\n    ABOUT: \"about\",\n    PRODUCT_CATEGORY: \"product_category\",\n    PRODUCT_DETAILS: \"product_details\",\n    SEARCH: \"search\",\n    CART: \"cart\",\n    CHECKOUT: \"checkout\",\n    ORDER_REVIEW: \"order_review\",\n    ORDER_CONFIRMATION: \"order_confirmation\",\n    MINICART: \"minicart\",\n    OTHER: \"other\",\n  },\n\n  UPDATE_PAYMENT_READY_SESSION_QUERY:\n    \"mutation UpdateCustomerSession($input: UpdateCustomerSessionInput!) {\\n  updateCustomerSession(input: $input) {\\n    sessionId\\n clientMutationId\\n }\\n}\",\n\n  GENERATE_CUSTOMER_RECOMMENDATIONS_QUERY:\n    \"mutation GenerateCustomerRecommendations($input: GenerateCustomerRecommendationsInput!) {\\n  generateCustomerRecommendations(input: $input) {\\n     clientMutationId\\n      sessionId\\n      paymentRecommendations {\\n        paymentOption\\n        recommendedPriority\\n      }\\n      isInPayPalNetwork\\n  }\\n}\",\n\n  REQUIRED_OPTIONS_CREATE_SESSION: [\"customer\"],\n  REQUIRED_OPTIONS_UPDATE_SESSION: [\"sessionId\", \"customer\"],\n  REQUIRED_OPTIONS_GET_RECOMMENDATIONS: [\"sessionId\"],\n};\n\n},{}],202:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\n\nmodule.exports = {\n  PAYMENT_READY_ERROR: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYMENT_READY_ERROR\",\n  },\n\n  PAYMENT_READY_MISSING_REQUIRED_OPTION: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYMENT_READY_MISSING_REQUIRED_OPTION\",\n    message: \"Missing required option for Payment Ready method.\",\n  },\n\n  PAYMENT_READY_CREATE_SESSION_ERROR: {\n    type: BraintreeError.types.NETWORK,\n    code: \"PAYMENT_READY_CREATE_SESSION_ERROR\",\n    message: \"Error creating customer session.\",\n  },\n\n  PAYMENT_READY_UPDATE_SESSION_ERROR: {\n    type: BraintreeError.types.NETWORK,\n    code: \"PAYMENT_READY_UPDATE_SESSION_ERROR\",\n    message: \"Error updating customer session.\",\n  },\n\n  PAYMENT_READY_NO_SESSION_ID: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYMENT_READY_NO_SESSION_ID\",\n    message: \"A session ID is required\",\n  },\n\n  PAYMENT_READY_GET_RECOMMENDATIONS_ERROR: {\n    type: BraintreeError.types.NETWORK,\n    code: \"PAYMENT_READY_GET_RECOMMENDATIONS_ERROR\",\n    message: \"Error getting customer recommendations\",\n  },\n};\n\n},{\"../lib/braintree-error\":149}],203:[function(_dereq_,module,exports){\n\"use strict\";\n/** @module braintree-web/payment-ready */\n\nvar analytics = _dereq_(\"../lib/analytics\");\nvar PaymentReady = _dereq_(\"./payment-ready\");\nvar createAssetsUrl = _dereq_(\"../lib/create-assets-url\");\nvar createDeferredClient = _dereq_(\"../lib/create-deferred-client\");\nvar basicComponentVerification = _dereq_(\"../lib/basic-component-verification\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar VERSION = \"3.145.0\";\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {boolean} [options.debug] A debug flag.\n * @param {string} [options.redirectUrl] When provided, triggers full page redirect flow instead of popup flow.\n * @param {callback} [callback] When provided, will be used instead of a promise. First argument is an error object, where the second is an instance of {@link PaymentReady|PaymentReady}.\n * @returns {Promise<PaymentReady>} Returns the PAYMENTREADY instance.\n * @example\n * braintree.paymentReady.create({\n *   client: clientInstance\n * }).then(function (paymentReadyInstance) {\n *   // paymentReadyInstance is ready to be used.\n * }).catch(function (createErr) {\n *   console.error('Error creating PAYMENTREADY instance', createErr);\n * });\n * @example <caption>Creating a PAYMENTREADY component</caption>\n * braintree.paymentReady.create({\n *   client: clientInstance,\n * }).then(function (paymentReadyInstance) {\n *   // paymentReadyInstance is ready to be used.\n * }).catch(function (createErr) {\n *   console.error('Error creating PAYMENT READY instance', createErr);\n * });\n */\n\nfunction create(options) {\n  var name = \"PAYMENT READY\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      return createDeferredClient.create({\n        authorization: options.authorization,\n        client: options.client,\n        debug: options.debug,\n        assetsUrl: createAssetsUrl.create(options.authorization),\n        name: name,\n      });\n    })\n    .then(function (client) {\n      options.client = client;\n\n      analytics.sendEvent(client, \"payment-ready.client.initialized\");\n\n      return new PaymentReady(options);\n    });\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `{@pkg version}`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/analytics\":143,\"../lib/basic-component-verification\":147,\"../lib/create-assets-url\":153,\"../lib/create-deferred-client\":155,\"./payment-ready\":204,\"@braintree/wrap-promise\":43}],204:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\n\nvar analytics = _dereq_(\"../lib/analytics\");\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar constants = _dereq_(\"./constants\");\nvar errors = _dereq_(\"./errors\");\nvar hasMissingOption = _dereq_(\"../lib/has-missing-option\");\n\n/**\n * @class\n * @param {object} options see {@link module:braintree-web/payment-ready.create|payment-ready.create}\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/payment-ready.create|braintree-web.payment-ready.create} instead.</strong>\n * @classdesc This class represents a Payment Ready component produced by {@link module:braintree-web/payment-ready.create|braintree-web.payment-ready.create}. Instances provide methods for Payment Ready methods.\n */\nfunction PaymentReady(options) {\n  this._instantiatedWithClient = Boolean(!options.useDeferredClient);\n  this._client = options.client;\n  this._createPromise = options.createPromise;\n}\n\n/**\n * Payment Ready Customer data object.\n * @typedef {object} PaymentReady~Customer\n * @property {string} [deviceFingerprintId] - Unique device identifier\n * @property {string} [hashedEmail] - This field must contain a Hex-encoded SHA-256 hashed value of the actual email.\n * The email address must be sanitized before hashing:\n *  * email address in lowercase\n *  * remove leading and trailing whitespace\n * @property {string} [hashedPhoneNumber] - This field must contain a Hex-encoded SHA-256 hashed value of the phone number; and the phone number must be in E.164 format.\n * * E.164 format example 1: '+12345551234' where country code is '1', area code is '234' and subscriber number is '555-1234'\n * * E.164 format example 2: '+6129876543X' where country code is '61', area code is '2' and subscriber number is '9876 543X'\n * @property {boolean} [paypalAppInstalled] - A flag indicating if customer device has paypal application installed.\n * @property {boolean} [venmoAppInstalled] - A flag indicating if customer device has venmo applicaition installed.\n * @property {string} [userAgent] - The user agent string of customer browser describing application, OS, vendor, and version of requesting user agent.\n */\n\n/**\n * Creates a customer session using the Payment Ready API.\n *\n * @public\n * @param {object} options - The options for creating a customer session.\n * @param {PaymentReady~Customer} options.customer - The customer data object. At minimum, this object should contain  either `hashedEmail` or `hashedPhoneNumber` field.\n * @param {string} [options.sessionId] - Optionally, specify a unique identifier for this customer session. It must be at least 36 characters, no more than 100 characters and match the following regex: `[A-Za-z0-9-_.]+`.\n * @returns {Promise<object>} A promise that resolves with the created customer session data.\n * @throws {BraintreeError} If the specified `sessionId` has previously been used or has an invalid format.\n * @example\n * paymentReadyInstance.createCustomerSession({\n *   customer: {\n *     ... // Customer data\n *   }\n * }).then(function (sessionData) {\n *   // Handle the session data\n *   console.log(sessionData.sessionId);\n * }).catch(function (err) {\n *   // Handle errors\n *   console.error(err);\n * });\n */\nPaymentReady.prototype.createCustomerSession = function (options) {\n  var self = this;\n\n  if (\n    !options ||\n    hasMissingOption(options, constants.REQUIRED_OPTIONS_CREATE_SESSION)\n  ) {\n    analytics.sendEvent(\n      self._client,\n      \"payment-ready.create-customer-session.missing-options\"\n    );\n\n    return Promise.reject(\n      new BraintreeError(errors.PAYMENT_READY_MISSING_REQUIRED_OPTION)\n    );\n  }\n\n  return self._client\n    .request({\n      api: \"graphQLApi\",\n      data: {\n        query: constants.CREATE_PAYMENT_READY_SESSION_QUERY,\n        variables: {\n          input: {\n            sessionId: options.sessionId,\n            customer: options.customer,\n          },\n        },\n      },\n    })\n    .then(function (response) {\n      analytics.sendEvent(\n        self._client,\n        \"payment-ready.create-customer-session.succeeded\"\n      );\n\n      return response.data.createCustomerSession;\n    })\n    .catch(function (err) {\n      analytics.sendEvent(\n        self._client,\n        \"payment-ready.create-customer-session.failed\"\n      );\n\n      return Promise.reject(\n        new BraintreeError({\n          type: err.type || errors.PAYMENT_READY_CREATE_SESSION_ERROR.type,\n          code: err.code || errors.PAYMENT_READY_CREATE_SESSION_ERROR.code,\n          message:\n            err.message || errors.PAYMENT_READY_CREATE_SESSION_ERROR.message,\n          details: { originalError: err },\n        })\n      );\n    });\n};\n\n/**\n * Updates an existing customer session using the Payment Ready API.\n *\n * @public\n * @param {object} options - The options for updating a customer session.\n * @param {string} options.sessionId - The ID of the session to update.\n * @param {PaymentReady~Customer} options.customer - The updated customer data object.\n * @returns {Promise<object>} A promise that resolves with the updated customer session data.\n * @example\n * paymentReadyInstance.updateCustomerSession({\n *   sessionId: \"session-abc-123\",\n *   customer: {\n *     ... // Updated customer data\n *   }\n * }).then(function (sessionData) {\n *   // Handle the updated session data\n *   console.log(sessionData.sessionId);\n * }).catch(function (err) {\n *   // Handle errors\n *   console.error(err);\n * });\n */\nPaymentReady.prototype.updateCustomerSession = function (options) {\n  var self = this;\n\n  if (\n    !options ||\n    hasMissingOption(options, constants.REQUIRED_OPTIONS_UPDATE_SESSION)\n  ) {\n    analytics.sendEvent(\n      self._client,\n      \"payment-ready.update-customer-session.missing-options\"\n    );\n\n    return Promise.reject(\n      new BraintreeError(errors.PAYMENT_READY_MISSING_REQUIRED_OPTION)\n    );\n  }\n\n  return self._client\n    .request({\n      api: \"graphQLApi\",\n      data: {\n        query: constants.UPDATE_PAYMENT_READY_SESSION_QUERY,\n        variables: {\n          input: {\n            sessionId: options.sessionId,\n            customer: options.customer,\n          },\n        },\n      },\n    })\n    .then(function (response) {\n      analytics.sendEvent(\n        self._client,\n        \"payment-ready.update-customer-session.succeeded\"\n      );\n\n      return response.data.updateCustomerSession;\n    })\n    .catch(function (err) {\n      analytics.sendEvent(\n        self._client,\n        \"payment-ready.update-customer-session.failed\"\n      );\n\n      return Promise.reject(\n        new BraintreeError({\n          type: err.type || errors.PAYMENT_READY_UPDATE_SESSION_ERROR.type,\n          code: err.code || errors.PAYMENT_READY_UPDATE_SESSION_ERROR.code,\n          message:\n            err.message || errors.PAYMENT_READY_UPDATE_SESSION_ERROR.message,\n          details: { originalError: err },\n        })\n      );\n    });\n};\n\n/**\n * Generates customer payment recommendations using the Payment Ready API.\n *\n * @public\n * @param {object} options - The options for generating customer recommendations.\n * @param {string} options.sessionId - The ID of the session to get recommendations for.\n * @param {PaymentReady~Customer} [options.customer] - Optional customer data object.\n * @param {string} [options.domain] - Optional domain parameter.\n * @param {Array} [options.purchaseUnits] - Optional purchase units array.\n * @returns {Promise<object>} A promise that resolves with the customer recommendations data.\n * @example\n * paymentReadyInstance.getCustomerRecommendations({\n *   sessionId: \"session-abc-123\",\n *   customer: {\n *     // Optional customer data\n *   },\n *   domain: \"example.com\",\n *   purchaseUnits: [\n *     // Purchase unit data\n *   ]\n * }).then(function (recommendations) {\n *   // Handle the recommendations data\n *   console.log(recommendations.paymentRecommendations);\n * }).catch(function (err) {\n *   // Handle errors\n *   console.error(err);\n * });\n */\nPaymentReady.prototype.getCustomerRecommendations = function (options) {\n  var self = this;\n\n  if (\n    !options ||\n    hasMissingOption(options, constants.REQUIRED_OPTIONS_GET_RECOMMENDATIONS)\n  ) {\n    analytics.sendEvent(\n      self._client,\n      \"payment-ready.get-customer-recommendations.missing-options\"\n    );\n\n    return Promise.reject(\n      new BraintreeError(errors.PAYMENT_READY_NO_SESSION_ID)\n    );\n  }\n\n  return self._client\n    .request({\n      api: \"graphQLApi\",\n      data: {\n        query: constants.GENERATE_CUSTOMER_RECOMMENDATIONS_QUERY,\n        variables: {\n          input: {\n            sessionId: options.sessionId,\n            customer: options.customer,\n            domain: options.domain,\n            purchaseUnits: options.purchaseUnits,\n          },\n        },\n      },\n    })\n    .then(function (response) {\n      analytics.sendEvent(\n        self._client,\n        \"payment-ready.get-customer-recommendations.succeeded\"\n      );\n\n      return response.data.generateCustomerRecommendations;\n    })\n    .catch(function (err) {\n      analytics.sendEvent(\n        self._client,\n        \"payment-ready.get-customer-recommendations.failed\"\n      );\n\n      return Promise.reject(\n        new BraintreeError({\n          type: err.type || errors.PAYMENT_READY_GET_RECOMMENDATIONS_ERROR.type,\n          code: err.code || errors.PAYMENT_READY_GET_RECOMMENDATIONS_ERROR.code,\n          message:\n            err.message ||\n            errors.PAYMENT_READY_GET_RECOMMENDATIONS_ERROR.message,\n          details: { originalError: err },\n        })\n      );\n    });\n};\n\n/**\n * Call this method when a payment button has been successfully displayed to the buyer.\n * This method sends analytics to help improve the Shopper Insights feature experience.\n *\n * @public\n * @param {object} options - The options for the event.\n * @param {string} options.buttonType Type of button presented to the user.\n * @param {string} options.paymentReadySessionId - The id of paymentReady session created with createCustomerSession method.\n * @param {object} [options.presentmentDetails] Details of presentment. Includes experimentType, pageType, and buttonOrder.\n * @param {PaymentReady~EXPERIMENT_TYPE} [options.presentmentDetails.experimentType] Experiment type being used.\n * @param {PaymentReady~PAGE_TYPE} [options.presentmentDetails.pageType] Page type where the SDK is being used.\n * @param {PaymentReady~BUTTON_ORDER} [options.presentmentDetails.buttonOrder] Where in the list of buttons this button was presented.\n *\n * @example\n * paymentReadyInstance.sendPresentedEvent({\n *   buttonType: \"paypal\",\n *   paymentReadySessionId: \"SESSION_ID_123\",\n *   presentmentDetails: {\n *     experimentType: \"control\",\n *     pageType: \"checkout\",\n *     buttonOrder: \"second\"\n * });\n * @returns {void} This method does not return any value.\n */\nPaymentReady.prototype.sendPresentedEvent = function (options) {\n  var experimentType = options.presentmentDetails\n    ? options.presentmentDetails.experimentType\n    : null;\n  var pageType = options.presentmentDetails\n    ? options.presentmentDetails.pageType\n    : null;\n  var buttonOrder = options.presentmentDetails\n    ? options.presentmentDetails.buttonOrder\n    : null;\n\n  if (\n    !options.paymentReadySessionId ||\n    typeof options.paymentReadySessionId !== \"string\"\n  ) {\n    // eslint-disable-next-line no-console\n    console.warn(\n      \"sendPresentedEvent: paymentReadySessionId is missing or invalid\"\n    );\n\n    return;\n  }\n\n  if (!options.buttonType || typeof options.buttonType !== \"string\") {\n    // eslint-disable-next-line no-console\n    console.warn(\"sendPresentedEvent: buttonType is missing\");\n\n    return;\n  }\n\n  var buttonSelected = options.buttonType;\n  var presentAnalyticFields;\n\n  if (!Object.values(constants.BUTTON_TYPE).includes(buttonSelected)) {\n    buttonSelected = constants.BUTTON_TYPE.OTHER;\n  }\n\n  if (\n    buttonOrder &&\n    !Object.values(constants.BUTTON_ORDER).includes(buttonOrder)\n  ) {\n    buttonOrder = constants.BUTTON_ORDER.OTHER;\n  }\n\n  if (\n    experimentType &&\n    !Object.values(constants.EXPERIMENT_TYPE).includes(experimentType)\n  ) {\n    experimentType = constants.EXPERIMENT_TYPE.TEST;\n  }\n\n  if (pageType && !Object.values(constants.PAGE_TYPE).includes(pageType)) {\n    pageType = constants.PAGE_TYPE.OTHER;\n  }\n\n  presentAnalyticFields = buildPresentmentAnalyticFields({\n    buttonOrder: buttonOrder,\n    buttonType: buttonSelected,\n    experimentType: experimentType,\n    pageType: pageType,\n    sessionId: options.paymentReadySessionId,\n  });\n\n  analytics.sendEventPlus(\n    this._client,\n    constants.EVENT_BUTTON_PRESENTED,\n    presentAnalyticFields\n  );\n};\n\nfunction buildPresentmentAnalyticFields(options) {\n  var pkg = {\n    // eslint-disable-next-line camelcase\n    button_type: options.buttonType,\n    // eslint-disable-next-line camelcase\n    payment_ready_session_id: options.sessionId,\n  };\n  if (options.buttonOrder) {\n    pkg[\"payment_ready_button_order\"] = options.buttonOrder;\n  }\n  if (options.experimentType) {\n    pkg[\"payment_ready_experiment_type\"] = options.experimentType;\n  }\n  if (options.pageType) {\n    pkg[\"payment_ready_page_type\"] = options.pageType;\n  }\n\n  return pkg;\n}\n/**\n * Use PayPal Payment Ready to optimize your checkout experience by sending analytics events.\n *\n * @public\n * @param {object} options - The options for the event\n * @param {string} options.paymentReadySessionId - The ID of the session to update.\n * @param {PaymentReady~BUTTON_TYPE} options.buttonType Type of button presented to the user.\n * @returns {void}\n * @example\n * <caption>Sending analytics event</caption>\n * paymentReadyInstance.sendSelectedEvent({\n *   paymentReadySessionId: \"session-abc-123\",\n *   buttonType: \"paypal\"\n * });\n */\nPaymentReady.prototype.sendSelectedEvent = function (options) {\n  if (\n    !options.paymentReadySessionId ||\n    typeof options.paymentReadySessionId !== \"string\"\n  ) {\n    // eslint-disable-next-line no-console\n    console.warn(\n      \"sendSelectedEvent: paymentReadySessionId is missing or invalid\"\n    );\n\n    return;\n  }\n  if (!options.buttonType || typeof options.buttonType !== \"string\") {\n    // eslint-disable-next-line no-console\n    console.warn(\"sendSelectedEvent: buttonType is missing\");\n\n    return;\n  }\n\n  var buttonSelected = options.buttonType;\n\n  if (!Object.values(constants.BUTTON_TYPE).includes(buttonSelected)) {\n    buttonSelected = constants.BUTTON_TYPE.OTHER;\n  }\n\n  analytics.sendEventPlus(this._client, constants.EVENT_BUTTON_SELECTED, {\n    // eslint-disable-next-line camelcase\n    payment_ready_session_id: options.paymentReadySessionId,\n    // eslint-disable-next-line camelcase\n    button_type: buttonSelected,\n  });\n};\n\nmodule.exports = wrapPromise.wrapPrototype(PaymentReady);\n\n},{\"../lib/analytics\":143,\"../lib/braintree-error\":149,\"../lib/has-missing-option\":175,\"./constants\":201,\"./errors\":202,\"@braintree/wrap-promise\":43}],205:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar analytics = _dereq_(\"../../lib/analytics\");\nvar assign = _dereq_(\"../../lib/assign\").assign;\nvar Bus = _dereq_(\"framebus\");\nvar convertMethodsToError = _dereq_(\"../../lib/convert-methods-to-error\");\nvar generateGooglePayConfiguration = _dereq_(\"../../lib/generate-google-pay-configuration\");\nvar iFramer = _dereq_(\"@braintree/iframer\");\nvar uuid = _dereq_(\"@braintree/uuid\");\nvar useMin = _dereq_(\"../../lib/use-min\");\nvar methods = _dereq_(\"../../lib/methods\");\nvar EventEmitter = _dereq_(\"@braintree/event-emitter\");\nvar BraintreeError = _dereq_(\"../../lib/braintree-error\");\nvar VERSION = \"3.145.0\";\nvar constants = _dereq_(\"../shared/constants\");\nvar events = constants.events;\nvar errors = constants.errors;\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\n\n/**\n * @typedef {object} PaymentRequestComponent~tokenizePayload\n * @property {string} nonce The payment method nonce.\n * @property {object} details Additional account details.\n * @property {string} details.bin The BIN number of the card..\n * @property {string} details.cardType Type of card, ex: Visa, MasterCard.\n * @property {string} details.lastFour Last four digits of card number.\n * @property {string} details.lastTwo Last two digits of card number.\n * @property {object} details.rawPaymentResponse The raw payment response from the payment request, with sensitive card details removed.\n * @property {string} description A human-readable description.\n * @property {string} type The payment method type, `CreditCard` or `AndroidPayCard`.\n * @property {object} binData Information about the card based on the bin.\n * @property {string} binData.commercial Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.countryOfIssuance The country of issuance.\n * @property {string} binData.debit Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.durbinRegulated Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.healthcare Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.issuingBank The issuing bank.\n * @property {string} binData.payroll Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.prepaid Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.productId The product id.\n * @property {string} binData.business Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.consumer Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.purchase Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.corporate Possible values: 'Yes', 'No', 'Unknown'.\n */\n\n/**\n * @typedef {object} PaymentRequestComponent~paymentRequestConfiguration\n * @property {object} configuration.details The payment details. For details on this object, see [Google's PaymentRequest API documentation](https://developers.google.com/web/fundamentals/discovery-and-monetization/payment-request/deep-dive-into-payment-request#defining_payment_details).\n * @property {array} [configuration.supportedPaymentMethods] The supported payment methods. If not passed in, the supported payment methods from the merchant account that generated the authorization for the client will be used. For details on this array, see [Google's PaymentRequest API documentation](https://developers.google.com/web/fundamentals/discovery-and-monetization/payment-request/deep-dive-into-payment-request#defining_supported_payment_methods).\n * @property {object} [configuration.options] Additional payment request options. For details on this object, see [Google's PaymentRequest API documentation](https://developers.google.com/web/fundamentals/discovery-and-monetization/payment-request/deep-dive-into-payment-request#defining_options_optional).\n */\n\n/**\n * @typedef {object} PaymentRequestComponent~shippingEventObject\n * @description The event payload sent from {@link PaymentRequestComponent#on|on}.\n * @property {object} target An object which contains data about the event.\n * @property {function} updateWith A method to call with the updated Payment Request details.\n */\n\n/**\n * @name PaymentRequestComponent#on\n * @function\n * @param {string} event The name of the event to which you are subscribing.\n * @param {function} handler A callback to handle the event.\n * @description Subscribes a handler function to a named event. `event` should be {@link PaymentRequestComponent#event:shippingAddressChange|shippingAddressChange} or {@link PaymentRequestComponent#event:shippingOptionChange|shippingOptionChange}. For convenience, you can also listen on `shippingaddresschange` or `shippingoptionchange` to match the event listeners in the [Payment Request API documentation](https://developers.google.com/web/fundamentals/payments/deep-dive-into-payment-request#shipping_in_payment_request_api). Events will emit a {@link PaymentRequestComponent~shippingEventObject|shippingEventObject}.\n * @example\n * <caption>Listening to a Payment Request event, in this case 'shippingAddressChange'</caption>\n * braintree.paymentRequest.create({ ... }, function (createErr, paymentRequestInstance) {\n *   paymentRequestInstance.on('shippingAddressChange', function (event) {\n *     console.log(event.target.shippingAddress);\n *   });\n * });\n * @returns {void}\n */\n\n/**\n * @name PaymentRequestComponent#off\n * @function\n * @param {string} event The name of the event to which you are unsubscribing.\n * @param {function} handler The callback for the event you are unsubscribing from.\n * @description Unsubscribes the handler function to a named event.\n * @example\n * <caption>Subscribing and then unsubscribing from a Payment Request event, in this case 'shippingAddressChange'</caption>\n * braintree.paymentRequest.create({ ... }, function (createErr, paymentRequestInstance) {\n *   var callback = function (event) {\n *     console.log(event.target.shippingAddress);\n *   };\n *   paymentRequestInstance.on('shippingAddressChange', callback);\n *\n *   // later on\n *   paymentRequestInstance.off('shippingAddressChange', callback);\n * });\n * @returns {void}\n */\n\n/**\n * This event is emitted when the customer selects a shipping address.\n * @event PaymentRequestComponent#shippingAddressChange\n * @type {PaymentRequestComponent~shippingEventObject}\n * @example\n * <caption>Listening to a shipping address change event</caption>\n * braintree.paymentRequest.create({ ... }, function (createErr, paymentRequestInstance) {\n *   paymentRequestInstance.on('shippingAddressChange', function (event) {\n *     // validate event.target.shippingAddress if needed\n *\n *     event.updateWith(paymentRequestDetails);\n *   });\n * });\n */\n\n/**\n * This event is emitted when the customer selects a shipping option.\n * @event PaymentRequestComponent#shippingOptionChange\n * @type {PaymentRequestComponent~shippingEventObject}\n * @example\n * <caption>Listening to a shipping option change event</caption>\n * braintree.paymentRequest.create({ ... }, function (createErr, paymentRequestInstance) {\n *   paymentRequestInstance.on('shippingOptionChange', function (event) {\n *     // validate event.target.shippingOption if needed\n *\n *     paymentRequestDetails.shippingOptions.forEach(function (option) {\n *       option.selected = option.id === event.target.shippingOption;\n *     });\n *\n *     event.updateWith(paymentRequestDetails);\n *   });\n * });\n */\n\nvar CARD_TYPE_MAPPINGS = {\n  Visa: \"visa\",\n  MasterCard: \"mastercard\",\n  \"American Express\": \"amex\",\n  \"Diners Club\": \"diners\",\n  Discover: \"discover\",\n  JCB: \"jcb\",\n  UnionPay: \"unionpay\",\n  Maestro: \"maestro\",\n};\n\nvar BRAINTREE_GOOGLE_PAY_MERCHANT_ID = \"18278000977346790994\";\n\nfunction composeUrl(assetsUrl, componentId, isDebug) {\n  var baseUrl = assetsUrl;\n\n  // endRemoveIf(production)\n\n  return (\n    baseUrl +\n    \"/web/\" +\n    VERSION +\n    \"/html/payment-request-frame\" +\n    useMin(isDebug) +\n    \".html#\" +\n    componentId\n  );\n}\n\n/**\n * @class PaymentRequestComponent\n * @param {object} options The Payment Request Component {@link module:braintree-web/payment-request.create create} options.\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/payment-request.create|braintree-web.payment-request.create} instead.</strong>\n *\n * @classdesc This class represents a Payment Request component produced by {@link module:braintree-web/payment-request.create|braintree-web/payment-request.create}. Instances of this class have methods for initializing a Payment Request.\n *\n * **Note:** This component is currently in beta and the API may include breaking changes when upgrading. Please review the [Changelog](https://github.com/braintree/braintree-web/blob/main/CHANGELOG.md) for upgrade steps whenever you upgrade the version of braintree-web.\n */\nfunction PaymentRequestComponent(options) {\n  var enabledPaymentMethods = options.enabledPaymentMethods || {};\n\n  EventEmitter.call(this);\n\n  this._componentId = uuid();\n  this._client = options.client;\n  this._enabledPaymentMethods = {\n    basicCard: enabledPaymentMethods.basicCard !== false,\n    googlePay: enabledPaymentMethods.googlePay !== false,\n  };\n  this._googlePayVersion = options.googlePayVersion === 2 ? 2 : 1;\n  this._googleMerchantId = BRAINTREE_GOOGLE_PAY_MERCHANT_ID;\n  this._supportedPaymentMethods =\n    this._constructDefaultSupportedPaymentMethods();\n  this._defaultSupportedPaymentMethods = Object.keys(\n    this._supportedPaymentMethods\n  ).map(\n    function (key) {\n      return this._supportedPaymentMethods[key];\n    }.bind(this)\n  );\n  this._bus = new Bus({ channel: this._componentId });\n}\n\nEventEmitter.createChild(PaymentRequestComponent);\n\nPaymentRequestComponent.prototype._constructDefaultSupportedPaymentMethods =\n  function () {\n    var configuration = this._client.getConfiguration();\n    var androidPayConfiguration = configuration.gatewayConfiguration.androidPay;\n    var cardConfiguration = configuration.gatewayConfiguration.creditCards;\n    var supportedPaymentMethods = {};\n\n    if (\n      this._enabledPaymentMethods.basicCard &&\n      cardConfiguration &&\n      cardConfiguration.supportedCardTypes.length > 0\n    ) {\n      supportedPaymentMethods.basicCard = {\n        supportedMethods: \"basic-card\",\n        data: {\n          supportedNetworks: cardConfiguration.supportedCardTypes.reduce(\n            function (types, cardType) {\n              if (cardType in CARD_TYPE_MAPPINGS) {\n                types.push(CARD_TYPE_MAPPINGS[cardType]);\n              }\n\n              return types;\n            },\n            []\n          ),\n        },\n      };\n    }\n\n    if (\n      this._enabledPaymentMethods.googlePay &&\n      androidPayConfiguration &&\n      androidPayConfiguration.enabled\n    ) {\n      supportedPaymentMethods.googlePay = {\n        supportedMethods: \"https://google.com/pay\",\n        data: generateGooglePayConfiguration(\n          configuration,\n          this._googlePayVersion,\n          this._googleMerchantId\n        ),\n      };\n    }\n\n    return supportedPaymentMethods;\n  };\n\nPaymentRequestComponent.prototype.initialize = function () {\n  var clientConfiguration = this._client.getConfiguration();\n  var self = this;\n\n  this._frame = iFramer({\n    allowPaymentRequest: true,\n    name: \"braintree-payment-request-frame\",\n    class: \"braintree-payment-request-frame\",\n    height: 0,\n    width: 0,\n    style: {\n      position: \"absolute\",\n      left: \"-9999px\",\n    },\n    title: \"Secure Payment Frame\",\n  });\n\n  if (this._defaultSupportedPaymentMethods.length === 0) {\n    return Promise.reject(\n      new BraintreeError(\n        errors.PAYMENT_REQUEST_NO_VALID_SUPPORTED_PAYMENT_METHODS\n      )\n    );\n  }\n\n  return new Promise(function (resolve) {\n    self._bus.on(events.FRAME_READY, function (reply) {\n      reply(self._client);\n    });\n    self._bus.on(events.FRAME_CAN_MAKE_REQUESTS, function () {\n      analytics.sendEvent(self._client, \"payment-request.initialized\");\n      self._bus.on(events.SHIPPING_ADDRESS_CHANGE, function (shippingAddress) {\n        var shippingAddressChangeEvent = {\n          target: {\n            shippingAddress: shippingAddress,\n          },\n          updateWith: function (paymentDetails) {\n            self._bus.emit(events.UPDATE_SHIPPING_ADDRESS, paymentDetails);\n          },\n        };\n\n        self._emit(\"shippingAddressChange\", shippingAddressChangeEvent);\n        self._emit(\"shippingaddresschange\", shippingAddressChangeEvent);\n      });\n      self._bus.on(events.SHIPPING_OPTION_CHANGE, function (shippingOption) {\n        var shippingOptionChangeEvent = {\n          target: {\n            shippingOption: shippingOption,\n          },\n          updateWith: function (paymentDetails) {\n            self._bus.emit(events.UPDATE_SHIPPING_OPTION, paymentDetails);\n          },\n        };\n\n        self._emit(\"shippingOptionChange\", shippingOptionChangeEvent);\n        self._emit(\"shippingoptionchange\", shippingOptionChangeEvent);\n      });\n      resolve(self);\n    });\n\n    // eslint-disable-next-line no-warning-comments\n    // TODO - We may need to apply the same setTimeout hack that Hosted Fields\n    // uses for iframes to load correctly in Edge. See:\n    // https://github.com/braintree/braintree-web/blob/0c951e5f9859c606652485de14188b6bd6656677/src/hosted-fields/external/hosted-fields.js#L449-L469\n    self._frame.src = composeUrl(\n      clientConfiguration.gatewayConfiguration.assetsUrl,\n      self._componentId,\n      clientConfiguration.isDebug\n    );\n    document.body.appendChild(self._frame);\n  });\n};\n\n/**\n * Create an object to pass into tokenize to specify a custom configuration. If no overrides are provided, the default configuration will be provided.\n * @public\n * @param {string} type The supported payment method type. Possible values are `basicCard` and `googlePay`.\n * If no type is provided, the function will throw an error. If the type provided is not an enabled payment method for the merchant account , the function will throw an error.\n * @param {object} [overrides] The configuration overrides for the [data property on the supported payment methods objects](https://developers.google.com/web/fundamentals/payments/deep-dive-into-payment-request). If not passed in, the default configuration for the specified type will be provided. If a property is not provided, the value from the default configuration will be used.\n * @example <caption>Getting the default configuration for a specified type</caption>\n * var configuration = paymentRequestInstance.createSupportedPaymentMethodsConfiguration('basicCard');\n *\n * configuration.supportedMethods; // 'basic-card'\n * configuration.data.supportedNetworks; // ['visa', 'mastercard', 'amex'] <- whatever the supported card networks for the merchant account are\n * @example <caption>Specifying overrides</caption>\n * var configuration = paymentRequestInstance.createSupportedPaymentMethodsConfiguration('basicCard', {\n *   supportedNetworks: ['visa'],\n *   supportedTypes: ['credit', 'debit']\n * });\n *\n * configuration.supportedMethods; // 'basic-card'\n * configuration.data.supportedNetworks; // ['visa']\n * configuration.data.supportedTypes; // ['credit', 'debit']\n * @returns {object} Returns a configuration object for use in the tokenize function.\n */\nPaymentRequestComponent.prototype.createSupportedPaymentMethodsConfiguration =\n  function (type, overrides) {\n    var configuration;\n\n    if (!type) {\n      throw new BraintreeError(\n        errors.PAYMENT_REQUEST_CREATE_SUPPORTED_PAYMENT_METHODS_CONFIGURATION_MUST_INCLUDE_TYPE\n      );\n    }\n\n    if (!this._enabledPaymentMethods[type]) {\n      throw new BraintreeError(\n        errors.PAYMENT_REQUEST_CREATE_SUPPORTED_PAYMENT_METHODS_CONFIGURATION_TYPE_NOT_ENABLED\n      );\n    }\n\n    configuration = assign({}, this._supportedPaymentMethods[type]);\n    configuration.data = assign({}, configuration.data, overrides);\n\n    return configuration;\n  };\n\n/**\n * Tokenizes a Payment Request\n * @public\n * @param {object} configuration A {@link PaymentRequestComponent~paymentRequestConfiguration|paymentRequestConfiguration}.\n * @param {callback} [callback] The second argument, <code>data</code>, is a {@link PaymentRequest~paymentPayload|paymentPayload}. If no callback is provided, `tokenize` returns a function that resolves with a {@link PaymentRequestComponent~tokenizePayload|tokenizePayload}.\n * @example\n * paymentRequestInstance.tokenize({\n *   details: {\n *     total: {\n *       label: 'Price',\n *       amount: {\n *         currency: 'USD',\n *         value: '100.00'\n *       }\n *     }\n *   }\n * }).then(function (payload) {\n *   // send payload.nonce to server\n *\n *   // examine the raw response (with card details removed for security) from the payment request\n *   console.log(payload.details.rawPaymentResponse);\n * }).catch(function (err) {\n *   if (err.code === 'PAYMENT_REQUEST_CANCELED') {\n *     // payment request was canceled by user\n *   } else {\n *     // an error occurred while processing\n *   }\n * });\n * @example <caption>Tokenize only Visa cards</caption>\n * var basicCardConfiguration = paymentRequestInstance.createSupportedPaymentMethodsConfiguration('basicCard', {\n *   supportedNetworks: ['visa']\n * };\n *\n * paymentRequestInstance.tokenize({\n *   supportedPaymentMethods: [basicCardConfiguration],\n *   details: {\n *     total: {\n *       label: 'Price',\n *       amount: {\n *         currency: 'USD',\n *         value: '100.00'\n *       }\n *     }\n *   }\n * }).then(function (payload) {\n *   // send payload.nonce to your server\n * });\n * @example <caption>Include payment request options</caption>\n * paymentRequestInstance.tokenize({\n *   details: {\n *     total: {\n *       label: 'Price',\n *       amount: {\n *         currency: 'USD',\n *         value: '100.00'\n *       }\n *     }\n *   },\n *   options: {\n *     requestPayerName: true,\n *     requestPayerPhone: true,\n *     requestPayerEmail: true\n *   }\n * }).then(function (payload) {\n *   // send payload.nonce to your server\n *   // collect additional info from the raw response\n *   console.log(payload.details.rawPaymentResponse);\n * });\n * @example <caption>Request Shipping Information</caption>\n * var shippingOptions = [\n *   {\n *     id: 'economy',\n *     label: 'Economy Shipping (5-7 Days)',\n *     amount: {\n *       currency: 'USD',\n *       value: '0',\n *     },\n *   }, {\n *     id: 'express',\n *     label: 'Express Shipping (2-3 Days)',\n *     amount: {\n *       currency: 'USD',\n *       value: '5',\n *     },\n *   }, {\n *     id: 'next-day',\n *     label: 'Next Day Delivery',\n *     amount: {\n *       currency: 'USD',\n *       value: '12',\n *     },\n *   },\n * ];\n * var paymentDetails = {\n * \t total: {\n *     label: 'Total',\n *     amount: {\n *       currency: 'USD',\n *       value: '10.00',\n *     }\n *   },\n *   shippingOptions: shippingOptions\n * };\n *\n * paymentRequestInstance.on('shippingAddressChange', function (event) {\n *   // validate shipping address on event.target.shippingAddress\n *   // make changes to the paymentDetails or shippingOptions if necessary\n *\n *   event.updateWith(paymentDetails)\n * });\n *\n * paymentRequestInstance.on('shippingOptionChange', function (event) {\n *   shippingOptions.forEach(function (option) {\n *     option.selected = option.id === event.target.shippingOption;\n *   });\n *\n *   event.updateWith(paymentDetails)\n * });\n *\n * paymentRequestInstance.tokenize({\n *   details: paymentDetails,\n *   options: {\n *     requestShipping: true\n *   }\n * }).then(function (payload) {\n *   // send payload.nonce to your server\n *   // collect shipping information from payload\n *   console.log(payload.details.rawPaymentResponse.shippingAddress);\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nPaymentRequestComponent.prototype.tokenize = function (configuration) {\n  var self = this;\n\n  // NEXT_MAJOR_VERSION fail early if a payment method is passed in\n  // that the component does not support\n  return new Promise(function (resolve, reject) {\n    self._bus.emit(\n      events.PAYMENT_REQUEST_INITIALIZED,\n      {\n        supportedPaymentMethods:\n          configuration.supportedPaymentMethods ||\n          self._defaultSupportedPaymentMethods,\n        details: configuration.details,\n        options: configuration.options,\n      },\n      function (response) {\n        var rawError = response[0];\n        var payload = response[1];\n\n        if (rawError) {\n          reject(self._formatTokenizationError(rawError));\n\n          return;\n        }\n\n        analytics.sendEvent(self._client, \"payment-request.tokenize.succeeded\");\n        resolve({\n          nonce: payload.nonce,\n          type: payload.type,\n          description: payload.description,\n          details: {\n            rawPaymentResponse: payload.details.rawPaymentResponse,\n            cardType: payload.details.cardType,\n            lastFour: payload.details.lastFour,\n            lastTwo: payload.details.lastTwo,\n          },\n          binData: payload.binData,\n        });\n      }\n    );\n  });\n};\n\n/**\n * Check if the customer can make payments.\n * @public\n * @param {object} configuration A {@link PaymentRequestComponent~paymentRequestConfiguration|paymentRequestConfiguration}.\n * @param {callback} [callback] Called on completion.\n * @example\n * var paymentDetails = {\n * \t total: {\n *     label: 'Total',\n *     amount: {\n *       currency: 'USD',\n *       value: '10.00',\n *     }\n *   }\n * };\n *\n * paymentRequestInstance.canMakePayment({\n *   details: paymentDetails\n * }).then(function (result) {\n *   if (result) {\n *     // set up payment request button\n *   }\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nPaymentRequestComponent.prototype.canMakePayment = function (configuration) {\n  var self = this;\n  var unsupportedPaymentMethod;\n\n  // NEXT_MAJOR_VERSION Move this check to component creation\n  if (!window.PaymentRequest) {\n    analytics.sendEvent(\n      self._client,\n      \"payment-request.can-make-payment.not-available\"\n    );\n\n    return Promise.resolve(false);\n  }\n\n  if (configuration.supportedPaymentMethods) {\n    configuration.supportedPaymentMethods.forEach(function (config) {\n      var supportedMethods = config.supportedMethods;\n\n      if (!(supportedMethods in constants.SUPPORTED_METHODS)) {\n        unsupportedPaymentMethod = supportedMethods;\n      }\n    });\n\n    if (unsupportedPaymentMethod) {\n      return Promise.reject(\n        new BraintreeError({\n          type: errors.PAYMENT_REQUEST_UNSUPPORTED_PAYMENT_METHOD.type,\n          code: errors.PAYMENT_REQUEST_UNSUPPORTED_PAYMENT_METHOD.code,\n          message:\n            unsupportedPaymentMethod + \" is not a supported payment method.\",\n        })\n      );\n    }\n  }\n\n  return new Promise(function (resolve, reject) {\n    self._bus.emit(\n      events.CAN_MAKE_PAYMENT,\n      {\n        supportedPaymentMethods:\n          configuration.supportedPaymentMethods ||\n          self._defaultSupportedPaymentMethods,\n        details: configuration.details,\n        options: configuration.options,\n      },\n      function (response) {\n        var error = response[0];\n        var payload = response[1];\n\n        if (error) {\n          reject(self._formatCanMakePaymentError(error));\n\n          return;\n        }\n\n        analytics.sendEvent(\n          self._client,\n          \"payment-request.can-make-payment.\" + payload\n        );\n\n        resolve(payload);\n      }\n    );\n  });\n};\n\n/**\n * Cleanly remove anything set up by {@link module:braintree-web/payment-request.create|create}.\n * @public\n * @param {callback} [callback] Called on completion.\n * @example\n * paymentRequestInstance.teardown();\n * @example <caption>With callback</caption>\n * paymentRequestInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nPaymentRequestComponent.prototype.teardown = function () {\n  this._bus.teardown();\n  this._frame.parentNode.removeChild(this._frame);\n\n  convertMethodsToError(this, methods(PaymentRequestComponent.prototype));\n\n  analytics.sendEvent(this._client, \"payment-request.teardown-completed\");\n\n  return Promise.resolve();\n};\n\nPaymentRequestComponent.prototype._formatTokenizationError = function (error) {\n  var formattedError;\n\n  switch (error.name) {\n    case \"AbortError\":\n      formattedError = new BraintreeError({\n        type: errors.PAYMENT_REQUEST_CANCELED.type,\n        code: errors.PAYMENT_REQUEST_CANCELED.code,\n        message: errors.PAYMENT_REQUEST_CANCELED.message,\n        details: {\n          originalError: error,\n        },\n      });\n\n      analytics.sendEvent(this._client, \"payment-request.tokenize.canceled\");\n\n      return formattedError;\n    case \"PAYMENT_REQUEST_INITIALIZATION_FAILED\":\n      formattedError = new BraintreeError({\n        type: errors.PAYMENT_REQUEST_INITIALIZATION_MISCONFIGURED.type,\n        code: errors.PAYMENT_REQUEST_INITIALIZATION_MISCONFIGURED.code,\n        message: errors.PAYMENT_REQUEST_INITIALIZATION_MISCONFIGURED.message,\n        details: {\n          originalError: error,\n        },\n      });\n      break;\n    case \"BRAINTREE_GATEWAY_GOOGLE_PAYMENT_TOKENIZATION_ERROR\":\n      formattedError = new BraintreeError({\n        type: errors.PAYMENT_REQUEST_GOOGLE_PAYMENT_FAILED_TO_TOKENIZE.type,\n        code: errors.PAYMENT_REQUEST_GOOGLE_PAYMENT_FAILED_TO_TOKENIZE.code,\n        message:\n          errors.PAYMENT_REQUEST_GOOGLE_PAYMENT_FAILED_TO_TOKENIZE.message,\n        details: {\n          originalError: error,\n        },\n      });\n      break;\n    case \"BRAINTREE_GATEWAY_GOOGLE_PAYMENT_PARSING_ERROR\":\n      formattedError = new BraintreeError({\n        type: errors.PAYMENT_REQUEST_GOOGLE_PAYMENT_PARSING_ERROR.type,\n        code: errors.PAYMENT_REQUEST_GOOGLE_PAYMENT_PARSING_ERROR.code,\n        message: errors.PAYMENT_REQUEST_GOOGLE_PAYMENT_PARSING_ERROR.message,\n        details: {\n          originalError: error,\n        },\n      });\n      break;\n    default:\n      formattedError = new BraintreeError({\n        code: errors.PAYMENT_REQUEST_NOT_COMPLETED.code,\n        type: error.type || BraintreeError.types.CUSTOMER,\n        message: errors.PAYMENT_REQUEST_NOT_COMPLETED.message,\n        details: {\n          originalError: error,\n        },\n      });\n  }\n\n  analytics.sendEvent(this._client, \"payment-request.tokenize.failed\");\n\n  return formattedError;\n};\n\nPaymentRequestComponent.prototype._formatCanMakePaymentError = function (\n  error\n) {\n  var formattedError;\n\n  switch (error.name) {\n    case \"PAYMENT_REQUEST_INITIALIZATION_FAILED\":\n      formattedError = new BraintreeError({\n        type: errors.PAYMENT_REQUEST_INITIALIZATION_MISCONFIGURED.type,\n        code: errors.PAYMENT_REQUEST_INITIALIZATION_MISCONFIGURED.code,\n        message: errors.PAYMENT_REQUEST_INITIALIZATION_MISCONFIGURED.message,\n        details: {\n          originalError: error,\n        },\n      });\n      break;\n    case \"NotAllowedError\":\n      formattedError = new BraintreeError({\n        type: errors.PAYMENT_REQUEST_CAN_MAKE_PAYMENT_NOT_ALLOWED.type,\n        code: errors.PAYMENT_REQUEST_CAN_MAKE_PAYMENT_NOT_ALLOWED.code,\n        message: errors.PAYMENT_REQUEST_CAN_MAKE_PAYMENT_NOT_ALLOWED.message,\n        details: {\n          originalError: error,\n        },\n      });\n      break;\n    default:\n      formattedError = new BraintreeError({\n        code: errors.PAYMENT_REQUEST_CAN_MAKE_PAYMENT_FAILED.code,\n        type: errors.PAYMENT_REQUEST_CAN_MAKE_PAYMENT_FAILED.type,\n        message: errors.PAYMENT_REQUEST_CAN_MAKE_PAYMENT_FAILED.message,\n        details: {\n          originalError: error,\n        },\n      });\n  }\n\n  analytics.sendEvent(this._client, \"payment-request.can-make-payment.failed\");\n\n  return formattedError;\n};\n\nmodule.exports = wrapPromise.wrapPrototype(PaymentRequestComponent);\n\n},{\"../../lib/analytics\":143,\"../../lib/assign\":146,\"../../lib/braintree-error\":149,\"../../lib/convert-methods-to-error\":151,\"../../lib/generate-google-pay-configuration\":174,\"../../lib/methods\":182,\"../../lib/use-min\":188,\"../shared/constants\":207,\"@braintree/event-emitter\":33,\"@braintree/iframer\":35,\"@braintree/uuid\":39,\"@braintree/wrap-promise\":43,\"framebus\":54}],206:[function(_dereq_,module,exports){\n\"use strict\";\n/**\n * @module braintree-web/payment-request\n * @description A component to integrate with the Payment Request API.\n *\n * **Note:** This component is currently in beta and the API may include breaking changes when upgrading. Please review the [Changelog](https://github.com/braintree/braintree-web/blob/main/CHANGELOG.md) for upgrade steps whenever you upgrade the version of braintree-web.\n * */\n\nvar PaymentRequestComponent = _dereq_(\"./external/payment-request\");\nvar basicComponentVerification = _dereq_(\"../lib/basic-component-verification\");\nvar createDeferredClient = _dereq_(\"../lib/create-deferred-client\");\nvar createAssetsUrl = _dereq_(\"../lib/create-assets-url\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar VERSION = \"3.145.0\";\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {object} [options.enabledPaymentMethods] An object representing which payment methods to display.\n * @param {boolean} [options.enabledPaymentMethods.basicCard=true] Whether or not to display credit card as an option in the Payment Request dialog. If left blank or set to true, credit cards will be displayed in the dialog if the merchant account is set up to process credit cards.\n * @param {boolean} [options.enabledPaymentMethods.googlePay=true] Whether or not to display Google Pay as an option in the Payment Request dialog. If left blank or set to true, Google Pay will be displayed in the dialog if the merchant account is set up to process Google Pay.\n * @param {Number} [options.googlePayVersion=1] Ignored if `options.enabledPaymentMethods.googlePay = false`. If `true`, this option specifies the version of Google Pay to use. Choose either 1 (default) or 2.\n * @param {callback} [callback] The second argument, `data`, is the {@link PaymentRequestComponent} instance. If no callback is provided, `create` returns a promise that resolves with the {@link PaymentRequestComponent} instance.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * if (window.PaymentRequest) {\n *   braintree.paymentRequest.create({\n *     client: clientInstance\n *   }, cb);\n * } else {\n *   // fall back to Hosted Fields if browser does not support Payment Request API\n *   braintree.hostedFields.create(hostedFieldsOptions, cb);\n * }\n * @example <caption>Explicitly turning off credit cards from Payment Request API dialog</caption>\n * braintree.paymentRequest.create({\n *   client: clientInstance,\n *   enabledPaymentMethods: {\n *     googlePay: true,\n *     basicCard: false\n *   }\n * }, cb);\n * @example <caption>Using Google Pay v2 or basic card</caption>\n * braintree.paymentRequest.create({\n *   client: clientInstance,\n *   enabledPaymentMethods: {\n *     basicCard: true,\n *     googlePay: true\n *   },\n *   googlePayVersion: 2\n * }, cb);\n *\n */\nfunction create(options) {\n  var name = \"Payment Request\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      return createDeferredClient.create({\n        authorization: options.authorization,\n        client: options.client,\n        debug: options.debug,\n        assetsUrl: createAssetsUrl.create(options.authorization),\n        name: name,\n      });\n    })\n    .then(function (client) {\n      var paymentRequestInstance;\n\n      options.client = client;\n      paymentRequestInstance = new PaymentRequestComponent(options);\n\n      return paymentRequestInstance.initialize();\n    });\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `{@pkg version}`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/basic-component-verification\":147,\"../lib/create-assets-url\":153,\"../lib/create-deferred-client\":155,\"./external/payment-request\":205,\"@braintree/wrap-promise\":43}],207:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar enumerate = _dereq_(\"../../lib/enumerate\");\nvar errors = _dereq_(\"./errors\");\n\nvar constants = {};\n\nconstants.events = enumerate(\n  [\n    \"CAN_MAKE_PAYMENT\",\n    \"FRAME_READY\",\n    \"FRAME_CAN_MAKE_REQUESTS\",\n    \"PAYMENT_REQUEST_INITIALIZED\",\n    \"SHIPPING_ADDRESS_CHANGE\",\n    \"UPDATE_SHIPPING_ADDRESS\",\n    \"SHIPPING_OPTION_CHANGE\",\n    \"UPDATE_SHIPPING_OPTION\",\n  ],\n  \"payment-request:\"\n);\n\nconstants.errors = errors;\n\nconstants.SUPPORTED_METHODS = {\n  \"basic-card\": true,\n  \"https://google.com/pay\": true,\n};\n\nmodule.exports = constants;\n\n},{\"../../lib/enumerate\":159,\"./errors\":208}],208:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Payment Request - Creation Error Codes\n * @description Errors that occur when [creating the Payment Request component](./module-braintree-web_payment-request.html#.create).\n * @property {MERCHANT} PAYMENT_REQUEST_NO_VALID_SUPPORTED_PAYMENT_METHODS Occurs when there are no valid payment methods configured.\n */\n\n/**\n * @name BraintreeError.Payment Request - createSupportedPaymentMethodsConfiguration  Error Codes\n * @description Errors that occur when using the [`createSupportedPaymentMethodsConfiguration` method](./PaymentRequestComponent.html#createSupportedPaymentMethodsConfiguration)\n * @property {MERCHANT} PAYMENT_REQUEST_CREATE_SUPPORTED_PAYMENT_METHODS_CONFIGURATION_MUST_INCLUDE_TYPE Occurs when no type is supplied for method.\n * @property {MERCHANT} PAYMENT_REQUEST_CREATE_SUPPORTED_PAYMENT_METHODS_CONFIGURATION_TYPE_NOT_ENABLED Occurs when configured type is not enabled.\n */\n\n/**\n * @name BraintreeError.Payment Request - tokenize  Error Codes\n * @description Errors that occur when using the [`tokenize` method](./PaymentRequestComponent.html#tokenize)\n * @property {CUSTOMER} PAYMENT_REQUEST_CANCELED Occurs when customer cancels the Payment Request.\n * @property {MERCHANT} PAYMENT_REQUEST_INITIALIZATION_MISCONFIGURED Occurs when the Payment Request is closed do to the options being misconfigured.\n * @property {MERCHANT} PAYMENT_REQUEST_GOOGLE_PAYMENT_FAILED_TO_TOKENIZE Occurs when a Google Payment payment method is unable to be tokenized.\n * @property {UNKNOWN} PAYMENT_REQUEST_GOOGLE_PAYMENT_PARSING_ERROR Occurs when the result of tokenizing a Google Payment payment method could not be parsed.\n * @property {CUSTOMER} PAYMENT_REQUEST_NOT_COMPLETED Occurs when an error prevented the Payment Request from being completed.\n */\n\n/**\n * @name BraintreeError.Payment Request - canMakePayment  Error Codes\n * @description Errors that occur when using the [`canMakePayment` method](./PaymentRequestComponent.html#canMakePayment)\n * @property {MERCHANT} PAYMENT_REQUEST_INITIALIZATION_MISCONFIGURED Occurs when the Payment Request is instantiated with misconfigured options.\n * @property {MERCHANT} PAYMENT_REQUEST_CAN_MAKE_PAYMENT_NOT_ALLOWED Occurs when `canMakePayment` results in a `DomException` with a `NotAllowedError`. This usually occurs when `canMakePayment` is called multiple times with different supported payment options.\n * @property {MERCHANT} PAYMENT_REQUEST_UNSUPPORTED_PAYMENT_METHOD Occurs when `canMakePayment` is called with a `supportedPaymentMethods` array that contains a payment method that is not supported by the Braintree SDK.\n * @property {UNKNOWN} PAYMENT_REQUEST_CAN_MAKE_PAYMENT_FAILED Occurs when `canMakePayment` fails for any reason other than a misconfigured Payment Request object.\n */\n\nvar BraintreeError = _dereq_(\"../../lib/braintree-error\");\n\nmodule.exports = {\n  PAYMENT_REQUEST_NO_VALID_SUPPORTED_PAYMENT_METHODS: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYMENT_REQUEST_NO_VALID_SUPPORTED_PAYMENT_METHODS\",\n    message:\n      \"There are no supported payment methods associated with this account.\",\n  },\n  PAYMENT_REQUEST_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"PAYMENT_REQUEST_CANCELED\",\n    message: \"Payment request was canceled.\",\n  },\n  PAYMENT_REQUEST_INITIALIZATION_MISCONFIGURED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYMENT_REQUEST_INITIALIZATION_MISCONFIGURED\",\n    message: \"Something went wrong when configuring the payment request.\",\n  },\n  PAYMENT_REQUEST_CAN_MAKE_PAYMENT_FAILED: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"PAYMENT_REQUEST_CAN_MAKE_PAYMENT_FAILED\",\n    message: \"Something went wrong when calling `canMakePayment`\",\n  },\n  PAYMENT_REQUEST_CAN_MAKE_PAYMENT_NOT_ALLOWED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYMENT_REQUEST_CAN_MAKE_PAYMENT_NOT_ALLOWED\",\n    message:\n      \"Something went wrong when calling `canMakePayment`. Most likely, `canMakePayment` was called multiple times with different supportedMethods configurations.\",\n  },\n  PAYMENT_REQUEST_UNSUPPORTED_PAYMENT_METHOD: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYMENT_REQUEST_UNSUPPORTED_PAYMENT_METHOD\",\n  },\n  PAYMENT_REQUEST_GOOGLE_PAYMENT_FAILED_TO_TOKENIZE: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYMENT_REQUEST_GOOGLE_PAYMENT_FAILED_TO_TOKENIZE\",\n    message: \"Something went wrong when tokenizing the Google Pay card.\",\n  },\n  PAYMENT_REQUEST_GOOGLE_PAYMENT_PARSING_ERROR: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"PAYMENT_REQUEST_GOOGLE_PAYMENT_PARSING_ERROR\",\n    message: \"Something went wrong when tokenizing the Google Pay card.\",\n  },\n  PAYMENT_REQUEST_NOT_COMPLETED: {\n    code: \"PAYMENT_REQUEST_NOT_COMPLETED\",\n    message: \"Payment request could not be completed.\",\n  },\n  PAYMENT_REQUEST_CREATE_SUPPORTED_PAYMENT_METHODS_CONFIGURATION_MUST_INCLUDE_TYPE:\n    {\n      type: BraintreeError.types.MERCHANT,\n      code: \"PAYMENT_REQUEST_CREATE_SUPPORTED_PAYMENT_METHODS_CONFIGURATION_MUST_INCLUDE_TYPE\",\n      message:\n        \"createSupportedPaymentMethodsConfiguration must include a type parameter.\",\n    },\n  PAYMENT_REQUEST_CREATE_SUPPORTED_PAYMENT_METHODS_CONFIGURATION_TYPE_NOT_ENABLED:\n    {\n      type: BraintreeError.types.MERCHANT,\n      code: \"PAYMENT_REQUEST_CREATE_SUPPORTED_PAYMENT_METHODS_CONFIGURATION_TYPE_NOT_ENABLED\",\n      message:\n        \"createSupportedPaymentMethodsConfiguration type parameter must be valid or enabled.\",\n    },\n};\n\n},{\"../../lib/braintree-error\":149}],209:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar VERSION = \"3.145.0\";\n\nvar PAYPAL_V6_SDK_BASE_URL = \"https://www.{ENV}paypal.com/web-sdk/v6/core\";\n\nvar PAYPAL_V6_ENVIRONMENT = {\n  stage: \"https://www.msmaster.qa.paypal.com/web-sdk/v6/core\",\n  teBraintree: \"https://www.braintree.stage.paypal.com/web-sdk/v6/core\",\n};\n\n// Analytics event constants\nvar ANALYTICS_PREFIX = \"paypal-checkout-v6\";\nvar ANALYTICS_EVENTS = {\n  INITIALIZED: ANALYTICS_PREFIX + \".initialized\",\n  TEARDOWN: ANALYTICS_PREFIX + \".teardown\",\n\n  // SDK Loading\n  SDK_ALREADY_LOADED: ANALYTICS_PREFIX + \".sdk-already-loaded\",\n  SDK_LOAD_STARTED: ANALYTICS_PREFIX + \".load-sdk.started\",\n  SDK_LOAD_SUCCEEDED: ANALYTICS_PREFIX + \".sdk-load.succeeded\",\n  SDK_LOAD_FAILED: ANALYTICS_PREFIX + \".sdk-load.failed\",\n\n  // Instance Creation\n  CREATE_INSTANCE_STARTED: ANALYTICS_PREFIX + \".create-instance.started\",\n  CREATE_INSTANCE_SUCCEEDED: ANALYTICS_PREFIX + \".create-instance.succeeded\",\n  CREATE_INSTANCE_FAILED: ANALYTICS_PREFIX + \".create-instance.failed\",\n\n  // Session Creation\n  SESSION_CHECKOUT_CREATED: ANALYTICS_PREFIX + \".session.checkout.created\",\n  SESSION_VAULT_CREATED: ANALYTICS_PREFIX + \".session.vault.created\",\n  SESSION_CHECKOUT_WITH_VAULT_CREATED:\n    ANALYTICS_PREFIX + \".session.checkout-with-vault.created\",\n\n  // Payment Flow\n  PAYMENT_STARTED: ANALYTICS_PREFIX + \".payment.started\",\n  PAYMENT_APPROVED: ANALYTICS_PREFIX + \".payment.approved\",\n  PAYMENT_CANCELED: ANALYTICS_PREFIX + \".payment.canceled\",\n\n  // Checkout with Vault Flow\n  CHECKOUT_WITH_VAULT_STARTED:\n    ANALYTICS_PREFIX + \".checkout-with-vault.started\",\n  CHECKOUT_WITH_VAULT_APPROVED:\n    ANALYTICS_PREFIX + \".checkout-with-vault.approved\",\n  CHECKOUT_WITH_VAULT_CANCELED:\n    ANALYTICS_PREFIX + \".checkout-with-vault.canceled\",\n\n  // Order Creation\n  CREATE_ORDER_STARTED: ANALYTICS_PREFIX + \".create-order.started\",\n  CREATE_ORDER_SUCCEEDED: ANALYTICS_PREFIX + \".create-order.succeeded\",\n  CREATE_ORDER_FAILED: ANALYTICS_PREFIX + \".create-order.failed\",\n\n  // Billing Agreement Token\n  CREATE_BA_TOKEN_STARTED:\n    ANALYTICS_PREFIX + \".create-billing-agreement-token.started\",\n  CREATE_BA_TOKEN_SUCCEEDED:\n    ANALYTICS_PREFIX + \".create-billing-agreement-token.succeeded\",\n  CREATE_BA_TOKEN_FAILED:\n    ANALYTICS_PREFIX + \".create-billing-agreement-token.failed\",\n\n  // Billing Agreement Session\n  CREATE_BA_SESSION_STARTED:\n    ANALYTICS_PREFIX + \".create-billing-agreement-session.started\",\n  CREATE_BA_SESSION_INSTANCE_CREATED:\n    ANALYTICS_PREFIX + \".create-billing-agreement-session.instance-created\",\n  CREATE_BA_SESSION_SDK_NOT_LOADED:\n    ANALYTICS_PREFIX + \".create-billing-agreement-session.sdk-not-loaded\",\n  CREATE_BA_SESSION_SESSION_CREATED:\n    ANALYTICS_PREFIX + \".create-billing-agreement-session.session-created\",\n  CREATE_BA_SESSION_APPROVED:\n    ANALYTICS_PREFIX + \".create-billing-agreement-session.approved\",\n  CREATE_BA_SESSION_CANCELED:\n    ANALYTICS_PREFIX + \".create-billing-agreement-session.canceled\",\n  CREATE_BA_SESSION_FAILED:\n    ANALYTICS_PREFIX + \".create-billing-agreement-session.failed\",\n\n  // Tokenization\n  TOKENIZE_PAYMENT_PREFIX: ANALYTICS_PREFIX + \".tokenize-payment\",\n  TOKENIZE_BA_PREFIX: ANALYTICS_PREFIX + \".tokenize-billing-agreement\",\n\n  // Credit\n  CREDIT_OFFERED: ANALYTICS_PREFIX + \".credit.offered\",\n  CREDIT_ACCEPTED: ANALYTICS_PREFIX + \".credit.accepted\",\n\n  // Pay Later\n  PAY_LATER_OFFERED: ANALYTICS_PREFIX + \".pay-later.offered\",\n  PAY_LATER_ACCEPTED: ANALYTICS_PREFIX + \".pay-later.accepted\",\n\n  // Eligibility Check\n  FIND_ELIGIBLE_METHODS_STARTED:\n    ANALYTICS_PREFIX + \".find-eligible-methods.started\",\n  FIND_ELIGIBLE_METHODS_SUCCEEDED:\n    ANALYTICS_PREFIX + \".find-eligible-methods.succeeded\",\n  FIND_ELIGIBLE_METHODS_FAILED:\n    ANALYTICS_PREFIX + \".find-eligible-methods.failed\",\n\n  // Messages\n  CREATE_MESSAGES_STARTED: ANALYTICS_PREFIX + \".create-messages.started\",\n  CREATE_MESSAGES_SUCCEEDED: ANALYTICS_PREFIX + \".create-messages.succeeded\",\n  CREATE_MESSAGES_FAILED: ANALYTICS_PREFIX + \".create-messages.failed\",\n};\n\nmodule.exports = {\n  VERSION: VERSION,\n  PAYPAL_V6_SDK_BASE_URL: PAYPAL_V6_SDK_BASE_URL,\n  PAYPAL_V6_ENVIRONMENT: PAYPAL_V6_ENVIRONMENT,\n  ANALYTICS_PREFIX: ANALYTICS_PREFIX,\n  ANALYTICS_EVENTS: ANALYTICS_EVENTS,\n};\n\n},{}],210:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.PayPal Checkout V6 - Creation Error Codes\n * @description Errors that occur when creating the PayPal Checkout V6 component.\n * @property {MERCHANT} PAYPAL_CHECKOUT_V6_NOT_ENABLED Occurs when PayPal is not enabled on the Braintree control panel.\n * @property {MERCHANT} PAYPAL_CHECKOUT_V6_SANDBOX_ACCOUNT_NOT_LINKED Occurs only when testing in Sandbox, when a PayPal sandbox account is not linked to the merchant account in the Braintree control panel.\n * @property {MERCHANT} PAYPAL_CHECKOUT_V6_TOKENIZATION_KEY_NOT_SUPPORTED Occurs when a tokenization key is used instead of a client token. V6 SDK requires client tokens.\n */\n\n/**\n * @name BraintreeError.PayPal Checkout V6 - SDK Loading Error Codes\n * @description Errors that occur when loading the PayPal v6 SDK.\n * @property {NETWORK} PAYPAL_CHECKOUT_V6_SDK_SCRIPT_LOAD_FAILED Occurs when the PayPal v6 SDK script fails to load.\n * @property {NETWORK} PAYPAL_CHECKOUT_V6_SDK_INITIALIZATION_FAILED Occurs when the PayPal V6 SDK instance creation fails.\n * @property {MERCHANT} PAYPAL_CHECKOUT_V6_CLIENT_TOKEN_INVALID Occurs when the client token is invalid or expired.\n * @property {MERCHANT} PAYPAL_CHECKOUT_V6_SDK_NOT_INITIALIZED Occurs when a method is called before loading the PayPal SDK.\n */\n\n/**\n * @name BraintreeError.PayPal Checkout V6 - Session Error Codes\n * @description Errors that occur when creating or starting payment sessions.\n * @property {MERCHANT} PAYPAL_CHECKOUT_V6_SESSION_CREATION_FAILED Occurs when something goes wrong when initializing the flow.\n * @property {MERCHANT} PAYPAL_CHECKOUT_V6_PAYMENT_START_FAILED Occurs when something goes wrong when starting the flow.\n * @property {CUSTOMER} PAYPAL_CHECKOUT_V6_PAYMENT_CANCELED Occurs when a customer cancels the payment flow.\n * @property {MERCHANT} PAYPAL_CHECKOUT_V6_INVALID_SESSION_OPTIONS Occurs when session options are invalid or missing required fields.\n * @property {MERCHANT} PAYPAL_CHECKOUT_V6_APP_SWITCH_URLS_REQUIRED Occurs when returnUrl or cancelUrl is missing for direct-app-switch mode.\n * @property {MERCHANT} PAYPAL_CHECKOUT_V6_INSTANCE_NOT_READY Occurs when start() is called before the PayPal SDK instance is ready.\n */\n\n/**\n * @name BraintreeError.PayPal Checkout V6 - Order Error Codes\n * @description Errors that occur when creating PayPal orders.\n * @property {NETWORK} PAYPAL_CHECKOUT_V6_ORDER_CREATION_FAILED Occurs when Braintree backend order creation fails.\n * @property {MERCHANT} PAYPAL_CHECKOUT_V6_INVALID_ORDER_OPTIONS Occurs when order options are invalid or missing required fields.\n */\n\n/**\n * @name BraintreeError.PayPal Checkout V6 - Tokenization Error Codes\n * @description Errors that occur when tokenizing PayPal payments.\n * @property {NETWORK} PAYPAL_CHECKOUT_V6_TOKENIZATION_FAILED Occurs when PayPal account could not be tokenized.\n * @property {MERCHANT} PAYPAL_CHECKOUT_V6_MISSING_TOKENIZATION_DATA Occurs when required tokenization data (payerID, orderID) is missing.\n */\n\n/**\n * @name BraintreeError.PayPal Checkout V6 - Update Error Codes\n * @description Errors that occur when updating PayPal payments.\n * @property {MERCHANT} PAYPAL_CHECKOUT_V6_INVALID_UPDATE_OPTIONS Occurs when update options are invalid or missing required fields.\n * @property {MERCHANT} PAYPAL_CHECKOUT_V6_PAYMENT_NOT_FOUND Occurs when the specified payment ID cannot be found.\n * @property {MERCHANT} PAYPAL_CHECKOUT_V6_CURRENCY_MISMATCH Occurs when the update currency doesn't match the original payment currency.\n * @property {NETWORK} PAYPAL_CHECKOUT_V6_UPDATE_FAILED Occurs when the payment update request fails.\n * @property {MERCHANT} PAYPAL_CHECKOUT_V6_INVALID_LINE_ITEMS Occurs when line items have invalid format or inconsistent currency.\n * @name BraintreeError.PayPal Checkout V6 - Billing Agreement Error Codes\n * @description Errors that occur when creating billing agreements for vault flow.\n * @property {NETWORK} PAYPAL_CHECKOUT_V6_BILLING_AGREEMENT_CREATION_FAILED Occurs when Braintree backend billing agreement creation fails.\n * @property {MERCHANT} PAYPAL_CHECKOUT_V6_INVALID_BILLING_AGREEMENT_OPTIONS Occurs when billing agreement options are invalid or missing required fields.\n * @property {CUSTOMER} PAYPAL_CHECKOUT_V6_BILLING_AGREEMENT_CANCELED Occurs when a customer cancels the billing agreement flow.\n */\n\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\n\nmodule.exports = {\n  // Configuration/Setup Errors\n  PAYPAL_CHECKOUT_V6_NOT_ENABLED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_CHECKOUT_V6_NOT_ENABLED\",\n    message: \"PayPal is not enabled for this merchant.\",\n  },\n  PAYPAL_CHECKOUT_V6_SANDBOX_ACCOUNT_NOT_LINKED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_CHECKOUT_V6_SANDBOX_ACCOUNT_NOT_LINKED\",\n    message:\n      \"A linked PayPal Sandbox account is required to use PayPal Checkout V6 in Sandbox. See https://developer.paypal.com/braintree/docs/guides/paypal/testing-go-live#linked-paypal-testing for details on linking your PayPal sandbox with Braintree.\",\n  },\n  PAYPAL_CHECKOUT_V6_TOKENIZATION_KEY_NOT_SUPPORTED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_CHECKOUT_V6_TOKENIZATION_KEY_NOT_SUPPORTED\",\n    message:\n      \"PayPal Checkout V6 requires a client token for authorization. Tokenization keys are not supported.\",\n  },\n\n  // SDK Loading Errors\n  PAYPAL_CHECKOUT_V6_SDK_SCRIPT_LOAD_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"PAYPAL_CHECKOUT_V6_SDK_SCRIPT_LOAD_FAILED\",\n    message: \"PayPal V6 SDK script failed to load.\",\n  },\n  PAYPAL_CHECKOUT_V6_SDK_INITIALIZATION_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"PAYPAL_CHECKOUT_V6_SDK_INITIALIZATION_FAILED\",\n    message: \"PayPal V6 SDK instance creation failed.\",\n  },\n  PAYPAL_CHECKOUT_V6_CLIENT_TOKEN_INVALID: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_CHECKOUT_V6_CLIENT_TOKEN_INVALID\",\n    message: \"Client token is invalid or expired.\",\n  },\n  PAYPAL_CHECKOUT_V6_SDK_NOT_INITIALIZED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_CHECKOUT_V6_SDK_NOT_INITIALIZED\",\n    message:\n      \"PayPal SDK has not been initialized. Call loadPayPalSDK() before using this method.\",\n  },\n\n  // Eligibility Check Errors\n  PAYPAL_CHECKOUT_V6_ELIGIBILITY_CHECK_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"PAYPAL_CHECKOUT_V6_ELIGIBILITY_CHECK_FAILED\",\n    message: \"Failed to check payment method eligibility.\",\n  },\n  PAYPAL_CHECKOUT_V6_INVALID_ELIGIBILITY_OPTIONS: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_CHECKOUT_V6_INVALID_ELIGIBILITY_OPTIONS\",\n    message:\n      \"Eligibility check options are invalid or missing required fields (amount, currency).\",\n  },\n\n  // Session/Payment Errors\n  PAYPAL_CHECKOUT_V6_SESSION_CREATION_FAILED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_CHECKOUT_V6_SESSION_CREATION_FAILED\",\n    message: \"Failed to create PayPal payment session.\",\n  },\n  PAYPAL_CHECKOUT_V6_PAYMENT_START_FAILED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_CHECKOUT_V6_PAYMENT_START_FAILED\",\n    message: \"Failed to start PayPal payment flow.\",\n  },\n  PAYPAL_CHECKOUT_V6_PAYMENT_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"PAYPAL_CHECKOUT_V6_PAYMENT_CANCELED\",\n    message: \"Customer canceled the PayPal payment.\",\n  },\n  PAYPAL_CHECKOUT_V6_INVALID_SESSION_OPTIONS: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_CHECKOUT_V6_INVALID_SESSION_OPTIONS\",\n    message: \"PayPal session options are invalid or missing required fields.\",\n  },\n  PAYPAL_CHECKOUT_V6_SHIPPING_CALLBACK_CONFLICT: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_CHECKOUT_V6_SHIPPING_CALLBACK_CONFLICT\",\n    message:\n      \"Cannot use both shippingCallbackUrl and client-side shipping callbacks (onShippingAddressChange/onShippingOptionsChange).\",\n  },\n  PAYPAL_CHECKOUT_V6_APP_SWITCH_URLS_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_CHECKOUT_V6_APP_SWITCH_URLS_REQUIRED\",\n    message:\n      \"returnUrl and cancelUrl are required when using direct-app-switch presentation mode.\",\n  },\n  PAYPAL_CHECKOUT_V6_INSTANCE_NOT_READY: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_CHECKOUT_V6_INSTANCE_NOT_READY\",\n    message:\n      \"PayPal SDK instance is not ready. Ensure loadPayPalSDK() has completed before calling start().\",\n  },\n\n  // Order Creation Errors\n  PAYPAL_CHECKOUT_V6_ORDER_CREATION_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"PAYPAL_CHECKOUT_V6_ORDER_CREATION_FAILED\",\n    message: \"Could not create PayPal order.\",\n  },\n  PAYPAL_CHECKOUT_V6_INVALID_ORDER_OPTIONS: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_CHECKOUT_V6_INVALID_ORDER_OPTIONS\",\n    message: \"PayPal order options are invalid or missing required fields.\",\n  },\n\n  // Tokenization Errors\n  PAYPAL_CHECKOUT_V6_TOKENIZATION_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"PAYPAL_CHECKOUT_V6_TOKENIZATION_FAILED\",\n    message: \"Could not tokenize PayPal account.\",\n  },\n  PAYPAL_CHECKOUT_V6_MISSING_TOKENIZATION_DATA: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_CHECKOUT_V6_MISSING_TOKENIZATION_DATA\",\n    message:\n      \"Missing required tokenization data (payerID and (orderID or paymentID)).\",\n  },\n\n  // Update Payment Errors\n  PAYPAL_CHECKOUT_V6_INVALID_UPDATE_OPTIONS: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_CHECKOUT_V6_INVALID_UPDATE_OPTIONS\",\n    message: \"PayPal update options are invalid or missing required fields.\",\n  },\n  PAYPAL_CHECKOUT_V6_PAYMENT_NOT_FOUND: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_CHECKOUT_V6_PAYMENT_NOT_FOUND\",\n    message: \"The specified payment ID cannot be found or is no longer active.\",\n  },\n  PAYPAL_CHECKOUT_V6_CURRENCY_MISMATCH: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_CHECKOUT_V6_CURRENCY_MISMATCH\",\n    message:\n      \"The currency provided for the update does not match the original payment currency.\",\n  },\n  PAYPAL_CHECKOUT_V6_UPDATE_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"PAYPAL_CHECKOUT_V6_UPDATE_FAILED\",\n    message: \"Could not update PayPal payment details.\",\n  },\n  PAYPAL_CHECKOUT_V6_INVALID_LINE_ITEMS: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_CHECKOUT_V6_INVALID_LINE_ITEMS\",\n    message: \"Line items have invalid format or inconsistent currency.\",\n  },\n\n  // Billing Agreement Errors\n  PAYPAL_CHECKOUT_V6_BILLING_AGREEMENT_CREATION_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"PAYPAL_CHECKOUT_V6_BILLING_AGREEMENT_CREATION_FAILED\",\n    message: \"Could not create PayPal billing agreement.\",\n  },\n  PAYPAL_CHECKOUT_V6_INVALID_BILLING_AGREEMENT_OPTIONS: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_CHECKOUT_V6_INVALID_BILLING_AGREEMENT_OPTIONS\",\n    message:\n      \"Billing agreement options are invalid or missing required fields.\",\n  },\n  PAYPAL_CHECKOUT_V6_BILLING_AGREEMENT_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"PAYPAL_CHECKOUT_V6_BILLING_AGREEMENT_CANCELED\",\n    message: \"Customer canceled the billing agreement.\",\n  },\n\n  // Messages Errors\n  PAYPAL_CHECKOUT_V6_MESSAGES_CREATION_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"PAYPAL_CHECKOUT_V6_MESSAGES_CREATION_FAILED\",\n    message: \"Could not create PayPal Messages instance.\",\n  },\n\n  // Vault Initiated Checkout Errors\n  PAYPAL_CHECKOUT_V6_VIC_PARAM_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_CHECKOUT_V6_VIC_PARAM_REQUIRED\",\n    message: \"A required vault initiated checkout parameter is missing.\",\n  },\n  PAYPAL_CHECKOUT_V6_VIC_POPUP_OPEN_FAILED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_CHECKOUT_V6_VIC_POPUP_OPEN_FAILED\",\n    message:\n      \"PayPal popup failed to open, make sure to initiate in response to a user action.\",\n  },\n  PAYPAL_CHECKOUT_V6_VIC_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"PAYPAL_CHECKOUT_V6_VIC_CANCELED\",\n    message: \"Customer closed PayPal popup before authorizing.\",\n  },\n  PAYPAL_CHECKOUT_V6_VIC_IN_PROGRESS: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_CHECKOUT_V6_VIC_IN_PROGRESS\",\n    message: \"Vault initiated checkout already in progress.\",\n  },\n};\n\n},{\"../lib/braintree-error\":149}],211:[function(_dereq_,module,exports){\n\"use strict\";\n/**\n * @module braintree-web/paypal-checkout-v6\n * @description A component to integrate with the PayPal Web SDK v6.\n */\n\nvar basicComponentVerification = _dereq_(\"../lib/basic-component-verification\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar PayPalCheckoutV6 = _dereq_(\"./paypal-checkout-v6\");\nvar VERSION = \"3.145.0\";\n\n/**\n * @static\n * @function create\n * @description Creates a PayPal Checkout V6 component instance. See the {@link PayPalCheckoutV6} class for usage examples.\n *\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A clientToken. Can be used in place of `options.client`. Note: V6 requires client tokens; tokenization keys are not supported.\n * @param {string} [options.merchantAccountId] A non-default merchant account ID to use for tokenization.\n * @param {callback} [callback] The second argument, `data`, is the {@link PayPalCheckoutV6} instance.\n * @example\n * braintree.client.create({\n *   authorization: 'CLIENT_TOKEN_FROM_SERVER'\n * }).then(function (clientInstance) {\n *   return braintree.paypalCheckoutV6.create({\n *     client: clientInstance\n *   });\n * }).then(function (paypalCheckoutV6Instance) {\n *   // Load the PayPal V6 SDK\n *   return paypalCheckoutV6Instance.loadPayPalSDK();\n * }).then(function (paypalCheckoutV6Instance) {\n *   // Create payment session\n *   var session = paypalCheckoutV6Instance.createOneTimePaymentSession({\n *     amount: '10.00',\n *     currency: 'USD',\n *     onApprove: function (data) {\n *       return paypalCheckoutV6Instance.tokenizePayment(data);\n *     }\n *   });\n *\n *   // Start payment on button click\n *   document.querySelector('#paypal-button').addEventListener('click', function () {\n *     session.start();\n *   });\n * }).catch(function (err) {\n *   console.error('Error!', err);\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nfunction create(options) {\n  var name = \"PayPal Checkout V6\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      var instance = new PayPalCheckoutV6(options);\n\n      return instance._initialize(options);\n    });\n}\n\n/**\n * @static\n * @function isSupported\n * @description Returns true if PayPal Checkout supports this browser.\n * @deprecated Previously, this method checked for Popup support in the browser. The PayPal JS SDK now falls back to a modal if popups are not supported.\n * @returns {Boolean} Returns true if PayPal Checkout supports this browser.\n */\nfunction isSupported() {\n  return true;\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  isSupported: isSupported,\n  /**\n   * @description The current version of the SDK, i.e. `{@pkg version}`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/basic-component-verification\":147,\"./paypal-checkout-v6\":212,\"@braintree/wrap-promise\":43}],212:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar analytics = _dereq_(\"../lib/analytics\");\nvar assets = _dereq_(\"../lib/assets\");\nvar assetLoadDetail = _dereq_(\"../lib/asset-load-detail\");\nvar assign = _dereq_(\"../lib/assign\").assign;\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar convertToBraintreeError = _dereq_(\"../lib/convert-to-braintree-error\");\nvar createDeferredClient = _dereq_(\"../lib/create-deferred-client\");\nvar createAssetsUrl = _dereq_(\"../lib/create-assets-url\");\nvar createAuthorizationData = _dereq_(\"../lib/create-authorization-data\");\nvar errors = _dereq_(\"./errors\");\nvar frameService = _dereq_(\"../lib/frame-service/external\");\nvar methods = _dereq_(\"../lib/methods\");\nvar convertMethodsToError = _dereq_(\"../lib/convert-methods-to-error\");\nvar useMin = _dereq_(\"../lib/use-min\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar ExtendedPromise = _dereq_(\"@braintree/extended-promise\");\nvar constants = _dereq_(\"./constants\");\nvar INTEGRATION_TIMEOUT_MS = _dereq_(\"../lib/constants\").INTEGRATION_TIMEOUT_MS;\n\nExtendedPromise.suppressUnhandledPromiseMessage = true;\n\nvar REQUIRED_PARAMS_FOR_VIC = [\n  \"amount\",\n  \"currency\",\n  \"vaultInitiatedCheckoutPaymentMethodToken\",\n];\n\n/**\n * @class\n * @param {object} options see {@link module:braintree-web/paypal-checkout-v6.create|paypal-checkout-v6.create}\n * @classdesc This class represents a PayPal Checkout V6 component that coordinates with the PayPal Web SDK v6. Instances of this class can load the PayPal SDK, create payment sessions, and tokenize payments.\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/paypal-checkout-v6.create|braintree-web.paypal-checkout-v6.create} instead.</strong>\n *\n * #### Integrate One-Time Payment Flow with PayPal V6\n *\n * ```javascript\n * braintree.client.create({\n *   authorization: 'client-token'\n * }).then(function (clientInstance) {\n *   return braintree.paypalCheckoutV6.create({\n *     client: clientInstance\n *   });\n * }).then(function (paypalCheckoutV6Instance) {\n *   // Load the PayPal V6 SDK\n *   return paypalCheckoutV6Instance.loadPayPalSDK();\n * }).then(function (paypalCheckoutV6Instance) {\n *   // Create a one-time payment session\n *   var session = paypalCheckoutV6Instance.createOneTimePaymentSession({\n *     amount: '10.00',\n *     currency: 'USD',\n *     intent: 'capture',\n *\n *     onApprove: function (data) {\n *       return paypalCheckoutV6Instance.tokenizePayment(data).then(function (payload) {\n *         // Submit payload.nonce to your server\n *       });\n *     },\n *\n *     onCancel: function () {\n *       // Handle case where user cancels\n *     },\n *\n *     onError: function (err) {\n *       // Handle case where error occurs\n *     }\n *   });\n *\n *   // Trigger the payment flow when user clicks a button\n *   document.getElementById('paypal-button').addEventListener('click', function () {\n *     session.start();\n *   });\n * }).catch(function (err) {\n *  console.error('Error!', err);\n * });\n * ```\n *\n * #### Integrate Vault Flow (Billing Agreement) with PayPal V6\n *\n * ```javascript\n * braintree.client.create({\n *   authorization: 'client-token'\n * }).then(function (clientInstance) {\n *   return braintree.paypalCheckoutV6.create({\n *     client: clientInstance\n *   });\n * }).then(function (paypalCheckoutV6Instance) {\n *   // Load the PayPal V6 SDK\n *   return paypalCheckoutV6Instance.loadPayPalSDK();\n * }).then(function (paypalCheckoutV6Instance) {\n *   // Create a billing agreement session\n *   var session = paypalCheckoutV6Instance.createBillingAgreementSession({\n *     billingAgreementDescription: 'Monthly subscription',\n *\n *     onApprove: function (data) {\n *       return paypalCheckoutV6Instance.tokenizePayment(data).then(function (payload) {\n *         // Submit payload.nonce to your server for vaulting\n *       });\n *     },\n *\n *     onCancel: function () {\n *       // Handle case where user cancels\n *     },\n *\n *     onError: function (err) {\n *       // Handle case where error occurs\n *     }\n *   });\n *\n *   // Trigger the vault flow when user clicks a button\n *   document.getElementById('save-paypal-button').addEventListener('click', function () {\n *     session.start();\n *   });\n * }).catch(function (err) {\n *  console.error('Error!', err);\n * });\n * ```\n */\nfunction PayPalCheckoutV6(options) {\n  this._merchantAccountId = options.merchantAccountId;\n}\n\nPayPalCheckoutV6.prototype._initialize = function (options) {\n  var config;\n\n  if (options.client) {\n    config = options.client.getConfiguration();\n    this._authorizationInformation = {\n      fingerprint: config.authorizationFingerprint,\n      environment: config.gatewayConfiguration.environment,\n    };\n  } else {\n    config = createAuthorizationData(options.authorization);\n    this._authorizationInformation = {\n      fingerprint: config.attrs.authorizationFingerprint,\n      environment: config.environment,\n    };\n  }\n\n  this._clientPromise = createDeferredClient\n    .create({\n      authorization: options.authorization,\n      client: options.client,\n      debug: options.debug,\n      assetsUrl: options.authorization\n        ? createAssetsUrl.create(options.authorization)\n        : undefined,\n      name: \"PayPal Checkout V6\",\n    })\n    .then(\n      function (client) {\n        this._configuration = client.getConfiguration();\n\n        if (this._configuration.authorizationType === \"TOKENIZATION_KEY\") {\n          this._setupError = new BraintreeError(\n            errors.PAYPAL_CHECKOUT_V6_TOKENIZATION_KEY_NOT_SUPPORTED\n          );\n        } else if (!this._merchantAccountId) {\n          if (!this._configuration.gatewayConfiguration.paypalEnabled) {\n            this._setupError = new BraintreeError(\n              errors.PAYPAL_CHECKOUT_V6_NOT_ENABLED\n            );\n          } else if (\n            this._configuration.gatewayConfiguration.paypal\n              .environmentNoNetwork === true\n          ) {\n            this._setupError = new BraintreeError(\n              errors.PAYPAL_CHECKOUT_V6_SANDBOX_ACCOUNT_NOT_LINKED\n            );\n          }\n        }\n\n        if (this._setupError) {\n          return Promise.reject(this._setupError);\n        }\n\n        this._client = client;\n        analytics.sendEvent(client, constants.ANALYTICS_EVENTS.INITIALIZED);\n        this._frameServicePromise = this._setupFrameService(client);\n\n        return client;\n      }.bind(this)\n    );\n\n  if (options.client) {\n    return this._clientPromise.then(\n      function () {\n        return this;\n      }.bind(this)\n    );\n  }\n\n  return Promise.resolve(this);\n};\n\n/**\n * Retrieves the PayPal client ID from the Braintree configuration.\n * @public\n * @example\n * paypalCheckoutV6Instance.getClientId().then(function (clientId) {\n *   console.log('Client ID:', clientId);\n * });\n * @returns {Promise<string>} A promise that resolves with the PayPal client ID.\n */\nPayPalCheckoutV6.prototype.getClientId = function () {\n  return this._clientPromise.then(function (client) {\n    return client.getConfiguration().gatewayConfiguration.paypal.clientId;\n  });\n};\n\nPayPalCheckoutV6.prototype._setupFrameService = function (client) {\n  var frameServicePromise = new ExtendedPromise();\n  var config = client.getConfiguration();\n  var timeoutRef = setTimeout(function () {\n    analytics.sendEvent(client, \"paypal-checkout-v6.frame-service.timed-out\");\n    frameServicePromise.reject(\n      new BraintreeError(errors.PAYPAL_CHECKOUT_V6_SESSION_CREATION_FAILED)\n    );\n  }, INTEGRATION_TIMEOUT_MS);\n\n  this._assetsUrl =\n    config.gatewayConfiguration.paypal.assetsUrl + \"/web/\" + constants.VERSION;\n  this._isDebug = config.isDebug;\n  this._loadingFrameUrl =\n    this._assetsUrl +\n    \"/html/paypal-landing-frame\" +\n    useMin(this._isDebug) +\n    \".html\";\n\n  frameService.create(\n    {\n      name: \"braintreepaypallanding\",\n      dispatchFrameUrl:\n        this._assetsUrl +\n        \"/html/dispatch-frame\" +\n        useMin(this._isDebug) +\n        \".html\",\n      openFrameUrl: this._loadingFrameUrl,\n    },\n    function (service) {\n      this._frameService = service;\n      clearTimeout(timeoutRef);\n\n      frameServicePromise.resolve();\n    }.bind(this)\n  );\n\n  return frameServicePromise;\n};\n\n/**\n * Checks if the PayPal SDK is loaded and ready for use.\n * @private\n * @returns {boolean} True if PayPal SDK is available.\n */\nPayPalCheckoutV6.prototype._isPayPalSdkAvailable = function () {\n  return Boolean(window.paypal && window.paypal.createInstance);\n};\n\n/**\n * Validates that returnUrl and cancelUrl are provided for app-switch mode.\n * @private\n * @param {object} options Payment session options.\n * @param {string} presentationMode The presentation mode.\n * @returns {BraintreeError|null} Error if validation fails, null otherwise.\n */\nPayPalCheckoutV6.prototype._validateAppSwitchUrls = function (\n  options,\n  presentationMode\n) {\n  if (\n    presentationMode === \"direct-app-switch\" &&\n    (!options.returnUrl || !options.cancelUrl)\n  ) {\n    return new BraintreeError(\n      errors.PAYPAL_CHECKOUT_V6_APP_SWITCH_URLS_REQUIRED\n    );\n  }\n\n  return null;\n};\n\n/**\n * Formats plan metadata for billing agreement creation.\n * @private\n * @param {object} plan - Plan metadata object containing billing cycles and other properties.\n * @returns {object} Formatted plan metadata for the API.\n */\nPayPalCheckoutV6.prototype._formatPlanMetadata = function (plan) {\n  var planProperties = [\n    \"currencyIsoCode\",\n    \"name\",\n    \"oneTimeFeeAmount\",\n    \"productDescription\",\n    \"productPrice\",\n    \"productQuantity\",\n    \"shippingAmount\",\n    \"taxAmount\",\n    \"totalAmount\",\n  ];\n  var requiredBillingCycle = [\n    \"billingFrequency\",\n    \"billingFrequencyUnit\",\n    \"numberOfExecutions\",\n    \"sequence\",\n    \"startDate\",\n    \"trial\",\n    \"pricingScheme\",\n  ];\n  var formattedPlan = { billingCycles: [] };\n  var cycleIndex, billingCycle, formattedBillingCycle, cyclePropertyIndex;\n  var planPropertyIndex;\n\n  if (plan.hasOwnProperty(\"billingCycles\")) {\n    for (cycleIndex = 0; cycleIndex < plan.billingCycles.length; cycleIndex++) {\n      billingCycle = plan.billingCycles[cycleIndex];\n      formattedBillingCycle = {};\n\n      for (\n        cyclePropertyIndex = 0;\n        cyclePropertyIndex < requiredBillingCycle.length;\n        cyclePropertyIndex++\n      ) {\n        formattedBillingCycle[requiredBillingCycle[cyclePropertyIndex]] =\n          billingCycle[requiredBillingCycle[cyclePropertyIndex]];\n      }\n      formattedPlan.billingCycles.push(formattedBillingCycle);\n    }\n  }\n\n  for (\n    planPropertyIndex = 0;\n    planPropertyIndex < planProperties.length;\n    planPropertyIndex++\n  ) {\n    formattedPlan[planProperties[planPropertyIndex]] =\n      plan[planProperties[planPropertyIndex]];\n  }\n\n  return formattedPlan;\n};\n\n/**\n * Loads the PayPal Web SDK v6 onto the page.\n * @public\n * @param {object} [options] Options for loading the PayPal SDK.\n * @param {string} [options.env] Environment override. Accepts 'stage' (msmaster) or 'teBraintree'.\n * @example\n * paypalCheckoutV6Instance.loadPayPalSDK().then(function () {\n *   // PayPal V6 SDK is now loaded\n * });\n * @example\n * var options = {\n *   env: 'stage'\n * };\n * paypalCheckoutV6Instance.loadPayPalSDK(options).then(function () {\n *   // PayPal V6 SDK is now loaded from the stage environment\n * });\n * @returns {Promise} Returns a promise that resolves when the SDK has been loaded.\n */\nPayPalCheckoutV6.prototype.loadPayPalSDK = function (options) {\n  var self = this;\n\n  return this._clientPromise.then(function (client) {\n    var config = client.getConfiguration();\n    var env = config.gatewayConfiguration.environment;\n    var subdomain = env === \"production\" ? \"\" : \"sandbox.\";\n    var scriptUrl;\n\n    if (\n      options &&\n      options.env &&\n      constants.PAYPAL_V6_ENVIRONMENT[options.env]\n    ) {\n      scriptUrl = constants.PAYPAL_V6_ENVIRONMENT[options.env];\n    } else {\n      scriptUrl = constants.PAYPAL_V6_SDK_BASE_URL.replace(\"{ENV}\", subdomain);\n    }\n\n    if (window.paypal && window.paypal.version) {\n      analytics.sendEvent(\n        client,\n        constants.ANALYTICS_EVENTS.SDK_ALREADY_LOADED\n      );\n      return Promise.resolve(self);\n    }\n\n    analytics.sendEvent(client, constants.ANALYTICS_EVENTS.SDK_LOAD_STARTED);\n\n    // forceScriptReload so a previously failed load's cached rejection can't block a retry\n    return assets\n      .loadScript({\n        src: scriptUrl,\n        forceScriptReload: true,\n      })\n      .then(function (script) {\n        self._paypalScript = script;\n        analytics.sendEvent(\n          client,\n          constants.ANALYTICS_EVENTS.SDK_LOAD_SUCCEEDED\n        );\n\n        return self;\n      })\n      .catch(function (err) {\n        analytics.sendEventPlus(\n          client,\n          constants.ANALYTICS_EVENTS.SDK_LOAD_FAILED,\n          assetLoadDetail(err)\n        );\n\n        return Promise.reject(\n          convertToBraintreeError(\n            err,\n            errors.PAYPAL_CHECKOUT_V6_SDK_SCRIPT_LOAD_FAILED\n          )\n        );\n      });\n  });\n};\n\n/**\n * Creates a PayPal SDK instance using the Braintree client token.\n * @private\n * @param {object} options Options for SDK instance creation.\n * @param {Array<string>} options.components Components array specifying which PayPal components to load (e.g., [\"paypal-payments\"], [\"paypal-billing-agreements\"], [\"paypal-messages\"]).\n * @returns {Promise} Resolves with the PayPal SDK instance.\n */\nPayPalCheckoutV6.prototype._createPayPalInstance = function (options) {\n  return this._clientPromise.then(function (client) {\n    var config = client.getConfiguration();\n    var clientId = config.gatewayConfiguration.paypal.clientId;\n\n    options = assign(\n      {\n        clientId: clientId,\n        components: options.components,\n        pageType: \"checkout\",\n      },\n      options\n    );\n\n    if (config.analyticsMetadata && config.analyticsMetadata.sessionId) {\n      options.clientMetadataId = config.analyticsMetadata.sessionId;\n    }\n\n    analytics.sendEvent(\n      client,\n      constants.ANALYTICS_EVENTS.CREATE_INSTANCE_STARTED\n    );\n\n    return window.paypal\n      .createInstance(options)\n      .then(function (instance) {\n        analytics.sendEvent(\n          client,\n          constants.ANALYTICS_EVENTS.CREATE_INSTANCE_SUCCEEDED\n        );\n\n        return instance;\n      })\n      .catch(function (err) {\n        analytics.sendEvent(\n          client,\n          constants.ANALYTICS_EVENTS.CREATE_INSTANCE_FAILED\n        );\n        throw convertToBraintreeError(err, {\n          type: errors.PAYPAL_CHECKOUT_V6_SDK_INITIALIZATION_FAILED.type,\n          code: errors.PAYPAL_CHECKOUT_V6_SDK_INITIALIZATION_FAILED.code,\n          message: errors.PAYPAL_CHECKOUT_V6_SDK_INITIALIZATION_FAILED.message,\n        });\n      });\n  });\n};\n\n/**\n * @typedef {object} PayPalCheckoutV6~lineItem\n * @property {string} quantity Number of units of the item purchased.\n * @property {string} unitAmount Per-unit price of the item.\n * @property {string} name Item name. Maximum 127 characters.\n * @property {string} kind Indicates whether the line item is a debit (sale) or credit (refund). Accepted values: `debit` and `credit`.\n * @property {?string} unitTaxAmount Per-unit tax price of the item.\n * @property {?string} description Item description. Maximum 127 characters.\n */\n\n/**\n * Initializes a PayPal SDK instance for the given component type.\n * This is called eagerly to kick off instance creation before user interaction,\n * allowing session.start() to execute synchronously for Safari compatibility.\n * The promise is cached on the instance (e.g., self._checkoutInstancePromise).\n * Does nothing if the instance already exists or the SDK is not available.\n * @private\n * @param {string} instanceType The type of instance: 'checkout', 'vault', or 'messages'.\n * @returns {void}\n */\nPayPalCheckoutV6.prototype._initializePayPalInstance = function (instanceType) {\n  var self = this;\n  var instanceConfig = {\n    checkout: {\n      instanceKey: \"_paypalInstance\",\n      promiseKey: \"_checkoutInstancePromise\",\n      components: [\"paypal-payments\"],\n    },\n    vault: {\n      instanceKey: \"_paypalVaultInstance\",\n      promiseKey: \"_vaultInstancePromise\",\n      components: [\"paypal-billing-agreements\"],\n    },\n    messages: {\n      instanceKey: \"_paypalMessagesSdkInstance\",\n      promiseKey: \"_messagesInstancePromise\",\n      components: [\"paypal-messages\"],\n    },\n  };\n\n  var config = instanceConfig[instanceType];\n  var instanceKey = config.instanceKey;\n  var promiseKey = config.promiseKey;\n  var components = config.components;\n\n  // If instance already exists, promise already exists, or SDK not available, nothing to do\n  if (self[instanceKey] || self[promiseKey] || !self._isPayPalSdkAvailable()) {\n    return;\n  }\n\n  // Create and cache the promise\n  self[promiseKey] = self._clientPromise\n    .then(function () {\n      return self._createPayPalInstance({\n        components: components,\n      });\n    })\n    .then(function (instance) {\n      self[instanceKey] = instance;\n\n      return instance;\n    })\n    .catch(function (err) {\n      // Clear the promise cache on error to allow retry on next call\n      self[promiseKey] = null;\n\n      return Promise.reject(err);\n    });\n};\n\n/**\n * @typedef {object} PayPalCheckoutV6~shippingOption\n * @property {string} id A unique ID that identifies a shipping option.\n * @property {string} label A description for the shipping option.\n * @property {boolean} selected Whether this option is pre-selected.\n * @property {string} type The shipping type: `SHIPPING` or `PICKUP`.\n * @property {object} amount The shipping cost.\n * @property {string} amount.currency The currency code.\n * @property {string} amount.value The shipping cost amount.\n */\n\n/**\n * @typedef {object} PayPalCheckoutV6~pricingScheme\n * @property {string} pricingModel The pricing model. Options are `FIXED`, `VARIABLE`, or `AUTO_RELOAD`.\n * @property {string} price The price for the billing cycle.\n * @property {string} reloadThresholdAmount The amount at which to reload on auto_reload plans.\n */\n\n/**\n * @typedef {Object} PayPalCheckoutV6~billingCycles\n * @property {(string|number)} billingFrequency The frequency of billing. This value must be a whole number and can't be negative or zero.\n * @property {string} billingFrequencyUnit The unit of billing frequency. Options are `DAY`, `WEEK`, `MONTH`, or `YEAR`.\n * @property {(string|number)} numberOfExecutions The number of executions for the billing cycle.\n * @property {(string|number)} sequence The order in the upcoming billing cycles.\n * @property {string} startDate The start date in ISO 8601 format (`2024-04-06T00:00:00Z`). If populated and the intent is to charge the buyer for the billing cycle at the checkout, it should be populated as current time in ISO 8601 format.\n * @property {boolean} trial Indicates if the billing cycle is a trial.\n * @property {pricingScheme} pricingScheme The {@link PayPalCheckoutV6~pricingScheme|pricing scheme object} for this billing cycle.\n */\n\n/**\n * @typedef {Object} PayPalCheckoutV6~planMetadata\n * @property {billingCycles[]} [billingCycles] An array of {@link PayPalCheckoutV6~billingCycles|billing cycles} for this plan.\n * @property {string} currencyIsoCode The ISO code for the currency, for example `USD`.\n * @property {string} name The name of the plan.\n * @property {(string|number)} oneTimeFeeAmount The one-time fee amount.\n * @property {string} productDescription A description of the product. (Accepts only one element)\n * @property {(string|number)} productPrice The price of the product.\n * @property {(string|number)} productQuantity The quantity of the product. (Accepts only one element)\n * @property {(string|number)} shippingAmount The amount for shipping.\n * @property {(string|number)} taxAmount The amount of tax.\n * @property {string} totalAmount This field is for vault with purchase only. Can include up to 2 decimal places. This value can't be negative or zero.\n */\n\n/**\n * @typedef {object} PayPalCheckoutV6~tokenizePayload\n * @property {string} nonce The payment method nonce.\n * @property {string} type The payment method type, always `PayPalAccount`.\n * @property {object} details Additional PayPal account details.\n * @property {string} details.email User's email address.\n * @property {string} details.payerId User's payer ID, the unique identifier for each PayPal account.\n * @property {string} details.firstName User's given name.\n * @property {string} details.lastName User's surname.\n * @property {?string} details.countryCode User's 2 character country code.\n * @property {?string} details.phone User's phone number (e.g. 555-867-5309).\n * @property {?object} details.shippingAddress User's shipping address details, only available if shipping address is enabled.\n * @property {string} details.shippingAddress.recipientName Recipient of postage.\n * @property {string} details.shippingAddress.line1 Street number and name.\n * @property {string} details.shippingAddress.line2 Extended address.\n * @property {string} details.shippingAddress.city City or locality.\n * @property {string} details.shippingAddress.state State or region.\n * @property {string} details.shippingAddress.postalCode Postal code.\n * @property {string} details.shippingAddress.countryCode 2 character country code (e.g. US).\n * @property {?object} details.billingAddress User's billing address details.\n * @property {string} details.billingAddress.line1 Street number and name.\n * @property {string} details.billingAddress.line2 Extended address.\n * @property {string} details.billingAddress.city City or locality.\n * @property {string} details.billingAddress.state State or region.\n * @property {string} details.billingAddress.postalCode Postal code.\n * @property {string} details.billingAddress.countryCode 2 character country code (e.g. US).\n * @property {?object} creditFinancingOffered This property will only be present when the customer pays with PayPal Credit.\n * @property {object} creditFinancingOffered.totalCost This is the estimated total payment amount including interest and fees the user will pay during the lifetime of the loan.\n * @property {string} creditFinancingOffered.totalCost.value An amount defined by ISO 4217 for the given currency.\n * @property {string} creditFinancingOffered.totalCost.currency The currency code for the amount.\n * @property {object} creditFinancingOffered.term This is the estimated amount per month that the customer will need to pay including fees and interest.\n * @property {number} creditFinancingOffered.term.term The number of months that the customer has to pay off this transaction.\n * @property {object} creditFinancingOffered.term.monthlyPayment The estimated amount per month.\n * @property {string} creditFinancingOffered.term.monthlyPayment.value An amount defined by ISO 4217 for the given currency.\n * @property {string} creditFinancingOffered.term.monthlyPayment.currency The currency code for the amount.\n * @property {object} creditFinancingOffered.totalInterest Estimated interest or fees amount the payer will have to pay during the lifetime of the loan.\n * @property {string} creditFinancingOffered.totalInterest.value An amount defined by ISO 4217 for the given currency.\n * @property {string} creditFinancingOffered.totalInterest.currency The currency code for the amount.\n * @property {boolean} creditFinancingOffered.payerAcceptance Status on whether the customer ultimately was approved for and chose to make the payment using the approved installment credit.\n * @property {boolean} creditFinancingOffered.cartAmountImmutable Indicates whether the cart amount is editable after payer's acceptance on PayPal side.\n * @property {?string} shippingOptionId The ID of the selected shipping option.\n * @property {?string} cobrandedCardLabel The label of the co-branded card used.\n */\n\n/**\n * Builds a billing agreement request object from options.\n * @private\n * @param {object} options Billing agreement options.\n * @returns {object} Formatted billing agreement request.\n */\nPayPalCheckoutV6.prototype._buildBillingAgreementRequest = function (options) {\n  var billingAgreementRequest = {};\n  var simpleProperties = [\n    \"billingAgreementDescription\",\n    \"userAction\",\n    \"offerCredit\",\n    \"locale\",\n    \"landingPageType\",\n    \"planType\",\n    \"displayName\",\n    \"returnUrl\",\n    \"cancelUrl\",\n    \"shippingAddressOverride\",\n    \"enableShippingAddress\",\n    \"shippingAddressEditable\",\n  ];\n  var propertyMap = {\n    billingAgreementDescription: \"description\",\n  };\n\n  simpleProperties.forEach(function (optionKey) {\n    var requestKey = propertyMap[optionKey] || optionKey;\n\n    if (options.hasOwnProperty(optionKey)) {\n      billingAgreementRequest[requestKey] = options[optionKey];\n    }\n  });\n\n  if (options.planMetadata) {\n    billingAgreementRequest.planMetadata = this._formatPlanMetadata(\n      options.planMetadata\n    );\n  }\n\n  if (options.amount && options.currency) {\n    billingAgreementRequest.amount = options.amount;\n    billingAgreementRequest.currency = options.currency;\n  }\n\n  // Always set this on the instance (even if undefined) so tokenization\n  // uses the correlation ID from the most recent call. When riskCorrelationId\n  // is omitted, this assignment implicitly resets to undefined, preventing\n  // stale correlation IDs from being used in subsequent tokenization calls.\n  this._riskCorrelationId = options.riskCorrelationId;\n  if (options.riskCorrelationId) {\n    billingAgreementRequest.riskCorrelationId = options.riskCorrelationId;\n  }\n\n  return billingAgreementRequest;\n};\n\n/**\n * Creates a vault setup token via Braintree backend for billing agreements.\n * @private\n * @param {object} options Billing agreement options.\n * @returns {Promise} Resolves with setup token data.\n */\n\nPayPalCheckoutV6.prototype._createBillingAgreementToken = function (options) {\n  var self = this;\n  var gatewayConfiguration = this._configuration.gatewayConfiguration;\n\n  // Always set this on the instance (even if undefined) so tokenization\n  // uses the correlation ID from the most recent call. When riskCorrelationId\n  // is omitted, this assignment implicitly resets to undefined, preventing\n  // stale correlation IDs from being used in subsequent tokenization calls.\n  this._riskCorrelationId = options.riskCorrelationId;\n\n  var payload = {\n    returnUrl: options.returnUrl || \"https://www.paypal.com/checkoutnow/error\",\n    cancelUrl: options.cancelUrl || \"https://www.paypal.com/checkoutnow/error\",\n    offerPaypalCredit: options.offerCredit === true,\n    merchantAccountId: this._merchantAccountId,\n    experienceProfile: {\n      brandName: options.displayName || gatewayConfiguration.paypal.displayName,\n      localeCode: options.locale,\n      noShipping: (!options.enableShippingAddress).toString(),\n      landingPageType: options.landingPageType,\n    },\n  };\n\n  var isAddressOverride = false;\n\n  if (options.hasOwnProperty(\"shippingAddressEditable\")) {\n    isAddressOverride = options.shippingAddressEditable === false;\n  }\n\n  payload.experienceProfile.addressOverride = isAddressOverride;\n\n  if (options.planType) {\n    payload.planType = options.planType;\n  }\n\n  if (options.description || options.billingAgreementDescription) {\n    payload.description =\n      options.description || options.billingAgreementDescription;\n  }\n\n  if (options.planMetadata) {\n    payload.planMetadata = this._formatPlanMetadata(options.planMetadata);\n  }\n\n  if (options.amount && options.currency) {\n    payload.amount = options.amount;\n    payload.currencyIsoCode = options.currency;\n  }\n\n  if (options.shippingAddressOverride) {\n    payload.shippingAddress = options.shippingAddressOverride;\n  }\n\n  if (options.hasOwnProperty(\"userAction\")) {\n    payload.experienceProfile.userAction = options.userAction;\n  }\n\n  if (options.riskCorrelationId) {\n    payload.correlationId = options.riskCorrelationId;\n  }\n\n  return this._clientPromise.then(function (client) {\n    analytics.sendEvent(\n      client,\n      constants.ANALYTICS_EVENTS.CREATE_BA_TOKEN_STARTED\n    );\n\n    return client\n      .request({\n        endpoint: \"paypal_hermes/setup_billing_agreement\",\n        method: \"post\",\n        data: payload,\n      })\n      .then(function (response) {\n        analytics.sendEvent(\n          client,\n          constants.ANALYTICS_EVENTS.CREATE_BA_TOKEN_SUCCEEDED\n        );\n\n        var approvalTokenId = response.agreementSetup.tokenId;\n\n        if (!approvalTokenId) {\n          throw new Error(\n            \"Could not extract approval token from billing agreement setup\"\n          );\n        }\n\n        return {\n          approvalTokenId: approvalTokenId,\n          agreementSetup: response.agreementSetup,\n        };\n      })\n      .catch(function (err) {\n        analytics.sendEvent(\n          client,\n          constants.ANALYTICS_EVENTS.CREATE_BA_TOKEN_FAILED\n        );\n\n        if (self._setupError) {\n          throw self._setupError;\n        }\n\n        throw convertToBraintreeError(err, {\n          type: errors.PAYPAL_CHECKOUT_V6_BILLING_AGREEMENT_CREATION_FAILED\n            .type,\n          code: errors.PAYPAL_CHECKOUT_V6_BILLING_AGREEMENT_CREATION_FAILED\n            .code,\n          message:\n            errors.PAYPAL_CHECKOUT_V6_BILLING_AGREEMENT_CREATION_FAILED.message,\n        });\n      });\n  });\n};\n\n/**\n * Creates a PayPal order via Braintree backend.\n * @private\n * @param {object} options Payment options.\n * @param {object} [config] Optional configuration overrides (returnUrl, cancelUrl).\n * @returns {Promise} Resolves with order data including orderId.\n */\n// eslint-disable-next-line complexity\nPayPalCheckoutV6.prototype._createPaymentResource = function (options) {\n  var self = this;\n  var gatewayConfiguration = this._configuration.gatewayConfiguration;\n  var intent = options.intent || \"capture\";\n  var key;\n\n  if (intent === \"capture\") {\n    intent = \"sale\";\n  }\n\n  // Always set this on the instance (even if undefined) so tokenization\n  // uses the correlation ID from the most recent call. When riskCorrelationId\n  // is omitted, this assignment implicitly resets to undefined, preventing\n  // stale correlation IDs from being used in subsequent tokenization calls.\n  this._riskCorrelationId = options.riskCorrelationId;\n\n  var payload = {\n    amount: options.amount,\n    currencyIsoCode: options.currency,\n    intent: intent,\n    returnUrl: options.returnUrl || \"https://www.paypal.com/checkoutnow/error\",\n    cancelUrl: options.cancelUrl || \"https://www.paypal.com/checkoutnow/error\",\n    experienceProfile: {\n      brandName: options.displayName || gatewayConfiguration.paypal.displayName,\n      localeCode: options.locale,\n      noShipping: (!options.enableShippingAddress).toString(),\n      landingPageType: options.landingPageType,\n    },\n  };\n\n  var isAddressOverride = false;\n\n  if (options.hasOwnProperty(\"shippingAddressEditable\")) {\n    isAddressOverride = options.shippingAddressEditable === false;\n  }\n  payload.experienceProfile.addressOverride = isAddressOverride;\n\n  if (options.hasOwnProperty(\"userAction\")) {\n    payload.experienceProfile.userAction = options.userAction;\n  }\n\n  if (options.riskCorrelationId) {\n    payload.correlationId = options.riskCorrelationId;\n  }\n\n  if (this._merchantAccountId) {\n    payload.merchantAccountId = this._merchantAccountId;\n  }\n\n  if (options.lineItems) {\n    payload.lineItems = options.lineItems;\n  }\n\n  if (options.shippingOptions) {\n    payload.shippingOptions = options.shippingOptions;\n  }\n\n  if (options.userAuthenticationEmail) {\n    payload.payer_email = options.userAuthenticationEmail; // eslint-disable-line camelcase\n  }\n\n  if (options.amountBreakdown) {\n    payload.amountBreakdown = options.amountBreakdown;\n  }\n\n  if (options.offerCredit === true) {\n    payload.offerPaypalCredit = true;\n  }\n\n  if (options.requestBillingAgreement) {\n    payload.requestBillingAgreement = true;\n  }\n\n  if (options.billingAgreementDetails) {\n    payload.billingAgreementDetails = options.billingAgreementDetails;\n  }\n\n  if (options.planType) {\n    payload.planType = options.planType;\n  }\n\n  if (options.planMetadata) {\n    payload.planMetadata = this._formatPlanMetadata(options.planMetadata);\n  }\n\n  if (options.shippingCallbackUrl) {\n    payload.shippingCallbackUrl = options.shippingCallbackUrl;\n  }\n\n  // Spread shippingAddressOverride properties directly onto payload\n  // (used with contactPreference for Contact Module)\n  if (options.shippingAddressOverride) {\n    for (key in options.shippingAddressOverride) {\n      if (options.shippingAddressOverride.hasOwnProperty(key)) {\n        payload[key] = options.shippingAddressOverride[key];\n      }\n    }\n  }\n\n  if (options.contactPreference) {\n    payload.contactPreference = options.contactPreference;\n  }\n\n  if (options.vaultInitiatedCheckoutPaymentMethodToken) {\n    payload.vaultInitiatedCheckoutPaymentMethodToken =\n      options.vaultInitiatedCheckoutPaymentMethodToken;\n  }\n\n  return this._clientPromise.then(function (client) {\n    analytics.sendEvent(\n      client,\n      constants.ANALYTICS_EVENTS.CREATE_ORDER_STARTED\n    );\n\n    return client\n      .request({\n        endpoint: \"paypal_hermes/create_payment_resource\",\n        method: \"post\",\n        data: payload,\n      })\n      .then(function (response) {\n        analytics.sendEvent(\n          client,\n          constants.ANALYTICS_EVENTS.CREATE_ORDER_SUCCEEDED\n        );\n\n        // Extract order ID from response\n        var redirectUrl = response.paymentResource.redirectUrl;\n        var match = redirectUrl.match(/token=([^&]+)/);\n        var orderId = match ? match[1] : null;\n\n        if (!orderId) {\n          throw new Error(\"Could not extract order ID from payment resource\");\n        }\n\n        self._contextId = orderId;\n\n        return {\n          orderId: orderId,\n          paymentResource: response.paymentResource,\n        };\n      })\n      .catch(function (err) {\n        analytics.sendEvent(\n          client,\n          constants.ANALYTICS_EVENTS.CREATE_ORDER_FAILED\n        );\n\n        if (self._setupError) {\n          throw self._setupError;\n        }\n\n        throw convertToBraintreeError(err, {\n          type: errors.PAYPAL_CHECKOUT_V6_ORDER_CREATION_FAILED.type,\n          code: errors.PAYPAL_CHECKOUT_V6_ORDER_CREATION_FAILED.code,\n          message: errors.PAYPAL_CHECKOUT_V6_ORDER_CREATION_FAILED.message,\n        });\n      });\n  });\n};\n\n/**\n * Creates session options for checkout flow including callbacks and commit flag.\n * @private\n * @param {object} client The Braintree client instance.\n * @param {object} options Payment session options containing callbacks.\n * @param {boolean} [isCheckoutWithVault=false] Whether this is a checkout-with-vault flow.\n * @returns {object} Session options for PayPal session including commit and callbacks.\n */\nPayPalCheckoutV6.prototype._createCheckoutSessionOptions = function (\n  client,\n  options,\n  isCheckoutWithVault\n) {\n  var approveEvent = isCheckoutWithVault\n    ? constants.ANALYTICS_EVENTS.CHECKOUT_WITH_VAULT_APPROVED\n    : constants.ANALYTICS_EVENTS.PAYMENT_APPROVED;\n  var cancelEvent = isCheckoutWithVault\n    ? constants.ANALYTICS_EVENTS.CHECKOUT_WITH_VAULT_CANCELED\n    : constants.ANALYTICS_EVENTS.PAYMENT_CANCELED;\n  var commit = typeof options.commit === \"boolean\" ? options.commit : true;\n\n  var sessionOptions = {\n    commit: commit,\n    onApprove: function (data) {\n      analytics.sendEvent(client, approveEvent);\n\n      return options.onApprove(data);\n    },\n    onCancel: function (data) {\n      analytics.sendEvent(client, cancelEvent);\n      if (options && typeof options.onCancel === \"function\") {\n        return options.onCancel(data);\n      }\n\n      return undefined;\n    },\n  };\n\n  if (options && typeof options.onError === \"function\") {\n    sessionOptions.onError = function (err) {\n      return options.onError(err);\n    };\n  }\n\n  if (options && typeof options.onShippingAddressChange === \"function\") {\n    sessionOptions.onShippingAddressChange = function (data) {\n      return options.onShippingAddressChange(data);\n    };\n  }\n\n  if (options && typeof options.onShippingOptionsChange === \"function\") {\n    sessionOptions.onShippingOptionsChange = function (data) {\n      return options.onShippingOptionsChange(data);\n    };\n  }\n\n  return sessionOptions;\n};\n\n/**\n * Creates order promise for checkout flow with error handling.\n * @private\n * @param {object} paymentOptions Payment resource options.\n * @param {function} [onError] Optional error callback.\n * @returns {Promise} Promise resolving to { orderId }.\n */\nPayPalCheckoutV6.prototype._createOrderPromise = function (\n  paymentOptions,\n  onError\n) {\n  return this._createPaymentResource(paymentOptions)\n    .then(function (orderData) {\n      return { orderId: orderData.orderId };\n    })\n    .catch(function (err) {\n      if (onError) {\n        onError(err);\n      }\n      throw err;\n    });\n};\n\n/**\n * Starts a checkout payment session with the given instance and client.\n * @private\n * @param {object} instance PayPal SDK instance.\n * @param {object} client Braintree client instance.\n * @param {string} presentationMode How to present the PayPal flow.\n * @param {string} sessionType Type of session: 'paypal', 'paypal-credit', or 'pay-later'.\n * @param {object} options Payment session options.\n * @param {object} paymentOptions Payment resource options.\n * @returns {Promise} Promise from PayPal session.start().\n */\nPayPalCheckoutV6.prototype._startCheckoutSession = function (\n  instance,\n  client,\n  presentationMode,\n  sessionType,\n  options,\n  paymentOptions\n) {\n  var sessionMethod;\n\n  if (sessionType === \"paypal-credit\") {\n    sessionMethod = \"createPayPalCreditOneTimePaymentSession\";\n  } else if (sessionType === \"pay-later\") {\n    sessionMethod = \"createPayLaterOneTimePaymentSession\";\n  } else {\n    sessionMethod = \"createPayPalOneTimePaymentSession\";\n  }\n\n  var isCheckoutWithVault = Boolean(paymentOptions.requestBillingAgreement);\n  var startEvent = isCheckoutWithVault\n    ? constants.ANALYTICS_EVENTS.CHECKOUT_WITH_VAULT_STARTED\n    : constants.ANALYTICS_EVENTS.PAYMENT_STARTED;\n\n  analytics.sendEvent(client, startEvent);\n\n  var session = instance[sessionMethod](\n    this._createCheckoutSessionOptions(client, options, isCheckoutWithVault)\n  );\n\n  return session.start(\n    {\n      presentationMode: presentationMode,\n    },\n    this._createOrderPromise(paymentOptions, options.onError)\n  );\n};\n\n/**\n * Creates session callback handlers for billing agreement flow with analytics.\n * @private\n * @param {object} client The Braintree client instance.\n * @param {object} options Billing agreement session options containing callbacks.\n * @returns {object} Callback configuration for PayPal session.\n */\nPayPalCheckoutV6.prototype._createBillingSessionCallbacks = function (\n  client,\n  options\n) {\n  return {\n    onApprove: function (data) {\n      analytics.sendEvent(\n        client,\n        constants.ANALYTICS_EVENTS.CREATE_BA_SESSION_APPROVED\n      );\n\n      return options.onApprove(data);\n    },\n    onCancel: function (data) {\n      analytics.sendEvent(\n        client,\n        constants.ANALYTICS_EVENTS.CREATE_BA_SESSION_CANCELED\n      );\n      if (options.onCancel && typeof options.onCancel === \"function\") {\n        options.onCancel(data);\n      }\n    },\n    onError: function (err) {\n      analytics.sendEvent(\n        client,\n        constants.ANALYTICS_EVENTS.CREATE_BA_SESSION_FAILED\n      );\n      if (options.onError && typeof options.onError === \"function\") {\n        options.onError(err);\n      }\n    },\n  };\n};\n\n/**\n * Creates billing token promise for vault flow.\n * @private\n * @param {object} billingAgreementRequest Billing agreement request data.\n * @returns {Promise} Promise resolving to { billingToken }.\n */\nPayPalCheckoutV6.prototype._createBillingTokenPromise = function (\n  billingAgreementRequest\n) {\n  var paymentOptions = {\n    flow: \"vault\",\n    billingAgreementDescription: billingAgreementRequest.description,\n    planType: billingAgreementRequest.planType,\n    planMetadata: billingAgreementRequest.planMetadata,\n    amount: billingAgreementRequest.amount,\n    currency: billingAgreementRequest.currency,\n    shippingAddressOverride: billingAgreementRequest.shippingAddressOverride,\n    userAction: billingAgreementRequest.userAction,\n    offerCredit: billingAgreementRequest.offerCredit,\n    returnUrl: billingAgreementRequest.returnUrl,\n    cancelUrl: billingAgreementRequest.cancelUrl,\n  };\n\n  if (billingAgreementRequest.locale) {\n    paymentOptions.locale = billingAgreementRequest.locale;\n  }\n\n  if (billingAgreementRequest.landingPageType) {\n    paymentOptions.landingPageType = billingAgreementRequest.landingPageType;\n  }\n\n  if (billingAgreementRequest.hasOwnProperty(\"enableShippingAddress\")) {\n    paymentOptions.enableShippingAddress =\n      billingAgreementRequest.enableShippingAddress;\n  }\n\n  if (billingAgreementRequest.hasOwnProperty(\"shippingAddressEditable\")) {\n    paymentOptions.shippingAddressEditable =\n      billingAgreementRequest.shippingAddressEditable;\n  }\n\n  if (billingAgreementRequest.riskCorrelationId) {\n    paymentOptions.riskCorrelationId =\n      billingAgreementRequest.riskCorrelationId;\n  }\n\n  if (billingAgreementRequest.displayName) {\n    paymentOptions.displayName = billingAgreementRequest.displayName;\n  }\n\n  return this.createPayment(paymentOptions).then(function (billingToken) {\n    return { billingToken: billingToken };\n  });\n};\n\n/**\n * Starts a billing agreement session with the given instance and client.\n * @private\n * @param {object} instance PayPal SDK instance.\n * @param {object} client Braintree client instance.\n * @param {string} presentationMode How to present the PayPal flow.\n * @param {string} sessionType Type of session: 'paypal' or 'paypal-credit'.\n * @param {object} billingAgreementRequest Billing agreement request data.\n * @param {object} options Billing agreement session options.\n * @returns {Promise} Promise from PayPal session.start().\n */\nPayPalCheckoutV6.prototype._startBillingSession = function (\n  instance,\n  client,\n  presentationMode,\n  sessionType,\n  billingAgreementRequest,\n  options\n) {\n  var self = this;\n  var sessionMethod =\n    sessionType === \"paypal-credit\"\n      ? \"createPayPalCreditBillingAgreementWithoutPurchase\"\n      : \"createPayPalBillingAgreementWithoutPurchase\";\n\n  analytics.sendEvent(\n    client,\n    constants.ANALYTICS_EVENTS.CREATE_BA_SESSION_STARTED\n  );\n\n  var paypalSession = instance[sessionMethod](\n    this._createBillingSessionCallbacks(client, options)\n  );\n\n  analytics.sendEvent(\n    client,\n    constants.ANALYTICS_EVENTS.CREATE_BA_SESSION_SESSION_CREATED\n  );\n\n  var billingTokenPromise = self\n    ._createBillingTokenPromise(billingAgreementRequest)\n    .catch(function (err) {\n      if (options.onError) {\n        options.onError(err);\n      }\n      throw err;\n    });\n\n  return paypalSession.start(\n    { presentationMode: presentationMode },\n    billingTokenPromise\n  );\n};\n\n/**\n * Validates payment session options for conflicts.\n * @private\n * @param {object} options Payment session options.\n * @returns {void}\n * @throws {BraintreeError} If validation fails.\n */\nPayPalCheckoutV6.prototype._validatePaymentSessionOptions = function (options) {\n  // Validate that client-side and server-side shipping callbacks are not both used\n  if (\n    options.shippingCallbackUrl &&\n    (options.onShippingAddressChange || options.onShippingOptionsChange)\n  ) {\n    throw new BraintreeError(\n      errors.PAYPAL_CHECKOUT_V6_SHIPPING_CALLBACK_CONFLICT\n    );\n  }\n};\n\n/**\n * @private\n * @param {object} options Payment session options.\n * @param {string} sessionType Type of session: 'paypal' or 'paypal-credit'.\n * @returns {object} Payment session object with `start()` method.\n */\nPayPalCheckoutV6.prototype._createPaymentSession = function (\n  options,\n  sessionType\n) {\n  var self = this;\n\n  this._validatePaymentSessionOptions(options);\n\n  this._flow = \"checkout\";\n  this._sessionType = sessionType;\n\n  var paymentOptions = {\n    amount: options.amount,\n    currency: options.currency,\n    intent: options.intent || \"capture\",\n  };\n\n  var optionalProperties = [\n    \"offerCredit\",\n    \"lineItems\",\n    \"shippingOptions\",\n    \"userAuthenticationEmail\",\n    \"amountBreakdown\",\n    \"returnUrl\",\n    \"cancelUrl\",\n    \"requestBillingAgreement\",\n    \"billingAgreementDetails\",\n    \"displayName\",\n    \"shippingCallbackUrl\",\n    \"contactPreference\",\n    \"shippingAddressOverride\",\n    \"planType\",\n    \"planMetadata\",\n    \"locale\",\n    \"landingPageType\",\n    \"userAction\",\n    \"riskCorrelationId\",\n  ];\n\n  optionalProperties.forEach(function (property) {\n    if (options[property]) {\n      paymentOptions[property] = options[property];\n    }\n  });\n\n  if (options.hasOwnProperty(\"enableShippingAddress\")) {\n    paymentOptions.enableShippingAddress = options.enableShippingAddress;\n  }\n\n  if (options.hasOwnProperty(\"shippingAddressEditable\")) {\n    paymentOptions.shippingAddressEditable = options.shippingAddressEditable;\n  }\n\n  return {\n    /**\n     * Starts the PayPal payment flow.\n     * @param {object} [presentationOptions] Options for how to present PayPal.\n     * @param {string} [presentationOptions.presentationMode='auto'] Presentation mode.\n     * @returns {Promise} Resolves when payment flow completes.\n     */\n    start: function (presentationOptions) {\n      presentationOptions = presentationOptions || {};\n      var presentationMode =\n        presentationOptions.presentationMode ||\n        options.presentationMode ||\n        \"auto\";\n      var paypalInstance = self._paypalInstance;\n\n      var appSwitchError = self._validateAppSwitchUrls(\n        options,\n        presentationMode\n      );\n\n      if (appSwitchError) {\n        return Promise.reject(appSwitchError);\n      }\n\n      // If the PayPal instance is ready, start synchronously to preserve Safari's transient activation\n      if (paypalInstance && self._client) {\n        return self._startCheckoutSession(\n          paypalInstance,\n          self._client,\n          presentationMode,\n          sessionType,\n          options,\n          paymentOptions\n        );\n      }\n\n      // If instance isn't ready yet, wait for it. This path may _not_ work in Safari\n      // due to transient activation expiring, but works in Chrome/Firefox/Edge\n      if (self._checkoutInstancePromise) {\n        return self._checkoutInstancePromise\n          .then(function (instance) {\n            return self._clientPromise.then(function (client) {\n              return self._startCheckoutSession(\n                instance,\n                client,\n                presentationMode,\n                sessionType,\n                options,\n                paymentOptions\n              );\n            });\n          })\n          .catch(function (err) {\n            if (options.onError) {\n              options.onError(err);\n            }\n            throw err;\n          });\n      }\n\n      // No instance and no promise - this shouldn't happen if loadPayPalSDK() was called\n      return Promise.reject(\n        new BraintreeError(errors.PAYPAL_CHECKOUT_V6_INSTANCE_NOT_READY)\n      );\n    },\n  };\n};\n\n/**\n * Creates a one-time PayPal payment session.\n * @public\n * @param {object} options Payment session options.\n * @param {string} options.amount The payment amount (e.g., '10.00').\n * @param {string} options.currency The currency code (e.g., 'USD').\n * @param {string} [options.intent='capture'] Payment intent: 'authorize', 'capture', or 'order'.\n * @param {boolean} [options.commit=true] Controls the flow type: `true` for \"Pay Now\" (immediate payment), `false` for \"Continue\" (review and confirm). Defaults to `true`.\n * @param {boolean} [options.offerCredit=false] Offers PayPal Credit as the default funding instrument for the transaction. If the customer isn't pre-approved for PayPal Credit, they will be prompted to apply for it.\n * @param {function} options.onApprove Called when the customer approves the payment.\n * @param {function} [options.onCancel] Called when the customer cancels the payment.\n * @param {function} [options.onError] Called when an error occurs.\n * @param {function} [options.onShippingAddressChange] Called when the customer changes their shipping address. Receives data with errors (object), orderId (string), and shippingAddress (object with city, countryCode, postalCode, state). Return a Promise to update the payment details.\n * @param {function} [options.onShippingOptionsChange] Called when the customer selects a different shipping option. Receives data with errors (object), orderId (string), and selectedShippingOption (object with id, label, amount, type, selected). Return a Promise to update the payment details.\n * @param {string} [options.shippingCallbackUrl] Optional server-side shipping callback URL to be notified when a customer updates their shipping address or options. A callback request will be sent to the merchant server at this URL. Note: Cannot be used with onShippingAddressChange or onShippingOptionsChange callbacks.\n * @param {lineItem[]} [options.lineItems] Line items for this transaction.\n * @param {shippingOption[]} [options.shippingOptions] Shipping options.\n * @param {string} [options.userAuthenticationEmail] Pre-fill the PayPal login email.\n * @param {object} [options.amountBreakdown] Breakdown of the amount.\n * @param {string} [options.returnUrl] URL to return to after payment completion. This parameter is required when using direct-app-switch presentation mode; for other flows, it is optional and defaults to the PayPal error page if not provided.\n * @param {string} [options.cancelUrl] URL to return to after payment cancellation. This parameter is required when using direct-app-switch presentation mode; for other flows, it is optional and defaults to the PayPal error page if not provided.\n * @param {string} [options.displayName] The merchant name displayed inside of the PayPal lightbox; defaults to the company name on your Braintree account.\n * @param {object} [options.shippingAddressOverride] Pre-collected shipping address to display in the PayPal flow. Used with contactPreference to show merchant-provided contact information.\n * @param {string} options.shippingAddressOverride.line1 Street address.\n * @param {string} [options.shippingAddressOverride.line2] Street address (extended).\n * @param {string} options.shippingAddressOverride.city City.\n * @param {string} options.shippingAddressOverride.state State.\n * @param {string} options.shippingAddressOverride.postalCode Postal code.\n * @param {string} options.shippingAddressOverride.countryCode Country code (e.g., 'US').\n * @param {string} [options.shippingAddressOverride.phone] Phone number.\n * @param {string} [options.shippingAddressOverride.recipientName] Recipient's name.\n * @param {string} [options.shippingAddressOverride.recipientEmail] Email address of the recipient.\n * @param {string} [options.contactPreference] Optional field to control contact information display. Can be 'NO_CONTACT_INFO' (default, no contact info shown), 'RETAIN_CONTACT_INFO' (contact info shown but not editable), or 'UPDATE_CONTACT_INFO' (contact info shown and editable). Required if using different recipient via shippingAddressOverride.\n * * Note: this feature is currently available for US-based merchants only; see https://developer.paypal.com/docs/checkout/standard/customize/contact-module/#availability for up-to-date regional availability.\n * @param {string} [options.locale] Locale code (e.g., 'en_US', 'fr_FR') to customize the PayPal experience language and format.\n * @param {string} [options.landingPageType] Landing page type: 'login' (shows PayPal login) or 'billing' (shows guest checkout). Defaults to PayPal's selection.\n * @param {string} [options.userAction] Changes the call-to-action in the PayPal flow: 'continue' or 'pay_now'.\n * @param {boolean} [options.enableShippingAddress=false] When `true`, prompts the customer for a shipping address.\n * @param {boolean} [options.shippingAddressEditable=true] Controls whether the displayed shipping address is editable. Pass `false` to make it read-only.\n * @param {string} [options.riskCorrelationId] Risk correlation ID for advanced fraud protection. Stored and used during tokenization.\n * @param {string} [options.presentationMode='auto'] How to present PayPal: 'auto', 'popup', 'modal', 'redirect', 'payment-handler', 'direct-app-switch'.\n * @example\n * // Standard PayPal payment\n * var session = paypalCheckoutV6Instance.createOneTimePaymentSession({\n *   amount: '10.00',\n *   currency: 'USD',\n *   intent: 'capture',\n *   onApprove: function (data) {\n *     return paypalCheckoutV6Instance.tokenizePayment(data).then(function (payload) {\n *       // Send payload.nonce to your server\n *     });\n *   },\n *   onCancel: function () {\n *     console.log('Payment canceled');\n *   },\n *   onError: function (err) {\n *     console.error('Payment error:', err);\n *   }\n * });\n *\n * @example\n * // PayPal payment with direct app switch\n * async function initializePayPal() {\n *   try {\n *     // Create client and PayPal Checkout v6 instances\n *     const clientInstance = await braintree.client.create({\n *       authorization: 'your_client_token'\n *     });\n *\n *     const paypalCheckoutV6Instance = await braintree.paypalCheckoutV6.create({\n *       client: clientInstance\n *     });\n *\n *     // Load the PayPal SDK\n *     await paypalCheckoutV6Instance.loadPayPalSDK();\n *\n *     // Create a one-time payment session\n *     const session = paypalCheckoutV6Instance.createOneTimePaymentSession({\n *       amount: '10.00',\n *       currency: 'USD',\n *       intent: 'capture',\n *       // When using app switch, returnUrl and cancelUrl must be specified\n *       // These should be URLs in your application that can handle the return flow\n *       returnUrl: 'https://example.com/return',\n *       cancelUrl: 'https://example.com/cancel',\n *       onApprove: function (data) {\n *         return paypalCheckoutV6Instance.tokenizePayment(data).then(function (payload) {\n *           // Send payload.nonce to your server\n *           console.log('Payment approved, nonce:', payload.nonce);\n *         });\n *       },\n *       onCancel: function () {\n *         console.log('Payment canceled');\n *       },\n *       onError: function (err) {\n *         console.error('Payment error:', err);\n *       }\n *     });\n *\n *     // First, check if returning from app switch using the hasReturned() method\n *     // This should be done when your page loads, before showing any UI\n *     if (session.hasReturned()) {\n *       // Resume the payment session to complete the flow\n *       await session.resume();\n *     } else {\n *       // Initial flow - set up button click handler\n *       document.getElementById('paypal-button').addEventListener('click', async () => {\n *         try {\n *           // Start the payment with app switch configuration\n *           const { redirectURL } = await session.start({\n *             // Use direct-app-switch mode to enable app switch flow\n *             presentationMode: 'direct-app-switch',\n *             autoRedirect: {\n *               enabled: true\n *             }\n *           });\n *\n *           // If autoRedirect is disabled or fails, manually redirect\n *           if (redirectURL) {\n *             window.location.assign(redirectURL);\n *           }\n *         } catch (error) {\n *           console.error('Error starting payment:', error);\n *         }\n *       });\n *     }\n *   } catch (error) {\n *     console.error('Initialization error:', error);\n *   }\n * }\n *\n * // Initialize on page load\n * initializePayPal();\n *\n * @example\n * // PayPal Credit payment\n * var session = paypalCheckoutV6Instance.createOneTimePaymentSession({\n *   amount: '10.00',\n *   currency: 'USD',\n *   offerCredit: true, // Offer PayPal Credit\n *   onApprove: function (data) {\n *     return paypalCheckoutV6Instance.tokenizePayment(data).then(function (payload) {\n *       // payload will include creditFinancingOffered if customer used PayPal Credit\n *       // Send payload.nonce to your server\n *     });\n *   }\n * });\n *\n * @example\n * // Dynamic shipping price calculation with onShippingAddressChange\n * var session = paypalCheckoutV6Instance.createOneTimePaymentSession({\n *   amount: '10.00',\n *   currency: 'USD',\n *   lineItems: [\n *     {\n *       quantity: '1',\n *       unitAmount: '10.00',\n *       name: 'Product Name',\n *       kind: 'debit'\n *     }\n *   ],\n *   shippingOptions: [\n *     {\n *       id: 'economy',\n *       label: 'Economy Shipping (5-7 days)',\n *       selected: true,\n *       type: 'SHIPPING',\n *       amount: {\n *         currency: 'USD',\n *         value: '0.00'\n *       }\n *     },\n *     {\n *       id: 'express',\n *       label: 'Express Shipping (2-3 days)',\n *       selected: false,\n *       type: 'SHIPPING',\n *       amount: {\n *         currency: 'USD',\n *         value: '5.00'\n *       }\n *     }\n *   ],\n *   amountBreakdown: {\n *     itemTotal: '10.00',\n *     shipping: '0.00'\n *   },\n *   onShippingAddressChange: function (data) {\n *     // Calculate shipping cost based on shipping address\n *     var newShippingCost = '0.00';\n *     var newTotal = '10.00';\n *\n *     // Example: determine shipping cost based on country\n *     if (data.shippingAddress.countryCode === 'CA') {\n *       newShippingCost = '7.50';\n *       newTotal = '17.50';\n *     }\n *\n *     // Update the payment with new amount and breakdown\n *     return paypalCheckoutV6Instance.updatePayment({\n *       paymentId: data.orderId,\n *       amount: newTotal,\n *       currency: 'USD',\n *       shippingOptions: [\n *         {\n *           id: 'economy',\n *           label: 'Economy Shipping (5-7 days)',\n *           selected: true,\n *           type: 'SHIPPING',\n *           amount: {\n *             currency: 'USD',\n *             value: '0.00'\n *           }\n *         },\n *         {\n *           id: 'express',\n *           label: 'Express Shipping (2-3 days)',\n *           selected: false,\n *           type: 'SHIPPING',\n *           amount: {\n *             currency: 'USD',\n *             value: '5.00'\n *           }\n *         }\n *       ],\n *       amountBreakdown: {\n *         itemTotal: '10.00',\n *         shipping: newShippingCost\n *       }\n *     });\n *   },\n *   onApprove: function (data) {\n *     return paypalCheckoutV6Instance.tokenizePayment(data);\n *   }\n * });\n *\n * // Later, trigger the payment flow\n * button.addEventListener('click', function () {\n *   session.start();\n * });\n *\n * @returns {object} Payment session object with `start()` method.\n */\nPayPalCheckoutV6.prototype.createOneTimePaymentSession = function (options) {\n  var self = this;\n\n  // Validate required options\n  if (!options || !options.amount || !options.currency || !options.onApprove) {\n    throw new BraintreeError(errors.PAYPAL_CHECKOUT_V6_INVALID_SESSION_OPTIONS);\n  }\n\n  analytics.sendEvent(\n    self._clientPromise,\n    constants.ANALYTICS_EVENTS.SESSION_CHECKOUT_CREATED\n  );\n\n  var sessionType = options.offerCredit === true ? \"paypal-credit\" : \"paypal\";\n\n  if (options.offerCredit === true) {\n    analytics.sendEvent(\n      self._clientPromise,\n      constants.ANALYTICS_EVENTS.CREDIT_OFFERED\n    );\n  }\n\n  // Eagerly create PayPal instance so start() can run synchronously (required for Safari)\n  self._initializePayPalInstance(\"checkout\");\n\n  return this._createPaymentSession(options, sessionType);\n};\n\n/**\n * Creates a Pay Later payment session.\n * @public\n * @param {object} options Payment session options.\n * @param {string} options.amount The payment amount (e.g., '10.00').\n * @param {string} options.currency The currency code (e.g., 'USD').\n * @param {string} [options.intent='capture'] Payment intent: 'authorize', 'capture', or 'order'.\n * @param {function} options.onApprove Called when the customer approves the payment.\n * @param {function} [options.onCancel] Called when the customer cancels the payment.\n * @param {function} [options.onComplete] Called when the payment flow is complete.\n * @param {function} [options.onError] Called when an error occurs.\n * @param {function} [options.onShippingAddressChange] Called when the customer changes their shipping address. Return a Promise to update the payment details.\n * @param {function} [options.onShippingOptionsChange] Called when the customer selects a different shipping option.\n * @param {string} [options.shippingCallbackUrl] Optional server-side shipping callback URL to be notified when a customer updates their shipping address or options. A callback request will be sent to the merchant server at this URL. Note: Cannot be used with onShippingAddressChange or onShippingOptionsChange callbacks.\n * @param {lineItem[]} [options.lineItems] Line items for this transaction.\n * @param {shippingOption[]} [options.shippingOptions] Shipping options.\n * @param {string} [options.userAuthenticationEmail] Pre-fill the PayPal login email.\n * @param {object} [options.amountBreakdown] Breakdown of the amount.\n * @param {string} [options.returnUrl] URL to return to after payment completion. This parameter is required when using direct-app-switch presentation mode; for other flows, it is optional and defaults to the PayPal error page if not provided.\n * @param {string} [options.cancelUrl] URL to return to after payment cancellation. This parameter is required when using direct-app-switch presentation mode; for other flows, it is optional and defaults to the PayPal error page if not provided.\n * @param {string} [options.displayName] The merchant name displayed inside of the PayPal lightbox; defaults to the company name on your Braintree account.\n * @param {object} [options.shippingAddressOverride] Pre-collected shipping address to display in the PayPal flow. Used with contactPreference to show merchant-provided contact information.\n * @param {string} options.shippingAddressOverride.line1 Street address.\n * @param {string} [options.shippingAddressOverride.line2] Street address (extended).\n * @param {string} options.shippingAddressOverride.city City.\n * @param {string} options.shippingAddressOverride.state State.\n * @param {string} options.shippingAddressOverride.postalCode Postal code.\n * @param {string} options.shippingAddressOverride.countryCode Country code (e.g., 'US').\n * @param {string} [options.shippingAddressOverride.phone] Phone number.\n * @param {string} [options.shippingAddressOverride.recipientName] Recipient's name.\n * @param {string} [options.shippingAddressOverride.recipientEmail] Email address of the recipient.\n * @param {string} [options.contactPreference] Optional field to control contact information display. Can be 'NO_CONTACT_INFO' (default, no contact info shown), 'RETAIN_CONTACT_INFO' (contact info shown but not editable), or 'UPDATE_CONTACT_INFO' (contact info shown and editable). Required if using different recipient via shippingAddressOverride.\n * * Note: this feature is currently available for US-based merchants only; see https://developer.paypal.com/docs/checkout/standard/customize/contact-module/#availability for up-to-date regional availability.\n * @param {string} [options.locale] Locale code (e.g., 'en_US', 'fr_FR') to customize the PayPal experience language and format.\n * @param {string} [options.landingPageType] Landing page type: 'login' (shows PayPal login) or 'billing' (shows guest checkout). Defaults to PayPal's selection.\n * @param {string} [options.userAction] Changes the call-to-action in the PayPal flow: 'continue' or 'pay_now'.\n * @param {boolean} [options.enableShippingAddress=false] When `true`, prompts the customer for a shipping address.\n * @param {boolean} [options.shippingAddressEditable=true] Controls whether the displayed shipping address is editable. Pass `false` to make it read-only.\n * @param {string} [options.riskCorrelationId] Risk correlation ID for advanced fraud protection. Stored and used during tokenization.\n * @param {string} [options.presentationMode='auto'] How to present PayPal: 'auto', 'popup', 'modal', 'redirect', 'payment-handler', 'direct-app-switch'.\n * @example\n * // Standard Pay Later payment\n * var session = paypalCheckoutV6Instance.createPayLaterSession({\n *   amount: '100.00',\n *   currency: 'USD',\n *   intent: 'capture',\n *   onApprove: function (data) {\n *     return paypalCheckoutV6Instance.tokenizePayment(data).then(function (payload) {\n *       // Send payload.nonce to your server\n *     });\n *   },\n *   onCancel: function () {\n *     console.log('Payment canceled');\n *   },\n *   onError: function (err) {\n *     console.error('Payment error:', err);\n *   }\n * });\n *\n * // Trigger the payment flow when user clicks a button\n * document.getElementById('pay-later-button').addEventListener('click', function () {\n *   session.start();\n * });\n *\n * @example\n * // Pay Later with auto presentation mode\n * braintree.client.create({\n *   authorization: 'client-token'\n * }).then(function (clientInstance) {\n *   return braintree.paypalCheckoutV6.create({\n *     client: clientInstance\n *   });\n * }).then(function (paypalCheckoutV6Instance) {\n *   return paypalCheckoutV6Instance.loadPayPalSDK();\n * }).then(function (paypalCheckoutV6Instance) {\n *   var session = paypalCheckoutV6Instance.createPayLaterSession({\n *     amount: '100.00',\n *     currency: 'USD',\n *     intent: 'capture',\n *     onApprove: function (data) {\n *       return paypalCheckoutV6Instance.tokenizePayment(data).then(function (payload) {\n *         console.log('Payment approved, nonce:', payload.nonce);\n *       });\n *     },\n *     onCancel: function () {\n *       console.log('Payment canceled');\n *     },\n *     onError: function (err) {\n *       console.error('Payment error:', err);\n *     },\n *     onShippingAddressChange: function (data) {\n *       console.log('Shipping address changed:', data.shippingAddress);\n *     }\n *   });\n *\n *   document.getElementById('pay-later-button').addEventListener('click', function () {\n *     session.start({ presentationMode: 'auto' });\n *   });\n * }).catch(function (err) {\n *   console.error('Error!', err);\n * });\n *\n * @example\n * // Pay Later with shipping options and dynamic amount calculation\n * var session = paypalCheckoutV6Instance.createPayLaterSession({\n *   amount: '100.00',\n *   currency: 'USD',\n *   lineItems: [\n *     {\n *       quantity: '1',\n *       unitAmount: '100.00',\n *       name: 'Product Name',\n *       kind: 'debit'\n *     }\n *   ],\n *   shippingOptions: [\n *     {\n *       id: 'SHIP_FRE',\n *       label: 'Free Shipping',\n *       type: 'SHIPPING',\n *       selected: true,\n *       amount: {\n *         value: '0.00',\n *         currency: 'USD'\n *       }\n *     },\n *     {\n *       id: 'SHIP_EXP',\n *       label: 'Expedited Shipping',\n *       type: 'SHIPPING',\n *       selected: false,\n *       amount: {\n *         value: '5.00',\n *         currency: 'USD'\n *       }\n *     }\n *   ],\n *   amountBreakdown: {\n *     itemTotal: '100.00',\n *     shipping: '0.00'\n *   },\n *   onShippingAddressChange: function (data) {\n *     console.log('Shipping address changed:', data.shippingAddress);\n *   },\n *   onApprove: function (data) {\n *     return paypalCheckoutV6Instance.tokenizePayment(data);\n *   }\n * });\n *\n * button.addEventListener('click', function () {\n *   session.start();\n * });\n *\n * @returns {object} Payment session object with `start()` method.\n */\nPayPalCheckoutV6.prototype.createPayLaterSession = function (options) {\n  var self = this;\n\n  // Validate required options\n  if (!options || !options.amount || !options.currency || !options.onApprove) {\n    throw new BraintreeError(errors.PAYPAL_CHECKOUT_V6_INVALID_SESSION_OPTIONS);\n  }\n\n  analytics.sendEvent(\n    self._clientPromise,\n    constants.ANALYTICS_EVENTS.SESSION_CHECKOUT_CREATED\n  );\n  analytics.sendEvent(\n    self._clientPromise,\n    constants.ANALYTICS_EVENTS.PAY_LATER_OFFERED\n  );\n\n  // Eagerly create PayPal instance so start() can run synchronously (required for Safari)\n  self._initializePayPalInstance(\"checkout\");\n\n  return this._createPaymentSession(options, \"pay-later\");\n};\n\n/**\n * Creates a one-time payment session with billing agreement consent.\n * This enables merchants to charge a customer and save their payment method in a single flow.\n * @public\n * @param {object} options Payment session options.\n * @param {string} options.amount The payment amount (e.g., '10.00').\n * @param {string} options.currency The currency code (e.g., 'USD').\n * @param {string} [options.intent='capture'] Payment intent: 'authorize', 'capture', or 'order'.\n * @param {boolean} [options.commit=true] Controls the flow type: `true` for \"Pay Now\" (immediate payment), `false` for \"Continue\" (review and confirm). Defaults to `true`.\n * @param {object} [options.billingAgreementDetails] Details for the billing agreement.\n * @param {string} [options.billingAgreementDetails.description] Description for the billing agreement (e.g., 'Monthly subscription to Totally Real Products!').\n * @param {string} [options.planType] Type of plan: RECURRING, SUBSCRIPTION, UNSCHEDULED, or INSTALLMENTS.\n * @param {object} [options.planMetadata] Metadata about the plan including billing cycles.\n * @param {array} [options.planMetadata.billingCycles] Array of billing cycle objects.\n * @param {string} [options.planMetadata.currencyIsoCode] Currency ISO code for the plan.\n * @param {string} [options.planMetadata.name] Name of the plan.\n * @param {string} [options.planMetadata.productDescription] Description of the product.\n * @param {function} options.onApprove Called when the customer approves the payment.\n * @param {function} [options.onCancel] Called when the customer cancels the payment.\n * @param {function} [options.onError] Called when an error occurs.\n * @param {function} [options.onShippingAddressChange] Called when the customer changes their shipping address. Receives data with errors (object), orderId (string), and shippingAddress (object with city, countryCode, postalCode, state). Return a Promise to update the payment details.\n * @param {function} [options.onShippingOptionsChange] Called when the customer selects a different shipping option. Receives data with errors (object), orderId (string), and selectedShippingOption (object with id, label, amount, type, selected). Return a Promise to update the payment details.\n * @param {string} [options.shippingCallbackUrl] Optional server-side shipping callback URL to be notified when a customer updates their shipping address or options. A callback request will be sent to the merchant server at this URL. Note: Cannot be used with onShippingAddressChange or onShippingOptionsChange callbacks.\n * @param {lineItem[]} [options.lineItems] Line items for this transaction.\n * @param {shippingOption[]} [options.shippingOptions] Shipping options.\n * @param {string} [options.userAuthenticationEmail] Pre-fill the PayPal login email.\n * @param {object} [options.amountBreakdown] Breakdown of the amount.\n * @param {string} [options.returnUrl] URL to return to after payment completion. This parameter is required when using direct-app-switch presentation mode; for other flows, it is optional and defaults to the PayPal error page if not provided.\n * @param {string} [options.cancelUrl] URL to return to after payment cancellation. This parameter is required when using direct-app-switch presentation mode; for other flows, it is optional and defaults to the PayPal error page if not provided.\n * @param {string} [options.displayName] The merchant name displayed inside of the PayPal lightbox; defaults to the company name on your Braintree account.\n * @param {string} [options.locale] Locale code (e.g., 'en_US', 'fr_FR') to customize the PayPal experience language and format.\n * @param {string} [options.landingPageType] Landing page type: 'login' (shows PayPal login) or 'billing' (shows guest checkout). Defaults to PayPal's selection.\n * @param {string} [options.userAction] Changes the call-to-action in the PayPal flow: 'continue' or 'pay_now'.\n * @param {boolean} [options.enableShippingAddress=false] When `true`, prompts the customer for a shipping address.\n * @param {boolean} [options.shippingAddressEditable=true] Controls whether the displayed shipping address is editable. Pass `false` to make it read-only.\n * @param {string} [options.riskCorrelationId] Risk correlation ID for advanced fraud protection. Stored and used during tokenization.\n * @param {string} [options.presentationMode='auto'] How to present PayPal: 'auto', 'popup', 'modal', 'redirect', 'payment-handler', 'direct-app-switch'.\n * @example\n * // Create a checkout session with vault consent\n * braintree.client.create({\n *   authorization: 'client-token'\n * }).then(function (clientInstance) {\n *   return braintree.paypalCheckoutV6.create({\n *     client: clientInstance\n *   });\n * }).then(function (paypalCheckoutV6Instance) {\n *   return paypalCheckoutV6Instance.loadPayPalSDK();\n * }).then(function (paypalCheckoutV6Instance) {\n *   var session = paypalCheckoutV6Instance.createCheckoutWithVaultSession({\n *     amount: '10.00',\n *     currency: 'USD',\n *     billingAgreementDetails: {\n *       description: 'Monthly subscription to Totally Real Products!'\n *     },\n *     onApprove: function (data) {\n *       return paypalCheckoutV6Instance.tokenizePayment(data).then(function (payload) {\n *         // payload.nonce contains vaulted payment method\n *         // Submit payload.nonce to your server\n *         console.log('Nonce:', payload.nonce);\n *       });\n *     },\n *     onCancel: function () {\n *       console.log('Payment canceled');\n *     },\n *     onError: function (err) {\n *       console.error('Payment error:', err);\n *     }\n *   });\n *\n *   // Trigger the payment flow when user clicks a button\n *   document.getElementById('paypal-button').addEventListener('click', function () {\n *     session.start();\n *   });\n * }).catch(function (err) {\n *   console.error('Error!', err);\n * });\n *\n * @example\n * // With line items and shipping\n * var session = paypalCheckoutV6Instance.createCheckoutWithVaultSession({\n *   amount: '15.00',\n *   currency: 'USD',\n *   billingAgreementDetails: {\n *     description: 'Subscription for Premium Services'\n *   },\n *   lineItems: [\n *     {\n *       quantity: '1',\n *       unitAmount: '10.00',\n *       name: 'Premium Subscription',\n *       kind: 'debit'\n *     }\n *   ],\n *   shippingOptions: [\n *     {\n *       id: 'standard',\n *       label: 'Standard Shipping',\n *       selected: true,\n *       type: 'SHIPPING',\n *       amount: {\n *         currency: 'USD',\n *         value: '5.00'\n *       }\n *     }\n *   ],\n *   amountBreakdown: {\n *     itemTotal: '10.00',\n *     shipping: '5.00'\n *   },\n *   onApprove: function (data) {\n *     return paypalCheckoutV6Instance.tokenizePayment(data).then(function (payload) {\n *       // Send nonce to server for both charging and vaulting\n *       submitToServer(payload.nonce);\n *     });\n *   },\n *   onCancel: function () {\n *     console.log('Canceled');\n *   },\n *   onError: function (err) {\n *     console.error(err);\n *   }\n * });\n *\n * button.addEventListener('click', function () {\n *   session.start({ presentationMode: 'auto' });\n * });\n *\n * @example\n * // Checkout with vault and subscription plan\n * var session = paypalCheckoutV6Instance.createCheckoutWithVaultSession({\n *   amount: '10.00',\n *   currency: 'USD',\n *   planType: 'SUBSCRIPTION',\n *   planMetadata: {\n *     currencyIsoCode: 'USD',\n *     name: 'Premium Plan',\n *     billingCycles: [{\n *       billingFrequency: 1,\n *       billingFrequencyUnit: 'MONTH',\n *       sequence: 1,\n *       pricingScheme: {\n *         pricingModel: 'FIXED',\n *         price: '10.00'\n *       }\n *     }]\n *   },\n *   billingAgreementDetails: {\n *     description: 'Monthly Premium Subscription'\n *   },\n *   onApprove: function (data) {\n *     return paypalCheckoutV6Instance.tokenizePayment(data).then(function (payload) {\n *       // Send nonce to server for both charging and vaulting\n *       submitToServer(payload.nonce);\n *     });\n *   },\n *   onCancel: function () {\n *     console.log('Canceled');\n *   },\n *   onError: function (err) {\n *     console.error(err);\n *   }\n * });\n *\n * button.addEventListener('click', function () {\n *   session.start();\n * });\n *\n * @returns {object} Payment session object with `start()` method.\n */\nPayPalCheckoutV6.prototype.createCheckoutWithVaultSession = function (options) {\n  var self = this;\n\n  // Validate required options\n  if (!options || !options.amount || !options.currency || !options.onApprove) {\n    throw new BraintreeError(errors.PAYPAL_CHECKOUT_V6_INVALID_SESSION_OPTIONS);\n  }\n\n  analytics.sendEvent(\n    self._clientPromise,\n    constants.ANALYTICS_EVENTS.SESSION_CHECKOUT_WITH_VAULT_CREATED\n  );\n\n  // Force requestBillingAgreement for this flow\n  var checkoutWithVaultOptions = assign({}, options, {\n    requestBillingAgreement: true,\n  });\n\n  // Eagerly create PayPal instance so start() can run synchronously (required for Safari)\n  self._initializePayPalInstance(\"checkout\");\n\n  return this._createPaymentSession(checkoutWithVaultOptions, \"paypal\");\n};\n\n/**\n * Creates a payment or billing agreement.\n * @public\n * @param {object} options Payment options.\n * @param {string} options.flow 'checkout' for one-time payment or 'vault' for billing agreement.\n * @param {string} [options.amount] Amount (required for checkout flow).\n * @param {string} [options.currency] Currency code (required for checkout flow).\n * @param {string} [options.intent] Payment intent: 'authorize', 'capture', or 'order'.\n * @param {boolean} [options.offerCredit] Whether to offer PayPal Credit.\n * @param {string} [options.billingAgreementDescription] Description for vault flow.\n * @param {string} [options.planType] Plan type for vault flow.\n * @param {object} [options.planMetadata] Plan metadata for vault flow.\n * @param {object} [options.shippingAddressOverride] Shipping address override.\n * @param {string} [options.userAction] User action (CONTINUE, COMMIT, SETUP_NOW).\n * @param {string} [options.displayName] The merchant name displayed inside of the PayPal lightbox; defaults to the company name on your Braintree account.\n * @example\n * // Basic checkout flow\n * paypalCheckoutV6Instance.createPayment({\n *   flow: 'checkout',\n *   amount: '10.00',\n *   currency: 'USD',\n *   intent: 'capture'\n * }).then(function(orderId) {\n *   console.log('Order ID:', orderId);\n * });\n *\n * @example\n * // Basic vault flow\n * paypalCheckoutV6Instance.createPayment({\n *   flow: 'vault'\n * }).then(function(billingToken) {\n *   console.log('BA Token:', billingToken);\n * });\n *\n * @example <caption>use the new plan features</caption>\n * // Plan and plan metadata are passed to createPayment\n * paypalCheckoutV6Instance.createPayment({\n *   flow: 'vault',\n *   planType: 'RECURRING',\n *   planMetadata: {\n *     billingCycles: [\n *       {\n *          billingFrequency: \"1\",\n *          billingFrequencyUnit: \"MONTH\",\n *          numberOfExecutions: \"1\",\n *          sequence: \"1\",\n *          startDate: \"2024-04-06T00:00:00Z\",\n *          trial: true,\n *          pricingScheme: {\n *            pricingModel: \"FIXED\",\n *        },\n *      },\n *      ],\n *     currencyIsoCode: \"USD\",\n *     name: \"Netflix with Ads\",\n *     productDescription: \"iPhone 13\",\n *     productQuantity: \"1.0\",\n *     oneTimeFeeAmount: \"10\",\n *     shippingAmount: \"3.0\",\n *     productPrice: \"200\",\n *     taxAmount: \"20\",\n *  };\n * });\n *\n * @example <caption>Vault Flow with Purchase (Billing Agreement with Recurring Payment)</caption>\n * paypalCheckoutV6Instance.createPayment({\n *   flow: 'vault',\n *   amount: '12.50',\n *   currency: 'USD',\n *   planType: 'SUBSCRIPTION',\n *   planMetadata: {\n *     billingCycles: [{\n *       billingFrequency: 1,\n *       billingFrequencyUnit: \"MONTH\",\n *       sequence: 1,\n *       pricingScheme: {\n *         pricingModel: \"FIXED\",\n *         price: \"10.00\"\n *       },\n *     }],\n *     currencyIsoCode: \"USD\",\n *     totalAmount: \"10.00\",\n *     name: \"My Recurring Product\"\n *   }\n * });\n *\n * @returns {Promise<string>} BA token for vault flow or order ID for checkout flow.\n */\nPayPalCheckoutV6.prototype.createPayment = function (options) {\n  var self = this;\n\n  return new Promise(function (resolve, reject) {\n    var billingAgreementRequest;\n\n    if (!options || !options.flow) {\n      reject(\n        new BraintreeError(errors.PAYPAL_CHECKOUT_V6_INVALID_SESSION_OPTIONS)\n      );\n\n      return;\n    }\n\n    self._flow = options.flow;\n\n    if (options.flow === \"vault\") {\n      billingAgreementRequest = self._buildBillingAgreementRequest(options);\n\n      self\n        ._createBillingAgreementToken(billingAgreementRequest)\n        .then(function (tokenData) {\n          resolve(tokenData.approvalTokenId);\n        })\n        .catch(reject);\n\n      return;\n    }\n\n    self\n      ._createPaymentResource(options)\n      .then(function (orderData) {\n        resolve(orderData.orderId);\n      })\n      .catch(reject);\n  });\n};\n\n/**\n * Creates a billing agreement session for vault flow.\n * @public\n * @param {object} options Options for creating a billing agreement session.\n * @param {string} [options.billingAgreementDescription] Description for the billing agreement.\n * @param {string} [options.planType] Type of plan: RECURRING, SUBSCRIPTION, UNSCHEDULED, or INSTALLMENTS.\n * @param {object} [options.planMetadata] Metadata about the plan including billing cycles.\n * @param {array} [options.planMetadata.billingCycles] Array of billing cycle objects.\n * @param {string} [options.planMetadata.currencyIsoCode] Currency ISO code for the plan.\n * @param {string} [options.planMetadata.name] Name of the plan.\n * @param {string} [options.planMetadata.productDescription] Description of the product.\n * @param {string} [options.amount] Amount for vault with purchase flow.\n * @param {string} [options.currency] Currency for vault with purchase flow.\n * @param {boolean} [options.offerCredit=false] Whether to offer PayPal Credit.\n * @param {object} [options.shippingAddressOverride] Shipping address to override.\n * @param {string} [options.userAction] User action: CONTINUE, COMMIT, or SETUP_NOW.\n * @param {string} [options.displayName] The merchant name displayed inside of the PayPal lightbox; defaults to the company name on your Braintree account.\n * @param {string} [options.locale] Locale code (e.g., 'en_US', 'fr_FR') to customize the PayPal experience language and format.\n * @param {string} [options.landingPageType] Landing page type: 'login' (shows PayPal login) or 'billing' (shows billing agreement consent). Defaults to PayPal's selection.\n * @param {boolean} [options.enableShippingAddress] When `true`, prompts the customer for a shipping address. Defaults to suppressed when omitted.\n * @param {boolean} [options.shippingAddressEditable] Controls whether a displayed shipping address is editable. Pass `false` to make it read-only. Defaults to editable when omitted.\n * @param {string} [options.riskCorrelationId] Risk correlation ID for advanced fraud protection. Stored and used during tokenization.\n * @param {string} [options.returnUrl] URL to return to after billing agreement approval. This parameter is required when using app switch presentation mode; for other flows, it is optional and defaults to the PayPal error page if not provided.\n * @param {string} [options.cancelUrl] URL to return to after billing agreement cancellation. This parameter is required when using app switch presentation mode; for other flows, it is optional and defaults to the PayPal error page if not provided.\n * @param {function} options.onApprove Callback when customer approves the billing agreement.\n * @param {function} [options.onCancel] Callback when customer cancels.\n * @param {function} [options.onError] Callback when an error occurs.\n * @param {string} [options.presentationMode] Presentation mode: auto, popup, modal, redirect, or payment-handler.\n * @example\n * var session = paypalCheckoutV6Instance.createBillingAgreementSession({\n *   billingAgreementDescription: 'Monthly subscription for premium service',\n *   planType: 'SUBSCRIPTION',\n *   planMetadata: {\n *     currencyIsoCode: 'USD',\n *     name: 'Premium Subscription',\n *     productDescription: 'Monthly premium access',\n *     billingCycles: [{\n *       billingFrequency: 1,\n *       billingFrequencyUnit: 'MONTH',\n *       numberOfExecutions: 0,\n *       sequence: 1,\n *       startDate: '2025-12-01T00:00:00Z',\n *       trial: false,\n *       pricingScheme: {\n *         pricingModel: 'FIXED',\n *         price: '9.99'\n *       }\n *     }]\n *   },\n *   onApprove: function (data) {\n *     console.log('Billing agreement approved:', data);\n *   },\n *   onCancel: function () {\n *     console.log('Billing agreement canceled');\n *   },\n *   onError: function (err) {\n *     console.error('Billing agreement error:', err);\n *   }\n * });\n *\n * // Trigger the vault flow when user clicks a button\n * document.getElementById('paypal-button').addEventListener('click', function () {\n *   session.start();\n * });\n * @returns {object} Session object with start() method.\n */\nPayPalCheckoutV6.prototype.createBillingAgreementSession = function (options) {\n  var self = this;\n  var session = {};\n\n  if (!options) {\n    throw new BraintreeError(\n      errors.PAYPAL_CHECKOUT_V6_INVALID_BILLING_AGREEMENT_OPTIONS\n    );\n  }\n\n  if (!options.onApprove || typeof options.onApprove !== \"function\") {\n    throw new BraintreeError(\n      errors.PAYPAL_CHECKOUT_V6_INVALID_BILLING_AGREEMENT_OPTIONS\n    );\n  }\n\n  analytics.sendEvent(\n    self._clientPromise,\n    constants.ANALYTICS_EVENTS.SESSION_VAULT_CREATED\n  );\n\n  var sessionType = options.offerCredit === true ? \"paypal-credit\" : \"paypal\";\n\n  if (options.offerCredit === true) {\n    analytics.sendEvent(\n      self._clientPromise,\n      constants.ANALYTICS_EVENTS.CREDIT_OFFERED\n    );\n  }\n\n  // Eagerly create PayPal instance so start() can run synchronously (required for Safari).\n  self._initializePayPalInstance(\"vault\");\n\n  var billingAgreementRequest = self._buildBillingAgreementRequest(options);\n\n  session.start = function (presentationOptions) {\n    presentationOptions = presentationOptions || {};\n    var presentationMode =\n      presentationOptions.presentationMode ||\n      options.presentationMode ||\n      \"auto\";\n    var paypalInstance = self._paypalVaultInstance;\n\n    var appSwitchError = self._validateAppSwitchUrls(options, presentationMode);\n\n    if (appSwitchError) {\n      return Promise.reject(appSwitchError);\n    }\n\n    // If the PayPal vault instance is ready,\n    // start synchronously to preserve Safari's transient activation\n    if (paypalInstance && self._client) {\n      return self._startBillingSession(\n        paypalInstance,\n        self._client,\n        presentationMode,\n        sessionType,\n        billingAgreementRequest,\n        options\n      );\n    }\n\n    // If instance isn't ready yet, wait for it. This path may _not_ work in Safari\n    // due to transient activation expiring, but works in Chrome/Firefox/Edge\n    if (self._vaultInstancePromise) {\n      return self._vaultInstancePromise\n        .then(function (instance) {\n          return self._clientPromise.then(function (client) {\n            if (!self._isPayPalSdkAvailable()) {\n              analytics.sendEvent(\n                client,\n                constants.ANALYTICS_EVENTS.CREATE_BA_SESSION_SDK_NOT_LOADED\n              );\n              throw new BraintreeError(\n                errors.PAYPAL_CHECKOUT_V6_SDK_INITIALIZATION_FAILED\n              );\n            }\n\n            analytics.sendEvent(\n              client,\n              constants.ANALYTICS_EVENTS.CREATE_BA_SESSION_INSTANCE_CREATED\n            );\n\n            return self._startBillingSession(\n              instance,\n              client,\n              presentationMode,\n              sessionType,\n              billingAgreementRequest,\n              options\n            );\n          });\n        })\n        .catch(function (err) {\n          return self._clientPromise.then(function (client) {\n            analytics.sendEvent(\n              client,\n              constants.ANALYTICS_EVENTS.CREATE_BA_SESSION_FAILED\n            );\n\n            throw new BraintreeError({\n              type: errors.PAYPAL_CHECKOUT_V6_BILLING_AGREEMENT_CREATION_FAILED\n                .type,\n              code: errors.PAYPAL_CHECKOUT_V6_BILLING_AGREEMENT_CREATION_FAILED\n                .code,\n              message:\n                errors.PAYPAL_CHECKOUT_V6_BILLING_AGREEMENT_CREATION_FAILED\n                  .message,\n              details: { originalError: err },\n            });\n          });\n        });\n    }\n\n    // No instance and no promise. Check if SDK wasn't loaded\n    if (!self._isPayPalSdkAvailable()) {\n      return self._clientPromise.then(function (client) {\n        analytics.sendEvent(\n          client,\n          constants.ANALYTICS_EVENTS.CREATE_BA_SESSION_SDK_NOT_LOADED\n        );\n        throw new BraintreeError(\n          errors.PAYPAL_CHECKOUT_V6_SDK_INITIALIZATION_FAILED\n        );\n      });\n    }\n\n    // Otherwise, this shouldn't happen if loadPayPalSDK() was called properly\n    return Promise.reject(\n      new BraintreeError(errors.PAYPAL_CHECKOUT_V6_INSTANCE_NOT_READY)\n    );\n  };\n\n  return session;\n};\n\n/**\n * Tokenizes a PayPal payment or billing agreement.\n * @public\n * @param {object} options Options for tokenizing the payment.\n * @param {string} [options.payerID] Payer ID returned by PayPal for one-time payments (legacy uppercase format).\n * @param {string} [options.payerId] Payer ID returned by PayPal for one-time payments (camelCase format from onApprove callback).\n * @param {string} [options.orderID] Order ID returned by PayPal for one-time payments (legacy uppercase format).\n * @param {string} [options.orderId] Order ID returned by PayPal for one-time payments (camelCase format from onApprove callback).\n * @param {string} [options.billingToken] Billing token returned by PayPal for vault flow.\n * @param {boolean} [options.vault=true] Whether or not to vault the resulting PayPal account (if using a client token generated with a customer id and the vault flow).\n * @example\n * // One-time payment tokenization with camelCase (from onApprove callback)\n * paypalCheckoutV6Instance.tokenizePayment({\n *   payerId: data.payerId,\n *   orderId: data.orderId\n * }).then(function (payload) {\n *   console.log('Payment method nonce:', payload.nonce);\n * });\n *\n * @example <caption>One-time payment tokenization with legacy uppercase</caption>\n * paypalCheckoutV6Instance.tokenizePayment({\n *   payerID: data.payerID,\n *   orderID: data.orderID\n * }).then(function (payload) {\n *   console.log('Payment method nonce:', payload.nonce);\n * });\n *\n * @example <caption>Vault flow tokenization</caption>\n * paypalCheckoutV6Instance.tokenizePayment({\n *   billingToken: data.billingToken\n * }).then(function (payload) {\n *   console.log('Vaulted payment method nonce:', payload.nonce);\n * });\n *\n * @example <caption>Opt out of auto-vaulting behavior</caption>\n * paypalCheckoutV6Instance.tokenizePayment({\n *   billingToken: data.billingToken,\n *   vault: false\n * }).then(function (payload) {\n *   console.log('Payment method nonce (not vaulted):', payload.nonce);\n * });\n *\n * @returns {Promise} A promise that resolves with the tokenization payload.\n */\nPayPalCheckoutV6.prototype.tokenizePayment = function (options) {\n  var self = this;\n\n  return new Promise(function (resolve, reject) {\n    var flags = self._resolveTokenizeFlags(options);\n\n    if (flags.error) {\n      reject(flags.error);\n\n      return;\n    }\n\n    self._clientPromise.then(function (client) {\n      var request = self._buildTokenizeRequest(options, {\n        isCheckoutWithVault: flags.isCheckoutWithVault,\n        isBillingAgreement: flags.isBillingAgreement,\n        shouldVault: flags.shouldVault,\n        client: client,\n      });\n\n      return client\n        .request({\n          endpoint: request.endpoint,\n          method: \"post\",\n          data: request.data,\n        })\n        .then(function (response) {\n          return self._handleTokenizeSuccess(\n            client,\n            response,\n            request.analyticsPrefix,\n            flags.isBillingAgreement\n          );\n        })\n        .catch(function (err) {\n          return self._handleTokenizeError(\n            client,\n            err,\n            request.analyticsPrefix,\n            flags.isBillingAgreement\n          );\n        })\n        .then(resolve)\n        .catch(reject);\n    });\n  });\n};\n\n/**\n * @private\n * @param {object} options Tokenization options passed to tokenizePayment.\n * @returns {object} Flow flags and an optional validation error.\n */\nPayPalCheckoutV6.prototype._resolveTokenizeFlags = function (options) {\n  var hasBillingToken = Boolean(options && options.billingToken);\n  // Accept both orderID/orderId (legacy/onApprove) and paymentID/paymentId\n  // (used by VIC) as the one-time-payment identifier.\n  var hasOrderIdOrPaymentId = Boolean(\n    options &&\n    (options.orderID ||\n      options.orderId ||\n      options.paymentID ||\n      options.paymentId)\n  );\n  // Accept both payerID (legacy) and payerId (onApprove payload).\n  var hasPayerId = Boolean(options && (options.payerID || options.payerId));\n  var hasCheckoutFields = hasOrderIdOrPaymentId && hasPayerId;\n  // Checkout+Vault (BA w/ Purchase): billingToken AND orderId both present.\n  // Pure vault: billingToken only (no orderId).\n  var isCheckoutWithVault = hasBillingToken && hasOrderIdOrPaymentId;\n  var isBillingAgreement = hasBillingToken && !hasOrderIdOrPaymentId;\n  var flags = {\n    isCheckoutWithVault: isCheckoutWithVault,\n    isBillingAgreement: isBillingAgreement,\n    shouldVault: true,\n    error: null,\n  };\n\n  // Validate required parameters. Billing-agreement-only flows only need\n  // billingToken; all other flows require both an order/payment id and a\n  // payer id.\n  if (!options || (!isBillingAgreement && !hasCheckoutFields)) {\n    flags.error = new BraintreeError(\n      errors.PAYPAL_CHECKOUT_V6_MISSING_TOKENIZATION_DATA\n    );\n\n    return flags;\n  }\n\n  if (options.hasOwnProperty(\"vault\")) {\n    flags.shouldVault = options.vault;\n  }\n\n  return flags;\n};\n\n/**\n * @private\n * @param {object} options Tokenization options passed to tokenizePayment.\n * @param {object} flags Flow flags and the resolved client.\n * @returns {object} The endpoint, data, and analyticsPrefix for the request.\n */\nPayPalCheckoutV6.prototype._buildTokenizeRequest = function (options, flags) {\n  var data;\n  var analyticsPrefix;\n  var endpoint = \"payment_methods/paypal_accounts\";\n\n  if (flags.isBillingAgreement) {\n    analyticsPrefix = constants.ANALYTICS_EVENTS.TOKENIZE_BA_PREFIX;\n    analytics.sendEvent(flags.client, analyticsPrefix + \".started\");\n\n    data = {\n      paypalAccount: {\n        billingAgreementToken: options.billingToken,\n        merchantAccountId: this._merchantAccountId,\n        // Use fallback chain for correlationId matching V5 behavior\n        correlationId: this._riskCorrelationId || options.billingToken,\n      },\n    };\n\n    if (!flags.shouldVault) {\n      data.paypalAccount.vault = false;\n    }\n\n    return { endpoint: endpoint, data: data, analyticsPrefix: analyticsPrefix };\n  }\n\n  // Checkout, or BA w/ Purchase (checkout+vault).\n  analyticsPrefix = constants.ANALYTICS_EVENTS.TOKENIZE_PAYMENT_PREFIX;\n  analytics.sendEventPlus(this._clientPromise, analyticsPrefix + \".started\", {\n    flow: this._flow,\n    context_id: this._contextId, // eslint-disable-line camelcase\n  });\n\n  data = this._formatTokenizeData({\n    payerId: options.payerID || options.payerId,\n    orderId: options.orderID || options.orderId,\n    paymentId: options.paymentID || options.paymentId,\n    // BA w/ Purchase: send billingToken too so the gateway returns\n    // ImplicitlyVaultedPaymentMethodToken.\n    billingToken: flags.isCheckoutWithVault ? options.billingToken : undefined,\n  });\n\n  return { endpoint: endpoint, data: data, analyticsPrefix: analyticsPrefix };\n};\n\n/**\n * @private\n * @param {object} client The Braintree client instance.\n * @param {object} response The tokenization response.\n * @param {string} analyticsPrefix The analytics event prefix for this flow.\n * @param {boolean} isBillingAgreement Whether this is a billing agreement flow.\n * @returns {object} The formatted tokenization payload.\n */\nPayPalCheckoutV6.prototype._handleTokenizeSuccess = function (\n  client,\n  response,\n  analyticsPrefix,\n  isBillingAgreement\n) {\n  var creditAnalyticsEvent;\n  var payload = this._formatTokenizePayload(response);\n\n  if (isBillingAgreement) {\n    analytics.sendEvent(client, analyticsPrefix + \".succeeded\");\n\n    return payload;\n  }\n\n  if (payload.creditFinancingOffered) {\n    // Send appropriate analytics event based on session type\n    creditAnalyticsEvent =\n      this._sessionType === \"pay-later\"\n        ? constants.ANALYTICS_EVENTS.PAY_LATER_ACCEPTED\n        : constants.ANALYTICS_EVENTS.CREDIT_ACCEPTED;\n\n    analytics.sendEventPlus(this._clientPromise, creditAnalyticsEvent, {\n      flow: this._flow,\n      context_id: this._contextId, // eslint-disable-line camelcase\n    });\n  }\n\n  analytics.sendEventPlus(this._clientPromise, analyticsPrefix + \".success\", {\n    flow: this._flow,\n    context_id: this._contextId, // eslint-disable-line camelcase\n  });\n\n  return payload;\n};\n\n/**\n * @private\n * @param {object} client The Braintree client instance.\n * @param {object} err The error from the tokenization request.\n * @param {string} analyticsPrefix The analytics event prefix for this flow.\n * @param {boolean} isBillingAgreement Whether this is a billing agreement flow.\n * @returns {void} Always throws a BraintreeError.\n */\nPayPalCheckoutV6.prototype._handleTokenizeError = function (\n  client,\n  err,\n  analyticsPrefix,\n  isBillingAgreement\n) {\n  if (isBillingAgreement) {\n    analytics.sendEvent(client, analyticsPrefix + \".failed\");\n\n    throw new BraintreeError({\n      type: errors.PAYPAL_CHECKOUT_V6_TOKENIZATION_FAILED.type,\n      code: errors.PAYPAL_CHECKOUT_V6_TOKENIZATION_FAILED.code,\n      message: errors.PAYPAL_CHECKOUT_V6_TOKENIZATION_FAILED.message,\n      details: { originalError: err },\n    });\n  }\n\n  analytics.sendEventPlus(this._clientPromise, analyticsPrefix + \".failed\", {\n    flow: this._flow,\n    context_id: this._contextId, // eslint-disable-line camelcase\n  });\n\n  if (this._setupError) {\n    throw this._setupError;\n  }\n\n  throw convertToBraintreeError(err, {\n    type: errors.PAYPAL_CHECKOUT_V6_TOKENIZATION_FAILED.type,\n    code: errors.PAYPAL_CHECKOUT_V6_TOKENIZATION_FAILED.code,\n    message: errors.PAYPAL_CHECKOUT_V6_TOKENIZATION_FAILED.message,\n  });\n};\n\n/**\n * @private\n * @param {object} params Tokenization parameters.\n * @returns {object} Formatted data for tokenization request.\n */\nPayPalCheckoutV6.prototype._formatTokenizeData = function (params) {\n  var correlationId =\n    this._riskCorrelationId ||\n    params.billingToken ||\n    params.orderId ||\n    params.paymentId;\n  var data = {\n    paypalAccount: {\n      correlationId: correlationId,\n      paymentToken: params.paymentId || params.orderId,\n      payerId: params.payerId,\n      unilateral:\n        this._configuration.gatewayConfiguration.paypal.unvettedMerchant,\n    },\n  };\n\n  if (params.billingToken) {\n    data.paypalAccount.billingAgreementToken = params.billingToken;\n  }\n\n  if (this._merchantAccountId) {\n    data.merchantAccountId = this._merchantAccountId;\n  }\n\n  return data;\n};\n\n/**\n * @private\n * @param {object} response Response from tokenization request.\n * @returns {object} Formatted tokenization payload.\n */\nPayPalCheckoutV6.prototype._formatTokenizePayload = function (response) {\n  var payload;\n  var account = {};\n\n  if (response.paypalAccounts) {\n    account = response.paypalAccounts[0];\n  }\n\n  payload = {\n    nonce: account.nonce,\n    details: {},\n    type: account.type,\n  };\n\n  if (account.details && account.details.payerInfo) {\n    payload.details = account.details.payerInfo;\n  }\n\n  if (account.details && account.details.creditFinancingOffered) {\n    payload.creditFinancingOffered = account.details.creditFinancingOffered;\n  }\n\n  if (account.details && account.details.shippingOptionId) {\n    payload.shippingOptionId = account.details.shippingOptionId;\n  }\n\n  if (account.details && account.details.cobrandedCardLabel) {\n    payload.cobrandedCardLabel = account.details.cobrandedCardLabel;\n  }\n\n  if (account.details && account.details.implicitlyVaultedPaymentMethodToken) {\n    payload.implicitlyVaultedPaymentMethodToken =\n      account.details.implicitlyVaultedPaymentMethodToken;\n  }\n\n  return payload;\n};\n\nPayPalCheckoutV6.prototype._verifyConsistentCurrency = function (options) {\n  var currencyMatches = true;\n  var breakdown;\n  var currencyFields = [\n    \"shippingCurrency\",\n    \"handlingCurrency\",\n    \"taxTotalCurrency\",\n    \"insuranceCurrency\",\n    \"shippingDiscountCurrency\",\n    \"discountCurrency\",\n  ];\n\n  if (!options.currency) {\n    return true;\n  }\n\n  if (\n    options.hasOwnProperty(\"shippingOptions\") &&\n    Array.isArray(options.shippingOptions)\n  ) {\n    currencyMatches = options.shippingOptions.every(function (item) {\n      if (!item.amount || !item.amount.currency) {\n        return false;\n      }\n      return (\n        options.currency.toLowerCase() === item.amount.currency.toLowerCase()\n      );\n    });\n\n    if (!currencyMatches) {\n      return false;\n    }\n  }\n\n  if (\n    options.hasOwnProperty(\"lineItems\") &&\n    Array.isArray(options.lineItems) &&\n    options.lineItems.length > 0\n  ) {\n    currencyMatches = options.lineItems.every(function (item) {\n      if (item.unitTaxAmountCurrency) {\n        return (\n          options.currency.toLowerCase() ===\n          item.unitTaxAmountCurrency.toLowerCase()\n        );\n      }\n      return true;\n    });\n\n    if (!currencyMatches) {\n      return false;\n    }\n  }\n\n  if (options.hasOwnProperty(\"amountBreakdown\") && options.amountBreakdown) {\n    breakdown = options.amountBreakdown;\n\n    currencyMatches = !currencyFields.some(function (field) {\n      return (\n        breakdown.hasOwnProperty(field) &&\n        breakdown[field] &&\n        options.currency.toLowerCase() !== breakdown[field].toLowerCase()\n      );\n    });\n  }\n\n  return currencyMatches;\n};\n\n/**\n * Updates a PayPal payment with new amounts or options.\n * @public\n * @param {object} options Update options\n * @param {string} options.paymentId The ID of the payment to update (orderId from session creation)\n * @param {string} options.amount The new payment amount\n * @param {string} options.currency The currency code (must match original currency)\n * @param {lineItem[]} [options.lineItems] Updated line items for the payment\n * @param {shippingOption[]} [options.shippingOptions] Updated shipping options\n * @param {object} [options.amountBreakdown] Breakdown of the amount\n * @param {callback} [callback] Optional callback. The callback is called with an error object as the first argument and the server response data as the second argument.\n * @example\n * // Promise-based approach - often used in onShippingAddressChange\n * paypal.Buttons({\n *   // ... other configuration ...\n *   onShippingAddressChange: function (data) {\n *     return paypalCheckoutV6Instance.updatePayment({\n *       paymentId: data.orderId,\n *       amount: '15.00',  // Updated total amount\n *       currency: 'USD',\n *       lineItems: [\n *         {\n *           quantity: '1',\n *           unitAmount: '10.00',\n *           name: 'Product Name',\n *           kind: 'debit'\n *         }\n *       ],\n *       shippingOptions: [\n *         {\n *           id: 'shipping-speed-fast',\n *           type: 'SHIPPING',\n *           label: 'Fast Shipping',\n *           selected: true,\n *           amount: {\n *             value: '5.00',\n *             currency: 'USD'\n *           }\n *         }\n *       ],\n *       amountBreakdown: {\n *         itemTotal: '10.00',\n *         shipping: '5.00',\n *         handling: '0.00',\n *         taxTotal: '0.00',\n *         insurance: '0.00',\n *         shippingDiscount: '0.00',\n *         discount: '0.00'\n *       }\n *     }).then(function(response) {\n *       console.log('Server response:', response);\n *     }).catch(function(err) {\n *       console.error('Update failed:', err);\n *     });\n *   }\n * });\n *\n * @example\n * // Callback-based approach\n * paypalCheckoutV6Instance.updatePayment({\n *   paymentId: orderId,\n *   amount: '15.00',\n *   currency: 'USD',\n *   lineItems: [{ ... }],\n *   shippingOptions: [{ ... }],\n *   amountBreakdown: { ... }\n * }, function (err, response) {\n *   if (err) {\n *     console.error('Update failed:', err);\n *     return;\n *   }\n *   console.log('Payment updated successfully:', response);\n * });\n *\n * @returns {Promise|undefined} Returns a promise if no callback is provided.\n */\nPayPalCheckoutV6.prototype.updatePayment = function (options) {\n  var self = this;\n  var updatePayload;\n  var isValidLineItems = true;\n\n  if (!options || !options.paymentId || !options.amount || !options.currency) {\n    return Promise.reject(\n      new BraintreeError(errors.PAYPAL_CHECKOUT_V6_INVALID_UPDATE_OPTIONS)\n    );\n  }\n  if (self._contextId !== options.paymentId) {\n    return Promise.reject(\n      new BraintreeError(errors.PAYPAL_CHECKOUT_V6_PAYMENT_NOT_FOUND)\n    );\n  }\n  if (!self._verifyConsistentCurrency(options)) {\n    return Promise.reject(\n      new BraintreeError(errors.PAYPAL_CHECKOUT_V6_CURRENCY_MISMATCH)\n    );\n  }\n\n  if (options.lineItems && Array.isArray(options.lineItems)) {\n    isValidLineItems = options.lineItems.every(function (item) {\n      return (\n        item &&\n        typeof item === \"object\" &&\n        item.hasOwnProperty(\"quantity\") &&\n        item.hasOwnProperty(\"unitAmount\") &&\n        item.hasOwnProperty(\"name\") &&\n        item.hasOwnProperty(\"kind\")\n      );\n    });\n\n    if (!isValidLineItems) {\n      return Promise.reject(\n        new BraintreeError(errors.PAYPAL_CHECKOUT_V6_INVALID_LINE_ITEMS)\n      );\n    }\n  }\n\n  updatePayload = {\n    amount: options.amount,\n    currencyIsoCode: options.currency,\n    paymentId: options.paymentId,\n  };\n\n  if (self._merchantAccountId) {\n    updatePayload.merchantAccountId = self._merchantAccountId;\n  }\n\n  if (options.lineItems) {\n    updatePayload.lineItems = options.lineItems;\n  }\n\n  if (options.shippingOptions) {\n    updatePayload.shippingOptions = options.shippingOptions;\n  }\n\n  if (options.amountBreakdown) {\n    updatePayload.amountBreakdown = options.amountBreakdown;\n  }\n\n  return self._clientPromise.then(function (client) {\n    analytics.sendEvent(client, \"paypal-checkout-v6.update-payment.started\");\n\n    return client\n      .request({\n        endpoint: \"paypal_hermes/patch_payment_resource\",\n        method: \"post\",\n        data: updatePayload,\n      })\n      .then(function (response) {\n        analytics.sendEvent(\n          client,\n          \"paypal-checkout-v6.update-payment.succeeded\"\n        );\n\n        return {\n          success: true,\n          orderId: options.paymentId,\n          updates: response.updates || {},\n        };\n      })\n      .catch(function (err) {\n        analytics.sendEvent(client, \"paypal-checkout-v6.update-payment.failed\");\n\n        return Promise.reject(\n          convertToBraintreeError(err, {\n            type: errors.PAYPAL_CHECKOUT_V6_UPDATE_FAILED.type,\n            code: errors.PAYPAL_CHECKOUT_V6_UPDATE_FAILED.code,\n            message: errors.PAYPAL_CHECKOUT_V6_UPDATE_FAILED.message,\n          })\n        );\n      });\n  });\n};\n\n/**\n * @typedef {object} PayPalCheckoutV6~eligibilityResult\n * @property {boolean} paypal Whether standard PayPal payments are eligible.\n * @property {boolean} paylater Whether Pay Later (BNPL) is eligible.\n * @property {boolean} credit Whether PayPal Credit is eligible.\n * @property {function(string): (object|null)} getDetails Function to get additional details about a specific payment method. Takes a method name ('paypal', 'paylater', or 'credit') as parameter and returns an object with method-specific details (e.g., countryCode, productCode) when available, or null if the method isn't supported.\n */\n\n/**\n * Finds eligible payment methods for the given amount and currency.\n * This allows merchants to check which payment methods (PayPal, Pay Later, PayPal Credit)\n * are eligible before rendering buttons, enabling dynamic UI that shows only available options.\n *\n * Eligibility depends on: currency, amount, merchant configuration, buyer location, and PayPal account features.\n *\n * @public\n * @param {object} options Eligibility check options.\n * @param {string} [options.amount] Optional payment amount (e.g., '10.00').\n * @param {string} options.currency The currency code (e.g., 'USD').\n * @param {string} [options.countryCode] Optional country code (e.g., 'US'). Used to refine eligibility based on buyer location.\n * @param {string} [options.paymentFlow] Optional payment flow type: 'ONE_TIME_PAYMENT', 'VAULT_WITH_PAYMENT', 'VAULT_WITHOUT_PAYMENT', or 'RECURRING_PAYMENT'. Helps determine eligibility for different payment scenarios.\n * @example\n * // Check eligibility before rendering buttons\n * paypalCheckoutV6Instance.findEligibleMethods({\n *   amount: '10.00',\n *   currency: 'USD'\n * }).then(function (eligibility) {\n *   if (eligibility.paylater) {\n *     // Show Pay Later button\n *     document.getElementById('paylater-button').style.display = 'block';\n *   }\n *   if (eligibility.credit) {\n *     // Show PayPal Credit button\n *     document.getElementById('credit-button').style.display = 'block';\n *   }\n *   if (eligibility.paypal) {\n *     // Show standard PayPal button\n *     document.getElementById('paypal-button').style.display = 'block';\n *   }\n * }).catch(function (err) {\n *   console.error('Eligibility check failed:', err);\n * });\n *\n * @example\n * // Check Pay Later eligibility with country and payment flow\n * paypalCheckoutV6Instance.findEligibleMethods({\n *   amount: '150.00',\n *   currency: 'USD',\n *   countryCode: 'US',\n *   paymentFlow: 'ONE_TIME_PAYMENT'\n * }).then(function (eligibility) {\n *   if (eligibility.paylater) {\n *     // Show \"Pay in 4\" promotional messaging\n *     showPayLaterPromo();\n *\n *     // Get additional details about Pay Later offers\n *     var details = eligibility.getDetails('paylater');\n *     if (details && details.productCode) {\n *       console.log('Pay Later product:', details.productCode);\n *     }\n *   }\n * });\n *\n * @returns {Promise<PayPalCheckoutV6~eligibilityResult>} A promise that resolves with eligibility flags for each payment method (paypal, paylater, credit). The result also includes a getDetails(method) function for retrieving additional eligibility information from the PayPal SDK.\n */\nPayPalCheckoutV6.prototype.findEligibleMethods = function (options) {\n  var self = this;\n\n  return this._clientPromise.then(function (client) {\n    if (!options || !options.currency) {\n      return Promise.reject(\n        new BraintreeError(\n          errors.PAYPAL_CHECKOUT_V6_INVALID_ELIGIBILITY_OPTIONS\n        )\n      );\n    }\n\n    // Get or create the PayPal instance\n    var instancePromise = self._paypalInstance\n      ? Promise.resolve(self._paypalInstance)\n      : self\n          ._createPayPalInstance({\n            components: [\"paypal-payments\"],\n          })\n          .then(function (instance) {\n            self._paypalInstance = instance;\n\n            return instance;\n          });\n\n    return instancePromise.then(function (paypalInstance) {\n      if (\n        !paypalInstance ||\n        typeof paypalInstance.findEligibleMethods !== \"function\"\n      ) {\n        return Promise.reject(\n          new BraintreeError(errors.PAYPAL_CHECKOUT_V6_SDK_NOT_INITIALIZED)\n        );\n      }\n\n      analytics.sendEvent(\n        client,\n        constants.ANALYTICS_EVENTS.FIND_ELIGIBLE_METHODS_STARTED\n      );\n\n      var eligibilityOptions = {\n        currencyCode: options.currency,\n      };\n\n      if (options.amount) {\n        eligibilityOptions.amount = options.amount;\n      }\n      if (options.countryCode) {\n        eligibilityOptions.countryCode = options.countryCode;\n      }\n      if (options.paymentFlow) {\n        eligibilityOptions.paymentFlow = options.paymentFlow;\n      }\n\n      return paypalInstance\n        .findEligibleMethods(eligibilityOptions)\n        .then(function (paymentMethods) {\n          analytics.sendEvent(\n            client,\n            constants.ANALYTICS_EVENTS.FIND_ELIGIBLE_METHODS_SUCCEEDED\n          );\n\n          // Check if SDK returns isEligible method or direct boolean properties\n          var hasIsEligible =\n            paymentMethods && typeof paymentMethods.isEligible === \"function\";\n\n          var result = {\n            paypal: hasIsEligible\n              ? paymentMethods.isEligible(\"paypal\")\n              : Boolean(paymentMethods && paymentMethods.paypal),\n            paylater: hasIsEligible\n              ? paymentMethods.isEligible(\"paylater\")\n              : Boolean(paymentMethods && paymentMethods.paylater),\n            credit: hasIsEligible\n              ? paymentMethods.isEligible(\"credit\")\n              : Boolean(paymentMethods && paymentMethods.credit),\n          };\n\n          result.getDetails = function (method) {\n            return paymentMethods.getDetails(method);\n          };\n\n          return result;\n        })\n        .catch(function (err) {\n          analytics.sendEvent(\n            client,\n            constants.ANALYTICS_EVENTS.FIND_ELIGIBLE_METHODS_FAILED\n          );\n\n          throw convertToBraintreeError(err, {\n            type: errors.PAYPAL_CHECKOUT_V6_ELIGIBILITY_CHECK_FAILED.type,\n            code: errors.PAYPAL_CHECKOUT_V6_ELIGIBILITY_CHECK_FAILED.code,\n            message: errors.PAYPAL_CHECKOUT_V6_ELIGIBILITY_CHECK_FAILED.message,\n          });\n        });\n    });\n  });\n};\n\n/**\n * Creates a PayPal Messages instance for displaying promotional messaging.\n * PayPal Messages display promotional content about Pay Later options, installment plans,\n * and PayPal Credit using web components. This method handles creating the appropriate SDK\n * instance with the messages component and returns a Messages object that can fetch content\n * for &lt;paypal-message&gt; elements.\n *\n * @public\n * @param {object} [options] PayPal Messages options.\n * @param {string} [options.buyerCountry] The buyer's country code (e.g., 'US').\n * @param {string} [options.currencyCode] The currency code (e.g., 'USD').\n * @example\n * // HTML: Add a paypal-message web component\n * // <paypal-message logo-type=\"inline\" text-color=\"monochrome\"></paypal-message>\n *\n * // JavaScript: Create messages instance and fetch content\n * paypalCheckoutV6Instance.loadPayPalSDK().then(function () {\n *   return paypalCheckoutV6Instance.createMessages({\n *     buyerCountry: 'US',\n *     currencyCode: 'USD'\n *   });\n * }).then(function (messagesInstance) {\n *   var messageEl = document.querySelector('paypal-message');\n *\n *   return messagesInstance.fetchContent({\n *     amount: '99.99',\n *     onReady: function (content) {\n *       messageEl.setContent(content);\n *     }\n *   });\n * }).then(function (content) {\n *   // Content is now displayed. You can update it later:\n *   // content.update({ amount: '149.99' });\n * });\n * @example\n * // Multiple messages with quantity updates\n * var messagesInstance;\n * var messageContent;\n * var basePrice = 99.99;\n * var quantity = 1;\n *\n * paypalCheckoutV6Instance.loadPayPalSDK().then(function () {\n *   return paypalCheckoutV6Instance.createMessages({\n *     buyerCountry: 'US',\n *     currencyCode: 'USD'\n *   });\n * }).then(function (instance) {\n *   messagesInstance = instance;\n *   var messageEl = document.querySelector('paypal-message');\n *\n *   return messagesInstance.fetchContent({\n *     amount: String(basePrice * quantity),\n *     onReady: function (content) {\n *       messageEl.setContent(content);\n *     }\n *   });\n * }).then(function (content) {\n *   messageContent = content;\n *\n *   // Update when quantity changes\n *   document.getElementById('increase-qty').addEventListener('click', function () {\n *     quantity++;\n *     messageContent.update({ amount: String(basePrice * quantity) });\n *   });\n * });\n * @returns {Promise} A promise that resolves with a PayPal Messages instance that has a fetchContent() method.\n */\nPayPalCheckoutV6.prototype.createMessages = function (options) {\n  var self = this;\n\n  return this._clientPromise.then(function (client) {\n    analytics.sendEvent(\n      client,\n      constants.ANALYTICS_EVENTS.CREATE_MESSAGES_STARTED\n    );\n\n    // Check if PayPal SDK is loaded when no cached instance exists\n    if (!self._paypalMessagesSdkInstance && !self._isPayPalSdkAvailable()) {\n      analytics.sendEvent(\n        client,\n        constants.ANALYTICS_EVENTS.CREATE_MESSAGES_FAILED\n      );\n\n      return Promise.reject(\n        new BraintreeError(errors.PAYPAL_CHECKOUT_V6_SDK_NOT_INITIALIZED)\n      );\n    }\n\n    // Cache the promise to prevent concurrent createMessages calls from creating multiple SDK instances\n    self._initializePayPalInstance(\"messages\");\n\n    // Determine which promise to use (resolved instance or in-flight promise)\n    var instancePromise = self._paypalMessagesSdkInstance\n      ? Promise.resolve(self._paypalMessagesSdkInstance)\n      : self._messagesInstancePromise;\n\n    return instancePromise\n      .then(function (paypalInstance) {\n        if (\n          !paypalInstance ||\n          typeof paypalInstance.createPayPalMessages !== \"function\"\n        ) {\n          return Promise.reject(\n            new BraintreeError(errors.PAYPAL_CHECKOUT_V6_SDK_NOT_INITIALIZED)\n          );\n        }\n\n        // Call createPayPalMessages on the PayPal SDK instance\n        var messagesInstance = paypalInstance.createPayPalMessages(options);\n\n        analytics.sendEvent(\n          client,\n          constants.ANALYTICS_EVENTS.CREATE_MESSAGES_SUCCEEDED\n        );\n\n        return messagesInstance;\n      })\n      .catch(function (err) {\n        analytics.sendEvent(\n          client,\n          constants.ANALYTICS_EVENTS.CREATE_MESSAGES_FAILED\n        );\n\n        throw convertToBraintreeError(err, {\n          type: errors.PAYPAL_CHECKOUT_V6_MESSAGES_CREATION_FAILED.type,\n          code: errors.PAYPAL_CHECKOUT_V6_MESSAGES_CREATION_FAILED.code,\n          message: errors.PAYPAL_CHECKOUT_V6_MESSAGES_CREATION_FAILED.message,\n        });\n      });\n  });\n};\n\n/**\n * Starts a vault initiated checkout flow using a previously vaulted payment method token.\n * This enables one-click repeat purchases without requiring the PayPal SDK buttons.\n * @public\n * @param {object} options Payment options for vault initiated checkout.\n * @param {string} options.amount The amount of the transaction.\n * @param {string} options.currency The currency code (e.g., 'USD').\n * @param {string} options.vaultInitiatedCheckoutPaymentMethodToken The payment method token representing a vaulted PayPal account.\n * @param {string} [options.intent] Payment intent: 'authorize', 'capture', or 'order'.\n * @param {boolean} [options.optOutOfModalBackdrop=false] Set to true to disable the modal backdrop.\n * @param {Array} [options.lineItems] Line items for the transaction.\n * @param {Array} [options.shippingOptions] Shipping options for the transaction.\n * @param {object} [options.shippingAddressOverride] Shipping address override.\n * @param {object} [options.billingAgreementDetails] Billing agreement details.\n * @param {string} [options.contactPreference] Contact preference setting.\n * @example\n * paypalCheckoutV6Instance.startVaultInitiatedCheckout({\n *   vaultInitiatedCheckoutPaymentMethodToken: 'pm_abc123_vaulted_paypal_token',\n *   amount: '10.00',\n *   currency: 'USD',\n *   intent: 'capture'\n * }).then(function (payload) {\n *   // Submit payload.nonce to your server\n *   console.log('Payment nonce:', payload.nonce);\n * }).catch(function (err) {\n *   if (err.code === 'PAYPAL_CHECKOUT_V6_VIC_CANCELED') {\n *     console.log('Customer closed the popup');\n *   }\n * });\n * @returns {Promise} A promise that resolves with the tokenization payload.\n */\nPayPalCheckoutV6.prototype.startVaultInitiatedCheckout = function (options) {\n  var self = this;\n  var missingRequiredParam;\n\n  if (this._vaultInitiatedCheckoutInProgress) {\n    return this._clientPromise.then(function (client) {\n      analytics.sendEvent(\n        client,\n        \"paypal-checkout-v6.vic.error.already-in-progress\"\n      );\n\n      return Promise.reject(\n        new BraintreeError(errors.PAYPAL_CHECKOUT_V6_VIC_IN_PROGRESS)\n      );\n    });\n  }\n\n  REQUIRED_PARAMS_FOR_VIC.forEach(function (param) {\n    if (!missingRequiredParam && (!options || !options[param])) {\n      missingRequiredParam = param;\n    }\n  });\n\n  if (missingRequiredParam) {\n    return Promise.reject(\n      new BraintreeError({\n        type: errors.PAYPAL_CHECKOUT_V6_VIC_PARAM_REQUIRED.type,\n        code: errors.PAYPAL_CHECKOUT_V6_VIC_PARAM_REQUIRED.code,\n        message: \"Required param \" + missingRequiredParam + \" is missing.\",\n      })\n    );\n  }\n\n  this._vaultInitiatedCheckoutInProgress = true;\n  this._addModalBackdrop(options);\n\n  return Promise.all([self._clientPromise, self._frameServicePromise])\n    .then(function (results) {\n      var client = results[0];\n      var paymentOptions = assign({}, options, {\n        flow: \"checkout\",\n        returnUrl: self._constructVaultCheckoutUrl(\"redirect-frame\"),\n        cancelUrl: self._constructVaultCheckoutUrl(\"cancel-frame\"),\n      });\n\n      analytics.sendEvent(client, \"paypal-checkout-v6.vic.started\");\n\n      var frameCommunicationPromise = new ExtendedPromise();\n\n      self._frameService.open(\n        {},\n        self._createFrameServiceCallback(frameCommunicationPromise)\n      );\n\n      return self\n        ._createPaymentResource(paymentOptions)\n        .then(function (response) {\n          self._frameService.redirect(response.paymentResource.redirectUrl);\n\n          return frameCommunicationPromise;\n        });\n    })\n    .then(function (payload) {\n      self._frameService.close();\n      self._vaultInitiatedCheckoutInProgress = false;\n      self._removeModalBackdrop();\n\n      return self._clientPromise.then(function (client) {\n        analytics.sendEvent(client, \"paypal-checkout-v6.vic.succeeded\");\n\n        return payload;\n      });\n    })\n    .catch(function (err) {\n      self._vaultInitiatedCheckoutInProgress = false;\n      self._removeModalBackdrop();\n\n      if (self._frameService) {\n        self._frameService.close();\n      }\n\n      if (err.code === \"FRAME_SERVICE_FRAME_CLOSED\") {\n        return self._clientPromise.then(function (client) {\n          analytics.sendEvent(\n            client,\n            \"paypal-checkout-v6.vic.canceled-by-customer\"\n          );\n\n          return Promise.reject(\n            new BraintreeError(errors.PAYPAL_CHECKOUT_V6_VIC_CANCELED)\n          );\n        });\n      }\n\n      if (\n        err.code &&\n        err.code.indexOf(\"FRAME_SERVICE_FRAME_OPEN_FAILED\") > -1\n      ) {\n        return self._clientPromise.then(function (client) {\n          analytics.sendEvent(\n            client,\n            \"paypal-checkout-v6.vic.failed.popup-not-opened\"\n          );\n\n          return Promise.reject(\n            new BraintreeError({\n              code: errors.PAYPAL_CHECKOUT_V6_VIC_POPUP_OPEN_FAILED.code,\n              type: errors.PAYPAL_CHECKOUT_V6_VIC_POPUP_OPEN_FAILED.type,\n              message: errors.PAYPAL_CHECKOUT_V6_VIC_POPUP_OPEN_FAILED.message,\n              details: {\n                originalError: err,\n              },\n            })\n          );\n        });\n      }\n\n      throw err;\n    });\n};\n\n/**\n * Closes the PayPal window if it is opened via startVaultInitiatedCheckout.\n * @public\n * @example\n * paypalCheckoutV6Instance.closeVaultInitiatedCheckoutWindow();\n * @returns {Promise} Returns a promise that resolves when the window is closed.\n */\nPayPalCheckoutV6.prototype.closeVaultInitiatedCheckoutWindow = function () {\n  var self = this;\n  var wasVaultInitiatedCheckoutInProgress =\n    this._vaultInitiatedCheckoutInProgress;\n\n  return this._waitForVaultInitiatedCheckoutDependencies().then(function () {\n    if (wasVaultInitiatedCheckoutInProgress) {\n      self._clientPromise.then(function (client) {\n        analytics.sendEvent(\n          client,\n          \"paypal-checkout-v6.vic.canceled-by-merchant\"\n        );\n      });\n    }\n\n    self._frameService.close();\n    self._vaultInitiatedCheckoutInProgress = false;\n    self._removeModalBackdrop();\n  });\n};\n\n/**\n * Focuses the PayPal window if it is opened via startVaultInitiatedCheckout.\n * @public\n * @example\n * paypalCheckoutV6Instance.focusVaultInitiatedCheckoutWindow();\n * @returns {Promise} Returns a promise that resolves when the window is focused.\n */\nPayPalCheckoutV6.prototype.focusVaultInitiatedCheckoutWindow = function () {\n  var self = this;\n\n  return this._waitForVaultInitiatedCheckoutDependencies().then(function () {\n    self._frameService.focus();\n  });\n};\n\n/**\n * @private\n * @param {object} options Options that may contain optOutOfModalBackdrop.\n */\nPayPalCheckoutV6.prototype._addModalBackdrop = function (options) {\n  if (options.optOutOfModalBackdrop) {\n    return;\n  }\n\n  if (!this._modalBackdrop) {\n    this._modalBackdrop = document.createElement(\"div\");\n    this._modalBackdrop.setAttribute(\n      \"data-braintree-paypal-vault-initiated-checkout-modal\",\n      true\n    );\n    this._modalBackdrop.style.position = \"fixed\";\n    this._modalBackdrop.style.top = 0;\n    this._modalBackdrop.style.bottom = 0;\n    this._modalBackdrop.style.left = 0;\n    this._modalBackdrop.style.right = 0;\n    this._modalBackdrop.style.zIndex = 9999;\n    this._modalBackdrop.style.background = \"black\";\n    this._modalBackdrop.style.opacity = \"0.7\";\n    this._modalBackdrop.addEventListener(\n      \"click\",\n      function () {\n        this.focusVaultInitiatedCheckoutWindow();\n      }.bind(this)\n    );\n  }\n\n  document.body.appendChild(this._modalBackdrop);\n};\n\n/**\n * @private\n */\nPayPalCheckoutV6.prototype._removeModalBackdrop = function () {\n  if (!(this._modalBackdrop && this._modalBackdrop.parentNode)) {\n    return;\n  }\n\n  this._modalBackdrop.parentNode.removeChild(this._modalBackdrop);\n};\n\n/**\n * @private\n * @param {string} frameName The frame name (redirect-frame or cancel-frame).\n * @returns {string} The constructed URL for vault checkout redirects.\n */\nPayPalCheckoutV6.prototype._constructVaultCheckoutUrl = function (frameName) {\n  var serviceId = this._frameService._serviceId;\n\n  return (\n    this._assetsUrl +\n    \"/html/\" +\n    frameName +\n    useMin(this._isDebug) +\n    \".html?channel=\" +\n    serviceId\n  );\n};\n\n/**\n * @private\n * @returns {Promise} A promise that resolves when frame service dependencies are ready.\n */\nPayPalCheckoutV6.prototype._waitForVaultInitiatedCheckoutDependencies =\n  function () {\n    var self = this;\n\n    return this._clientPromise.then(function () {\n      return self._frameServicePromise;\n    });\n  };\n\n/**\n * @private\n * @param {ExtendedPromise} frameCommunicationPromise The promise to resolve/reject based on frame communication.\n * @returns {Function} Callback function for frame service.\n */\nPayPalCheckoutV6.prototype._createFrameServiceCallback = function (\n  frameCommunicationPromise\n) {\n  var self = this;\n\n  return function (err, payload) {\n    var payerID, orderID, tokenizeOptions;\n\n    if (err) {\n      frameCommunicationPromise.reject(err);\n    } else if (payload) {\n      payerID = payload.PayerID || payload.payerId || payload.payerid;\n      orderID = payload.orderId || payload.orderid || payload.OrderID;\n      tokenizeOptions = {\n        paymentToken: payload.token,\n        payerID: payerID,\n        paymentID: payload.paymentId,\n        orderID: orderID,\n      };\n\n      self._frameService.redirect(self._loadingFrameUrl);\n      self\n        .tokenizePayment(tokenizeOptions)\n        .then(function (res) {\n          frameCommunicationPromise.resolve(res);\n        })\n        .catch(function (tokenizationError) {\n          frameCommunicationPromise.reject(tokenizationError);\n        });\n    }\n  };\n};\n\n/**\n * Cleanly tears down the PayPal Checkout V6 component.\n * @public\n * @example\n * paypalCheckoutV6Instance.teardown();\n * @returns {Promise} Returns a promise that resolves when teardown is complete.\n */\nPayPalCheckoutV6.prototype.teardown = function () {\n  convertMethodsToError(this, methods(PayPalCheckoutV6.prototype));\n\n  if (this._paypalScript && this._paypalScript.parentNode) {\n    this._paypalScript.parentNode.removeChild(this._paypalScript);\n  }\n\n  return this._clientPromise.then(function (client) {\n    analytics.sendEvent(client, constants.ANALYTICS_EVENTS.TEARDOWN);\n  });\n};\n\nmodule.exports = wrapPromise.wrapPrototype(PayPalCheckoutV6);\n\n},{\"../lib/analytics\":143,\"../lib/asset-load-detail\":144,\"../lib/assets\":145,\"../lib/assign\":146,\"../lib/braintree-error\":149,\"../lib/constants\":150,\"../lib/convert-methods-to-error\":151,\"../lib/convert-to-braintree-error\":152,\"../lib/create-assets-url\":153,\"../lib/create-authorization-data\":154,\"../lib/create-deferred-client\":155,\"../lib/frame-service/external\":164,\"../lib/methods\":182,\"../lib/use-min\":188,\"./constants\":209,\"./errors\":210,\"@braintree/extended-promise\":34,\"@braintree/wrap-promise\":43}],213:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.PayPal Checkout - Creation Error Codes\n * @description Errors that occur when [creating the PayPal Checkout component](./module-braintree-web_paypal-checkout.html#.create).\n * @property {MERCHANT} PAYPAL_NOT_ENABLED Occurs when PayPal is not enabled on the Braintree control panel.\n * @property {MERCHANT} PAYPAL_SANDBOX_ACCOUNT_NOT_LINKED Occurs only when testing in Sandbox, when a PayPal sandbox account is not linked to the merchant account in the Braintree control panel.\n */\n\n/**\n * @name BraintreeError.PayPal Checkout - createPayment Error Codes\n * @description Errors that occur when using the [`createPayment` method](./PayPalCheckout.html#createPayment).\n * @property {MERCHANT} PAYPAL_FLOW_OPTION_REQUIRED Occurs when a required option is missing.\n * @property {MERCHANT} PAYPAL_INVALID_PAYMENT_OPTION Occurs when an option contains an invalid value.\n * @property {NETWORK} PAYPAL_FLOW_FAILED Occurs when something goes wrong when initializing the flow.\n */\n\n/**\n * @name BraintreeError.PayPal Checkout - startVaultInitiatedCheckout Error Codes\n * @description Errors that occur when using the [`startVaultInitiatedCheckout` method](./PayPalCheckout.html#startVaultInitiatedCheckout).\n * @property {MERCHANT} PAYPAL_START_VAULT_INITIATED_CHECKOUT_PARAM_REQUIRED Occurs when a required param is missing when calling the method.\n * @property {MERCHANT} PAYPAL_START_VAULT_INITIATED_CHECKOUT_POPUP_OPEN_FAILED Occurs when PayPal window could not be opened. This often occurs because the call to start the vault initiated flow was not triggered from a click event.\n * @property {CUSTOMER} PAYPAL_START_VAULT_INITIATED_CHECKOUT_CANCELED Occurs when a customer closes the PayPal flow before completion.\n * @property {MERCHANT} PAYPAL_START_VAULT_INITIATED_CHECKOUT_IN_PROGRESS Occurs when the flow is initialized while an authorization is already in progress.\n * @property {NETWORK} PAYPAL_START_VAULT_INITIATED_CHECKOUT_SETUP_FAILED Occurs when something went wrong setting up the flow.\n */\n\n/**\n * @name BraintreeError.PayPal Checkout - tokenizePayment Error Codes\n * @description Errors that occur when using the [`tokenizePayment` method](./PayPalCheckout.html#tokenizePayment).\n * @property {NETWORK} PAYPAL_ACCOUNT_TOKENIZATION_FAILED Occurs when PayPal account could not be tokenized.\n */\n\n/**\n * @name BraintreeError.Paypal Checkout - updatePayment Error Codes\n * @description Errors that occur when using the [`updatePayment` method](./PayPalCheckout.html#updatePayment).\n * @property {MERCHANT} PAYPAL_INVALID_PAYMENT_OPTION Occurs when an option contains an invalid value.\n * @property {MERCHANT} PAYPAL_MISSING_REQUIRED_OPTION Occurs when a required option is missing.\n * @property {NETWORK} PAYPAL_FLOW_FAILED Occurs when something goes wrong when initializing the flow or communicating with the server.\n */\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\n\nmodule.exports = {\n  PAYPAL_NOT_ENABLED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_NOT_ENABLED\",\n    message: \"PayPal is not enabled for this merchant.\",\n  },\n  PAYPAL_SANDBOX_ACCOUNT_NOT_LINKED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_SANDBOX_ACCOUNT_NOT_LINKED\",\n    message:\n      \"A linked PayPal Sandbox account is required to use PayPal Checkout in Sandbox. See https://developer.paypal.com/braintree/docs/guides/paypal/testing-go-live#linked-paypal-testing for details on linking your PayPal sandbox with Braintree.\",\n  },\n  PAYPAL_ACCOUNT_TOKENIZATION_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"PAYPAL_ACCOUNT_TOKENIZATION_FAILED\",\n    message: \"Could not tokenize user's PayPal account.\",\n  },\n  PAYPAL_FLOW_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"PAYPAL_FLOW_FAILED\",\n    message: \"Could not initialize PayPal flow.\",\n  },\n  PAYPAL_FLOW_OPTION_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_FLOW_OPTION_REQUIRED\",\n    message: \"PayPal flow property is invalid or missing.\",\n  },\n  PAYPAL_START_VAULT_INITIATED_CHECKOUT_PARAM_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_START_VAULT_INITIATED_CHECKOUT_PARAM_REQUIRED\",\n  },\n  PAYPAL_START_VAULT_INITIATED_CHECKOUT_SETUP_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"PAYPAL_START_VAULT_INITIATED_CHECKOUT_SETUP_FAILED\",\n    message: \"Something went wrong when setting up the checkout workflow.\",\n  },\n  PAYPAL_START_VAULT_INITIATED_CHECKOUT_POPUP_OPEN_FAILED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_START_VAULT_INITIATED_CHECKOUT_POPUP_OPEN_FAILED\",\n    message:\n      \"PayPal popup failed to open, make sure to initiate the vault checkout in response to a user action.\",\n  },\n  PAYPAL_START_VAULT_INITIATED_CHECKOUT_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"PAYPAL_START_VAULT_INITIATED_CHECKOUT_CANCELED\",\n    message: \"Customer closed PayPal popup before authorizing.\",\n  },\n  PAYPAL_START_VAULT_INITIATED_CHECKOUT_IN_PROGRESS: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_START_VAULT_INITIATED_CHECKOUT_IN_PROGRESS\",\n    message: \"Vault initiated checkout already in progress.\",\n  },\n  PAYPAL_INVALID_PAYMENT_OPTION: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_INVALID_PAYMENT_OPTION\",\n    message: \"PayPal payment options are invalid.\",\n  },\n  PAYPAL_MISSING_REQUIRED_OPTION: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_MISSING_REQUIRED_OPTION\",\n    message: \"Missing required option.\",\n  },\n  PAYPAL_BILLING_AGREEMENT_JWT_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"PAYPAL_BILLING_AGREEMENT_JWT_FAILED\",\n    message:\n      \"Could not create a billing agreement token from the payment method JWT.\",\n  },\n};\n\n},{\"../lib/braintree-error\":149}],214:[function(_dereq_,module,exports){\n\"use strict\";\n/**\n * @module braintree-web/paypal-checkout\n * @description A component to integrate with the [PayPal JS SDK](https://github.com/paypal/paypal-checkout-components).\n */\n\nvar basicComponentVerification = _dereq_(\"../lib/basic-component-verification\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar PayPalCheckout = _dereq_(\"./paypal-checkout\");\nvar VERSION = \"3.145.0\";\n\n/**\n * @static\n * @function create\n * @description There are two ways to integrate the PayPal Checkout component. See the [PayPal Checkout constructor documentation](PayPalCheckout.html#PayPalCheckout) for more information and examples.\n *\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {string} [options.merchantAccountId] A non-default merchant account ID to use for tokenization.\n * @param {boolean} [options.autoSetDataUserIdToken=false] Whether or not to render the PayPal SDK button with a customer's vaulted PayPal account. Must be used in conjunction with a Client Token generated with a customer id.\n * @param {callback} [callback] The second argument, `data`, is the {@link PayPalCheckout} instance.\n * @example\n * braintree.client.create({\n *   authorization: 'authorization'\n * }).then(function (clientInstance) {\n *   return braintree.paypalCheckout.create({\n *     client: clientInstance\n *   });\n * }).then(function (paypalCheckoutInstance) {\n *   // set up the PayPal JS SDK\n * }).catch(function (err) {\n *   console.error('Error!', err);\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nfunction create(options) {\n  var name = \"PayPal Checkout\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      var instance = new PayPalCheckout(options);\n\n      return instance._initialize(options);\n    });\n}\n\n/**\n * @static\n * @function isSupported\n * @description Returns true if PayPal Checkout [supports this browser](index.html#browser-support-webviews).\n * @deprecated Previously, this method checked for Popup support in the browser. The PayPal JS SDK now falls back to a modal if popups are not supported.\n * @returns {Boolean} Returns true if PayPal Checkout supports this browser.\n */\nfunction isSupported() {\n  return true;\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  isSupported: isSupported,\n  /**\n   * @description The current version of the SDK, i.e. `{@pkg version}`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/basic-component-verification\":147,\"./paypal-checkout\":215,\"@braintree/wrap-promise\":43}],215:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar analytics = _dereq_(\"../lib/analytics\");\nvar assign = _dereq_(\"../lib/assign\").assign;\nvar createDeferredClient = _dereq_(\"../lib/create-deferred-client\");\nvar createAssetsUrl = _dereq_(\"../lib/create-assets-url\");\nvar ExtendedPromise = _dereq_(\"@braintree/extended-promise\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar convertToBraintreeError = _dereq_(\"../lib/convert-to-braintree-error\");\nvar errors = _dereq_(\"./errors\");\nvar constants = _dereq_(\"../paypal/shared/constants\");\nvar frameService = _dereq_(\"../lib/frame-service/external\");\nvar createAuthorizationData = _dereq_(\"../lib/create-authorization-data\");\nvar methods = _dereq_(\"../lib/methods\");\nvar useMin = _dereq_(\"../lib/use-min\");\nvar convertMethodsToError = _dereq_(\"../lib/convert-methods-to-error\");\nvar querystring = _dereq_(\"../lib/querystring\");\nvar VERSION = \"3.145.0\";\nvar INTEGRATION_TIMEOUT_MS = _dereq_(\"../lib/constants\").INTEGRATION_TIMEOUT_MS;\n\nvar REQUIRED_PARAMS_FOR_START_VAULT_INITIATED_CHECKOUT = [\n  \"amount\",\n  \"currency\",\n  \"vaultInitiatedCheckoutPaymentMethodToken\",\n];\n\nvar PAYPAL_SDK_PRELOAD_URL =\n  \"https://www.{ENV}paypal.com/smart/buttons/preload\";\n\nExtendedPromise.suppressUnhandledPromiseMessage = true;\n\n/**\n * PayPal Checkout tokenized payload. Returned in {@link PayPalCheckout#tokenizePayment}'s callback as the second argument, `data`.\n * @typedef {object} PayPalCheckout~tokenizePayload\n * @property {string} nonce The payment method nonce.\n * @property {string} type The payment method type, always `PayPalAccount`.\n * @property {object} details Additional PayPal account details.\n * @property {string} details.email User's email address.\n * @property {string} details.payerId User's payer ID, the unique identifier for each PayPal account.\n * @property {string} details.firstName User's given name.\n * @property {string} details.lastName User's surname.\n * @property {?string} details.countryCode User's 2 character country code.\n * @property {?string} details.phone User's phone number (e.g. 555-867-5309).\n * @property {?object} details.shippingAddress User's shipping address details, only available if shipping address is enabled.\n * @property {string} details.shippingAddress.recipientName Recipient of postage.\n * @property {string} details.shippingAddress.line1 Street number and name.\n * @property {string} details.shippingAddress.line2 Extended address.\n * @property {string} details.shippingAddress.city City or locality.\n * @property {string} details.shippingAddress.state State or region.\n * @property {string} details.shippingAddress.postalCode Postal code.\n * @property {string} details.shippingAddress.countryCode 2 character country code (e.g. US).\n * @property {?object} details.billingAddress User's billing address details.\n * Not available to all merchants; [contact support](https://developer.paypal.com/braintree/help) for details on eligibility and enabling this feature.\n * Alternatively, see `shippingAddress` above as an available client option.\n * @property {string} details.billingAddress.line1 Street number and name.\n * @property {string} details.billingAddress.line2 Extended address.\n * @property {string} details.billingAddress.city City or locality.\n * @property {string} details.billingAddress.state State or region.\n * @property {string} details.billingAddress.postalCode Postal code.\n * @property {string} details.billingAddress.countryCode 2 character country code (e.g. US).\n * @property {?object} creditFinancingOffered This property will only be present when the customer pays with PayPal Credit.\n * @property {object} creditFinancingOffered.totalCost This is the estimated total payment amount including interest and fees the user will pay during the lifetime of the loan.\n * @property {string} creditFinancingOffered.totalCost.value An amount defined by [ISO 4217](https://www.iso.org/iso/home/standards/currency_codes.htm) for the given currency.\n * @property {string} creditFinancingOffered.totalCost.currency 3 letter currency code as defined by [ISO 4217](https://www.iso.org/iso/home/standards/currency_codes.htm).\n * @property {number} creditFinancingOffered.term Length of financing terms in months.\n * @property {object} creditFinancingOffered.monthlyPayment This is the estimated amount per month that the customer will need to pay including fees and interest.\n * @property {string} creditFinancingOffered.monthlyPayment.value An amount defined by [ISO 4217](https://www.iso.org/iso/home/standards/currency_codes.htm) for the given currency.\n * @property {string} creditFinancingOffered.monthlyPayment.currency 3 letter currency code as defined by [ISO 4217](https://www.iso.org/iso/home/standards/currency_codes.htm).\n * @property {object} creditFinancingOffered.totalInterest Estimated interest or fees amount the payer will have to pay during the lifetime of the loan.\n * @property {string} creditFinancingOffered.totalInterest.value An amount defined by [ISO 4217](https://www.iso.org/iso/home/standards/currency_codes.htm) for the given currency.\n * @property {string} creditFinancingOffered.totalInterest.currency 3 letter currency code as defined by [ISO 4217](https://www.iso.org/iso/home/standards/currency_codes.htm).\n * @property {boolean} creditFinancingOffered.payerAcceptance Status of whether the customer ultimately was approved for and chose to make the payment using the approved installment credit.\n * @property {boolean} creditFinancingOffered.cartAmountImmutable Indicates whether the cart amount is editable after payer's acceptance on PayPal side.\n */\n\n/**\n * @class\n * @param {object} options see {@link module:braintree-web/paypal-checkout.create|paypal-checkout.create}\n * @classdesc This class represents a PayPal Checkout component that coordinates with the {@link https://developer.paypal.com/docs/checkout/integrate/#2-add-the-paypal-script-to-your-web-page|PayPal SDK}. Instances of this class can generate payment data and tokenize authorized payments.\n *\n * All UI (such as preventing actions on the parent page while authentication is in progress) is managed by the {@link https://developer.paypal.com/docs/checkout/integrate/#2-add-the-paypal-script-to-your-web-page|PayPal SDK}. You must provide your PayPal `client-id` as a query parameter. You can [retrieve this value from the PayPal Dashboard](https://developer.paypal.com/docs/checkout/integrate/#1-get-paypal-rest-api-credentials).\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/paypal-checkout.create|braintree-web.paypal-checkout.create} instead.</strong>\n *\n * #### Integrate Checkout Flow with PayPal SDK\n *\n * You must have [PayPal's script, configured with various query parameters](https://developer.paypal.com/docs/checkout/integrate/#2-add-the-paypal-script-to-your-web-page), loaded on your page:\n *\n * ```html\n * <script src=\"https://www.paypal.com/sdk/js?client-id=your-sandbox-or-prod-client-id\"></script>\n * <div id=\"paypal-button\"></div>\n * ```\n *\n * When passing values in the `createPayment` method, make sure they match the [corresponding parameters in the query parameters for the PayPal SDK script](https://developer.paypal.com/docs/checkout/reference/customize-sdk/).\n *\n * ```javascript\n * braintree.client.create({\n *   authorization: 'authorization'\n * }).then(function (clientInstance) {\n *   return braintree.paypalCheckout.create({\n *     client: clientInstance\n *   });\n * }).then(function (paypalCheckoutInstance) {\n *   return paypal.Buttons({\n *     createOrder: function () {\n *       return paypalCheckoutInstance.createPayment({\n *         flow: 'checkout',\n *         currency: 'USD',\n *         amount: '10.00',\n *         intent: 'capture' // this value must either be `capture` or match the intent passed into the PayPal SDK intent query parameter\n *         // your other createPayment options here\n *       });\n *     },\n *\n *     onApprove: function (data, actions) {\n *       // some logic here before tokenization happens below\n *       return paypalCheckoutInstance.tokenizePayment(data).then(function (payload) {\n *         // Submit payload.nonce to your server\n *       });\n *     },\n *\n *     onCancel: function () {\n *       // handle case where user cancels\n *     },\n *\n *     onError: function (err) {\n *       // handle case where error occurs\n *     }\n *   }).render('#paypal-button');\n * }).catch(function (err) {\n *  console.error('Error!', err);\n * });\n * ```\n *\n * #### Integrate Vault Flow with PayPal SDK\n *\n * You must have [PayPal's script, configured with various query parameters](https://developer.paypal.com/docs/checkout/integrate/#2-add-the-paypal-script-to-your-web-page), loaded on your page:\n *\n * ```html\n * <script src=\"https://www.paypal.com/sdk/js?client-id=your-sandbox-or-prod-client-id&vault=true\"></script>\n * <div id=\"paypal-button\"></div>\n * ```\n *\n * When passing values in the `createPayment` method, make sure they match the [corresponding parameters in the query parameters for the PayPal SDK script](https://developer.paypal.com/docs/checkout/reference/customize-sdk/).\n *\n * ```javascript\n * braintree.client.create({\n *   authorization: 'authorization'\n * }).then(function (clientInstance) {\n *   return braintree.paypalCheckout.create({\n *     client: clientInstance\n *   });\n * }).then(function (paypalCheckoutInstance) {\n *   return paypal.Buttons({\n *     createBillingAgreement: function () {\n *       return paypalCheckoutInstance.createPayment({\n *         flow: 'vault'\n *         // your other createPayment options here\n *       });\n *     },\n *\n *     onApprove: function (data, actions) {\n *       // some logic here before tokenization happens below\n *       return paypalCheckoutInstance.tokenizePayment(data).then(function (payload) {\n *         // Submit payload.nonce to your server\n *       });\n *     },\n *\n *     onCancel: function () {\n *       // handle case where user cancels\n *     },\n *\n *     onError: function (err) {\n *       // handle case where error occurs\n *     }\n *   }).render('#paypal-button');\n * }).catch(function (err) {\n *  console.error('Error!', err);\n * });\n * ```\n *\n * #### Integrate AppSwitch Flow with PayPal SDK\n *\n * ```javascript\n * braintree.client.create({\n *   authorization: 'authorization'\n * }).then(function (clientInstance) {\n *   return braintree.paypalCheckout.create({\n *     client: clientInstance\n *   });\n * }).then(function (paypalCheckoutInstance) {\n *   const buttons = paypal.Buttons({\n *\n *     appSwitchWhenAvailable: true, // Need an indicator to trigger App Switch\n *\n *     createOrder: function () {\n *       return paypalCheckoutInstance.createPayment({\n *         flow: 'checkout',\n *         currency: 'USD',\n *         amount: '10.00',\n *         intent: 'capture', // this value must either be `capture` or match the intent passed into the PayPal SDK intent query parameter\n *         returnUrl: 'www.example.com/return',\n *         cancelUrl: 'www.example.com/cancel',\n *         // your other createPayment options here\n *       });\n *     },\n *\n *     onApprove: function (data, actions) {\n *       // some logic here before tokenization happens below\n *       return paypalCheckoutInstance.tokenizePayment(data).then(function (payload) {\n *         // Submit payload.nonce to your server\n *       });\n *     },\n *\n *     onCancel: function () {\n *       // handle case where user cancels\n *     },\n *\n *     onError: function (err) {\n *       // handle case where error occurs\n *     }\n *   });\n *\n *   // If you support app switch, depending on the browser the buyer may end up in a new tab\n *   // To trigger completion of the flow, execute the code below after re-instantiating buttons\n *   if (buttons.hasReturned()) {\n *     buttons.resume();\n *   } else {\n *     buttons.render('#paypal-button');\n *   };\n * }).catch(function (err) {\n *  console.error('Error!', err);\n * });\n * ```\n *\n * #### Integrate with Checkout.js (deprecated PayPal SDK)\n *\n * If you are creating a new PayPal integration, please follow the previous integration guide to use the current version of the PayPal SDK. Use this integration guide only as a reference if you are already integrated with Checkout.js.\n *\n * You must have PayPal's Checkout.js script loaded on your page.\n *\n * ```html\n * <script src=\"https://www.paypalobjects.com/api/checkout.js\" data-version-4 log-level=\"warn\"></script>\n * ```\n *\n * ```javascript\n * braintree.client.create({\n *   authorization: 'authorization'\n * }).then(function (clientInstance) {\n *   return braintree.paypalCheckout.create({\n *     client: clientInstance\n *   });\n * }).then(function (paypalCheckoutInstance) {\n *   return paypal.Button.render({\n *     env: 'production', // or 'sandbox'\n *\n *     payment: function () {\n *       return paypalCheckoutInstance.createPayment({\n *         // your createPayment options here\n *       });\n *     },\n *\n *     onAuthorize: function (data, actions) {\n *       // some logic here before tokenization happens below\n *       return paypalCheckoutInstance.tokenizePayment(data).then(function (payload) {\n *         // Submit payload.nonce to your server\n *       });\n *     }\n *   }, '#paypal-button');\n * }).catch(function (err) {\n *  console.error('Error!', err);\n * });\n * ```\n */\nfunction PayPalCheckout(options) {\n  this._merchantAccountId = options.merchantAccountId;\n  // eslint-disable-next-line no-warning-comments\n  // TODO remove this requirement for it to be opt in.\n  // This feature is not yet GA, so we're intentionally making\n  // it opt in and not publicly documenting it yet. Once it's\n  // GA, we can remove the requirement to opt in to it\n  this._autoSetDataUserIdToken = Boolean(options.autoSetDataUserIdToken);\n}\n\nPayPalCheckout.prototype._initialize = function (options) {\n  var config;\n\n  if (options.client) {\n    config = options.client.getConfiguration();\n    this._authorizationInformation = {\n      fingerprint: config.authorizationFingerprint,\n      environment: config.gatewayConfiguration.environment,\n    };\n  } else {\n    config = createAuthorizationData(options.authorization);\n    this._authorizationInformation = {\n      fingerprint: config.attrs.authorizationFingerprint,\n      environment: config.environment,\n    };\n  }\n\n  this._clientPromise = createDeferredClient\n    .create({\n      authorization: options.authorization,\n      client: options.client,\n      debug: options.debug,\n      assetsUrl: createAssetsUrl.create(options.authorization),\n      name: \"PayPal Checkout\",\n    })\n    .then(\n      function (client) {\n        this._configuration = client.getConfiguration();\n\n        // we skip these checks if a merchant account id is\n        // passed in, because the default merchant account\n        // may not have paypal enabled\n        if (!this._merchantAccountId) {\n          if (!this._configuration.gatewayConfiguration.paypalEnabled) {\n            this._setupError = new BraintreeError(errors.PAYPAL_NOT_ENABLED);\n          } else if (\n            this._configuration.gatewayConfiguration.paypal\n              .environmentNoNetwork === true\n          ) {\n            this._setupError = new BraintreeError(\n              errors.PAYPAL_SANDBOX_ACCOUNT_NOT_LINKED\n            );\n          }\n        }\n\n        if (this._setupError) {\n          return Promise.reject(this._setupError);\n        }\n\n        analytics.sendEvent(client, \"paypal-checkout.initialized\");\n        this._frameServicePromise = this._setupFrameService(client);\n        this._billingAgreementJwtPromise =\n          this._createBillingAgreementJwt(client);\n\n        return client;\n      }.bind(this)\n    );\n\n  // if client was passed in, let config checks happen before\n  // resolving the instance. Otherwise, just resolve the instance\n  if (options.client) {\n    return this._clientPromise.then(\n      function () {\n        return this;\n      }.bind(this)\n    );\n  }\n\n  return Promise.resolve(this);\n};\n\nPayPalCheckout.prototype._createBillingAgreementJwt = function (client) {\n  var self = this;\n  var paymentMethodIdJwt = this._configuration.paymentMethodIdJwt;\n\n  if (!paymentMethodIdJwt) {\n    return Promise.resolve();\n  }\n\n  return client\n    .request({\n      api: \"graphQLApi\",\n      data: {\n        query: constants.CREATE_BILLING_AGREEMENT_JWT_MUTATION,\n        variables: {\n          input: {\n            paymentMethodJwt: paymentMethodIdJwt,\n          },\n        },\n      },\n    })\n    .then(function (response) {\n      self._billingAgreementJwt = response.data.createBillingAgreementJwt.jwt;\n      analytics.sendEvent(\n        client,\n        \"paypal-checkout.create-billing-agreement-jwt.succeeded\"\n      );\n    })\n    .catch(function (err) {\n      self._billingAgreementJwtError = new BraintreeError({\n        type: errors.PAYPAL_BILLING_AGREEMENT_JWT_FAILED.type,\n        code: errors.PAYPAL_BILLING_AGREEMENT_JWT_FAILED.code,\n        message: errors.PAYPAL_BILLING_AGREEMENT_JWT_FAILED.message,\n        details: { originalError: err },\n      });\n      analytics.sendEvent(\n        client,\n        \"paypal-checkout.create-billing-agreement-jwt.failed\"\n      );\n    });\n};\n\nPayPalCheckout.prototype._setupFrameService = function (client) {\n  var frameServicePromise = new ExtendedPromise();\n  var config = client.getConfiguration();\n  var timeoutRef = setTimeout(function () {\n    analytics.sendEvent(client, \"paypal-checkout.frame-service.timed-out\");\n    frameServicePromise.reject(\n      new BraintreeError(\n        errors.PAYPAL_START_VAULT_INITIATED_CHECKOUT_SETUP_FAILED\n      )\n    );\n  }, INTEGRATION_TIMEOUT_MS);\n\n  this._assetsUrl =\n    config.gatewayConfiguration.paypal.assetsUrl + \"/web/\" + VERSION;\n  this._isDebug = config.isDebug;\n  // Note: this is using the static landing frame that the deprecated PayPal component builds and uses\n  this._loadingFrameUrl =\n    this._assetsUrl +\n    \"/html/paypal-landing-frame\" +\n    useMin(this._isDebug) +\n    \".html\";\n\n  frameService.create(\n    {\n      name: \"braintreepaypallanding\",\n      dispatchFrameUrl:\n        this._assetsUrl +\n        \"/html/dispatch-frame\" +\n        useMin(this._isDebug) +\n        \".html\",\n      openFrameUrl: this._loadingFrameUrl,\n    },\n    function (service) {\n      this._frameService = service;\n      clearTimeout(timeoutRef);\n\n      frameServicePromise.resolve();\n    }.bind(this)\n  );\n\n  return frameServicePromise;\n};\n\n/**\n * @typedef {object} PayPalCheckout~lineItem\n * @property {string} quantity Number of units of the item purchased. This value must be a whole number and can't be negative or zero.\n * @property {string} unitAmount Per-unit price of the item. Can include up to 2 decimal places. This value can't be negative or zero.\n * @property {string} name Item name. Maximum 127 characters.\n * @property {string} kind Indicates whether the line item is a debit (sale) or credit (refund) to the customer. Accepted values: `debit` and `credit`.\n * @property {?string} unitTaxAmount Per-unit tax price of the item. Can include up to 2 decimal places. This value can't be negative or zero.\n * @property {?string} description Item description. Maximum 127 characters.\n * @property {?string} productCode Product or UPC code for the item. Maximum 127 characters.\n * @property {?string} url The URL to product information.\n */\n\n/**\n * @typedef {object} PayPalCheckout~shippingOption\n * @property {string} id A unique ID that identifies a payer-selected shipping option.\n * @property {string} label A description that the payer sees, which helps them choose an appropriate shipping option. For example, `Free Shipping`, `USPS Priority Shipping`, `Exp\u00E9dition prioritaire USPS`, or `USPS y\u014Duxi\u0101n f\u0101 hu\u00F2`. Localize this description to the payer's locale.\n * @property {boolean} selected If `selected = true` is specified as part of the API request it represents the shipping option that the payee/merchant expects to be pre-selected for the payer when they first view the shipping options within the PayPal checkout experience. As part of the response if a shipping option has `selected = true` it represents the shipping option that the payer selected during the course of checkout with PayPal. Only 1 `shippingOption` can be set to `selected = true`.\n * @property {string} type The method by which the payer wants to get their items. The possible values are:\n * * `SHIPPING` - The payer intends to receive the items at a specified address.\n * * `PICKUP` - The payer intends to pick up the items at a specified address. For example, a store address.\n * @property {object} amount The shipping cost for the selected option.\n * @property {string} amount.currency The three-character ISO-4217 currency code. PayPal does not support all currencies.\n * @property {string} amount.value The amount the shipping option will cost. Includes the specified number of digits after decimal separator for the ISO-4217 currency code.\n */\n\n/** @typedef {object} PayPalCheckout~pricingScheme\n * @property {string} pricingModel The pricing model. Options are `FIXED`, `VARIABLE`, or `AUTO_RELOAD`.\n * @property {string} price The price for the billing cycle.\n * @property {string} reloadThresholdAmount The amount at which to reload on auto_reload plans.\n */\n\n/**\n * @typedef {Object} PayPalCheckout~billingCycles\n * @property {(string|number)} billingFrequency The frequency of billing. This value must be a whole number and can't be negative or zero.\n * @property {string} billingFrequencyUnit The unit of billing frequency. Options are `DAY`, `WEEK`, `MONTH`, or `YEAR`.\n * @property {(string|number)} numberOfExecutions The number of executions for the billing cycle.\n * @property {(string|number)} sequence The order in the upcoming billing cycles.\n * @property {string} startDate The start date in ISO 8601 format (`2024-04-06T00:00:00Z`). If populated and the intent is to charge the buyer for the billing cycle at the checkout, it should be populated as current time in ISO 8601 format.\n * @property {boolean} trial Indicates if the billing cycle is a trial.\n * @property {pricingScheme} pricingScheme The {@link PayPalCheckout~pricingScheme|pricing scheme object} for this billing cycle.\n */\n\n/**\n * @typedef {Object} PayPalCheckout~planMetadata\n * @property {billingCycles[]} [billingCycles] An array of {@link PayPalCheckout~billingCycles|billing cycles} for this plan.\n * @property {string} currencyIsoCode The ISO code for the currency, for example `USD`.\n * @property {string} name The name of the plan.\n * @property {(string|number)} oneTimeFeeAmount The one-time fee amount.\n * @property {string} productDescription A description of the product. (Accepts only one element)\n * @property {(string|number)} productPrice The price of the product.\n * @property {(string|number)} productQuantity The quantity of the product. (Accepts only one element)\n * @property {(string|number)} shippingAmount The amount for shipping.\n * @property {(string|number)} taxAmount The amount of tax.\n * @property {string} totalAmount This field is for vault with purchase only. Can include up to 2 decimal places. This value can't be negative or zero.\n */\n\n/**\n * Creates a PayPal payment ID or billing token using the given options. This is meant to be passed to the PayPal JS SDK.\n * When a {@link callback} is defined, the function returns undefined and invokes the callback with the id to be used with the PayPal JS SDK. Otherwise, it returns a Promise that resolves with the id.\n * @public\n * @param {object} options All options for the PayPalCheckout component.\n * @param {string} options.flow Set to 'checkout' for one-time payment flow, or 'vault' for Vault flow. If 'vault' is used with a client token generated with a customer ID, the PayPal account will be added to that customer as a saved payment method.\n * @param {string} [options.intent=authorize]\n * * `authorize` - Submits the transaction for authorization but not settlement.\n * * `order` - Validates the transaction without an authorization (i.e. without holding funds). Useful for authorizing and capturing funds up to 90 days after the order has been placed. Only available for Checkout flow.\n * * `capture` - Payment will be immediately submitted for settlement upon creating a transaction. `sale` can be used as an alias for this value.\n * @param {boolean} [options.offerCredit=false] Offers PayPal Credit as the default funding instrument for the transaction. If the customer isn't pre-approved for PayPal Credit, they will be prompted to apply for it.\n * @param {(string|number)} [options.amount] The amount of the transaction. Required when using the Checkout flow. Should not include shipping cost.\n * * Supports up to 2 digits after the decimal point\n * @param {string} [options.currency] The currency code of the amount, such as 'USD'. Required when using the Checkout flow.\n * @param {string} [options.displayName] The merchant name displayed inside of the PayPal lightbox; defaults to the company name on your Braintree account\n * @param {boolean} [options.requestBillingAgreement] If `true` and `flow = checkout`, the customer will be prompted to consent to a billing agreement during the checkout flow. This value is ignored when `flow = vault`.\n * @param {object} [options.billingAgreementDetails] When `requestBillingAgreement = true`, allows for details to be set for the billing agreement portion of the flow.\n * @param {string} [options.billingAgreementDetails.description] Description of the billing agreement to display to the customer.\n * @param {string} [options.vaultInitiatedCheckoutPaymentMethodToken] Use the payment method nonce representing a PayPal account with a Billing Agreement ID to create the payment and redirect the customer to select a new financial instrument. This option is only applicable to the `checkout` flow.\n * @param {shippingOption[]} [options.shippingOptions] List of shipping options offered by the payee or merchant to the payer to ship or pick up their items.\n * * Note: `shippingOptions` cannot be combined with either `enableShippingAddress: false` or `shippingAddressEditable: false`. The PayPal Orders API does not support combining shipping options with `NO_SHIPPING` or `SET_PROVIDED_ADDRESS` shipping preferences. When `shippingOptions` are provided alongside either of those settings, the gateway overrides the address restrictions to prevent a PayPal API error, meaning the shipping address will remain editable regardless of those settings.\n * @param {boolean} [options.enableShippingAddress=false] Returns a shipping address object in {@link PayPal#tokenize}.\n * * Note: When `enableShippingAddress` is set to `false`, it is mutually exclusive with `shippingOptions`. In that configuration, if both are provided, the gateway overrides `enableShippingAddress: false` in favor of `shippingOptions`. See `shippingOptions` for details.\n * @param {string} [options.contactPreference] Optional field but required if using different recipient via `shippingAddressOverride`. Can be 'NO_CONTACT_INFO', 'RETAIN_CONTACT_INFO' or 'UPDATE_CONTACT_INFO'. If null, will default to 'NO_CONTACT_INFO'.\n * * Note: this feature is currently available for US-based merchants only; see https://developer.paypal.com/docs/checkout/standard/customize/contact-module/#availability for up-to-date regional availability.\n * @param {object} [options.shippingAddressOverride] Allows you to pass a shipping address you have already collected into the PayPal payment flow.\n * @param {string} options.shippingAddressOverride.line1 Street address.\n * @param {string} [options.shippingAddressOverride.line2] Street address (extended).\n * @param {string} options.shippingAddressOverride.city City.\n * @param {string} options.shippingAddressOverride.state State.\n * @param {string} options.shippingAddressOverride.postalCode Postal code.\n * @param {string} options.shippingAddressOverride.countryCode Country.\n * @param {string} [options.shippingAddressOverride.phone] Phone number.\n * @param {string} [options.shippingAddressOverride.recipientName] Recipient's name.\n * @param {string} [options.shippingAddressOverride.recipientEmail] Email address of the recipient.\n * @param {string} [options.shippingAddressOverride.internationalPhone.countryCode] Phone country code of the recipient.\n * @param {string} [options.shippingAddressOverride.internationalPhone.nationalNumber] Phone national number of the recipient.\n * @param {boolean} [options.shippingAddressEditable=true] Set to false to disable user editing of the shipping address.\n * * Note: Setting this to `false` is not compatible with `shippingOptions`. When both are provided, the gateway overrides this setting in favor of `shippingOptions`. See `shippingOptions` for details.\n * @param {string} [options.billingAgreementDescription] Use this option to set the description of the preapproved payment agreement visible to customers in their PayPal profile during Vault flows. Max 255 characters.\n * @param {string} [options.landingPageType] Use this option to specify the PayPal page to display when a user lands on the PayPal site to complete the payment.\n * * `login` - A PayPal account login page is used.\n * * `billing` - A non-PayPal account landing page is used.\n * @param {lineItem[]} [options.lineItems] The {@link PayPalCheckout~lineItem|line items} for this transaction. It can include up to 249 line items.\n *\n * @param {string} [options.planType] Determines the charge pattern for the Recurring Billing Agreement. Can be 'RECURRING', 'SUBSCRIPTION', 'UNSCHEDULED', or 'INSTALLMENTS'.\n * @param {planMetadata} [options.planMetadata] When plan type is defined, allows for {@link PayPalCheckout~planMetadata|plan metadata} to be set for the Billing Agreement.\n * @param {string} [options.userAuthenticationEmail] Optional merchant-provided buyer email, used to streamline the sign-in process for both one-time checkout and vault flows.\n * @param {string} [options.returnUrl] The URL that the PayPal app will open after a successful authentication in the app switch flow. Required when using `appSwitchWhenAvailable: true` on `paypal.Buttons()`.\n * @param {string} [options.cancelUrl] The URL that the PayPal app will open after an unsuccessful authentication in the app switch flow. Required when using `appSwitchWhenAvailable: true` on `paypal.Buttons()`.\n * @param {string} [options.shippingCallbackUrl] Optional server side shipping callback URL to be notified when a customer updates their shipping address or options. A callback request will be sent to the merchant server at this URL.\n * @param {string} [options.riskCorrelationId] Optional merchant-provided risk correlation ID. This ID is used for tracking risk management.\n * @param {string} [options.paymentReadySessionId] Optional session identifier returned from PaymentReady.createCustomerSession that can be used to track a specific checkout attempt. This ID is used for analytics and to connect multiple API calls associated with a single checkout flow.\n * @param {boolean} [options.editBillingAgreement] When `true`, initiates the Edit FI (funding instrument) flow for a returning buyer with a vaulted Billing Agreement. Requires the client token to have been generated with a `preferredPaymentMethodToken`. Only applicable to the `checkout` flow.\n * @param {string} [options.userAction=CONTINUE] Changes the call-to-action on the PayPal review page\n *  * `CONTINUE` - Shows the default call-to-action text on the PayPal Express Checkout page.\n *  * `COMMIT` - Shows a deterministic call-to-action for the PayPal Checkout flow.\n *  * `SETUP_NOW` - Shows a deterministic call-to-action for the PayPal Vault flow.\n * @param {object} [options.amountBreakdown] Collection of amounts that break down the total into individual pieces.\n * @param {string} options.amountBreakdown.itemTotal item amount\n * @param {string} [options.amountBreakdown.taxTotal] Tax amount. Required when `lineItem.unitTaxAmount` is used\n * @param {string} [options.amountBreakdown.shipping] Shipping amount\n * @param {string} [options.amountBreakdown.handling] Handling amount. Not accepted with {@link PayPalCheckout~planMetadata|plan metadata}\n * @param {string} [options.amountBreakdown.insurance] Insurance amount. Not accepted with {@link PayPalCheckout~planMetadata|plan metadata}\n * @param {string} [options.amountBreakdown.shippingDiscount] Shipping discount amount. Not accepted with {@link PayPalCheckout~planMetadata|plan metadata}\n * @param {string} [options.amountBreakdown.discount] Discount amount. Not accepted with {@link PayPalCheckout~planMetadata|plan metadata}\n * @param {callback} [callback] The second argument is a PayPal `paymentId` or `billingToken` string, depending on whether `options.flow` is `checkout` or `vault`. This is also what is resolved by the promise if no callback is provided.\n * @example\n * // this paypal object is created by the PayPal JS SDK\n * // see https://github.com/paypal/paypal-checkout-components\n * paypal.Buttons({\n *   createOrder: function () {\n *     // when createPayment resolves, it is automatically passed to the PayPal JS SDK\n *     return paypalCheckoutInstance.createPayment({\n *       flow: 'checkout',\n *       amount: '10.00',\n *       currency: 'USD',\n *       intent: 'capture' // this value must either be `capture` or match the intent passed into the PayPal SDK intent query parameter\n *     });\n *   },\n *   // Add other options, e.g. onApproved, onCancel, onError\n * }).render('#paypal-button');\n *\n * @example\n * // shippingOptions are passed to createPayment. You can review the result from onAuthorize to determine which shipping option id was selected.\n * ```javascript\n * braintree.client.create({\n *   authorization: 'authorization'\n * }).then(function (clientInstance) {\n *   return braintree.paypalCheckout.create({\n *     client: clientInstance\n *   });\n * }).then(function (paypalCheckoutInstance) {\n *   return paypal.Button.render({\n *     env: 'production'\n *\n *     payment: function () {\n *       return paypalCheckoutInstance.createPayment({\n *         flow: 'checkout',\n *         amount: '10.00',\n *         currency: 'USD',\n *         shippingOptions: [\n *           {\n *             id: 'UUID-9',\n *             type: 'PICKUP',\n *             label: 'Store Location Five',\n *             selected: true,\n *             amount: {\n *               value: '1.00',\n *               currency: 'USD'\n *             }\n *           },\n *           {\n *             id: 'shipping-speed-fast',\n *             type: 'SHIPPING',\n *             label: 'Fast Shipping',\n *             selected: false,\n *             amount: {\n *               value: '1.00',\n *               currency: 'USD'\n *             }\n *           },\n *           {\n *             id: 'shipping-speed-slow',\n *             type: 'SHIPPING',\n *             label: 'Slow Shipping',\n *             selected: false,\n *             amount: {\n *               value: '1.00',\n *               currency: 'USD'\n *             }\n *           }\n *         ]\n *       });\n *     },\n *\n *     onAuthorize: function (data, actions) {\n *       return paypalCheckoutInstance.tokenizePayment(data).then(function (payload) {\n *         // Submit payload.nonce to your server\n *       });\n *     }\n *   }, '#paypal-button');\n * }).catch(function (err) {\n *  console.error('Error!', err);\n * });\n *\n * ```\n *\n * @example <caption>use the new plan features</caption>\n * // Plan and plan metadata are passed to createPayment\n * ```javascript\n * braintree.client.create({\n *   authorization: 'authorization'\n * }).then(function (clientInstance) {\n *   return braintree.paypalCheckout.create({\n *     client: clientInstance\n *   });\n * }).then(function (paypalCheckoutInstance) {\n *   return paypal.Button.render({\n *     env: 'production'\n *\n *     payment: function () {\n *       return paypalCheckoutInstance.createPayment({\n *         flow: 'vault',\n *         planType: 'RECURRING',\n *         planMetadata: {\n *           billingCycles: [\n *             {\n *                billingFrequency: \"1\",\n *                billingFrequencyUnit: \"MONTH\",\n *                numberOfExecutions: \"1\",\n *                sequence: \"1\",\n *                startDate: \"2024-04-06T00:00:00Z\",\n *                trial: true,\n *                pricingScheme: {\n *                  pricingModel: \"FIXED\",\n *              },\n *            },\n *            ],\n *           currencyIsoCode: \"USD\",\n *           name: \"Netflix with Ads\",\n *           productDescription: \"iPhone 13\",\n *           productQuantity: \"1.0\",\n *           oneTimeFeeAmount: \"10\",\n *           shippingAmount: \"3.0\",\n *           productPrice: \"200\",\n *           taxAmount: \"20\",\n *        };\n *       });\n *     },\n *\n *     onAuthorize: function (data, actions) {\n *       return paypalCheckoutInstance.tokenizePayment(data).then(function (payload) {\n *         // Submit payload.nonce to your server\n *       });\n *     }\n *   }, '#paypal-button');\n * }).catch(function (err) {\n *  console.error('Error!', err);\n * });\n *\n * ```\n * @example <caption>Vault Flow with Purchase (Billing Agreement with Recurring Payment)</caption>\n * paypal.Buttons({\n *   createBillingAgreement: function () {\n *     return paypalCheckoutInstance.createPayment({\n *       flow: 'vault',\n *       amount: '12.50',\n *       currency: 'USD',\n *       planType: 'SUBSCRIPTION',\n *       planMetadata: {\n *         billingCycles: [{\n *           billingFrequency: 1,\n *           billingFrequencyUnit: \"MONTH\",\n *           sequence: 1,\n *           pricingScheme: {\n *             pricingModel: \"FIXED\",\n *             price: \"10.00\"\n *           },\n *         }],\n *         currencyIsoCode: \"USD\",\n *         totalAmount: \"10.00\",\n *         name: \"My Recurring Product\"\n *       }\n *     });\n *   },\n *   onApprove: function (data) {\n *     return paypalCheckoutInstance.tokenizePayment(data);\n *   }\n * }).render('#paypal-button');\n *\n * @returns {(promise|void)} returns a promise if no callback is provided.\n */\nPayPalCheckout.prototype.createPayment = function (options) {\n  var self = this;\n  if (!options || !constants.FLOW_ENDPOINTS.hasOwnProperty(options.flow)) {\n    return Promise.reject(\n      new BraintreeError(errors.PAYPAL_FLOW_OPTION_REQUIRED)\n    );\n  }\n\n  analytics.sendEvent(this._clientPromise, \"paypal-checkout.createPayment\");\n\n  return this._createPaymentResource(options).then(function (response) {\n    var flowToken, urlParams;\n\n    if (options.flow === \"checkout\") {\n      urlParams = querystring.parse(response.paymentResource.redirectUrl);\n      flowToken = urlParams.token;\n    } else {\n      flowToken = response.agreementSetup.tokenId;\n    }\n\n    self._contextId = flowToken;\n\n    return flowToken;\n  });\n};\n\n/**\n * @private\n * @returns {Promise} A promise that resolves with payment resource data\n */\nPayPalCheckout.prototype._createPaymentResource = function (options, config) {\n  var self = this;\n  var endpoint = \"paypal_hermes/\" + constants.FLOW_ENDPOINTS[options.flow];\n\n  this._flow = options.flow;\n  delete this.intentFromCreatePayment;\n\n  config = config || {};\n\n  if (options.offerCredit === true) {\n    analytics.sendEvent(this._clientPromise, \"paypal-checkout.credit.offered\");\n  }\n\n  return this._clientPromise\n    .then(function (client) {\n      return Promise.all([\n        client,\n        self._billingAgreementJwtPromise || Promise.resolve(),\n      ]);\n    })\n    .then(function (results) {\n      var client = results[0];\n\n      return client\n        .request({\n          endpoint: endpoint,\n          method: \"post\",\n          data: self._formatPaymentResourceData(options, config),\n        })\n        .then(function (data) {\n          self.intentFromCreatePayment = options.intent;\n\n          return data;\n        });\n    })\n    .catch(function (err) {\n      var status;\n\n      if (self._setupError) {\n        return Promise.reject(self._setupError);\n      }\n\n      status = err.details && err.details.httpStatus;\n\n      if (status === 422) {\n        return Promise.reject(\n          new BraintreeError({\n            type: errors.PAYPAL_INVALID_PAYMENT_OPTION.type,\n            code: errors.PAYPAL_INVALID_PAYMENT_OPTION.code,\n            message: errors.PAYPAL_INVALID_PAYMENT_OPTION.message,\n            details: {\n              originalError: err,\n            },\n          })\n        );\n      }\n\n      return Promise.reject(\n        convertToBraintreeError(err, {\n          type: errors.PAYPAL_FLOW_FAILED.type,\n          code: errors.PAYPAL_FLOW_FAILED.code,\n          message: errors.PAYPAL_FLOW_FAILED.message,\n        })\n      );\n    });\n};\n\n/**\n * Use this function to update {@link PayPalCheckout~lineItem|line items} and/or {@link PayPalCheckout~shippingOption|shipping options} associated with a PayPalCheckout flow (`paymentId`).\n * When a {@link callback} is defined, this function returns undefined and invokes the callback. The second callback argument, <code>data</code>, is the returned server data. If no callback is provided, `updatePayment` returns a promise that resolves with the server data.\n * @public\n * @param {object} options All options for the PayPalCheckout component.\n * @param {string} options.paymentId This should be PayPal `paymentId`.\n * @param {(string|number)} options.amount The amount of the transaction, including the amount of the selected shipping option, and all `line_items`.\n * * Supports up to 2 decimal digits.\n * @param {string} options.currency The currency code of the amount, such as 'USD'. Required when using the Checkout flow.\n * @param {string} [options.recipientEmail] Email address of the contact and shipping recipient of the order.\n * @param {shippingOption[]} [options.shippingOptions] List of {@link PayPalCheckout~shippingOption|shipping options} offered by the payee or merchant to the payer to ship or pick up their items.\n * @param {lineItem[]} [options.lineItems] The {@link PayPalCheckout~lineItem|line items} for this transaction. It can include up to 249 line items.\n * @param {object} [options.amountBreakdown] Optional collection of amounts that break down the total into individual pieces.\n * @param {string} [options.amountBreakdown.itemTotal] Optional, item amount\n * @param {string} [options.amountBreakdown.shipping] Optional, shipping amount\n * @param {string} [options.amountBreakdown.handling] Optional, handling amount\n * @param {string} [options.amountBreakdown.taxTotal] Optional, tax amount\n * @param {string} [options.amountBreakdown.insurance] Optional, insurance amount\n * @param {string} [options.amountBreakdown.shippingDiscount] Optional, shipping discount amount\n * @param {string} [options.amountBreakdown.discount] Optional, discount amount\n * @param {callback} [callback] The second argument is a PayPal `paymentId` or `billingToken` string, depending on whether `options.flow` is `checkout` or `vault`. This is also what is resolved by the promise if no callback is provided.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * // this paypal object is created by the PayPal JS SDK\n * // see https://github.com/paypal/paypal-checkout-components\n * paypal.Buttons({\n *   createOrder: function () {\n *     // when createPayment resolves, it is automatically passed to the PayPal JS SDK\n *     return paypalCheckoutInstance.createPayment({\n *       //\n *     });\n *   },\n *   onShippingChange: function (data) {\n *     // Examine data and determine if the payment needs to be updated.\n *     // when updatePayment resolves, it is automatically passed to the PayPal JS SDK\n *     return paypalCheckoutInstance.updatePayment({\n *         paymentId: data.paymentId,\n *         amount: '15.00',\n *         currency: 'USD',\n *         shippingOptions: [\n *           {\n *             id: 'shipping-speed-fast',\n *             type: 'SHIPPING',\n *             label: 'Fast Shipping',\n *             selected: true,\n *             amount: {\n *               value: '5.00',\n *               currency: 'USD'\n *             }\n *           },\n *           {\n *             id: 'shipping-speed-slow',\n *             type: 'SHIPPING',\n *             label: 'Slow Shipping',\n *             selected: false,\n *             amount: {\n *               value: '1.00',\n *               currency: 'USD'\n *             }\n *           }\n *         ]\n *     });\n *   }\n *   // Add other options, e.g. onApproved, onCancel, onError\n * }).render('#paypal-button');\n *\n * ```\n *\n */\nPayPalCheckout.prototype.updatePayment = function (options) {\n  var self = this;\n  var endpoint = \"paypal_hermes/patch_payment_resource\";\n\n  if (!options || this._hasMissingOption(options, constants.REQUIRED_OPTIONS)) {\n    analytics.sendEventPlus(\n      self._clientPromise,\n      \"paypal-checkout.updatePayment.missing-options\",\n      {\n        flow: self._flow,\n        context_id: self._contextId, // eslint-disable-line camelcase\n      }\n    );\n\n    return Promise.reject(\n      new BraintreeError(errors.PAYPAL_MISSING_REQUIRED_OPTION)\n    );\n  }\n\n  if (!this._verifyConsistentCurrency(options)) {\n    analytics.sendEventPlus(\n      self._clientPromise,\n      \"paypal-checkout.updatePayment.inconsistent-currencies\",\n      {\n        flow: self._flow,\n        context_id: self._contextId, // eslint-disable-line camelcase\n      }\n    );\n\n    return Promise.reject(\n      new BraintreeError({\n        type: errors.PAYPAL_INVALID_PAYMENT_OPTION.type,\n        code: errors.PAYPAL_INVALID_PAYMENT_OPTION.code,\n        message: errors.PAYPAL_INVALID_PAYMENT_OPTION.message,\n        details: {\n          originalError: new Error(\n            \"One or more shipping option currencies differ from checkout currency.\"\n          ),\n        },\n      })\n    );\n  }\n  analytics.sendEventPlus(\n    this._clientPromise,\n    \"paypal-checkout.updatePayment\",\n    {\n      flow: self._flow,\n      context_id: self._contextId, // eslint-disable-line camelcase\n    }\n  );\n\n  return this._clientPromise\n    .then(function (client) {\n      return client.request({\n        endpoint: endpoint,\n        method: \"post\",\n        data: self._formatUpdatePaymentData(options),\n      });\n    })\n    .catch(function (err) {\n      var status = err.details && err.details.httpStatus;\n\n      if (status === 422) {\n        analytics.sendEventPlus(\n          self._clientPromise,\n          \"paypal-checkout.updatePayment.invalid\",\n          {\n            flow: self._flow,\n            context_id: self._contextId, // eslint-disable-line camelcase\n          }\n        );\n\n        return Promise.reject(\n          new BraintreeError({\n            type: errors.PAYPAL_INVALID_PAYMENT_OPTION.type,\n            code: errors.PAYPAL_INVALID_PAYMENT_OPTION.code,\n            message: errors.PAYPAL_INVALID_PAYMENT_OPTION.message,\n            details: {\n              originalError: err,\n            },\n          })\n        );\n      }\n\n      analytics.sendEventPlus(\n        self._clientPromise,\n        \"paypal-checkout.updatePayment.\" + errors.PAYPAL_FLOW_FAILED.code,\n        {\n          flow: self._flow,\n          context_id: self._contextId, // eslint-disable-line camelcase\n        }\n      );\n\n      return Promise.reject(\n        convertToBraintreeError(err, {\n          type: errors.PAYPAL_FLOW_FAILED.type,\n          code: errors.PAYPAL_FLOW_FAILED.code,\n          message: errors.PAYPAL_FLOW_FAILED.message,\n        })\n      );\n    });\n};\n\n/**\n * Initializes the PayPal checkout flow with a payment method nonce that represents a vaulted PayPal account.\n * When a {@link callback} is defined, the function returns undefined and invokes the callback with the id to be used with the PayPal JS SDK. Otherwise, it returns a Promise that resolves with the id.\n * @public\n * @ignore\n * @param {object} options These options are identical to the {@link PayPalCheckout#createPayment|options for creating a payment resource}, except for the following:\n * * `flow` cannot be set (will always be `'checkout'`)\n * * `amount`, `currency`, and `vaultInitiatedCheckoutPaymentMethodToken` are required instead of optional\n * * Additional configuration is available (listed below)\n * @param {boolean} [options.optOutOfModalBackdrop=false] By default, the webpage will darken and become unusable while the PayPal window is open. For full control of the UI, pass `true` for this option.\n * @param {callback} [callback] The second argument, <code>payload</code>, is a {@link PayPalCheckout~tokenizePayload|tokenizePayload}. If no callback is provided, the promise resolves with a {@link PayPalCheckout~tokenizePayload|tokenizePayload}.\n * @example\n * paypalCheckoutInstance.startVaultInitiatedCheckout({\n *   vaultInitiatedCheckoutPaymentMethodToken: 'nonce-that-represents-a-vaulted-paypal-account',\n *   amount: '10.00',\n *   currency: 'USD'\n * }).then(function (payload) {\n *   // send payload.nonce to your server\n * }).catch(function (err) {\n *   if (err.code === 'PAYPAL_POPUP_CLOSED') {\n *     // indicates that customer canceled by\n *     // manually closing the PayPal popup\n *   }\n *\n *   // handle other errors\n * });\n *\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nPayPalCheckout.prototype.startVaultInitiatedCheckout = function (options) {\n  var missingRequiredParam;\n  var self = this;\n\n  if (this._vaultInitiatedCheckoutInProgress) {\n    analytics.sendEventPlus(\n      this._clientPromise,\n      \"paypal-checkout.startVaultInitiatedCheckout.error.already-in-progress\",\n      {\n        flow: self._flow,\n        context_id: self._contextId, // eslint-disable-line camelcase\n      }\n    );\n\n    return Promise.reject(\n      new BraintreeError(\n        errors.PAYPAL_START_VAULT_INITIATED_CHECKOUT_IN_PROGRESS\n      )\n    );\n  }\n\n  REQUIRED_PARAMS_FOR_START_VAULT_INITIATED_CHECKOUT.forEach(function (param) {\n    if (!options.hasOwnProperty(param)) {\n      missingRequiredParam = param;\n    }\n  });\n\n  if (missingRequiredParam) {\n    return Promise.reject(\n      new BraintreeError({\n        type: errors.PAYPAL_START_VAULT_INITIATED_CHECKOUT_PARAM_REQUIRED.type,\n        code: errors.PAYPAL_START_VAULT_INITIATED_CHECKOUT_PARAM_REQUIRED.code,\n        message: \"Required param \" + missingRequiredParam + \" is missing.\",\n      })\n    );\n  }\n\n  this._vaultInitiatedCheckoutInProgress = true;\n  this._addModalBackdrop(options);\n\n  options = assign({}, options, {\n    flow: \"checkout\",\n  });\n  analytics.sendEventPlus(\n    this._clientPromise,\n    \"paypal-checkout.startVaultInitiatedCheckout.started\",\n    {\n      flow: self._flow,\n      context_id: self._contextId, // eslint-disable-line camelcase\n    }\n  );\n\n  return this._waitForVaultInitiatedCheckoutDependencies()\n    .then(function () {\n      var frameCommunicationPromise = new ExtendedPromise();\n      var startVaultInitiatedCheckoutPromise = self\n        ._createPaymentResource(options, {\n          returnUrl: self._constructVaultCheckoutUrl(\"redirect-frame\"),\n          cancelUrl: self._constructVaultCheckoutUrl(\"cancel-frame\"),\n        })\n        .then(function (response) {\n          var redirectUrl = response.paymentResource.redirectUrl;\n\n          self._frameService.redirect(redirectUrl);\n\n          return frameCommunicationPromise;\n        });\n\n      self._popupSawResume = false;\n      self._frameService.open(\n        {\n          onSuspend: function () {\n            analytics.sendEventPlus(\n              self._clientPromise,\n              \"paypal-checkout.popup.suspended\",\n              {\n                flow: self._flow,\n                context_id: self._contextId, // eslint-disable-line camelcase\n              }\n            );\n          },\n          onResume: function () {\n            self._popupSawResume = true;\n            analytics.sendEventPlus(\n              self._clientPromise,\n              \"paypal-checkout.popup.resumed\",\n              {\n                flow: self._flow,\n                context_id: self._contextId, // eslint-disable-line camelcase\n              }\n            );\n          },\n        },\n        self._createFrameServiceCallback(frameCommunicationPromise)\n      );\n\n      return startVaultInitiatedCheckoutPromise;\n    })\n    .catch(function (err) {\n      self._vaultInitiatedCheckoutInProgress = false;\n      self._removeModalBackdrop();\n\n      if (err.code === \"FRAME_SERVICE_FRAME_CLOSED\") {\n        analytics.sendEventPlus(\n          self._clientPromise,\n          \"paypal-checkout.startVaultInitiatedCheckout.canceled.by-customer\",\n          {\n            flow: self._flow,\n            context_id: self._contextId, // eslint-disable-line camelcase\n          }\n        );\n\n        return Promise.reject(\n          new BraintreeError(\n            errors.PAYPAL_START_VAULT_INITIATED_CHECKOUT_CANCELED\n          )\n        );\n      }\n\n      if (self._frameService) {\n        self._frameService.close();\n      }\n\n      if (\n        err.code &&\n        err.code.indexOf(\"FRAME_SERVICE_FRAME_OPEN_FAILED\") > -1\n      ) {\n        analytics.sendEventPlus(\n          self._clientPromise,\n          \"paypal-checkout.startVaultInitiatedCheckout.failed.popup-not-opened\",\n          {\n            flow: self._flow,\n            context_id: self._contextId, // eslint-disable-line camelcase\n          }\n        );\n\n        return Promise.reject(\n          new BraintreeError({\n            code: errors.PAYPAL_START_VAULT_INITIATED_CHECKOUT_POPUP_OPEN_FAILED\n              .code,\n            type: errors.PAYPAL_START_VAULT_INITIATED_CHECKOUT_POPUP_OPEN_FAILED\n              .type,\n            message:\n              errors.PAYPAL_START_VAULT_INITIATED_CHECKOUT_POPUP_OPEN_FAILED\n                .message,\n            details: {\n              originalError: err,\n            },\n          })\n        );\n      }\n\n      return Promise.reject(err);\n    })\n    .then(function (response) {\n      self._frameService.close();\n      self._vaultInitiatedCheckoutInProgress = false;\n      self._removeModalBackdrop();\n      analytics.sendEventPlus(\n        self._clientPromise,\n        \"paypal-checkout.startVaultInitiatedCheckout.succeeded\",\n        {\n          flow: self._flow,\n          context_id: self._contextId, // eslint-disable-line camelcase\n        }\n      );\n\n      return Promise.resolve(response);\n    });\n};\n\nPayPalCheckout.prototype._addModalBackdrop = function (options) {\n  if (options.optOutOfModalBackdrop) {\n    return;\n  }\n\n  if (!this._modalBackdrop) {\n    this._modalBackdrop = document.createElement(\"div\");\n    this._modalBackdrop.setAttribute(\n      \"data-braintree-paypal-vault-initiated-checkout-modal\",\n      true\n    );\n    this._modalBackdrop.style.position = \"fixed\";\n    this._modalBackdrop.style.top = 0;\n    this._modalBackdrop.style.bottom = 0;\n    this._modalBackdrop.style.left = 0;\n    this._modalBackdrop.style.right = 0;\n    this._modalBackdrop.style.zIndex = 9999;\n    this._modalBackdrop.style.background = \"black\";\n    this._modalBackdrop.style.opacity = \"0.7\";\n    this._modalBackdrop.addEventListener(\n      \"click\",\n      function () {\n        this.focusVaultInitiatedCheckoutWindow();\n      }.bind(this)\n    );\n  }\n\n  document.body.appendChild(this._modalBackdrop);\n};\n\nPayPalCheckout.prototype._removeModalBackdrop = function () {\n  if (!(this._modalBackdrop && this._modalBackdrop.parentNode)) {\n    return;\n  }\n\n  this._modalBackdrop.parentNode.removeChild(this._modalBackdrop);\n};\n\n/**\n * Closes the PayPal window if it is opened via `startVaultInitiatedCheckout`.\n * @public\n * @ignore\n * @param {callback} [callback] Gets called when window is closed.\n * @example\n * paypalCheckoutInstance.closeVaultInitiatedCheckoutWindow();\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nPayPalCheckout.prototype.closeVaultInitiatedCheckoutWindow = function () {\n  if (this._vaultInitiatedCheckoutInProgress) {\n    analytics.sendEventPlus(\n      this._clientPromise,\n      \"paypal-checkout.startVaultInitiatedCheckout.canceled.by-merchant\",\n      {\n        flow: this._flow,\n        context_id: this._contextId, // eslint-disable-line camelcase\n      }\n    );\n  }\n\n  return this._waitForVaultInitiatedCheckoutDependencies().then(\n    function () {\n      this._frameService.close();\n    }.bind(this)\n  );\n};\n\n/**\n * Focuses the PayPal window if it is opened via `startVaultInitiatedCheckout`.\n * @public\n * @ignore\n * @param {callback} [callback] Gets called when window is focused.\n * @example\n * paypalCheckoutInstance.focusVaultInitiatedCheckoutWindow();\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nPayPalCheckout.prototype.focusVaultInitiatedCheckoutWindow = function () {\n  return this._waitForVaultInitiatedCheckoutDependencies().then(\n    function () {\n      this._frameService.focus();\n    }.bind(this)\n  );\n};\n\nPayPalCheckout.prototype._createFrameServiceCallback = function (\n  frameCommunicationPromise\n) {\n  var self = this;\n\n  // eslint-disable-next-line no-warning-comments\n  // TODO when a merchant integrates an iOS or Android integration\n  // with a webview using the web SDK, we will have to add popupbridge\n  // support\n  return function (err, payload) {\n    if (self._popupSawResume && !err && payload) {\n      analytics.sendEventPlus(\n        self._clientPromise,\n        \"paypal-checkout.popup.recovered\",\n        {\n          flow: self._flow,\n          context_id: self._contextId, // eslint-disable-line camelcase\n        }\n      );\n    }\n    self._popupSawResume = false;\n\n    if (err) {\n      frameCommunicationPromise.reject(err);\n    } else if (payload) {\n      self._frameService.redirect(self._loadingFrameUrl);\n      self\n        .tokenizePayment({\n          paymentToken: payload.token,\n          payerID: payload.PayerID,\n          paymentID: payload.paymentId,\n          orderID: payload.orderId,\n        })\n        .then(function (res) {\n          frameCommunicationPromise.resolve(res);\n        })\n        .catch(function (tokenizationError) {\n          frameCommunicationPromise.reject(tokenizationError);\n        });\n    }\n  };\n};\n\nPayPalCheckout.prototype._waitForVaultInitiatedCheckoutDependencies =\n  function () {\n    var self = this;\n\n    return this._clientPromise.then(function () {\n      return self._frameServicePromise;\n    });\n  };\n\nPayPalCheckout.prototype._constructVaultCheckoutUrl = function (frameName) {\n  var serviceId = this._frameService._serviceId;\n\n  return (\n    this._assetsUrl +\n    \"/html/\" +\n    frameName +\n    useMin(this._isDebug) +\n    \".html?channel=\" +\n    serviceId\n  );\n};\n\n/**\n * Tokenizes the authorize data from the PayPal JS SDK when completing a buyer approval flow.\n * When a {@link callback} is defined, invokes the callback with {@link PayPalCheckout~tokenizePayload|tokenizePayload} and returns undefined. Otherwise, returns a Promise that resolves with a {@link PayPalCheckout~tokenizePayload|tokenizePayload}.\n * @public\n * @param {object} tokenizeOptions Tokens and IDs required to tokenize the payment.\n * @param {string} tokenizeOptions.payerId Payer ID returned by PayPal `onApproved` callback.\n * @param {string} [tokenizeOptions.paymentId] Payment ID returned by PayPal `onApproved` callback.\n * @param {string} [tokenizeOptions.billingToken] Billing Token returned by PayPal `onApproved` callback.\n * @param {boolean} [tokenizeOptions.vault=true] Whether or not to vault the resulting PayPal account (if using a client token generated with a customer id and the vault flow).\n * @param {callback} [callback] The second argument, <code>payload</code>, is a {@link PayPalCheckout~tokenizePayload|tokenizePayload}. If no callback is provided, the promise resolves with a {@link PayPalCheckout~tokenizePayload|tokenizePayload}.\n * @example <caption>Opt out of auto-vaulting behavior</caption>\n * // create the paypalCheckoutInstance with a client token generated with a customer id\n * paypal.Buttons({\n *   createBillingAgreement: function () {\n *     return paypalCheckoutInstance.createPayment({\n *       flow: 'vault'\n *       // your other createPayment options here\n *     });\n *   },\n *   onApproved: function (data) {\n *     data.vault = false;\n *\n *     return paypalCheckoutInstance.tokenizePayment(data);\n *   },\n *   // Add other options, e.g. onCancel, onError\n * }).render('#paypal-button');\n *\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nPayPalCheckout.prototype.tokenizePayment = function (tokenizeOptions) {\n  var self = this;\n  var shouldVault = true;\n  var payload;\n  var options = {\n    flow: this._flow,\n    intent: tokenizeOptions.intent || this.intentFromCreatePayment,\n  };\n  var params = {\n    // The paymentToken provided by the PayPal JS SDK is the EC Token\n    ecToken: tokenizeOptions.paymentToken,\n    billingToken: tokenizeOptions.billingToken,\n    payerId: tokenizeOptions.payerID,\n    paymentId: tokenizeOptions.paymentID,\n    orderId: tokenizeOptions.orderID,\n    shippingOptionsId: tokenizeOptions.shippingOptionsId,\n  };\n\n  if (tokenizeOptions.hasOwnProperty(\"vault\")) {\n    shouldVault = tokenizeOptions.vault;\n  }\n\n  options.vault = shouldVault;\n\n  analytics.sendEventPlus(\n    this._clientPromise,\n    \"paypal-checkout.tokenization.started\",\n    {\n      flow: self._flow,\n      context_id: self._contextId, // eslint-disable-line camelcase\n    }\n  );\n\n  return this._clientPromise\n    .then(function (client) {\n      return client.request({\n        endpoint: \"payment_methods/paypal_accounts\",\n        method: \"post\",\n        data: self._formatTokenizeData(options, params),\n      });\n    })\n    .then(function (response) {\n      payload = self._formatTokenizePayload(response);\n\n      analytics.sendEventPlus(\n        self._clientPromise,\n        \"paypal-checkout.tokenization.success\",\n        {\n          flow: self._flow,\n          context_id: self._contextId, // eslint-disable-line camelcase\n        }\n      );\n      if (payload.creditFinancingOffered) {\n        analytics.sendEventPlus(\n          self._clientPromise,\n          \"paypal-checkout.credit.accepted\",\n          {\n            flow: self._flow,\n            context_id: self._contextId, // eslint-disable-line camelcase\n          }\n        );\n      }\n\n      return payload;\n    })\n    .catch(function (err) {\n      if (self._setupError) {\n        return Promise.reject(self._setupError);\n      }\n\n      analytics.sendEventPlus(\n        self._clientPromise,\n        \"paypal-checkout.tokenization.failed\",\n        {\n          flow: self._flow,\n          context_id: self._contextId, // eslint-disable-line camelcase\n        }\n      );\n\n      return Promise.reject(\n        convertToBraintreeError(err, {\n          type: errors.PAYPAL_ACCOUNT_TOKENIZATION_FAILED.type,\n          code: errors.PAYPAL_ACCOUNT_TOKENIZATION_FAILED.code,\n          message: errors.PAYPAL_ACCOUNT_TOKENIZATION_FAILED.message,\n        })\n      );\n    });\n};\n\n/**\n * Resolves with the PayPal client id to be used when loading the PayPal SDK.\n * @public\n * @param {callback} [callback] The second argument, <code>id</code>, is a the PayPal client id. If no callback is provided, the promise resolves with the PayPal client id.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * paypalCheckoutInstance.getClientId().then(function (id) {\n *  var script = document.createElement('script');\n *\n *  script.src = 'https://www.paypal.com/sdk/js?client-id=' + id;\n *  script.onload = function () {\n *    // setup the PayPal SDK\n *  };\n *\n *  document.body.appendChild(script);\n * });\n */\nPayPalCheckout.prototype.getClientId = function () {\n  return this._clientPromise.then(function (client) {\n    return client.getConfiguration().gatewayConfiguration.paypal.clientId;\n  });\n};\n\n/**\n * Resolves when the PayPal SDK has been successfully loaded onto the page.\n * @public\n * @param {object} [options] A configuration object to modify the query params and data-attributes on the PayPal SDK. A subset of the parameters are listed below. For a full list of query params, see the [PayPal docs](https://developer.paypal.com/docs/checkout/reference/customize-sdk/?mark=query#query-parameters).\n * @param {string} [options.client-id] By default, this will be the client id associated with the authorization used to create the Braintree component. When used in conjunction with passing `authorization` when creating the PayPal Checkout component, you can speed up the loading of the PayPal SDK.\n * @param {string} [options.intent=\"authorize\"] By default, the PayPal SDK defaults to an intent of `capture`. Since the default intent when calling {@link PayPalCheckout#createPayment|`createPayment`} is `authorize`, the PayPal SDK will be loaded with `intent=authorize`. If you wish to use a different intent when calling {@link PayPalCheckout#createPayment|`createPayment`}, make sure it matches here. If `sale` is used, it will be converted to `capture` for the PayPal SDK. If the `vault: true` param is used, `tokenize` will be passed as the default intent.\n * @param {string} [options.locale=en_US] Use this option to change the language, links, and terminology used in the PayPal flow. This locale will be used unless the buyer has set a preferred locale for their account. If an unsupported locale is supplied, a fallback locale (determined by buyer preference or browser data) will be used and no error will be thrown.\n *\n * Supported locales are:\n * `da_DK`,\n * `de_DE`,\n * `en_AU`,\n * `en_GB`,\n * `en_US`,\n * `es_ES`,\n * `fr_CA`,\n * `fr_FR`,\n * `id_ID`,\n * `it_IT`,\n * `ja_JP`,\n * `ko_KR`,\n * `nl_NL`,\n * `no_NO`,\n * `pl_PL`,\n * `pt_BR`,\n * `pt_PT`,\n * `ru_RU`,\n * `sv_SE`,\n * `th_TH`,\n * `zh_CN`,\n * `zh_HK`,\n * and `zh_TW`.\n *\n * @param {string} [options.currency=\"USD\"] If a currency is passed in {@link PayPalCheckout#createPayment|`createPayment`}, it must match the currency passed here.\n * @param {boolean} [options.vault] Must be `true` when using `flow: vault` in {@link PayPalCheckout#createPayment|`createPayment`}.\n * @param {string} [options.components=buttons] By default, the Braintree SDK will only load the PayPal smart buttons component. If you would like to load just the [messages component](https://developer.paypal.com/docs/business/checkout/add-capabilities/credit-messaging/), pass `messages`. If you would like to load both, pass `buttons,messages`\n * @param {object} [options.dataAttributes] The data attributes to apply to the script. Any data attribute can be passed. A subset of the parameters are listed below. For a full list of data attributes, see the [PayPal docs](https://developer.paypal.com/docs/checkout/reference/customize-sdk/#script-parameters).\n * @param {string} [options.dataAttributes.client-token] The client token to use in the script. (usually not needed)\n * @param {string} [options.dataAttributes.csp-nonce] See the [PayPal docs about content security nonces](https://developer.paypal.com/docs/checkout/reference/customize-sdk/#csp-nonce).\n * @param {string} [options.dataAttributes.user-id-token] Note: do not set this attribute if you want to use the view/edit FI flow.\n * @param {callback} [callback] Called when the PayPal SDK has been loaded onto the page. The second argument is the PayPal Checkout instance. If no callback is provided, the promise resolves with the PayPal Checkout instance when the PayPal SDK has been loaded onto the page.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example <caption>Without options</caption>\n * paypalCheckoutInstance.loadPayPalSDK().then(function () {\n *   // window.paypal.Buttons is now available to use\n * });\n * @example <caption>With options</caption>\n * paypalCheckoutInstance.loadPayPalSDK({\n *   'client-id': 'PayPal Client Id', // Can speed up rendering time to hardcode this value\n *\n *   intent: 'capture', // Make sure this value matches the value in createPayment\n *   currency: 'USD', // Make sure this value matches the value in createPayment\n * }).then(function () {\n *   // window.paypal.Buttons is now available to use\n * });\n * @example <caption>With Vaulting</caption>\n * paypalCheckoutInstance.loadPayPalSDK({\n *   vault: true\n * }).then(function () {\n *   // window.paypal.Buttons is now available to use\n * });\n */\nPayPalCheckout.prototype.loadPayPalSDK = function (options) {\n  var idPromise, src;\n  var loadPromise = new ExtendedPromise();\n  var dataAttributes = (options && options.dataAttributes) || {};\n  var merchantUserIdToken =\n    dataAttributes[\"user-id-token\"] || dataAttributes[\"data-user-id-token\"];\n  var userIdToken = merchantUserIdToken;\n\n  if (this._configuration) {\n    dataAttributes[\"client-metadata-id\"] = dataAttributes[\"client-metadata-id\"]\n      ? dataAttributes[\"client-metadata-id\"]\n      : this._configuration.analyticsMetadata.sessionId;\n    // Adding this attribute for PayPal SDK to consume for their own analytics\n    dataAttributes[\"data-sdk-integration-source\"] =\n      constants.BT_INTEGRATION_SOURCE;\n  }\n\n  if (!userIdToken) {\n    userIdToken =\n      this._authorizationInformation.fingerprint &&\n      this._authorizationInformation.fingerprint.split(\"?\")[0];\n  }\n\n  this._paypalScript = document.createElement(\"script\");\n\n  // NEXT_MAJOR_VERSION\n  // this options object should have 2 properties:\n  // * queryParams\n  // * dataAttributes\n  // should make organizing this better than squashing\n  // all the query params at the top level and extracting\n  // the data attributes\n  options = assign(\n    {},\n    {\n      components: \"buttons\",\n    },\n    options\n  );\n  delete options.dataAttributes;\n\n  // NEXT_MAJOR_VERSION if merchant passes an explicit intent,\n  // currency, amount, etc, save those for use in createPayment\n  // if no explicit param of that type is passed in when calling\n  // createPayment to reduce the number of items that need to be\n  // duplicated here and in createPayment\n  if (options.vault) {\n    options.intent = options.intent || \"tokenize\";\n  } else {\n    options.intent = options.intent || \"authorize\";\n    options.currency = options.currency || \"USD\";\n  }\n  // for internal testing only\n  src = constants.ENVIRONMENT[options.env] || \"https://www.paypal.com/sdk/js?\";\n  delete options.env;\n\n  this._paypalScript.onload = function () {\n    loadPromise.resolve();\n  };\n\n  Object.keys(dataAttributes).forEach(\n    function (attribute) {\n      this._paypalScript.setAttribute(\n        \"data-\" + attribute.replace(/^data\\-/, \"\"),\n        dataAttributes[attribute]\n      );\n    }.bind(this)\n  );\n\n  if (options[\"client-id\"]) {\n    idPromise = Promise.resolve(options[\"client-id\"]);\n  } else {\n    idPromise = this.getClientId();\n  }\n\n  Promise.all([\n    idPromise,\n    this._billingAgreementJwtPromise || Promise.resolve(),\n  ]).then(\n    function (results) {\n      var id = results[0];\n\n      options[\"client-id\"] = id;\n\n      if (this._billingAgreementJwt && !merchantUserIdToken) {\n        this._paypalScript.setAttribute(\n          \"data-user-id-token\",\n          this._billingAgreementJwt\n        );\n      } else if (this._autoSetDataUserIdToken && userIdToken) {\n        this._paypalScript.setAttribute(\"data-user-id-token\", userIdToken);\n\n        // preloading improves the rendering time of the PayPal button\n        this._attachPreloadPixel({\n          id: id,\n          userIdToken: userIdToken,\n          amount: dataAttributes.amount,\n          currency: options.currency,\n          merchantId: options[\"merchant-id\"],\n        });\n      }\n\n      this._paypalScript.src = querystring.queryify(src, options);\n      document.head.insertBefore(\n        this._paypalScript,\n        document.head.firstElementChild\n      );\n    }.bind(this)\n  );\n\n  return loadPromise.then(\n    function () {\n      return this;\n    }.bind(this)\n  );\n};\n\nPayPalCheckout.prototype._attachPreloadPixel = function (options) {\n  var request;\n  var id = options.id;\n  var userIdToken = options.userIdToken;\n  var env = this._authorizationInformation.environment;\n  var subdomain = env === \"production\" ? \"\" : \"sandbox.\";\n  var url = PAYPAL_SDK_PRELOAD_URL.replace(\"{ENV}\", subdomain);\n  var preloadOptions = {\n    \"client-id\": id,\n    \"user-id-token\": userIdToken,\n  };\n\n  if (options.amount) {\n    preloadOptions.amount = options.amount;\n  }\n  if (options.currency) {\n    preloadOptions.currency = options.currency;\n  }\n  if (options.merchantId) {\n    preloadOptions[\"merchant-id\"] = options.merchantId;\n  }\n\n  request = new XMLHttpRequest();\n  request.open(\"GET\", querystring.queryify(url, preloadOptions));\n  request.send();\n};\n\nPayPalCheckout.prototype._formatPaymentResourceData = function (\n  options,\n  config\n) {\n  var self = this;\n  var gatewayConfiguration = this._configuration.gatewayConfiguration;\n  // NEXT_MAJOR_VERSION default value for intent in PayPal SDK is capture\n  // but our integrations default value is authorize. Default this to capture\n  // in the next major version.\n  var paymentResource = {\n    // returnUrl and cancelUrl are required in hermes create_payment_resource route\n    // but are not used by the PayPal sdk, except to redirect to an error page\n    returnUrl: config.returnUrl || \"https://www.paypal.com/checkoutnow/error\",\n    cancelUrl: config.cancelUrl || \"https://www.paypal.com/checkoutnow/error\",\n    offerPaypalCredit: options.offerCredit === true,\n    merchantAccountId: this._merchantAccountId,\n    experienceProfile: {\n      brandName: options.displayName || gatewayConfiguration.paypal.displayName,\n      localeCode: options.locale,\n      noShipping: (!options.enableShippingAddress).toString(),\n      addressOverride: options.shippingAddressEditable === false,\n      landingPageType: options.landingPageType,\n    },\n    shippingOptions: options.shippingOptions,\n    payer_email: options.userAuthenticationEmail, // eslint-disable-line camelcase\n  };\n\n  if (options.hasOwnProperty(\"returnUrl\")) {\n    paymentResource.returnUrl = options.returnUrl;\n  }\n\n  if (options.hasOwnProperty(\"cancelUrl\")) {\n    paymentResource.cancelUrl = options.cancelUrl;\n  }\n\n  if (options.hasOwnProperty(\"appSwitchPreference\")) {\n    paymentResource.appSwitchPreference = options.appSwitchPreference;\n  }\n\n  if (options.hasOwnProperty(\"shippingCallbackUrl\")) {\n    paymentResource.shippingCallbackUrl = options.shippingCallbackUrl;\n  }\n\n  if (options.hasOwnProperty(\"paymentReadySessionId\")) {\n    paymentResource.paymentReadySessionId = options.paymentReadySessionId;\n  }\n\n  if (options.hasOwnProperty(\"amountBreakdown\")) {\n    paymentResource.amountBreakdown = options.amountBreakdown;\n  }\n\n  if (options.planType) {\n    paymentResource.planType = options.planType;\n  }\n\n  if (options.planMetadata) {\n    paymentResource.planMetadata = this._formatPlanMetadata(\n      options.planMetadata\n    );\n  }\n\n  self._formatPaymentResourceCheckoutData(paymentResource, options);\n  self._formatPaymentResourceVaultData(paymentResource, options);\n\n  // this needs to be set outside of the block where add it to the\n  // payment request so that a follow up tokenization call can use it,\n  // but if a second create payment resource call is made without\n  // the correlation id, we want to reset it to undefined so that the\n  // tokenization call does not use a stale correlation id\n  this._riskCorrelationId = options.riskCorrelationId;\n  if (options.riskCorrelationId) {\n    paymentResource.correlationId = this._riskCorrelationId;\n  }\n\n  return paymentResource;\n};\n\nPayPalCheckout.prototype._formatPaymentResourceVaultData = function (\n  paymentResource,\n  options\n) {\n  if (options.flow !== \"checkout\") {\n    paymentResource.shippingAddress = options.shippingAddressOverride;\n\n    if (options.billingAgreementDescription) {\n      paymentResource.description = options.billingAgreementDescription;\n    }\n\n    if (options.hasOwnProperty(\"userAction\")) {\n      paymentResource.experienceProfile.userAction = options.userAction;\n    }\n  }\n};\n\nPayPalCheckout.prototype._formatPaymentResourceCheckoutData = function (\n  paymentResource,\n  options\n) {\n  var key;\n  var intent = options.intent;\n\n  if (options.flow === \"checkout\") {\n    paymentResource.amount = options.amount;\n    paymentResource.currencyIsoCode = options.currency;\n    paymentResource.requestBillingAgreement = options.requestBillingAgreement;\n\n    if (options.hasOwnProperty(\"userAction\")) {\n      paymentResource.experienceProfile.userAction = options.userAction;\n    }\n\n    if (intent) {\n      // 'sale' has been changed to 'capture' in PayPal's backend, but\n      // we use an old version with 'sale'. We provide capture as an alias\n      // to match the PayPal SDK\n      if (intent === \"capture\") {\n        intent = \"sale\";\n      }\n      paymentResource.intent = intent;\n    }\n\n    if (options.hasOwnProperty(\"lineItems\")) {\n      paymentResource.lineItems = options.lineItems;\n    }\n\n    if (options.hasOwnProperty(\"vaultInitiatedCheckoutPaymentMethodToken\")) {\n      paymentResource.vaultInitiatedCheckoutPaymentMethodToken =\n        options.vaultInitiatedCheckoutPaymentMethodToken;\n    }\n\n    if (options.hasOwnProperty(\"shippingOptions\")) {\n      paymentResource.shippingOptions = options.shippingOptions;\n    }\n\n    for (key in options.shippingAddressOverride) {\n      if (options.shippingAddressOverride.hasOwnProperty(key)) {\n        paymentResource[key] = options.shippingAddressOverride[key];\n      }\n    }\n\n    if (options.contactPreference) {\n      paymentResource.contactPreference = options.contactPreference;\n    }\n\n    if (options.hasOwnProperty(\"billingAgreementDetails\")) {\n      paymentResource.billingAgreementDetails = options.billingAgreementDetails;\n    }\n\n    if (\n      options.editBillingAgreement === true &&\n      this._configuration.paymentMethodIdJwt\n    ) {\n      paymentResource.editBillingAgreementJwt =\n        this._configuration.paymentMethodIdJwt;\n    }\n  }\n};\n\n/**\n * @ignore\n * @static\n * @function _verifyConsistentCurrency\n * Verifies that `options.currency` and the currencies for each `shippingOption` the same.\n * @param {object} options `options` provided for `updatePayment`.\n * @returns {boolean} true is currencies match (or no shipping options); false if currencies do not match.\n */\n\nPayPalCheckout.prototype._verifyConsistentCurrency = function (options) {\n  if (\n    options.currency &&\n    options.hasOwnProperty(\"shippingOptions\") &&\n    Array.isArray(options.shippingOptions)\n  ) {\n    return options.shippingOptions.every(function (item) {\n      return (\n        item.amount &&\n        item.amount.currency &&\n        options.currency.toLowerCase() === item.amount.currency.toLowerCase()\n      );\n    });\n  }\n\n  return true;\n};\n\n/**\n * @ignore\n * @static\n * @function _hasMissingOption\n * @param {object} options All options provided for intiating the PayPal flow.\n * @param {array} required A list of required inputs that must be include as part of the options.\n * @returns {boolean} Returns a boolean.\n */\n\nPayPalCheckout.prototype._hasMissingOption = function (options, required) {\n  var i, option;\n\n  required = required || [];\n\n  if (\n    !options.hasOwnProperty(\"amount\") &&\n    !options.hasOwnProperty(\"lineItems\")\n  ) {\n    return true;\n  }\n\n  for (i = 0; i < required.length; i++) {\n    option = required[i];\n\n    if (!options.hasOwnProperty(option)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\n/**\n * @ignore\n * @static\n * @function _formatPlanMetadata\n * @param {object} plan All options required for the billing agreement vault flow.\n * @returns {object} Returns a formatted planMetadata object.\n */\nPayPalCheckout.prototype._formatPlanMetadata = function (plan) {\n  var i, j, billingCycle, formattedBillingCycle;\n  var planProperties = [\n    \"currencyIsoCode\",\n    \"name\",\n    \"oneTimeFeeAmount\",\n    \"productDescription\",\n    \"productPrice\",\n    \"productQuantity\",\n    \"shippingAmount\",\n    \"taxAmount\",\n    \"totalAmount\",\n  ];\n  var requiredbillingCycle = [\n    \"billingFrequency\",\n    \"billingFrequencyUnit\",\n    \"numberOfExecutions\",\n    \"sequence\",\n    \"startDate\",\n    \"trial\",\n    \"pricingScheme\",\n  ];\n  var formattedPlan = { billingCycles: [] };\n\n  if (plan.hasOwnProperty(\"billingCycles\")) {\n    formattedPlan.billingCycles = [];\n\n    for (i = 0; i < plan.billingCycles.length; i++) {\n      billingCycle = plan.billingCycles[i];\n      formattedBillingCycle = {};\n\n      for (j = 0; j < requiredbillingCycle.length; j++) {\n        formattedBillingCycle[requiredbillingCycle[j]] =\n          billingCycle[requiredbillingCycle[j]];\n      }\n      formattedPlan.billingCycles.push(formattedBillingCycle);\n    }\n  }\n\n  for (i = 0; i < planProperties.length; i++) {\n    formattedPlan[planProperties[i]] = plan[planProperties[i]];\n  }\n\n  return formattedPlan;\n};\n\nPayPalCheckout.prototype._formatUpdatePaymentData = function (options) {\n  var self = this;\n  var paymentResource = {\n    merchantAccountId: this._merchantAccountId,\n    paymentId: options.paymentId || options.orderId,\n    currencyIsoCode: options.currency,\n  };\n\n  if (options.hasOwnProperty(\"amount\")) {\n    paymentResource.amount = options.amount;\n  }\n\n  if (options.hasOwnProperty(\"lineItems\")) {\n    paymentResource.lineItems = options.lineItems;\n  }\n\n  if (options.hasOwnProperty(\"shippingOptions\")) {\n    paymentResource.shippingOptions = options.shippingOptions;\n  }\n\n  if (options.hasOwnProperty(\"amountBreakdown\")) {\n    paymentResource.amountBreakdown = options.amountBreakdown;\n  }\n\n  /* shippingAddress not supported yet */\n  if (options.hasOwnProperty(\"shippingAddress\")) {\n    analytics.sendEventPlus(\n      self._clientPromise,\n      \"paypal-checkout.updatePayment.shippingAddress.provided.by-the-merchant\",\n      {\n        flow: self._flow,\n        context_id: self._contextId, // eslint-disable-line camelcase\n      }\n    );\n\n    paymentResource.line1 = options.shippingAddress.line1;\n\n    if (options.shippingAddress.hasOwnProperty(\"line2\")) {\n      paymentResource.line2 = options.shippingAddress.line2;\n    }\n\n    paymentResource.city = options.shippingAddress.city;\n    paymentResource.state = options.shippingAddress.state;\n    paymentResource.postalCode = options.shippingAddress.postalCode;\n    paymentResource.countryCode = options.shippingAddress.countryCode;\n\n    if (options.shippingAddress.hasOwnProperty(\"phone\")) {\n      paymentResource.phone = options.shippingAddress.phone;\n    }\n\n    if (options.shippingAddress.hasOwnProperty(\"recipientName\")) {\n      paymentResource.recipientName = options.shippingAddress.recipientName;\n    }\n  }\n\n  return paymentResource;\n};\n\nPayPalCheckout.prototype._formatTokenizeData = function (options, params) {\n  var clientConfiguration = this._configuration;\n  var gatewayConfiguration = clientConfiguration.gatewayConfiguration;\n  var isTokenizationKey =\n    clientConfiguration.authorizationType === \"TOKENIZATION_KEY\";\n  // Non-default browsers in the app-switch flow will return to a new tab\n  // where the context of flow is lost, so in these cases we need to check\n  // if paymentId is returned in the onApprove callback. This param is\n  // null for vault flows.\n  var isVaultFlow =\n    options.flow === \"vault\" || (options.flow == null && !params.paymentId);\n  var correlationId =\n    this._riskCorrelationId || params.billingToken || params.ecToken;\n  var data = {\n    paypalAccount: {\n      correlationId: correlationId,\n      options: {\n        validate: isVaultFlow && !isTokenizationKey && options.vault,\n      },\n    },\n  };\n\n  if (isVaultFlow) {\n    data.paypalAccount.billingAgreementToken = params.billingToken;\n  } else {\n    data.paypalAccount.paymentToken = params.paymentId || params.orderId;\n    data.paypalAccount.payerId = params.payerId;\n    data.paypalAccount.unilateral =\n      gatewayConfiguration.paypal.unvettedMerchant;\n\n    if (options.intent) {\n      data.paypalAccount.intent = options.intent;\n    }\n  }\n\n  if (this._merchantAccountId) {\n    data.merchantAccountId = this._merchantAccountId;\n  }\n\n  return data;\n};\n\nPayPalCheckout.prototype._formatTokenizePayload = function (response) {\n  var payload;\n  var account = {};\n\n  if (response.paypalAccounts) {\n    account = response.paypalAccounts[0];\n  }\n\n  payload = {\n    nonce: account.nonce,\n    details: {},\n    type: account.type,\n  };\n\n  if (account.details && account.details.payerInfo) {\n    payload.details = account.details.payerInfo;\n  }\n\n  if (account.details && account.details.creditFinancingOffered) {\n    payload.creditFinancingOffered = account.details.creditFinancingOffered;\n  }\n\n  if (account.details && account.details.shippingOptionId) {\n    payload.shippingOptionId = account.details.shippingOptionId;\n  }\n\n  if (account.details && account.details.cobrandedCardLabel) {\n    payload.cobrandedCardLabel = account.details.cobrandedCardLabel;\n  }\n\n  return payload;\n};\n\n/**\n * Cleanly tear down anything set up by {@link module:braintree-web/paypal-checkout.create|create}.\n * @public\n * @param {callback} [callback] Called once teardown is complete. No data is returned if teardown completes successfully.\n * @example\n * paypalCheckoutInstance.teardown();\n * @example <caption>With callback</caption>\n * paypalCheckoutInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nPayPalCheckout.prototype.teardown = function () {\n  var self = this;\n\n  convertMethodsToError(this, methods(PayPalCheckout.prototype));\n\n  if (this._paypalScript && this._paypalScript.parentNode) {\n    this._paypalScript.parentNode.removeChild(this._paypalScript);\n  }\n\n  return this._frameServicePromise\n    .catch(function () {\n      // no need to error in teardown for an error setting up the frame service\n    })\n    .then(function () {\n      if (!self._frameService) {\n        return Promise.resolve();\n      }\n\n      return self._frameService.teardown();\n    });\n};\n\nmodule.exports = wrapPromise.wrapPrototype(PayPalCheckout);\n\n},{\"../lib/analytics\":143,\"../lib/assign\":146,\"../lib/braintree-error\":149,\"../lib/constants\":150,\"../lib/convert-methods-to-error\":151,\"../lib/convert-to-braintree-error\":152,\"../lib/create-assets-url\":153,\"../lib/create-authorization-data\":154,\"../lib/create-deferred-client\":155,\"../lib/frame-service/external\":164,\"../lib/methods\":182,\"../lib/querystring\":184,\"../lib/use-min\":188,\"../paypal/shared/constants\":218,\"./errors\":213,\"@braintree/extended-promise\":34,\"@braintree/wrap-promise\":43}],216:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar frameService = _dereq_(\"../../lib/frame-service/external\");\nvar BraintreeError = _dereq_(\"../../lib/braintree-error\");\nvar convertToBraintreeError = _dereq_(\"../../lib/convert-to-braintree-error\");\nvar useMin = _dereq_(\"../../lib/use-min\");\nvar once = _dereq_(\"../../lib/once\");\nvar VERSION = \"3.145.0\";\nvar constants = _dereq_(\"../shared/constants\");\nvar INTEGRATION_TIMEOUT_MS =\n  _dereq_(\"../../lib/constants\").INTEGRATION_TIMEOUT_MS;\nvar analytics = _dereq_(\"../../lib/analytics\");\nvar methods = _dereq_(\"../../lib/methods\");\nvar deferred = _dereq_(\"../../lib/deferred\");\nvar errors = _dereq_(\"../shared/errors\");\nvar convertMethodsToError = _dereq_(\"../../lib/convert-methods-to-error\");\nvar querystring = _dereq_(\"../../lib/querystring\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\n\n/**\n * @typedef {object} PayPal~tokenizePayload\n * @property {string} nonce The payment method nonce.\n * @property {string} type The payment method type, always `PayPalAccount`.\n * @property {object} details Additional PayPal account details.\n * @property {string} details.email User's email address.\n * @property {string} details.payerId User's payer ID, the unique identifier for each PayPal account.\n * @property {string} details.firstName User's given name.\n * @property {string} details.lastName User's surname.\n * @property {?string} details.countryCode User's 2 character country code.\n * @property {?string} details.phone User's phone number (e.g. 555-867-5309).\n * @property {?object} details.shippingAddress User's shipping address details, only available if shipping address is enabled.\n * @property {string} details.shippingAddress.recipientName Recipient of postage.\n * @property {string} details.shippingAddress.line1 Street number and name.\n * @property {string} details.shippingAddress.line2 Extended address.\n * @property {string} details.shippingAddress.city City or locality.\n * @property {string} details.shippingAddress.state State or region.\n * @property {string} details.shippingAddress.postalCode Postal code.\n * @property {string} details.shippingAddress.countryCode 2 character country code (e.g. US).\n * @property {?object} details.billingAddress User's billing address details.\n * Not available to all merchants; [contact support](https://developer.paypal.com/braintree/help) for details on eligibility and enabling this feature.\n * Alternatively, see `shippingAddress` above as an available client option.\n * @property {string} details.billingAddress.line1 Street number and name.\n * @property {string} details.billingAddress.line2 Extended address.\n * @property {string} details.billingAddress.city City or locality.\n * @property {string} details.billingAddress.state State or region.\n * @property {string} details.billingAddress.postalCode Postal code.\n * @property {string} details.billingAddress.countryCode 2 character country code (e.g. US).\n * @property {?object} creditFinancingOffered This property will only be present when the customer pays with PayPal Credit.\n * @property {object} creditFinancingOffered.totalCost This is the estimated total payment amount including interest and fees the user will pay during the lifetime of the loan.\n * @property {string} creditFinancingOffered.totalCost.value An amount defined by [ISO 4217](https://www.iso.org/iso/home/standards/currency_codes.htm) for the given currency.\n * @property {string} creditFinancingOffered.totalCost.currency 3 letter currency code as defined by [ISO 4217](https://www.iso.org/iso/home/standards/currency_codes.htm).\n * @property {number} creditFinancingOffered.term Length of financing terms in months.\n * @property {object} creditFinancingOffered.monthlyPayment This is the estimated amount per month that the customer will need to pay including fees and interest.\n * @property {string} creditFinancingOffered.monthlyPayment.value An amount defined by [ISO 4217](https://www.iso.org/iso/home/standards/currency_codes.htm) for the given currency.\n * @property {string} creditFinancingOffered.monthlyPayment.currency 3 letter currency code as defined by [ISO 4217](https://www.iso.org/iso/home/standards/currency_codes.htm).\n * @property {object} creditFinancingOffered.totalInterest Estimated interest or fees amount the payer will have to pay during the lifetime of the loan.\n * @property {string} creditFinancingOffered.totalInterest.value An amount defined by [ISO 4217](https://www.iso.org/iso/home/standards/currency_codes.htm) for the given currency.\n * @property {string} creditFinancingOffered.totalInterest.currency 3 letter currency code as defined by [ISO 4217](https://www.iso.org/iso/home/standards/currency_codes.htm).\n * @property {boolean} creditFinancingOffered.payerAcceptance Status of whether the customer ultimately was approved for and chose to make the payment using the approved installment credit.\n * @property {boolean} creditFinancingOffered.cartAmountImmutable Indicates whether the cart amount is editable after payer's acceptance on PayPal side.\n *\n */\n\n/**\n * @typedef {object} PayPal~tokenizeReturn\n * @property {Function} close A handle to close the PayPal checkout flow.\n * @property {Function} focus A handle to focus the PayPal checkout flow. Note that some browsers (notably iOS Safari) do not support focusing popups. Firefox requires the focus call to occur as the result of a user interaction, such as a button click.\n */\n\n/**\n * @class\n * @param {object} options see {@link module:braintree-web/paypal.create|paypal.create}\n * @classdesc This class represents a PayPal component. Instances of this class can open a PayPal window for authenticating a PayPal account. Any additional UI, such as disabling the page while authentication is taking place, is up to the developer.\n *\n * This component has been deprecated in favor of the {@link PayPalCheckout|PayPal Checkout component}, which provides a fully managed UI. New features will not be added to this component.\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/paypal.create|braintree-web.paypal.create} instead.</strong>\n */\nfunction PayPal(options) {\n  this._client = options.client;\n  this._assetsUrl =\n    options.client.getConfiguration().gatewayConfiguration.paypal.assetsUrl +\n    \"/web/\" +\n    VERSION;\n  this._isDebug = options.client.getConfiguration().isDebug;\n  this._loadingFrameUrl =\n    this._assetsUrl +\n    \"/html/paypal-landing-frame\" +\n    useMin(this._isDebug) +\n    \".html\";\n  this._authorizationInProgress = false;\n}\n\nPayPal.prototype._initialize = function () {\n  var self = this;\n  var client = this._client;\n  var failureTimeout = setTimeout(function () {\n    analytics.sendEvent(client, \"paypal.load.timed-out\");\n  }, INTEGRATION_TIMEOUT_MS);\n\n  return new Promise(function (resolve) {\n    frameService.create(\n      {\n        name: constants.LANDING_FRAME_NAME,\n        dispatchFrameUrl:\n          self._assetsUrl +\n          \"/html/dispatch-frame\" +\n          useMin(self._isDebug) +\n          \".html\",\n        openFrameUrl: self._loadingFrameUrl,\n      },\n      function (service) {\n        self._frameService = service;\n        clearTimeout(failureTimeout);\n        analytics.sendEvent(client, \"paypal.load.succeeded\");\n        resolve(self);\n      }\n    );\n  });\n};\n\n/**\n * Launches the PayPal login flow and returns a nonce payload. Only one PayPal login flow should be active at a time. One way to achieve this is to disable your PayPal button while the flow is open.\n * @public\n * @param {object} options All tokenization options for the PayPal component.\n * @param {string} options.flow Set to 'checkout' for one-time payment flow, or 'vault' for Vault flow. If 'vault' is used with a client token generated with a customer id, the PayPal account will be added to that customer as a saved payment method.\n * @param {string} [options.intent=authorize]\n * * `authorize` - Submits the transaction for authorization but not settlement.\n * * `order` - Validates the transaction without an authorization (i.e. without holding funds). Useful for authorizing and capturing funds up to 90 days after the order has been placed. Only available for Checkout flow.\n * * `sale` - Payment will be immediately submitted for settlement upon creating a transaction.\n * @param {boolean} [options.offerCredit=false] Offers PayPal Credit as the default funding instrument for the transaction. If the customer isn't pre-approved for PayPal Credit, they will be prompted to apply for it.\n * @param {boolean} [options.offerPayLater=false] Offers PayPal Pay Later if the customer qualifies. Defaults to false. Only available with `flow: 'checkout'`.\n * @param {string} [options.useraction]\n * Changes the call-to-action in the PayPal flow. By default the final button will show the localized\n * word for \"Continue\" and implies that the final amount billed is not yet known.\n *\n * Setting this option to `commit` changes the button text to \"Pay Now\" and page text will convey to\n * the user that billing will take place immediately.\n * @param {(string|number)} [options.amount] The amount of the transaction. Required when using the Checkout flow.\n * @param {string} [options.currency] The currency code of the amount, such as 'USD'. Required when using the Checkout flow.\n * @param {string} [options.displayName] The merchant name displayed inside of the PayPal lightbox; defaults to the company name on your Braintree account\n * @param {string} [options.locale=en_US] Use this option to change the language, links, and terminology used in the PayPal flow. This locale will be used unless the buyer has set a preferred locale for their account. If an unsupported locale is supplied, a fallback locale (determined by buyer preference or browser data) will be used and no error will be thrown.\n *\n * Supported locales are:\n * `da_DK`,\n * `de_DE`,\n * `en_AU`,\n * `en_GB`,\n * `en_US`,\n * `es_ES`,\n * `fr_CA`,\n * `fr_FR`,\n * `id_ID`,\n * `it_IT`,\n * `ja_JP`,\n * `ko_KR`,\n * `nl_NL`,\n * `no_NO`,\n * `pl_PL`,\n * `pt_BR`,\n * `pt_PT`,\n * `ru_RU`,\n * `sv_SE`,\n * `th_TH`,\n * `zh_CN`,\n * `zh_HK`,\n * and `zh_TW`.\n *\n * @param {boolean} [options.enableShippingAddress=false] Returns a shipping address object in {@link PayPal#tokenize}.\n * @param {object} [options.shippingAddressOverride] Allows you to pass a shipping address you have already collected into the PayPal payment flow.\n * @param {string} options.shippingAddressOverride.line1 Street address.\n * @param {string} [options.shippingAddressOverride.line2] Street address (extended).\n * @param {string} options.shippingAddressOverride.city City.\n * @param {string} options.shippingAddressOverride.state State.\n * @param {string} options.shippingAddressOverride.postalCode Postal code.\n * @param {string} options.shippingAddressOverride.countryCode Country.\n * @param {string} [options.shippingAddressOverride.phone] Phone number.\n * @param {string} [options.shippingAddressOverride.recipientName] Recipient's name.\n * @param {boolean} [options.shippingAddressEditable=true] Set to false to disable user editing of the shipping address.\n * @param {string} [options.billingAgreementDescription] Use this option to set the description of the preapproved payment agreement visible to customers in their PayPal profile during Vault flows. Max 255 characters.\n * @param {string} [options.landingPageType] Use this option to specify the PayPal page to display when a user lands on the PayPal site to complete the payment.\n * * `login` - A PayPal account login page is used.\n * * `billing` - A non-PayPal account landing page is used.\n * @param {callback} callback The second argument, <code>data</code>, is a {@link PayPal~tokenizePayload|tokenizePayload}.\n * @example\n * <caption>Tokenizing with the vault flow</caption>\n * button.addEventListener('click', function () {\n *   // Disable the button so that we don't attempt to open multiple popups.\n *   button.setAttribute('disabled', 'disabled');\n *\n *   // if there is any other part of the page that must be disabled\n *   // while authentication is in progress, do so now\n *\n *   // Because PayPal tokenization opens a popup, this must be called\n *   // as a result of a user action, such as a button click.\n *   paypalInstance.tokenize({\n *     flow: 'vault' // Required\n *     // Any other tokenization options\n *   }, function (tokenizeErr, payload) {\n *     button.removeAttribute('disabled');\n *\n *     // if any other part of the page was disabled, re-enable now\n *\n *     if (tokenizeErr) {\n *       // Handle tokenization errors or premature flow closure\n *\n *       switch (tokenizeErr.code) {\n *         case 'PAYPAL_POPUP_CLOSED':\n *           console.error('Customer closed PayPal popup.');\n *           break;\n *         case 'PAYPAL_ACCOUNT_TOKENIZATION_FAILED':\n *           console.error('PayPal tokenization failed. See details:', tokenizeErr.details);\n *           break;\n *         case 'PAYPAL_FLOW_FAILED':\n *           console.error('Unable to initialize PayPal flow. Are your options correct?', tokenizeErr.details);\n *           break;\n *         default:\n *           console.error('Error!', tokenizeErr);\n *       }\n *     } else {\n *       // Submit payload.nonce to your server\n *     }\n *   });\n * });\n\n * @example\n * <caption>Tokenizing with the checkout flow</caption>\n * button.addEventListener('click', function () {\n *   // Disable the button so that we don't attempt to open multiple popups.\n *   button.setAttribute('disabled', 'disabled');\n *\n *   // Because PayPal tokenization opens a popup, this must be called\n *   // as a result of a user action, such as a button click.\n *   paypalInstance.tokenize({\n *     flow: 'checkout', // Required\n *     amount: '10.00', // Required\n *     currency: 'USD' // Required\n *     // Any other tokenization options\n *   }, function (tokenizeErr, payload) {\n *     button.removeAttribute('disabled');\n *\n *     if (tokenizeErr) {\n *       // Handle tokenization errors or premature flow closure\n *\n *       switch (tokenizeErr.code) {\n *         case 'PAYPAL_POPUP_CLOSED':\n *           console.error('Customer closed PayPal popup.');\n *           break;\n *         case 'PAYPAL_ACCOUNT_TOKENIZATION_FAILED':\n *           console.error('PayPal tokenization failed. See details:', tokenizeErr.details);\n *           break;\n *         case 'PAYPAL_FLOW_FAILED':\n *           console.error('Unable to initialize PayPal flow. Are your options correct?', tokenizeErr.details);\n *           break;\n *         default:\n *           console.error('Error!', tokenizeErr);\n *       }\n *     } else {\n *       // Submit payload.nonce to your server\n *     }\n *   });\n * });\n * @returns {Promise|PayPal~tokenizeReturn} A handle to manage the PayPal checkout frame. If no callback is provided, returns a promise.\n */\nPayPal.prototype.tokenize = function (options, callback) {\n  var self = this;\n  var client = this._client;\n  var tokenizePromise, optionError;\n\n  if (callback) {\n    callback = once(deferred(callback));\n  }\n\n  if (!options || !constants.FLOW_ENDPOINTS.hasOwnProperty(options.flow)) {\n    optionError = new BraintreeError(errors.PAYPAL_FLOW_OPTION_REQUIRED);\n\n    if (callback) {\n      callback(optionError);\n\n      return this._frameService.createNoopHandler();\n    }\n\n    return Promise.reject(optionError);\n  }\n\n  tokenizePromise = new Promise(function (resolve, reject) {\n    if (self._authorizationInProgress) {\n      analytics.sendEvent(client, \"paypal.tokenization.error.already-opened\");\n\n      reject(new BraintreeError(errors.PAYPAL_TOKENIZATION_REQUEST_ACTIVE));\n    } else {\n      self._authorizationInProgress = true;\n\n      if (!window.popupBridge) {\n        analytics.sendEvent(client, \"paypal.tokenization.opened\");\n      }\n\n      if (options.offerCredit === true) {\n        analytics.sendEvent(client, \"paypal.credit.offered\");\n      }\n\n      if (options.offerPayLater === true) {\n        analytics.sendEvent(client, \"paypal.paylater.offered\");\n      }\n\n      self._navigateFrameToAuth(options).catch(reject);\n      // self MUST happen after _navigateFrameToAuth for Metro browsers to work.\n      self._frameService.open(\n        {},\n        self._createFrameServiceCallback(options, resolve, reject)\n      );\n    }\n  });\n\n  if (callback) {\n    tokenizePromise\n      .then(function (res) {\n        callback(null, res);\n      })\n      .catch(callback);\n\n    return this._frameService.createHandler({\n      beforeClose: function () {\n        analytics.sendEvent(client, \"paypal.tokenization.closed.by-merchant\");\n      },\n    });\n  }\n\n  return tokenizePromise;\n};\n\nPayPal.prototype._createFrameServiceCallback = function (\n  options,\n  resolve,\n  reject\n) {\n  var self = this;\n  var client = this._client;\n\n  if (window.popupBridge) {\n    return function (err, payload) {\n      var canceled =\n        payload && payload.path && payload.path.substring(0, 7) === \"/cancel\";\n\n      self._authorizationInProgress = false;\n\n      // `err` exists when the user clicks \"Done\" button of browser view\n      if (err || canceled) {\n        analytics.sendEvent(client, \"popup-bridge:paypal:canceled\");\n        // Call merchant's tokenize callback with an error\n        reject(new BraintreeError(errors.PAYPAL_POPUP_CLOSED));\n      } else if (payload) {\n        self\n          ._tokenizePayPal(options, payload.queryItems)\n          .then(resolve)\n          .catch(reject);\n      }\n    };\n  }\n\n  return function (err, params) {\n    self._authorizationInProgress = false;\n\n    if (err) {\n      if (err.code === \"FRAME_SERVICE_FRAME_CLOSED\") {\n        analytics.sendEvent(client, \"paypal.tokenization.closed.by-user\");\n        reject(new BraintreeError(errors.PAYPAL_POPUP_CLOSED));\n      } else if (\n        err.code &&\n        err.code.indexOf(\"FRAME_SERVICE_FRAME_OPEN_FAILED\") > -1\n      ) {\n        reject(\n          new BraintreeError({\n            code: errors.PAYPAL_POPUP_OPEN_FAILED.code,\n            type: errors.PAYPAL_POPUP_OPEN_FAILED.type,\n            message: errors.PAYPAL_POPUP_OPEN_FAILED.message,\n            details: {\n              originalError: err,\n            },\n          })\n        );\n      }\n    } else if (params) {\n      self._tokenizePayPal(options, params).then(resolve).catch(reject);\n    }\n  };\n};\n\nPayPal.prototype._tokenizePayPal = function (options, params) {\n  var self = this;\n  var client = this._client;\n\n  if (!window.popupBridge) {\n    this._frameService.redirect(this._loadingFrameUrl);\n  }\n\n  return client\n    .request({\n      endpoint: \"payment_methods/paypal_accounts\",\n      method: \"post\",\n      data: this._formatTokenizeData(options, params),\n    })\n    .then(function (response) {\n      var payload = self._formatTokenizePayload(response);\n\n      if (window.popupBridge) {\n        analytics.sendEvent(client, \"popup-bridge:paypal:succeeded\");\n      } else {\n        analytics.sendEvent(client, \"paypal.tokenization.success\");\n      }\n\n      if (payload.creditFinancingOffered) {\n        analytics.sendEvent(client, \"paypal.credit.accepted\");\n      }\n\n      self._frameService.close();\n\n      return payload;\n    })\n    .catch(function (err) {\n      if (window.popupBridge) {\n        analytics.sendEvent(client, \"popup-bridge:paypal:failed\");\n      } else {\n        analytics.sendEvent(client, \"paypal.tokenization.failed\");\n      }\n\n      self._frameService.close();\n\n      return Promise.reject(\n        convertToBraintreeError(err, {\n          type: errors.PAYPAL_ACCOUNT_TOKENIZATION_FAILED.type,\n          code: errors.PAYPAL_ACCOUNT_TOKENIZATION_FAILED.code,\n          message: errors.PAYPAL_ACCOUNT_TOKENIZATION_FAILED.message,\n        })\n      );\n    });\n};\n\nPayPal.prototype._formatTokenizePayload = function (response) {\n  var payload;\n  var account = {};\n\n  if (response.paypalAccounts) {\n    account = response.paypalAccounts[0];\n  }\n\n  payload = {\n    nonce: account.nonce,\n    details: {},\n    type: account.type,\n  };\n\n  if (account.details && account.details.payerInfo) {\n    payload.details = account.details.payerInfo;\n  }\n\n  if (account.details && account.details.creditFinancingOffered) {\n    payload.creditFinancingOffered = account.details.creditFinancingOffered;\n  }\n\n  return payload;\n};\n\nPayPal.prototype._formatTokenizeData = function (options, params) {\n  var clientConfiguration = this._client.getConfiguration();\n  var gatewayConfiguration = clientConfiguration.gatewayConfiguration;\n  var isTokenizationKey =\n    clientConfiguration.authorizationType === \"TOKENIZATION_KEY\";\n  var data = {\n    paypalAccount: {\n      correlationId: params.ba_token || params.token,\n      options: {\n        validate: options.flow === \"vault\" && !isTokenizationKey,\n      },\n    },\n  };\n\n  if (params.ba_token) {\n    data.paypalAccount.billingAgreementToken = params.ba_token;\n  } else {\n    data.paypalAccount.paymentToken = params.paymentId;\n    data.paypalAccount.payerId = params.PayerID;\n    data.paypalAccount.unilateral =\n      gatewayConfiguration.paypal.unvettedMerchant;\n\n    if (options.hasOwnProperty(\"intent\")) {\n      data.paypalAccount.intent = options.intent;\n    }\n  }\n\n  return data;\n};\n\nPayPal.prototype._navigateFrameToAuth = function (options) {\n  var self = this;\n  var client = this._client;\n  var endpoint = \"paypal_hermes/\" + constants.FLOW_ENDPOINTS[options.flow];\n\n  return client\n    .request({\n      endpoint: endpoint,\n      method: \"post\",\n      data: this._formatPaymentResourceData(options),\n    })\n    .then(function (response) {\n      var redirectUrl;\n\n      if (options.flow === \"checkout\") {\n        redirectUrl = response.paymentResource.redirectUrl;\n      } else {\n        redirectUrl = response.agreementSetup.approvalUrl;\n      }\n\n      if (options.useraction === \"commit\") {\n        redirectUrl = querystring.queryify(redirectUrl, {\n          useraction: \"commit\",\n        });\n      }\n\n      if (window.popupBridge) {\n        analytics.sendEvent(client, \"popup-bridge:paypal:started\");\n      }\n\n      self._frameService.redirect(redirectUrl);\n    })\n    .catch(function (err) {\n      var status = err.details && err.details.httpStatus;\n\n      self._frameService.close();\n      self._authorizationInProgress = false;\n\n      if (status === 422) {\n        return Promise.reject(\n          new BraintreeError({\n            type: errors.PAYPAL_INVALID_PAYMENT_OPTION.type,\n            code: errors.PAYPAL_INVALID_PAYMENT_OPTION.code,\n            message: errors.PAYPAL_INVALID_PAYMENT_OPTION.message,\n            details: {\n              originalError: err,\n            },\n          })\n        );\n      }\n\n      return Promise.reject(\n        convertToBraintreeError(err, {\n          type: errors.PAYPAL_FLOW_FAILED.type,\n          code: errors.PAYPAL_FLOW_FAILED.code,\n          message: errors.PAYPAL_FLOW_FAILED.message,\n        })\n      );\n    });\n};\n\nPayPal.prototype._formatPaymentResourceData = function (options) {\n  var key;\n  var gatewayConfiguration =\n    this._client.getConfiguration().gatewayConfiguration;\n  var serviceId = this._frameService._serviceId;\n  var paymentResource = {\n    returnUrl:\n      gatewayConfiguration.paypal.assetsUrl +\n      \"/web/\" +\n      VERSION +\n      \"/html/redirect-frame\" +\n      useMin(this._isDebug) +\n      \".html?channel=\" +\n      serviceId,\n    cancelUrl:\n      gatewayConfiguration.paypal.assetsUrl +\n      \"/web/\" +\n      VERSION +\n      \"/html/cancel-frame\" +\n      useMin(this._isDebug) +\n      \".html?channel=\" +\n      serviceId,\n    offerPaypalCredit: options.offerCredit === true,\n    offerPayLater: options.offerPayLater === true,\n    experienceProfile: {\n      brandName: options.displayName || gatewayConfiguration.paypal.displayName,\n      localeCode: options.locale,\n      noShipping: (!options.enableShippingAddress).toString(),\n      addressOverride: options.shippingAddressEditable === false,\n      landingPageType: options.landingPageType,\n    },\n  };\n\n  if (\n    window.popupBridge &&\n    typeof window.popupBridge.getReturnUrlPrefix === \"function\"\n  ) {\n    paymentResource.returnUrl =\n      window.popupBridge.getReturnUrlPrefix() + \"return\";\n    paymentResource.cancelUrl =\n      window.popupBridge.getReturnUrlPrefix() + \"cancel\";\n  }\n\n  if (options.flow === \"checkout\") {\n    paymentResource.amount = options.amount;\n    paymentResource.currencyIsoCode = options.currency;\n\n    if (options.hasOwnProperty(\"intent\")) {\n      paymentResource.intent = options.intent;\n    }\n\n    for (key in options.shippingAddressOverride) {\n      if (options.shippingAddressOverride.hasOwnProperty(key)) {\n        paymentResource[key] = options.shippingAddressOverride[key];\n      }\n    }\n  } else {\n    paymentResource.shippingAddress = options.shippingAddressOverride;\n\n    if (options.billingAgreementDescription) {\n      paymentResource.description = options.billingAgreementDescription;\n    }\n  }\n\n  return paymentResource;\n};\n\n/**\n * Closes the PayPal window if it is open.\n * @public\n * @example\n * paypalInstance.closeWindow();\n * @returns {void}\n */\nPayPal.prototype.closeWindow = function () {\n  if (this._authorizationInProgress) {\n    analytics.sendEvent(this._client, \"paypal.tokenize.closed.by-merchant\");\n  }\n  this._frameService.close();\n};\n\n/**\n * Focuses the PayPal window if it is open.\n * @public\n * @example\n * paypalInstance.focusWindow();\n * @returns {void}\n */\nPayPal.prototype.focusWindow = function () {\n  this._frameService.focus();\n};\n\n/**\n * Cleanly remove anything set up by {@link module:braintree-web/paypal.create|create}.\n * @public\n * @param {callback} [callback] Called on completion.\n * @example\n * paypalInstance.teardown();\n * @example <caption>With callback</caption>\n * paypalInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nPayPal.prototype.teardown = wrapPromise(function () {\n  var self = this;\n\n  self._frameService.teardown();\n\n  convertMethodsToError(self, methods(PayPal.prototype));\n\n  analytics.sendEvent(self._client, \"paypal.teardown-completed\");\n\n  return Promise.resolve();\n});\n\nmodule.exports = PayPal;\n\n},{\"../../lib/analytics\":143,\"../../lib/braintree-error\":149,\"../../lib/constants\":150,\"../../lib/convert-methods-to-error\":151,\"../../lib/convert-to-braintree-error\":152,\"../../lib/deferred\":156,\"../../lib/frame-service/external\":164,\"../../lib/methods\":182,\"../../lib/once\":183,\"../../lib/querystring\":184,\"../../lib/use-min\":188,\"../shared/constants\":218,\"../shared/errors\":219,\"@braintree/wrap-promise\":43}],217:[function(_dereq_,module,exports){\n\"use strict\";\n/**\n * @module braintree-web/paypal\n * @description A component to integrate with PayPal.\n * @deprecated Use the {@link PayPalCheckout|PayPal Checkout component} instead.\n */\n\nvar analytics = _dereq_(\"../lib/analytics\");\nvar basicComponentVerification = _dereq_(\"../lib/basic-component-verification\");\nvar createDeferredClient = _dereq_(\"../lib/create-deferred-client\");\nvar createAssetsUrl = _dereq_(\"../lib/create-assets-url\");\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar errors = _dereq_(\"./shared/errors\");\nvar PayPal = _dereq_(\"./external/paypal\");\nvar VERSION = \"3.145.0\";\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {callback} callback The second argument, `data`, is the {@link PayPal} instance.\n * @example\n * // We recommend creating your PayPal button with button.js\n * // For an example, see https://codepen.io/braintree/pen/LNKJWa\n * var paypalButton = document.querySelector('.paypal-button');\n *\n * braintree.client.create({\n *   authorization: CLIENT_AUTHORIZATION\n * }, function (clientErr, clientInstance) {\n *   if (clientErr) {\n *     console.error('Error creating client:', clientErr);\n *     return;\n *   }\n *\n *   braintree.paypal.create({\n *     client: clientInstance\n *   }, function (paypalErr, paypalInstance) {\n *     if (paypalErr) {\n *       console.error('Error creating PayPal:', paypalErr);\n *       return;\n *     }\n *\n *     paypalButton.removeAttribute('disabled');\n *\n *     // When the button is clicked, attempt to tokenize.\n *     paypalButton.addEventListener('click', function (event) {\n *       // Because tokenization opens a popup, this has to be called as a result of\n *       // customer action, like clicking a button. You cannot call this at any time.\n *       paypalInstance.tokenize({\n *         flow: 'vault'\n *         // For more tokenization options, see the full PayPal tokenization documentation\n *         // https://braintree.github.io/braintree-web/current/PayPal.html#tokenize\n *       }, function (tokenizeErr, payload) {\n *         if (tokenizeErr) {\n *           if (tokenizeErr.type !== 'CUSTOMER') {\n *             console.error('Error tokenizing:', tokenizeErr);\n *           }\n *           return;\n *         }\n *\n *         // Tokenization succeeded\n *         paypalButton.setAttribute('disabled', true);\n *         console.log('Got a nonce! You should submit this to your server.');\n *         console.log(payload.nonce);\n *       });\n *     }, false);\n *   });\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nfunction create(options) {\n  var name = \"PayPal\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      return createDeferredClient.create({\n        authorization: options.authorization,\n        client: options.client,\n        debug: options.debug,\n        assetsUrl: createAssetsUrl.create(options.authorization),\n        name: name,\n      });\n    })\n    .then(function (client) {\n      var pp;\n      var config = client.getConfiguration();\n\n      options.client = client;\n\n      if (config.gatewayConfiguration.paypalEnabled !== true) {\n        return Promise.reject(new BraintreeError(errors.PAYPAL_NOT_ENABLED));\n      }\n\n      analytics.sendEvent(options.client, \"paypal.initialized\");\n\n      pp = new PayPal(options);\n\n      return pp._initialize();\n    });\n}\n\n/**\n * @static\n * @function isSupported\n * @description Returns true if PayPal [supports this browser](index.html#browser-support-webviews).\n * @example\n * if (braintree.paypal.isSupported()) {\n *   // Add PayPal button to the page\n * } else {\n *   // Hide PayPal payment option\n * }\n * @returns {Boolean} Returns true if PayPal supports this browser.\n */\nfunction isSupported() {\n  return true;\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  isSupported: isSupported,\n  /**\n   * @description The current version of the SDK, i.e. `{@pkg version}`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/analytics\":143,\"../lib/basic-component-verification\":147,\"../lib/braintree-error\":149,\"../lib/create-assets-url\":153,\"../lib/create-deferred-client\":155,\"./external/paypal\":216,\"./shared/errors\":219,\"@braintree/wrap-promise\":43}],218:[function(_dereq_,module,exports){\n\"use strict\";\n\nmodule.exports = {\n  LANDING_FRAME_NAME: \"braintreepaypallanding\",\n  FLOW_ENDPOINTS: {\n    checkout: \"create_payment_resource\",\n    vault: \"setup_billing_agreement\",\n  },\n  REQUIRED_OPTIONS: [\"paymentId\", \"currency\"],\n  ENVIRONMENT: {\n    stage: \"https://www.msmaster.qa.paypal.com/sdk/js?\",\n    sandbox: \"https://www.sandbox.paypal.com/sdk/js?\",\n    teBraintree: \"https://www.braintree.stage.paypal.com/sdk/js?\",\n  },\n  BT_INTEGRATION_SOURCE: \"BRAINTREE_WEB_SDK\",\n  CREATE_BILLING_AGREEMENT_JWT_MUTATION:\n    \"mutation CreateBillingAgreementJwt($input: CreateBillingAgreementJwtInput!) { createBillingAgreementJwt(input: $input) { jwt } }\",\n};\n\n},{}],219:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.PayPal - Creation Error Codes\n * @description Errors that occur when [creating the PayPal component](./module-braintree-web_paypal.html#.create).\n * @property {MERCHANT} PAYPAL_NOT_ENABLED Occurs when PayPal is not enabled on the Braintree control panel.\n */\n\n/**\n * @name BraintreeError.PayPal - tokenize Error Codes\n * @description Errors that occur when using the [`tokenize` method](./PayPal.html#tokenize).\n * @property {MERCHANT} PAYPAL_TOKENIZATION_REQUEST_ACTIVE Occurs when a tokenization request is already in progress.\n * @property {MERCHANT} PAYPAL_FLOW_OPTION_REQUIRED Occurs when flow option is not provided.\n * @property {NETWORK} PAYPAL_ACCOUNT_TOKENIZATION_FAILED Occurs when PayPal account could not be tokenized.\n * @property {NETWORK} PAYPAL_FLOW_FAILED Occurs when PayPal flow could not be initiated.\n * @property {MERCHANT} PAYPAL_POPUP_OPEN_FAILED Occurs when PayPal window could not be opened.\n * @property {CUSTOMER} PAYPAL_POPUP_CLOSED Occurs when customer closes the PayPal window before completing the flow.\n * @property {MERCHANT} PAYPAL_INVALID_PAYMENT_OPTION Occurs when an invalid payment option is passed.\n */\n\nvar BraintreeError = _dereq_(\"../../lib/braintree-error\");\n\nmodule.exports = {\n  PAYPAL_NOT_ENABLED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_NOT_ENABLED\",\n    message: \"PayPal is not enabled for this merchant.\",\n  },\n  PAYPAL_TOKENIZATION_REQUEST_ACTIVE: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_TOKENIZATION_REQUEST_ACTIVE\",\n    message: \"Another tokenization request is active.\",\n  },\n  PAYPAL_ACCOUNT_TOKENIZATION_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"PAYPAL_ACCOUNT_TOKENIZATION_FAILED\",\n    message: \"Could not tokenize user's PayPal account.\",\n  },\n  PAYPAL_FLOW_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"PAYPAL_FLOW_FAILED\",\n    message: \"Could not initialize PayPal flow.\",\n  },\n  PAYPAL_FLOW_OPTION_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_FLOW_OPTION_REQUIRED\",\n    message: \"PayPal flow property is invalid or missing.\",\n  },\n  PAYPAL_POPUP_OPEN_FAILED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_POPUP_OPEN_FAILED\",\n    message:\n      \"PayPal popup failed to open, make sure to tokenize in response to a user action.\",\n  },\n  PAYPAL_POPUP_CLOSED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"PAYPAL_POPUP_CLOSED\",\n    message: \"Customer closed PayPal popup before authorizing.\",\n  },\n  PAYPAL_INVALID_PAYMENT_OPTION: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_INVALID_PAYMENT_OPTION\",\n    message: \"PayPal payment options are invalid.\",\n  },\n};\n\n},{\"../../lib/braintree-error\":149}],220:[function(_dereq_,module,exports){\n\"use strict\";\n/** @module braintree-web/preferred-payment-methods */\n\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar basicComponentVerification = _dereq_(\"../lib/basic-component-verification\");\nvar PreferredPaymentMethods = _dereq_(\"./preferred-payment-methods\");\nvar VERSION = \"3.145.0\";\n\n// NEXT_MAJOR_VERSION\n// Remove this integration entirely. It doesn't work, isn't documented, and otherwise isn't going to be pursued further beyond the non-operational beta it is in.\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {callback} [callback] The second argument, `data`, is the {@link PreferredPaymentMethods} instance.\n * @example\n * braintree.preferredPaymentMethods.create({\n *   client: clientInstance\n * }).then(function (preferredPaymentMethodsInstance) {\n *   // preferredPaymentMethodsInstance is ready to be used.\n * }).catch(function (error) {\n *   // handle creation error\n * });\n * @returns {Promise|void} Returns a Promise with resolves with the PreferredPaymentMethods instance.\n */\nfunction create(options) {\n  var name = \"PreferredPaymentMethods\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      var instance = new PreferredPaymentMethods();\n\n      return instance.initialize(options);\n    });\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `{@pkg version}`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/basic-component-verification\":147,\"./preferred-payment-methods\":221,\"@braintree/wrap-promise\":43}],221:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar analytics = _dereq_(\"../lib/analytics\");\nvar createAssetsUrl = _dereq_(\"../lib/create-assets-url\");\nvar createDeferredClient = _dereq_(\"../lib/create-deferred-client\");\n\n/**\n * @class\n * @param {object} options See {@link module:braintree-web/preferred-payment-methods.create|preferred-payment-methods.create}\n */\nfunction PreferredPaymentMethods() {}\n\nPreferredPaymentMethods.prototype.initialize = function (options) {\n  var self = this;\n\n  this._clientPromise = createDeferredClient\n    .create({\n      authorization: options.authorization,\n      client: options.client,\n      debug: options.debug,\n      assetsUrl: createAssetsUrl.create(options.authorization),\n      name: \"PreferredPaymentMethods\",\n    })\n    .catch(function (err) {\n      self._setupError = err;\n\n      return Promise.reject(err);\n    });\n\n  analytics.sendEvent(\n    this._clientPromise,\n    \"preferred-payment-methods.initialized\"\n  );\n\n  return Promise.resolve(this);\n};\n\n/**\n * Fetches information about which payment methods are preferred on the device.\n * Used to determine which payment methods are given preference in your UI,\n * not whether they are presented entirely.\n *\n * This class is currently in beta and may change in future releases.\n * @public\n * @returns {Promise|void} Returns a promise if no callback is provided.\n * @example\n * <caption>Preferred Payment Methods</caption>\n * preferredPaymentMethodsInstance.fetchPreferredPaymentMethods().then(function (result) {\n *   if (result.paypalPreferred) {\n *     // PayPal preferred\n *   } else {\n *     // PayPal not preferred\n *   }\n *\n *   if (result.venmoPreferred) {\n *     // Venmo preferred\n *   } else {\n *     // Venmo not preferred\n *   }\n * });\n */\nPreferredPaymentMethods.prototype.fetchPreferredPaymentMethods = function () {\n  var client;\n  var self = this;\n\n  return this._clientPromise\n    .then(function (clientInstance) {\n      client = clientInstance;\n\n      return client.request({\n        api: \"graphQLApi\",\n        data: {\n          query:\n            \"query PreferredPaymentMethods { \" +\n            \"preferredPaymentMethods { \" +\n            \"paypalPreferred \" +\n            \"venmoPreferred \" +\n            \"} \" +\n            \"}\",\n        },\n      });\n    })\n    .then(function (result) {\n      var paypalPreferred = result.data.preferredPaymentMethods.paypalPreferred;\n      var venmoPreferred = result.data.preferredPaymentMethods.venmoPreferred;\n\n      analytics.sendEvent(\n        client,\n        \"preferred-payment-methods.paypal.api-detected.\" + paypalPreferred\n      );\n      analytics.sendEvent(\n        client,\n        \"preferred-payment-methods.venmo.api-detected.\" + venmoPreferred\n      );\n\n      return {\n        paypalPreferred: paypalPreferred,\n        venmoPreferred: venmoPreferred,\n      };\n    })\n    .catch(function () {\n      if (self._setupError) {\n        return Promise.reject(self._setupError);\n      }\n\n      analytics.sendEvent(client, \"preferred-payment-methods.api-error\");\n\n      return {\n        paypalPreferred: false,\n        venmoPreferred: false,\n      };\n    });\n};\n\nmodule.exports = wrapPromise.wrapPrototype(PreferredPaymentMethods);\n\n},{\"../lib/analytics\":143,\"../lib/create-assets-url\":153,\"../lib/create-deferred-client\":155,\"@braintree/wrap-promise\":43}],222:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar BraintreeError = _dereq_(\"../../lib/braintree-error\");\nvar sepaErrors = _dereq_(\"../shared/errors\");\nvar frameService = _dereq_(\"../../lib/frame-service/external\");\nvar analytics = _dereq_(\"../../lib/analytics\");\nvar useMin = _dereq_(\"../../lib/use-min\");\nvar billingAddressOptions =\n  _dereq_(\"../shared/constants\").BILLING_ADDRESS_OPTIONS;\nvar snakeCaseToCamelCase = _dereq_(\"../../lib/snake-case-to-camel-case\");\nvar assign = _dereq_(\"../../lib/assign\").assign;\n\nvar POPUP_WIDTH = 400;\nvar POPUP_HEIGHT = 570;\n\n/**\n * @ignore\n * @typedef CreateMandateResponse\n * @property {string} approvalUrl The URL to present to the customer for payment approval.\n * @property {string} last4 The last four digits of the iban.\n * @property {string} bankReferenceToken The tokenized payment source to fun the payment.\n */\n\n/**\n *\n * A function that creates a mandate so that we can present the mandate to the customer via a popup.\n *\n * @ignore\n * @static\n * @function createMandate\n * @param {object} client The Braintree client.\n * @param {object} options All options for intiating the SEPA payment flow.\n * @param {string} [options.accountHolderName] The account holder name.\n * @param {object} [options.billingAddress] The customer's billing address\n * @param {string} [options.billingAddress.addressLine1] Line 1 of the Address (eg. number, street, etc). An error will occur if this address is not valid.\n * @param {string} [options.billingAddress.addressLine2] Line 2 of the Address (eg. suite, apt #, etc.). An error will occur if this address is not valid.\n * @param {string} [options.billingAddress.adminArea1] Customer's city.\n * @param {string} [options.billingAddress.adminArea2] Customer's region or state.\n * @param {string} [options.billingAddress.postalCode] Customer's postal code.\n * @param {string} [options.cancelUrl] The URL to redirect to if authorization is cancelled.\n * @param {string} [options.countryCode] The customer's country code. Also used as billing address country code.\n * @param {string} [options.customerId] The customer's id.\n * @param {string} [options.iban] The customer's International Bank Account Number.\n * @param {string} [options.locale] The BCP 47-formatted locale. See https://developer.paypal.com/reference/locale-codes/ for a list of possible values.\n * @param {string} [options.mandateType] Specify ONE_OFF or RECURRENT payment.\n * @param {string} [options.merchantAccountId] The merchant's account id.\n * @param {string} [options.merchantId] The merchant id.\n * @param {string} [options.returnUrl] The URL to redirect to if authorization is successful.\n * @returns {Promise<CreateMandateResponse|Error>} Returns a promise with the mandate response or an error.\n */\n\nfunction createMandate(client, options) {\n  // Disabling eslint because api is expecting snake_case format for the keys\n  /* eslint-disable camelcase */\n  var data = {\n    sepa_debit: {\n      account_holder_name: options.accountHolderName,\n      billing_address: {\n        country_code: options.countryCode,\n      },\n      iban: options.iban,\n      merchant_or_partner_customer_id: options.customerId,\n      mandate_type: options.mandateType,\n    },\n    locale: options.locale,\n    cancel_url: options.cancelUrl,\n    return_url: options.returnUrl,\n    merchant_account_id: options.merchantAccountId,\n  };\n  /* eslint-enable camelcase */\n\n  if (options.billingAddress) {\n    billingAddressOptions.forEach(function (option) {\n      var ccOption = snakeCaseToCamelCase(option);\n      if (ccOption in options.billingAddress) {\n        data.sepa_debit.billing_address[option] =\n          options.billingAddress[ccOption]; // camelCase equivilent of option (eg. postal_code = postalCode) ]\n      }\n    });\n  }\n\n  return client\n    .request({\n      api: \"clientApi\",\n      method: \"post\",\n      endpoint: \"sepa_debit\",\n      data: data,\n    })\n    .then(function (response) {\n      var sepaDebitAccount = response.message.body.sepaDebitAccount;\n\n      if (!sepaDebitAccount) {\n        throw new BraintreeError(sepaErrors.SEPA_CREATE_MANDATE_FAILED);\n      }\n\n      return {\n        approvalUrl: sepaDebitAccount.approvalUrl,\n        last4: sepaDebitAccount.last4,\n        bankReferenceToken: sepaDebitAccount.bankReferenceToken,\n      };\n    })\n    .catch(function () {\n      throw new BraintreeError(sepaErrors.SEPA_CREATE_MANDATE_FAILED);\n    });\n}\n\n/**\n *\n * A function for opening and managing the popup used for authorization.\n *\n * @ignore\n * @param {string} client The Braintree client.\n * @param {string} options The input options needed to manage the popup portion of the flow.\n * @param {string} [options.assetsUrl] The url to the Braintree asset to be used in frameservice.\n * @param {string} [options.approvalUrl] The url to open for SEPA authorization. It is `approvalUrl` coming back from the mandate creation, but commonly refered to as the mandate link.\n * @param {string} [options.debug] Whether to use debugging modes or not.\n * @returns {Promise<void|Error>} Returns a promise.\n */\nfunction openPopup(client, options) {\n  var popupName = \"sepadirectdebit\";\n  var assetsBaseUrl = options.assetsUrl + \"/html\";\n  var debug = options.debug || false;\n\n  return new Promise(function (resolve, reject) {\n    var popupLocation = centeredPopupDimensions();\n\n    frameService.create(\n      {\n        name: popupName,\n        dispatchFrameUrl:\n          assetsBaseUrl + \"/dispatch-frame\" + useMin(debug) + \".html\",\n        openFrameUrl:\n          assetsBaseUrl + \"/sepa-landing-frame\" + useMin(debug) + \".html\",\n        top: popupLocation.top,\n        left: popupLocation.left,\n        height: POPUP_HEIGHT,\n        width: POPUP_WIDTH,\n      },\n      function (frameServiceInstance) {\n        analytics.sendEvent(client, \"sepa.popup.initialized\");\n        frameServiceInstance.open({}, function (err, params) {\n          if (mandateApproved(params)) {\n            frameServiceInstance.close();\n\n            return resolve();\n          }\n\n          if (customerCanceled(params, err)) {\n            frameServiceInstance.close();\n\n            return reject(\n              new BraintreeError(sepaErrors.SEPA_CUSTOMER_CANCELED)\n            );\n          }\n\n          frameServiceInstance.close();\n\n          return reject(\n            new BraintreeError(sepaErrors.SEPA_TOKENIZATION_FAILED)\n          );\n        });\n\n        frameServiceInstance.redirect(options.approvalUrl);\n      }\n    );\n  });\n}\n\nfunction redirectPage(approvalUrl) {\n  window.location.href = approvalUrl;\n}\n\nfunction mandateApproved(params) {\n  return params && params.success;\n}\n\nfunction customerCanceled(params, error) {\n  return (\n    (params && params.cancel) ||\n    (error && error.code === \"FRAME_SERVICE_FRAME_CLOSED\")\n  );\n}\n\nfunction centeredPopupDimensions() {\n  var popupTop =\n    Math.round((window.outerHeight - POPUP_HEIGHT) / 2) + window.screenTop;\n  var popupLeft =\n    Math.round((window.outerWidth - POPUP_WIDTH) / 2) + window.screenLeft;\n\n  return {\n    top: popupTop,\n    left: popupLeft,\n  };\n}\n\n/**\n *\n * A function that creates a mandate so that we can present the mandate to the customer via a popup.\n *\n * @ignore\n * @static\n * @function handleApproval\n * @param {object} client The Braintree client.\n * @param {object} options All options for intiating the SEPA payment flow.\n * @param {string} [options.bankReferenceToken] The tokenized payment source to fun the payment.\n * @param {string} [options.customerId] The customer's id.\n * @param {string} [options.last4] The last four digits of iban.\n * @param {string} [options.mandateType] The mandate type being used. Specify ONE_OFF or RECURRENT payment.\n * @param {string} [options.merchantAccountId] The merchant's account id.\n * @param {string} [options.merchantId] The merchant id.\n * @returns {Promise<tokenizePayload|Error>} Returns a promise with the approval response or an error.\n */\n\nfunction handleApproval(client, options) {\n  // Disabling eslint because api is expecting snake_case format for the keys\n  /* eslint-disable camelcase */\n  var data = {\n    sepa_debit_account: {\n      last_4: options.last4,\n      merchant_or_partner_customer_id: options.customerId,\n      bank_reference_token: options.bankReferenceToken,\n      mandate_type: options.mandateType,\n    },\n    merchant_account_id: options.merchantAccountId,\n  };\n  /* eslint-enable camelcase */\n\n  return client\n    .request({\n      api: \"clientApi\",\n      method: \"post\",\n      endpoint: \"payment_methods/sepa_debit_accounts\",\n      data: data,\n    })\n    .then(function (response) {\n      if (!response.nonce) {\n        throw new BraintreeError(sepaErrors.SEPA_TRANSACTION_FAILED);\n      }\n\n      return {\n        nonce: response.nonce,\n        ibanLastFour: options.last4,\n        customerId: options.customerId,\n        mandateType: options.mandateType,\n      };\n    })\n    .catch(function () {\n      throw new BraintreeError(sepaErrors.SEPA_TRANSACTION_FAILED);\n    });\n}\n\nfunction handleApprovalForFullPageRedirect(client, options) {\n  return client\n    .request({\n      api: \"clientApi\",\n      method: \"get\",\n      endpoint: \"sepa_debit/\" + options.cart_id,\n    })\n    .then(function (response) {\n      var payload = response.sepaDebitMandateDetail;\n\n      analytics.sendEvent(client, \"sepa.redirect.mandate.approved\");\n\n      assign(options, {\n        last4: payload.last4,\n        customerId: payload.merchantOrPartnerCustomerId,\n        mandateType: payload.mandateType,\n        bankReferenceToken: payload.bankReferenceToken,\n      });\n\n      return handleApproval(client, options);\n    })\n    .then(function (response) {\n      analytics.sendEvent(client, \"sepa.redirect.tokenization.success\");\n\n      return response;\n    })\n    .catch(function () {\n      analytics.sendEvent(client, \"sepa.redirect.handle-approval.failed\");\n      throw new BraintreeError(sepaErrors.SEPA_TRANSACTION_FAILED);\n    });\n}\n\nmodule.exports = {\n  createMandate: createMandate,\n  openPopup: openPopup,\n  handleApproval: handleApproval,\n  POPUP_WIDTH: POPUP_WIDTH,\n  POPUP_HEIGHT: POPUP_HEIGHT,\n  redirectPage: redirectPage,\n  handleApprovalForFullPageRedirect: handleApprovalForFullPageRedirect,\n};\n\n},{\"../../lib/analytics\":143,\"../../lib/assign\":146,\"../../lib/braintree-error\":149,\"../../lib/frame-service/external\":164,\"../../lib/snake-case-to-camel-case\":186,\"../../lib/use-min\":188,\"../shared/constants\":225,\"../shared/errors\":226}],223:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar BraintreeError = _dereq_(\"../../lib/braintree-error\");\nvar sepaErrors = _dereq_(\"../shared/errors\");\nvar constants = _dereq_(\"../shared/constants\");\nvar mandates = _dereq_(\"./mandate\");\nvar hasMissingOption = _dereq_(\"../../lib/has-missing-option\");\nvar analytics = _dereq_(\"../../lib/analytics\");\nvar VERSION = \"3.145.0\";\nvar assign = _dereq_(\"../../lib/assign\").assign;\n\n/**\n * @class\n * @param {object} options see {@link module:braintree-web/sepa.create|sepa.create}\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/sepa.create|braintree-web.sepa.create} instead.</strong>\n * @classdesc This class represents a SEPA component produced by {@link module:braintree-web/sepa.create|braintree-web.sepa.create}. Instances provide methods for tokenizing SEPA payments.\n */\nfunction SEPA(options) {\n  var getConfiguration = options.client.getConfiguration();\n\n  this._client = options.client;\n  this._assetsUrl =\n    getConfiguration.gatewayConfiguration.assetsUrl + \"/web/\" + VERSION;\n  this._isDebug = getConfiguration.isDebug;\n  if (options.redirectUrl) {\n    this._returnUrl = options.redirectUrl;\n    this._cancelUrl = options.redirectUrl + \"?cancel=1\";\n    this._isRedirectFlow = true;\n  } else {\n    this._returnUrl = this._assetsUrl + \"/html/redirect-frame.html?success=1\";\n    this._cancelUrl = this._assetsUrl + \"/html/redirect-frame.html?cancel=1\";\n  }\n  if (options.tokenizePayload) {\n    this.tokenizePayload = options.tokenizePayload;\n  }\n\n  analytics.sendEvent(this._client, \"sepa.component.initialized\");\n}\n\n/**\n * SEPA tokenize payload.\n * @typedef SEPA~tokenizePayload\n * @property {string} nonce The payment nonce.\n * @property {string} ibanLastFour The last four digits of the customer's IBAN.\n * @property {string} mandateType The specified mandateType used.\n * @property {string} customerId The provided customer id.\n */\n\n/**\n * @public\n * @param {object} options All options for intiating the SEPA payment flow.\n * @param {string} [options.accountHolderName] The account holder name.\n * @param {string} [options.customerId] The customer's id.\n * @param {string} [options.iban] The customer's International Bank Account Number.\n * @param {string} [options.mandateType] Specify ONE_OFF or RECURRENT payment.\n * @param {string} [options.countryCode] The customer's country code.\n * @param {string} [options.merchantAccountId] The merchant's account id.\n * @param {callback} [callback] The first argument is an error object, where the second is a {@link SEPA~tokenizePayload|tokenizePayload}\n * @returns {(Promise<tokenizePayload|error>)} Returns a promise if no callback is provided.\n *\n * @example\n * button.addEventListener('click', function () {\n *   var tokenizeInputs = {\n *     accountHolderName: \"some-accnt-holder-name\",\n *     customerId: \"a-customer-id\",\n *     iban: \"a-full-iban\",\n *     mandateType: \"ONE_OFF\",\n *     countryCode: \"LI\",\n *     merchantAccountId: \"a-merchant-account-id\"\n *   }\n *   sepaInstance.tokenize(tokenizeInputs).then(function (payload) {\n *      // Submit payload.nonce to your server\n *   }).catch(function(tokenizationErr) {\n *     // Handle errors in the flow\n *   })\n * })\n */\nSEPA.prototype.tokenize = function (options) {\n  var self = this;\n  var popupPromise;\n  var createMandateOptions = assign(\n    { cancelUrl: self._cancelUrl, returnUrl: self._returnUrl },\n    options\n  );\n\n  if (!options || hasMissingOption(options, constants.REQUIRED_OPTIONS)) {\n    analytics.sendEvent(self._client, \"sepa.input-validation.missing-options\");\n\n    return Promise.reject(\n      new BraintreeError(sepaErrors.SEPA_TOKENIZE_MISSING_REQUIRED_OPTION)\n    );\n  }\n\n  if (!constants.MANDATE_TYPE_ENUM.includes(options.mandateType)) {\n    analytics.sendEvent(self._client, \"sepa.input-validation.invalid-mandate\");\n\n    return Promise.reject(\n      new BraintreeError(sepaErrors.SEPA_INVALID_MANDATE_TYPE)\n    );\n  }\n\n  popupPromise = mandates\n    .createMandate(self._client, createMandateOptions)\n    .then(function (mandateResponse) {\n      analytics.sendEvent(self._client, \"sepa.create-mandate.success\");\n\n      if (self._isRedirectFlow) {\n        return mandates.redirectPage(mandateResponse.approvalUrl);\n      }\n\n      options.last4 = mandateResponse.last4;\n      options.bankReferenceToken = mandateResponse.bankReferenceToken;\n\n      return mandates.openPopup(self._client, {\n        approvalUrl: mandateResponse.approvalUrl,\n        assetsUrl: self._assetsUrl,\n      });\n    });\n\n  // Must be outside of .then() to return from top-level function\n  if (self._isRedirectFlow) {\n    return Promise.resolve();\n  }\n\n  // At this point, we know the promise came from the popup flow\n  return popupPromise\n    .then(function () {\n      analytics.sendEvent(self._client, \"sepa.mandate.approved\");\n\n      return mandates.handleApproval(self._client, {\n        bankReferenceToken: options.bankReferenceToken,\n        last4: options.last4,\n        customerId: options.customerId,\n        mandateType: options.mandateType,\n        merchantAccountId: options.merchantAccountId,\n      });\n    })\n    .then(function (approval) {\n      analytics.sendEvent(self._client, \"sepa.tokenization.success\");\n\n      return Promise.resolve(approval);\n    })\n    .catch(function (err) {\n      analytics.sendEvent(self._client, \"sepa.\" + err.details + \".failed\");\n\n      return Promise.reject(err);\n    });\n};\n\nmodule.exports = wrapPromise.wrapPrototype(SEPA);\n\n},{\"../../lib/analytics\":143,\"../../lib/assign\":146,\"../../lib/braintree-error\":149,\"../../lib/has-missing-option\":175,\"../shared/constants\":225,\"../shared/errors\":226,\"./mandate\":222,\"@braintree/wrap-promise\":43}],224:[function(_dereq_,module,exports){\n\"use strict\";\n/** @module braintree-web/sepa */\n\nvar analytics = _dereq_(\"../lib/analytics\");\nvar SEPA = _dereq_(\"./external/sepa\");\nvar createAssetsUrl = _dereq_(\"../lib/create-assets-url\");\nvar createDeferredClient = _dereq_(\"../lib/create-deferred-client\");\nvar basicComponentVerification = _dereq_(\"../lib/basic-component-verification\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar VERSION = \"3.145.0\";\nvar parse = _dereq_(\"../lib/querystring\").parse;\nvar assign = _dereq_(\"../lib/assign\").assign;\nvar mandate = _dereq_(\"./external/mandate\");\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {boolean} [options.debug] A debug flag.\n * @param {string} [options.redirectUrl] When provided, triggers full page redirect flow instead of popup flow.\n * @param {callback} [callback] When provided, will be used instead of a promise. First argument is an error object, where the second is an instance of {@link SEPA|SEPA}.\n * @returns {Promise<void|error>} Returns the SEPA instance.\n * @example\n * braintree.sepa.create({\n *   client: clientInstance\n * }).then(function (sepaInstance) {\n *   // sepaInstance is ready to be used.\n * }).catch(function (createErr) {\n *   console.error('Error creating SEPA instance', createErr);\n * });\n * @example <caption>Creating a SEPA component</caption>\n * braintree.sepa.create({\n *   client: clientInstance,\n * }).then(function (sepaInstance) {\n *   // sepaInstance is ready to be used.\n * }).catch(function (createErr) {\n *   console.error('Error creating SEPA instance', createErr);\n * });\n */\n\nfunction create(options) {\n  var name = \"SEPA\";\n  var params = parse(window.location.href);\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      return createDeferredClient.create({\n        authorization: options.authorization,\n        client: options.client,\n        debug: options.debug,\n        assetsUrl: createAssetsUrl.create(options.authorization),\n        name: name,\n      });\n    })\n    .then(function (client) {\n      options.client = client;\n\n      analytics.sendEvent(client, \"sepa.client.initialized\");\n\n      return new SEPA(options);\n    })\n    .then(function (sepaInstance) {\n      // This cart_id is actually a V2 orderId\n      var redirectComplete =\n        params.success && params.success === \"true\" && params.cart_id;\n\n      if (redirectComplete) {\n        options = assign(options, params);\n\n        // Pick up redirect flow where it left off\n        return mandate\n          .handleApprovalForFullPageRedirect(options.client, options)\n          .then(function (payload) {\n            sepaInstance.tokenizePayload = payload;\n\n            return sepaInstance;\n          })\n          .catch(function (err) {\n            console.error(\"Problem while finishing tokenizing: \", err); // eslint-disable-line no-console\n          });\n      }\n      if (params.cancel) {\n        analytics.sendEvent(\n          options.client,\n          \"sepa.redirect.customer-canceled.failed\"\n        );\n      }\n\n      return sepaInstance;\n    });\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `{@pkg version}`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/analytics\":143,\"../lib/assign\":146,\"../lib/basic-component-verification\":147,\"../lib/create-assets-url\":153,\"../lib/create-deferred-client\":155,\"../lib/querystring\":184,\"./external/mandate\":222,\"./external/sepa\":223,\"@braintree/wrap-promise\":43}],225:[function(_dereq_,module,exports){\n\"use strict\";\n\nmodule.exports = {\n  REQUIRED_OPTIONS: [\n    \"iban\",\n    \"merchantAccountId\",\n    \"mandateType\",\n    \"customerId\",\n    \"accountHolderName\",\n    \"countryCode\",\n  ],\n  BILLING_ADDRESS_OPTIONS: [\n    \"address_line_1\",\n    \"address_line_2\",\n    \"admin_area_1\",\n    \"admin_area_2\",\n    \"postal_code\",\n  ],\n  MANDATE_TYPE_ENUM: [\"ONE_OFF\", \"RECURRENT\"],\n};\n\n},{}],226:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar BraintreeError = _dereq_(\"../../lib/braintree-error\");\n\n/**\n * @name BraintreeError.SEPA - tokenize Error Codes\n * @description Errors that occur when using the {@link module:braintree-web/sepa.tokenize|sepa.tokenize} method.\n * @property {MERCHANT} SEPA_CREATE_MANDATE_FAILED Occurs when there was an issue creating a mandate. This can occur if the request fails, or if the merchant does not have SEPA enabled.\n * @property {CUSTOMER} SEPA_CUSTOMER_CANCELED Occurs when the customer has canceled the SEPA authorization process. This can be within the mandate approval popup, or by canceling the popup itself.\n * @property {MERCHANT} SEPA_INVALID_MANDATE_TYPE Occurs when an invalid mandate type is provided.\n * @property {UNKNOWN} SEPA_TOKENIZATION_FAILED Occurs when tokenization fails during the mandate approval process for unknown reasons.\n * @property {MERCHANT} SEPA_TOKENIZE_MISSING_REQUIRED_OPTION Occurs when there are required input options not provided.\n * @property {UNKNOWN} SEPA_TRANSACTION_FAILED Occurs when final tokenization fails.\n */\n\n// Those with a \"details\" property are used in specific locations and this prop serves to identify where in the imlpementation the error originates.\nmodule.exports = {\n  SEPA_CREATE_MANDATE_FAILED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"SEPA_CREATE_MANDATE_FAILED\",\n    message: \"SEPA create mandate failed.\",\n    details: \"create-mandate\",\n  },\n  SEPA_CUSTOMER_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"SEPA_CUSTOMER_CANCELED\",\n    message: \"User canceled SEPA authorization\",\n    details: \"customer-canceled\",\n  },\n  SEPA_INVALID_MANDATE_TYPE: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"SEPA_INVALID_MANDATE_TYPE\",\n    message: \"SEPA mandate type is invalid\",\n  },\n  SEPA_TOKENIZATION_FAILED: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"SEPA_TOKENIZATION_FAILED\",\n    message: \"SEPA encountered a problem\",\n    details: \"open-popup\",\n  },\n  SEPA_TOKENIZE_MISSING_REQUIRED_OPTION: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"SEPA_TOKENIZE_MISSING_REQUIRED_OPTION\",\n    message: \"Missing required option for tokenize.\",\n  },\n  SEPA_TRANSACTION_FAILED: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"SEPA_TRANSACTION_FAILED\",\n    message: \"SEPA transaction failed\",\n    details: \"handle-approval\",\n  },\n};\n\n},{\"../../lib/braintree-error\":149}],227:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar assign = _dereq_(\"../../../lib/assign\").assign;\nvar analytics = _dereq_(\"../../../lib/analytics\");\nvar BraintreeError = _dereq_(\"../../../lib/braintree-error\");\nvar isVerifiedDomain = _dereq_(\"../../../lib/is-verified-domain\");\nvar ExtendedPromise = _dereq_(\"@braintree/extended-promise\");\nvar EventEmitter = _dereq_(\"@braintree/event-emitter\");\nvar errors = _dereq_(\"../../shared/errors\");\nvar iFramer = _dereq_(\"@braintree/iframer\");\nvar Bus = _dereq_(\"framebus\");\nvar constants = _dereq_(\"../../shared/constants\");\nvar uuid = _dereq_(\"@braintree/uuid\");\nvar events = _dereq_(\"../../shared/events\");\nvar useMin = _dereq_(\"../../../lib/use-min\");\nvar BUS_CONFIGURATION_REQUEST_EVENT =\n  _dereq_(\"../../../lib/constants\").BUS_CONFIGURATION_REQUEST_EVENT;\n\nvar VERSION = \"3.145.0\";\nvar IFRAME_HEIGHT = 400;\nvar IFRAME_WIDTH = 400;\n\nExtendedPromise.suppressUnhandledPromiseMessage = true;\n\nfunction BaseFramework(options) {\n  EventEmitter.call(this);\n\n  this._client = options.client;\n  this._createPromise = options.createPromise;\n  this._createOptions = options;\n\n  if (this._client) {\n    this._isDebug = this._client.getConfiguration().isDebug;\n    this._assetsUrl =\n      this._client.getConfiguration().gatewayConfiguration.assetsUrl;\n  } else {\n    this._isDebug = Boolean(options.isDebug);\n    this._assetsUrl = options.assetsUrl;\n  }\n  this._assetsUrl = this._assetsUrl + \"/web/\" + VERSION;\n}\n\nEventEmitter.createChild(BaseFramework);\n\nBaseFramework.prototype._waitForClient = function () {\n  if (this._client) {\n    return Promise.resolve();\n  }\n\n  return this._createPromise.then(\n    function (client) {\n      this._client = client;\n    }.bind(this)\n  );\n};\n\nBaseFramework.prototype.setUpEventListeners = function () {\n  throw new BraintreeError(errors.THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED);\n};\n\nBaseFramework.prototype.verifyCard = function (options, privateOptions) {\n  var formattedOptions, error;\n  var self = this;\n\n  privateOptions = privateOptions || {};\n\n  error = this._checkForVerifyCardError(options, privateOptions);\n\n  if (error) {\n    return Promise.reject(error);\n  }\n\n  this._verifyCardInProgress = true;\n\n  formattedOptions = this._formatVerifyCardOptions(options);\n\n  return this._formatLookupData(formattedOptions)\n    .then(function (data) {\n      analytics.sendEvent(\n        self._createPromise,\n        \"three-d-secure.verification-flow.started\"\n      );\n\n      return self._performLookup(formattedOptions.nonce, data);\n    })\n    .then(function (response) {\n      analytics.sendEvent(\n        self._createPromise,\n        \"three-d-secure.verification-flow.3ds-version.\" +\n          response.lookup.threeDSecureVersion\n      );\n\n      return self._onLookupComplete(response, formattedOptions);\n    })\n    .then(function (response) {\n      return self.initializeChallengeWithLookupResponse(\n        response,\n        formattedOptions\n      );\n    })\n    .then(function (payload) {\n      self._resetVerificationState();\n\n      analytics.sendEvent(\n        self._createPromise,\n        \"three-d-secure.verification-flow.completed\"\n      );\n\n      return payload;\n    })\n    .catch(function (err) {\n      self._resetVerificationState();\n\n      analytics.sendEvent(\n        self._createPromise,\n        \"three-d-secure.verification-flow.failed\"\n      );\n\n      return Promise.reject(err);\n    });\n};\n\nBaseFramework.prototype._checkForFrameworkSpecificVerifyCardErrors =\n  function () {\n    throw new BraintreeError(errors.THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED);\n  };\n\nBaseFramework.prototype._presentChallenge = function () {\n  throw new BraintreeError(errors.THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED);\n};\n\nBaseFramework.prototype.prepareLookup = function () {\n  throw new BraintreeError(errors.THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED);\n};\n\nBaseFramework.prototype._resetVerificationState = function () {\n  this._verifyCardInProgress = false;\n  this._verifyCardPromisePlus = null;\n\n  if (typeof this._reloadThreeDSecure === \"function\") {\n    this._reloadThreeDSecure();\n  }\n};\n\nBaseFramework.prototype._performLookup = function (nonce, data) {\n  var self = this;\n  var url = \"payment_methods/\" + nonce + \"/three_d_secure/lookup\";\n\n  return this._waitForClient().then(function () {\n    return self._client\n      .request({\n        endpoint: url,\n        method: \"post\",\n        data: data,\n      })\n      .catch(function (err) {\n        var status = err && err.details && err.details.httpStatus;\n        var analyticsMessage = \"three-d-secure.verification-flow.lookup-failed\";\n        var lookupError;\n\n        if (status === 404) {\n          lookupError = errors.THREEDS_LOOKUP_TOKENIZED_CARD_NOT_FOUND_ERROR;\n          analyticsMessage += \".404\";\n        } else if (status === 422) {\n          lookupError = errors.THREEDS_LOOKUP_VALIDATION_ERROR;\n          analyticsMessage += \".422\";\n        } else {\n          lookupError = errors.THREEDS_LOOKUP_ERROR;\n        }\n\n        analytics.sendEvent(self._createPromise, analyticsMessage);\n\n        return Promise.reject(\n          new BraintreeError({\n            type: lookupError.type,\n            code: lookupError.code,\n            message: lookupError.message,\n            details: {\n              originalError: err,\n            },\n          })\n        );\n      });\n  });\n};\n\nBaseFramework.prototype._existsAndIsNumeric = function (value) {\n  /**\n   * Returns true if value is numeric and false if value is:\n   *  - undefined\n   *  - null\n   *  - an array\n   *  - an empty string\n   *  - boolean\n   *  - otherwise non-numeric value (e.g. {}, \"cows\")\n   */\n  return !(\n    value === undefined ||\n    value === null ||\n    Array.isArray(value) ||\n    typeof value === \"boolean\" ||\n    (typeof value === \"string\" && value.trim() === \"\") ||\n    isNaN(Number(value))\n  );\n};\n\nBaseFramework.prototype._checkForVerifyCardError = function (\n  options,\n  privateOptions\n) {\n  var errorOption;\n\n  if (this._verifyCardInProgress === true) {\n    return new BraintreeError(errors.THREEDS_AUTHENTICATION_IN_PROGRESS);\n  }\n  if (!options.nonce) {\n    errorOption = \"a nonce\";\n  } else if (!this._existsAndIsNumeric(options.amount)) {\n    errorOption = \"an amount\";\n  }\n\n  if (!errorOption) {\n    errorOption = this._checkForFrameworkSpecificVerifyCardErrors(\n      options,\n      privateOptions\n    );\n  }\n\n  if (errorOption) {\n    return new BraintreeError({\n      type: errors.THREEDS_MISSING_VERIFY_CARD_OPTION.type,\n      code: errors.THREEDS_MISSING_VERIFY_CARD_OPTION.code,\n      message: \"verifyCard options must include \" + errorOption + \".\",\n    });\n  }\n\n  return null;\n};\n\nBaseFramework.prototype.initializeChallengeWithLookupResponse = function (\n  lookupResponse,\n  options\n) {\n  var self = this;\n\n  options = options || {};\n\n  this._lookupPaymentMethod = lookupResponse.paymentMethod;\n\n  // sets this in the case that initializeChallengeWithLookupResponse is\n  // called as a standalone method from a server side lookup. In a normal\n  // verifyCard flow, this promise will already exist\n  self._verifyCardPromisePlus =\n    self._verifyCardPromisePlus || new ExtendedPromise();\n  self._handleLookupResponse(lookupResponse, options);\n\n  return self._verifyCardPromisePlus.then(function (payload) {\n    analytics.sendEvent(\n      self._createPromise,\n      \"three-d-secure.verification-flow.liability-shifted.\" +\n        String(payload.liabilityShifted)\n    );\n    analytics.sendEvent(\n      self._createPromise,\n      \"three-d-secure.verification-flow.liability-shift-possible.\" +\n        String(payload.liabilityShiftPossible)\n    );\n\n    return payload;\n  });\n};\n\nBaseFramework.prototype._handleLookupResponse = function (\n  lookupResponse,\n  options\n) {\n  var challengeShouldBePresented = Boolean(\n    lookupResponse.lookup && lookupResponse.lookup.acsUrl\n  );\n  var details;\n\n  analytics.sendEvent(\n    this._createPromise,\n    \"three-d-secure.verification-flow.challenge-presented.\" +\n      String(challengeShouldBePresented)\n  );\n\n  if (challengeShouldBePresented) {\n    this._presentChallenge(lookupResponse, options);\n  } else {\n    details = this._formatAuthResponse(\n      lookupResponse.paymentMethod,\n      lookupResponse.threeDSecureInfo\n    );\n    details.verificationDetails = lookupResponse.threeDSecureInfo;\n\n    this._verifyCardPromisePlus.resolve(details);\n  }\n};\n\nBaseFramework.prototype._onLookupComplete = function (response) {\n  this._lookupPaymentMethod = response.paymentMethod;\n  this._verifyCardPromisePlus = new ExtendedPromise();\n\n  return Promise.resolve(response);\n};\n\nBaseFramework.prototype._formatAuthResponse = function (\n  paymentMethod,\n  threeDSecureInfo\n) {\n  return {\n    nonce: paymentMethod.nonce,\n    type: paymentMethod.type,\n    binData: paymentMethod.binData,\n    details: paymentMethod.details,\n    description:\n      paymentMethod.description &&\n      paymentMethod.description.replace(/\\+/g, \" \"),\n    liabilityShifted: threeDSecureInfo && threeDSecureInfo.liabilityShifted,\n    liabilityShiftPossible:\n      threeDSecureInfo && threeDSecureInfo.liabilityShiftPossible,\n    threeDSecureInfo: paymentMethod.threeDSecureInfo,\n  };\n};\n\nBaseFramework.prototype._formatVerifyCardOptions = function (options) {\n  return assign({}, options);\n};\n\nBaseFramework.prototype._formatLookupData = function (options) {\n  var data = {\n    amount: options.amount,\n  };\n\n  if (options.collectDeviceData === true) {\n    data.browserColorDepth = window.screen.colorDepth;\n    data.browserJavaEnabled = window.navigator.javaEnabled();\n    data.browserJavascriptEnabled = true;\n    data.browserLanguage = window.navigator.language;\n    data.browserScreenHeight = window.screen.height;\n    data.browserScreenWidth = window.screen.width;\n    data.browserTimeZone = new Date().getTimezoneOffset();\n    data.deviceChannel = \"Browser\";\n  }\n\n  return Promise.resolve(data);\n};\n\nBaseFramework.prototype._handleV1AuthResponse = function (data) {\n  var authResponse = JSON.parse(data.auth_response);\n\n  if (authResponse.success) {\n    this._verifyCardPromisePlus.resolve(\n      this._formatAuthResponse(\n        authResponse.paymentMethod,\n        authResponse.threeDSecureInfo\n      )\n    );\n  } else if (\n    authResponse.threeDSecureInfo &&\n    authResponse.threeDSecureInfo.liabilityShiftPossible\n  ) {\n    this._verifyCardPromisePlus.resolve(\n      this._formatAuthResponse(\n        this._lookupPaymentMethod,\n        authResponse.threeDSecureInfo\n      )\n    );\n  } else {\n    this._verifyCardPromisePlus.reject(\n      new BraintreeError({\n        type: BraintreeError.types.UNKNOWN,\n        code: \"UNKNOWN_AUTH_RESPONSE\",\n        message: authResponse.error.message,\n      })\n    );\n  }\n};\n\nBaseFramework.prototype.cancelVerifyCard = function () {\n  var response, threeDSecureInfo;\n\n  this._verifyCardInProgress = false;\n\n  if (!this._lookupPaymentMethod) {\n    return Promise.reject(\n      new BraintreeError(errors.THREEDS_NO_VERIFICATION_PAYLOAD)\n    );\n  }\n\n  threeDSecureInfo = this._lookupPaymentMethod.threeDSecureInfo;\n\n  response = assign({}, this._lookupPaymentMethod, {\n    liabilityShiftPossible:\n      threeDSecureInfo && threeDSecureInfo.liabilityShiftPossible,\n    liabilityShifted: threeDSecureInfo && threeDSecureInfo.liabilityShifted,\n    verificationDetails:\n      threeDSecureInfo && threeDSecureInfo.verificationDetails,\n  });\n\n  return Promise.resolve(response);\n};\n\nBaseFramework.prototype._setupV1Bus = function (options) {\n  var clientConfiguration = this._client.getConfiguration();\n  var parentURL = window.location.href.split(\"#\")[0];\n  var lookupResponse = options.lookupResponse;\n  var channel = uuid();\n  var bus = new Bus({\n    channel: channel,\n    verifyDomain: isVerifiedDomain,\n  });\n  var authenticationCompleteBaseUrl =\n    this._assetsUrl +\n    \"/html/three-d-secure-authentication-complete-frame.html?channel=\" +\n    encodeURIComponent(channel) +\n    \"&\";\n\n  bus.on(BUS_CONFIGURATION_REQUEST_EVENT, function (reply) {\n    reply({\n      clientConfiguration: clientConfiguration,\n      nonce: options.nonce,\n      acsUrl: lookupResponse.acsUrl,\n      pareq: lookupResponse.pareq,\n      termUrl:\n        lookupResponse.termUrl +\n        \"&three_d_secure_version=\" +\n        VERSION +\n        \"&authentication_complete_base_url=\" +\n        encodeURIComponent(authenticationCompleteBaseUrl),\n      md: lookupResponse.md,\n      parentUrl: parentURL,\n    });\n  });\n\n  bus.on(events.AUTHENTICATION_COMPLETE, options.handleAuthResponse);\n\n  return bus;\n};\n\nBaseFramework.prototype._setupV1Iframe = function (options) {\n  var url =\n    this._assetsUrl +\n    \"/html/three-d-secure-bank-frame\" +\n    useMin(this._isDebug) +\n    \".html?showLoader=\" +\n    options.showLoader;\n  var bankIframe = iFramer({\n    src: url,\n    height: IFRAME_HEIGHT,\n    width: IFRAME_WIDTH,\n    name: constants.LANDING_FRAME_NAME + \"_\" + this._v1Bus.channel,\n    title: \"3D Secure Authorization Frame\",\n  });\n\n  return bankIframe;\n};\n\nBaseFramework.prototype._setupV1Elements = function (options) {\n  this._v1Bus = this._setupV1Bus(options);\n  this._v1Iframe = this._setupV1Iframe(options);\n};\n\nBaseFramework.prototype._teardownV1Elements = function () {\n  if (this._v1Bus) {\n    this._v1Bus.teardown();\n    this._v1Bus = null;\n  }\n\n  if (this._v1Iframe && this._v1Iframe.parentNode) {\n    this._v1Iframe.parentNode.removeChild(this._v1Iframe);\n    this._v1Iframe = null;\n  }\n\n  if (this._onV1Keyup) {\n    document.removeEventListener(\"keyup\", this._onV1Keyup);\n    this._onV1Keyup = null;\n  }\n};\n\nBaseFramework.prototype.teardown = function () {\n  analytics.sendEvent(this._createPromise, \"three-d-secure.teardown-completed\");\n\n  this._teardownV1Elements();\n\n  return Promise.resolve();\n};\n\nmodule.exports = BaseFramework;\n\n},{\"../../../lib/analytics\":143,\"../../../lib/assign\":146,\"../../../lib/braintree-error\":149,\"../../../lib/constants\":150,\"../../../lib/is-verified-domain\":180,\"../../../lib/use-min\":188,\"../../shared/constants\":235,\"../../shared/errors\":236,\"../../shared/events\":237,\"@braintree/event-emitter\":33,\"@braintree/extended-promise\":34,\"@braintree/iframer\":35,\"@braintree/uuid\":39,\"framebus\":54}],228:[function(_dereq_,module,exports){\n\"use strict\";\n// NEXT_MAJOR_VERSION drop support for Bootstrap framework,\n// recomend using inline frame version and putting it in\n// the merchant's own bootstrap modal\n\nvar SongbirdFramework = _dereq_(\"./songbird\");\n\nfunction Bootstrap3ModalFramework(options) {\n  SongbirdFramework.call(this, options);\n}\n\nBootstrap3ModalFramework.prototype = Object.create(\n  SongbirdFramework.prototype,\n  {\n    constructor: SongbirdFramework,\n  }\n);\n\nBootstrap3ModalFramework.prototype._createV1IframeModalElement = function (\n  iframe\n) {\n  var modal = document.createElement(\"div\");\n\n  modal.innerHTML =\n    '<div class=\"modal fade in\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"CCAFrameModal-label\" aria-hidden=\"true\" style=\"display: block;\">' +\n    '<div class=\"modal-dialog\" style=\"width:440px;z-index:999999;\">' +\n    '<div class=\"modal-content\">' +\n    '<div class=\"modal-body\" data-braintree-v1-fallback-iframe-container>' +\n    '<button type=\"button\" data-braintree-v1-fallback-close-button class=\"close\" data-dismiss=\"modal\" aria-hidden=\"true\">\u00D7</button>' +\n    \"</div>\" +\n    \"</div>\" +\n    \"</div>\" +\n    '<div data-braintree-v1-fallback-backdrop style=\"' +\n    \"position: fixed;\" +\n    \"cursor: pointer;\" +\n    \"z-index: 999998;\" +\n    \"top: 0;\" +\n    \"left: 0;\" +\n    \"width: 100%;\" +\n    \"height: 100%;\" +\n    '\"></div>' +\n    \"</div>\";\n\n  modal\n    .querySelector(\"[data-braintree-v1-fallback-iframe-container]\")\n    .appendChild(iframe);\n\n  return modal;\n};\n\nBootstrap3ModalFramework.prototype._createCardinalConfigurationOptions =\n  function (setupOptions) {\n    var options =\n      SongbirdFramework.prototype._createCardinalConfigurationOptions.call(\n        this,\n        setupOptions\n      );\n\n    options.payment.framework = \"bootstrap3\";\n\n    return options;\n  };\n\nmodule.exports = Bootstrap3ModalFramework;\n\n},{\"./songbird\":232}],229:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar SongbirdFramework = _dereq_(\"./songbird\");\n\nfunction CardinalModalFramework(options) {\n  SongbirdFramework.call(this, options);\n}\n\nCardinalModalFramework.prototype = Object.create(SongbirdFramework.prototype, {\n  constructor: SongbirdFramework,\n});\n\nCardinalModalFramework.prototype._createV1IframeModalElement = function (\n  iframe\n) {\n  var modal = document.createElement(\"div\");\n  var addCloseButton = Boolean(\n    this._createOptions &&\n    this._createOptions.cardinalSDKConfig &&\n    this._createOptions.cardinalSDKConfig.payment &&\n    this._createOptions.cardinalSDKConfig.payment.displayExitButton\n  );\n\n  modal.innerHTML =\n    '<div style=\"' +\n    \"position: fixed;\" +\n    \"z-index: 999999;\" +\n    \"top: 50%;\" +\n    \"left: 50%;\" +\n    \"padding: 24px 20px;\" +\n    \"transform: translate(-50%,-50%);\" +\n    \"border-radius: 2px;\" +\n    \"background: #fff;\" +\n    \"max-width: 100%;\" +\n    \"overflow: auto;\" +\n    '\">' +\n    \"<div>\" +\n    \"<button data-braintree-v1-fallback-close-button \" +\n    'style=\"' +\n    \"font-family: Helvetica,Arial,sans-serif;\" +\n    \"font-size: 25px;\" +\n    \"line-height: 12px;\" +\n    \"position: absolute;\" +\n    \"top: 2px;\" +\n    \"right: 0px;\" +\n    \"cursor: pointer;\" +\n    \"color: #999;\" +\n    \"border: 0;\" +\n    \"outline: none;\" +\n    \"background: none;\" +\n    '\" ' +\n    \"onMouseOver=\\\"this.style.color='#000'\\\" \" +\n    \"onMouseOut=\\\"this.style.color='#999'\\\"\" +\n    \">\u00D7</button>\" +\n    \"</div>\" +\n    // iframe container\n    '<div data-braintree-v1-fallback-iframe-container style=\"' +\n    \"height: 400px;\" +\n    '\"></div>' +\n    \"</div>\" +\n    // modal backdrop\n    '<div data-braintree-v1-fallback-backdrop style=\"' +\n    \"position: fixed;\" +\n    \"z-index: 999998;\" +\n    \"cursor: pointer;\" +\n    \"top: 0;\" +\n    \"left: 0;\" +\n    \"width: 100%;\" +\n    \"height: 100%;\" +\n    \"transition: opacity 1ms ease;\" +\n    \"background: rgba(0,0,0,.6);\" +\n    '\"></div>';\n\n  if (!addCloseButton) {\n    modal.querySelector(\n      \"[data-braintree-v1-fallback-close-button]\"\n    ).style.display = \"none\";\n  }\n  modal\n    .querySelector(\"[data-braintree-v1-fallback-iframe-container]\")\n    .appendChild(iframe);\n\n  return modal;\n};\n\nmodule.exports = CardinalModalFramework;\n\n},{\"./songbird\":232}],230:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar CardinalModalFramework = _dereq_(\"./cardinal-modal\");\nvar Bootstrap3ModalFramework = _dereq_(\"./bootstrap3-modal\");\nvar InlineIframeFramework = _dereq_(\"./inline-iframe\");\n\nmodule.exports = {\n  \"cardinal-modal\": CardinalModalFramework,\n  \"bootstrap3-modal\": Bootstrap3ModalFramework,\n  \"inline-iframe\": InlineIframeFramework,\n};\n\n},{\"./bootstrap3-modal\":228,\"./cardinal-modal\":229,\"./inline-iframe\":231}],231:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar SongbirdFramework = _dereq_(\"./songbird\");\nvar BraintreeError = _dereq_(\"../../../lib/braintree-error\");\nvar errors = _dereq_(\"../../shared/errors\");\nvar enumerate = _dereq_(\"../../../lib/enumerate\");\n\nfunction InlineIframeFramework(options) {\n  SongbirdFramework.call(this, options);\n}\n\nInlineIframeFramework.prototype = Object.create(SongbirdFramework.prototype, {\n  constructor: SongbirdFramework,\n});\n\nInlineIframeFramework.events = enumerate(\n  [\"AUTHENTICATION_IFRAME_AVAILABLE\"],\n  \"inline-iframe-framework:\"\n);\n\nInlineIframeFramework.prototype.setUpEventListeners = function (reply) {\n  SongbirdFramework.prototype.setUpEventListeners.call(this, reply);\n\n  this.on(\n    InlineIframeFramework.events.AUTHENTICATION_IFRAME_AVAILABLE,\n    function (payload, next) {\n      reply(\"authentication-iframe-available\", payload, next);\n    }\n  );\n};\n\nInlineIframeFramework.prototype._createCardinalConfigurationOptions = function (\n  setupOptions\n) {\n  var options =\n    SongbirdFramework.prototype._createCardinalConfigurationOptions.call(\n      this,\n      setupOptions\n    );\n\n  options.payment.framework = \"inline\";\n\n  return options;\n};\n\nInlineIframeFramework.prototype._addV1IframeToPage = function () {\n  this._emit(\n    InlineIframeFramework.events.AUTHENTICATION_IFRAME_AVAILABLE,\n    {\n      element: this._v1Modal,\n    },\n    function () {\n      // NOOP\n    }\n  );\n};\n\nInlineIframeFramework.prototype._setupFrameworkSpecificListeners = function () {\n  this.setCardinalListener(\"ui.inline.setup\", this._onInlineSetup.bind(this));\n};\n\nInlineIframeFramework.prototype._onInlineSetup = function (\n  htmlTemplate,\n  details,\n  resolve,\n  reject\n) {\n  var container, hasError;\n\n  if (!htmlTemplate || !details) {\n    hasError = true;\n  } else if (details.paymentType !== \"CCA\") {\n    hasError = true;\n  } else if (\n    !(details.data.mode === \"suppress\" || details.data.mode === \"static\")\n  ) {\n    hasError = true;\n  }\n\n  if (hasError) {\n    reject(new BraintreeError(errors.THREEDS_INLINE_IFRAME_DETAILS_INCORRECT));\n\n    return;\n  }\n\n  container = document.createElement(\"div\");\n  container.innerHTML = htmlTemplate;\n\n  if (details.data.mode === \"suppress\") {\n    container.style.display = \"none\";\n    document.body.appendChild(container);\n    resolve();\n  } else if (details.data.mode === \"static\") {\n    this._emit(\n      InlineIframeFramework.events.AUTHENTICATION_IFRAME_AVAILABLE,\n      {\n        element: container,\n      },\n      function () {\n        resolve();\n      }\n    );\n  }\n};\n\nmodule.exports = InlineIframeFramework;\n\n},{\"../../../lib/braintree-error\":149,\"../../../lib/enumerate\":159,\"../../shared/errors\":236,\"./songbird\":232}],232:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar BaseFramework = _dereq_(\"./base\");\nvar assign = _dereq_(\"../../../lib/assign\").assign;\nvar deferred = _dereq_(\"../../../lib/deferred\");\nvar BraintreeError = _dereq_(\"../../../lib/braintree-error\");\nvar convertToBraintreeError = _dereq_(\"../../../lib/convert-to-braintree-error\");\nvar analytics = _dereq_(\"../../../lib/analytics\");\nvar assets = _dereq_(\"../../../lib/assets\");\nvar errors = _dereq_(\"../../shared/errors\");\nvar enumerate = _dereq_(\"../../../lib/enumerate\");\nvar ExtendedPromise = _dereq_(\"@braintree/extended-promise\");\n\nvar INTEGRATION_TIMEOUT_MS =\n  _dereq_(\"../../../lib/constants\").INTEGRATION_TIMEOUT_MS;\nvar PLATFORM = _dereq_(\"../../../lib/constants\").PLATFORM;\nvar VERSION = \"3.145.0\";\nvar CUSTOMER_CANCELED_SONGBIRD_MODAL = \"01\";\nvar SONGBIRD_UI_EVENTS = [\n  \"ui.close\",\n  \"ui.render\",\n\n  // eslint-disable-next-line no-warning-comments\n  // TODO these events are not documented in the\n  // client reference because so far we have\n  // not been able to trigger them in our testing\n  \"ui.renderHidden\",\n  \"ui.loading.close\",\n  \"ui.loading.render\",\n];\n\nvar SCA_EXEMPTION_TYPES = [\"low_value\", \"transaction_risk_analysis\"];\n\nExtendedPromise.suppressUnhandledPromiseMessage = true;\n\nfunction SongbirdFramework(options) {\n  BaseFramework.call(this, options);\n\n  this._songbirdInitFailed = false;\n  this._clientMetadata = {\n    requestedThreeDSecureVersion: \"2\",\n    sdkVersion: PLATFORM + \"/\" + VERSION,\n  };\n  this.originalSetupOptions = options;\n  this._getDfReferenceIdPromisePlus = new ExtendedPromise();\n  this.setupSongbird(options);\n  this._cardinalEvents = [];\n}\n\nSongbirdFramework.prototype = Object.create(BaseFramework.prototype, {\n  constructor: SongbirdFramework,\n});\n\nSongbirdFramework.events = enumerate(\n  [\n    \"LOOKUP_COMPLETE\",\n    \"CUSTOMER_CANCELED\",\n    \"UI.CLOSE\",\n    \"UI.RENDER\",\n    \"UI.RENDERHIDDEN\",\n    \"UI.LOADING.CLOSE\",\n    \"UI.LOADING.RENDER\",\n  ],\n  \"songbird-framework:\"\n);\n\nSongbirdFramework.prototype.setUpEventListeners = function (reply) {\n  this.on(SongbirdFramework.events.LOOKUP_COMPLETE, function (data, next) {\n    reply(\"lookup-complete\", data, next);\n  });\n  this.on(SongbirdFramework.events.CUSTOMER_CANCELED, function () {\n    reply(\"customer-canceled\");\n  });\n  this.on(SongbirdFramework.events[\"UI.CLOSE\"], function () {\n    reply(\"authentication-modal-close\");\n  });\n  this.on(SongbirdFramework.events[\"UI.RENDER\"], function () {\n    reply(\"authentication-modal-render\");\n  });\n  this.on(SongbirdFramework.events[\"UI.RENDERHIDDEN\"], function () {\n    reply(\"authentication-modal-render-hidden\");\n  });\n  this.on(SongbirdFramework.events[\"UI.LOADING.CLOSE\"], function () {\n    reply(\"authentication-modal-loader-close\");\n  });\n  this.on(SongbirdFramework.events[\"UI.LOADING.RENDER\"], function () {\n    reply(\"authentication-modal-loader-render\");\n  });\n};\n\nSongbirdFramework.prototype.prepareLookup = function (options) {\n  var data = assign({}, options);\n  var self = this;\n\n  return this.getDfReferenceId()\n    .then(function (id) {\n      data.dfReferenceId = id;\n    })\n    .then(function () {\n      return self._triggerCardinalBinProcess(options.bin);\n    })\n    .catch(function () {\n      // catch and ignore errors from looking up\n      // df reference and Cardinal bin process\n    })\n    .then(function () {\n      return self._waitForClient();\n    })\n    .then(function () {\n      data.clientMetadata = self._clientMetadata;\n      data.authorizationFingerprint =\n        self._client.getConfiguration().authorizationFingerprint;\n      data.braintreeLibraryVersion = \"braintree/web/\" + VERSION;\n\n      return data;\n    });\n};\n\nSongbirdFramework.prototype.initializeChallengeWithLookupResponse = function (\n  lookupResponse,\n  options\n) {\n  return this.setupSongbird().then(\n    function () {\n      return BaseFramework.prototype.initializeChallengeWithLookupResponse.call(\n        this,\n        lookupResponse,\n        options\n      );\n    }.bind(this)\n  );\n};\n\nSongbirdFramework.prototype.handleSongbirdError = function (errorType) {\n  this._songbirdInitFailed = true;\n  this._removeSongbirdListeners();\n  analytics.sendEvent(\n    this._createPromise,\n    \"three-d-secure.cardinal-sdk.songbird-error.\" + errorType\n  );\n\n  if (this._songbirdPromise) {\n    this._songbirdPromise.resolve();\n  }\n};\n\nSongbirdFramework.prototype._triggerCardinalBinProcess = function (bin) {\n  var self = this;\n  var issuerStartTime = Date.now();\n\n  return window.Cardinal.trigger(\"bin.process\", bin).then(\n    function (binResults) {\n      self._clientMetadata.issuerDeviceDataCollectionTimeElapsed =\n        Date.now() - issuerStartTime;\n      self._clientMetadata.issuerDeviceDataCollectionResult =\n        binResults && binResults.Status;\n    }\n  );\n};\n\nSongbirdFramework.prototype.transformBillingAddress = function (\n  additionalInformation,\n  billingAddress\n) {\n  if (billingAddress) {\n    // map from public API to the API that the Gateway expects\n    extractAddressData(billingAddress, additionalInformation, \"billing\");\n    additionalInformation.billingPhoneNumber = billingAddress.phoneNumber;\n    additionalInformation.billingGivenName = billingAddress.givenName;\n    additionalInformation.billingSurname = billingAddress.surname;\n  }\n\n  return additionalInformation;\n};\n\nSongbirdFramework.prototype.transformShippingAddress = function (\n  additionalInformation\n) {\n  var shippingAddress = additionalInformation.shippingAddress;\n\n  if (shippingAddress) {\n    // map from public API to the API that the Gateway expects\n    extractAddressData(shippingAddress, additionalInformation, \"shipping\");\n\n    delete additionalInformation.shippingAddress;\n  }\n\n  return additionalInformation;\n};\n\nSongbirdFramework.prototype._createV1IframeModalElement = function (iframe) {\n  var modal = document.createElement(\"div\");\n\n  modal.innerHTML =\n    '<div data-braintree-v1-fallback-iframe-container=\"true\" style=\"' +\n    \"height: 400px;\" +\n    '\"></div>';\n  modal\n    .querySelector('[data-braintree-v1-fallback-iframe-container=\"true\"]')\n    .appendChild(iframe);\n\n  return modal;\n};\n\nSongbirdFramework.prototype._createV1IframeModal = function (iframe) {\n  var modal = this._createV1IframeModalElement(iframe);\n  var btn = modal.querySelector(\"[data-braintree-v1-fallback-close-button]\");\n  var backdrop = modal.querySelector(\"[data-braintree-v1-fallback-backdrop]\");\n  var self = this;\n\n  function closeHandler() {\n    modal.parentNode.removeChild(modal);\n    self.cancelVerifyCard(errors.THREEDS_CARDINAL_SDK_CANCELED);\n    document.removeEventListener(\"keyup\", self._onV1Keyup);\n    self._onV1Keyup = null;\n  }\n\n  this._onV1Keyup = function (e) {\n    if (e.key !== \"Escape\") {\n      return;\n    }\n\n    if (!modal.parentNode) {\n      // modal not on page\n      return;\n    }\n\n    closeHandler();\n  };\n\n  if (btn) {\n    btn.addEventListener(\"click\", closeHandler);\n  }\n\n  if (backdrop) {\n    backdrop.addEventListener(\"click\", closeHandler);\n  }\n\n  document.addEventListener(\"keyup\", this._onV1Keyup);\n\n  return modal;\n};\n\nSongbirdFramework.prototype._addV1IframeToPage = function () {\n  document.body.appendChild(this._v1Modal);\n};\n\nSongbirdFramework.prototype.setupSongbird = function (setupOptions) {\n  var self = this;\n  var startTime = Date.now();\n\n  if (this._songbirdPromise) {\n    return this._songbirdPromise;\n  }\n\n  setupOptions = setupOptions || {};\n\n  this._songbirdPromise = new ExtendedPromise();\n  this._v2SetupFailureReason = \"reason-unknown\";\n\n  self\n    ._loadCardinalScript(setupOptions)\n    .then(function () {\n      if (!window.Cardinal) {\n        self._v2SetupFailureReason = \"cardinal-global-unavailable\";\n\n        return Promise.reject(\n          new BraintreeError(errors.THREEDS_CARDINAL_SDK_SETUP_FAILED)\n        );\n      }\n\n      return self._configureCardinalSdk({\n        setupOptions: setupOptions,\n        setupStartTime: startTime,\n      });\n    })\n    .catch(function (err) {\n      var error = convertToBraintreeError(err, {\n        type: errors.THREEDS_CARDINAL_SDK_SETUP_FAILED.type,\n        code: errors.THREEDS_CARDINAL_SDK_SETUP_FAILED.code,\n        message: errors.THREEDS_CARDINAL_SDK_SETUP_FAILED.message,\n      });\n\n      self._getDfReferenceIdPromisePlus.reject(error);\n\n      window.clearTimeout(self._songbirdSetupTimeoutReference);\n      analytics.sendEvent(\n        self._client,\n        \"three-d-secure.cardinal-sdk.init.setup-failed\"\n      );\n      self.handleSongbirdError(\n        \"cardinal-sdk-setup-failed.\" + self._v2SetupFailureReason\n      );\n    });\n\n  return this._songbirdPromise;\n};\n\nSongbirdFramework.prototype._configureCardinalSdk = function (config) {\n  var self = this;\n\n  return this._waitForClient()\n    .then(function () {\n      var threeDSConfig =\n        self._client.getConfiguration().gatewayConfiguration.threeDSecure;\n\n      return threeDSConfig;\n    })\n    .then(function (threeDSConfig) {\n      var jwt = threeDSConfig.cardinalAuthenticationJWT;\n      var setupOptions = config.setupOptions;\n      var setupStartTime = config.setupStartTime;\n      var cardinalConfiguration =\n        self._createCardinalConfigurationOptions(setupOptions);\n\n      SONGBIRD_UI_EVENTS.forEach(function (eventName) {\n        self.setCardinalListener(eventName, function () {\n          self._emit(SongbirdFramework.events[eventName.toUpperCase()]);\n        });\n      });\n      self.setCardinalListener(\n        \"payments.setupComplete\",\n        self._createPaymentsSetupCompleteCallback()\n      );\n\n      self._setupFrameworkSpecificListeners();\n\n      window.Cardinal.configure(cardinalConfiguration);\n\n      window.Cardinal.setup(\"init\", {\n        jwt: jwt,\n      });\n\n      self._clientMetadata.cardinalDeviceDataCollectionTimeElapsed =\n        Date.now() - setupStartTime;\n\n      self.setCardinalListener(\n        \"payments.validated\",\n        self._createPaymentsValidatedCallback()\n      );\n    })\n    .catch(function (err) {\n      self._v2SetupFailureReason = \"cardinal-configuration-threw-error\";\n\n      return Promise.reject(err);\n    });\n};\n\nSongbirdFramework.prototype.setCardinalListener = function (eventName, cb) {\n  this._cardinalEvents.push(eventName);\n  window.Cardinal.on(eventName, cb);\n};\n\nSongbirdFramework.prototype._setupFrameworkSpecificListeners = function () {\n  // noop\n};\n\nSongbirdFramework.prototype._createCardinalConfigurationOptions = function (\n  setupOptions\n) {\n  var cardinalConfiguration = setupOptions.cardinalSDKConfig || {};\n  var paymentSettings = cardinalConfiguration.payment || {};\n\n  if (!cardinalConfiguration.logging && setupOptions.loggingEnabled) {\n    cardinalConfiguration.logging = {\n      level: \"verbose\",\n    };\n  }\n\n  cardinalConfiguration.payment = {};\n\n  if (paymentSettings.hasOwnProperty(\"displayLoading\")) {\n    cardinalConfiguration.payment.displayLoading =\n      paymentSettings.displayLoading;\n  }\n  if (paymentSettings.hasOwnProperty(\"displayExitButton\")) {\n    cardinalConfiguration.payment.displayExitButton =\n      paymentSettings.displayExitButton;\n  }\n\n  return cardinalConfiguration;\n};\n\nSongbirdFramework.prototype._loadCardinalScript = function (setupOptions) {\n  var self = this;\n  var scriptAttrs = {};\n  var identityHash;\n\n  return this._waitForClient()\n    .then(function () {\n      scriptAttrs.src =\n        self._client.getConfiguration().gatewayConfiguration.threeDSecure.cardinalSongbirdUrl;\n\n      identityHash =\n        self._client.getConfiguration().gatewayConfiguration.threeDSecure\n          .cardinalSongbirdIdentityHash;\n\n      if (identityHash) {\n        scriptAttrs.crossorigin = \"anonymous\";\n        scriptAttrs.integrity = identityHash;\n      }\n\n      self._songbirdSetupTimeoutReference = window.setTimeout(function () {\n        analytics.sendEvent(\n          self._client,\n          \"three-d-secure.cardinal-sdk.init.setup-timeout\"\n        );\n        self.handleSongbirdError(\"cardinal-sdk-setup-timeout\");\n      }, setupOptions.timeout || INTEGRATION_TIMEOUT_MS);\n\n      return assets.loadScript(scriptAttrs);\n    })\n    .catch(function (err) {\n      self._v2SetupFailureReason = \"songbird-js-failed-to-load\";\n\n      return Promise.reject(\n        convertToBraintreeError(\n          err,\n          errors.THREEDS_CARDINAL_SDK_SCRIPT_LOAD_FAILED\n        )\n      );\n    });\n};\n\nSongbirdFramework.prototype._createPaymentsSetupCompleteCallback = function () {\n  var self = this;\n\n  return function (data) {\n    self._getDfReferenceIdPromisePlus.resolve(data.sessionId);\n\n    window.clearTimeout(self._songbirdSetupTimeoutReference);\n    analytics.sendEvent(\n      self._createPromise,\n      \"three-d-secure.cardinal-sdk.init.setup-completed\"\n    );\n\n    self._songbirdPromise.resolve();\n  };\n};\n\nSongbirdFramework.prototype.getDfReferenceId = function () {\n  return this._getDfReferenceIdPromisePlus;\n};\n\nSongbirdFramework.prototype._performJWTValidation = function (\n  rawCardinalSDKVerificationData,\n  jwt\n) {\n  var self = this;\n  var nonce = this._lookupPaymentMethod.nonce;\n  var url =\n    \"payment_methods/\" + nonce + \"/three_d_secure/authenticate_from_jwt\";\n  var cancelCode =\n    rawCardinalSDKVerificationData &&\n    rawCardinalSDKVerificationData.Payment &&\n    rawCardinalSDKVerificationData.Payment.ExtendedData &&\n    rawCardinalSDKVerificationData.Payment.ExtendedData.ChallengeCancel;\n\n  if (cancelCode) {\n    // see ChallengeCancel docs here for different values:\n    // https://cardinaldocs.atlassian.net/wiki/spaces/CC/pages/98315/Response+Objects\n    analytics.sendEvent(\n      this._createPromise,\n      \"three-d-secure.verification-flow.cardinal-sdk.cancel-code.\" + cancelCode\n    );\n\n    if (cancelCode === CUSTOMER_CANCELED_SONGBIRD_MODAL) {\n      this._emit(SongbirdFramework.events.CUSTOMER_CANCELED);\n    }\n  }\n\n  analytics.sendEvent(\n    this._createPromise,\n    \"three-d-secure.verification-flow.upgrade-payment-method.started\"\n  );\n\n  return this._waitForClient()\n    .then(function () {\n      return self._client.request({\n        method: \"post\",\n        endpoint: url,\n        data: {\n          jwt: jwt,\n          paymentMethodNonce: nonce,\n        },\n      });\n    })\n    .then(function (response) {\n      var paymentMethod = response.paymentMethod || self._lookupPaymentMethod;\n      var formattedResponse = self._formatAuthResponse(\n        paymentMethod,\n        response.threeDSecureInfo\n      );\n\n      formattedResponse.rawCardinalSDKVerificationData =\n        rawCardinalSDKVerificationData;\n      analytics.sendEvent(\n        self._client,\n        \"three-d-secure.verification-flow.upgrade-payment-method.succeeded\"\n      );\n\n      return Promise.resolve(formattedResponse);\n    })\n    .catch(function (err) {\n      var error = new BraintreeError({\n        type: errors.THREEDS_JWT_AUTHENTICATION_FAILED.type,\n        code: errors.THREEDS_JWT_AUTHENTICATION_FAILED.code,\n        message: errors.THREEDS_JWT_AUTHENTICATION_FAILED.message,\n        details: {\n          originalError: err,\n        },\n      });\n\n      analytics.sendEvent(\n        self._client,\n        \"three-d-secure.verification-flow.upgrade-payment-method.errored\"\n      );\n\n      return Promise.reject(error);\n    });\n};\n\nSongbirdFramework.prototype._createPaymentsValidatedCallback = function () {\n  var self = this;\n\n  /**\n   * @param {object} data Response Data\n   * @see {@link https://cardinaldocs.atlassian.net/wiki/spaces/CC/pages/98315/Response+Objects#ResponseObjects-ObjectDefinition}\n   * @param {string} data.ActionCode The resulting state of the transaction.\n   * @param {boolean} data.Validated Represents whether transaction was successfully or not.\n   * @param {object} data.Payment Represents additional information about the verification.\n   * @param {number} data.ErrorNumber A non-zero value represents the error encountered while attempting the process the message request.\n   * @param {string} data.ErrorDescription Application error description for the associated error number.\n   * @param {string} validatedJwt Response JWT\n   * @returns {void}\n   * */\n  // eslint-disable-next-line complexity\n  return function (data, validatedJwt) {\n    var formattedError;\n\n    analytics.sendEvent(\n      self._createPromise,\n      \"three-d-secure.verification-flow.cardinal-sdk.action-code.\" +\n        data.ActionCode.toLowerCase()\n    );\n\n    if (!self._verifyCardPromisePlus) {\n      self.handleSongbirdError(\n        \"cardinal-sdk-setup-error.number-\" + data.ErrorNumber\n      );\n\n      return;\n    }\n\n    switch (data.ActionCode) {\n      // Handle these scenarios based on liability shift information in the response.\n      case \"SUCCESS\":\n      case \"NOACTION\":\n      case \"FAILURE\":\n        self\n          ._performJWTValidation(data, validatedJwt)\n          .then(function (result) {\n            self._verifyCardPromisePlus.resolve(result);\n          })\n          .catch(function (err) {\n            self._verifyCardPromisePlus.reject(err);\n          });\n        break;\n\n      case \"ERROR\":\n        analytics.sendEvent(\n          self._createPromise,\n          \"three-d-secure.verification-flow.cardinal-sdk-error.\" +\n            data.ErrorNumber\n        );\n\n        switch (data.ErrorNumber) {\n          case 10001: // Cardinal Docs: Timeout when sending an /Init message\n          case 10002: // Cardinal Docs: Timeout when sending an /Start message\n            formattedError = new BraintreeError(\n              errors.THREEDS_CARDINAL_SDK_SETUP_TIMEDOUT\n            );\n            break;\n          case 10003: // Cardinal Docs: Timeout when sending an /Validate message. Although this code exists we do not yet have a flow where a validate message is sent to Midas. This error should not yet be triggered\n          case 10007: // Cardinal Docs: Timeout when sending an /Confirm message\n          case 10009: // Cardinal Docs: Timeout when sending an /Continue message\n            formattedError = new BraintreeError(\n              errors.THREEDS_CARDINAL_SDK_RESPONSE_TIMEDOUT\n            );\n            break;\n          case 10005: // Cardinal Docs: Songbird was started without a request jwt.\n          case 10006: // Cardinal Docs: This is a general configuration error. The description is populated by the specific configuration error that caused the error.\n            formattedError = new BraintreeError(\n              errors.THREEDS_CARDINAL_SDK_BAD_CONFIG\n            );\n            break;\n          case 10008: // Cardinal Docs: Songbird was initialized without a merchant JWT.\n          case 10010: // Cardinal Docs: The response JWT was\n            formattedError = new BraintreeError(\n              errors.THREEDS_CARDINAL_SDK_BAD_JWT\n            );\n            break;\n          case 10011:\n            // This may never get called, according to the Cardinal docs:\n            // The user has canceled the transaction. This is generally found in alternative\n            // payments that supply a cancel button on the payment brand side.\n            analytics.sendEvent(\n              self._createPromise,\n              \"three-d-secure.verification-flow.canceled\"\n            );\n            formattedError = new BraintreeError(\n              errors.THREEDS_CARDINAL_SDK_CANCELED\n            );\n            break;\n          default:\n            formattedError = new BraintreeError(\n              errors.THREEDS_CARDINAL_SDK_ERROR\n            );\n        }\n\n        formattedError.details = {\n          originalError: {\n            code: data.ErrorNumber,\n            description: data.ErrorDescription,\n          },\n        };\n\n        self._verifyCardPromisePlus.reject(formattedError);\n        break;\n\n      default:\n    }\n  };\n};\n\nSongbirdFramework.prototype._checkForVerifyCardError = function (\n  options,\n  privateOptions\n) {\n  if (!options.bin) {\n    return new BraintreeError({\n      type: errors.THREEDS_MISSING_VERIFY_CARD_OPTION.type,\n      code: errors.THREEDS_MISSING_VERIFY_CARD_OPTION.code,\n      message: \"verifyCard options must include a BIN.\",\n    });\n  }\n\n  return BaseFramework.prototype._checkForVerifyCardError.call(\n    this,\n    options,\n    privateOptions\n  );\n};\n\nSongbirdFramework.prototype._checkForFrameworkSpecificVerifyCardErrors =\n  function (options, privateOptions) {\n    var errorOption;\n\n    if (\n      typeof options.onLookupComplete !== \"function\" &&\n      !privateOptions.ignoreOnLookupCompleteRequirement\n    ) {\n      errorOption = \"an onLookupComplete function\";\n    }\n\n    return errorOption;\n  };\n\nSongbirdFramework.prototype._formatVerifyCardOptions = function (options) {\n  var modifiedOptions = BaseFramework.prototype._formatVerifyCardOptions.call(\n    this,\n    options\n  );\n  var additionalInformation = modifiedOptions.additionalInformation || {};\n\n  additionalInformation = this.transformBillingAddress(\n    additionalInformation,\n    options.billingAddress\n  );\n  additionalInformation = this.transformShippingAddress(additionalInformation);\n\n  if (options.onLookupComplete) {\n    modifiedOptions.onLookupComplete = deferred(options.onLookupComplete);\n  }\n  if (options.email) {\n    additionalInformation.email = options.email;\n  }\n  if (options.mobilePhoneNumber) {\n    additionalInformation.mobilePhoneNumber = options.mobilePhoneNumber;\n  }\n\n  modifiedOptions.additionalInformation = additionalInformation;\n\n  return modifiedOptions;\n};\n\nSongbirdFramework.prototype._onLookupComplete = function (\n  lookupResponse,\n  options\n) {\n  var self = this;\n\n  return BaseFramework.prototype._onLookupComplete\n    .call(this, lookupResponse)\n    .then(function (response) {\n      return new Promise(function (resolve, reject) {\n        response.requiresUserAuthentication = Boolean(\n          response.lookup && response.lookup.acsUrl\n        );\n\n        function next() {\n          resolve(response);\n        }\n\n        self._verifyCardPromisePlus.catch(reject);\n\n        // If both event and callback are mistakenly used together,\n        // prefer the callback when it is passed into the verifyCard options\n        if (options.onLookupComplete) {\n          options.onLookupComplete(response, next);\n        } else {\n          self._emit(SongbirdFramework.events.LOOKUP_COMPLETE, response, next);\n        }\n      });\n    });\n};\n\nSongbirdFramework.prototype._presentChallenge = function (lookupResponse) {\n  // transactionId is required for the Songbird flow, so if it\n  // does not exist, we just return\n  if (this._songbirdInitFailed || !lookupResponse.lookup.transactionId) {\n    return;\n  }\n\n  // set up listener for ref id to call out to bt before calling verify callback\n  window.Cardinal.continue(\n    \"cca\",\n    {\n      AcsUrl: lookupResponse.lookup.acsUrl,\n      Payload: lookupResponse.lookup.pareq,\n    },\n    {\n      OrderDetails: { TransactionId: lookupResponse.lookup.transactionId },\n    }\n  );\n};\n\nSongbirdFramework.prototype._formatLookupData = function (options) {\n  var self = this;\n\n  return BaseFramework.prototype._formatLookupData\n    .call(this, options)\n    .then(function (data) {\n      data.additionalInfo = options.additionalInformation;\n\n      if (options.accountType) {\n        data.accountType = options.accountType;\n      }\n      if (options.challengeRequested) {\n        data.challengeRequested = options.challengeRequested;\n      }\n      if (options.requestedExemptionType) {\n        if (!SCA_EXEMPTION_TYPES.includes(options.requestedExemptionType)) {\n          throw new BraintreeError({\n            code: errors.THREEDS_REQUESTED_EXEMPTION_TYPE_INVALID.code,\n            type: errors.THREEDS_REQUESTED_EXEMPTION_TYPE_INVALID.type,\n            message:\n              \"requestedExemptionType `\" +\n              options.requestedExemptionType +\n              \"` is not a valid exemption. The accepted values are: `\" +\n              SCA_EXEMPTION_TYPES.join(\"`, `\") +\n              \"`\",\n          });\n        }\n        data.requestedExemptionType = options.requestedExemptionType;\n      }\n      if (options.customFields) {\n        data.customFields = options.customFields;\n      }\n      if (options.dataOnlyRequested) {\n        data.dataOnlyRequested = options.dataOnlyRequested;\n      }\n      if (options.exemptionRequested) {\n        data.exemptionRequested = options.exemptionRequested;\n      }\n      if (options.requestVisaDAF) {\n        data.requestVisaDAF = options.requestVisaDAF;\n      }\n      if (options.bin) {\n        data.bin = options.bin;\n      }\n      // NEXT_MAJOR_VERSION remove cardAdd in favor of cardAddChallengeRequested\n      if (options.cardAdd != null) {\n        data.cardAdd = options.cardAdd;\n      }\n      if (options.cardAddChallengeRequested != null) {\n        data.cardAdd = options.cardAddChallengeRequested;\n      }\n      if (options.merchantName) {\n        data.merchantName = options.merchantName;\n      }\n      if (options.applySmartAuthentication) {\n        data.applySmartAuthentication = options.applySmartAuthentication;\n      }\n\n      return self.prepareLookup(data);\n    });\n};\n\nSongbirdFramework.prototype.cancelVerifyCard = function (verifyCardError) {\n  var self = this;\n\n  return BaseFramework.prototype.cancelVerifyCard\n    .call(this)\n    .then(function (response) {\n      if (self._verifyCardPromisePlus) {\n        verifyCardError =\n          verifyCardError ||\n          new BraintreeError(errors.THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT);\n\n        self._verifyCardPromisePlus.reject(verifyCardError);\n      }\n\n      return response;\n    });\n};\n\nSongbirdFramework.prototype._removeSongbirdListeners = function () {\n  this._cardinalEvents.forEach(function (eventName) {\n    window.Cardinal.off(eventName);\n  });\n\n  this._cardinalEvents = [];\n};\n\nSongbirdFramework.prototype.teardown = function () {\n  if (window.Cardinal) {\n    this._removeSongbirdListeners();\n  }\n\n  // we intentionally do not remove the Cardinal SDK\n  // from the page when tearing down. Subsequent\n  // component creations will be faster because\n  // the asset is already on the page\n\n  return BaseFramework.prototype.teardown.call(this);\n};\n\nSongbirdFramework.prototype._reloadThreeDSecure = function () {\n  var self = this;\n  var startTime = Date.now();\n\n  return self.teardown().then(function () {\n    self._configureCardinalSdk({\n      setupOptions: self.originalSetupOptions,\n      setupStartTime: startTime,\n    });\n  });\n};\n\nfunction extractAddressData(source, target, prefix) {\n  target[prefix + \"Line1\"] = source.streetAddress;\n  target[prefix + \"Line2\"] = source.extendedAddress;\n  target[prefix + \"Line3\"] = source.line3;\n  target[prefix + \"City\"] = source.locality;\n  target[prefix + \"State\"] = source.region;\n  target[prefix + \"PostalCode\"] = source.postalCode;\n  target[prefix + \"CountryCode\"] = source.countryCodeAlpha2;\n}\n\nmodule.exports = SongbirdFramework;\n\n},{\"../../../lib/analytics\":143,\"../../../lib/assets\":145,\"../../../lib/assign\":146,\"../../../lib/braintree-error\":149,\"../../../lib/constants\":150,\"../../../lib/convert-to-braintree-error\":152,\"../../../lib/deferred\":156,\"../../../lib/enumerate\":159,\"../../shared/errors\":236,\"./base\":227,\"@braintree/extended-promise\":34}],233:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar methods = _dereq_(\"../../lib/methods\");\nvar convertMethodsToError = _dereq_(\"../../lib/convert-methods-to-error\");\nvar EventEmitter = _dereq_(\"@braintree/event-emitter\");\nvar FRAMEWORKS = _dereq_(\"./frameworks\");\n\n/**\n * @deprecated\n * @callback ThreeDSecure~addFrameCallback\n * @param {?BraintreeError} [err] `null` or `undefined` if there was no error.\n * @param {HTMLIFrameElement} iframe An iframe element containing the bank's authentication page that you must put on your page.\n * @description **Deprecated** The callback used for options.addFrame in 3DS 1.0's {@link ThreeDSecure#verifyCard|verifyCard}.\n * @returns {void}\n */\n\n/**\n * @deprecated\n * @callback ThreeDSecure~removeFrameCallback\n * @description **Deprecated** The callback used for options.removeFrame in 3DS 1.0's {@link ThreeDSecure#verifyCard|verifyCard}.\n * @returns {void}\n */\n\n/**\n * @deprecated\n * @typedef {object} ThreeDSecure~verifyCardCustomerObject\n * @property {string} [customer.mobilePhoneNumber] The mobile phone number used for verification. Only numbers; remove dashes, parenthesis and other characters.\n * @property {string} [customer.email] The email used for verification.\n * @property {string} [customer.shippingMethod] The 2-digit string indicating the shipping method chosen for the transaction.\n * @property {string} [customer.billingAddress.firstName] The first name associated with the address.\n * @property {string} [customer.billingAddress.lastName] The last name associated with the address.\n * @property {string} [customer.billingAddress.streetAddress] Line 1 of the Address (eg. number, street, etc).\n * @property {string} [customer.billingAddress.extendedAddress] Line 2 of the Address (eg. suite, apt #, etc.).\n * @property {string} [customer.billingAddress.locality] The locality (city) name associated with the address.\n * @property {string} [customer.billingAddress.region] The 2 letter code for US states or an ISO-3166-2 country subdivision code of up to three letters.\n * @property {string} [customer.billingAddress.postalCode] The zip code or equivalent for countries that have them.\n * @property {string} [customer.billingAddress.countryCodeAlpha2] The 2 character country code.\n * @property {string} [customer.billingAddress.phoneNumber] The phone number associated with the address. Only numbers; remove dashes, parenthesis and other characters.\n * @description **Deprecated** Optional customer information to be passed to 3DS 1.0 for verification.\n */\n\n/**\n * @typedef {object} ThreeDSecure~verifyPayload\n * @property {string} nonce The new payment method nonce produced by the 3D Secure lookup. The original nonce passed into {@link ThreeDSecure#verifyCard|verifyCard} was consumed. This new nonce should be used to transact on your server.\n * @property {string} type The payment method type.\n * @property {object} details Additional account details.\n * @property {string} details.cardType Type of card, ex: Visa, MasterCard.\n * @property {string} details.lastFour Last four digits of card number.\n * @property {string} details.lastTwo Last two digits of card number.\n * @property {string} description A human-readable description.\n * @property {object} binData Information about the card based on the bin.\n * @property {string} binData.commercial Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.countryOfIssuance The country of issuance.\n * @property {string} binData.debit Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.durbinRegulated Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.healthcare Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.issuingBank The issuing bank.\n * @property {string} binData.payroll Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.prepaid Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.productId The product id.\n * @property {string} binData.business Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.consumer Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.purchase Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.corporate Possible values: 'Yes', 'No', 'Unknown'.\n * @property {boolean} liabilityShiftPossible *Deprecated:* Use `threeDSecureInfo.liabilityShiftPossible` instead.\n * @property {boolean} liabilityShifted *Deprecated:* Use `threeDSecureInfo.liabilityShifted` instead.\n * @property {object} threeDSecureInfo 3DS information about the card. Note: This information should be verified on the server by using the [payment method nonce find method](https://developer.paypal.com/braintree/docs/reference/request/payment-method-nonce/find). The values provided here are merely for convenience. Only values looked up on the server should determine the logic about how to process a transaction.\n * @property {string} threeDSecureInfo.acsTransactionId The transaction identifier from the issuing bank.\n * @property {string} threeDSecureInfo.cavv Cardholder authentication verification value or CAVV. The main encrypted message issuers and card networks use to verify authentication has occurred. Mastercard uses an AVV message and American Express uses an AEVV message, each of which should also be passed in the cavv parameter.\n * @property {string} threeDSecureInfo.dsTransactionId Transaction identifier resulting from 3D Secure 2 authentication.\n * @property {string} threeDSecureInfo.eciFlag The value of the electronic commerce indicator (ECI) flag, which indicates the outcome of the 3DS authentication. This will be a two-digit value.\n * @property {string} threeDSecureInfo.enrolled Indicates the status of 3D Secure authentication eligibility with the card issuer.\n * @property {boolean} threeDSecureInfo.liabilityShifted Indicates whether the liability for fraud has been shifted away from the merchant.\n * @property {boolean} threeDSecureInfo.liabilityShiftPossible Indicates whether liability shift is still possible on a retry.\n * @property {string} threeDSecureInfo.paresStatus Transaction status result identifier.\n * @property {string} threeDSecureInfo.status Indicates the outcome of the 3D Secure event.\n * @property {string} threeDSecureInfo.threeDSecureAuthenticationId ID of the 3D Secure authentication performed for this transaction. Do not provide this field as a transaction sale parameter if you are using the returned payment method nonce from the payload.\n * @property {string} threeDSecureInfo.threeDSecureServerTransactionId Transaction identifier provided by the issuing bank who recieved the 3D Secure event.\n * @property {string} threeDSecureInfo.threeDSecureVersion The version of 3D Secure authentication used for the transaction.\n * @property {string} threeDSecureInfo.xid Transaction identifier resulting from 3D Secure authentication. Uniquely identifies the transaction and sometimes required in the authorization message. This is a base64-encoded value. This field will no longer be used in 3D Secure 2 authentications for Visa and Mastercard, however it will be supported by American Express.\n * @property {string} threeDSecureInfo.lookup.transStatus Error code returned from the 3D Secure MPI provider.\n * @property {string} threeDSecureInfo.lookup.transStatusReason Description correlating to the transStatus error code.\n * @property {string} threeDSecureInfo.authentication.transStatus Error code returned from the 3D Secure MPI provider.\n * @property {string} threeDSecureInfo.authentication.transStatusReason Description correlating to the transStatus error code.\n * @property {object} rawCardinalSDKVerificationData The response back from the Cardinal SDK after verification has completed. See [Cardinal's Documentation](https://cardinaldocs.atlassian.net/wiki/spaces/CC/pages/98315/Response+Objects) for more information. If the customer was not required to do a 3D Secure challenge, this object will not be available.\n */\n\n/**\n * @typedef {string} ThreeDSecure~prepareLookupPayload The client data to pass on when doing a server side lookup call.\n */\n\n/**\n * @typedef {object} ThreeDSecure~verificationData\n * @property {boolean} requiresUserAuthentication When `true`, the user will be presented with a 3D Secure challenge when calling `next` in the {@link ThreeDSecure#event:lookup-complete|`lookup-complete` event}.\n * @property {object} threeDSecureInfo Contains liability shift details.\n * @property {boolean} threeDSecureInfo.liabilityShiftPossible Indicates whether the card was eligible for 3D Secure.\n * @property {boolean} threeDSecureInfo.liabilityShifted Indicates whether the liability for fraud has been shifted away from the merchant.\n * @property {object} paymentMethod A {@link ThreeDSecure~verifyPayload|verifyPayload} object.\n * @property {object} lookup Details about the 3D Secure lookup.\n * @property {string} lookup.threeDSecureVersion The version of 3D Secure that will be used for the 3D Secure challenge.\n */\n\n/**\n * @typedef {object} ThreeDSecure~billingAddress\n * @property {string} [givenName] The first name associated with the billing address. (maximum length 50, ASCII characters)\n * @property {string} [surname] The last name associated with the billing address. (maximum length 50, ASCII characters)\n * @property {string} [phoneNumber] The phone number associated with the billing address. Only numbers; remove dashes, parenthesis and other characters.\n * @property {string} [streetAddress] Line 1 of the billing address (eg. number, street, etc). (maximum length 50)\n * @property {string} [extendedAddress] Line 2 of the billing address (eg. suite, apt #, etc.). (maximum length 50)\n * @property {string} [line3] Line 3 of the billing address if needed (eg. suite, apt #, etc). (maximum length 50)\n * @property {string} [locality] The locality (city) name associated with the billing address.\n * @property {string} [region] This field expects an ISO3166-2 subdivision code. The subdivision code is what follows the hyphen separator in the full ISO 3166-2 code. For example, the state of Ohio in the United States we expect \"OH\" as opposed to the full ISO 3166-2 code \"US-OH\".\n * @property {string} [postalCode] The zip code or equivalent for countries that have them.\n * @property {string} [countryCodeAlpha2] The 2 character country code.\n */\n\n/**\n * @typedef {object} ThreeDSecure~additionalInformation\n * @property {string} [workPhoneNumber] The work phone number used for verification. Only numbers; remove dashes, parenthesis and other characters. (maximum length 25)\n * @property {string} [shippingGivenName] The first name associated with the shipping address. (maximum length 50, ASCII characters)\n * @property {string} [shippingSurname] The last name associated with the shipping address. (maximum length 50, ASCII characters)\n * @property {object} [shippingAddress]\n * @property {string} [shippingAddress.streetAddress] Line 1 of the shipping address (eg. number, street, etc). (maximum length 50)\n * @property {string} [shippingAddress.extendedAddress] Line 2 of the shipping address (eg. suite, apt #, etc.). (maximum length 50)\n * @property {string} [shippingAddress.line3] Line 3 of the shipping address if needed (eg. suite, apt #, etc). (maximum length 50)\n * @property {string} [shippingAddress.locality] The locality (city) name associated with the shipping address. (maximum length 50)\n * @property {string} [shippingAddress.region] This field expects an ISO3166-2 subdivision code. The subdivision code is what follows the hyphen separator in the full ISO 3166-2 code. For example, the state of Ohio in the United States we expect \"OH\" as opposed to the full ISO 3166-2 code \"US-OH\".\n * @property {string} [shippingAddress.postalCode] The zip code or equivalent for countries that have them. (maximum length 10)\n * @property {string} [shippingAddress.countryCodeAlpha2] The 2 character country code. (maximum length 2)\n * @property {string} [shippingPhone] The phone number associated with the shipping address. Only numbers; remove dashes, parenthesis and other characters. (maximum length 20)\n * @property {string} [shippingMethod] The 2-digit string indicating the name of the shipping method chosen for the transaction. (maximum length 50) Possible values:\n * - `01` Same Day\n * - `02` Overnight / Expedited\n * - `03` Priority (2-3 Days)\n * - `04` Ground\n * - `05` Electronic Delivery\n * - `06` Ship to Store\n * @property {string} [shippingMethodIndicator] The 2-digit string indicating the shipping method chosen for the transaction Possible values.\n * - `01` Ship to cardholder billing address\n * - `02` Ship to another verified address on file with merchant\n * - `03` Ship to address that is different from billing address\n * - `04` Ship to store (store address should be populated on request)\n * - `05` Digital goods\n * - `06` Travel and event tickets, not shipped\n * - `07` Other\n * @property {string} [productCode] The 3-letter string representing the merchant product code. Possible values:\n * - `AIR` Airline\n * - `GEN` General Retail\n * - `DIG` Digital Goods\n * - `SVC` Services\n * - `RES` Restaurant\n * - `TRA` Travel\n * - `DSP` Cash Dispensing\n * - `REN` Car Rental\n * - `GAS` Fuel\n * - `LUX` Luxury Retail\n * - `ACC` Accommodation Retail\n * - `TBD` Other\n * @property {string} [deliveryTimeframe] The 2-digit number indicating the delivery time frame. Possible values:\n * - `01` Electronic delivery\n * - `02` Same day shipping\n * - `03` Overnight shipping\n * - `04` Two or more day shipping\n * @property {string} [deliveryEmail] For electronic delivery, email address to which the merchandise was delivered. (maximum length 254)\n * @property {string} [reorderindicator] The 2-digit number indicating whether the cardholder is reordering previously purchased merchandise. possible values:\n * - `01` First time ordered\n * - `02` Reordered\n * @property {string} [preorderIndicator] The 2-digit number indicating whether cardholder is placing an order with a future availability or release date. possible values:\n * - `01` Merchandise available\n * - `02` Future availability\n * @property {string} [preorderDate] The 8-digit number (format: YYYYMMDD) indicating expected date that a pre-ordered purchase will be available.\n * @property {string} [giftCardAmount] The purchase amount total for prepaid gift cards in major units. (maximum length 15)\n * @property {string} [giftCardCurrencyCode] ISO 4217 numeric currency code for the gift card purchased. (maximum length 3)\n * @property {string} [giftCardCount] Total count of individual prepaid gift cards purchased. (maximum length 2)\n * @property {string} [accountAgeIndicator] The 2-digit value representing the length of time cardholder has had account. Possible values:\n * - `01` No Account\n * - `02` Created during transaction\n * - `03` Less than 30 days\n * - `04` 30-60 days\n * - `05` More than 60 days\n * @property {string} [accountCreateDate] The 8-digit number (format: YYYYMMDD) indicating the date the cardholder opened the account.\n * @property {string} [accountChangeIndicator] The 2-digit value representing the length of time since the last change to the cardholder account. This includes shipping address, new payment account or new user added. Possible values:\n * - `01` Changed during transaction\n * - `02` Less than 30 days\n * - `03` 30-60 days\n * - `04` More than 60 days\n * @property {string} [accountChangeDate] The 8-digit number (format: YYYYMMDD) indicating the date the cardholder's account was last changed. This includes changes to the billing or shipping address, new payment accounts or new users added.\n * @property {string} [accountPwdChangeIndicator] The 2-digit value representing the length of time since the cardholder changed or reset the password on the account. Possible values:\n * - `01` No change\n * - `02` Changed during transaction\n * - `03` Less than 30 days\n * - `04` 30-60 days\n * - `05` More than 60 days\n * @property {string} [accountPwdChangeDate] The 8-digit number (format: YYYYMMDD) indicating the date the cardholder last changed or reset password on account.\n * @property {string} [shippingAddressUsageIndicator] The 2-digit value indicating when the shipping address used for transaction was first used. Possible values:\n * - `01` This transaction\n * - `02` Less than 30 days\n * - `03` 30-60 days\n * - `04` More than 60 days\n * @property {string} [shippingAddressUsageDate] The 8-digit number (format: YYYYMMDD) indicating the date when the shipping address used for this transaction was first used.\n * @property {string} [transactionCountDay] Number of transactions (successful or abandoned) for this cardholder account within the last 24 hours. (maximum length 3)\n * @property {string} [transactionCountYear] Number of transactions (successful or abandoned) for this cardholder account within the last year. (maximum length 3)\n * @property {string} [addCardAttempts] Number of add card attempts in the last 24 hours. (maximum length 3)\n * @property {string} [accountPurchases] Number of purchases with this cardholder account during the previous six months.\n * @property {string} [fraudActivity] The 2-digit value indicating whether the merchant experienced suspicious activity (including previous fraud) on the account. Possible values:\n * - `01` No suspicious activity\n * - `02` Suspicious activity observed\n * @property {string} [shippingNameIndicator] The 2-digit value indicating if the cardholder name on the account is identical to the shipping name used for the transaction. Possible values:\n * - `01` Account and shipping name identical\n * - `02` Account and shipping name differ\n * @property {string} [paymentAccountIndicator] The 2-digit value indicating the length of time that the payment account was enrolled in the merchant account. Possible values:\n * - `01` No account (guest checkout)\n * - `02` During the transaction\n * - `03` Less than 30 days\n * - `04` 30-60 days\n * - `05` More than 60 days\n * @property {string} [paymentAccountAge] The 8-digit number (format: YYYYMMDD) indicating the date the payment account was added to the cardholder account.\n * @property {string} [acsWindowSize] The 2-digit number to set the challenge window size to display to the end cardholder.  The ACS will reply with content that is formatted appropriately to this window size to allow for the best user experience.  The sizes are width x height in pixels of the window displayed in the cardholder browser window. Possible values:\n * - `01` 250x400\n * - `02` 390x400\n * - `03` 500x600\n * - `04` 600x400\n * - `05` Full page\n * @property {string} [sdkMaxTimeout] The 2-digit number of minutes (minimum 05) to set the maximum amount of time for all 3DS 2.0 messages to be communicated between all components.\n * @property {string} [addressMatch] The 1-character value (Y/N) indicating whether cardholder billing and shipping addresses match.\n * @property {string} [accountId] Additional cardholder account information. (maximum length 64)\n * @property {string} [ipAddress] The IP address of the consumer. IPv4 and IPv6 are supported.\n * - only one IP address supported\n * - only numbers, letters, period '.' chars, or colons ':' are acceptable\n * @property {string} [orderDescription] Brief description of items purchased. (maximum length 256)\n * @property {string} [taxAmount] Unformatted tax amount without any decimalization (ie. $123.67 = 12367). (maximum length 20)\n * @property {string} [userAgent] The exact content of the HTTP user agent header. (maximum length 500)\n * @property {string} [authenticationIndicator] The 2-digit number indicating the type of authentication request. Possible values:\n *  - `01` Payment\n *  - `02` Recurring transaction\n *  - `03` Installment\n *  - `04` Add card\n *  - `05` Maintain card\n *  - `06` Cardholder verification as part of EMV token ID&V\n *  - `08` Split Shipment\n *  - `09` Delayed Shipment\n *  - `85` Payment with multiple merchants\n * @property {string} [installment] An integer value greater than 1 indicating the maximum number of permitted authorizations for installment payments. (maximum length 3)\n * @property {string} [purchaseDate] The 14-digit number (format: YYYYMMDDHHMMSS) indicating the date in UTC of original purchase.\n * @property {string} [recurringEnd] The 8-digit number (format: YYYYMMDD) indicating the date after which no further recurring authorizations should be performed.\n * @property {string} [recurringFrequency] Integer value indicating the minimum number of days between recurring authorizations. A frequency of monthly is indicated by the value 28. Multiple of 28 days will be used to indicate months (ex. 6 months = 168). (maximum length 3)\n */\n\n/**\n * @name ThreeDSecure#on\n * @function\n * @param {string} event The name of the event to which you are subscribing.\n * @param {function} handler A callback to handle the event.\n * @description Subscribes a handler function to a named event. The following events are available:\n *   * {@link ThreeDSecure#event:lookup-complete|lookup-complete}\n *   * {@link ThreeDSecure#event:customer-canceled|customer-canceled}\n *   * {@link ThreeDSecure#event:authentication-iframe-available|authentication-iframe-available}\n *   * {@link ThreeDSecure#event:authentication-modal-render|authentication-modal-render}\n *   * {@link ThreeDSecure#event:authentication-modal-close|authentication-modal-close}\n * @example\n * <caption>Listening to a 3D Secure event</caption>\n * braintree.threeDSecure.create({ ... }, function (createErr, threeDSecureInstance) {\n *   threeDSecureInstance.on('lookup-complete', function (data, next) {\n *     console.log('data from the lookup', data);\n *     next();\n *   });\n *   threeDSecureInstance.on('customer-canceled', function () {\n *     console.log('log that the customer canceled');\n *   });\n * });\n * @returns {void}\n */\n\n/**\n * @name ThreeDSecure#off\n * @function\n * @param {string} event The name of the event to which you are unsubscribing.\n * @param {function} handler The callback for the event you are unsubscribing from.\n * @description Unsubscribes the handler function to a named event.\n * @example\n * <caption>Subscribing and then unsubscribing from a 3D Secure eld event</caption>\n * braintree.threeDSecure.create({ ... }, function (createErr, threeDSecureInstance) {\n *   var lookupCallback = function (data, next) {\n *     console.log(data);\n *     next();\n *   };\n *   var cancelCallback = function () {\n *     // log the cancelation\n *     // or update UI\n *   };\n *\n *   threeDSecureInstance.on('lookup-complete', lookupCallback);\n *   threeDSecureInstance.on('customer-canceled', cancelCallback);\n *\n *   // later on\n *   threeDSecureInstance.off('lookup-complete', lookupCallback);\n *   threeDSecureInstance.off('customer-canceled', cancelCallback);\n * });\n * @returns {void}\n */\n\n/**\n * This event is emitted when the `2-inline-iframe` version is specified when creating the 3D Secure instance and the authentication iframe becomes available.\n * @event ThreeDSecure#authentication-iframe-available\n * @example\n * <caption>Listening for the authentication iframe to be available</caption>\n *   threeDSecureInstance.on('authentication-iframe-available', function (event, next) {\n *     document.body.appendChild(event.element); // add iframe element to page\n *\n *     next(); // let the SDK know the iframe is ready\n *   });\n * });\n */\n\n/**\n * This event is emitted when using the 3D Secure 2.0 flow and the initial lookup request completes. If this is not used, a `onLookupComplete` callback must be passed into the `verifyCard` method.\n * @event ThreeDSecure#lookup-complete\n * @example\n * <caption>Listening for when the lookup request is complete</caption>\n * braintree.threeDSecure.create({\n *   client: clientInstance,\n *   version: '2'\n * }, function (createErr, threeDSecureInstance) {\n *   threeDSecureInstance.on('lookup-complete', function (data, next) {\n *     // inspect the data\n *\n *     // call next when ready to proceed with the challenge\n *     next();\n *   });\n * });\n */\n\n/**\n * This event is emitted when using the 3D Secure 2.0 flow and the customer cancels the 3D Secure challenge.\n * @event ThreeDSecure#customer-canceled\n * @example\n * <caption>Listening for when the customer cancels the 3D Secure challenge</caption>\n * braintree.threeDSecure.create({\n *   client: clientInstance,\n *   version: '2'\n * }, function (createErr, threeDSecureInstance) {\n *   threeDSecureInstance.on('customer-canceled', function () {\n *     // the customer canceled the 3D Secure challenge\n *   });\n * });\n */\n\n/**\n * This event is emitted when using the 3D Secure 2.0 flow and the authentication modal closes, either because the authentication was completed or because the customer canceled the process.\n * @event ThreeDSecure#authentication-modal-close\n * @example\n * braintree.threeDSecure.create({\n *   client: clientInstance,\n *   version: '2'\n * }, function (createErr, threeDSecureInstance) {\n *   threeDSecureInstance.on('authentication-modal-close', function () {\n *     // the modal was closed\n *   });\n * });\n */\n\n/**\n * This event is emitted when using the 3D Secure 2.0 flow and the authentication modal is rendered.\n * @event ThreeDSecure#authentication-modal-render\n * @example\n * braintree.threeDSecure.create({\n *   client: clientInstance,\n *   version: '2'\n * }, function (createErr, threeDSecureInstance) {\n *   threeDSecureInstance.on('authentication-modal-render', function () {\n *     // the modal was rendered, presenting the authentication form to the customer\n *   });\n * });\n */\n\n/**\n * @class\n * @param {object} options 3D Secure {@link module:braintree-web/three-d-secure.create create} options\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/three-d-secure.create|braintree.threeDSecure.create} instead.</strong>\n * @classdesc This class represents a ThreeDSecure component produced by {@link module:braintree-web/three-d-secure.create|braintree.threeDSecure.create}. Instances of this class have a method for launching a 3D Secure authentication flow.\n *\n * If you use the Braintree SDK from within an iframe, you must not use the `sandbox` attribute on your iframe or the 3D Secure modal will not function correctly.\n *\n * **Note**: 3D Secure 2.0 is documented below and will become the default integration method in a future version of Braintree-web. Until then, version 1.0 will continue to be supported. To view 3D Secure 1.0 documentation, look at Braintree-web documentation from version [3.40.0](https://braintree.github.io/braintree-web/3.40.0/ThreeDSecure.html) and earlier, or upgrade your integration by referring to the [3D Secure 2.0 adoption guide](https://developer.paypal.com/braintree/docs/guides/3d-secure/migration/javascript/v3).\n */\nfunction ThreeDSecure(options) {\n  var self = this;\n  var Framework = FRAMEWORKS[options.framework];\n\n  EventEmitter.call(this);\n\n  this._framework = new Framework(options);\n  this._framework.setUpEventListeners(function () {\n    self._emit.apply(self, arguments);\n  });\n}\n\nEventEmitter.createChild(ThreeDSecure);\n// NEXT_MAJOR_VERSION remove exemptionRequested entirely in favor of `requestedExemptionType`\n/**\n * Launch the 3D Secure login flow, returning a nonce payload.\n *\n * @public\n * @param {object} options Options for card verification.\n * @param {string} options.nonce The nonce representing the card from a tokenization payload. For example, this can be a {@link HostedFields~tokenizePayload|tokenizePayload} returned by Hosted Fields under `payload.nonce`.\n * @param {string} options.bin The numeric Bank Identification Number (bin) of the card from a tokenization payload. For example, this can be a {@link HostedFields~tokenizePayload|tokenizePayload} returned by Hosted Fields under `payload.details.bin`.\n * @param {string} options.amount The amount of the transaction in the current merchant account's currency. This must be expressed in numbers with an optional decimal (using `.`) and precision up to the hundredths place. For example, if you're processing a transaction for 1.234,56 \u20AC then `amount` should be `1234.56`.\n * @param {string} [options.accountType] The account type for the card (if known). Accepted values: `credit` or `debit`.\n * @param {boolean} [options.cardAddChallengeRequested] If set to `true`, a card-add challenge will be requested from the issuer. If set to `false`, a card-add challenge will not be requested. If the param is missing, a card-add challenge will only be requested for $0 amount. An authentication created using this flag should only be used for vaulting operations (creation of customers' credit cards or payment methods) and not for creating transactions.\n * @param {boolean} [options.cardAdd] *Deprecated:* Use `cardAddChallengeRequested` instead.\n * @param {boolean} [options.challengeRequested] If set to true, an authentication challenge will be forced if possible.\n * @param {boolean} [options.dataOnlyRequested] Indicates whether to use the data-only 3DS flow. If data-only is not supported by the processor, card brand or the transaction is in a PSD2 regulated region, it will fallback to a normal 3DS flow.\n * @param {boolean} [options.exemptionRequested] *Deprecated:* Use `requestedExemptionType` instead.\n * @param {boolean} [options.requestVisaDAF] Request to use VISA Digital Authentication Framework. If set to true, a Visa DAF authenticated payment credential will be created and/or used for authentication if the merchant is eligible.\n * @param {string} [options.merchantName] Allows to override the merchant name that is shown in the challenge.\n * @param {string} [options.requestedExemptionType] If an exemption is requested and the exemption's conditions are satisfied, then it will be applied. The following supported exemptions are defined as per PSD2 regulation: `low_value`, `transaction_risk_analysis`\n * @param {boolean} [options.applySmartAuthentication] If set to `true`, an AI-driven decision will be made to determine the authentication strategy which will try to balance fraud protection with a frictionless user experience. These strategies include requesting a challenge, data-only, exemptions, etc.\n * @param {object} [options.customFields] Object where each key is the name of a custom field which has been configured in the Control Panel. In the Control Panel you can configure 3D Secure Rules which trigger on certain values.\n * @param {function} [options.onLookupComplete] Function to execute when lookup completes. The first argument, `data`, is a {@link ThreeDSecure~verificationData|verificationData} object, and the second argument, `next`, is a callback. `next` must be called to continue.\n * @param {string} [options.email] The email used for verification. (maximum length 255)\n * @param {string} [options.mobilePhoneNumber] The mobile phone number used for verification. Only numbers; remove dashes, parenthesis and other characters. (maximum length 25)\n * @param {object} [options.billingAddress] An {@link ThreeDSecure~billingAddress|billingAddress} object for verification.\n * @param {object} [options.additionalInformation] An {@link ThreeDSecure~additionalInformation|additionalInformation} object for verification.\n * @param {object} [options.collectDeviceData] If set to `true`, device data such as browser screen dimensions, language and time zone is submitted with lookup data.\n * @param {object} [options.customer] **Deprecated** Customer information for use in 3DS 1.0 verifications. Can contain any subset of a {@link ThreeDSecure~verifyCardCustomerObject|verifyCardCustomerObject}. Only to be used for 3DS 1.0 integrations.\n * @param {callback} options.addFrame **Deprecated** This {@link ThreeDSecure~addFrameCallback|addFrameCallback} will be called when the bank frame needs to be added to your page. Only to be used for 3DS 1.0 integrations.\n * @param {callback} options.removeFrame **Deprecated** For use in 3DS 1.0 Flows. This {@link ThreeDSecure~removeFrameCallback|removeFrameCallback} will be called when the bank frame needs to be removed from your page. Only to be used in 3DS 1.0 integrations.\n * @param {callback} [callback] The second argument, <code>data</code>, is a {@link ThreeDSecure~verifyPayload|verifyPayload}. If no callback is provided, it will return a promise that resolves {@link ThreeDSecure~verifyPayload|verifyPayload}.\n\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * <caption>Verifying a payment method nonce with 3DS 2.0</caption>\n * var my3DSContainer;\n *\n * threeDSecure.verifyCard({\n *   amount: '123.45',\n *   nonce: hostedFieldsTokenizationPayload.nonce,\n *   bin: hostedFieldsTokenizationPayload.details.bin,\n *   email: 'test@example.com',\n *   billingAddress: {\n *     givenName: 'Jill',\n *     surname: 'Doe',\n *     phoneNumber: '8101234567',\n *     streetAddress: '555 Smith St.',\n *     extendedAddress: '#5',\n *     locality: 'Oakland',\n *     region: 'CA',\n *     postalCode: '12345',\n *     countryCodeAlpha2: 'US'\n *   },\n *   additionalInformation: {\n *     workPhoneNumber: '5555555555',\n *     shippingGivenName: 'Jill',\n *     shippingSurname: 'Doe',\n *     shippingAddress: {\n *       streetAddress: '555 Smith st',\n *       extendedAddress: '#5',\n *       locality: 'Oakland',\n *       region: 'CA',\n *       postalCode: '12345',\n *       countryCodeAlpha2: 'US'\n *     },\n *     shippingPhone: '8101234567'\n *   },\n *   onLookupComplete: function (data, next) {\n *     // use `data` here, then call `next()`\n *     next();\n *   }\n * }, function (err, payload) {\n *   if (err) {\n *     console.error(err);\n *     return;\n *   }\n *\n *   if (payload.liabilityShifted) {\n *     // Liability has shifted\n *     submitNonceToServer(payload.nonce);\n *   } else if (payload.liabilityShiftPossible) {\n *     // Liability may still be shifted\n *     // Decide if you want to submit the nonce\n *   } else {\n *     // Liability has not shifted and will not shift\n *     // Decide if you want to submit the nonce\n *   }\n * });\n * @example\n * <caption>Handling 3DS lookup errors</caption>\n * var my3DSContainer;\n *\n * // set up listener after initialization\n * threeDSecure.on(('lookup-complete', function (data, next) {\n *   // use `data` here, then call `next()`\n *   next();\n * });\n *\n * // call verifyCard after tokenizing a card\n * threeDSecure.verifyCard({\n *   amount: '123.45',\n *   nonce: hostedFieldsTokenizationPayload.nonce,\n *   bin: hostedFieldsTokenizationPayload.details.bin,\n *   email: 'test@example.com',\n *   billingAddress: billingAddressFromCustomer,\n *   additionalInformation: additionalInfoFromCustomer\n * }, function (err, payload) {\n *   if (err) {\n *     if (err.code.indexOf('THREEDS_LOOKUP') === 0) {\n *       // an error occurred during the initial lookup request\n *\n *       if (err.code === 'THREEDS_LOOKUP_TOKENIZED_CARD_NOT_FOUND_ERROR') {\n *         // either the passed payment method nonce does not exist\n *         // or it was already consumed before the lookup call was made\n *       } else if (err.code.indexOf('THREEDS_LOOKUP_VALIDATION') === 0) {\n *         // a validation error occurred\n *         // likely some non-ascii characters were included in the billing\n *         // address given name or surname fields, or the cardholdername field\n *\n *         // Instruct your user to check their data and try again\n *       } else {\n *         // an unknown lookup error occurred\n *       }\n *     } else {\n *       // some other kind of error\n *     }\n *     return;\n *   }\n *\n *   // handle success\n * });\n */\nThreeDSecure.prototype.verifyCard = function (options) {\n  var privateOptions;\n\n  if (this.hasListener(\"lookup-complete\")) {\n    privateOptions = {\n      ignoreOnLookupCompleteRequirement: true,\n    };\n  }\n\n  return this._framework.verifyCard(options, privateOptions);\n};\n\n/**\n * Launch the iframe challenge using a 3D Secure lookup response from a server side lookup.\n *\n * @public\n * @param {(object|string)} lookupResponse The lookup response from the server side call to lookup the 3D Secure information. The raw string or a parsed object can be passed.\n * @returns {Promise} Returns a promise.\n * @example\n * var my3DSContainer;\n *\n * threeDSecure.initializeChallengeWithLookupResponse(lookupResponseFromServer).then(function (payload) {\n *   if (payload.liabilityShifted) {\n *     // Liability has shifted\n *     submitNonceToServer(payload.nonce);\n *   } else if (payload.liabilityShiftPossible) {\n *     // Liability may still be shifted\n *     // Decide if you want to submit the nonce\n *   } else {\n *     // Liability has not shifted and will not shift\n *     // Decide if you want to submit the nonce\n *   }\n * });\n */\nThreeDSecure.prototype.initializeChallengeWithLookupResponse = function (\n  lookupResponse\n) {\n  if (typeof lookupResponse === \"string\") {\n    lookupResponse = JSON.parse(lookupResponse);\n  }\n\n  return this._framework.initializeChallengeWithLookupResponse(lookupResponse);\n};\n\n/**\n * Gather the data needed for a 3D Secure lookup call.\n *\n * @public\n * @param {object} options Options for 3D Secure lookup.\n * @param {string} options.nonce The nonce representing the card from a tokenization payload. For example, this can be a {@link HostedFields~tokenizePayload|tokenizePayload} returned by Hosted Fields under `payload.nonce`.\n * @param {string} options.bin The numeric Bank Identification Number (bin) of the card from a tokenization payload. For example, this can be a {@link HostedFields~tokenizePayload|tokenizePayload} returned by Hosted Fields under `payload.details.bin`.\n * @param {callback} [callback] The second argument, <code>data</code>, is a {@link ThreeDSecure~prepareLookupPayload|prepareLookupPayload}. If no callback is provided, it will return a promise that resolves {@link ThreeDSecure~prepareLookupPayload|prepareLookupPayload}.\n\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * <caption>Preparing data for a 3D Secure lookup</caption>\n * threeDSecure.prepareLookup({\n *   nonce: hostedFieldsTokenizationPayload.nonce,\n *   bin: hostedFieldsTokenizationPayload.details.bin\n * }, function (err, payload) {\n *   if (err) {\n *     console.error(err);\n *     return;\n *   }\n *\n *   // send payload to server to do server side lookup\n * });\n */\nThreeDSecure.prototype.prepareLookup = function (options) {\n  return this._framework.prepareLookup(options).then(function (data) {\n    return JSON.stringify(data);\n  });\n};\n\n/**\n * Cancel the 3DS flow and return the verification payload if available. If using 3D Secure version 2, this will not close the UI of the authentication modal. It is recommended that this method only be used in the {@link ThreeDSecure#event:lookup-complete|`lookup-complete`} event or the `onLookupComplete` callback.\n * @public\n * @param {callback} [callback] The second argument is a {@link ThreeDSecure~verifyPayload|verifyPayload}. If there is no verifyPayload (the initial lookup did not complete), an error will be returned. If no callback is passed, `cancelVerifyCard` will return a promise.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example <caption>Cancel the verification in `lookup-complete` event</caption>\n * // set up listener after instantiation\n * threeDSecure.on('lookup-complete', function (data, next) {\n *   // determine if you want to call next to start the challenge,\n *   // if not, call cancelVerifyCard\n *   threeDSecure.cancelVerifyCard(function (err, verifyPayload) {\n *     if (err) {\n *       // Handle error\n *       console.log(err.message); // No verification payload available\n *       return;\n *     }\n *\n *     verifyPayload.nonce; // The nonce returned from the 3ds lookup call\n *     verifyPayload.liabilityShifted; // boolean\n *     verifyPayload.liabilityShiftPossible; // boolean\n *   });\n * });\n *\n * // after tokenizing a credit card\n * threeDSecure.verifyCard({\n *   amount: '100.00',\n *   nonce: nonceFromTokenizationPayload,\n *   bin: binFromTokenizationPayload\n *   // other fields such as billing address\n * }, function (verifyError, payload) {\n *   if (verifyError) {\n *     if (verifyError.code === 'THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT ') {\n *       // flow was canceled by merchant, 3ds info can be found in the payload\n *       // for cancelVerifyCard\n *     }\n *   }\n * });\n * @example <caption>Cancel the verification in onLookupComplete callback</caption>\n * threeDSecure.verifyCard({\n *   amount: '100.00',\n *   nonce: nonceFromTokenizationPayload,\n *   bin: binFromTokenizationPayload,\n *   // other fields such as billing address\n *   onLookupComplete: function (data, next) {\n *     // determine if you want to call next to start the challenge,\n *     // if not, call cancelVerifyCard\n *     threeDSecure.cancelVerifyCard(function (err, verifyPayload) {\n *       if (err) {\n *         // Handle error\n *         console.log(err.message); // No verification payload available\n *         return;\n *       }\n *\n *       verifyPayload.nonce; // The nonce returned from the 3ds lookup call\n *       verifyPayload.liabilityShifted; // boolean\n *       verifyPayload.liabilityShiftPossible; // boolean\n *     });\n *   }\n * }, function (verifyError, payload) {\n *   if (verifyError) {\n *     if (verifyError.code === 'THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT ') {\n *       // flow was canceled by merchant, 3ds info can be found in the payload\n *       // for cancelVerifyCard\n *     }\n *   }\n * });\n * @example <caption>Cancel the verification in 3D Secure version 1</caption>\n * // unlike with v2, this will not cause `verifyCard` to error, it will simply\n * // never call the callback\n * threeDSecure.cancelVerifyCard(function (err, verifyPayload) {\n *   if (err) {\n *     // Handle error\n *     console.log(err.message); // No verification payload available\n *     return;\n *   }\n *\n *   verifyPayload.nonce; // The nonce returned from the 3ds lookup call\n *   verifyPayload.liabilityShifted; // boolean\n *   verifyPayload.liabilityShiftPossible; // boolean\n * });\n */\nThreeDSecure.prototype.cancelVerifyCard = function () {\n  return this._framework.cancelVerifyCard();\n};\n\n/**\n * Cleanly remove anything set up by {@link module:braintree-web/three-d-secure.create|create}, with the exception that the Cardinal SDK, on window.Cardinal, will remain.\n * @public\n * @param {callback} [callback] Called on completion. If no callback is passed, `teardown` will return a promise.\n * @example\n * threeDSecure.teardown();\n * @example <caption>With callback</caption>\n * threeDSecure.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nThreeDSecure.prototype.teardown = function () {\n  var methodNames = methods(ThreeDSecure.prototype).concat(\n    methods(EventEmitter.prototype)\n  );\n\n  convertMethodsToError(this, methodNames);\n\n  return this._framework.teardown();\n};\n\nmodule.exports = wrapPromise.wrapPrototype(ThreeDSecure);\n\n},{\"../../lib/convert-methods-to-error\":151,\"../../lib/methods\":182,\"./frameworks\":230,\"@braintree/event-emitter\":33,\"@braintree/wrap-promise\":43}],234:[function(_dereq_,module,exports){\n\"use strict\";\n/** @module braintree-web/three-d-secure */\n\nvar ThreeDSecure = _dereq_(\"./external/three-d-secure\");\nvar isHTTPS = _dereq_(\"../lib/is-https\").isHTTPS;\nvar basicComponentVerification = _dereq_(\"../lib/basic-component-verification\");\nvar createDeferredClient = _dereq_(\"../lib/create-deferred-client\");\nvar createAssetsUrl = _dereq_(\"../lib/create-assets-url\");\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar analytics = _dereq_(\"../lib/analytics\");\nvar errors = _dereq_(\"./shared/errors\");\nvar VERSION = \"3.145.0\";\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {object} [options.cardinalSDKConfig] A config for the underlying Cardinal SDK.\n * @param {object} [options.cardinalSDKConfig.logging] The logging configuration for the Cardinal SDK. See [Cardinal's documentation for the logging object](https://cardinaldocs.atlassian.net/wiki/spaces/CC/pages/1409568/Configurations#Configurations-Logging) for more information.\n * @param {number} [options.cardinalSDKConfig.timeout] The time in milliseconds to wait before a request to Cardinal's API times out. See [Cardinal's documentation for root level configuration](https://cardinaldocs.atlassian.net/wiki/spaces/CC/pages/1409568/Configurations#Configurations-RootLevelConfiguration) for more information.\n * @param {number} [options.cardinalSDKConfig.maxRequestRetries] How many times a request should be re-attempted to Cardinal's API before giving up as a failure. See [Cardinal's documentation for root level configuration](https://cardinaldocs.atlassian.net/wiki/spaces/CC/pages/1409568/Configurations#Configurations-RootLevelConfiguration) for more information.\n * @param {object} [options.cardinalSDKConfig.payment] An object to describe how you want the user interactions to behave. Only a subset of the [Cardinal SDK payment configuration object](https://cardinaldocs.atlassian.net/wiki/spaces/CC/pages/1409568/Configurations#Configurations-Payment) are supported: `displayLoading` and `displayExitButton`.\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {(number|string)} [options.version=1] The version of 3D Secure to use. Possible options:\n * * 2 - A 3D Secure v2.0 integration that uses a modal to host the 3D Secure iframe.\n * * 2-bootstrap3-modal - A 3D Secure v2.0 integration that uses a modal styled with Bootstrap 3 styles to host the 3D Secure iframe. Requires having the Bootstrap 3 script files and stylesheets on your page.\n * * 2-inline-iframe - A 3D Secure v2.0 integration that provides the authentication iframe directly to the merchant.\n * @param {callback} [callback] The second argument, `data`, is the {@link ThreeDSecure} instance. If no callback is provided, it returns a promise that resolves the {@link ThreeDSecure} instance.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n@example\n * <caption>Creating a v2 3D Secure component using 2 version (Cardinal modal)</caption>\n * braintree.threeDSecure.create({\n *   client: clientInstance,\n *   version: '2'\n * }, function (createError, threeDSecure) {\n *   // set up lookup-complete listener\n *   threeDSecure.on('lookup-complete', function (data, next) {\n *     // check lookup data\n *\n *     next();\n *   });\n *\n *   // using Hosted Fields, use `tokenize` to get back a credit card nonce\n *\n *   threeDSecure.verifyCard({\n *     nonce: nonceFromTokenizationPayload,,\n *     bin: binFromTokenizationPayload,\n *     amount: '100.00'\n *   }, function (verifyError, payload) {\n *     // inspect payload\n *     // send payload.nonce to your server\n *   });\n * });\n * @example\n * <caption>Creating a v2 3D Secure component using 2-bootstrap3-modal version</caption>\n * // must have the boostrap js, css and jquery files on your page\n * braintree.threeDSecure.create({\n *   client: clientInstance,\n *   version: '2-bootstrap3-modal'\n * }, function (createError, threeDSecure) {\n *   // set up lookup-complete listener\n *   threeDSecure.on('lookup-complete', function (data, next) {\n *     // check lookup data\n *\n *     next();\n *   });\n *\n *   // using Hosted Fields, use `tokenize` to get back a credit card nonce\n *\n *   // challenge will be presented in a bootstrap 3 modal\n *   threeDSecure.verifyCard({\n *     nonce: nonceFromTokenizationPayload,\n *     bin: binFromTokenizationPayload,\n *     amount: '100.00'\n *   }, function (verifyError, payload) {\n *     // inspect payload\n *     // send payload.nonce to your server\n *   });\n * });\n * @example\n * <caption>Creating a v2 3D Secure component using 2-inline-iframe version</caption>\n * braintree.threeDSecure.create({\n *   client: clientInstance,\n *   version: '2-inline-iframe'\n * }, function (createError, threeDSecure) {\n *   // set up lookup-complete listener\n *   threeDSecure.on('lookup-complete', function (data, next) {\n *     // check lookup data\n *\n *     next();\n *   });\n *   // set up iframe listener\n *   threeDSecure.on('authentication-iframe-available', function (event, next) {\n *     var element = event.element; // an html element that contains the iframe\n *\n *     document.body.appendChild(element); // put it on your page\n *\n *     next(); // let the sdk know the element has been added to the page\n *   });\n *\n *   // using Hosted Fields, use `tokenize` to get back a credit card nonce\n *\n *   threeDSecure.verifyCard({\n *     nonce: nonceFromTokenizationPayload,,\n *     bin: binFromTokenizationPayload,\n *     amount: '100.00'\n *   }, function (verifyError, payload) {\n *     // inspect payload\n *     // send payload.nonce to your server\n *   });\n * });\n */\nfunction create(options) {\n  var name = \"3D Secure\";\n  var framework = getFramework(options);\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      var assetsUrl = createAssetsUrl.create(options.authorization);\n      var createPromise = createDeferredClient\n        .create({\n          authorization: options.authorization,\n          client: options.client,\n          debug: options.debug,\n          assetsUrl: assetsUrl,\n          name: name,\n        })\n        .then(function (client) {\n          var error, isProduction;\n          var config = client.getConfiguration();\n          var gwConfig = config.gatewayConfiguration;\n\n          options.client = client;\n\n          if (!gwConfig.threeDSecureEnabled) {\n            error = errors.THREEDS_NOT_ENABLED;\n          }\n\n          if (config.authorizationType === \"TOKENIZATION_KEY\") {\n            error = errors.THREEDS_CAN_NOT_USE_TOKENIZATION_KEY;\n          }\n\n          isProduction = gwConfig.environment === \"production\";\n\n          if (isProduction && !isHTTPS()) {\n            error = errors.THREEDS_HTTPS_REQUIRED;\n          }\n\n          if (\n            !(\n              gwConfig.threeDSecure &&\n              gwConfig.threeDSecure.cardinalAuthenticationJWT\n            )\n          ) {\n            analytics.sendEvent(\n              options.client,\n              \"three-d-secure.initialization.failed.missing-cardinalAuthenticationJWT\"\n            );\n            error = errors.THREEDS_NOT_ENABLED_FOR_V2;\n          }\n\n          if (error) {\n            return Promise.reject(new BraintreeError(error));\n          }\n\n          analytics.sendEvent(options.client, \"three-d-secure.initialized\");\n\n          return client;\n        });\n      var instance = new ThreeDSecure({\n        client: options.client,\n        assetsUrl: assetsUrl,\n        createPromise: createPromise,\n        loggingEnabled: options.loggingEnabled,\n        cardinalSDKConfig: options.cardinalSDKConfig,\n        framework: framework,\n      });\n\n      if (options.client) {\n        return createPromise.then(function () {\n          return instance;\n        });\n      }\n\n      return instance;\n    });\n}\n\nfunction getFramework(options) {\n  var version = String(options.version || \"\");\n\n  if (!version || version === \"1\") {\n    throw new BraintreeError({\n      code: errors.THREEDS_UNSUPPORTED_VERSION.code,\n      type: errors.THREEDS_UNSUPPORTED_VERSION.type,\n      message: errors.THREEDS_UNSUPPORTED_VERSION.message,\n    });\n  }\n\n  switch (version) {\n    case \"2\":\n    case \"2-cardinal-modal\":\n      return \"cardinal-modal\";\n    case \"2-bootstrap3-modal\":\n      return \"bootstrap3-modal\";\n    case \"2-inline-iframe\":\n      return \"inline-iframe\";\n    default:\n      throw new BraintreeError({\n        code: errors.THREEDS_UNRECOGNIZED_VERSION.code,\n        type: errors.THREEDS_UNRECOGNIZED_VERSION.type,\n        message:\n          \"Version `\" +\n          options.version +\n          \"` is not a recognized version. You may need to update the version of your Braintree SDK to support this version.\",\n      });\n  }\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `{@pkg version}`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/analytics\":143,\"../lib/basic-component-verification\":147,\"../lib/braintree-error\":149,\"../lib/create-assets-url\":153,\"../lib/create-deferred-client\":155,\"../lib/is-https\":179,\"./external/three-d-secure\":233,\"./shared/errors\":236,\"@braintree/wrap-promise\":43}],235:[function(_dereq_,module,exports){\n\"use strict\";\n\nmodule.exports = {\n  LANDING_FRAME_NAME: \"braintreethreedsecurelanding\",\n};\n\n},{}],236:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.3D Secure - Creation Error Codes\n * @description Errors that occur when [creating the 3D Secure component](./module-braintree-web_three-d-secure.html#.create).\n * @property {MERCHANT} THREEDS_NOT_ENABLED Occurs when 3D Secure is not enabled in the Braintree control panel.\n * @property {MERCHANT} THREEDS_CAN_NOT_USE_TOKENIZATION_KEY Occurs when 3D Secure component is created without a Client Token.\n * @property {MERCHANT} THREEDS_HTTPS_REQUIRED Occurs when 3D Secure component is created in production over HTTPS.\n * @property {MERCHANT} THREEDS_NOT_ENABLED_FOR_V2 Occurs when 3D Secure component is created with version 2 parameter, but merchant is not enabled to use version 2.\n * @property {MERCHANT} THREEDS_UNRECOGNIZED_VERSION Occurs when unrecognized version enum is passed into the create call.\n * @property {UNKNOWN} THREEDS_CARDINAL_SDK_SETUP_FAILED Occurs when Cardinal's Songbird.js library fails to setup for an unknown reason.\n * @property {NETWORK} THREEDS_CARDINAL_SDK_SCRIPT_LOAD_FAILED Occurs when using version 2 and Cardinal's Songbird.js script could not be loaded.\n * @property {UNKNOWN} THREEDS_CARDINAL_SDK_SETUP_TIMEDOUT Occurs when Cardinal's Songbird.js library takes longer than 60 seconds to set up.\n * @property {UNKNOWN} THREEDS_CARDINAL_SDK_RESPONSE_TIMEDOUT Occurs when Cardinal sends a response indicating a timeout on /Validate, /Confirm, or /Continue.\n * @property {MERCHANT} THREEDS_CARDINAL_SDK_BAD_CONFIG Occurs when there is no JWT in the request. Also when there's some other malformed aspect of config.\n * @property {MERCHANT} THREEDS_CARDINAL_SDK_BAD_JWT Occurs when a malformed config causes a either a missing response JWT or a malformed Cardinal response.\n * @property {UNKNOWN} THREEDS_CARDINAL_SDK_ERROR Occurs when a \"general error\" or a Cardinal hosted fields error happens. Description contains more details.\n * @property {CUSTOMER} THREEDS_CARDINAL_SDK_CANCELED Occurs when customer cancels the transaction mid-flow, usually with alt-pays that have their own cancel buttons.\n * @property {MERCHANT} THREEDS_UNSUPPORTED_VERSION Occurs when 3D Secure component is created with version 1 (or default version) parameter.\n */\n\n/**\n * @name BraintreeError.3D Secure - verifyCard Error Codes\n * @description Errors that occur when using the [`verifyCard` method](./ThreeDSecure.html#verifyCard).\n * @property {MERCHANT} THREEDS_AUTHENTICATION_IN_PROGRESS Occurs when another verification is already in progress.\n * @property {MERCHANT} THREEDS_MISSING_VERIFY_CARD_OPTION Occurs when a required option is missing.\n * @property {UNKNOWN} THREEDS_JWT_AUTHENTICATION_FAILED Occurs when something went wrong authenticating the JWT from the Cardinal SDK.\n * @property {MERCHANT} THREEDS_LOOKUP_TOKENIZED_CARD_NOT_FOUND_ERROR Occurs when the supplied payment method nonce does not exist or the payment method nonce has already been consumed.\n * @property {CUSTOMER} THREEDS_LOOKUP_VALIDATION_ERROR Occurs when a validation error occurs during the 3D Secure lookup.\n * @property {UNKNOWN} THREEDS_LOOKUP_ERROR An unknown error occurred while attempting the 3D Secure lookup.\n * @property {MERCHANT} THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT Occurs when the 3D Secure flow is canceled by the merchant using `cancelVerifyCard` (3D Secure v2 flows only).\n * @property {UNKNOWN} THREEDS_INLINE_IFRAME_DETAILS_INCORRECT An unknown error occurred while attempting to use the inline iframe framework.\n * @property {MERCHANT} THREEDS_REQUESTED_EXEMPTION_TYPE_INVALID Occurs when unrecognized exemption enum value is passed into verifyCard.\n */\n\n/**\n * @name BraintreeError.3D Secure - cancelVerifyCard Error Codes\n * @description Errors that occur when using the [`cancelVerifyCard` method](./ThreeDSecure.html#cancelVerifyCard).\n * @property {MERCHANT} THREEDS_NO_VERIFICATION_PAYLOAD Occurs when the 3D Secure flow is canceled, but there is no 3D Secure information available.\n */\n\n/**\n * @name BraintreeError.3D Secure - Internal Error Codes\n * @ignore\n * @description Errors that occur internally\n * @property {INTERNAL} THREEDS_TERM_URL_REQUIRES_BRAINTREE_DOMAIN Occurs when iframe is initialized on a non-verified domain.\n * @property {INTERNAL} THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED Occurs when a 3D Secure framework method is not implemented.\n */\n\nvar BraintreeError = _dereq_(\"../../lib/braintree-error\");\n\nmodule.exports = {\n  THREEDS_NOT_ENABLED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_NOT_ENABLED\",\n    message: \"3D Secure is not enabled for this merchant.\",\n  },\n  THREEDS_CAN_NOT_USE_TOKENIZATION_KEY: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_CAN_NOT_USE_TOKENIZATION_KEY\",\n    message: \"3D Secure can not use a tokenization key for authorization.\",\n  },\n  THREEDS_HTTPS_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_HTTPS_REQUIRED\",\n    message: \"3D Secure requires HTTPS.\",\n  },\n  THREEDS_NOT_ENABLED_FOR_V2: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_NOT_ENABLED_FOR_V2\",\n    message:\n      \"3D Secure version 2 is not enabled for this merchant. Contact Braintree Support for assistance at https://help.braintreepayments.com/\",\n  },\n  THREEDS_UNRECOGNIZED_VERSION: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_UNRECOGNIZED_VERSION\",\n  },\n  THREEDS_CARDINAL_SDK_SETUP_FAILED: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"THREEDS_CARDINAL_SDK_SETUP_FAILED\",\n    message: \"Something went wrong setting up Cardinal's Songbird.js library.\",\n  },\n  THREEDS_CARDINAL_SDK_SCRIPT_LOAD_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"THREEDS_CARDINAL_SDK_SCRIPT_LOAD_FAILED\",\n    message: \"Cardinal's Songbird.js library could not be loaded.\",\n  },\n  THREEDS_CARDINAL_SDK_SETUP_TIMEDOUT: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"THREEDS_CARDINAL_SDK_SETUP_TIMEDOUT\",\n    message: \"Cardinal's Songbird.js took too long to setup.\",\n  },\n  THREEDS_CARDINAL_SDK_RESPONSE_TIMEDOUT: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"THREEDS_CARDINAL_SDK_RESPONSE_TIMEDOUT\",\n    message: \"Cardinal's API took too long to respond.\",\n  },\n  THREEDS_CARDINAL_SDK_BAD_CONFIG: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_CARDINAL_SDK_BAD_CONFIG\",\n    message:\n      \"JWT or other required field missing. Please check your setup configuration.\",\n  },\n  THREEDS_CARDINAL_SDK_BAD_JWT: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_CARDINAL_SDK_BAD_JWT\",\n    message:\n      \"Cardinal JWT missing or malformed. Please check your setup configuration.\",\n  },\n  THREEDS_CARDINAL_SDK_ERROR: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"THREEDS_CARDINAL_SDK_ERROR\",\n    message:\n      \"A general error has occurred with Cardinal. See description for more information.\",\n  },\n  THREEDS_CARDINAL_SDK_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"THREEDS_CARDINAL_SDK_CANCELED\",\n    message: \"Canceled by user.\",\n  },\n  THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT\",\n    message: \"3D Secure verfication canceled by merchant.\",\n  },\n  THREEDS_AUTHENTICATION_IN_PROGRESS: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_AUTHENTICATION_IN_PROGRESS\",\n    message:\n      \"Cannot call verifyCard while existing authentication is in progress.\",\n  },\n  THREEDS_MISSING_VERIFY_CARD_OPTION: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_MISSING_VERIFY_CARD_OPTION\",\n  },\n  THREEDS_JWT_AUTHENTICATION_FAILED: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"THREEDS_JWT_AUTHENTICATION_FAILED\",\n    message: \"Something went wrong authenticating the JWT from Cardinal\",\n  },\n  THREEDS_LOOKUP_TOKENIZED_CARD_NOT_FOUND_ERROR: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_LOOKUP_TOKENIZED_CARD_NOT_FOUND_ERROR\",\n    message:\n      \"Either the payment method nonce passed to `verifyCard` does not exist, or it was already consumed\",\n  },\n  THREEDS_LOOKUP_VALIDATION_ERROR: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"THREEDS_LOOKUP_VALIDATION_ERROR\",\n    message:\n      \"The data passed in `verifyCard` did not pass validation checks. See details for more info\",\n  },\n  THREEDS_LOOKUP_ERROR: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"THREEDS_LOOKUP_ERROR\",\n    message: \"Something went wrong during the 3D Secure lookup\",\n  },\n  THREEDS_INLINE_IFRAME_DETAILS_INCORRECT: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"THREEDS_INLINE_IFRAME_DETAILS_INCORRECT\",\n    message:\n      \"Something went wrong when attempting to add the authentication iframe to the page.\",\n  },\n  THREEDS_NO_VERIFICATION_PAYLOAD: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_NO_VERIFICATION_PAYLOAD\",\n    message: \"No verification payload available.\",\n  },\n  THREEDS_TERM_URL_REQUIRES_BRAINTREE_DOMAIN: {\n    type: BraintreeError.types.INTERNAL,\n    code: \"THREEDS_TERM_URL_REQUIRES_BRAINTREE_DOMAIN\",\n    message: \"Term Url must be on a Braintree domain.\",\n  },\n  THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED: {\n    type: BraintreeError.types.INTERNAL,\n    code: \"THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED\",\n    message: \"Method not implemented for this framework.\",\n  },\n  THREEDS_REQUESTED_EXEMPTION_TYPE_INVALID: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_REQUESTED_EXEMPTION_TYPE_INVALID\",\n    message: \"Requested Exemption Type is invalid.\",\n  },\n  THREEDS_UNSUPPORTED_VERSION: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_UNSUPPORTED_VERSION\",\n    message:\n      \"3D Secure `1` is deprecated and no longer supported. See available versions at https://braintree.github.io/braintree-web/current/module-braintree-web_three-d-secure.html#.create\",\n  },\n};\n\n},{\"../../lib/braintree-error\":149}],237:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar enumerate = _dereq_(\"../../lib/enumerate\");\n\nmodule.exports = enumerate([\"AUTHENTICATION_COMPLETE\"], \"threedsecure:\");\n\n},{\"../../lib/enumerate\":159}],238:[function(_dereq_,module,exports){\n\"use strict\";\n/**\n * @module braintree-web/unionpay\n * @description This module allows you to accept UnionPay payments. *It is currently in beta and is subject to change.*\n */\n\nvar UnionPay = _dereq_(\"./shared/unionpay\");\nvar basicComponentVerification = _dereq_(\"../lib/basic-component-verification\");\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar createDeferredClient = _dereq_(\"../lib/create-deferred-client\");\nvar createAssetsUrl = _dereq_(\"../lib/create-assets-url\");\nvar analytics = _dereq_(\"../lib/analytics\");\nvar errors = _dereq_(\"./shared/errors\");\nvar VERSION = \"3.145.0\";\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {callback} [callback] The second argument, `data`, is the {@link UnionPay} instance. If no callback is provided, `create` returns a promise that resolves with the {@link UnionPay} instance.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * braintree.unionpay.create({ client: clientInstance }, function (createErr, unionpayInstance) {\n *   if (createErr) {\n *     console.error(createErr);\n *     return;\n *   }\n *   // ...\n * });\n */\nfunction create(options) {\n  var name = \"UnionPay\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      return createDeferredClient.create({\n        authorization: options.authorization,\n        client: options.client,\n        debug: options.debug,\n        assetsUrl: createAssetsUrl.create(options.authorization),\n        name: name,\n      });\n    })\n    .then(function (client) {\n      var config = client.getConfiguration();\n\n      options.client = client;\n\n      if (\n        !config.gatewayConfiguration.unionPay ||\n        config.gatewayConfiguration.unionPay.enabled !== true\n      ) {\n        return Promise.reject(new BraintreeError(errors.UNIONPAY_NOT_ENABLED));\n      }\n\n      analytics.sendEvent(options.client, \"unionpay.initialized\");\n\n      return new UnionPay(options);\n    });\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `{@pkg version}`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/analytics\":143,\"../lib/basic-component-verification\":147,\"../lib/braintree-error\":149,\"../lib/create-assets-url\":153,\"../lib/create-deferred-client\":155,\"./shared/errors\":240,\"./shared/unionpay\":241,\"@braintree/wrap-promise\":43}],239:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar enumerate = _dereq_(\"../../lib/enumerate\");\n\nmodule.exports = {\n  events: enumerate(\n    [\n      \"HOSTED_FIELDS_FETCH_CAPABILITIES\",\n      \"HOSTED_FIELDS_ENROLL\",\n      \"HOSTED_FIELDS_TOKENIZE\",\n    ],\n    \"union-pay:\"\n  ),\n  HOSTED_FIELDS_FRAME_NAME: \"braintreeunionpayhostedfields\",\n};\n\n},{\"../../lib/enumerate\":159}],240:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Union Pay - Creation Error Codes\n * @description Errors that occur when [creating the Union Pay component](./module-braintree-web_union-pay.html#.create).\n * @property {MERCHANT} UNIONPAY_NOT_ENABLED Occurs when Union Pay is not enabled on the Braintree control panel.\n */\n\n/**\n * @name BraintreeError.Union Pay - Shared Error Codes\n * @description Errors that occur when starting the Union Pay Flow\n * @property {MERCHANT} UNIONPAY_CARD_AND_HOSTED_FIELDS_INSTANCES Occurs when a method is used with both card details and a Hosted Fields instance.\n * @property {MERCHANT} UNIONPAY_HOSTED_FIELDS_INSTANCE_INVALID Occurs when Hosted Fields instance used is not a valid Hosted Fields instance.\n * @property {MERCHANT} UNIONPAY_CARD_OR_HOSTED_FIELDS_INSTANCE_REQUIRED Occurs when neither card details or Hosted Fields are used.\n * @property {MERCHANT} UNIONPAY_HOSTED_FIELDS_INSTANCE_REQUIRED Occurs when Hosted Fields cannot be found on the page.\n */\n\n/**\n * @name BraintreeError.Union Pay - fetchCapabilities Error Codes\n * @description Errors that occur when using the [`fetchCapabilities` method](./UnionPay.html#fetchCapabilities).\n * @property {NETWORK} UNIONPAY_FETCH_CAPABILITIES_NETWORK_ERROR Occurs when there is an error looking up the Union Pay capabilities.\n */\n\n/**\n * @name BraintreeError.Union Pay - enroll Error Codes\n * @description Errors that occur when using the [`enroll` method](./UnionPay.html#enroll).\n * @property {MERCHANT} UNIONPAY_MISSING_MOBILE_PHONE_DATA Occurs when no mobile phone data is provided.\n * @property {MERCHANT} UNIONPAY_EXPIRATION_DATE_INCOMPLETE Occurs when expiration date is incomplete.\n * @property {CUSTOMER} UNIONPAY_ENROLLMENT_CUSTOMER_INPUT_INVALID Occurs when customer enrollment input is invalid.\n * @property {NETWORK} UNIONPAY_ENROLLMENT_NETWORK_ERROR Occurs when there is an error during enrollment.\n */\n\n/**\n * @name BraintreeError.Union Pay - tokenize Error Codes\n * @description Errors that occur when using the [`tokenize` method](./UnionPay.html#tokenize).\n * @property {CUSTOMER} UNIONPAY_FAILED_TOKENIZATION Occurs when data cannot be tokenized.\n * @property {NETWORK} UNIONPAY_TOKENIZATION_NETWORK_ERROR Occurs when the Braintree gateway cannot be reached.\n */\n\nvar BraintreeError = _dereq_(\"../../lib/braintree-error\");\n\nmodule.exports = {\n  UNIONPAY_NOT_ENABLED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"UNIONPAY_NOT_ENABLED\",\n    message: \"UnionPay is not enabled for this merchant.\",\n  },\n  UNIONPAY_HOSTED_FIELDS_INSTANCE_INVALID: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"UNIONPAY_HOSTED_FIELDS_INSTANCE_INVALID\",\n    message:\n      \"Found an invalid Hosted Fields instance. Please use a valid Hosted Fields instance.\",\n  },\n  UNIONPAY_HOSTED_FIELDS_INSTANCE_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"UNIONPAY_HOSTED_FIELDS_INSTANCE_REQUIRED\",\n    message: \"Could not find the Hosted Fields instance.\",\n  },\n  UNIONPAY_CARD_OR_HOSTED_FIELDS_INSTANCE_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"UNIONPAY_CARD_OR_HOSTED_FIELDS_INSTANCE_REQUIRED\",\n    message:\n      \"A card or a Hosted Fields instance is required. Please supply a card or a Hosted Fields instance.\",\n  },\n  UNIONPAY_CARD_AND_HOSTED_FIELDS_INSTANCES: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"UNIONPAY_CARD_AND_HOSTED_FIELDS_INSTANCES\",\n    message:\n      \"Please supply either a card or a Hosted Fields instance, not both.\",\n  },\n  UNIONPAY_EXPIRATION_DATE_INCOMPLETE: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"UNIONPAY_EXPIRATION_DATE_INCOMPLETE\",\n    message: \"You must supply expiration month and year or neither.\",\n  },\n  UNIONPAY_ENROLLMENT_CUSTOMER_INPUT_INVALID: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"UNIONPAY_ENROLLMENT_CUSTOMER_INPUT_INVALID\",\n    message: \"Enrollment failed due to user input error.\",\n  },\n  UNIONPAY_ENROLLMENT_NETWORK_ERROR: {\n    type: BraintreeError.types.NETWORK,\n    code: \"UNIONPAY_ENROLLMENT_NETWORK_ERROR\",\n    message: \"Could not enroll UnionPay card.\",\n  },\n  UNIONPAY_FETCH_CAPABILITIES_NETWORK_ERROR: {\n    type: BraintreeError.types.NETWORK,\n    code: \"UNIONPAY_FETCH_CAPABILITIES_NETWORK_ERROR\",\n    message: \"Could not fetch card capabilities.\",\n  },\n  UNIONPAY_TOKENIZATION_NETWORK_ERROR: {\n    type: BraintreeError.types.NETWORK,\n    code: \"UNIONPAY_TOKENIZATION_NETWORK_ERROR\",\n    message: \"A tokenization network error occurred.\",\n  },\n  UNIONPAY_MISSING_MOBILE_PHONE_DATA: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"UNIONPAY_MISSING_MOBILE_PHONE_DATA\",\n    message: \"A `mobile` with `countryCode` and `number` is required.\",\n  },\n  UNIONPAY_FAILED_TOKENIZATION: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"UNIONPAY_FAILED_TOKENIZATION\",\n    message: \"The supplied card data failed tokenization.\",\n  },\n};\n\n},{\"../../lib/braintree-error\":149}],241:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar analytics = _dereq_(\"../../lib/analytics\");\nvar BraintreeError = _dereq_(\"../../lib/braintree-error\");\nvar Bus = _dereq_(\"framebus\");\nvar constants = _dereq_(\"./constants\");\nvar isVerifiedDomain = _dereq_(\"../../lib/is-verified-domain\");\nvar useMin = _dereq_(\"../../lib/use-min\");\nvar convertMethodsToError = _dereq_(\"../../lib/convert-methods-to-error\");\nvar errors = _dereq_(\"./errors\");\nvar events = constants.events;\nvar iFramer = _dereq_(\"@braintree/iframer\");\nvar methods = _dereq_(\"../../lib/methods\");\nvar VERSION = \"3.145.0\";\nvar uuid = _dereq_(\"@braintree/uuid\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar BUS_CONFIGURATION_REQUEST_EVENT =\n  _dereq_(\"../../lib/constants\").BUS_CONFIGURATION_REQUEST_EVENT;\n\n/**\n * @class\n * @param {object} options See {@link module:braintree-web/unionpay.create|unionpay.create}.\n * @description <strong>You cannot use this constructor directly. Use {@link module:braintree-web/unionpay.create|braintree-web.unionpay.create} instead.</strong>\n * @classdesc This class represents a UnionPay component. Instances of this class have methods for {@link UnionPay#fetchCapabilities fetching capabilities} of UnionPay cards, {@link UnionPay#enroll enrolling} a UnionPay card, and {@link UnionPay#tokenize tokenizing} a UnionPay card.\n */\nfunction UnionPay(options) {\n  this._options = options;\n}\n\n/**\n * @typedef {object} UnionPay~fetchCapabilitiesPayload\n * @property {boolean} isUnionPay Determines if this card is a UnionPay card.\n * @property {boolean} isDebit Determines if this card is a debit card. This property is only present if `isUnionPay` is `true`.\n * @property {object} unionPay UnionPay specific properties. This property is only present if `isUnionPay` is `true`.\n * @property {boolean} unionPay.supportsTwoStepAuthAndCapture Determines if the card allows for an authorization, but settling the transaction later.\n * @property {boolean} unionPay.isSupported Determines if Braintree can process this UnionPay card. When false, Braintree cannot process this card and the user should use a different card.\n */\n\n/**\n * Fetches the capabilities of a card, including whether or not the SMS enrollment process is required.\n * @public\n * @param {object} options UnionPay {@link UnionPay#fetchCapabilities fetchCapabilities} options\n * @param {object} [options.card] The card from which to fetch capabilities. Note that this will only have one property, `number`. Required if you are not using the `hostedFields` option.\n * @param {string} options.card.number Card number.\n * @param {HostedFields} [options.hostedFields] The Hosted Fields instance used to collect card data. Required if you are not using the `card` option.\n * @param {callback} [callback] The second argument, <code>data</code>, is a {@link UnionPay#fetchCapabilitiesPayload fetchCapabilitiesPayload}. If no callback is provided, `fetchCapabilities` returns a promise that resolves with a {@link UnionPay#fetchCapabilitiesPayload fetchCapabilitiesPayload}.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nUnionPay.prototype.fetchCapabilities = function (options) {\n  var self = this;\n  var client = this._options.client;\n  var cardNumber = options.card ? options.card.number : null;\n  var hostedFields = options.hostedFields;\n\n  if (cardNumber && hostedFields) {\n    return Promise.reject(\n      new BraintreeError(errors.UNIONPAY_CARD_AND_HOSTED_FIELDS_INSTANCES)\n    );\n  }\n  if (cardNumber) {\n    return client\n      .request({\n        method: \"get\",\n        endpoint: \"payment_methods/credit_cards/capabilities\",\n        data: {\n          _meta: { source: \"unionpay\" },\n          creditCard: {\n            number: cardNumber,\n          },\n        },\n      })\n      .then(function (response) {\n        analytics.sendEvent(client, \"unionpay.capabilities-received\");\n\n        return response;\n      })\n      .catch(function (err) {\n        var status = err.details && err.details.httpStatus;\n\n        analytics.sendEvent(client, \"unionpay.capabilities-failed\");\n\n        if (status === 403) {\n          return Promise.reject(err);\n        }\n\n        return Promise.reject(\n          new BraintreeError({\n            type: errors.UNIONPAY_FETCH_CAPABILITIES_NETWORK_ERROR.type,\n            code: errors.UNIONPAY_FETCH_CAPABILITIES_NETWORK_ERROR.code,\n            message: errors.UNIONPAY_FETCH_CAPABILITIES_NETWORK_ERROR.message,\n            details: {\n              originalError: err,\n            },\n          })\n        );\n      });\n  }\n  if (hostedFields) {\n    if (!hostedFields._bus) {\n      return Promise.reject(\n        new BraintreeError(errors.UNIONPAY_HOSTED_FIELDS_INSTANCE_INVALID)\n      );\n    }\n\n    return self._initializeHostedFields().then(function () {\n      return new Promise(function (resolve, reject) {\n        self._bus.emit(\n          events.HOSTED_FIELDS_FETCH_CAPABILITIES,\n          { hostedFields: hostedFields },\n          function (response) {\n            if (response.err) {\n              reject(new BraintreeError(response.err));\n\n              return;\n            }\n\n            resolve(response.payload);\n          }\n        );\n      });\n    });\n  }\n\n  return Promise.reject(\n    new BraintreeError(errors.UNIONPAY_CARD_OR_HOSTED_FIELDS_INSTANCE_REQUIRED)\n  );\n};\n\n/**\n * @typedef {object} UnionPay~enrollPayload\n * @property {string} enrollmentId UnionPay enrollment ID. This value should be passed to `tokenize`.\n * @property {boolean} smsCodeRequired UnionPay `smsCodeRequired` flag.\n * </p><b>true</b> - the user will receive an SMS code that needs to be supplied for tokenization.\n * </p><b>false</b> - the card can be immediately tokenized.\n */\n\n/**\n * Enrolls a UnionPay card. Use {@link UnionPay#fetchCapabilities|fetchCapabilities} to determine if the SMS enrollment process is required.\n * @public\n * @param {object} options UnionPay enrollment options:\n * @param {object} [options.card] The card to enroll. Required if you are not using the `hostedFields` option.\n * @param {string} options.card.number The card number.\n * @param {string} [options.card.expirationDate] The card's expiration date. May be in the form `MM/YY` or `MM/YYYY`. When defined `expirationMonth` and `expirationYear` are ignored.\n * @param {string} [options.card.expirationMonth] The card's expiration month. This should be used with the `expirationYear` parameter. When `expirationDate` is defined this parameter is ignored.\n * @param {string} [options.card.expirationYear] The card's expiration year. This should be used with the `expirationMonth` parameter. When `expirationDate` is defined this parameter is ignored.\n * @param {HostedFields} [options.hostedFields] The Hosted Fields instance used to collect card data. Required if you are not using the `card` option.\n * @param {object} options.mobile The mobile information collected from the customer.\n * @param {string} options.mobile.countryCode The country code of the customer's mobile phone number.\n * @param {string} options.mobile.number The customer's mobile phone number.\n * @param {callback} [callback] The second argument, <code>data</code>, is a {@link UnionPay~enrollPayload|enrollPayload}. If no callback is provided, `enroll` returns a promise that resolves with {@link UnionPay~enrollPayload|enrollPayload}.\n * @returns {void}\n */\nUnionPay.prototype.enroll = function (options) {\n  var self = this;\n  var client = this._options.client;\n  var card = options.card;\n  var mobile = options.mobile;\n  var hostedFields = options.hostedFields;\n  var data;\n\n  if (!mobile) {\n    return Promise.reject(\n      new BraintreeError(errors.UNIONPAY_MISSING_MOBILE_PHONE_DATA)\n    );\n  }\n\n  if (hostedFields) {\n    if (!hostedFields._bus) {\n      return Promise.reject(\n        new BraintreeError(errors.UNIONPAY_HOSTED_FIELDS_INSTANCE_INVALID)\n      );\n    }\n    if (card) {\n      return Promise.reject(\n        new BraintreeError(errors.UNIONPAY_CARD_AND_HOSTED_FIELDS_INSTANCES)\n      );\n    }\n\n    return new Promise(function (resolve, reject) {\n      self._initializeHostedFields().then(function () {\n        self._bus.emit(\n          events.HOSTED_FIELDS_ENROLL,\n          { hostedFields: hostedFields, mobile: mobile },\n          function (response) {\n            if (response.err) {\n              reject(new BraintreeError(response.err));\n\n              return;\n            }\n\n            resolve(response.payload);\n          }\n        );\n      });\n    });\n  }\n  if (card && card.number) {\n    data = {\n      _meta: { source: \"unionpay\" },\n      unionPayEnrollment: {\n        number: card.number,\n        mobileCountryCode: mobile.countryCode,\n        mobileNumber: mobile.number,\n      },\n    };\n\n    if (card.expirationDate) {\n      data.unionPayEnrollment.expirationDate = card.expirationDate;\n    } else if (card.expirationMonth || card.expirationYear) {\n      if (card.expirationMonth && card.expirationYear) {\n        data.unionPayEnrollment.expirationYear = card.expirationYear;\n        data.unionPayEnrollment.expirationMonth = card.expirationMonth;\n      } else {\n        return Promise.reject(\n          new BraintreeError(errors.UNIONPAY_EXPIRATION_DATE_INCOMPLETE)\n        );\n      }\n    }\n\n    return client\n      .request({\n        method: \"post\",\n        endpoint: \"union_pay_enrollments\",\n        data: data,\n      })\n      .then(function (response) {\n        analytics.sendEvent(client, \"unionpay.enrollment-succeeded\");\n\n        return {\n          enrollmentId: response.unionPayEnrollmentId,\n          smsCodeRequired: response.smsCodeRequired,\n        };\n      })\n      .catch(function (err) {\n        var error;\n        var status = err.details && err.details.httpStatus;\n\n        if (status === 403) {\n          error = err;\n        } else if (status < 500) {\n          error = new BraintreeError(\n            errors.UNIONPAY_ENROLLMENT_CUSTOMER_INPUT_INVALID\n          );\n          error.details = { originalError: err };\n        } else {\n          error = new BraintreeError(errors.UNIONPAY_ENROLLMENT_NETWORK_ERROR);\n          error.details = { originalError: err };\n        }\n\n        analytics.sendEvent(client, \"unionpay.enrollment-failed\");\n\n        return Promise.reject(error);\n      });\n  }\n\n  return Promise.reject(\n    new BraintreeError(errors.UNIONPAY_CARD_OR_HOSTED_FIELDS_INSTANCE_REQUIRED)\n  );\n};\n\n/**\n * @typedef {object} UnionPay~tokenizePayload\n * @property {string} nonce The payment method nonce.\n * @property {string} type Always <code>CreditCard</code>.\n * @property {object} details Additional account details:\n * @property {string} details.cardType Type of card, ex: Visa, MasterCard.\n * @property {string} details.lastFour Last four digits of card number.\n * @property {string} details.lastTwo Last two digits of card number.\n * @property {string} description A human-readable description.\n */\n\n/**\n * Tokenizes a UnionPay card and returns a nonce payload.\n * @public\n * @param {object} options UnionPay tokenization options:\n * @param {object} [options.card] The card to enroll. Required if you are not using the `hostedFields` option.\n * @param {string} options.card.number The card number.\n * @param {string} [options.card.expirationDate] The card's expiration date. May be in the form `MM/YY` or `MM/YYYY`. When defined `expirationMonth` and `expirationYear` are ignored.\n * @param {string} [options.card.expirationMonth] The card's expiration month. This should be used with the `expirationYear` parameter. When `expirationDate` is defined this parameter is ignored.\n * @param {string} [options.card.expirationYear] The card's expiration year. This should be used with the `expirationMonth` parameter. When `expirationDate` is defined this parameter is ignored.\n * @param {string} [options.card.cvv] The card's security number.\n * @param {HostedFields} [options.hostedFields] The Hosted Fields instance used to collect card data. Required if you are not using the `card` option.\n * @param {string} options.enrollmentId The enrollment ID from {@link UnionPay#enroll}.\n * @param {string} [options.smsCode] The SMS code received from the user if {@link UnionPay#enroll} payload have `smsCodeRequired`. if `smsCodeRequired` is false, smsCode should not be passed.\n * @param {callback} [callback] The second argument, <code>data</code>, is a {@link UnionPay~tokenizePayload|tokenizePayload}. If no callback is provided, `tokenize` returns a promise that resolves with a {@link UnionPay~tokenizePayload|tokenizePayload}.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nUnionPay.prototype.tokenize = function (options) {\n  var data;\n  var self = this;\n  var client = this._options.client;\n  var card = options.card;\n  var hostedFields = options.hostedFields;\n\n  if (card && hostedFields) {\n    return Promise.reject(\n      new BraintreeError(errors.UNIONPAY_CARD_AND_HOSTED_FIELDS_INSTANCES)\n    );\n  }\n  if (card) {\n    data = {\n      _meta: { source: \"unionpay\" },\n      creditCard: {\n        number: options.card.number,\n        options: {\n          unionPayEnrollment: {\n            id: options.enrollmentId,\n          },\n        },\n      },\n    };\n\n    if (options.smsCode) {\n      data.creditCard.options.unionPayEnrollment.smsCode = options.smsCode;\n    }\n\n    if (card.expirationDate) {\n      data.creditCard.expirationDate = card.expirationDate;\n    } else if (card.expirationMonth && card.expirationYear) {\n      data.creditCard.expirationYear = card.expirationYear;\n      data.creditCard.expirationMonth = card.expirationMonth;\n    }\n\n    if (options.card.cvv) {\n      data.creditCard.cvv = options.card.cvv;\n    }\n\n    return client\n      .request({\n        method: \"post\",\n        endpoint: \"payment_methods/credit_cards\",\n        data: data,\n      })\n      .then(function (response) {\n        var tokenizedCard = response.creditCards[0];\n\n        delete tokenizedCard.consumed;\n        delete tokenizedCard.threeDSecureInfo;\n\n        analytics.sendEvent(client, \"unionpay.nonce-received\");\n\n        return tokenizedCard;\n      })\n      .catch(function (err) {\n        var error;\n        var status = err.details && err.details.httpStatus;\n\n        analytics.sendEvent(client, \"unionpay.nonce-failed\");\n\n        if (status === 403) {\n          error = err;\n        } else if (status < 500) {\n          error = new BraintreeError(errors.UNIONPAY_FAILED_TOKENIZATION);\n          error.details = { originalError: err };\n        } else {\n          error = new BraintreeError(\n            errors.UNIONPAY_TOKENIZATION_NETWORK_ERROR\n          );\n          error.details = { originalError: err };\n        }\n\n        return Promise.reject(error);\n      });\n  }\n  if (hostedFields) {\n    if (!hostedFields._bus) {\n      return Promise.reject(\n        new BraintreeError(errors.UNIONPAY_HOSTED_FIELDS_INSTANCE_INVALID)\n      );\n    }\n\n    return new Promise(function (resolve, reject) {\n      self._initializeHostedFields().then(function () {\n        self._bus.emit(\n          events.HOSTED_FIELDS_TOKENIZE,\n          options,\n          function (response) {\n            if (response.err) {\n              reject(new BraintreeError(response.err));\n\n              return;\n            }\n\n            resolve(response.payload);\n          }\n        );\n      });\n    });\n  }\n\n  return Promise.reject(\n    new BraintreeError(errors.UNIONPAY_CARD_OR_HOSTED_FIELDS_INSTANCE_REQUIRED)\n  );\n};\n\n/**\n * Cleanly remove anything set up by {@link module:braintree-web/unionpay.create|create}. This only needs to be called when using UnionPay with Hosted Fields.\n * @public\n * @param {callback} [callback] Called on completion. If no callback is provided, returns a promise.\n * @example\n * unionpayInstance.teardown();\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nUnionPay.prototype.teardown = function () {\n  if (this._bus) {\n    this._hostedFieldsFrame.parentNode.removeChild(this._hostedFieldsFrame);\n    this._bus.teardown();\n  }\n\n  convertMethodsToError(this, methods(UnionPay.prototype));\n\n  return Promise.resolve();\n};\n\nUnionPay.prototype._initializeHostedFields = function () {\n  var assetsUrl, isDebug;\n  var componentId = uuid();\n  var self = this;\n\n  if (this._hostedFieldsInitializePromise) {\n    return this._hostedFieldsInitializePromise;\n  }\n\n  this._hostedFieldsInitializePromise = new Promise(function (resolve) {\n    assetsUrl =\n      self._options.client.getConfiguration().gatewayConfiguration.assetsUrl;\n    isDebug = self._options.client.getConfiguration().isDebug;\n\n    self._bus = new Bus({\n      channel: componentId,\n      verifyDomain: isVerifiedDomain,\n    });\n    self._hostedFieldsFrame = iFramer({\n      name: constants.HOSTED_FIELDS_FRAME_NAME + \"_\" + componentId,\n      src:\n        assetsUrl +\n        \"/web/\" +\n        VERSION +\n        \"/html/unionpay-hosted-fields-frame\" +\n        useMin(isDebug) +\n        \".html\",\n      height: 0,\n      width: 0,\n    });\n\n    self._bus.on(BUS_CONFIGURATION_REQUEST_EVENT, function (reply) {\n      reply(self._options.client);\n\n      resolve();\n    });\n\n    document.body.appendChild(self._hostedFieldsFrame);\n  });\n\n  return this._hostedFieldsInitializePromise;\n};\n\nmodule.exports = wrapPromise.wrapPrototype(UnionPay);\n\n},{\"../../lib/analytics\":143,\"../../lib/braintree-error\":149,\"../../lib/constants\":150,\"../../lib/convert-methods-to-error\":151,\"../../lib/is-verified-domain\":180,\"../../lib/methods\":182,\"../../lib/use-min\":188,\"./constants\":239,\"./errors\":240,\"@braintree/iframer\":35,\"@braintree/uuid\":39,\"@braintree/wrap-promise\":43,\"framebus\":54}],242:[function(_dereq_,module,exports){\n\"use strict\";\n\nmodule.exports = {\n  PLAID_LINK_JS: \"https://cdn.plaid.com/link/v2/stable/link-initialize.js\",\n};\n\n},{}],243:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Us Bank Account - Creation Error Codes\n * @description Errors that occur when [creating the Us Bank Account component](./module-braintree-web_us-bank-account.html#.create).\n * @property {MERCHANT} US_BANK_ACCOUNT_NOT_ENABLED Occurs when US Bank Account is not enabled in the Braintree control panel.\n */\n\n/**\n * @name BraintreeError.Us Bank Account - tokenize Error Codes\n * @description Errors that occur when using the [`tokenize` method](./UsBankAccount.html#tokenize).\n * @property {MERCHANT} US_BANK_ACCOUNT_OPTION_REQUIRED Occurs when a required option is not passed.\n * @property {MERCHANT} US_BANK_ACCOUNT_MUTUALLY_EXCLUSIVE_OPTIONS Occurs when 1 or more incompatible options are passed.\n * @property {NETWORK} US_BANK_ACCOUNT_LOGIN_LOAD_FAILED Occurs when bank login flow fails.\n * @property {CUSTOMER} US_BANK_ACCOUNT_LOGIN_CLOSED Occurs when bank login window is closed.\n * @property {MERCHANT} US_BANK_ACCOUNT_LOGIN_REQUEST_ACTIVE Occurs when a bank login flow is already active.\n * @property {NETWORK} US_BANK_ACCOUNT_TOKENIZATION_NETWORK_ERROR Occurs when payment details could not be tokenized.\n * @property {CUSTOMER} US_BANK_ACCOUNT_FAILED_TOKENIZATION Occurs when payment details failed to be tokenized.\n * @property {MERCHANT} US_BANK_ACCOUNT_BANK_LOGIN_NOT_ENABLED Occurs when bank login flow is not enabled in the Braintree control panel.\n */\n\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\n\nmodule.exports = {\n  US_BANK_ACCOUNT_OPTION_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"US_BANK_ACCOUNT_OPTION_REQUIRED\",\n  },\n  US_BANK_ACCOUNT_MUTUALLY_EXCLUSIVE_OPTIONS: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"US_BANK_ACCOUNT_MUTUALLY_EXCLUSIVE_OPTIONS\",\n  },\n  US_BANK_ACCOUNT_LOGIN_LOAD_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"US_BANK_ACCOUNT_LOGIN_LOAD_FAILED\",\n    message: \"Bank login flow failed to load.\",\n  },\n  US_BANK_ACCOUNT_LOGIN_CLOSED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"US_BANK_ACCOUNT_LOGIN_CLOSED\",\n    message: \"Customer closed bank login flow before authorizing.\",\n  },\n  US_BANK_ACCOUNT_LOGIN_REQUEST_ACTIVE: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"US_BANK_ACCOUNT_LOGIN_REQUEST_ACTIVE\",\n    message: \"Another bank login tokenization request is active.\",\n  },\n  US_BANK_ACCOUNT_TOKENIZATION_NETWORK_ERROR: {\n    type: BraintreeError.types.NETWORK,\n    code: \"US_BANK_ACCOUNT_TOKENIZATION_NETWORK_ERROR\",\n    message: \"A tokenization network error occurred.\",\n  },\n  US_BANK_ACCOUNT_FAILED_TOKENIZATION: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"US_BANK_ACCOUNT_FAILED_TOKENIZATION\",\n    message: \"The supplied data failed tokenization.\",\n  },\n  US_BANK_ACCOUNT_NOT_ENABLED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"US_BANK_ACCOUNT_NOT_ENABLED\",\n    message: \"US bank account is not enabled.\",\n  },\n  US_BANK_ACCOUNT_BANK_LOGIN_NOT_ENABLED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"US_BANK_ACCOUNT_BANK_LOGIN_NOT_ENABLED\",\n    message: \"Bank login is not enabled.\",\n  },\n};\n\n},{\"../lib/braintree-error\":149}],244:[function(_dereq_,module,exports){\n\"use strict\";\n/**\n * @module braintree-web/us-bank-account\n * @description This module is for accepting payments of US bank accounts.\n */\n\nvar basicComponentVerification = _dereq_(\"../lib/basic-component-verification\");\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar createDeferredClient = _dereq_(\"../lib/create-deferred-client\");\nvar createAssetsUrl = _dereq_(\"../lib/create-assets-url\");\nvar errors = _dereq_(\"./errors\");\nvar USBankAccount = _dereq_(\"./us-bank-account\");\nvar VERSION = \"3.145.0\";\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {callback} [callback] The second argument, `data`, is the {@link USBankAccount} instance. If no callback is provided, `create` returns a promise that resolves with the {@link USBankAccount} instance.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nfunction create(options) {\n  var name = \"US Bank Account\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      return createDeferredClient.create({\n        authorization: options.authorization,\n        client: options.client,\n        debug: options.debug,\n        assetsUrl: createAssetsUrl.create(options.authorization),\n        name: name,\n      });\n    })\n    .then(function (client) {\n      var usBankAccount;\n\n      options.client = client;\n\n      usBankAccount =\n        options.client.getConfiguration().gatewayConfiguration.usBankAccount;\n      if (!usBankAccount) {\n        return Promise.reject(\n          new BraintreeError(errors.US_BANK_ACCOUNT_NOT_ENABLED)\n        );\n      }\n\n      return new USBankAccount(options);\n    });\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `{@pkg version}`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/basic-component-verification\":147,\"../lib/braintree-error\":149,\"../lib/create-assets-url\":153,\"../lib/create-deferred-client\":155,\"./errors\":243,\"./us-bank-account\":245,\"@braintree/wrap-promise\":43}],245:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar constants = _dereq_(\"./constants\");\nvar errors = _dereq_(\"./errors\");\nvar sharedErrors = _dereq_(\"../lib/errors\");\nvar analytics = _dereq_(\"../lib/analytics\");\nvar once = _dereq_(\"../lib/once\");\nvar convertMethodsToError = _dereq_(\"../lib/convert-methods-to-error\");\nvar methods = _dereq_(\"../lib/methods\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\n\nvar TOKENIZE_BANK_DETAILS_MUTATION = createGraphQLMutation(\"UsBankAccount\");\nvar TOKENIZE_BANK_LOGIN_MUTATION = createGraphQLMutation(\"UsBankLogin\");\n\n/**\n * @typedef {object} USBankAccount~tokenizePayload\n * @property {string} nonce The payment method nonce.\n * @property {string} type The payment method type, always `us_bank_account`.\n * @property {object} details Additional account details. Currently empty.\n */\n\n/**\n * @class\n * @param {object} options See {@link module:braintree-web/us-bank-account.create|us-bank-account.create}.\n * @classdesc This class represents a US Bank Account component. Instances of this class can tokenize raw bank details or present a bank login. <strong>You cannot use this constructor directly. Use {@link module:braintree-web/us-bank-account.create|braintree.us-bank-account.create} instead.</strong>\n */\nfunction USBankAccount(options) {\n  this._client = options.client;\n\n  this._isTokenizingBankLogin = false;\n\n  analytics.sendEvent(this._client, \"usbankaccount.initialized\");\n}\n\n/**\n * Tokenizes bank information to return a payment method nonce. You can tokenize bank details by providing information like account and routing numbers. You can also tokenize with a bank login UI that prompts the customer to log into their bank account.\n * @public\n * @param {object} options All tokenization options for the US Bank Account component.\n * @param {string} options.mandateText A string for proof of customer authorization. For example, `'I authorize Braintree to debit my bank account on behalf of My Online Store.'`.\n * @param {object} [options.bankDetails] Bank detail information (such as account and routing numbers). `bankDetails` or `bankLogin` option must be provided.\n * @param {string} options.bankDetails.routingNumber The customer's bank routing number, such as `'307075259'`.\n * @param {string} options.bankDetails.accountNumber The customer's bank account number, such as `'999999999'`.\n * @param {string} options.bankDetails.accountType The customer's bank account type. Must be `'checking'` or `'savings'`.\n * @param {string} options.bankDetails.ownershipType The customer's bank account ownership type. Must be `'personal'` or `'business'`.\n * @param {string} [options.bankDetails.firstName] The customer's first name. Required when account ownership type is `personal`.\n * @param {string} [options.bankDetails.lastName] The customer's last name. Required when account ownership type is `personal`.\n * @param {string} [options.bankDetails.businessName] The customer's business name. Required when account ownership type is `business`.\n * @param {object} options.bankDetails.billingAddress The customer's billing address.\n * @param {string} options.bankDetails.billingAddress.streetAddress The street address for the customer's billing address, such as `'123 Fake St'`.\n * @param {string} [options.bankDetails.billingAddress.extendedAddress] The extended street address for the customer's billing address, such as `'Apartment B'`.\n * @param {string} options.bankDetails.billingAddress.locality The locality for the customer's billing address. This is typically a city, such as `'San Francisco'`.\n * @param {string} options.bankDetails.billingAddress.region The region for the customer's billing address. This is typically a state, such as `'CA'`.\n * @param {string} options.bankDetails.billingAddress.postalCode The postal code for the customer's billing address. This is typically a ZIP code, such as `'94119'`.\n * @param {object} [options.bankLogin] Bank login information. `bankLogin` or `bankDetails` option must be provided.\n * @param {string} options.bankLogin.displayName Display name for the bank login UI, such as `'My Store'`.\n * @param {string} options.bankLogin.ownershipType The customer's bank account ownership type. Must be `'personal'` or `'business'`.\n * @param {string} [options.bankLogin.firstName] The customer's first name. Required when account ownership type is `personal`.\n * @param {string} [options.bankLogin.lastName] The customer's last name. Required when account ownership type is `personal`.\n * @param {string} [options.bankLogin.businessName] The customer's business name. Required when account ownership type is `business`.\n * @param {object} options.bankLogin.billingAddress The customer's billing address.\n * @param {string} options.bankLogin.billingAddress.streetAddress The street address for the customer's billing address, such as `'123 Fake St'`.\n * @param {string} [options.bankLogin.billingAddress.extendedAddress] The extended street address for the customer's billing address, such as `'Apartment B'`.\n * @param {string} options.bankLogin.billingAddress.locality The locality for the customer's billing address. This is typically a city, such as `'San Francisco'`.\n * @param {string} options.bankLogin.billingAddress.region The region for the customer's billing address. This is typically a state, such as `'CA'`.\n * @param {string} options.bankLogin.billingAddress.postalCode The postal code for the customer's billing address. This is typically a ZIP code, such as `'94119'`.\n * @param {callback} [callback] The second argument, <code>data</code>, is a {@link USBankAccount~tokenizePayload|tokenizePayload}. If no callback is provided, `tokenize` returns a promise that resolves with {@link USBankAccount~tokenizePayload|tokenizePayload}.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * <caption>Tokenizing raw bank details</caption>\n * var routingNumberInput = document.querySelector('input[name=\"routing-number\"]');\n * var accountNumberInput = document.querySelector('input[name=\"account-number\"]');\n * var accountTypeInput = document.querySelector('input[name=\"account-type\"]:checked');\n * var ownershipTypeInput = document.querySelector('input[name=\"ownership-type\"]:checked');\n * var firstNameInput = document.querySelector('input[name=\"first-name\"]');\n * var lastNameInput = document.querySelector('input[name=\"last-name\"]');\n * var businessNameInput = document.querySelector('input[name=\"business-name\"]');\n * var billingAddressStreetInput = document.querySelector('input[name=\"street-address\"]');\n * var billingAddressExtendedInput = document.querySelector('input[name=\"extended-address\"]');\n * var billingAddressLocalityInput = document.querySelector('input[name=\"locality\"]');\n * var billingAddressRegionSelect = document.querySelector('select[name=\"region\"]');\n * var billingAddressPostalInput = document.querySelector('input[name=\"postal-code\"]');\n *\n * submitButton.addEventListener('click', function (event) {\n *   var bankDetails = {\n *     routingNumber: routingNumberInput.value,\n *     accountNumber: accountNumberInput.value,\n *     accountType: accountTypeInput.value,\n *     ownershipType: ownershipTypeInput.value,\n *     billingAddress: {\n *       streetAddress: billingAddressStreetInput.value,\n *       extendedAddress: billingAddressExtendedInput.value,\n *       locality: billingAddressLocalityInput.value,\n *       region: billingAddressRegionSelect.value,\n *       postalCode: billingAddressPostalInput.value\n *     }\n *   };\n *\n *   if (bankDetails.ownershipType === 'personal') {\n *     bankDetails.firstName = firstNameInput.value;\n *     bankDetails.lastName = lastNameInput.value;\n *   } else {\n *     bankDetails.businessName = businessNameInput.value;\n *   }\n *\n *   event.preventDefault();\n *\n *   usBankAccountInstance.tokenize({\n *     bankDetails: bankDetails,\n *     mandateText: 'I authorize Braintree to debit my bank account on behalf of My Online Store.'\n *   }, function (tokenizeErr, tokenizedPayload) {\n *     if (tokenizeErr) {\n *       console.error('There was an error tokenizing the bank details.');\n *       return;\n *     }\n *\n *     // Send tokenizePayload.nonce to your server here!\n *   });\n * });\n * @example\n * <caption>Tokenizing with bank login UI</caption>\n * var ownershipTypeInput = document.querySelector('input[name=\"ownership-type\"]:checked');\n * var firstNameInput = document.querySelector('input[name=\"first-name\"]');\n * var lastNameInput = document.querySelector('input[name=\"last-name\"]');\n * var businessNameInput = document.querySelector('input[name=\"business-name\"]');\n * var billingAddressStreetInput = document.querySelector('input[name=\"street-address\"]');\n * var billingAddressExtendedInput = document.querySelector('input[name=\"extended-address\"]');\n * var billingAddressLocalityInput = document.querySelector('input[name=\"locality\"]');\n * var billingAddressRegionSelect = document.querySelector('select[name=\"region\"]');\n * var billingAddressPostalInput = document.querySelector('input[name=\"postal-code\"]');\n *\n * bankLoginButton.addEventListener('click', function (event) {\n *   var bankLogin = {\n *     displayName: 'My Online Store',\n *     ownershipType: ownershipTypeInput.value,\n *     billingAddress: {\n *       streetAddress: billingAddressStreetInput.value,\n *       extendedAddress: billingAddressExtendedInput.value,\n *       locality: billingAddressLocalityInput.value,\n *       region: billingAddressRegionSelect.value,\n *       postalCode: billingAddressPostalInput.value\n *     }\n *   }\n *   event.preventDefault();\n *\n *   if (bankLogin.ownershipType === 'personal') {\n *     bankLogin.firstName = firstNameInput.value;\n *     bankLogin.lastName = lastNameInput.value;\n *   } else {\n *     bankLogin.businessName = businessNameInput.value;\n *   }\n *\n *   usBankAccountInstance.tokenize({\n *     bankLogin: bankLogin,\n *     mandateText: 'I authorize Braintree to debit my bank account on behalf of My Online Store.'\n *   }, function (tokenizeErr, tokenizedPayload) {\n *     if (tokenizeErr) {\n *       console.error('There was an error tokenizing the bank details.');\n *       return;\n *     }\n *\n *     // Send tokenizePayload.nonce to your server here!\n *   });\n * });\n */\nUSBankAccount.prototype.tokenize = function (options) {\n  options = options || {};\n\n  if (!options.mandateText) {\n    return Promise.reject(\n      new BraintreeError({\n        type: errors.US_BANK_ACCOUNT_OPTION_REQUIRED.type,\n        code: errors.US_BANK_ACCOUNT_OPTION_REQUIRED.code,\n        message: \"mandateText property is required.\",\n      })\n    );\n  }\n\n  if (options.bankDetails && options.bankLogin) {\n    return Promise.reject(\n      new BraintreeError({\n        type: errors.US_BANK_ACCOUNT_MUTUALLY_EXCLUSIVE_OPTIONS.type,\n        code: errors.US_BANK_ACCOUNT_MUTUALLY_EXCLUSIVE_OPTIONS.code,\n        message:\n          \"tokenize must be called with bankDetails or bankLogin, not both.\",\n      })\n    );\n  }\n  if (options.bankDetails) {\n    return this._tokenizeBankDetails(options);\n  }\n  if (options.bankLogin) {\n    return this._tokenizeBankLogin(options);\n  }\n\n  return Promise.reject(\n    new BraintreeError({\n      type: errors.US_BANK_ACCOUNT_OPTION_REQUIRED.type,\n      code: errors.US_BANK_ACCOUNT_OPTION_REQUIRED.code,\n      message: \"tokenize must be called with bankDetails or bankLogin.\",\n    })\n  );\n};\n\nUSBankAccount.prototype._tokenizeBankDetails = function (options) {\n  var client = this._client;\n  var bankDetails = options.bankDetails;\n  var data = {\n    achMandate: options.mandateText,\n    routingNumber: bankDetails.routingNumber,\n    accountNumber: bankDetails.accountNumber,\n    accountType: bankDetails.accountType.toUpperCase(),\n    billingAddress: formatBillingAddressForGraphQL(\n      bankDetails.billingAddress || {}\n    ),\n  };\n\n  formatDataForOwnershipType(data, bankDetails);\n\n  return client\n    .request({\n      api: \"graphQLApi\",\n      data: {\n        query: TOKENIZE_BANK_DETAILS_MUTATION,\n        variables: {\n          input: {\n            usBankAccount: data,\n          },\n        },\n      },\n    })\n    .then(function (response) {\n      analytics.sendEvent(\n        client,\n        \"usbankaccount.bankdetails.tokenization.succeeded\"\n      );\n\n      return Promise.resolve(\n        formatTokenizeResponseFromGraphQL(response, \"tokenizeUsBankAccount\")\n      );\n    })\n    .catch(function (err) {\n      var error = errorFrom(err);\n\n      analytics.sendEvent(\n        client,\n        \"usbankaccount.bankdetails.tokenization.failed\"\n      );\n\n      return Promise.reject(error);\n    });\n};\n\nUSBankAccount.prototype._tokenizeBankLogin = function (options) {\n  var self = this;\n  var client = this._client;\n  var gatewayConfiguration = client.getConfiguration().gatewayConfiguration;\n  var isProduction = gatewayConfiguration.environment === \"production\";\n  var plaidConfig = gatewayConfiguration.usBankAccount.plaid;\n\n  if (!options.bankLogin.displayName) {\n    return Promise.reject(\n      new BraintreeError({\n        type: errors.US_BANK_ACCOUNT_OPTION_REQUIRED.type,\n        code: errors.US_BANK_ACCOUNT_OPTION_REQUIRED.code,\n        message: \"displayName property is required when using bankLogin.\",\n      })\n    );\n  }\n\n  if (!plaidConfig) {\n    return Promise.reject(\n      new BraintreeError(errors.US_BANK_ACCOUNT_BANK_LOGIN_NOT_ENABLED)\n    );\n  }\n\n  if (this._isTokenizingBankLogin) {\n    return Promise.reject(\n      new BraintreeError(errors.US_BANK_ACCOUNT_LOGIN_REQUEST_ACTIVE)\n    );\n  }\n  this._isTokenizingBankLogin = true;\n\n  return new Promise(function (resolve, reject) {\n    self._loadPlaid(function (plaidLoadErr, plaid) {\n      if (plaidLoadErr) {\n        reject(plaidLoadErr);\n\n        return;\n      }\n\n      plaid\n        .create({\n          clientName: options.bankLogin.displayName,\n          apiVersion: \"v2\",\n          env: isProduction ? \"production\" : \"sandbox\",\n          key: plaidConfig.publicKey,\n          product: \"auth\",\n          selectAccount: true,\n          onExit: function () {\n            self._isTokenizingBankLogin = false;\n\n            analytics.sendEvent(\n              client,\n              \"usbankaccount.banklogin.tokenization.closed.by-user\"\n            );\n\n            reject(new BraintreeError(errors.US_BANK_ACCOUNT_LOGIN_CLOSED));\n          },\n          onSuccess: function (publicToken, metadata) {\n            var bankLogin = options.bankLogin;\n            var data = {\n              publicToken: publicToken,\n              accountId: isProduction\n                ? metadata.account_id\n                : \"plaid_account_id\",\n              accountType: metadata.account.subtype.toUpperCase(),\n              achMandate: options.mandateText,\n              billingAddress: formatBillingAddressForGraphQL(\n                bankLogin.billingAddress || {}\n              ),\n            };\n\n            formatDataForOwnershipType(data, bankLogin);\n\n            client\n              .request({\n                api: \"graphQLApi\",\n                data: {\n                  query: TOKENIZE_BANK_LOGIN_MUTATION,\n                  variables: {\n                    input: {\n                      usBankLogin: data,\n                    },\n                  },\n                },\n              })\n              .then(function (response) {\n                self._isTokenizingBankLogin = false;\n\n                analytics.sendEvent(\n                  client,\n                  \"usbankaccount.banklogin.tokenization.succeeded\"\n                );\n\n                resolve(\n                  formatTokenizeResponseFromGraphQL(\n                    response,\n                    \"tokenizeUsBankLogin\"\n                  )\n                );\n              })\n              .catch(function (tokenizeErr) {\n                var error;\n\n                self._isTokenizingBankLogin = false;\n                error = errorFrom(tokenizeErr);\n\n                analytics.sendEvent(\n                  client,\n                  \"usbankaccount.banklogin.tokenization.failed\"\n                );\n\n                reject(error);\n              });\n          },\n        })\n        .open();\n\n      analytics.sendEvent(\n        client,\n        \"usbankaccount.banklogin.tokenization.started\"\n      );\n    });\n  });\n};\n\nfunction errorFrom(err) {\n  var error;\n  var status = err.details && err.details.httpStatus;\n\n  if (status === 401) {\n    error = new BraintreeError(sharedErrors.BRAINTREE_API_ACCESS_RESTRICTED);\n  } else if (status < 500) {\n    error = new BraintreeError(errors.US_BANK_ACCOUNT_FAILED_TOKENIZATION);\n  } else {\n    error = new BraintreeError(\n      errors.US_BANK_ACCOUNT_TOKENIZATION_NETWORK_ERROR\n    );\n  }\n  error.details = { originalError: err };\n\n  return error;\n}\n\nfunction formatTokenizeResponseFromGraphQL(response, type) {\n  var data = response.data[type].paymentMethod;\n  var last4 = data.details.last4;\n  var description = \"US bank account ending in - \" + last4;\n\n  return {\n    nonce: data.id,\n    details: {},\n    description: description,\n    type: \"us_bank_account\",\n  };\n}\n\nUSBankAccount.prototype._loadPlaid = function (callback) {\n  var existingScript, script;\n\n  callback = once(callback);\n\n  if (window.Plaid) {\n    callback(null, window.Plaid);\n\n    return;\n  }\n\n  existingScript = document.querySelector(\n    'script[src=\"' + constants.PLAID_LINK_JS + '\"]'\n  );\n\n  if (existingScript) {\n    addLoadListeners(existingScript, callback);\n  } else {\n    script = document.createElement(\"script\");\n\n    script.src = constants.PLAID_LINK_JS;\n    script.async = true;\n\n    addLoadListeners(script, callback);\n\n    document.body.appendChild(script);\n\n    this._plaidScript = script;\n  }\n};\n\nfunction addLoadListeners(script, callback) {\n  function loadHandler() {\n    var readyState = this.readyState;\n\n    if (!readyState || readyState === \"loaded\" || readyState === \"complete\") {\n      removeLoadListeners();\n      callback(null, window.Plaid);\n    }\n  }\n\n  function errorHandler() {\n    script.parentNode.removeChild(script);\n\n    callback(new BraintreeError(errors.US_BANK_ACCOUNT_LOGIN_LOAD_FAILED));\n  }\n\n  function removeLoadListeners() {\n    script.removeEventListener(\"error\", errorHandler);\n    script.removeEventListener(\"load\", loadHandler);\n    script.removeEventListener(\"readystatechange\", loadHandler);\n  }\n\n  script.addEventListener(\"error\", errorHandler);\n  script.addEventListener(\"load\", loadHandler);\n  script.addEventListener(\"readystatechange\", loadHandler);\n}\n\nfunction formatBillingAddressForGraphQL(address) {\n  return {\n    streetAddress: address.streetAddress,\n    extendedAddress: address.extendedAddress,\n    city: address.locality,\n    state: address.region,\n    zipCode: address.postalCode,\n  };\n}\n\nfunction formatDataForOwnershipType(data, details) {\n  if (details.ownershipType === \"personal\") {\n    data.individualOwner = {\n      firstName: details.firstName,\n      lastName: details.lastName,\n    };\n  } else if (details.ownershipType === \"business\") {\n    data.businessOwner = {\n      businessName: details.businessName,\n    };\n  }\n}\n\nfunction createGraphQLMutation(type) {\n  return (\n    \"\" +\n    \"mutation Tokenize\" +\n    type +\n    \"($input: Tokenize\" +\n    type +\n    \"Input!) {\" +\n    \"  tokenize\" +\n    type +\n    \"(input: $input) {\" +\n    \"    paymentMethod {\" +\n    \"      id\" +\n    \"      details {\" +\n    \"        ... on UsBankAccountDetails {\" +\n    \"          last4\" +\n    \"        }\" +\n    \"      }\" +\n    \"    }\" +\n    \"  }\" +\n    \"}\"\n  );\n}\n\n/**\n * Cleanly tear down anything set up by {@link module:braintree-web/us-bank-account.create|create}.\n * @public\n * @param {callback} [callback] Called once teardown is complete. No data is returned if teardown completes successfully.\n * @example\n * usBankAccountInstance.teardown();\n * @example <caption>With callback</caption>\n * usBankAccountInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nUSBankAccount.prototype.teardown = function () {\n  if (this._plaidScript) {\n    document.body.removeChild(this._plaidScript);\n  }\n\n  convertMethodsToError(this, methods(USBankAccount.prototype));\n\n  return Promise.resolve();\n};\n\nmodule.exports = wrapPromise.wrapPrototype(USBankAccount);\n\n},{\"../lib/analytics\":143,\"../lib/braintree-error\":149,\"../lib/convert-methods-to-error\":151,\"../lib/errors\":160,\"../lib/methods\":182,\"../lib/once\":183,\"./constants\":242,\"./errors\":243,\"@braintree/wrap-promise\":43}],246:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Vault Manager - deletePaymentMethod Error Codes\n * @description Errors that occur when using the [`deletePaymentMethod` method](./VaultManager.html#deletePaymentMethod).\n * @property {MERCHANT} VAULT_MANAGER_DELETE_PAYMENT_METHOD_NONCE_REQUIRES_CLIENT_TOKEN Occurs when vault manager is initialized with a tokenization key instead of a Client Token.\n * @property {MERCHANT} VAULT_MANAGER_PAYMENT_METHOD_NONCE_NOT_FOUND Occurs when the specified payment method can not be found.\n * @property {UNKNOWN} VAULT_MANAGER_DELETE_PAYMENT_METHOD_UNKNOWN_ERROR Occurs when there is an error attempting to delete the payment method.\n */\n\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\n\nmodule.exports = {\n  VAULT_MANAGER_DELETE_PAYMENT_METHOD_NONCE_REQUIRES_CLIENT_TOKEN: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VAULT_MANAGER_DELETE_PAYMENT_METHOD_NONCE_REQUIRES_CLIENT_TOKEN\",\n    message:\n      \"A client token with a customer id must be used to delete a payment method nonce.\",\n  },\n  VAULT_MANAGER_PAYMENT_METHOD_NONCE_NOT_FOUND: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VAULT_MANAGER_PAYMENT_METHOD_NONCE_NOT_FOUND\",\n  },\n  VAULT_MANAGER_DELETE_PAYMENT_METHOD_UNKNOWN_ERROR: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"VAULT_MANAGER_DELETE_PAYMENT_METHOD_UNKNOWN_ERROR\",\n  },\n};\n\n},{\"../lib/braintree-error\":149}],247:[function(_dereq_,module,exports){\n\"use strict\";\n/**\n * @module braintree-web/vault-manager\n * @description Manages customer's payment methods.\n */\n\nvar basicComponentVerification = _dereq_(\"../lib/basic-component-verification\");\nvar createDeferredClient = _dereq_(\"../lib/create-deferred-client\");\nvar createAssetsUrl = _dereq_(\"../lib/create-assets-url\");\nvar VaultManager = _dereq_(\"./vault-manager\");\nvar VERSION = \"3.145.0\";\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {callback} callback The second argument, `data`, is the {@link VaultManager} instance.\n * @returns {void}\n */\nfunction create(options) {\n  var name = \"Vault Manager\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      return new VaultManager({\n        createPromise: createDeferredClient.create({\n          authorization: options.authorization,\n          client: options.client,\n          debug: options.debug,\n          assetsUrl: createAssetsUrl.create(options.authorization),\n          name: name,\n        }),\n      });\n    });\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `{@pkg version}`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/basic-component-verification\":147,\"../lib/create-assets-url\":153,\"../lib/create-deferred-client\":155,\"./vault-manager\":248,\"@braintree/wrap-promise\":43}],248:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar analytics = _dereq_(\"../lib/analytics\");\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar errors = _dereq_(\"./errors\");\nvar convertMethodsToError = _dereq_(\"../lib/convert-methods-to-error\");\nvar methods = _dereq_(\"../lib/methods\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\n\nvar DELETE_PAYMENT_METHOD_MUTATION =\n  \"mutation DeletePaymentMethodFromSingleUseToken($input: DeletePaymentMethodFromSingleUseTokenInput!) {\" +\n  \"  deletePaymentMethodFromSingleUseToken(input: $input) {\" +\n  \"    clientMutationId\" +\n  \"  }\" +\n  \"}\";\n\n/**\n * @typedef {array} VaultManager~fetchPaymentMethodsPayload The customer's payment methods.\n * @property {object} paymentMethod The payment method object.\n * @property {string} paymentMethod.nonce A nonce that can be sent to your server to transact on the payment method.\n * @property {boolean} paymentMethod.default Whether or not this is the default payment method for the customer.\n * @property {object} paymentMethod.details Any additional details about the payment method. Varies depending on the type of payment method.\n * @property {string} paymentMethod.type A constant indicating the type of payment method.\n * @property {?string} paymentMethod.description Additional description about the payment method.\n * @property {?object} paymentMethod.binData Bin data about the payment method.\n *\n */\n\n/**\n * @class\n * @param {object} options Options\n * @description <strong>You cannot use this constructor directly. Use {@link module:braintree-web/vault-manager.create|braintree.vault-manager.create} instead.</strong>\n * @classdesc This class allows you to manage a customer's payment methods on the client.\n */\nfunction VaultManager(options) {\n  this._createPromise = options.createPromise;\n}\n\n/**\n * Fetches payment methods owned by the customer whose id was used to generate the client token used to create the {@link module:braintree-web/client|client}.\n * @public\n * @param {object} [options] Options for fetching payment methods.\n * @param {boolean} [options.defaultFirst = false] If `true`, the payment methods will be returned with the default payment method for the customer first. Otherwise, order is not guaranteed.\n * @param {callback} [callback] The second argument is a {@link VaultManager~fetchPaymentMethodsPayload|fetchPaymentMethodsPayload}. This is also what is resolved by the promise if no callback is provided.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * vaultManagerInstance.fetchPaymentMethods(function (err, paymentMethods) {\n *   paymentMethods.forEach(function (paymentMethod) {\n *     // add payment method to UI\n *     // paymentMethod.nonce <- transactable nonce associated with payment method\n *     // paymentMethod.details <- object with additional information about payment method\n *     // paymentMethod.type <- a constant signifying the type\n *   });\n * });\n */\nVaultManager.prototype.fetchPaymentMethods = function (options) {\n  var defaultFirst;\n\n  options = options || {};\n\n  defaultFirst = options.defaultFirst === true ? 1 : 0;\n\n  return this._createPromise\n    .then(function (client) {\n      return client.request({\n        endpoint: \"payment_methods\",\n        method: \"get\",\n        data: {\n          defaultFirst: defaultFirst,\n        },\n      });\n    })\n    .then(\n      function (paymentMethodsPayload) {\n        analytics.sendEvent(\n          this._createPromise,\n          \"vault-manager.fetch-payment-methods.succeeded\"\n        );\n\n        return paymentMethodsPayload.paymentMethods.map(\n          formatPaymentMethodPayload\n        );\n      }.bind(this)\n    );\n};\n\n/**\n * Deletes a payment method owned by the customer whose id was used to generate the client token used to create the {@link module:braintree-web/client|client}.\n * @public\n * @param {string} paymentMethodNonce The payment method nonce that references a vaulted payment method.\n * @param {callback} [callback] No data is returned if the operation is successful.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * vaultManagerInstance.deletePaymentMethod('nonce-to-delete', function (err) {\n *   // handle err if it exists\n * });\n */\nVaultManager.prototype.deletePaymentMethod = function (paymentMethodNonce) {\n  return this._createPromise.then(function (client) {\n    var usesClientToken =\n      client.getConfiguration().authorizationType === \"CLIENT_TOKEN\";\n\n    if (!usesClientToken) {\n      return Promise.reject(\n        new BraintreeError(\n          errors.VAULT_MANAGER_DELETE_PAYMENT_METHOD_NONCE_REQUIRES_CLIENT_TOKEN\n        )\n      );\n    }\n\n    return client\n      .request({\n        api: \"graphQLApi\",\n        data: {\n          query: DELETE_PAYMENT_METHOD_MUTATION,\n          variables: {\n            input: {\n              singleUseTokenId: paymentMethodNonce,\n            },\n          },\n          operationName: \"DeletePaymentMethodFromSingleUseToken\",\n        },\n      })\n      .then(function () {\n        analytics.sendEvent(\n          client,\n          \"vault-manager.delete-payment-method.succeeded\"\n        );\n\n        // noop to prevent sending back the raw graphql data\n      })\n      .catch(function (error) {\n        var originalError = error.details.originalError;\n        var formattedError;\n\n        analytics.sendEvent(\n          client,\n          \"vault-manager.delete-payment-method.failed\"\n        );\n\n        if (\n          originalError[0] &&\n          originalError[0].extensions.errorClass === \"NOT_FOUND\"\n        ) {\n          formattedError = new BraintreeError({\n            type: errors.VAULT_MANAGER_PAYMENT_METHOD_NONCE_NOT_FOUND.type,\n            code: errors.VAULT_MANAGER_PAYMENT_METHOD_NONCE_NOT_FOUND.code,\n            message:\n              \"A payment method for payment method nonce `\" +\n              paymentMethodNonce +\n              \"` could not be found.\",\n            details: {\n              originalError: originalError,\n            },\n          });\n        }\n\n        if (!formattedError) {\n          formattedError = new BraintreeError({\n            type: errors.VAULT_MANAGER_DELETE_PAYMENT_METHOD_UNKNOWN_ERROR.type,\n            code: errors.VAULT_MANAGER_DELETE_PAYMENT_METHOD_UNKNOWN_ERROR.code,\n            message:\n              \"An unknown error occured when attempting to delete the payment method assocaited with the payment method nonce `\" +\n              paymentMethodNonce +\n              \"`.\",\n            details: {\n              originalError: originalError,\n            },\n          });\n        }\n\n        return Promise.reject(formattedError);\n      });\n  });\n};\n\nfunction formatPaymentMethodPayload(paymentMethod) {\n  var formattedPaymentMethod = {\n    nonce: paymentMethod.nonce,\n    default: paymentMethod.default,\n    details: paymentMethod.details,\n    hasSubscription: paymentMethod.hasSubscription,\n    type: paymentMethod.type,\n  };\n\n  if (paymentMethod.description) {\n    formattedPaymentMethod.description = paymentMethod.description;\n  }\n\n  if (paymentMethod.binData) {\n    formattedPaymentMethod.binData = paymentMethod.binData;\n  }\n\n  return formattedPaymentMethod;\n}\n\n/**\n * Cleanly tear down anything set up by {@link module:braintree-web/vault-manager.create|create}.\n * @public\n * @param {callback} [callback] Called once teardown is complete. No data is returned if teardown completes successfully.\n * @example\n * vaultManagerInstance.teardown();\n * @example <caption>With callback</caption>\n * vaultManagerInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nVaultManager.prototype.teardown = function () {\n  convertMethodsToError(this, methods(VaultManager.prototype));\n\n  return Promise.resolve();\n};\n\nmodule.exports = wrapPromise.wrapPrototype(VaultManager);\n\n},{\"../lib/analytics\":143,\"../lib/braintree-error\":149,\"../lib/convert-methods-to-error\":151,\"../lib/methods\":182,\"./errors\":246,\"@braintree/wrap-promise\":43}],249:[function(_dereq_,module,exports){\n\"use strict\";\nvar __importDefault =\n  (this && this.__importDefault) ||\n  function (mod) {\n    return mod && mod.__esModule ? mod : { default: mod };\n  };\nvar venmo_desktop_1 = __importDefault(_dereq_(\"./venmo-desktop\"));\nmodule.exports = function createVenmoDesktop(options) {\n  var instance = new venmo_desktop_1.default(options);\n  return instance.initialize();\n};\n\n},{\"./venmo-desktop\":251}],250:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.VENMO_PAYMENT_CONTEXT_STATUS_QUERY =\n  exports.LEGACY_VENMO_PAYMENT_CONTEXT_STATUS_QUERY =\n  exports.UPDATE_PAYMENT_CONTEXT_QUERY =\n  exports.LEGACY_UPDATE_PAYMENT_CONTEXT_QUERY =\n  exports.CREATE_PAYMENT_CONTEXT_QUERY =\n  exports.LEGACY_CREATE_PAYMENT_CONTEXT_QUERY =\n    void 0;\nexports.LEGACY_CREATE_PAYMENT_CONTEXT_QUERY =\n  \"mutation CreateVenmoQRCodePaymentContext($input: CreateVenmoQRCodePaymentContextInput!) {\\n  createVenmoQRCodePaymentContext(input: $input) {\\n    clientMutationId\\n    venmoQRCodePaymentContext {\\n      id\\n      merchantId\\n      createdAt\\n      expiresAt\\n    }\\n  }\\n}\";\nexports.CREATE_PAYMENT_CONTEXT_QUERY =\n  \"mutation CreateVenmoPaymentContext($input: CreateVenmoPaymentContextInput!) {\\n  createVenmoPaymentContext(input: $input) {\\n    clientMutationId\\n    venmoPaymentContext {\\n      id\\n      merchantId\\n      createdAt\\n      expiresAt\\n    }\\n  }\\n}\";\nexports.LEGACY_UPDATE_PAYMENT_CONTEXT_QUERY =\n  \"mutation UpdateVenmoQRCodePaymentContext($input: UpdateVenmoQRCodePaymentContextInput!) {\\n  updateVenmoQRCodePaymentContext(input: $input) {\\n    clientMutationId\\n  }\\n}\";\nexports.UPDATE_PAYMENT_CONTEXT_QUERY =\n  \"mutation UpdateVenmoPaymentContextStatus($input: UpdateVenmoPaymentContextStatusInput!) {\\n  updateVenmoPaymentContextStatus(input: $input) {\\n    clientMutationId\\n  }\\n}\";\nexports.LEGACY_VENMO_PAYMENT_CONTEXT_STATUS_QUERY =\n  \"query PaymentContext($id: ID!) {\\n  node(id: $id) {\\n    ... on VenmoQRCodePaymentContext {\\n      status\\n      paymentMethodId\\n      userName\\n    }\\n  }\\n}\";\nexports.VENMO_PAYMENT_CONTEXT_STATUS_QUERY =\n  \"query PaymentContext($id: ID!) {\\n  node(id: $id) {\\n    ... on VenmoPaymentContext {\\n      status\\n      paymentMethodId\\n      userName\\n      payerInfo {\\n        firstName\\n        lastName\\n        phoneNumber\\n        email\\n        externalId\\n        userName\\n        billingAddress {\\n          fullName\\n          addressLine1\\n          addressLine2\\n          adminArea1\\n          adminArea2\\n          postalCode\\n          countryCode\\n        }\\n        shippingAddress {\\n          fullName\\n          addressLine1\\n          addressLine2\\n          adminArea1\\n          adminArea2\\n          postalCode\\n          countryCode\\n        }\\n      }\\n    }\\n  }\\n}\";\n\n},{}],251:[function(_dereq_,module,exports){\n\"use strict\";\nvar __assign =\n  (this && this.__assign) ||\n  function () {\n    __assign =\n      Object.assign ||\n      function (t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s)\n            if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n        }\n        return t;\n      };\n    return __assign.apply(this, arguments);\n  };\nvar __importDefault =\n  (this && this.__importDefault) ||\n  function (mod) {\n    return mod && mod.__esModule ? mod : { default: mod };\n  };\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar framebus_1 = __importDefault(_dereq_(\"framebus\"));\nvar iframer_1 = __importDefault(_dereq_(\"@braintree/iframer\"));\nvar uuid_1 = __importDefault(_dereq_(\"@braintree/uuid\"));\nvar events_1 = _dereq_(\"../shared/events\");\nvar queries_1 = _dereq_(\"./queries\");\nvar VENMO_DESKTOP_POLLING_INTERVAL = 1000; // 1 second\nvar VISUAL_DELAY_BEFORE_SIGNALLING_COMPLETION = 2000; // 2 seconds\nvar VenmoDesktop = /** @class */ (function () {\n  function VenmoDesktop(options) {\n    this.isHidden = true;\n    this.env = options.environment;\n    this.id = uuid_1.default();\n    this.profileId = options.profileId;\n    this.displayName = options.displayName;\n    this.paymentMethodUsage = options.paymentMethodUsage;\n    this.riskCorrelationId = options.riskCorrelationId;\n    this.shouldUseLegacyQRCodeMutation = !this.paymentMethodUsage;\n    this.collectCustomerBillingAddress = options.collectCustomerBillingAddress;\n    this.collectCustomerShippingAddress =\n      options.collectCustomerShippingAddress;\n    var frameUrl = options.url + \"#\" + this.env + \"_\" + this.id;\n    this.bus = new framebus_1.default({\n      channel: this.id,\n      verifyDomain: options.verifyDomain,\n      targetFrames: [],\n    });\n    this.apiRequest = options.apiRequest;\n    this.sendEvent = options.sendEvent;\n    this.Promise = options.Promise;\n    this.alertBox = document.createElement(\"div\");\n    this.alertBox.setAttribute(\"data-venmo-desktop-id\", this.id);\n    this.alertBox.setAttribute(\"role\", \"alert\");\n    this.alertBox.style.position = \"fixed\";\n    this.alertBox.style.display = \"none\";\n    this.alertBox.style.height = \"1px\";\n    this.alertBox.style.width = \"1px\";\n    this.alertBox.style.overflow = \"hidden\";\n    this.alertBox.style.zIndex = \"0\";\n    this.iframe = iframer_1.default({\n      src: frameUrl,\n      name: \"venmo-desktop-iframe\",\n      style: {\n        display: \"none\",\n        position: \"fixed\",\n        top: \"0\",\n        bottom: \"0\",\n        right: \"0\",\n        left: \"0\",\n        height: \"100%\",\n        width: \"100%\",\n        zIndex: \"9999999\",\n      },\n      title: \"Venmo Desktop\",\n    });\n    this.bus.addTargetFrame(this.iframe);\n  }\n  VenmoDesktop.prototype.initialize = function () {\n    var _this = this;\n    return new this.Promise(function (resolve) {\n      _this.bus.on(events_1.VENMO_DESKTOP_IFRAME_READY, function () {\n        resolve(_this);\n      });\n      _this.bus.on(\n        events_1.VENMO_DESKTOP_REQUEST_NEW_QR_CODE,\n        function (payload) {\n          var eventName =\n            payload && payload.source === \"rescan\"\n              ? \"venmo.tokenize.desktop.restarted-from-rescan\"\n              : \"venmo.tokenize.desktop.restarted-from-error-view\";\n          _this.sendEvent(eventName, {\n            payment_method_usage: _this.paymentMethodUsage,\n          });\n          _this.startPolling();\n        }\n      );\n      _this.bus.on(events_1.VENMO_DESKTOP_ANALYTICS_EVENT, function (payload) {\n        var metadata = __assign(\n          { payment_method_usage: _this.paymentMethodUsage },\n          payload.metadata || {}\n        );\n        _this.sendEvent(payload.eventName, metadata);\n      });\n      document.body.appendChild(_this.iframe);\n      document.body.appendChild(_this.alertBox);\n    });\n  };\n  VenmoDesktop.prototype.launchDesktopFlow = function () {\n    var _this = this;\n    this.isHidden = false;\n    var promise = new this.Promise(function (resolve, reject) {\n      _this.launchDesktopPromiseRejectFunction = reject;\n      var removeListeners = function () {\n        /* eslint-disable @typescript-eslint/no-use-before-define */\n        _this.bus.off(\n          events_1.VENMO_DESKTOP_CUSTOMER_CANCELED,\n          customerCancelledHandler\n        );\n        _this.bus.off(\n          events_1.VENMO_DESKTOP_UNKNOWN_ERROR,\n          unknownErrorHandler\n        );\n        /* eslint-enable @typescript-eslint/no-use-before-define */\n      };\n      var unknownErrorHandler = function (err) {\n        removeListeners();\n        _this.sendEvent(\"venmo.tokenize.desktop.unknown-error\", {\n          payment_method_usage: _this.paymentMethodUsage,\n        });\n        reject({\n          allowUIToHandleError: false,\n          reason: \"UNKNOWN_ERROR\",\n          err: err,\n        });\n      };\n      var customerCancelledHandler = function () {\n        removeListeners();\n        _this.updateVenmoDesktopPaymentContext(\"CANCELED\");\n        _this.sendEvent(\n          \"venmo.tokenize.desktop.status-change.canceled-from-modal\",\n          {\n            payment_method_usage: _this.paymentMethodUsage,\n          }\n        );\n        reject({\n          allowUIToHandleError: false,\n          reason: \"CUSTOMER_CANCELED\",\n        });\n      };\n      _this.completedHandler = function (payload) {\n        removeListeners();\n        resolve(payload);\n      };\n      _this.bus.on(\n        events_1.VENMO_DESKTOP_CUSTOMER_CANCELED,\n        customerCancelledHandler\n      );\n      _this.bus.on(events_1.VENMO_DESKTOP_UNKNOWN_ERROR, unknownErrorHandler);\n    });\n    this.iframe.style.display = \"block\";\n    this.setAlert(\"Generating a QR code, get your Venmo app ready\");\n    this.iframe.focus();\n    this.startPolling();\n    return promise\n      .then(function (result) {\n        delete _this.venmoContextId;\n        delete _this.launchDesktopPromiseRejectFunction;\n        return result;\n      })\n      .catch(function (err) {\n        delete _this.venmoContextId;\n        delete _this.launchDesktopPromiseRejectFunction;\n        return _this.Promise.reject(err);\n      });\n  };\n  VenmoDesktop.prototype.triggerCompleted = function (result) {\n    var _this = this;\n    if (this.isHidden) {\n      return;\n    }\n    setTimeout(function () {\n      if (_this.completedHandler) {\n        _this.completedHandler(result);\n      }\n      delete _this.completedHandler;\n    }, VISUAL_DELAY_BEFORE_SIGNALLING_COMPLETION);\n  };\n  VenmoDesktop.prototype.triggerRejected = function (err) {\n    if (this.launchDesktopPromiseRejectFunction) {\n      this.launchDesktopPromiseRejectFunction(err);\n    }\n  };\n  VenmoDesktop.prototype.hideDesktopFlow = function () {\n    this.setAlert(\"\");\n    this.iframe.style.display = \"none\";\n    this.bus.emit(events_1.VENMO_DESKTOP_CLOSED_FROM_PARENT);\n    this.isHidden = true;\n  };\n  VenmoDesktop.prototype.displayError = function (message) {\n    if (this.isHidden) {\n      return;\n    }\n    this.bus.emit(events_1.VENMO_DESKTOP_DISPLAY_ERROR, {\n      message: message,\n    });\n    this.setAlert(message);\n  };\n  VenmoDesktop.prototype.displayQRCode = function (id, merchantId) {\n    if (this.isHidden) {\n      return;\n    }\n    this.bus.emit(events_1.VENMO_DESKTOP_DISPLAY_QR_CODE, {\n      id: id,\n      merchantId: merchantId,\n    });\n    this.sendEvent(\"venmo.desktop-qr.display-qr-code.status.presented\", {\n      context_id: this.venmoContextId,\n      payment_method_usage: this.paymentMethodUsage,\n    });\n    this.setAlert(\"To scan the QR code, open your Venmo app\");\n  };\n  VenmoDesktop.prototype.authorize = function () {\n    if (this.isHidden) {\n      return;\n    }\n    this.bus.emit(events_1.VENMO_DESKTOP_AUTHORIZE);\n    this.setAlert(\"Venmo account authorized\");\n  };\n  VenmoDesktop.prototype.authorizing = function () {\n    if (this.isHidden) {\n      return;\n    }\n    this.bus.emit(events_1.VENMO_DESKTOP_AUTHORIZING);\n    this.sendEvent(\"venmo.desktop-qr.display-qr-code.status.authorizing\", {\n      context_id: this.venmoContextId,\n      payment_method_usage: this.paymentMethodUsage,\n    });\n    this.setAlert(\"Authorize on your Venmo app\");\n  };\n  VenmoDesktop.prototype.startPolling = function () {\n    var _this = this;\n    return this.createVenmoDesktopPaymentContext()\n      .then(function (result) {\n        var expiresIn =\n          new Date(result.expiresAt).getTime() -\n          new Date(result.createdAt).getTime();\n        var expiredTime = Date.now() + expiresIn;\n        _this.displayQRCode(result.id, result.merchantId);\n        return _this.pollForStatusChange(result.status, expiredTime);\n      })\n      .then(function (result) {\n        if (!result) {\n          return;\n        }\n        // since we are manually adding a prepended @ sign\n        // we want to make sure that the username does not\n        // start giving us the @ sign up front in the future\n        var username = result.userName || \"\";\n        username = \"@\" + username.replace(\"@\", \"\");\n        _this.triggerCompleted({\n          paymentMethodNonce: result.paymentMethodId,\n          username: username,\n          payerInfo: result.payerInfo,\n          id: _this.venmoContextId || \"\",\n        });\n      })\n      .catch(function (err) {\n        if (err.allowUIToHandleError) {\n          // noop here and let the UI handle the customer error\n          return;\n        }\n        _this.sendEvent(\"venmo.tokenize.desktop.unhandled-error\", {\n          payment_method_usage: _this.paymentMethodUsage,\n        });\n        _this.triggerRejected(err);\n      });\n  };\n  VenmoDesktop.prototype.pollForStatusChange = function (status, expiredTime) {\n    var _this = this;\n    if (!this.venmoContextId) {\n      return this.Promise.resolve();\n    }\n    if (Date.now() > expiredTime) {\n      return this.updateVenmoDesktopPaymentContext(\"EXPIRED\").then(function () {\n        _this.displayError(\"Something went wrong\");\n        _this.sendEvent(\"venmo.tokenize.desktop.status-change.sdk-timeout\", {\n          payment_method_usage: _this.paymentMethodUsage,\n        });\n        return _this.Promise.reject({\n          allowUIToHandleError: true,\n          reason: \"TIMEOUT\",\n        });\n      });\n    }\n\n    return this.lookupVenmoDesktopPaymentContext().then(function (response) {\n      if (!_this.venmoContextId || !response) {\n        return _this.Promise.resolve();\n      }\n\n      var newStatus = response.status;\n      if (newStatus !== status) {\n        status = newStatus;\n        _this.sendEvent(\n          \"venmo.tokenize.desktop.status-change.\" + status.toLowerCase(),\n          {\n            payment_method_usage: _this.paymentMethodUsage,\n          }\n        );\n\n        switch (status) {\n          case \"CREATED\":\n            // noop, no need to do anything here\n            // should never be able to get to this point\n            // but we'll keep it in to enumerate the statuses\n            break;\n          case \"EXPIRED\":\n          case \"FAILED\":\n          case \"CANCELED\":\n            var message =\n              status === \"CANCELED\"\n                ? \"The authorization was canceled\"\n                : \"Something went wrong\";\n            _this.displayError(message);\n            // these are all terminal states, so we end it here\n            return _this.Promise.reject({\n              allowUIToHandleError: true,\n              reason: status,\n            });\n          case \"SCANNED\":\n            _this.authorizing();\n            break;\n          case \"APPROVED\":\n            _this.authorize();\n            return _this.Promise.resolve(response);\n          default:\n          // any other statuses are irrelevant to the polling\n          // and can just be ignored\n        }\n      }\n      return new _this.Promise(function (resolve, reject) {\n        setTimeout(function () {\n          _this\n            .pollForStatusChange(status, expiredTime)\n            .then(resolve)\n            .catch(reject);\n        }, VENMO_DESKTOP_POLLING_INTERVAL);\n      });\n    });\n  };\n  VenmoDesktop.prototype.teardown = function () {\n    this.bus.teardown();\n    if (this.iframe.parentNode) {\n      this.iframe.parentNode.removeChild(this.iframe);\n    }\n    if (this.alertBox.parentNode) {\n      this.alertBox.parentNode.removeChild(this.alertBox);\n    }\n  };\n  VenmoDesktop.prototype.setAlert = function (message) {\n    this.alertBox.style.display = message ? \"block\" : \"none\";\n    this.alertBox.textContent = message;\n  };\n  VenmoDesktop.prototype.createPaymentContextFromGraphqlLegacyQRCodeMutation =\n    function (intent) {\n      return this.apiRequest(queries_1.LEGACY_CREATE_PAYMENT_CONTEXT_QUERY, {\n        input: {\n          environment: this.env,\n          intent: intent,\n        },\n      }).then(function (response) {\n        return response.createVenmoQRCodePaymentContext\n          .venmoQRCodePaymentContext;\n      });\n    };\n  VenmoDesktop.prototype.createPaymentContextFromGraphQL = function (intent) {\n    var _this = this;\n\n    var input = {\n      intent: intent,\n      paymentMethodUsage: this.paymentMethodUsage,\n      venmoRiskCorrelationId: this.riskCorrelationId,\n      customerClient: \"DESKTOP\",\n    };\n\n    if (\n      this.collectCustomerBillingAddress ||\n      this.collectCustomerShippingAddress\n    ) {\n      input.paysheetDetails = {};\n    }\n\n    if (this.collectCustomerBillingAddress) {\n      input.paysheetDetails.collectCustomerBillingAddress =\n        this.collectCustomerBillingAddress;\n    }\n\n    if (this.collectCustomerShippingAddress) {\n      input.paysheetDetails.collectCustomerShippingAddress =\n        this.collectCustomerShippingAddress;\n    }\n\n    if (this.profileId) {\n      input.merchantProfileId = this.profileId;\n    }\n    if (this.displayName) {\n      input.displayName = this.displayName;\n    }\n\n    _this.sendEvent(\"venmo.desktop-qr.create-payment-context.started\", {\n      payment_method_usage: _this.paymentMethodUsage,\n    });\n\n    return this.apiRequest(queries_1.CREATE_PAYMENT_CONTEXT_QUERY, {\n      input: input,\n    })\n      .then(function (response) {\n        _this.sendEvent(\"venmo.desktop-qr.create-payment-context.succeeded\", {\n          context_id: response.createVenmoPaymentContext.venmoPaymentContext.id,\n          payment_method_usage: _this.paymentMethodUsage,\n        });\n        return response.createVenmoPaymentContext.venmoPaymentContext;\n      })\n      .catch(function (err) {\n        _this.sendEvent(\"venmo.desktop-qr.create-payment-context.failed\", {\n          payment_method_usage: _this.paymentMethodUsage,\n        });\n        throw err;\n      });\n  };\n  VenmoDesktop.prototype.createVenmoDesktopPaymentContext = function () {\n    var _this = this;\n    var contextPromise = this.shouldUseLegacyQRCodeMutation\n      ? this.createPaymentContextFromGraphqlLegacyQRCodeMutation(\"PAY_FROM_APP\")\n      : this.createPaymentContextFromGraphQL(\"PAY_FROM_APP\");\n    return contextPromise.then(function (context) {\n      _this.venmoContextId = context.id;\n      var merchantId = _this.profileId || context.merchantId;\n      return {\n        id: context.id,\n        status: context.status,\n        merchantId: merchantId,\n        createdAt: context.createdAt,\n        expiresAt: context.expiresAt,\n      };\n    });\n  };\n  VenmoDesktop.prototype.updateVenmoDesktopPaymentContext = function (\n    status,\n    additionalOptions\n  ) {\n    if (additionalOptions === void 0) {\n      additionalOptions = {};\n    }\n    if (!this.venmoContextId) {\n      return this.Promise.resolve();\n    }\n    var data = {\n      input: __assign(\n        { id: this.venmoContextId, status: status },\n        additionalOptions\n      ),\n    };\n    var query = this.shouldUseLegacyQRCodeMutation\n      ? queries_1.LEGACY_UPDATE_PAYMENT_CONTEXT_QUERY\n      : queries_1.UPDATE_PAYMENT_CONTEXT_QUERY;\n    return this.apiRequest(query, data).then(function () {\n      // noop so we can resolve without any data to match the type\n    });\n  };\n  VenmoDesktop.prototype.lookupVenmoDesktopPaymentContext = function () {\n    var _this = this;\n    if (!_this.venmoContextId) {\n      return _this.Promise.resolve();\n    }\n\n    _this.sendEvent(\"venmo.desktop-qr.query-payment-context.started\", {\n      context_id: _this.venmoContextId,\n      payment_method_usage: _this.paymentMethodUsage,\n    });\n\n    var query = _this.shouldUseLegacyQRCodeMutation\n      ? queries_1.LEGACY_VENMO_PAYMENT_CONTEXT_STATUS_QUERY\n      : queries_1.VENMO_PAYMENT_CONTEXT_STATUS_QUERY;\n    return _this\n      .apiRequest(query, {\n        id: _this.venmoContextId,\n      })\n      .then(function (response) {\n        _this.sendEvent(\"venmo.desktop-qr.query-payment-context.succeeded\", {\n          context_id: _this.venmoContextId,\n          payment_method_usage: _this.paymentMethodUsage,\n        });\n        return response.node;\n      })\n      .catch(function (err) {\n        _this.sendEvent(\"venmo.desktop-qr.query-payment-context.failed\", {\n          context_id: _this.venmoContextId,\n          payment_method_usage: _this.paymentMethodUsage,\n        });\n        throw err;\n      });\n  };\n  return VenmoDesktop;\n})();\nexports.default = VenmoDesktop;\n\n},{\"../shared/events\":256,\"./queries\":250,\"@braintree/iframer\":35,\"@braintree/uuid\":39,\"framebus\":54}],252:[function(_dereq_,module,exports){\n\"use strict\";\n/** @module braintree-web/venmo */\n\nvar analytics = _dereq_(\"../lib/analytics\");\nvar basicComponentVerification = _dereq_(\"../lib/basic-component-verification\");\nvar createDeferredClient = _dereq_(\"../lib/create-deferred-client\");\nvar createAssetsUrl = _dereq_(\"../lib/create-assets-url\");\nvar errors = _dereq_(\"./shared/errors\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar Venmo = _dereq_(\"./venmo\");\nvar supportsVenmo = _dereq_(\"./shared/supports-venmo\");\nvar VERSION = \"3.145.0\";\nvar browserDetection = _dereq_(\"./shared/browser-detection\");\n\n/**\n * @typedef {object} Venmo~lineItem\n * @property {number} quantity Number of units of the item purchased. This value must be a whole number and can't be negative or zero.\n * @property {string} unitAmount Per-unit price of the item. Can include up to 2 decimal places. This value can't be negative or zero.\n * @property {string} name Item name. Maximum 127 characters.\n * @property {string} kind Indicates whether the line item is a debit (sale) or credit (refund) to the customer. Accepted values: `debit` and `credit`.\n * @property {?string} unitTaxAmount Per-unit tax price of the item. Can include up to 2 decimal places. This value can't be negative or zero.\n * @property {?string} description Item description. Maximum 127 characters.\n * @property {?string} productCode Product or UPC code for the item. Maximum 127 characters.\n * @property {?string} url The URL to product information.\n */\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {boolean} [options.allowNewBrowserTab=true] This should be set to false if your payment flow requires returning to the same tab, e.g. single page applications. Doing so causes {@link Venmo#isBrowserSupported|isBrowserSupported} to return true only for mobile web browsers that support returning from the Venmo app to the same tab.\n * @param {boolean} [options.allowWebviews=true] This should be set to false if your payment flow does not occur from within a webview that you control. Doing so causes {@link Venmo#isBrowserSupported|isBrowserSupported} to return true only for mobile web browsers that are not webviews.\n * @param {boolean} [options.ignoreHistoryChanges=false] When the Venmo app returns to the website, it will modify the hash of the url to include data about the tokenization. By default, the SDK will put the state of the hash back to where it was before the change was made. Pass `true` to handle the hash change instead of the SDK.\n * @param {string} [options.profileId] The Venmo profile ID to be used during payment authorization. Customers will see the business name and logo associated with this Venmo profile, and it will show up in the Venmo app as a \"Connected Merchant\". Venmo profile IDs can be found in the Braintree Control Panel. Omitting this value will use the default Venmo profile.\n * @param {string} [options.deepLinkReturnUrl] An override for the URL that the Venmo iOS app opens to return from an app switch.\n * @param {boolean} [options.requireManualReturn=false] When `true`, the customer will have to manually switch back to the browser/webview that is presenting Venmo to complete the payment.\n * @param {string} [options.riskCorrelationId] Pass a custom risk correlation id when creating a Venmo client.\n * @param {boolean} [options.useRedirectForIOS=false] Normally, the Venmo flow is launched using `window.open` and the Venmo app intercepts that call and opens the Venmo app instead. If the customer does not have the Venmo app installed, it opens the Venmo website in a new window and instructs the customer to install the app.\n\n * In iOS webviews and Safari View Controllers (a webview-like environment which is indistinguishable from Safari for JavaScript environments), this call to `window.open` will always fail to app switch to Venmo, resulting instead in a white screen. Because of this, an alternate approach is required to launch the Venmo flow.\n *\n * When `useRedirectForIOS` is `true` and the Venmo flow is started in an iOS environment, the Venmo flow will be started by setting `window.location.href` to the Venmo website (which will still be intercepted by the Venmo app and should be the same behavior as if `window.open` was called). However, if the customer does not have the Venmo app installed, the merchant page will instead be replaced with the Venmo website and the customer will need to use the browser's back button to return to the merchant's website. Ensure that your customer's checkout information will not be lost if they are navigated away from the website and return using the browser back button.\n *\n * Due to a bug in iOS's implementation of `window.open` in iOS webviews and Safari View Controllers, if `useRedirectForIOS` is not set to `true` and the flow is launched from an iOS webview or Safari View Controller, the customer will be presented with a blank screen, halting the flow and leaving the customer unable to return to the merchant's website. Setting `useRedirectForIOS` to `true` will allow the flow to continue, but the Venmo app will be unable to return back to the webview/Safari View Controller. It will instead open the merchant's site in a new window in the customer's browser, which means the merchant site must be able to process the Venmo payment. If the SDK is configured with `allowNewBrowserTab = false`, it is unlikely that the website is set up to process the Venmo payment from a new window.\n *\n * If processing the payment from a new window is not possible, use this flag in conjunction with `requireManualReturn` so that the customer may start the flow from a webview/Safari View Controller or their Safari browser and manually return to the place that originated the flow once the Venmo app has authorized the payment and instructed them to do so.\n * @param {string} [options.paymentMethodUsage] The intended usage for the Venmo payment method nonce. Possible options are:\n * * single_use - intended as a one time transaction\n * * multi_use - intended to be vaulted and used for multiple transactions\n * @param {string} [options.displayName] The business name that will be displayed in the Venmo app payment approval screen. Only applicable when used with `paymentMethodUsage` and used by merchants onboarded as PayFast channel partners.\n * @param {boolean} [options.allowDesktop] Used to support desktop users. When enabled, the default mode is to render a scannable QR-code customers scan with their phone's to approve via the mobile app.\n * @param {boolean} [options.allowDesktopWebLogin=false] When `true`, the customer will authorize payment via a window popup that allows them to sign in to their Venmo account. This is used explicitly for customers operating from desktop browsers wanting to avoid the QR Code flow.\n * @param {boolean} [options.mobileWebFallBack] Use this option when you want to use a web-login experience, such as if on mobile and the Venmo app isn't installed.\n * @param {string} [options.styleCspNonce] specify a nonce for style code used by Venmo. This option requires either the option `allowDesktopWebLogin=true` or `mobileWebFallback=true`. This nonce should also appear in the `style-src` section of the content security policy. See more about nonces [here]{https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP#nonces}.\n * @param {boolean} [options.allowAndroidRecreation=true] This flag is for when your integration uses the [Android PopupBridge](https://github.com/braintree/popup-bridge-android). Setting this flag to false will avoid a page refresh when returning to your page after payment authorization. If not specified, it defaults to true and the Android activity will be recreated, resulting in a page refresh.\n * @param {boolean} [options.allowNonDefaultBrowsers=true] When `true`, allows Venmo to be used in mobile browsers outside platform defaults (e.g. Chrome on iOS, Firefox on Android).\n * @param {boolean} [options.cancelOnReturnToBrowser=false] When `true`, the payment flow will be cancelled when the user returns to the browser before completing payment.\n * @param {boolean} [options.collectCustomerBillingAddress] When `true`, the customer's billing address will be collected and displayed on the Venmo paysheet (provided the Enriched Customer Data checkbox is also enabled for the merchant account).\n * @param {boolean} [options.collectCustomerShippingAddress] When `true`, the customer's shipping address will be collected and displayed on the Venmo paysheet (provided the Enriched Customer Data checkbox is also enabled for the merchant account).\n * @param {boolean} [options.isFinalAmount=false] When `true`, it denotes that the purchase amount (`totalAmount`) is final and will not change.\n * @param {lineItem[]} [options.lineItems] The {@link Venmo~lineItem|line items} belonging to the transaction. It can include up to 249 line items.\n * @param {string} [options.subTotalAmount] The subtotal amount of the transaction, excluding taxes, discounts, and shipping.\n * @param {string} [options.discountAmount] The total discount amount applied on the transaction.\n * @param {string} [options.shippingAmount] Shipping amount to be charged for the transaction.\n * @param {string} [options.taxAmount] The total tax amount applied to the transaction. This value can't be negative or zero.\n * @param {string} [options.totalAmount] The grand total amount of the transaction.\n *\n * Note: This flow currently requires a full page redirect, which means to utilize this flow your page will need to be able to handle the checkout session across different pages.\n * @param {callback} [callback] The second argument, `data`, is the {@link Venmo} instance. If no callback is provided, `create` returns a promise that resolves with the {@link Venmo} instance.\n * @example\n * braintree.venmo.create({\n *   client: clientInstance\n * }).then(function (venmoInstance) {\n *   // venmoInstance is ready to be used.\n * }).catch(function (createErr) {\n *   console.error('Error creating Venmo instance', createErr);\n * });\n * @example <caption>Allow desktop flow to be used</caption>\n * braintree.venmo.create({\n *   client: clientInstance,\n *   allowDesktop: true\n * }).then(function (venmoInstance) {\n *   // venmoInstance is ready to be used.\n * }).catch(function (createErr) {\n *   console.error('Error creating Venmo instance', createErr);\n * });\n * @returns {(Promise|void)} Returns the Venmo instance.\n */\nfunction create(options) {\n  var name = \"Venmo\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      var createPromise, instance;\n      var incognitoPromise = browserDetection.isIncognito().catch(function () {\n        return { isPrivate: false, browserName: \"unknown\" };\n      });\n\n      if (options.profileId && typeof options.profileId !== \"string\") {\n        return Promise.reject(\n          new BraintreeError(errors.VENMO_INVALID_PROFILE_ID)\n        );\n      }\n\n      if (\n        options.deepLinkReturnUrl &&\n        typeof options.deepLinkReturnUrl !== \"string\"\n      ) {\n        return Promise.reject(\n          new BraintreeError(errors.VENMO_INVALID_DEEP_LINK_RETURN_URL)\n        );\n      }\n      if (\n        options.riskCorrelationId &&\n        typeof options.riskCorrelationId !== \"string\"\n      ) {\n        return Promise.reject(\n          new BraintreeError(errors.VENMO_INVALID_RISK_CORRELATION_ID)\n        );\n      }\n\n      createPromise = createDeferredClient\n        .create({\n          authorization: options.authorization,\n          client: options.client,\n          debug: options.debug,\n          assetsUrl: createAssetsUrl.create(options.authorization),\n          name: name,\n        })\n        .then(function (client) {\n          var configuration = client.getConfiguration();\n\n          options.client = client;\n\n          if (!configuration.gatewayConfiguration.payWithVenmo) {\n            return Promise.reject(new BraintreeError(errors.VENMO_NOT_ENABLED));\n          }\n\n          return client;\n        });\n\n      return Promise.all([createPromise, incognitoPromise]).then(\n        function (results) {\n          var isIncognito = results[1];\n          options._isIncognito = isIncognito.isPrivate;\n\n          options.createPromise = createPromise;\n          instance = new Venmo(options);\n\n          analytics.sendEvent(createPromise, \"venmo.initialized\");\n\n          return instance;\n        }\n      );\n    });\n}\n\n/**\n * @static\n * @function isBrowserSupported\n * @param {object} [options] browser support options:\n * @param {boolean} [options.allowNewBrowserTab=true] This should be set to false if your payment flow requires returning to the same tab, e.g. single page applications.\n * @param {boolean} [options.allowNonDefaultBrowsers=true] This should be set to false if your payment flow requires disabling support for non-default browsers on iOS and Android.\n * @param {boolean} [options.allowWebviews=true] This should be set to false if your payment flow does not occur from within a webview that you control.\n * @example\n * if (braintree.venmo.isBrowserSupported()) {\n *   // set up Venmo\n * }\n * @example <caption>Explicitly require browser support returning to the same tab</caption>\n * if (braintree.venmo.isBrowserSupported({\n *   allowNewBrowserTab: false\n * })) {\n *   // set up Venmo\n * }\n * @example <caption>Explicitly disable non-default browser support</caption>\n * if (braintree.venmo.isBrowserSupported({\n *   allowNonDefaultBrowsers: false\n * })) {\n *   // set up Venmo\n * }\n * @example <caption>Explicitly set webviews as disallowed browsers</caption>\n * if (braintree.venmo.isBrowserSupported({\n *   allowWebviews: false\n * })) {\n *   // set up Venmo\n * }\n * @returns {boolean} Whether or not the browser supports Venmo.\n */\nfunction isBrowserSupported(options) {\n  return supportsVenmo.isBrowserSupported(options);\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  isBrowserSupported: isBrowserSupported,\n  /**\n   * @description The current version of the SDK, i.e. `{@pkg version}`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/analytics\":143,\"../lib/basic-component-verification\":147,\"../lib/braintree-error\":149,\"../lib/create-assets-url\":153,\"../lib/create-deferred-client\":155,\"./shared/browser-detection\":253,\"./shared/errors\":255,\"./shared/supports-venmo\":258,\"./venmo\":260,\"@braintree/wrap-promise\":43}],253:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar isAndroid = _dereq_(\"@braintree/browser-detection/is-android\");\nvar isChrome = _dereq_(\"@braintree/browser-detection/is-chrome\");\nvar isIos = _dereq_(\"@braintree/browser-detection/is-ios\");\nvar isIosSafari = _dereq_(\"@braintree/browser-detection/is-ios-safari\");\nvar isIosWebview = _dereq_(\"@braintree/browser-detection/is-ios-webview\");\nvar isIncognito;\n\ntry {\n  isIncognito = _dereq_(\"@braintree/browser-detection/is-incognito\");\n  // eslint-disable-next-line no-unused-vars\n} catch (e) {\n  isIncognito = function () {\n    return Promise.resolve({\n      isPrivate: false,\n      browserName: \"unknown\",\n    });\n  };\n}\n\nfunction isAndroidWebview() {\n  return (\n    isAndroid() && window.navigator.userAgent.toLowerCase().indexOf(\"wv\") > -1\n  );\n}\n\nfunction doesNotSupportWindowOpenInIos() {\n  if (!isIos()) {\n    return false;\n  }\n\n  return isIosWebview() || !isIosSafari();\n}\n\nfunction isFacebookOwnedBrowserOnAndroid() {\n  var ua = window.navigator.userAgent.toLowerCase();\n\n  // Huawei's Facebook useragent does not include Android\n  if (ua.indexOf(\"huawei\") > -1 && ua.indexOf(\"fban\") > -1) {\n    return true;\n  }\n\n  if (!isAndroid()) {\n    return false;\n  }\n\n  return ua.indexOf(\"fb_iab\") > -1 || ua.indexOf(\"instagram\") > -1;\n}\n\nfunction isIosChrome() {\n  return isIos() && isChrome();\n}\n\nfunction isWebview() {\n  return isAndroidWebview() || isIosWebview();\n}\n\nmodule.exports = {\n  isAndroid: isAndroid,\n  isAndroidWebview: isAndroidWebview,\n  isChrome: isChrome,\n  isIos: isIos,\n  isIosChrome: isIosChrome,\n  isIosSafari: isIosSafari,\n  isIosWebview: isIosWebview,\n  isWebview: isWebview,\n  isFacebookOwnedBrowserOnAndroid: isFacebookOwnedBrowserOnAndroid,\n  doesNotSupportWindowOpenInIos: doesNotSupportWindowOpenInIos,\n  isIncognito: isIncognito,\n};\n\n},{\"@braintree/browser-detection/is-android\":22,\"@braintree/browser-detection/is-chrome\":24,\"@braintree/browser-detection/is-incognito\":26,\"@braintree/browser-detection/is-ios\":30,\"@braintree/browser-detection/is-ios-safari\":27,\"@braintree/browser-detection/is-ios-webview\":28}],254:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * Venmo shared constants\n * @typedef {object} Venmo~venmoConstants\n * @ignore\n * @property {string} VENMO_APP_OR_MOBILE_AUTH_URL A deep-linked url that will open the Venmo app if installed, or navigate to a Venmo web-login experience if the Venmo app is not present.\n * @property {string} VENMO_MOBILE_APP_AUTH_ONLY_URL A deep-linked url that leads to a Venmo dead-end page if the Venmo app is not installed (page asks customer to download the app).\n * @property {string} VENMO_WEB_LOGIN_URL A non-deeplinked url that leads to a Venmo login page. For use when explicitly wanting to avoid using the Venmo mobile app via a deep-linked url.\n * @property {string} VENMO_WEB_LOGIN_SANDBOX_URL A non-deeplinked url that leads to a Venmo *sandbox* login page. For use when explicitly wanting to avoid using the Venmo mobile app via a deep-linked url.\n */\nmodule.exports = {\n  DOCUMENT_VISIBILITY_CHANGE_EVENT_DELAY: 500,\n  DEFAULT_PROCESS_RESULTS_DELAY: 1000,\n  VENMO_APP_OR_MOBILE_AUTH_URL: \"https://venmo.com/go/checkout\",\n  VENMO_MOBILE_APP_AUTH_ONLY_URL: \"https://venmo.com/braintree/checkout\",\n  VENMO_WEB_LOGIN_URL: \"https://account.venmo.com/go/web\",\n  VENMO_WEB_LOGIN_SANDBOX_URL: \"https://account.ext.live.venmo.com/go/web\",\n};\n\n},{}],255:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Venmo - Creation Error Codes\n * @description Errors that occur when [creating the Venmo component](./module-braintree-web_venmo.html#.create).\n * @property {MERCHANT} VENMO_NOT_ENABLED Occurs when Venmo is not enabled on the Braintree control panel.\n * @property {MERCHANT} VENMO_INVALID_PROFILE_ID Occurs when Venmo is initialized with a profile id, but it is invalid.\n * @property {MERCHANT} VENMO_INVALID_RISK_CORRELATION_ID Occurs when Venmo is initialized with a riskCorrelationId (A.K.A. a clientMetadataId), but it is invalid.\n * @property {MERCHANT} VENMO_INVALID_DEEP_LINK_RETURN_URL Occurs when Venmo is initialized with a deep link return URL, but it is invalid.\n * @property {UNKNOWN} VENMO_MOBILE_POLLING_SETUP_FAILED __Deprecated__ No longer returned. Use `VENMO_MOBILE_PAYMENT_CONTEXT_SETUP_FAILED` instead.\n * @property {UNKNOWN} VENMO_MOBILE_PAYMENT_CONTEXT_SETUP_FAILED Occurs when the request to set up a Venmo Payment Context object fails.\n */\n\n/**\n * @name BraintreeError.Venmo - tokenize Error Codes\n * @description Errors that occur when using the [`tokenize` method](./Venmo.html#tokenize).\n * @property {CUSTOMER} VENMO_APP_CANCELED Occurs when customer cancels flow from the Venmo app.\n * @property {UNKNOWN} VENMO_APP_FAILED Occurs when tokenization fails.\n * @property {CUSTOMER} VENMO_CANCELED Occurs when customer cancels the flow or Venmo app is not available.\n * @property {CUSTOMER} VENMO_CUSTOMER_CANCELED Occurs when customer cancels the flow.\n * @property {CUSTOMER} VENMO_DESKTOP_CANCELED Occurs when customer cancels the Venmo Desktop flow by closing the modal.\n * @property {UNKNOWN} VENMO_DESKTOP_UNKNOWN_ERROR Occurs when an unknown error causes the Venmo Desktop flow to fail.\n * @property {UNKNOWN} VENMO_MOBILE_POLLING_TOKENIZATION_NETWORK_ERROR Occurs when an unknown network error causes the mobile polling process to fail.\n * @property {CUSTOMER} VENMO_MOBILE_POLLING_TOKENIZATION_EXPIRED Occurs when the polling has expired and the payment cannot be completed.\n * @property {CUSTOMER} VENMO_MOBILE_POLLING_TOKENIZATION_CANCELED Occurs when the polling operation is canceled by the customer.\n * @property {CUSTOMER} VENMO_MOBILE_POLLING_TOKENIZATION_TIMEOUT Occurs when customer takes too long to complete payment.\n * @property {UNKNOWN} VENMO_MOBILE_POLLING_TOKENIZATION_NO_CONTEXT_ID Occurs when payment context ID is not available.\n * @property {UNKNOWN} VENMO_MOBILE_POLLING_TOKENIZATION_FAILED Occurs if there is an unknown error during the mobile polling process.\n * @property {NETWORK} VENMO_NETWORK_ERROR Occurs when a network error causes a request to fail.\n * @property {MERCHANT} VENMO_TOKENIZATION_CANCELED_BY_MERCHANT Occurs when `cancelTokenization` is called while tokenization is in progress.\n * @property {UNKNOWN} VENMO_TOKENIZATION_FAILED Occurs when there is an unknown error during the web login experience.\n * @property {MERCHANT} VENMO_TOKENIZATION_REQUEST_ACTIVE Occurs when `tokenize` is called when the flow is already in progress.\n * @property {MERCHANT} VENMO_TOKENIZATION_REQUEST_NOT_ACTIVE Occurs when `cancelTokenization` is called when the flow is not in progress.\n * @property {MERCHANT} VENMO_ECD_DISABLED Occurs when the merchant tries to access customer details without enabling Enriched Customer Data.\n */\n\nvar BraintreeError = _dereq_(\"../../lib/braintree-error\");\n\nmodule.exports = {\n  VENMO_NOT_ENABLED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VENMO_NOT_ENABLED\",\n    message: \"Venmo is not enabled for this merchant.\",\n  },\n  VENMO_TOKENIZATION_REQUEST_ACTIVE: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VENMO_TOKENIZATION_REQUEST_ACTIVE\",\n    message: \"Another tokenization request is active.\",\n  },\n  VENMO_TOKENIZATION_REQUEST_NOT_ACTIVE: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VENMO_TOKENIZATION_REQUEST_NOT_ACTIVE\",\n    message: \"No tokenization in progress.\",\n  },\n  VENMO_APP_FAILED: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"VENMO_APP_FAILED\",\n    message: \"Venmo app encountered a problem.\",\n  },\n  VENMO_APP_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"VENMO_APP_CANCELED\",\n    message: \"Venmo app authorization was canceled.\",\n  },\n  VENMO_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"VENMO_CANCELED\",\n    message:\n      \"User canceled Venmo authorization, or Venmo app is not available.\",\n  },\n  VENMO_CUSTOMER_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"VENMO_CUSTOMER_CANCELED\",\n    message: \"User canceled Venmo authorization.\",\n  },\n  VENMO_NETWORK_ERROR: {\n    type: BraintreeError.types.NETWORK,\n    code: \"VENMO_NETWORK_ERROR\",\n    message: \"Something went wrong making the request\",\n  },\n  VENMO_DESKTOP_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"VENMO_DESKTOP_CANCELED\",\n    message:\n      \"User canceled Venmo authorization by closing the Venmo Desktop modal.\",\n  },\n  VENMO_TOKENIZATION_CANCELED_BY_MERCHANT: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VENMO_TOKENIZATION_CANCELED_BY_MERCHANT\",\n    message: \"The Venmo tokenization was canceled by the merchant.\",\n  },\n  VENMO_DESKTOP_UNKNOWN_ERROR: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"VENMO_DESKTOP_UNKNOWN_ERROR\",\n    message: \"Something went wrong with the Venmo Desktop flow.\",\n  },\n  VENMO_MOBILE_PAYMENT_CONTEXT_SETUP_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"VENMO_MOBILE_PAYMENT_CONTEXT_SETUP_FAILED\",\n    message: \"Something went wrong creating the Venmo Payment Context.\",\n  },\n  VENMO_MOBILE_POLLING_TOKENIZATION_NETWORK_ERROR: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"VENMO_MOBILE_POLLING_TOKENIZATION_NETWORK_ERROR\",\n    message: \"Something went wrong during mobile polling.\",\n  },\n  VENMO_MOBILE_POLLING_TOKENIZATION_EXPIRED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"VENMO_MOBILE_POLLING_TOKENIZATION_EXPIRED\",\n    message: \"The Venmo authorization request is expired.\",\n  },\n  VENMO_MOBILE_POLLING_TOKENIZATION_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"VENMO_MOBILE_POLLING_TOKENIZATION_CANCELED\",\n    message: \"The Venmo authorization was canceled\",\n  },\n  VENMO_MOBILE_POLLING_TOKENIZATION_TIMEOUT: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"VENMO_MOBILE_POLLING_TOKENIZATION_TIMEOUT\",\n    message: \"Customer took too long to authorize Venmo payment.\",\n  },\n  VENMO_MOBILE_POLLING_TOKENIZATION_NO_CONTEXT_ID: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"VENMO_MOBILE_POLLING_TOKENIZATION_NO_CONTEXT_ID\",\n    message: \"No Venmo payment context ID available.\",\n  },\n  VENMO_MOBILE_POLLING_TOKENIZATION_FAILED: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"VENMO_MOBILE_POLLING_TOKENIZATION_FAILED\",\n    message: \"The Venmo authorization failed.\",\n  },\n  VENMO_INVALID_PROFILE_ID: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VENMO_INVALID_PROFILE_ID\",\n    message: \"Venmo profile ID is invalid.\",\n  },\n  VENMO_INVALID_DEEP_LINK_RETURN_URL: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VENMO_INVALID_DEEP_LINK_RETURN_URL\",\n    message: \"Venmo deep link return URL is invalid.\",\n  },\n  VENMO_INVALID_RISK_CORRELATION_ID: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VENMO_INVALID_RISK_CORRELATION_ID\",\n    message: \"Venmo risk correlation ID is invalid.\",\n  },\n  VENMO_TOKENIZATION_FAILED: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"VENMO_TOKENIZATION_FAILED\",\n    message: \"Venmo encountered a problem\",\n  },\n  VENMO_ECD_DISABLED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"ECD_DISABLED\",\n    message:\n      \"Cannot collect customer data when ECD is disabled. Enable this feature in the Control Panel to collect this data.\",\n  },\n};\n\n},{\"../../lib/braintree-error\":149}],256:[function(_dereq_,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.VENMO_DESKTOP_UNKNOWN_ERROR =\n  exports.VENMO_DESKTOP_REQUEST_NEW_QR_CODE =\n  exports.VENMO_DESKTOP_CLOSED_FROM_PARENT =\n  exports.VENMO_DESKTOP_IFRAME_READY =\n  exports.VENMO_DESKTOP_DISPLAY_QR_CODE =\n  exports.VENMO_DESKTOP_DISPLAY_ERROR =\n  exports.VENMO_DESKTOP_CUSTOMER_CANCELED =\n  exports.VENMO_DESKTOP_AUTHORIZING =\n  exports.VENMO_DESKTOP_AUTHORIZE =\n  exports.VENMO_DESKTOP_AUTHORIZATION_TIMED_OUT =\n  exports.VENMO_DESKTOP_ANALYTICS_EVENT =\n    void 0;\nexports.VENMO_DESKTOP_AUTHORIZATION_TIMED_OUT =\n  \"VENMO_DESKTOP_AUTHORIZATION_TIMED_OUT\";\nexports.VENMO_DESKTOP_AUTHORIZE = \"VENMO_DESKTOP_AUTHORIZE\";\nexports.VENMO_DESKTOP_AUTHORIZING = \"VENMO_DESKTOP_AUTHORIZING\";\nexports.VENMO_DESKTOP_CUSTOMER_CANCELED = \"VENMO_DESKTOP_CUSTOMER_CANCELED\";\nexports.VENMO_DESKTOP_DISPLAY_ERROR = \"VENMO_DESKTOP_DISPLAY_ERROR\";\nexports.VENMO_DESKTOP_DISPLAY_QR_CODE = \"VENMO_DESKTOP_DISPLAY_QR_CODE\";\nexports.VENMO_DESKTOP_IFRAME_READY = \"VENMO_DESKTOP_IFRAME_READY\";\nexports.VENMO_DESKTOP_CLOSED_FROM_PARENT = \"VENMO_DESKTOP_CLOSED_FROM_PARENT\";\nexports.VENMO_DESKTOP_REQUEST_NEW_QR_CODE = \"VENMO_DESKTOP_REQUEST_NEW_QR_CODE\";\nexports.VENMO_DESKTOP_UNKNOWN_ERROR = \"VENMO_DESKTOP_UNKNOWN_ERROR\";\nexports.VENMO_DESKTOP_ANALYTICS_EVENT = \"VENMO_DESKTOP_ANALYTICS_EVENT\";\n\n},{}],257:[function(_dereq_,module,exports){\n\"use strict\";\nvar venmoConstants = _dereq_(\"./constants\");\n\nfunction getVenmoUrl(options) {\n  if (options.useAllowDesktopWebLogin) {\n    if (\n      options.enableVenmoSandbox &&\n      options.environment &&\n      options.environment !== \"production\"\n    ) {\n      return venmoConstants.VENMO_WEB_LOGIN_SANDBOX_URL;\n    }\n    return venmoConstants.VENMO_WEB_LOGIN_URL;\n  }\n\n  if (options.mobileWebFallBack) {\n    return venmoConstants.VENMO_APP_OR_MOBILE_AUTH_URL;\n  }\n\n  return venmoConstants.VENMO_MOBILE_APP_AUTH_ONLY_URL;\n}\n\nmodule.exports = getVenmoUrl;\n\n},{\"./constants\":254}],258:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar browserDetection = _dereq_(\"./browser-detection\");\nvar inIframe = _dereq_(\"../../lib/in-iframe\");\n\nfunction _parseOptions(options) {\n  options = options || {};\n\n  return {\n    // NEXT_MAJOR_VERSION allowDesktop will default to true, but can be opted out\n    merchantAllowsDesktopBrowsers:\n      (options.allowDesktopWebLogin || options.allowDesktop) === true,\n\n    merchantAllowsReturningToNewBrowserTab: options.hasOwnProperty(\n      \"allowNewBrowserTab\"\n    )\n      ? options.allowNewBrowserTab\n      : true,\n\n    merchantAllowsNonDefaultBrowsers: options.hasOwnProperty(\n      \"allowNonDefaultBrowsers\"\n    )\n      ? options.allowNonDefaultBrowsers\n      : true,\n    // NEXT_MAJOR_VERSION webviews are not supported, except for the case where\n    // the merchant themselves is presenting venmo in a webview using the deep\n    // link url to get back to their app. For the next major version, we should\n    // just not have this option and instead require the merchant to determine\n    // if the venmo button should be displayed when presenting it in the\n    // merchant's app via a webview.\n    merchantAllowsWebviews: options.hasOwnProperty(\"allowWebviews\")\n      ? options.allowWebviews\n      : true,\n  };\n}\n\nfunction _getBrowserInfo() {\n  var isAndroid = browserDetection.isAndroid();\n  var isAndroidChrome = isAndroid && browserDetection.isChrome();\n  var isIos = browserDetection.isIos();\n  var isIosSafari = browserDetection.isIosSafari();\n  var isMobileDevice = isAndroid || isIos;\n  var isMobileDeviceThatSupportsReturnToSameTab =\n    isIosSafari || isAndroidChrome;\n  var isWebview =\n    browserDetection.isAndroidWebview() || browserDetection.isIosWebview();\n\n  return {\n    isAndroid: isAndroid,\n    isAndroidChrome: isAndroidChrome,\n    isIos: isIos,\n    isIosSafari: isIosSafari,\n    isMobileDevice: isMobileDevice,\n    isMobileDeviceThatSupportsReturnToSameTab:\n      isMobileDeviceThatSupportsReturnToSameTab,\n    isWebview: isWebview,\n  };\n}\n\nfunction _isUnsupportedMobileBrowser(parsedOptions, browserInfo) {\n  // Venmo only works on iOS Chrome when the\n  // button is not rendered in an iFrame and\n  // allowNewBrowserTab is set to true\n  var merchantAllowsIosChrome =\n    (parsedOptions.merchantAllowsNonDefaultBrowsers ||\n      parsedOptions.merchantAllowsReturningToNewBrowserTab) &&\n    !inIframe();\n\n  if (merchantAllowsIosChrome && browserDetection.isIosChrome()) {\n    return false;\n  }\n\n  if (browserInfo.isIos && !browserInfo.isIosSafari) {\n    return !parsedOptions.merchantAllowsReturningToNewBrowserTab;\n  }\n\n  if (browserInfo.isAndroid && !browserInfo.isAndroidChrome) {\n    return !parsedOptions.merchantAllowsReturningToNewBrowserTab;\n  }\n\n  return browserDetection.isFacebookOwnedBrowserOnAndroid();\n}\n\nfunction _isUnsupportedWebview(parsedOptions, browserInfo) {\n  return !parsedOptions.merchantAllowsWebviews && browserInfo.isWebview;\n}\n\nfunction isNonDefaultBrowser() {\n  var browserInfo = _getBrowserInfo();\n  return (\n    browserInfo.isMobileDevice &&\n    !browserInfo.isIosSafari &&\n    !browserInfo.isAndroidChrome\n  );\n}\n\nfunction isBrowserSupported(options) {\n  var parsedOptions = _parseOptions(options);\n  var browserInfo = _getBrowserInfo();\n\n  if (\n    isNonDefaultBrowser() &&\n    !parsedOptions.merchantAllowsNonDefaultBrowsers\n  ) {\n    return false;\n  }\n\n  if (_isUnsupportedWebview(parsedOptions, browserInfo)) {\n    return false;\n  }\n\n  if (_isUnsupportedMobileBrowser(parsedOptions, browserInfo)) {\n    return false;\n  }\n\n  if (!browserInfo.isMobileDevice) {\n    return parsedOptions.merchantAllowsDesktopBrowsers;\n  }\n\n  return true;\n}\n\nmodule.exports = {\n  isBrowserSupported: isBrowserSupported,\n  isNonDefaultBrowser: isNonDefaultBrowser,\n};\n\n},{\"../../lib/in-iframe\":176,\"./browser-detection\":253}],259:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar frameService = _dereq_(\"../../lib/frame-service/external\");\nvar useMin = _dereq_(\"../../lib/use-min\");\nvar ExtendedPromise = _dereq_(\"@braintree/extended-promise\");\nvar errors = _dereq_(\"../shared/errors\");\nvar BraintreeError = _dereq_(\"../../lib/braintree-error\");\n\nvar VERSION = \"3.145.0\";\nvar VENMO_LOGO_SVG =\n  '<svg width=\"198\" height=\"58\" viewBox=\"0 0 198 58\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M43.0702 13.6572C44.1935 15.4585 44.6999 17.3139 44.6999 19.6576C44.6999 27.1328 38.1277 36.8436 32.7935 43.6625H20.6099L15.7236 15.2939L26.3917 14.3105L28.9751 34.4966C31.389 30.6783 34.3678 24.6779 34.3678 20.587C34.3678 18.3477 33.9727 16.8225 33.3553 15.5666L43.0702 13.6572Z\" fill=\"white\"/>\\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M56.8965 26.1491C58.8596 26.1491 63.8018 25.2772 63.8018 22.5499C63.8018 21.2402 62.8481 20.587 61.7242 20.587C59.7579 20.587 57.1776 22.8763 56.8965 26.1491ZM56.6715 31.5506C56.6715 34.8807 58.5787 36.1873 61.107 36.1873C63.8603 36.1873 66.4966 35.534 69.923 33.8433L68.6324 42.3523C66.2183 43.4976 62.4559 44.2617 58.8039 44.2617C49.5403 44.2617 46.2249 38.8071 46.2249 31.9879C46.2249 23.1496 51.6179 13.765 62.7365 13.765C68.858 13.765 72.2809 17.0949 72.2809 21.7317C72.2815 29.2066 62.4005 31.4965 56.6715 31.5506Z\" fill=\"white\"/>\\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M103.067 20.3142C103.067 21.4052 102.897 22.9875 102.727 24.0216L99.5262 43.6622H89.1385L92.0585 25.658C92.1139 25.1696 92.284 24.1865 92.284 23.6411C92.284 22.3314 91.4414 22.0047 90.4282 22.0047C89.0826 22.0047 87.7337 22.6042 86.8354 23.0418L83.5234 43.6625H73.0772L77.8495 14.257H86.8908L87.0052 16.6041C89.1382 15.2404 91.9469 13.7656 95.932 13.7656C101.212 13.765 103.067 16.3845 103.067 20.3142Z\" fill=\"white\"/>\\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M133.906 16.9841C136.881 14.9131 139.69 13.765 143.563 13.765C148.897 13.765 150.753 16.3845 150.753 20.3142C150.753 21.4052 150.583 22.9875 150.413 24.0216L147.216 43.6622H136.825L139.801 25.2774C139.855 24.786 139.971 24.1865 139.971 23.8063C139.971 22.3317 139.128 22.0047 138.115 22.0047C136.824 22.0047 135.535 22.5501 134.577 23.0418L131.266 43.6625H120.878L123.854 25.2777C123.908 24.7863 124.02 24.1868 124.02 23.8065C124.02 22.332 123.177 22.0049 122.167 22.0049C120.819 22.0049 119.473 22.6045 118.574 23.0421L115.26 43.6628H104.817L109.589 14.2573H118.52L118.8 16.7122C120.878 15.241 123.684 13.7662 127.446 13.7662C130.704 13.765 132.837 15.129 133.906 16.9841Z\" fill=\"white\"/>\\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M171.426 25.5502C171.426 23.1496 170.808 21.513 168.956 21.513C164.857 21.513 164.015 28.55 164.015 32.1498C164.015 34.8807 164.802 36.5709 166.653 36.5709C170.528 36.5709 171.426 29.1497 171.426 25.5502ZM153.458 31.7152C153.458 22.442 158.511 13.765 170.136 13.765C178.896 13.765 182.098 18.7854 182.098 25.7148C182.098 34.8805 177.099 44.3723 165.194 44.3723C156.378 44.3723 153.458 38.7525 153.458 31.7152Z\" fill=\"white\"/>\\n</svg>';\nvar CONTINUE_OR_CANCEL_INSTRUCTIONS =\n  \"Tap cancel payment to cancel and return to the business. Continue payment will relaunch the payment window.\";\n\nvar POPUP_WIDTH = 400;\nvar POPUP_HEIGHT = 570;\nvar ELEMENT_IDS = {\n  backdrop: \"venmo-desktop-web-backdrop\",\n  backdropHidden: \"venmo-desktop-web-backdrop.hidden\",\n  backdropContainer: \"venmo-backdrop-container\",\n  cancelButton: \"venmo-popup-cancel-button\",\n  continueButton: \"venmo-popup-continue-button\",\n  message: \"venmo-message\",\n  instructions: \"venmo-instructions\",\n  venmoLogo: \"venmo-full-logo\",\n};\n\nExtendedPromise.suppressUnhandledPromiseMessage = true;\n\nfunction openPopup(options) {\n  var frameServiceInstance = options.frameServiceInstance;\n  var venmoUrl = options.venmoUrl;\n  var checkForStatusChange = options.checkForStatusChange;\n  var cancelTokenization = options.cancelTokenization;\n  var checkPaymentContextStatus = options.checkPaymentContextStatus;\n  var extendedPromise = new ExtendedPromise();\n  var analyticsCallback = options.analyticsCallback;\n\n  document\n    .getElementById(ELEMENT_IDS.continueButton)\n    .addEventListener(\"click\", function () {\n      frameServiceInstance.focus();\n    });\n  document\n    .getElementById(ELEMENT_IDS.cancelButton)\n    .addEventListener(\"click\", function () {\n      frameServiceInstance.close();\n      cancelTokenization();\n      closeBackdrop();\n    });\n  frameServiceInstance.open({}, function (frameServiceErr) {\n    var retryStartingCount = 1;\n\n    if (frameServiceErr) {\n      if (analyticsCallback) {\n        analyticsCallback(\"login\", \"failed\");\n      }\n\n      extendedPromise.reject(frameServiceErr);\n    } else {\n      if (analyticsCallback) {\n        analyticsCallback(\"login\", \"succeeded\");\n        // a little strange to log two different analytics calls back to back here\n        // but we want to be able to track the different phases of the usage funnel with a lot of detail\n        // so we want to track that the login succeeded before we start returning to the merchant\n        analyticsCallback(\"return-to-merchant\", \"start\");\n      }\n      checkForStatusChange(retryStartingCount)\n        .then(function (data) {\n          if (analyticsCallback) {\n            analyticsCallback(\"return-to-merchant\", \"succeeded\");\n          }\n\n          extendedPromise.resolve(data);\n        })\n        .catch(function (statusCheckError) {\n          // We add this check here because at this point\n          // the status should not be in CREATED status.\n          // However, there is an edge case where if a buyer\n          // cancels in the popup, the popup might close itself\n          // before it can send the graphQL mutation to update its status.\n          // In these cases, the status will be stuck in CREATED status, and\n          // tokenization would fail, incorrectly throwing a tokenization error\n          // instead of informing the merchant that the customer canceled.\n          checkPaymentContextStatus().then(function (node) {\n            if (node.status === \"CREATED\") {\n              if (analyticsCallback) {\n                analyticsCallback(\"return-to-merchant\", \"canceled\");\n              }\n\n              extendedPromise.reject(\n                new BraintreeError(errors.VENMO_CUSTOMER_CANCELED)\n              );\n            } else {\n              if (analyticsCallback) {\n                analyticsCallback(\"return-to-merchant\", \"failed\");\n              }\n\n              extendedPromise.reject(statusCheckError);\n            }\n          });\n        });\n    }\n\n    frameServiceInstance.close();\n    closeBackdrop();\n  });\n  frameServiceInstance.redirect(venmoUrl);\n\n  return extendedPromise;\n}\n\nfunction centeredPopupDimensions() {\n  var popupTop =\n    Math.round((window.outerHeight - POPUP_HEIGHT) / 2) + window.screenTop;\n  var popupLeft =\n    Math.round((window.outerWidth - POPUP_WIDTH) / 2) + window.screenLeft;\n\n  return {\n    top: popupTop,\n    left: popupLeft,\n  };\n}\n\nfunction closeBackdrop() {\n  document.getElementById(\"venmo-desktop-web-backdrop\").classList.add(\"hidden\");\n}\n\nfunction getElementStyles() {\n  var backdropStyles = [\n    \"#\" + ELEMENT_IDS.backdropHidden + \" {\",\n    \"display: none;\",\n    \"}\",\n    \"#\" + ELEMENT_IDS.backdrop + \" {\",\n    \"z-index: 3141592632;\",\n    \"cursor: pointer;\",\n    \"position: fixed;\",\n    \"top: 0;\",\n    \"left: 0;\",\n    \"bottom: 0;\",\n    \"width: 100%;\",\n    \"background: rgba(0, 0, 0, 0.8);\",\n    \"}\",\n  ];\n  var backdropContainerStyles = [\n    \"#\" + ELEMENT_IDS.backdropContainer + \" {\",\n    \"display: flex;\",\n    \"align-content: center;\",\n    \"justify-content: center;\",\n    \"align-items: center;\",\n    \"width: 100%;\",\n    \"height: 100%;\",\n    \"flex-direction: column;\",\n    \"}\",\n  ];\n\n  var cancelButtonStyles = [\n    \"#\" + ELEMENT_IDS.cancelButton + \" {\",\n    \"height: 24px;\",\n    \"width: 380px;\",\n    \"font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\",\n    \"font-style: normal;\",\n    \"font-weight: 700;\",\n    \"font-size: 18px;\",\n    \"line-height: 24px;\",\n    \"text-align: center;\",\n    \"background-color: transparent;\",\n    \"border: none;\",\n    \"color: #FFFFFF;\",\n    \"margin-top: 28px;\",\n    \"}\",\n  ];\n\n  var continueButtonStyles = [\n    \"#\" + ELEMENT_IDS.continueButton + \" {\",\n    \"width: 400px;\",\n    \"height: 50px;\",\n    \"background: #0074DE;\",\n    \"border-radius: 24px;\",\n    \"border: none;\",\n    \"font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\",\n    \"font-style: normal;\",\n    \"font-weight: 700;\",\n    \"font-size: 18px;\",\n    \"color: #FFFFFF;\",\n    \"margin-top: 44px;\",\n    \"}\",\n  ];\n\n  var messageStyles = [\n    \"#\" + ELEMENT_IDS.message + \" {\",\n    \"font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\",\n    \"font-style: normal;\",\n    \"font-weight: 500;\",\n    \"font-size: 24px;\",\n    \"line-height: 32px;\",\n    \"text-align: center;\",\n    \"color: #FFFFFF;\",\n    \"margin-top: 32px;\",\n    \"}\",\n  ];\n\n  var instructionStyles = [\n    \"#\" + ELEMENT_IDS.instructions + \" {\",\n    \"font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\",\n    \"font-style: normal;\",\n    \"font-weight: 400;\",\n    \"font-size: 16px;\",\n    \"line-height: 20px;\",\n    \"text-align: center;\",\n    \"color: #FFFFFF;\",\n    \"margin-top: 16px;\",\n    \"width: 400px;\",\n    \"}\",\n  ];\n\n  var allStyles = backdropStyles.concat(\n    backdropContainerStyles,\n    cancelButtonStyles,\n    continueButtonStyles,\n    messageStyles,\n    instructionStyles\n  );\n\n  return allStyles.join(\"\\n\");\n}\n\nfunction buildAndStyleElements(styleCspNonce) {\n  var alreadyRenderedBackdrop = document.getElementById(ELEMENT_IDS.backdrop);\n  var backdropStylesElement,\n    backdropDiv,\n    backDropContentContainer,\n    venmoLogoDiv,\n    venmoMessageDiv,\n    instructionsDiv,\n    continueButton,\n    cancelButton;\n\n  if (alreadyRenderedBackdrop) {\n    alreadyRenderedBackdrop.classList.remove(\"hidden\");\n\n    return;\n  }\n  backdropStylesElement = document.createElement(\"style\");\n  backdropDiv = document.createElement(\"div\");\n  backDropContentContainer = document.createElement(\"div\");\n  venmoLogoDiv = document.createElement(\"div\");\n  venmoMessageDiv = document.createElement(\"div\");\n  instructionsDiv = document.createElement(\"div\");\n  continueButton = document.createElement(\"button\");\n  cancelButton = document.createElement(\"button\");\n\n  if (styleCspNonce) {\n    backdropStylesElement.nonce = styleCspNonce;\n  }\n  backdropStylesElement.id = \"venmo-desktop-web__injected-styles\";\n  backdropStylesElement.innerHTML = getElementStyles();\n\n  backdropDiv.id = ELEMENT_IDS.backdrop;\n\n  backDropContentContainer.id = ELEMENT_IDS.backdropContainer;\n\n  venmoLogoDiv.id = ELEMENT_IDS.venmoLogo;\n  venmoLogoDiv.innerHTML = VENMO_LOGO_SVG;\n\n  venmoMessageDiv.id = ELEMENT_IDS.message;\n  venmoMessageDiv.innerText = \"What would you like to do?\";\n\n  instructionsDiv.id = ELEMENT_IDS.instructions;\n  instructionsDiv.innerText = CONTINUE_OR_CANCEL_INSTRUCTIONS;\n\n  continueButton.id = ELEMENT_IDS.continueButton;\n  continueButton.innerText = \"Continue payment\";\n\n  cancelButton.id = ELEMENT_IDS.cancelButton;\n  cancelButton.innerText = \"Cancel payment\";\n\n  document.head.appendChild(backdropStylesElement);\n  backDropContentContainer.appendChild(venmoLogoDiv);\n  backDropContentContainer.appendChild(venmoMessageDiv);\n  backDropContentContainer.appendChild(instructionsDiv);\n  backDropContentContainer.appendChild(continueButton);\n  backDropContentContainer.appendChild(cancelButton);\n  backdropDiv.appendChild(backDropContentContainer);\n  document.body.appendChild(backdropDiv);\n\n  backdropDiv.addEventListener(\"click\", function (event) {\n    event.stopPropagation();\n  });\n}\n\n/**\n * Applies a backdrop over the page, and opens a popup to the supplied url. Uses supplied status and cancel functions to handle the flow.\n * @function runWebLogin\n * @ignore\n * @param {object} options Options for running the web login flow.\n * @param {string} options.venmoUrl Venmo url that is to be used for logging in.\n * @param {function} options.analyticsCallback A callback function that sends an analytics event. Takes strings for the event and status, e.g. (\"login\", \"start).\n * @param {Venmo~checkPaymentContextStatusAndProcessResult} options.checkForStatusChange {@link Venmo~checkPaymentContextStatusAndProcessResult} to be invoked in order to check for a payment context status update.\n * @param {Venmo~cancelTokenization} options.cancelTokenization {@link Venmo~cancelTokenization} to be invoked when the appropriate payment context status is retrieved.\n * @param {boolean} options.debug A flag to control whether to use minified assets or not.\n * @returns {Promise} Returns a promise\n */\nfunction runWebLogin(options) {\n  buildAndStyleElements(options.styleCspNonce);\n\n  if (options.analyticsCallback) {\n    options.analyticsCallback(\"login\", \"start\");\n  }\n\n  return openPopup(options);\n}\n\n/**\n * When using frameservice, it needs to be created separately from the action of opening. The setup process includes\n * steps that browsers may consider async or too disconnected from the user action required to open a popup.\n *\n * This function enables us to do that setup at an appropriate time.\n * @function setupDesktopWebLogin\n * @ignore\n * @param {object} options Options use for setting up the Desktop Web Login flow.\n * @param {string} options.assetsUrl Url that points to the hosted Braintree assets.\n * @param {boolean} options.debug A flag to control whether to use minified assets or not.\n\n * @returns {Promise} Returns a promise\n */\nfunction setupDesktopWebLogin(options) {\n  var extendedPromise = new ExtendedPromise();\n  var popupName = \"venmoDesktopWebLogin\";\n  var assetsUrl = options.assetsUrl;\n  var debug = options.debug || false;\n  var popupLocation = centeredPopupDimensions();\n  var assetsBaseUrl = assetsUrl + \"/web/\" + VERSION + \"/html\";\n\n  frameService.create(\n    {\n      name: popupName,\n      dispatchFrameUrl:\n        assetsBaseUrl + \"/dispatch-frame\" + useMin(debug) + \".html\",\n      openFrameUrl:\n        assetsBaseUrl + \"/venmo-landing-frame\" + useMin(debug) + \".html\",\n      top: popupLocation.top,\n      left: popupLocation.left,\n      height: POPUP_HEIGHT,\n      width: POPUP_WIDTH,\n    },\n    function (frameServiceInstance) {\n      extendedPromise.resolve(frameServiceInstance);\n    }\n  );\n\n  return extendedPromise;\n}\n\nmodule.exports = {\n  runWebLogin: runWebLogin,\n  openPopup: openPopup,\n  setupDesktopWebLogin: setupDesktopWebLogin,\n  POPUP_WIDTH: POPUP_WIDTH,\n  POPUP_HEIGHT: POPUP_HEIGHT,\n};\n\n},{\"../../lib/braintree-error\":149,\"../../lib/frame-service/external\":164,\"../../lib/use-min\":188,\"../shared/errors\":255,\"@braintree/extended-promise\":34}],260:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar analytics = _dereq_(\"../lib/analytics\");\nvar assign = _dereq_(\"../lib/assign\").assign;\nvar isBrowserSupported = _dereq_(\"./shared/supports-venmo\");\nvar browserDetection = _dereq_(\"./shared/browser-detection\");\nvar constants = _dereq_(\"./shared/constants\");\nvar errors = _dereq_(\"./shared/errors\");\nvar querystring = _dereq_(\"../lib/querystring\");\nvar isVerifiedDomain = _dereq_(\"../lib/is-verified-domain\");\nvar methods = _dereq_(\"../lib/methods\");\nvar convertMethodsToError = _dereq_(\"../lib/convert-methods-to-error\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar inIframe = _dereq_(\"../lib/in-iframe\");\nvar documentVisibility = _dereq_(\"../lib/document-visibility\");\nvar ExtendedPromise = _dereq_(\"@braintree/extended-promise\");\nvar getVenmoUrl = _dereq_(\"./shared/get-venmo-url\");\nvar desktopWebLogin = _dereq_(\"./shared/web-login-backdrop\");\nvar snakeCaseToCamelCase = _dereq_(\"../lib/snake-case-to-camel-case\");\nvar urlParams = _dereq_(\"../lib/url-params\");\n\n// NEXT_MAJOR_VERSION the source code for this is actually in a\n// typescript repo called venmo-desktop, once the SDK is migrated\n// to typescript, we can move the TS files out of that separate\n// repo and into the web SDK properly\nvar createVenmoDesktop = _dereq_(\"./external/\");\nvar graphqlQueries = _dereq_(\"./external/queries\");\n\nvar VERSION = \"3.145.0\";\nvar DEFAULT_MOBILE_POLLING_INTERVAL = 250; // 1/4 second\nvar DEFAULT_MOBILE_EXPIRING_THRESHOLD = 300000; // 5 minutes\n\nExtendedPromise.suppressUnhandledPromiseMessage = true;\n\n/**\n * Venmo tokenize payload.\n * @typedef {object} Venmo~tokenizePayload\n * @property {string} nonce The payment method nonce.\n * @property {string} type The payment method type, always `VenmoAccount`.\n * @property {object} details Additional Venmo account details.\n * @property {string} details.username The username of the Venmo account.\n * @property {string} details.paymentContextId The context ID of the Venmo payment. Only available when used with {@link https://braintree.github.io/braintree-web/current/module-braintree-web_venmo.html#.create|`paymentMethodUsage`}.\n */\n\n/**\n * @class\n * @param {object} options The Venmo {@link module:braintree-web/venmo.create create} options.\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/venmo.create|braintree-web.venmo.create} instead.</strong>\n * @classdesc This class represents a Venmo component produced by {@link module:braintree-web/venmo.create|braintree-web/venmo.create}. Instances of this class have methods for tokenizing Venmo payments.\n */\n// eslint-disable-next-line complexity\nfunction Venmo(options) {\n  var self = this;\n\n  this._allowDesktopWebLogin = Boolean(options.allowDesktopWebLogin);\n  this._mobileWebFallBack = Boolean(options.mobileWebFallBack);\n  this._createPromise = options.createPromise;\n  this._allowNewBrowserTab = options.allowNewBrowserTab !== false;\n  this._allowWebviews = options.allowWebviews !== false;\n  this._allowDesktop = options.allowDesktop === true;\n  this._useRedirectForIOS = options.useRedirectForIOS === true;\n  this._profileId = options.profileId;\n  this._displayName = options.displayName;\n  this._deepLinkReturnUrl = options.deepLinkReturnUrl;\n  this._ignoreHistoryChanges = options.ignoreHistoryChanges;\n  this._paymentMethodUsage = (options.paymentMethodUsage || \"\").toUpperCase();\n  this._shouldUseLegacyFlow = !this._paymentMethodUsage;\n  this._requireManualReturn = options.requireManualReturn === true;\n  this._useDesktopQRFlow =\n    this._allowDesktop && this._isDesktop() && !this._allowDesktopWebLogin;\n  this._useAllowDesktopWebLogin =\n    this._allowDesktopWebLogin && this._isDesktop();\n  this._cannotHaveReturnUrls = inIframe() || this._requireManualReturn;\n  this._allowAndroidRecreation = options.allowAndroidRecreation !== false;\n  this._allowNonDefaultBrowsers = options.allowNonDefaultBrowsers !== false;\n  this._maxRetryCount = 3;\n  this._collectCustomerBillingAddress =\n    options.collectCustomerBillingAddress || false;\n  this._collectCustomerShippingAddress =\n    options.collectCustomerShippingAddress || false;\n  this._cancelOnReturnToBrowser =\n    options.cancelOnReturnToBrowser === true && !browserDetection.isAndroid();\n  this._isFinalAmount = options.isFinalAmount || false;\n  this._lineItems = options.lineItems;\n  this._subTotalAmount = options.subTotalAmount;\n  this._discountAmount = options.discountAmount;\n  this._taxAmount = options.taxAmount;\n  this._shippingAmount = options.shippingAmount;\n  this._totalAmount = options.totalAmount;\n  this._cspNonce =\n    (this._mobileWebFallBack || this._allowDesktopWebLogin) &&\n    (options.styleCspNonce || false);\n  this._mobilePollingInterval = DEFAULT_MOBILE_POLLING_INTERVAL;\n  this._mobilePollingExpiresThreshold = DEFAULT_MOBILE_EXPIRING_THRESHOLD;\n  this._pollCount = 0;\n  this._riskCorrelationId = options.riskCorrelationId;\n\n  this._shouldCreateVenmoPaymentContext =\n    this._cannotHaveReturnUrls || !this._shouldUseLegacyFlow;\n\n  this._isIncognito = options._isIncognito;\n  this._enableVenmoSandbox = options.enableVenmoSandbox || false;\n\n  analytics.sendEvent(\n    this._createPromise,\n    \"venmo.options.is-incognito.\" + String(Boolean(this._isIncognito))\n  );\n\n  analytics.sendEvent(\n    this._createPromise,\n    \"venmo.desktop-flow.configured.\" + String(Boolean(this._allowDesktop))\n  );\n\n  // if the url has a tokenization result, that indicates\n  // that it cannot be the desktop flow or the manual return\n  // flow. If it's the hash change with paymentMethodUsage\n  // flow, we want to skip creating a new payment context, since\n  // there is already a pending payment context waiting to be\n  // processed. For the hash change flow without paymentMethodUsage,\n  // no further actions are needed.\n  if (this.hasTokenizationResult()) {\n    analytics.sendEvent(\n      this._createPromise,\n      \"venmo.appswitch.return-in-new-tab\"\n    );\n  } else if (this._useDesktopQRFlow) {\n    this._createPromise = this._createPromise.then(function (client) {\n      var config = client.getConfiguration().gatewayConfiguration;\n\n      if (\n        (self._collectCustomerBillingAddress ||\n          self._collectCustomerShippingAddress) &&\n        !config.payWithVenmo.enrichedCustomerDataEnabled\n      ) {\n        return Promise.reject(new BraintreeError(errors.VENMO_ECD_DISABLED));\n      }\n\n      return createVenmoDesktop({\n        url:\n          config.assetsUrl +\n          \"/web/\" +\n          VERSION +\n          \"/html/venmo-desktop-frame.html\",\n        environment:\n          config.environment === \"production\" ? \"PRODUCTION\" : \"SANDBOX\",\n        profileId: self._profileId || config.payWithVenmo.merchantId,\n        paymentMethodUsage: self._paymentMethodUsage,\n        riskCorrelationId: self._riskCorrelationId,\n        collectCustomerBillingAddress: self._collectCustomerBillingAddress,\n        collectCustomerShippingAddress: self._collectCustomerShippingAddress,\n        displayName: self._displayName,\n        Promise: Promise,\n        apiRequest: function (query, data) {\n          return client\n            .request({\n              api: \"graphQLApi\",\n              data: {\n                query: query,\n                variables: data,\n              },\n            })\n            .then(function (response) {\n              return response.data;\n            });\n        },\n        sendEvent: function (eventName, params) {\n          analytics.sendEventPlus(self._createPromise, eventName, params || {});\n        },\n        verifyDomain: isVerifiedDomain,\n      })\n        .then(function (venmoDesktopInstance) {\n          self._venmoDesktopInstance = venmoDesktopInstance;\n          analytics.sendEvent(\n            self._createPromise,\n            \"venmo.desktop-flow.presented\"\n          );\n\n          return client;\n        })\n        .catch(function () {\n          analytics.sendEvent(\n            self._createPromise,\n            \"venmo.desktop-flow.setup-failed\"\n          );\n          self._useDesktopQRFlow = false;\n\n          return client;\n        });\n    });\n  } else if (this._shouldCreateVenmoPaymentContext) {\n    this._createPromise = this._createPromise.then(function (client) {\n      var platform = self._determineAnalyticsCategory();\n      var paymentContextPromise, webLoginPromise;\n      var analyticsCategory = self._cannotHaveReturnUrls\n        ? \"manual-return\"\n        : \"mobile-payment-context\";\n      var config = client.getConfiguration();\n\n      webLoginPromise = desktopWebLogin\n        .setupDesktopWebLogin({\n          assetsUrl: config.gatewayConfiguration.assetsUrl,\n          debug: config.isDebug,\n        })\n        .then(function (frameServiceInstance) {\n          self._frameServiceInstance = frameServiceInstance;\n        })\n        .catch(function (desktopWebErr) {\n          return desktopWebErr;\n        });\n\n      self._mobilePollingContextEnvironment =\n        config.gatewayConfiguration.environment.toUpperCase();\n\n      paymentContextPromise = self\n        ._createVenmoPaymentContext(client)\n        .then(function () {\n          analytics.sendEventPlus(\n            self._createPromise,\n            \"venmo.\" + analyticsCategory + \".presented\",\n            {\n              platform: platform,\n            }\n          );\n\n          return client;\n        })\n        .catch(function (err) {\n          analytics.sendEvent(\n            self._createPromise,\n            \"venmo.\" + analyticsCategory + \".setup-failed\"\n          );\n\n          return Promise.reject(\n            new BraintreeError({\n              type: errors.VENMO_MOBILE_PAYMENT_CONTEXT_SETUP_FAILED.type,\n              code: errors.VENMO_MOBILE_PAYMENT_CONTEXT_SETUP_FAILED.code,\n              message: isValidationError(err)\n                ? err.details.originalError[0].message\n                : errors.VENMO_MOBILE_PAYMENT_CONTEXT_SETUP_FAILED.message,\n              details: {\n                originalError: err,\n              },\n            })\n          );\n        });\n\n      return ExtendedPromise.all([webLoginPromise, paymentContextPromise])\n        .then(function (results) {\n          var paymentContextResult = results[1]; // We only care about the returned value of the paymentContextPromise\n\n          return Promise.resolve(paymentContextResult);\n        })\n        .catch(function (promiseErr) {\n          // ExtendedPromise.all returns just one error and it's either which fails first/at all.\n          return Promise.reject(promiseErr);\n        });\n    });\n  }\n}\n\n/**\n * Determines the calling workflow, defaulting to `'mobile'`.\n * @returns `'mobile'` | `'popup-bridge'` | `'desktop-qr'` | `'web-login-flow'` | `'desktop'`\n */\nVenmo.prototype._determineAnalyticsCategory = function () {\n  var category;\n  if (this._popupBridgeIsInstalled()) {\n    category = \"popup-bridge\";\n  } else if (this._useDesktopQRFlow) {\n    category = \"desktop-qr\";\n  } else if (this._useAllowDesktopWebLogin) {\n    category = \"web-login-flow\";\n  } else if (this._isDesktop()) {\n    category = \"desktop\";\n  } else {\n    category = \"mobile\";\n  }\n  return category;\n};\n\nfunction isValidationError(err) {\n  return (\n    err.details &&\n    err.details.originalError &&\n    err.details.originalError[0] &&\n    err.details.originalError[0].extensions &&\n    err.details.originalError[0].extensions.errorClass === \"VALIDATION\" &&\n    err.details.originalError[0].extensions.errorType === \"user_error\"\n  );\n}\n\nVenmo.prototype._createVenmoPaymentContext = function (\n  client,\n  cancelIfTokenizationInProgress\n) {\n  var self = this;\n  var promise, transactionDetails;\n  var configuration = client.getConfiguration();\n  var platform = self._determineAnalyticsCategory();\n  var venmoConfiguration = configuration.gatewayConfiguration.payWithVenmo;\n  var transactionDetailsPresent = false;\n  var customerClientChannel = self._useAllowDesktopWebLogin\n    ? \"NATIVE_WEB\"\n    : \"MOBILE_WEB\";\n\n  if (!this._shouldCreateVenmoPaymentContext) {\n    return Promise.resolve();\n  }\n\n  if (this._shouldUseLegacyFlow) {\n    promise = client\n      .request({\n        api: \"graphQLApi\",\n        data: {\n          query: graphqlQueries.LEGACY_CREATE_PAYMENT_CONTEXT_QUERY,\n          variables: {\n            input: {\n              environment: this._mobilePollingContextEnvironment,\n              intent: \"PAY_FROM_APP\",\n            },\n          },\n        },\n      })\n      .then(function (response) {\n        return response.data.createVenmoQRCodePaymentContext\n          .venmoQRCodePaymentContext;\n      });\n  } else {\n    // Merchants are not allowed to collect user addresses unless ECD (Enriched Customer Data) is enabled on the BT Control Panel.\n    if (\n      (this._collectCustomerBillingAddress ||\n        this._collectCustomerShippingAddress) &&\n      !venmoConfiguration.enrichedCustomerDataEnabled\n    ) {\n      return Promise.reject(new BraintreeError(errors.VENMO_ECD_DISABLED));\n    }\n\n    if (this._lineItems) {\n      this._lineItems.forEach(function (item) {\n        item.unitTaxAmount = item.unitTaxAmount || \"0\";\n      });\n    }\n    transactionDetails = {\n      subTotalAmount: this._subTotalAmount,\n      discountAmount: this._discountAmount,\n      taxAmount: this._taxAmount,\n      shippingAmount: this._shippingAmount,\n      totalAmount: this._totalAmount,\n      lineItems: this._lineItems,\n    };\n    transactionDetailsPresent = Object.keys(transactionDetails).some(\n      function (detail) {\n        return transactionDetails[detail] !== undefined;\n      }\n    );\n\n    analytics.sendEventPlus(\n      self._createPromise,\n      \"venmo.create-payment-context.started\",\n      {\n        platform: platform,\n      }\n    );\n\n    promise = client\n      .request({\n        api: \"graphQLApi\",\n        data: {\n          query: graphqlQueries.CREATE_PAYMENT_CONTEXT_QUERY,\n          variables: {\n            input: {\n              venmoRiskCorrelationId: this._riskCorrelationId,\n              paymentMethodUsage: this._paymentMethodUsage,\n              intent: \"CONTINUE\",\n              customerClient: customerClientChannel,\n              isFinalAmount: this._isFinalAmount,\n              displayName: this._displayName,\n              paysheetDetails: {\n                collectCustomerBillingAddress:\n                  this._collectCustomerBillingAddress,\n                collectCustomerShippingAddress:\n                  this._collectCustomerShippingAddress,\n                transactionDetails: transactionDetailsPresent\n                  ? transactionDetails\n                  : undefined,\n              },\n            },\n          },\n        },\n      })\n      .then(function (response) {\n        var context =\n          response.data.createVenmoPaymentContext.venmoPaymentContext;\n        analytics.sendEventPlus(\n          self._createPromise,\n          \"venmo.create-payment-context.succeeded\",\n          {\n            // eslint-disable-next-line camelcase\n            context_id: context.id,\n            platform: platform,\n          }\n        );\n        return context;\n      })\n      .catch(function (err) {\n        analytics.sendEventPlus(\n          self._createPromise,\n          \"venmo.create-payment-context.failed\",\n          {\n            platform: platform,\n          }\n        );\n        throw err;\n      });\n  }\n\n  return promise.then(function (context) {\n    var expiredTime = new Date(context.expiresAt) - new Date(context.createdAt);\n    var refreshIn = expiredTime * 0.6666;\n\n    // prevents multiple setTimeouts from firing from separate calls\n    // to create a payment context by canceling the previous one\n    // if there is a pending call\n    clearTimeout(self._refreshPaymentContextTimeout);\n    self._refreshPaymentContextTimeout = setTimeout(function () {\n      if (self._tokenizationInProgress) {\n        return;\n      }\n      self._createVenmoPaymentContext(client, true);\n    }, refreshIn);\n\n    if (cancelIfTokenizationInProgress && self._tokenizationInProgress) {\n      return;\n    }\n\n    self._venmoPaymentContextStatus = context.status;\n    self._venmoPaymentContextId = context.id;\n  });\n};\n\nVenmo.prototype._popupBridgeIsInstalled = function () {\n  return window.popupBridge && typeof window.popupBridge.open === \"function\";\n};\n\nVenmo.prototype._venmoNativeAppIsInstalled = function () {\n  return Boolean(\n    window.popupBridge &&\n    ((window.parent && window.parent.popupBridge.isVenmoInstalled) ||\n      window.popupBridge.isVenmoInstalled)\n  );\n};\n\n/**\n * Handle app switching when a deep link return URL is configured\n * @private\n * @param {string} url - The URL to redirect to\n * @returns {void}\n */\nVenmo.prototype._handleDeepLinkAppSwitch = function (url) {\n  if (isIosWebviewInDeepLinkReturnUrlFlow()) {\n    this._handleIosWebviewDeepLink(url);\n  } else if (this._popupBridgeIsInstalled()) {\n    this._handlePopupBridgeAppSwitch(url);\n  } else if (browserDetection.isAndroidWebview()) {\n    analytics.sendEvent(\n      this._createPromise,\n      \"venmo.appswitch.start.android-webview-redirect\"\n    );\n\n    if (inIframe()) {\n      this._handleIFrameBreakout(url);\n    } else {\n      window.location.href = url;\n    }\n  } else if (browserDetection.isAndroid() && !browserDetection.isWebview()) {\n    analytics.sendEvent(\n      this._createPromise,\n      \"venmo.appswitch.start.android-browser-redirect\"\n    );\n\n    if (inIframe()) {\n      this._handleIFrameBreakout(url);\n    } else {\n      window.location.href = url;\n    }\n  } else {\n    analytics.sendEvent(this._createPromise, \"venmo.appswitch.start.webview\");\n    this._venmoWindow = window.open(url);\n  }\n};\n\n/**\n * Handle app switching for iOS webview with deep link return URL\n * @private\n * @param {string} url - The URL to redirect to\n * @returns {void}\n */\nVenmo.prototype._handleIosWebviewDeepLink = function (url) {\n  analytics.sendEvent(this._createPromise, \"venmo.appswitch.start.ios-webview\");\n\n  if (inIframe()) {\n    this._handleIosWebviewInIframe(url);\n  } else if (\n    !this._venmoNativeAppIsInstalled() &&\n    this._popupBridgeIsInstalled()\n  ) {\n    this._handlePopupBridgeAppSwitch(url);\n  } else {\n    // Deep link URLs do not launch iOS apps from a webview when using window.open or PopupBridge.open\n    window.location.href = url;\n  }\n};\n\n/**\n * Handle iOS webview app switching when in an iframe\n * @private\n * @param {string} url - The URL to redirect to\n * @returns {void}\n */\nVenmo.prototype._handleIosWebviewInIframe = function (url) {\n  if (this._venmoNativeAppIsInstalled()) {\n    this._handleIFrameBreakout(url);\n  } else if (this._popupBridgeIsInstalled()) {\n    this._handlePopupBridgeAppSwitch(url);\n  } else {\n    this._handleIFrameBreakout(url);\n  }\n};\n\n/**\n * Handle app switching with PopupBridge\n * @private\n * @param {string} url - The URL to redirect to\n * @returns {void}\n */\nVenmo.prototype._handlePopupBridgeAppSwitch = function (url) {\n  analytics.sendEvent(\n    this._createPromise,\n    \"venmo.appswitch.start.popup-bridge\"\n  );\n  window.popupBridge.open(url);\n};\n\n/**\n * Handle app switching for standard browser environments\n * @private\n * @param {string} url - The URL to redirect to\n * @returns {void}\n */\nVenmo.prototype._handleBrowserAppSwitch = function (url) {\n  analytics.sendEvent(this._createPromise, \"venmo.appswitch.start.browser\");\n\n  if (\n    browserDetection.doesNotSupportWindowOpenInIos() ||\n    this._shouldUseRedirectStrategy()\n  ) {\n    window.location.href = url;\n  } else if (\n    inIframe() &&\n    browserDetection.isAndroid() &&\n    browserDetection.isChrome()\n  ) {\n    // Chrome Android in iframe cannot use window.open()\n    // due to popup blocking. Break out to parent page to enable app switch.\n    analytics.sendEvent(\n      this._createPromise,\n      \"venmo.appswitch.start.chrome-android-iframe-breakout\"\n    );\n    this._handleIFrameBreakout(url);\n  } else if (\n    this._mobileWebFallBack &&\n    browserDetection.isAndroid() &&\n    browserDetection.isChrome()\n  ) {\n    // Android chrome needs to use window.location.href\n    // to remain in the same tab as expected.\n    // Chrome now defaults to opening a new tab.\n    window.location.href = url;\n  } else {\n    this._venmoWindow = window.open(url);\n  }\n};\n\n/**\n * Handle breaking out of the iframe we're in\n * @private\n * @param {string} url - The URL to redirect to\n * @returns {void}\n */\nVenmo.prototype._handleIFrameBreakout = function (url) {\n  window.top.location.href = url;\n};\n\nVenmo.prototype.appSwitch = function (url) {\n  if (this._deepLinkReturnUrl) {\n    this._handleDeepLinkAppSwitch(url);\n  } else {\n    this._handleBrowserAppSwitch(url);\n  }\n};\n\nVenmo.prototype.getUrl = function () {\n  return this._createPromise.then(\n    function (client) {\n      var configuration = client.getConfiguration();\n      var params = {};\n      var currentUrl =\n        this._deepLinkReturnUrl ||\n        window.location.href.replace(window.location.hash, \"\");\n      var venmoConfiguration = configuration.gatewayConfiguration.payWithVenmo;\n      var analyticsMetadata = configuration.analyticsMetadata;\n      var accessToken = venmoConfiguration.accessToken;\n      var braintreeData = {\n        _meta: {\n          version: analyticsMetadata.sdkVersion,\n          integration: analyticsMetadata.integration,\n          platform: analyticsMetadata.platform,\n          sessionId: analyticsMetadata.sessionId,\n        },\n      };\n\n      this._isDebug = configuration.isDebug;\n      this._assetsUrl = configuration.gatewayConfiguration.assetsUrl;\n\n      currentUrl = currentUrl.replace(/#*$/, \"\");\n\n      if (this._venmoPaymentContextId) {\n        if (this._shouldUseLegacyFlow) {\n          // NEXT_MAJOR_VERSION stop adding the context id to the access token.\n          // the context id is placed here for backwards compatiblity\n          // with versions of the venmo app that did not support\n          // pulling the resource id off of the query params\n          accessToken += \"|pcid:\" + this._venmoPaymentContextId;\n        } else {\n          params.resource_id = this._venmoPaymentContextId; // eslint-disable-line camelcase\n        }\n      }\n\n      if (this._riskCorrelationId) {\n        params[\"client-metadata-id\"] = this._riskCorrelationId;\n      }\n\n      if (this._shouldIncludeReturnUrls() || this._useAllowDesktopWebLogin) {\n        if (this._useAllowDesktopWebLogin) {\n          currentUrl =\n            this._assetsUrl + \"/web/\" + VERSION + \"/html/redirect-frame.html\";\n        }\n        params[\"x-success\"] = currentUrl + \"#venmoSuccess=1\";\n        params[\"x-cancel\"] = currentUrl + \"#venmoCancel=1\";\n        params[\"x-error\"] = currentUrl + \"#venmoError=1\";\n      } else {\n        params[\"x-success\"] = \"NOOP\";\n        params[\"x-cancel\"] = \"NOOP\";\n        params[\"x-error\"] = \"NOOP\";\n      }\n\n      if (!this._allowAndroidRecreation) {\n        params.allowAndroidRecreation = 0;\n      } else {\n        params.allowAndroidRecreation = 1;\n      }\n\n      params.ua = window.navigator.userAgent;\n      params.braintree_merchant_id = // eslint-disable-line camelcase\n        this._profileId || venmoConfiguration.merchantId;\n      params.braintree_access_token = accessToken; // eslint-disable-line camelcase\n      params.braintree_environment = venmoConfiguration.environment; // eslint-disable-line camelcase\n      params.braintree_sdk_data = btoa(JSON.stringify(braintreeData)); // eslint-disable-line camelcase\n\n      return (\n        getVenmoUrl({\n          useAllowDesktopWebLogin: this._useAllowDesktopWebLogin,\n          mobileWebFallBack: this._mobileWebFallBack,\n          enableVenmoSandbox: this._enableVenmoSandbox,\n          environment: venmoConfiguration.environment,\n        }) +\n        \"?\" +\n        querystring.stringify(params)\n      );\n    }.bind(this)\n  );\n};\n\n/**\n * Returns a boolean indicating whether the current browser supports Venmo as a payment method. Please note that iOS Chrome is not supported when the Venmo button is rendered in an iFrame.\n *\n * If `options.allowNewBrowserTab` is false when calling {@link module:braintree-web/venmo.create|venmo.create}, this method will return true only for browsers known to support returning from the Venmo app to the same browser tab. Currently, this is limited to iOS Safari and Android Chrome.\n * If `options.allowWebviews` is false when calling {@link module:braintree-web/venmo.create|venmo.create}, this method will return true only for mobile browsers that are not webviews.\n * @public\n * @returns {boolean} True if the current browser is supported, false if not.\n */\nVenmo.prototype.isBrowserSupported = function () {\n  return isBrowserSupported.isBrowserSupported({\n    allowNewBrowserTab: this._allowNewBrowserTab,\n    allowWebviews: this._allowWebviews,\n    allowDesktop: this._allowDesktop,\n    allowDesktopWebLogin: this._allowDesktopWebLogin,\n    allowNonDefaultBrowsers: this._allowNonDefaultBrowsers,\n  });\n};\n\n/**\n * Returns a boolean indicating whether a Venmo tokenization result is ready to be processed immediately.\n *\n * This method should be called after initialization to see if the result of Venmo authorization is available. If it returns true, call {@link Venmo#tokenize|tokenize} immediately to process the results.\n *\n * @public\n * @returns {boolean} True if the results of Venmo payment authorization are available and ready to process.\n */\nVenmo.prototype.hasTokenizationResult = function () {\n  return this._hasTokenizationResult();\n};\n\n// a private version that lets us pass in a custom hash\n// when listening on a hashchange event\nVenmo.prototype._hasTokenizationResult = function (hash) {\n  var params = getFragmentParameters(hash);\n  var hashFromTopUrl = {};\n  var paramsFromUrl = urlParams.getUrlParams();\n  var targetWindow = window;\n\n  // If in same-origin iframe, also check top window hash (where redirect params are)\n  try {\n    if (window.top && window.top !== window && window.top.location) {\n      targetWindow = window.top;\n      hashFromTopUrl = getFragmentParameters(targetWindow.location.hash);\n    }\n    // eslint-disable-next-line no-unused-vars\n  } catch (_e) {\n    // Cross-origin iframe - silently ignore\n  }\n\n  if (paramsFromUrl.resource_id) {\n    this._venmoPaymentContextId = paramsFromUrl.resource_id;\n  } else if (params.id) {\n    this._venmoPaymentContextId = params.id;\n  } else if (hashFromTopUrl.id) {\n    this._venmoPaymentContextId = hashFromTopUrl.id;\n  }\n\n  return (\n    typeof (\n      params.venmoSuccess ||\n      params.venmoError ||\n      params.venmoCancel ||\n      hashFromTopUrl.venmoSuccess ||\n      hashFromTopUrl.venmoError ||\n      hashFromTopUrl.venmoCancel\n    ) !== \"undefined\"\n  );\n};\n\nVenmo.prototype._shouldIncludeReturnUrls = function () {\n  // When the SDK is initialized in a non-default mobile browser (but not webviews\n  // and not Android)), it is not possible to automatically return to the browser\n  // from which the Venmo app was launched. When return URLs are omitted,\n  // the Venmo app prompts the user to return manually.\n  //\n  // Note: webviews are excluded from this restriction because deep link return URLs are\n  // specifically designed to work with webviews.\n  // Note: Android is excluded from this restriction because it can always return to the\n  // browser from which the Venmo app was launched.\n  if (\n    isBrowserSupported.isNonDefaultBrowser() &&\n    !browserDetection.isWebview() &&\n    !browserDetection.isAndroid()\n  ) {\n    return (\n      Boolean(this._deepLinkReturnUrl) && this._shouldUseRedirectStrategy()\n    );\n  }\n\n  // For all other cases (webviews, Android, default browsers), if a deep link\n  // return URL is provided, always include return URLs so the Venmo app can\n  // deep link back\n  if (this._deepLinkReturnUrl) {\n    return true;\n  }\n\n  // Cannot include return URLs if in iframe or manual return is required\n  if (this._cannotHaveReturnUrls) {\n    return false;\n  }\n\n  // Special case: iOS Safari in private mode should include return URLs\n  // because it does allow app switching back to Safari\n  if (this._isIncognito && browserDetection.isIosSafari()) {\n    return true;\n  }\n\n  // For all other incognito/private modes, exclude return URLs\n  if (this._isIncognito) {\n    return false;\n  }\n\n  // Default case: include return URLs\n  return true;\n};\n\nVenmo.prototype._isDesktop = function () {\n  return !(browserDetection.isIos() || browserDetection.isAndroid());\n};\n\n/**\n * Detects iOS Safari in iframe without Venmo app installed\n * @private\n * @returns {boolean} True if we're on iOS mobile web, in an iframe, and the Venmo app is not installed\n */\nVenmo.prototype._isIOSIframeWithoutVenmoApp = function () {\n  return (\n    browserDetection.isIos() &&\n    inIframe() &&\n    !this._venmoNativeAppIsInstalled() &&\n    !this._requireManualReturn // Respect explicit merchant override\n  );\n};\n\n/**\n * Launches the Venmo flow and returns a nonce payload.\n *\n * If {@link Venmo#hasTokenizationResult|hasTokenizationResult} returns true, calling tokenize will immediately process and return the results without initiating the Venmo payment authorization flow.\n *\n * Only one Venmo flow can be active at a time. One way to achieve this is to disable your Venmo button while the flow is open.\n * @public\n * @param {object} [options] Options for tokenization.\n * @param {number} [options.processResultsDelay=500] The amount of time in milliseconds to delay processing the results. In most cases, this value should be left as the default.\n * @param {callback} [callback] The second argument, <code>data</code>, is a {@link Venmo~tokenizePayload|tokenizePayload}. If no callback is provided, the method will return a Promise that resolves with a {@link Venmo~tokenizePayload|tokenizePayload}.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * button.addEventListener('click', function () {\n *   // Disable the button so that we don't attempt to open multiple popups.\n *   button.setAttribute('disabled', 'disabled');\n *\n *   // Because tokenize opens a new window, this must be called\n *   // as a result of a user action, such as a button click.\n *   venmoInstance.tokenize().then(function (payload) {\n *     // Submit payload.nonce to your server\n *     // Use payload.username to get the Venmo username and display any UI\n *   }).catch(function (tokenizeError) {\n *     // Handle flow errors or premature flow closure\n *     switch (tokenizeErr.code) {\n *       case 'VENMO_APP_CANCELED':\n *         console.log('User canceled Venmo flow.');\n *         break;\n *       case 'VENMO_CANCELED':\n *         console.log('User canceled Venmo, or Venmo app is not available.');\n *         break;\n *       default:\n *         console.error('Error!', tokenizeErr);\n *     }\n *   }).then(function () {\n *     button.removeAttribute('disabled');\n *   });\n * });\n */\nVenmo.prototype.tokenize = function (options) {\n  var self = this;\n  var tokenizationPromise;\n\n  options = options || {};\n\n  if (this._tokenizationInProgress === true) {\n    return Promise.reject(\n      new BraintreeError(errors.VENMO_TOKENIZATION_REQUEST_ACTIVE)\n    );\n  }\n\n  this._tokenizationInProgress = true;\n  if (this._useDesktopQRFlow) {\n    // for the desktop flow, we create a venmo payment\n    // context and then present a qr code modal to the\n    // customer and they will open up their venmo app\n    // and scan it and approve the purchase on their\n    // mobile device. The sdk will start polling\n    // in order to determine when the status of the\n    // payment context has updated and then pass the\n    // resulting nonce back to the merchant.\n    tokenizationPromise = this._tokenizeForDesktopQRFlow(options);\n  } else if (this._useAllowDesktopWebLogin) {\n    /**\n     * For Desktop Web Login, we open a browser popup to allow for authorization. Once authorized, the redirect urls are used by Venmo, and we query the API for a payment context status update.\n     *\n     * - Payment context is created on initialization\n     * - Popup is opened to Venmo login url.\n     *  - The payment is authorized or canceled, and the popup is closed\n     * - Once the popup is closed, we query the API for a payment context status update\n     *\n     * This is an alternate, opt-in flow to be used the Desktop QR Flow is not desired for Pay with Venmo desktop experiences.\n     */\n    tokenizationPromise = this._tokenizeWebLoginWithRedirect(options);\n  } else if (\n    this._cannotHaveReturnUrls &&\n    !this._isIOSIframeWithoutVenmoApp()\n  ) {\n    // in the manual return strategy, we create the payment\n    // context on initialization, then continually poll once\n    // the app switch begins until we get a response indiciating\n    // the payment context was approved by the customer on the\n    // Venmo app. The payment context response also includes a\n    // nonce. There are 2 cases where we use the manual return\n    // strategy:\n    // 1. the sdk is instantiated in an iframe, because\n    //    the venmo app is unable to redirect automatically\n    //    when that is the case so we rely on the customer\n    //    to do a manual redirect and continunally poll for\n    //    updates on the payment context to get the nonce\n    // 2. same deal for when `requireManualReturn` is configured\n    // NOTE: We exclude iOS iframe without Venmo app because it causes\n    // network errors due to Apple's iframe cross-domain restrictions\n    tokenizationPromise = this._tokenizeForMobileWithManualReturn();\n  } else {\n    // the default mobile flow is to app switch to the\n    // venmo app, and then have the venmo app switch\n    // back to the page with the venmo nonce details\n    // encoded into the hash portion of the url. If\n    // `paymentMethodUsage` is provided when instantiating\n    // the sdk, we also create a payment context and pass\n    // the resource id to the Venmo app during the app switch.\n    // Once we get a succesful return, we ping the payment\n    // context query to get any additional data needed\n    // to send back to the merchant.\n    tokenizationPromise =\n      this._tokenizeForMobileWithHashChangeListeners(options);\n  }\n\n  return tokenizationPromise\n    .then(function (payload) {\n      return self._createPromise\n        .then(function (client) {\n          return self._createVenmoPaymentContext(client);\n        })\n        .then(function () {\n          self._tokenizationInProgress = false;\n          self._venmoWindow = null;\n\n          return formatTokenizePayload(payload);\n        });\n    })\n    .catch(function (err) {\n      return self._createPromise\n        .then(function (client) {\n          // We create a new Payment Context because if the last one failed, then presumably we don't want to use it again.\n          // On the first pass, we create the payment context at initialization, and since we used that first one we now need to create a new one\n          // for the next time someone tries to tokenize.\n          return self._createVenmoPaymentContext(client);\n        })\n        .then(function () {\n          self._tokenizationInProgress = false;\n          self._venmoWindow = null;\n\n          return Promise.reject(err);\n        });\n    });\n};\n\n/**\n * Cancels the venmo tokenization process\n *\n * @public\n * @function Venmo~cancelTokenization\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * venmoTokenizeButton.addEventListener('click', function () {\n *   venmoInstance.tokenize().then(function (payload) {\n *     // handle payload\n *   }).catch(function (err) {\n *     if (err.code === 'VENMO_TOKENIZATION_CANCELED_BY_MERCHANT') {\n *       // tokenization was canceled by calling cancelTokenization\n *     }\n *   });\n * });\n *\n * venmoCancelButton.addEventListener('click', function () {\n *   // Hide the button when the venmo flow is not in progress\n *   venmoCancelButton.style.display = \"none\";\n *\n *   venmoInstance.cancelTokenization().then(function () {\n *     // done canceling the flow\n *   }).catch(function (err) {\n *     // should only get here if there is no tokenization in progress\n *   });\n * });\n */\nVenmo.prototype.cancelTokenization = function () {\n  if (!this._tokenizationInProgress) {\n    return Promise.reject(\n      new BraintreeError(errors.VENMO_TOKENIZATION_REQUEST_NOT_ACTIVE)\n    );\n  }\n\n  this._removeVisibilityEventListener();\n\n  // important to reject the tokenization promise first\n  // so the tokenize method rejects with this error\n  // rather than a customer canceled error in the mobile\n  // polling and desktop flows\n  if (this._tokenizePromise) {\n    this._tokenizePromise.reject(\n      new BraintreeError(errors.VENMO_TOKENIZATION_CANCELED_BY_MERCHANT)\n    );\n  }\n\n  // Clear polling flag\n  this._pollingInProgress = false;\n\n  return Promise.all([\n    this._cancelMobilePaymentContext(),\n    this._cancelVenmoDesktopContext(),\n  ]);\n};\n\nVenmo.prototype._tokenizeWebLoginWithRedirect = function () {\n  var self = this;\n  var webLoginOptions;\n\n  analytics.sendEventPlus(\n    self._createPromise,\n    \"venmo.tokenize.web-login.start\",\n    {\n      context_id: self._venmoPaymentContextId, // eslint-disable-line camelcase\n    }\n  );\n  this._tokenizePromise = new ExtendedPromise();\n\n  return this.getUrl().then(function (url) {\n    webLoginOptions = {\n      checkForStatusChange:\n        self._checkPaymentContextStatusAndProcessResult.bind(self),\n      cancelTokenization: self.cancelTokenization.bind(self),\n      frameServiceInstance: self._frameServiceInstance,\n      venmoUrl: url,\n      debug: self._isDebug,\n      checkPaymentContextStatus: self._checkPaymentContextStatus.bind(self),\n      analyticsCallback: function (event, status) {\n        analytics.sendEventPlus(\n          self._createPromise,\n          \"venmo.desktop.\" + event + \".\" + status,\n          {\n            context_id: self._venmoPaymentContextId, // eslint-disable-line camelcase\n          }\n        );\n      },\n    };\n    if (self._cspNonce) {\n      webLoginOptions = assign({}, webLoginOptions, {\n        styleCspNonce: self._cspNonce,\n      });\n    }\n    desktopWebLogin\n      .runWebLogin(webLoginOptions)\n      .then(function (payload) {\n        analytics.sendEventPlus(\n          self._createPromise,\n          \"venmo.tokenize.web-login.success\",\n          {\n            context_id: self._venmoPaymentContextId, // eslint-disable-line camelcase\n          }\n        );\n\n        self._tokenizePromise.resolve({\n          paymentMethodNonce: payload.paymentMethodId,\n          username: payload.userName,\n          payerInfo: payload.payerInfo,\n          id: self._venmoPaymentContextId,\n        });\n      })\n      .catch(function (err) {\n        analytics.sendEventPlus(\n          self._createPromise,\n          \"venmo.tokenize.web-login.failure\",\n          {\n            context_id: self._venmoPaymentContextId, // eslint-disable-line camelcase\n          }\n        );\n\n        self._tokenizePromise.reject(err);\n      });\n\n    return self._tokenizePromise;\n  });\n};\n\nVenmo.prototype._queryPaymentContextStatus = function (id) {\n  var self = this;\n\n  analytics.sendEventPlus(\n    self._createPromise,\n    \"venmo.query-payment-context.started\",\n    {\n      context_id: id, // eslint-disable-line camelcase\n    }\n  );\n\n  return this._createPromise\n    .then(function (client) {\n      var query = self._shouldUseLegacyFlow\n        ? graphqlQueries.LEGACY_VENMO_PAYMENT_CONTEXT_STATUS_QUERY\n        : graphqlQueries.VENMO_PAYMENT_CONTEXT_STATUS_QUERY;\n\n      return client.request({\n        api: \"graphQLApi\",\n        data: {\n          query: query,\n          variables: {\n            id: id,\n          },\n        },\n      });\n    })\n    .then(function (response) {\n      analytics.sendEventPlus(\n        self._createPromise,\n        \"venmo.query-payment-context.succeeded\",\n        {\n          context_id: id, // eslint-disable-line camelcase\n        }\n      );\n\n      return response.data.node;\n    })\n    .catch(function (err) {\n      analytics.sendEventPlus(\n        self._createPromise,\n        \"venmo.query-payment-context.failed\",\n        {\n          context_id: id, // eslint-disable-line camelcase\n        }\n      );\n      throw err;\n    });\n};\n\n/**\n * Queries the GraphQL API to get the payment context and process the status. Retries until there is an update to the payment context status.\n * @name Venmo~checkPaymentContextStatusAndProcessResult\n * @ignore\n * @param {number} retryCount The counter for tracking number of retries made against the API.\n * @returns {Promise} Returns a promise\n */\nVenmo.prototype._checkPaymentContextStatusAndProcessResult = function (\n  retryCount\n) {\n  var self = this;\n\n  return self._checkPaymentContextStatus().then(function (node) {\n    var resultStatus = node.status;\n\n    if (resultStatus !== self._venmoPaymentContextStatus) {\n      self._venmoPaymentContextStatus = resultStatus;\n\n      analytics.sendEventPlus(\n        self._createPromise,\n        \"venmo.tokenize.web-login.status-change.\" + resultStatus.toLowerCase(),\n        {\n          context_id: self._venmoPaymentContextId, // eslint-disable-line camelcase\n        }\n      );\n\n      switch (resultStatus) {\n        case \"APPROVED\":\n          return Promise.resolve(node);\n        case \"CANCELED\":\n          return Promise.reject(\n            new BraintreeError(errors.VENMO_CUSTOMER_CANCELED)\n          );\n        case \"EXPIRED\":\n        case \"FAILED\":\n          return Promise.reject(\n            new BraintreeError(errors.VENMO_TOKENIZATION_FAILED)\n          );\n        default:\n      }\n    }\n\n    return new Promise(function (resolve, reject) {\n      if (retryCount < self._maxRetryCount) {\n        retryCount++;\n\n        self\n          ._checkPaymentContextStatusAndProcessResult(retryCount)\n          .then(resolve)\n          .catch(reject);\n      } else {\n        reject(new BraintreeError(errors.VENMO_TOKENIZATION_FAILED));\n      }\n    });\n  });\n};\n\nVenmo.prototype._checkPaymentContextStatus = function () {\n  var self = this;\n\n  return self\n    ._queryPaymentContextStatus(self._venmoPaymentContextId)\n    .catch(function (networkError) {\n      return Promise.reject(\n        new BraintreeError({\n          type: errors.VENMO_NETWORK_ERROR.type,\n          code: errors.VENMO_NETWORK_ERROR.code,\n          message: errors.VENMO_NETWORK_ERROR.message,\n          details: networkError,\n        })\n      );\n    })\n    .then(function (node) {\n      return Promise.resolve(node);\n    });\n};\n\nVenmo.prototype._validatePollingContext = function () {\n  if (!this._venmoPaymentContextId) {\n    return Promise.reject(\n      new BraintreeError(errors.VENMO_MOBILE_POLLING_TOKENIZATION_NO_CONTEXT_ID)\n    );\n  }\n\n  if (Date.now() > this._mobilePollingContextExpiresIn) {\n    return Promise.reject(\n      new BraintreeError(errors.VENMO_MOBILE_POLLING_TOKENIZATION_TIMEOUT)\n    );\n  }\n\n  return null;\n};\n\nVenmo.prototype._handleWindowClosure = function () {\n  var self = this;\n  var platform = self._determineAnalyticsCategory();\n\n  if (\n    self._venmoWindow &&\n    self._venmoWindow.closed &&\n    self._venmoPaymentContextStatus === \"CREATED\" &&\n    self._cancelOnReturnToBrowser === true\n  ) {\n    analytics.sendEventPlus(\n      self._createPromise,\n      \"venmo.appswitch.browser-window.closed\",\n      {\n        context_id: self._venmoPaymentContextId, // eslint-disable-line camelcase\n      }\n    );\n\n    self\n      ._cancelMobilePaymentContext()\n      .then(function () {\n        analytics.sendEventPlus(\n          self._createPromise,\n          \"venmo.tokenize.manual-return.canceled\",\n          {\n            context_id: self._venmoPaymentContextId, // eslint-disable-line camelcase\n            platform: platform,\n          }\n        );\n      })\n      .catch(function (_err) {\n        analytics.sendEventPlus(\n          self._createPromise,\n          \"venmo.tokenize.manual-return.canceled.error\",\n          {\n            context_id: self._venmoPaymentContextId, // eslint-disable-line camelcase\n            platform: platform,\n          }\n        );\n      });\n\n    return Promise.reject(\n      new BraintreeError(errors.VENMO_MOBILE_POLLING_TOKENIZATION_CANCELED)\n    );\n  }\n\n  return null;\n};\n\nVenmo.prototype._handleCancelOnReturn = function () {\n  var self = this;\n  var minPollsBeforeCancel, params;\n\n  if (!self._cancelOnReturnToBrowser) {\n    return null;\n  }\n\n  minPollsBeforeCancel = Math.ceil(\n    constants.DEFAULT_PROCESS_RESULTS_DELAY / self._mobilePollingInterval\n  );\n  params = getFragmentParameters();\n\n  self._pollCount++;\n\n  if (\n    typeof (params.venmoSuccess || params.venmoError || params.venmoCancel) ===\n      \"undefined\" &&\n    self._venmoPaymentContextStatus === \"CREATED\" &&\n    self._pollCount >= minPollsBeforeCancel\n  ) {\n    analytics.sendEventPlus(\n      self._createPromise,\n      \"venmo.appswitch.cancel-on-return-to-browser\",\n      {\n        context_id: self._venmoPaymentContextId, // eslint-disable-line camelcase\n      }\n    );\n\n    return self\n      ._cancelMobilePaymentContext()\n      .then(function () {\n        analytics.sendEventPlus(\n          self._createPromise,\n          \"venmo.appswitch.cancel-on-return-to-browser.success\",\n          {\n            context_id: self._venmoPaymentContextId, // eslint-disable-line camelcase\n          }\n        );\n      })\n      .catch(function () {\n        analytics.sendEventPlus(\n          self._createPromise,\n          \"venmo.appswitch.cancel-on-return-to-browser.error\",\n          {\n            context_id: self._venmoPaymentContextId, // eslint-disable-line camelcase\n          }\n        );\n      })\n      .finally(function () {\n        self._pollCount = 0;\n      });\n  }\n\n  return null;\n};\n\nVenmo.prototype._handleStatusChange = function (node) {\n  var self = this;\n  var newStatus = node.status;\n\n  if (newStatus !== self._venmoPaymentContextStatus) {\n    self._venmoPaymentContextStatus = newStatus;\n\n    analytics.sendEventPlus(\n      self._createPromise,\n      \"venmo.tokenize.manual-return.status-change.\" + newStatus.toLowerCase(),\n      {\n        context_id: self._venmoPaymentContextId, // eslint-disable-line camelcase\n        platform: self._determineAnalyticsCategory(),\n      }\n    );\n\n    switch (newStatus) {\n      case \"EXPIRED\":\n      case \"FAILED\":\n      case \"CANCELED\":\n        return Promise.reject(\n          new BraintreeError(\n            errors[\"VENMO_MOBILE_POLLING_TOKENIZATION_\" + newStatus]\n          )\n        );\n      case \"APPROVED\":\n        return Promise.resolve(node);\n      case \"CREATED\":\n      case \"SCANNED\":\n      default:\n      // any other statuses are irrelevant to the polling\n      // and can just be ignored\n    }\n  }\n\n  return self._continuePolling();\n};\n\nVenmo.prototype._continuePolling = function () {\n  var self = this;\n\n  return new Promise(function (resolve, reject) {\n    setTimeout(function () {\n      self._pollForStatusChange().then(resolve).catch(reject);\n    }, self._mobilePollingInterval);\n  });\n};\n\nVenmo.prototype._queryAndProcessStatus = function () {\n  var self = this;\n\n  return this._queryPaymentContextStatus(this._venmoPaymentContextId)\n    .catch(function (networkError) {\n      return Promise.reject(\n        new BraintreeError({\n          type: errors.VENMO_MOBILE_POLLING_TOKENIZATION_NETWORK_ERROR.type,\n          code: errors.VENMO_MOBILE_POLLING_TOKENIZATION_NETWORK_ERROR.code,\n          message:\n            errors.VENMO_MOBILE_POLLING_TOKENIZATION_NETWORK_ERROR.message,\n          details: {\n            originalError: networkError,\n          },\n        })\n      );\n    })\n    .then(function (node) {\n      return self._handleStatusChange(node);\n    });\n};\n\nVenmo.prototype._pollForStatusChange = function () {\n  var validationError = this._validatePollingContext();\n\n  if (validationError) {\n    return validationError;\n  }\n\n  var windowClosureResult = this._handleWindowClosure();\n  if (windowClosureResult) {\n    return windowClosureResult;\n  }\n\n  // This function might cancel the payment context. We will still rely on\n  // _queryAndProcessStatus to see that the status has changed to CANCELED.\n  this._handleCancelOnReturn();\n\n  return this._queryAndProcessStatus();\n};\n\nVenmo.prototype._startPolling = function () {\n  var self = this;\n  var platform = self._determineAnalyticsCategory();\n\n  // Prevent multiple concurrent polling loops\n  if (this._pollingInProgress) {\n    return this._tokenizePromise;\n  }\n\n  this._pollingInProgress = true;\n\n  this._pollForStatusChange()\n    .then(function (payload) {\n      self._pollingInProgress = false;\n      analytics.sendEventPlus(\n        self._createPromise,\n        \"venmo.tokenize.manual-return.success\",\n        {\n          context_id: self._venmoPaymentContextId, // eslint-disable-line camelcase\n          platform: platform,\n        }\n      );\n\n      self._tokenizePromise.resolve({\n        paymentMethodNonce: payload.paymentMethodId,\n        username: payload.userName,\n        payerInfo: payload.payerInfo,\n        id: self._venmoPaymentContextId,\n      });\n    })\n    .catch(function (err) {\n      self._pollingInProgress = false;\n      analytics.sendEventPlus(\n        self._createPromise,\n        \"venmo.tokenize.manual-return.failure\",\n        {\n          context_id: self._venmoPaymentContextId, // eslint-disable-line camelcase\n          platform: platform,\n        }\n      );\n\n      self._tokenizePromise.reject(err);\n    });\n\n  return this._tokenizePromise;\n};\n\nVenmo.prototype._tokenizeForMobileWithManualReturn = function () {\n  var self = this;\n\n  // Set polling expiry before checking for tokenization result\n  // in case processHashChangeFlowResults triggers polling\n  this._mobilePollingContextExpiresIn =\n    Date.now() + this._mobilePollingExpiresThreshold;\n\n  if (this.hasTokenizationResult()) {\n    return this.processHashChangeFlowResults();\n  }\n\n  analytics.sendEventPlus(\n    this._createPromise,\n    \"venmo.tokenize.manual-return.start\",\n    {\n      context_id: self._venmoPaymentContextId, // eslint-disable-line camelcase\n      platform: self._determineAnalyticsCategory(),\n    }\n  );\n\n  this._tokenizePromise = new ExtendedPromise();\n\n  // Start polling immediately (uses _pollingInProgress flag to prevent duplicates)\n  this._startPolling();\n\n  return this.getUrl().then(function (url) {\n    // Check again before app switch in case result appeared during getUrl()\n    // This prevents double app-switching if page already has tokenization result\n    if (self.hasTokenizationResult()) {\n      return self.processHashChangeFlowResults();\n    }\n\n    self.appSwitch(url);\n\n    return self._tokenizePromise;\n  });\n};\n\nVenmo.prototype._shouldUseRedirectStrategy = function () {\n  if (!browserDetection.isIos()) {\n    return false;\n  }\n\n  if (this._mobileWebFallBack === true) {\n    return true;\n  }\n\n  return this._useRedirectForIOS;\n};\n\nVenmo.prototype._tokenizeForMobileWithHashChangeListeners = function (options) {\n  var self = this;\n  var resultProcessingInProgress, visibilityChangeListenerTimeout;\n\n  if (this.hasTokenizationResult()) {\n    return this.processHashChangeFlowResults();\n  }\n  var platform = this._determineAnalyticsCategory();\n\n  analytics.sendEventPlus(this._createPromise, \"venmo.tokenize.mobile.start\", {\n    context_id: this._venmoPaymentContextId, // eslint-disable-line camelcase\n    platform: platform,\n  });\n  this._tokenizePromise = new ExtendedPromise();\n\n  this._previousHash = window.location.hash;\n\n  function completeFlow(hash) {\n    var error;\n\n    self\n      .processHashChangeFlowResults(hash)\n      .catch(function (err) {\n        analytics.sendEventPlus(\n          self._createPromise,\n          \"venmo.tokenize.mobile.failure\",\n          {\n            context_id: self._venmoPaymentContextId, // eslint-disable-line camelcase\n            platform: platform,\n          }\n        );\n        error = err;\n      })\n      .then(function (res) {\n        analytics.sendEventPlus(\n          self._createPromise,\n          \"venmo.tokenize.mobile.success\",\n          {\n            context_id: self._venmoPaymentContextId, // eslint-disable-line camelcase\n            platform: platform,\n          }\n        );\n        if (\n          !self._ignoreHistoryChanges &&\n          window.location.hash !== self._previousHash\n        ) {\n          window.location.hash = self._previousHash;\n        }\n        self._removeVisibilityEventListener();\n\n        if (error) {\n          self._tokenizePromise.reject(error);\n        } else {\n          self._tokenizePromise.resolve(res);\n        }\n        delete self._tokenizePromise;\n      });\n  }\n\n  // The Venmo SDK app switches back with the results of the\n  // tokenization encoded in the hash\n  this._onHashChangeListener = function (e) {\n    var hash = e.newURL.split(\"#\")[1];\n\n    if (!self._hasTokenizationResult(hash)) {\n      return;\n    }\n\n    resultProcessingInProgress = true;\n    clearTimeout(visibilityChangeListenerTimeout);\n    completeFlow(hash);\n  };\n\n  window.addEventListener(\"hashchange\", this._onHashChangeListener, false);\n\n  // Subscribe to document visibility change events to detect when app switch\n  // has returned. Acts as a fallback for the hashchange listener and catches\n  // the cancel case via manual app switch back\n  this._visibilityChangeListener = function () {\n    var delay =\n      options.processResultsDelay || constants.DEFAULT_PROCESS_RESULTS_DELAY;\n\n    if (!documentVisibility.isDocumentHidden()) {\n      if (self._venmoWindow && !self._venmoWindow.closed) {\n        self._venmoWindow.close();\n      }\n\n      if (!resultProcessingInProgress) {\n        visibilityChangeListenerTimeout = setTimeout(completeFlow, delay);\n      }\n    }\n  };\n\n  return this.getUrl().then(function (url) {\n    if (self.hasTokenizationResult()) {\n      // If result appeared during getUrl(), use completeFlow to ensure proper cleanup\n      // of listeners and _tokenizePromise\n      completeFlow();\n      return self._tokenizePromise;\n    }\n\n    self.appSwitch(url);\n\n    // Add a brief delay to ignore visibility change events that occur right before app switch\n    setTimeout(function () {\n      window.document.addEventListener(\n        documentVisibility.getVisibilityChangeEventName(),\n        self._visibilityChangeListener\n      );\n    }, constants.DOCUMENT_VISIBILITY_CHANGE_EVENT_DELAY);\n\n    return self._tokenizePromise;\n  });\n};\n\nVenmo.prototype._tokenizeForDesktopQRFlow = function () {\n  var self = this;\n\n  analytics.sendEvent(this._createPromise, \"venmo.tokenize.desktop.start\");\n\n  this._tokenizePromise = new ExtendedPromise();\n\n  this._createPromise\n    .then(function () {\n      return self._venmoDesktopInstance.launchDesktopFlow();\n    })\n    .then(function (payload) {\n      self._venmoDesktopInstance.hideDesktopFlow();\n\n      analytics.sendEventPlus(\n        self._createPromise,\n        \"venmo.tokenize.desktop.success\",\n        {\n          context_id: payload && payload.id, // eslint-disable-line camelcase\n        }\n      );\n\n      self._tokenizePromise.resolve(payload);\n    })\n    .catch(function (err) {\n      analytics.sendEventPlus(\n        self._createPromise,\n        \"venmo.tokenize.desktop.failure\",\n        {\n          // eslint-disable-next-line camelcase\n          context_id:\n            self._venmoDesktopInstance &&\n            self._venmoDesktopInstance.venmoContextId,\n        }\n      );\n\n      if (self._venmoDesktopInstance) {\n        self._venmoDesktopInstance.hideDesktopFlow();\n      }\n\n      if (err && err.reason === \"CUSTOMER_CANCELED\") {\n        self._tokenizePromise.reject(\n          new BraintreeError(errors.VENMO_DESKTOP_CANCELED)\n        );\n\n        return;\n      }\n\n      self._tokenizePromise.reject(\n        new BraintreeError({\n          type: errors.VENMO_DESKTOP_UNKNOWN_ERROR.type,\n          code: errors.VENMO_DESKTOP_UNKNOWN_ERROR.code,\n          message: errors.VENMO_DESKTOP_UNKNOWN_ERROR.message,\n          details: {\n            originalError: err,\n          },\n        })\n      );\n    });\n\n  return this._tokenizePromise;\n};\n\nVenmo.prototype._cancelMobilePaymentContext = function () {\n  var self = this;\n\n  return this._createPromise.then(function (client) {\n    var query;\n\n    if (self._venmoPaymentContextId) {\n      query = self._shouldUseLegacyFlow\n        ? graphqlQueries.LEGACY_UPDATE_PAYMENT_CONTEXT_QUERY\n        : graphqlQueries.UPDATE_PAYMENT_CONTEXT_QUERY;\n\n      return client.request({\n        api: \"graphQLApi\",\n        data: {\n          query: query,\n          variables: {\n            input: {\n              id: self._venmoPaymentContextId,\n              status: \"CANCELED\",\n            },\n          },\n        },\n      });\n    }\n\n    return Promise.resolve();\n  });\n};\n\nVenmo.prototype._cancelVenmoDesktopContext = function () {\n  var self = this;\n\n  return this._createPromise.then(function () {\n    if (self._venmoDesktopInstance) {\n      self._venmoDesktopInstance.updateVenmoDesktopPaymentContext(\"CANCELED\");\n    }\n\n    return Promise.resolve();\n  });\n};\n\n/**\n * Cleanly tear down anything set up by {@link module:braintree-web/venmo.create|create}.\n * @public\n * @param {callback} [callback] Called once teardown is complete. No data is returned if teardown completes successfully.\n * @example\n * venmoInstance.teardown();\n * @example <caption>With callback</caption>\n * venmoInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nVenmo.prototype.teardown = function () {\n  var self = this;\n\n  this._removeVisibilityEventListener();\n\n  return this._createPromise.then(\n    function () {\n      if (self._venmoDesktopInstance) {\n        self._venmoDesktopInstance.teardown();\n      }\n\n      clearTimeout(self._refreshPaymentContextTimeout);\n      self._cancelMobilePaymentContext();\n\n      convertMethodsToError(this, methods(Venmo.prototype));\n    }.bind(this)\n  );\n};\n\nVenmo.prototype._removeVisibilityEventListener = function () {\n  window.removeEventListener(\"hashchange\", this._onHashChangeListener);\n  window.document.removeEventListener(\n    documentVisibility.getVisibilityChangeEventName(),\n    this._visibilityChangeListener\n  );\n\n  delete this._visibilityChangeListener;\n  delete this._onHashChangeListener;\n};\n\n/**\n * The hash parameter in this function is optional. If no hash parameter is passed, the `getFragmentParameters` function will default to the hash present in the website's URL instead.\n *\n * There are two scenarios where this method is called:\n *\n * 1. When called within a browser that is capable of returning to the same tab that started the Venmo flow, we set up a listener to detect hash changes in the url. Part of the return to the merchant's website from the Venmo app includes encoding the details of the purchase in the hash of the url. The callback is invoked and the hash is pulled off from the event payload. The reason we pull the hash off of the event payload instead of pulling it directly from the URL is because sometimes a single page app will use the hash parameter for it's routing system, and it's possible to hit a race condition where the routing code has already removed the Venmo specific attributes from the hash before we are able to pull it off the url. Grabbing the hash from the event handler instead ensures we get the Venmo details, no matter what the url is converted to.\n * 2. The other scenario is for browsers that cannot return to the same tab, and instead the Venmo app must open a new tab. Since there is no hash listener to pull the hash from, we pull the hash details directly from the url using the `getFragmentParameters` method.\n *\n * @ignore\n * @param {string} [hash] Optionally provided browser url hash.\n * @returns {Promise} Returns a promise\n */\nVenmo.prototype.processHashChangeFlowResults = function (hash) {\n  var self = this;\n  var params = getFragmentParameters(hash);\n\n  // NEXT_MAJOR_VERSION only rely on payment context status call and stop relying on the\n  // content of the hash\n\n  return new Promise(function (resolve, reject) {\n    if (!self._shouldUseLegacyFlow) {\n      // Prevent multiple concurrent polling loops\n      if (!self._pollingInProgress) {\n        self._pollingInProgress = true;\n      }\n\n      self\n        ._pollForStatusChange()\n        .then(function (payload) {\n          self._pollingInProgress = false;\n          analytics.sendEventPlus(\n            self._createPromise,\n            \"venmo.appswitch.handle.payment-context-status-query.success\",\n            {\n              context_id: self._venmoPaymentContextId, // eslint-disable-line camelcase\n            }\n          );\n\n          if (window.popupBridge) {\n            analytics.sendEvent(\n              self._createPromise,\n              \"popup-bridge:venmo:succeeded\"\n            );\n          }\n\n          return resolve({\n            paymentMethodNonce: payload.paymentMethodId,\n            username: payload.userName,\n            payerInfo: payload.payerInfo,\n            id: self._venmoPaymentContextId,\n          });\n        })\n        .catch(function (err) {\n          self._pollingInProgress = false;\n          if (\n            err.code === errors.VENMO_MOBILE_POLLING_TOKENIZATION_CANCELED.code\n          ) {\n            if (window.popupBridge) {\n              analytics.sendEvent(\n                self._createPromise,\n                \"popup-bridge:venmo:canceled\"\n              );\n            }\n            // We want to reject in this case because if the process was canceled, we don't want to take the happy path\n            reject(err);\n          } else if (window.popupBridge) {\n            analytics.sendEvent(\n              self._createPromise,\n              \"popup-bridge:venmo:failed\"\n            );\n          }\n\n          analytics.sendEventPlus(\n            self._createPromise,\n            \"venmo.process-results.payment-context-status-query-failed\",\n            {\n              context_id: self._venmoPaymentContextId, // eslint-disable-line camelcase\n            }\n          );\n          // If the polling request fails, but not because of cancelization, we will rely on the params provided from the hash\n          resolve(params);\n        });\n    } else if (params.venmoSuccess) {\n      analytics.sendEvent(\n        self._createPromise,\n        \"venmo.appswitch.handle.success\"\n      );\n\n      if (window.popupBridge) {\n        analytics.sendEvent(\n          self._createPromise,\n          \"popup-bridge:venmo:succeeded\"\n        );\n      }\n\n      resolve(params);\n    } else if (params.venmoError) {\n      analytics.sendEvent(self._createPromise, \"venmo.appswitch.handle.error\");\n\n      if (window.popupBridge) {\n        analytics.sendEvent(self._createPromise, \"popup-bridge:venmo:failed\");\n      }\n\n      reject(\n        new BraintreeError({\n          type: errors.VENMO_APP_FAILED.type,\n          code: errors.VENMO_APP_FAILED.code,\n          message: errors.VENMO_APP_FAILED.message,\n          details: {\n            originalError: {\n              message: decodeURIComponent(params.errorMessage),\n              code: params.errorCode,\n            },\n          },\n        })\n      );\n    } else if (params.venmoCancel) {\n      analytics.sendEvent(self._createPromise, \"venmo.appswitch.handle.cancel\");\n\n      if (window.popupBridge) {\n        analytics.sendEvent(self._createPromise, \"popup-bridge:venmo:canceled\");\n      }\n\n      reject(new BraintreeError(errors.VENMO_APP_CANCELED));\n    } else {\n      // User has either manually switched back to browser, or app is not available for app switch\n      analytics.sendEvent(\n        self._createPromise,\n        \"venmo.appswitch.cancel-or-unavailable\"\n      );\n      reject(new BraintreeError(errors.VENMO_CANCELED));\n    }\n\n    self._clearFragmentParameters();\n  });\n};\n\nVenmo.prototype._clearFragmentParameters = function () {\n  if (this._ignoreHistoryChanges) {\n    return;\n  }\n\n  if (\n    typeof window.history.replaceState === \"function\" &&\n    window.location.hash\n  ) {\n    history.pushState(\n      {},\n      \"\",\n      window.location.href.slice(0, window.location.href.indexOf(\"#\"))\n    );\n  }\n};\n\nfunction getFragmentParameters(hash) {\n  var targetHash = \"\";\n  var topHash = \"\";\n\n  // If explicit hash provided, use it\n  if (hash) {\n    targetHash = hash;\n  } else {\n    // No hash provided - prefer top window hash in same-origin iframes\n    targetHash = window.location.hash.substring(1);\n\n    try {\n      if (window.top && window.top !== window && window.top.location) {\n        // In same-origin iframe, prefer top window hash (where redirect params are)\n        topHash = window.top.location.hash.substring(1);\n\n        if (topHash) {\n          targetHash = topHash;\n        }\n      }\n      // eslint-disable-next-line no-unused-vars\n    } catch (_e) {\n      // Cross-origin iframe - use current window hash\n    }\n  }\n\n  var keyValuesArray = targetHash.split(\"&\");\n\n  var parsedParams = keyValuesArray.reduce(function (toReturn, keyValue) {\n    var parts = keyValue.split(\"=\");\n    // some Single Page Apps may pre-pend a / to the first value\n    // in the hash, assuming it's a route in their app\n    // instead of information from Venmo, this removes all\n    // non-alphanumeric characters from the keys in the params\n    var decodedKey = decodeURIComponent(parts[0]).replace(/\\W/g, \"\");\n    var key = snakeCaseToCamelCase(decodedKey);\n    var value = decodeURIComponent(parts[1]);\n\n    toReturn[key] = value;\n\n    return toReturn;\n  }, {});\n\n  if (parsedParams.resourceId) {\n    parsedParams.id = parsedParams.resourceId;\n  }\n\n  return parsedParams;\n}\n\nfunction formatUserName(username) {\n  username = username || \"\";\n\n  // NEXT_MAJOR_VERSION the web sdks have a prepended @ sign\n  // but the ios and android ones do not. This should be standardized\n  return \"@\" + username.replace(\"@\", \"\");\n}\n\nfunction formatTokenizePayload(payload) {\n  var formattedPayload = {\n    nonce: payload.paymentMethodNonce,\n    type: \"VenmoAccount\",\n    details: {\n      username: formatUserName(payload.username),\n      paymentContextId: payload.id,\n    },\n  };\n\n  if (payload.payerInfo) {\n    formattedPayload.details.payerInfo = payload.payerInfo;\n    formattedPayload.details.payerInfo.userName = formatUserName(\n      payload.payerInfo.userName\n    );\n  }\n\n  return formattedPayload;\n}\n\nfunction isIosWebviewInDeepLinkReturnUrlFlow() {\n  // we know it's a webview because this flow only gets\n  // used when checking the deep link flow\n  // test the platform here to get around custom useragents\n  return (\n    window.navigator.platform &&\n    /iPhone|iPad|iPod/.test(window.navigator.platform)\n  );\n}\n\nmodule.exports = wrapPromise.wrapPrototype(Venmo);\n\n},{\"../lib/analytics\":143,\"../lib/assign\":146,\"../lib/braintree-error\":149,\"../lib/convert-methods-to-error\":151,\"../lib/document-visibility\":158,\"../lib/in-iframe\":176,\"../lib/is-verified-domain\":180,\"../lib/methods\":182,\"../lib/querystring\":184,\"../lib/snake-case-to-camel-case\":186,\"../lib/url-params\":187,\"./external/\":249,\"./external/queries\":250,\"./shared/browser-detection\":253,\"./shared/constants\":254,\"./shared/errors\":255,\"./shared/get-venmo-url\":257,\"./shared/supports-venmo\":258,\"./shared/web-login-backdrop\":259,\"@braintree/extended-promise\":34,\"@braintree/wrap-promise\":43}],261:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Visa Checkout - Creation Error Codes\n * @description Errors that occur when [creating the Visa Checkout component](./module-braintree-web_venmo.html#.create).\n * @property {MERCHANT} VISA_CHECKOUT_NOT_ENABLED Occurs when Visa Checkout is not enabled in the Braintree control panel.\n */\n\n/**\n * @name BraintreeError.Visa Checkout - createInitOptions Error Codes\n * @description Errors that occur when using the [`createInitOptions` method](./VisaCheckout.html#createInitOptions).\n * @property {MERCHANT} VISA_CHECKOUT_INIT_OPTIONS_REQUIRED Occurs when no options are provided to method.\n */\n\n/**\n * @name BraintreeError.Visa Checkout - tokenize Error Codes\n * @description Errors that occur when using the [`tokenize` method](./VisaCheckout.html#tokenize).\n * @property {MERCHANT} VISA_CHECKOUT_PAYMENT_REQUIRED Occurs when no payment data is not provided.\n * @property {NETWORK} VISA_CHECKOUT_TOKENIZATION Occurs when tokenization fails.\n */\n\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\n\nmodule.exports = {\n  VISA_CHECKOUT_NOT_ENABLED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VISA_CHECKOUT_NOT_ENABLED\",\n    message: \"Visa Checkout is not enabled for this merchant.\",\n  },\n  VISA_CHECKOUT_INIT_OPTIONS_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VISA_CHECKOUT_INIT_OPTIONS_REQUIRED\",\n    message: \"initOptions requires an object.\",\n  },\n  VISA_CHECKOUT_PAYMENT_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VISA_CHECKOUT_PAYMENT_REQUIRED\",\n    message: \"tokenize requires callid, encKey, and encPaymentData.\",\n  },\n  VISA_CHECKOUT_TOKENIZATION: {\n    type: BraintreeError.types.NETWORK,\n    code: \"VISA_CHECKOUT_TOKENIZATION\",\n    message:\n      \"A network error occurred when processing the Visa Checkout payment.\",\n  },\n};\n\n},{\"../lib/braintree-error\":149}],262:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * @module braintree-web/visa-checkout\n * @description Processes Visa Checkout. *This component is currently in beta and is subject to change.*\n */\n\nvar basicComponentVerification = _dereq_(\"../lib/basic-component-verification\");\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar createDeferredClient = _dereq_(\"../lib/create-deferred-client\");\nvar createAssetsUrl = _dereq_(\"../lib/create-assets-url\");\nvar VisaCheckout = _dereq_(\"./visa-checkout\");\nvar analytics = _dereq_(\"../lib/analytics\");\nvar errors = _dereq_(\"./errors\");\nvar VERSION = \"3.145.0\";\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {callback} [callback] The second argument, `data`, is the {@link VisaCheckout} instance. If no callback is provided, `create` returns a promise that resolves with the {@link VisaCheckout} instance.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nfunction create(options) {\n  var name = \"Visa Checkout\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      return createDeferredClient.create({\n        authorization: options.authorization,\n        client: options.client,\n        debug: options.debug,\n        assetsUrl: createAssetsUrl.create(options.authorization),\n        name: name,\n      });\n    })\n    .then(function (client) {\n      options.client = client;\n\n      if (\n        !options.client.getConfiguration().gatewayConfiguration.visaCheckout\n      ) {\n        return Promise.reject(\n          new BraintreeError(errors.VISA_CHECKOUT_NOT_ENABLED)\n        );\n      }\n\n      analytics.sendEvent(options.client, \"visacheckout.initialized\");\n\n      return new VisaCheckout(options);\n    });\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `{@pkg version}`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/analytics\":143,\"../lib/basic-component-verification\":147,\"../lib/braintree-error\":149,\"../lib/create-assets-url\":153,\"../lib/create-deferred-client\":155,\"./errors\":261,\"./visa-checkout\":263,\"@braintree/wrap-promise\":43}],263:[function(_dereq_,module,exports){\n\"use strict\";\n\nvar BraintreeError = _dereq_(\"../lib/braintree-error\");\nvar analytics = _dereq_(\"../lib/analytics\");\nvar errors = _dereq_(\"./errors\");\nvar jsonClone = _dereq_(\"../lib/json-clone\");\nvar methods = _dereq_(\"../lib/methods\");\nvar convertMethodsToError = _dereq_(\"../lib/convert-methods-to-error\");\nvar wrapPromise = _dereq_(\"@braintree/wrap-promise\");\nvar cardTypeTransformMap = {\n  Visa: \"VISA\",\n  MasterCard: \"MASTERCARD\",\n  Discover: \"DISCOVER\",\n  \"American Express\": \"AMEX\",\n};\n\n/**\n * Visa Checkout Address object.\n * @typedef {object} VisaCheckout~Address\n * @property {string} countryCode The customer's country code.\n * @property {string} extendedAddress The customer's extended address.\n * @property {string} firstName The customer's first name.\n * @property {string} lastName The customer's last name.\n * @property {string} locality The customer's locality.\n * @property {string} postalCode The customer's postal code.\n * @property {string} region The customer's region.\n * @property {string} streetAddress The customer's street address.\n * @property {string} phoneNumber The customer's phone number.\n */\n\n/**\n * Visa Checkout UserData object.\n * @typedef {object} VisaCheckout~UserData\n * @property {string} userEmail The customer's email address.\n * @property {string} userFirstName The customer's first name.\n * @property {string} userLastName The customer's last name.\n * @property {string} userFullName The customer's full name.\n * @property {string} userName The customer's username.\n */\n\n/**\n * Visa Checkout tokenize payload.\n * @typedef {object} VisaCheckout~tokenizePayload\n * @property {string} nonce The payment method nonce.\n * @property {object} details Additional account details.\n * @property {string} details.cardType Type of card, ex: Visa, MasterCard.\n * @property {string} details.lastFour Last four digits of card number.\n * @property {string} details.lastTwo Last two digits of card number.\n * @property {string} description A human-readable description.\n * @property {string} type The payment method type, always `VisaCheckoutCard`.\n * @property {VisaCheckout~Address} billingAddress The customer's billing address.\n * @property {VisaCheckout~Address} shippingAddress The customer's shipping address.\n * @property {VisaCheckout~UserData} userData Information about the customer.\n * @property {object} binData Information about the card based on the bin.\n * @property {string} binData.commercial Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.countryOfIssuance The country of issuance.\n * @property {string} binData.debit Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.durbinRegulated Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.healthcare Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.issuingBank The issuing bank.\n * @property {string} binData.payroll Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.prepaid Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.productId The product id.\n * @property {string} binData.business Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.consumer Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.purchase Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.corporate Possible values: 'Yes', 'No', 'Unknown'.\n */\n\n/**\n * @class\n * @param {object} options The Visa Checkout {@link module:braintree-web/visa-checkout.create create} options.\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/visa-checkout.create|braintree-web.visa-checkout.create} instead.</strong>\n * @classdesc This class represents a Visa Checkout component produced by {@link module:braintree-web/visa-checkout.create|braintree-web/visa-checkout.create}. Instances of this class have methods for interacting with Visa Checkout's JavaScript library.\n */\nfunction VisaCheckout(options) {\n  this._client = options.client;\n}\n\nfunction transformCardTypes(cardTypes) {\n  return cardTypes.reduce(function (acc, type) {\n    if (cardTypeTransformMap.hasOwnProperty(type)) {\n      return acc.concat(cardTypeTransformMap[type]);\n    }\n\n    return acc;\n  }, []);\n}\n\n/**\n * Creates an `initOptions` object from the passed `options`, applying properties that Braintree needs to transact Visa Checkout.\n *\n * Braintree will apply these properties if they do not exist on the given `options`:\n *  - `apikey`\n *  - `externalClientId`\n *  - `settings.payment.cardBrands`\n *\n * Braintree will overwrite `settings.dataLevel = 'FULL'` to access the full payment method.\n * @public\n * @param {object} options The base `initOptions` that will be used to init Visa Checkout.\n * @param {string} [options.apikey] The API key used to initialize Visa Checkout. When not supplied, Braintree will set this property.\n * @param {string} [options.externalClientId] The external client ID key used to initialize Visa Checkout. When not supplied, Braintree will set this property.\n * @param {object} [options.settings] The settings object used to initialize Visa Checkout.\n * @param {string} [options.settings.dataLevel] The data level used to initialize Visa Checkout. Braintree will overwrite this property to 'FULL'.\n * @param {object} [options.settings.payment] The payment object used to initialize Visa Checkout.\n * @param {string[]} [options.settings.payment.cardBrands] The card brands that Visa Checkout will allow the customer to pay with. When not supplied, Braintree will set this property.\n * @returns {object} `initOptions` The `initOptions` that Visa Checkout should be initialized with.\n */\nVisaCheckout.prototype.createInitOptions = function (options) {\n  var initOptions;\n  var gatewayConfiguration =\n    this._client.getConfiguration().gatewayConfiguration;\n  var visaCheckoutConfiguration = gatewayConfiguration.visaCheckout;\n\n  if (!options) {\n    throw new BraintreeError(errors.VISA_CHECKOUT_INIT_OPTIONS_REQUIRED);\n  }\n\n  initOptions = jsonClone(options);\n  initOptions.apikey = initOptions.apikey || visaCheckoutConfiguration.apikey;\n  initOptions.encryptionKey = visaCheckoutConfiguration.encryptionKey;\n  initOptions.externalClientId =\n    initOptions.externalClientId || visaCheckoutConfiguration.externalClientId;\n  initOptions.settings = initOptions.settings || {};\n  initOptions.settings.dataLevel = \"FULL\";\n  initOptions.settings.payment = initOptions.settings.payment || {};\n\n  if (!initOptions.settings.payment.cardBrands) {\n    initOptions.settings.payment.cardBrands = transformCardTypes(\n      gatewayConfiguration.visaCheckout.supportedCardTypes\n    );\n  }\n\n  return initOptions;\n};\n\n/**\n * Tokenizes the Visa Checkout payload, returning a payment method nonce.\n * @public\n * @param {object} payment The object that Visa Checkout supplies on `payment.success`.\n * @param {string} payment.callid Visa Checkout transaction ID associated with this payment.\n * @param {string} payment.encKey The encrypted key used to decrypt the payment data.\n * @param {string} payment.encPaymentData The encrypted payment data.\n * @param {callback} [callback] The second argument, <code>tokenizePayload</code> is a {@link VisaCheckout~tokenizePayload|tokenizePayload}. If no callback is provided, `tokenize` returns a promise that resolves with the {@link VisaCheckout~tokenizePayload|tokenizePayload}.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nVisaCheckout.prototype.tokenize = function (payment) {\n  var self = this;\n\n  if (!payment.callid || !payment.encKey || !payment.encPaymentData) {\n    return Promise.reject(\n      new BraintreeError(errors.VISA_CHECKOUT_PAYMENT_REQUIRED)\n    );\n  }\n\n  return this._client\n    .request({\n      method: \"post\",\n      endpoint: \"payment_methods/visa_checkout_cards\",\n      data: {\n        _meta: {\n          source: \"visa-checkout\",\n        },\n        visaCheckoutCard: {\n          callId: payment.callid,\n          encryptedPaymentData: payment.encPaymentData,\n          encryptedKey: payment.encKey,\n        },\n      },\n    })\n    .then(function (response) {\n      analytics.sendEvent(self._client, \"visacheckout.tokenize.succeeded\");\n\n      return response.visaCheckoutCards[0];\n    })\n    .catch(function (err) {\n      analytics.sendEvent(self._client, \"visacheckout.tokenize.failed\");\n\n      return Promise.reject(\n        new BraintreeError({\n          type: errors.VISA_CHECKOUT_TOKENIZATION.type,\n          code: errors.VISA_CHECKOUT_TOKENIZATION.code,\n          message: errors.VISA_CHECKOUT_TOKENIZATION.message,\n          details: {\n            originalError: err,\n          },\n        })\n      );\n    });\n};\n\n/**\n * Cleanly tear down anything set up by {@link module:braintree-web/visa-checkout.create|create}.\n * @public\n * @param {callback} [callback] Called once teardown is complete. No data is returned if teardown completes successfully.\n * @example\n * visaCheckoutInstance.teardown();\n * @example <caption>With callback</caption>\n * visaCheckoutInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nVisaCheckout.prototype.teardown = function () {\n  convertMethodsToError(this, methods(VisaCheckout.prototype));\n\n  return Promise.resolve();\n};\n\nmodule.exports = wrapPromise.wrapPrototype(VisaCheckout);\n\n},{\"../lib/analytics\":143,\"../lib/braintree-error\":149,\"../lib/convert-methods-to-error\":151,\"../lib/json-clone\":181,\"../lib/methods\":182,\"./errors\":261,\"@braintree/wrap-promise\":43}]},{},[137])(137)\n});\n", "/*!\nTurbo 8.0.23\nCopyright \u00A9 2026 37signals LLC\n */\nconst FrameLoadingStyle = {\n  eager: \"eager\",\n  lazy: \"lazy\"\n};\n\n/**\n * Contains a fragment of HTML which is updated based on navigation within\n * it (e.g. via links or form submissions).\n *\n * @customElement turbo-frame\n * @example\n *   <turbo-frame id=\"messages\">\n *     <a href=\"/messages/expanded\">\n *       Show all expanded messages in this frame.\n *     </a>\n *\n *     <form action=\"/messages\">\n *       Show response from this form within this frame.\n *     </form>\n *   </turbo-frame>\n */\nclass FrameElement extends HTMLElement {\n  static delegateConstructor = undefined\n\n  loaded = Promise.resolve()\n\n  static get observedAttributes() {\n    return [\"disabled\", \"loading\", \"src\"]\n  }\n\n  constructor() {\n    super();\n    this.delegate = new FrameElement.delegateConstructor(this);\n  }\n\n  connectedCallback() {\n    this.delegate.connect();\n  }\n\n  disconnectedCallback() {\n    this.delegate.disconnect();\n  }\n\n  reload() {\n    return this.delegate.sourceURLReloaded()\n  }\n\n  attributeChangedCallback(name) {\n    if (name == \"loading\") {\n      this.delegate.loadingStyleChanged();\n    } else if (name == \"src\") {\n      this.delegate.sourceURLChanged();\n    } else if (name == \"disabled\") {\n      this.delegate.disabledChanged();\n    }\n  }\n\n  /**\n   * Gets the URL to lazily load source HTML from\n   */\n  get src() {\n    return this.getAttribute(\"src\")\n  }\n\n  /**\n   * Sets the URL to lazily load source HTML from\n   */\n  set src(value) {\n    if (value) {\n      this.setAttribute(\"src\", value);\n    } else {\n      this.removeAttribute(\"src\");\n    }\n  }\n\n  /**\n   * Gets the refresh mode for the frame.\n   */\n  get refresh() {\n    return this.getAttribute(\"refresh\")\n  }\n\n  /**\n   * Sets the refresh mode for the frame.\n   */\n  set refresh(value) {\n    if (value) {\n      this.setAttribute(\"refresh\", value);\n    } else {\n      this.removeAttribute(\"refresh\");\n    }\n  }\n\n  get shouldReloadWithMorph() {\n    return this.src && this.refresh === \"morph\"\n  }\n\n  /**\n   * Determines if the element is loading\n   */\n  get loading() {\n    return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\")\n  }\n\n  /**\n   * Sets the value of if the element is loading\n   */\n  set loading(value) {\n    if (value) {\n      this.setAttribute(\"loading\", value);\n    } else {\n      this.removeAttribute(\"loading\");\n    }\n  }\n\n  /**\n   * Gets the disabled state of the frame.\n   *\n   * If disabled, no requests will be intercepted by the frame.\n   */\n  get disabled() {\n    return this.hasAttribute(\"disabled\")\n  }\n\n  /**\n   * Sets the disabled state of the frame.\n   *\n   * If disabled, no requests will be intercepted by the frame.\n   */\n  set disabled(value) {\n    if (value) {\n      this.setAttribute(\"disabled\", \"\");\n    } else {\n      this.removeAttribute(\"disabled\");\n    }\n  }\n\n  /**\n   * Gets the autoscroll state of the frame.\n   *\n   * If true, the frame will be scrolled into view automatically on update.\n   */\n  get autoscroll() {\n    return this.hasAttribute(\"autoscroll\")\n  }\n\n  /**\n   * Sets the autoscroll state of the frame.\n   *\n   * If true, the frame will be scrolled into view automatically on update.\n   */\n  set autoscroll(value) {\n    if (value) {\n      this.setAttribute(\"autoscroll\", \"\");\n    } else {\n      this.removeAttribute(\"autoscroll\");\n    }\n  }\n\n  /**\n   * Determines if the element has finished loading\n   */\n  get complete() {\n    return !this.delegate.isLoading\n  }\n\n  /**\n   * Gets the active state of the frame.\n   *\n   * If inactive, source changes will not be observed.\n   */\n  get isActive() {\n    return this.ownerDocument === document && !this.isPreview\n  }\n\n  /**\n   * Sets the active state of the frame.\n   *\n   * If inactive, source changes will not be observed.\n   */\n  get isPreview() {\n    return this.ownerDocument?.documentElement?.hasAttribute(\"data-turbo-preview\")\n  }\n}\n\nfunction frameLoadingStyleFromString(style) {\n  switch (style.toLowerCase()) {\n    case \"lazy\":\n      return FrameLoadingStyle.lazy\n    default:\n      return FrameLoadingStyle.eager\n  }\n}\n\nconst drive = {\n  enabled: true,\n  progressBarDelay: 500,\n  unvisitableExtensions: new Set(\n    [\n      \".7z\", \".aac\", \".apk\", \".avi\", \".bmp\", \".bz2\", \".css\", \".csv\", \".deb\", \".dmg\", \".doc\",\n      \".docx\", \".exe\", \".gif\", \".gz\", \".heic\", \".heif\", \".ico\", \".iso\", \".jpeg\", \".jpg\",\n      \".js\", \".json\", \".m4a\", \".mkv\", \".mov\", \".mp3\", \".mp4\", \".mpeg\", \".mpg\", \".msi\",\n      \".ogg\", \".ogv\", \".pdf\", \".pkg\", \".png\", \".ppt\", \".pptx\", \".rar\", \".rtf\",\n      \".svg\", \".tar\", \".tif\", \".tiff\", \".txt\", \".wav\", \".webm\", \".webp\", \".wma\", \".wmv\",\n      \".xls\", \".xlsx\", \".xml\", \".zip\"\n    ]\n  )\n};\n\nfunction activateScriptElement(element) {\n  if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n    return element\n  } else {\n    const createdScriptElement = document.createElement(\"script\");\n    const cspNonce = getCspNonce();\n    if (cspNonce) {\n      createdScriptElement.nonce = cspNonce;\n    }\n    createdScriptElement.textContent = element.textContent;\n    createdScriptElement.async = false;\n    copyElementAttributes(createdScriptElement, element);\n    return createdScriptElement\n  }\n}\n\nfunction copyElementAttributes(destinationElement, sourceElement) {\n  for (const { name, value } of sourceElement.attributes) {\n    destinationElement.setAttribute(name, value);\n  }\n}\n\nfunction createDocumentFragment(html) {\n  const template = document.createElement(\"template\");\n  template.innerHTML = html;\n  return template.content\n}\n\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n  const event = new CustomEvent(eventName, {\n    cancelable,\n    bubbles: true,\n    composed: true,\n    detail\n  });\n\n  if (target && target.isConnected) {\n    target.dispatchEvent(event);\n  } else {\n    document.documentElement.dispatchEvent(event);\n  }\n\n  return event\n}\n\nfunction cancelEvent(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n\nfunction nextRepaint() {\n  if (document.visibilityState === \"hidden\") {\n    return nextEventLoopTick()\n  } else {\n    return nextAnimationFrame()\n  }\n}\n\nfunction nextAnimationFrame() {\n  return new Promise((resolve) => requestAnimationFrame(() => resolve()))\n}\n\nfunction nextEventLoopTick() {\n  return new Promise((resolve) => setTimeout(() => resolve(), 0))\n}\n\nfunction parseHTMLDocument(html = \"\") {\n  return new DOMParser().parseFromString(html, \"text/html\")\n}\n\nfunction unindent(strings, ...values) {\n  const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n  const match = lines[0].match(/^\\s+/);\n  const indent = match ? match[0].length : 0;\n  return lines.map((line) => line.slice(indent)).join(\"\\n\")\n}\n\nfunction interpolate(strings, values) {\n  return strings.reduce((result, string, i) => {\n    const value = values[i] == undefined ? \"\" : values[i];\n    return result + string + value\n  }, \"\")\n}\n\nfunction uuid() {\n  return Array.from({ length: 36 })\n    .map((_, i) => {\n      if (i == 8 || i == 13 || i == 18 || i == 23) {\n        return \"-\"\n      } else if (i == 14) {\n        return \"4\"\n      } else if (i == 19) {\n        return (Math.floor(Math.random() * 4) + 8).toString(16)\n      } else {\n        return Math.floor(Math.random() * 16).toString(16)\n      }\n    })\n    .join(\"\")\n}\n\nfunction getAttribute(attributeName, ...elements) {\n  for (const value of elements.map((element) => element?.getAttribute(attributeName))) {\n    if (typeof value == \"string\") return value\n  }\n\n  return null\n}\n\nfunction hasAttribute(attributeName, ...elements) {\n  return elements.some((element) => element && element.hasAttribute(attributeName))\n}\n\nfunction markAsBusy(...elements) {\n  for (const element of elements) {\n    if (element.localName == \"turbo-frame\") {\n      element.setAttribute(\"busy\", \"\");\n    }\n    element.setAttribute(\"aria-busy\", \"true\");\n  }\n}\n\nfunction clearBusyState(...elements) {\n  for (const element of elements) {\n    if (element.localName == \"turbo-frame\") {\n      element.removeAttribute(\"busy\");\n    }\n\n    element.removeAttribute(\"aria-busy\");\n  }\n}\n\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n  return new Promise((resolve) => {\n    const onComplete = () => {\n      element.removeEventListener(\"error\", onComplete);\n      element.removeEventListener(\"load\", onComplete);\n      resolve();\n    };\n\n    element.addEventListener(\"load\", onComplete, { once: true });\n    element.addEventListener(\"error\", onComplete, { once: true });\n    setTimeout(resolve, timeoutInMilliseconds);\n  })\n}\n\nfunction getHistoryMethodForAction(action) {\n  switch (action) {\n    case \"replace\":\n      return history.replaceState\n    case \"advance\":\n    case \"restore\":\n      return history.pushState\n  }\n}\n\nfunction isAction(action) {\n  return action == \"advance\" || action == \"replace\" || action == \"restore\"\n}\n\nfunction getVisitAction(...elements) {\n  const action = getAttribute(\"data-turbo-action\", ...elements);\n\n  return isAction(action) ? action : null\n}\n\nfunction getMetaElement(name) {\n  return document.querySelector(`meta[name=\"${name}\"]`)\n}\n\nfunction getMetaContent(name) {\n  const element = getMetaElement(name);\n  return element && element.content\n}\n\nfunction getCspNonce() {\n  const element = getMetaElement(\"csp-nonce\");\n\n  if (element) {\n    const { nonce, content } = element;\n    return nonce == \"\" ? content : nonce\n  }\n}\n\nfunction setMetaContent(name, content) {\n  let element = getMetaElement(name);\n\n  if (!element) {\n    element = document.createElement(\"meta\");\n    element.setAttribute(\"name\", name);\n\n    document.head.appendChild(element);\n  }\n\n  element.setAttribute(\"content\", content);\n\n  return element\n}\n\nfunction findClosestRecursively(element, selector) {\n  if (element instanceof Element) {\n    return (\n      element.closest(selector) || findClosestRecursively(element.assignedSlot || element.getRootNode()?.host, selector)\n    )\n  }\n}\n\nfunction elementIsFocusable(element) {\n  const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n\n  return !!element && element.closest(inertDisabledOrHidden) == null && typeof element.focus == \"function\"\n}\n\nfunction queryAutofocusableElement(elementOrDocumentFragment) {\n  return Array.from(elementOrDocumentFragment.querySelectorAll(\"[autofocus]\")).find(elementIsFocusable)\n}\n\nasync function around(callback, reader) {\n  const before = reader();\n\n  callback();\n\n  await nextAnimationFrame();\n\n  const after = reader();\n\n  return [before, after]\n}\n\nfunction doesNotTargetIFrame(name) {\n  if (name === \"_blank\") {\n    return false\n  } else if (name) {\n    for (const element of document.getElementsByName(name)) {\n      if (element instanceof HTMLIFrameElement) return false\n    }\n\n    return true\n  } else {\n    return true\n  }\n}\n\nfunction findLinkFromClickTarget(target) {\n  const link = findClosestRecursively(target, \"a[href], a[xlink\\\\:href]\");\n\n  if (!link) return null\n  if (link.href.startsWith(\"#\")) return null\n  if (link.hasAttribute(\"download\")) return null\n\n  const linkTarget = link.getAttribute(\"target\");\n  if (linkTarget && linkTarget !== \"_self\") return null\n\n  return link\n}\n\nfunction debounce(fn, delay) {\n  let timeoutId = null;\n\n  return (...args) => {\n    const callback = () => fn.apply(this, args);\n    clearTimeout(timeoutId);\n    timeoutId = setTimeout(callback, delay);\n  }\n}\n\nconst submitter = {\n  \"aria-disabled\": {\n    beforeSubmit: submitter => {\n      submitter.setAttribute(\"aria-disabled\", \"true\");\n      submitter.addEventListener(\"click\", cancelEvent);\n    },\n\n    afterSubmit: submitter => {\n      submitter.removeAttribute(\"aria-disabled\");\n      submitter.removeEventListener(\"click\", cancelEvent);\n    }\n  },\n\n  \"disabled\": {\n    beforeSubmit: submitter => submitter.disabled = true,\n    afterSubmit: submitter => submitter.disabled = false\n  }\n};\n\nclass Config {\n  #submitter = null\n\n  constructor(config) {\n    Object.assign(this, config);\n  }\n\n  get submitter() {\n    return this.#submitter\n  }\n\n  set submitter(value) {\n    this.#submitter = submitter[value] || value;\n  }\n}\n\nconst forms = new Config({\n  mode: \"on\",\n  submitter: \"disabled\"\n});\n\nconst config = {\n  drive,\n  forms\n};\n\nfunction expandURL(locatable) {\n  return new URL(locatable.toString(), document.baseURI)\n}\n\nfunction getAnchor(url) {\n  let anchorMatch;\n  if (url.hash) {\n    return url.hash.slice(1)\n    // eslint-disable-next-line no-cond-assign\n  } else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n    return anchorMatch[1]\n  }\n}\n\nfunction getAction$1(form, submitter) {\n  const action = submitter?.getAttribute(\"formaction\") || form.getAttribute(\"action\") || form.action;\n\n  return expandURL(action)\n}\n\nfunction getExtension(url) {\n  return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\"\n}\n\nfunction isPrefixedBy(baseURL, url) {\n  const prefix = addTrailingSlash(url.origin + url.pathname);\n  return addTrailingSlash(baseURL.href) === prefix || baseURL.href.startsWith(prefix)\n}\n\nfunction locationIsVisitable(location, rootLocation) {\n  return isPrefixedBy(location, rootLocation) && !config.drive.unvisitableExtensions.has(getExtension(location))\n}\n\nfunction getLocationForLink(link) {\n  return expandURL(link.getAttribute(\"href\") || \"\")\n}\n\nfunction getRequestURL(url) {\n  const anchor = getAnchor(url);\n  return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href\n}\n\nfunction toCacheKey(url) {\n  return getRequestURL(url)\n}\n\nfunction urlsAreEqual(left, right) {\n  return expandURL(left).href == expandURL(right).href\n}\n\nfunction getPathComponents(url) {\n  return url.pathname.split(\"/\").slice(1)\n}\n\nfunction getLastPathComponent(url) {\n  return getPathComponents(url).slice(-1)[0]\n}\n\nfunction addTrailingSlash(value) {\n  return value.endsWith(\"/\") ? value : value + \"/\"\n}\n\nclass FetchResponse {\n  constructor(response) {\n    this.response = response;\n  }\n\n  get succeeded() {\n    return this.response.ok\n  }\n\n  get failed() {\n    return !this.succeeded\n  }\n\n  get clientError() {\n    return this.statusCode >= 400 && this.statusCode <= 499\n  }\n\n  get serverError() {\n    return this.statusCode >= 500 && this.statusCode <= 599\n  }\n\n  get redirected() {\n    return this.response.redirected\n  }\n\n  get location() {\n    return expandURL(this.response.url)\n  }\n\n  get isHTML() {\n    return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/)\n  }\n\n  get statusCode() {\n    return this.response.status\n  }\n\n  get contentType() {\n    return this.header(\"Content-Type\")\n  }\n\n  get responseText() {\n    return this.response.clone().text()\n  }\n\n  get responseHTML() {\n    if (this.isHTML) {\n      return this.response.clone().text()\n    } else {\n      return Promise.resolve(undefined)\n    }\n  }\n\n  header(name) {\n    return this.response.headers.get(name)\n  }\n}\n\nclass LimitedSet extends Set {\n  constructor(maxSize) {\n    super();\n    this.maxSize = maxSize;\n  }\n\n  add(value) {\n    if (this.size >= this.maxSize) {\n      const iterator = this.values();\n      const oldestValue = iterator.next().value;\n      this.delete(oldestValue);\n    }\n    super.add(value);\n  }\n}\n\nconst recentRequests = new LimitedSet(20);\n\nfunction fetchWithTurboHeaders(url, options = {}) {\n  const modifiedHeaders = new Headers(options.headers || {});\n  const requestUID = uuid();\n  recentRequests.add(requestUID);\n  modifiedHeaders.append(\"X-Turbo-Request-Id\", requestUID);\n\n  return window.fetch(url, {\n    ...options,\n    headers: modifiedHeaders\n  })\n}\n\nfunction fetchMethodFromString(method) {\n  switch (method.toLowerCase()) {\n    case \"get\":\n      return FetchMethod.get\n    case \"post\":\n      return FetchMethod.post\n    case \"put\":\n      return FetchMethod.put\n    case \"patch\":\n      return FetchMethod.patch\n    case \"delete\":\n      return FetchMethod.delete\n  }\n}\n\nconst FetchMethod = {\n  get: \"get\",\n  post: \"post\",\n  put: \"put\",\n  patch: \"patch\",\n  delete: \"delete\"\n};\n\nfunction fetchEnctypeFromString(encoding) {\n  switch (encoding.toLowerCase()) {\n    case FetchEnctype.multipart:\n      return FetchEnctype.multipart\n    case FetchEnctype.plain:\n      return FetchEnctype.plain\n    default:\n      return FetchEnctype.urlEncoded\n  }\n}\n\nconst FetchEnctype = {\n  urlEncoded: \"application/x-www-form-urlencoded\",\n  multipart: \"multipart/form-data\",\n  plain: \"text/plain\"\n};\n\nclass FetchRequest {\n  abortController = new AbortController()\n  #resolveRequestPromise = (_value) => {}\n\n  constructor(delegate, method, location, requestBody = new URLSearchParams(), target = null, enctype = FetchEnctype.urlEncoded) {\n    const [url, body] = buildResourceAndBody(expandURL(location), method, requestBody, enctype);\n\n    this.delegate = delegate;\n    this.url = url;\n    this.target = target;\n    this.fetchOptions = {\n      credentials: \"same-origin\",\n      redirect: \"follow\",\n      method: method.toUpperCase(),\n      headers: { ...this.defaultHeaders },\n      body: body,\n      signal: this.abortSignal,\n      referrer: this.delegate.referrer?.href\n    };\n    this.enctype = enctype;\n  }\n\n  get method() {\n    return this.fetchOptions.method\n  }\n\n  set method(value) {\n    const fetchBody = this.isSafe ? this.url.searchParams : this.fetchOptions.body || new FormData();\n    const fetchMethod = fetchMethodFromString(value) || FetchMethod.get;\n\n    this.url.search = \"\";\n\n    const [url, body] = buildResourceAndBody(this.url, fetchMethod, fetchBody, this.enctype);\n\n    this.url = url;\n    this.fetchOptions.body = body;\n    this.fetchOptions.method = fetchMethod.toUpperCase();\n  }\n\n  get headers() {\n    return this.fetchOptions.headers\n  }\n\n  set headers(value) {\n    this.fetchOptions.headers = value;\n  }\n\n  get body() {\n    if (this.isSafe) {\n      return this.url.searchParams\n    } else {\n      return this.fetchOptions.body\n    }\n  }\n\n  set body(value) {\n    this.fetchOptions.body = value;\n  }\n\n  get location() {\n    return this.url\n  }\n\n  get params() {\n    return this.url.searchParams\n  }\n\n  get entries() {\n    return this.body ? Array.from(this.body.entries()) : []\n  }\n\n  cancel() {\n    this.abortController.abort();\n  }\n\n  async perform() {\n    const { fetchOptions } = this;\n    this.delegate.prepareRequest(this);\n    const event = await this.#allowRequestToBeIntercepted(fetchOptions);\n    try {\n      this.delegate.requestStarted(this);\n\n      if (event.detail.fetchRequest) {\n        this.response = event.detail.fetchRequest.response;\n      } else {\n        this.response = fetchWithTurboHeaders(this.url.href, fetchOptions);\n      }\n\n      const response = await this.response;\n      return await this.receive(response)\n    } catch (error) {\n      if (error.name !== \"AbortError\") {\n        if (this.#willDelegateErrorHandling(error)) {\n          this.delegate.requestErrored(this, error);\n        }\n        throw error\n      }\n    } finally {\n      this.delegate.requestFinished(this);\n    }\n  }\n\n  async receive(response) {\n    const fetchResponse = new FetchResponse(response);\n    const event = dispatch(\"turbo:before-fetch-response\", {\n      cancelable: true,\n      detail: { fetchResponse },\n      target: this.target\n    });\n    if (event.defaultPrevented) {\n      this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n    } else if (fetchResponse.succeeded) {\n      this.delegate.requestSucceededWithResponse(this, fetchResponse);\n    } else {\n      this.delegate.requestFailedWithResponse(this, fetchResponse);\n    }\n    return fetchResponse\n  }\n\n  get defaultHeaders() {\n    return {\n      Accept: \"text/html, application/xhtml+xml\"\n    }\n  }\n\n  get isSafe() {\n    return isSafe(this.method)\n  }\n\n  get abortSignal() {\n    return this.abortController.signal\n  }\n\n  acceptResponseType(mimeType) {\n    this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n  }\n\n  async #allowRequestToBeIntercepted(fetchOptions) {\n    const requestInterception = new Promise((resolve) => (this.#resolveRequestPromise = resolve));\n    const event = dispatch(\"turbo:before-fetch-request\", {\n      cancelable: true,\n      detail: {\n        fetchOptions,\n        url: this.url,\n        resume: this.#resolveRequestPromise\n      },\n      target: this.target\n    });\n    this.url = event.detail.url;\n    if (event.defaultPrevented) await requestInterception;\n\n    return event\n  }\n\n  #willDelegateErrorHandling(error) {\n    const event = dispatch(\"turbo:fetch-request-error\", {\n      target: this.target,\n      cancelable: true,\n      detail: { request: this, error: error }\n    });\n\n    return !event.defaultPrevented\n  }\n}\n\nfunction isSafe(fetchMethod) {\n  return fetchMethodFromString(fetchMethod) == FetchMethod.get\n}\n\nfunction buildResourceAndBody(resource, method, requestBody, enctype) {\n  const searchParams =\n    Array.from(requestBody).length > 0 ? new URLSearchParams(entriesExcludingFiles(requestBody)) : resource.searchParams;\n\n  if (isSafe(method)) {\n    return [mergeIntoURLSearchParams(resource, searchParams), null]\n  } else if (enctype == FetchEnctype.urlEncoded) {\n    return [resource, searchParams]\n  } else {\n    return [resource, requestBody]\n  }\n}\n\nfunction entriesExcludingFiles(requestBody) {\n  const entries = [];\n\n  for (const [name, value] of requestBody) {\n    if (value instanceof File) continue\n    else entries.push([name, value]);\n  }\n\n  return entries\n}\n\nfunction mergeIntoURLSearchParams(url, requestBody) {\n  const searchParams = new URLSearchParams(entriesExcludingFiles(requestBody));\n\n  url.search = searchParams.toString();\n\n  return url\n}\n\nclass AppearanceObserver {\n  started = false\n\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n    this.intersectionObserver = new IntersectionObserver(this.intersect);\n  }\n\n  start() {\n    if (!this.started) {\n      this.started = true;\n      this.intersectionObserver.observe(this.element);\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.started = false;\n      this.intersectionObserver.unobserve(this.element);\n    }\n  }\n\n  intersect = (entries) => {\n    const lastEntry = entries.slice(-1)[0];\n    if (lastEntry?.isIntersecting) {\n      this.delegate.elementAppearedInViewport(this.element);\n    }\n  }\n}\n\nclass StreamMessage {\n  static contentType = \"text/vnd.turbo-stream.html\"\n\n  static wrap(message) {\n    if (typeof message == \"string\") {\n      return new this(createDocumentFragment(message))\n    } else {\n      return message\n    }\n  }\n\n  constructor(fragment) {\n    this.fragment = importStreamElements(fragment);\n  }\n}\n\nfunction importStreamElements(fragment) {\n  for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n    const streamElement = document.importNode(element, true);\n\n    for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n      inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n    }\n\n    element.replaceWith(streamElement);\n  }\n\n  return fragment\n}\n\nconst identity = key => key;\n\nclass LRUCache {\n  keys = []\n  entries = {}\n  #toCacheKey\n\n  constructor(size, toCacheKey = identity) {\n    this.size = size;\n    this.#toCacheKey = toCacheKey;\n  }\n\n  has(key) {\n    return this.#toCacheKey(key) in this.entries\n  }\n\n  get(key) {\n    if (this.has(key)) {\n      const entry = this.read(key);\n      this.touch(key);\n      return entry\n    }\n  }\n\n  put(key, entry) {\n    this.write(key, entry);\n    this.touch(key);\n    return entry\n  }\n\n  clear() {\n    for (const key of Object.keys(this.entries)) {\n      this.evict(key);\n    }\n  }\n\n  // Private\n\n  read(key) {\n    return this.entries[this.#toCacheKey(key)]\n  }\n\n  write(key, entry) {\n    this.entries[this.#toCacheKey(key)] = entry;\n  }\n\n  touch(key) {\n    key = this.#toCacheKey(key);\n    const index = this.keys.indexOf(key);\n    if (index > -1) this.keys.splice(index, 1);\n    this.keys.unshift(key);\n    this.trim();\n  }\n\n  trim() {\n    for (const key of this.keys.splice(this.size)) {\n      this.evict(key);\n    }\n  }\n\n  evict(key) {\n    delete this.entries[key];\n  }\n}\n\nconst PREFETCH_DELAY = 100;\n\nclass PrefetchCache extends LRUCache {\n  #prefetchTimeout = null\n  #maxAges = {}\n\n  constructor(size = 1, prefetchDelay = PREFETCH_DELAY) {\n    super(size, toCacheKey);\n    this.prefetchDelay = prefetchDelay;\n  }\n\n  putLater(url, request, ttl) {\n    this.#prefetchTimeout = setTimeout(() => {\n      request.perform();\n      this.put(url, request, ttl);\n      this.#prefetchTimeout = null;\n    }, this.prefetchDelay);\n  }\n\n  put(url, request, ttl = cacheTtl) {\n    super.put(url, request);\n    this.#maxAges[toCacheKey(url)] = new Date(new Date().getTime() + ttl);\n  }\n\n  clear() {\n    super.clear();\n    if (this.#prefetchTimeout) clearTimeout(this.#prefetchTimeout);\n  }\n\n  evict(key) {\n    super.evict(key);\n    delete this.#maxAges[key];\n  }\n\n  has(key) {\n    if (super.has(key)) {\n      const maxAge = this.#maxAges[toCacheKey(key)];\n\n      return maxAge && maxAge > Date.now()\n    } else {\n      return false\n    }\n  }\n}\n\nconst cacheTtl = 10 * 1000;\nconst prefetchCache = new PrefetchCache();\n\nconst FormSubmissionState = {\n  initialized: \"initialized\",\n  requesting: \"requesting\",\n  waiting: \"waiting\",\n  receiving: \"receiving\",\n  stopping: \"stopping\",\n  stopped: \"stopped\"\n};\n\nclass FormSubmission {\n  state = FormSubmissionState.initialized\n\n  static confirmMethod(message) {\n    return Promise.resolve(confirm(message))\n  }\n\n  constructor(delegate, formElement, submitter, mustRedirect = false) {\n    const method = getMethod(formElement, submitter);\n    const action = getAction(getFormAction(formElement, submitter), method);\n    const body = buildFormData(formElement, submitter);\n    const enctype = getEnctype(formElement, submitter);\n\n    this.delegate = delegate;\n    this.formElement = formElement;\n    this.submitter = submitter;\n    this.fetchRequest = new FetchRequest(this, method, action, body, formElement, enctype);\n    this.mustRedirect = mustRedirect;\n  }\n\n  get method() {\n    return this.fetchRequest.method\n  }\n\n  set method(value) {\n    this.fetchRequest.method = value;\n  }\n\n  get action() {\n    return this.fetchRequest.url.toString()\n  }\n\n  set action(value) {\n    this.fetchRequest.url = expandURL(value);\n  }\n\n  get body() {\n    return this.fetchRequest.body\n  }\n\n  get enctype() {\n    return this.fetchRequest.enctype\n  }\n\n  get isSafe() {\n    return this.fetchRequest.isSafe\n  }\n\n  get location() {\n    return this.fetchRequest.url\n  }\n\n  // The submission process\n\n  async start() {\n    const { initialized, requesting } = FormSubmissionState;\n    const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n\n    if (typeof confirmationMessage === \"string\") {\n      const confirmMethod = typeof config.forms.confirm === \"function\" ?\n        config.forms.confirm :\n        FormSubmission.confirmMethod;\n\n      const answer = await confirmMethod(confirmationMessage, this.formElement, this.submitter);\n      if (!answer) {\n        return\n      }\n    }\n\n    if (this.state == initialized) {\n      this.state = requesting;\n      return this.fetchRequest.perform()\n    }\n  }\n\n  stop() {\n    const { stopping, stopped } = FormSubmissionState;\n    if (this.state != stopping && this.state != stopped) {\n      this.state = stopping;\n      this.fetchRequest.cancel();\n      return true\n    }\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request) {\n    if (!request.isSafe) {\n      const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n      if (token) {\n        request.headers[\"X-CSRF-Token\"] = token;\n      }\n    }\n\n    if (this.requestAcceptsTurboStreamResponse(request)) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted(_request) {\n    this.state = FormSubmissionState.waiting;\n    if (this.submitter) config.forms.submitter.beforeSubmit(this.submitter);\n    this.setSubmitsWith();\n    markAsBusy(this.formElement);\n    dispatch(\"turbo:submit-start\", {\n      target: this.formElement,\n      detail: { formSubmission: this }\n    });\n    this.delegate.formSubmissionStarted(this);\n  }\n\n  requestPreventedHandlingResponse(request, response) {\n    prefetchCache.clear();\n\n    this.result = { success: response.succeeded, fetchResponse: response };\n  }\n\n  requestSucceededWithResponse(request, response) {\n    if (response.clientError || response.serverError) {\n      this.delegate.formSubmissionFailedWithResponse(this, response);\n      return\n    }\n\n    prefetchCache.clear();\n\n    if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n      const error = new Error(\"Form responses must redirect to another location\");\n      this.delegate.formSubmissionErrored(this, error);\n    } else {\n      this.state = FormSubmissionState.receiving;\n      this.result = { success: true, fetchResponse: response };\n      this.delegate.formSubmissionSucceededWithResponse(this, response);\n    }\n  }\n\n  requestFailedWithResponse(request, response) {\n    this.result = { success: false, fetchResponse: response };\n    this.delegate.formSubmissionFailedWithResponse(this, response);\n  }\n\n  requestErrored(request, error) {\n    this.result = { success: false, error };\n    this.delegate.formSubmissionErrored(this, error);\n  }\n\n  requestFinished(_request) {\n    this.state = FormSubmissionState.stopped;\n    if (this.submitter) config.forms.submitter.afterSubmit(this.submitter);\n    this.resetSubmitterText();\n    clearBusyState(this.formElement);\n    dispatch(\"turbo:submit-end\", {\n      target: this.formElement,\n      detail: { formSubmission: this, ...this.result }\n    });\n    this.delegate.formSubmissionFinished(this);\n  }\n\n  // Private\n\n  setSubmitsWith() {\n    if (!this.submitter || !this.submitsWith) return\n\n    if (this.submitter.matches(\"button\")) {\n      this.originalSubmitText = this.submitter.innerHTML;\n      this.submitter.innerHTML = this.submitsWith;\n    } else if (this.submitter.matches(\"input\")) {\n      const input = this.submitter;\n      this.originalSubmitText = input.value;\n      input.value = this.submitsWith;\n    }\n  }\n\n  resetSubmitterText() {\n    if (!this.submitter || !this.originalSubmitText) return\n\n    if (this.submitter.matches(\"button\")) {\n      this.submitter.innerHTML = this.originalSubmitText;\n    } else if (this.submitter.matches(\"input\")) {\n      const input = this.submitter;\n      input.value = this.originalSubmitText;\n    }\n  }\n\n  requestMustRedirect(request) {\n    return !request.isSafe && this.mustRedirect\n  }\n\n  requestAcceptsTurboStreamResponse(request) {\n    return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement)\n  }\n\n  get submitsWith() {\n    return this.submitter?.getAttribute(\"data-turbo-submits-with\")\n  }\n}\n\nfunction buildFormData(formElement, submitter) {\n  const formData = new FormData(formElement);\n  const name = submitter?.getAttribute(\"name\");\n  const value = submitter?.getAttribute(\"value\");\n\n  if (name) {\n    formData.append(name, value || \"\");\n  }\n\n  return formData\n}\n\nfunction getCookieValue(cookieName) {\n  if (cookieName != null) {\n    const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n    const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n    if (cookie) {\n      const value = cookie.split(\"=\").slice(1).join(\"=\");\n      return value ? decodeURIComponent(value) : undefined\n    }\n  }\n}\n\nfunction responseSucceededWithoutRedirect(response) {\n  return response.statusCode == 200 && !response.redirected\n}\n\nfunction getFormAction(formElement, submitter) {\n  const formElementAction = typeof formElement.action === \"string\" ? formElement.action : null;\n\n  if (submitter?.hasAttribute(\"formaction\")) {\n    return submitter.getAttribute(\"formaction\") || \"\"\n  } else {\n    return formElement.getAttribute(\"action\") || formElementAction || \"\"\n  }\n}\n\nfunction getAction(formAction, fetchMethod) {\n  const action = expandURL(formAction);\n\n  if (isSafe(fetchMethod)) {\n    action.search = \"\";\n  }\n\n  return action\n}\n\nfunction getMethod(formElement, submitter) {\n  const method = submitter?.getAttribute(\"formmethod\") || formElement.getAttribute(\"method\") || \"\";\n  return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get\n}\n\nfunction getEnctype(formElement, submitter) {\n  return fetchEnctypeFromString(submitter?.getAttribute(\"formenctype\") || formElement.enctype)\n}\n\nclass Snapshot {\n  constructor(element) {\n    this.element = element;\n  }\n\n  get activeElement() {\n    return this.element.ownerDocument.activeElement\n  }\n\n  get children() {\n    return [...this.element.children]\n  }\n\n  hasAnchor(anchor) {\n    return this.getElementForAnchor(anchor) != null\n  }\n\n  getElementForAnchor(anchor) {\n    return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null\n  }\n\n  get isConnected() {\n    return this.element.isConnected\n  }\n\n  get firstAutofocusableElement() {\n    return queryAutofocusableElement(this.element)\n  }\n\n  get permanentElements() {\n    return queryPermanentElementsAll(this.element)\n  }\n\n  getPermanentElementById(id) {\n    return getPermanentElementById(this.element, id)\n  }\n\n  getPermanentElementMapForSnapshot(snapshot) {\n    const permanentElementMap = {};\n\n    for (const currentPermanentElement of this.permanentElements) {\n      const { id } = currentPermanentElement;\n      const newPermanentElement = snapshot.getPermanentElementById(id);\n      if (newPermanentElement) {\n        permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n      }\n    }\n\n    return permanentElementMap\n  }\n}\n\nfunction getPermanentElementById(node, id) {\n  return node.querySelector(`#${id}[data-turbo-permanent]`)\n}\n\nfunction queryPermanentElementsAll(node) {\n  return node.querySelectorAll(\"[id][data-turbo-permanent]\")\n}\n\nclass FormSubmitObserver {\n  started = false\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (!this.started) {\n      this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n      this.started = false;\n    }\n  }\n\n  submitCaptured = () => {\n    this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n    this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n  }\n\n  submitBubbled = (event) => {\n    if (!event.defaultPrevented) {\n      const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n      const submitter = event.submitter || undefined;\n\n      if (\n        form &&\n        submissionDoesNotDismissDialog(form, submitter) &&\n        submissionDoesNotTargetIFrame(form, submitter) &&\n        this.delegate.willSubmitForm(form, submitter)\n      ) {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        this.delegate.formSubmitted(form, submitter);\n      }\n    }\n  }\n}\n\nfunction submissionDoesNotDismissDialog(form, submitter) {\n  const method = submitter?.getAttribute(\"formmethod\") || form.getAttribute(\"method\");\n\n  return method != \"dialog\"\n}\n\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n  const target = submitter?.getAttribute(\"formtarget\") || form.getAttribute(\"target\");\n\n  return doesNotTargetIFrame(target)\n}\n\nclass View {\n  #resolveRenderPromise = (_value) => {}\n  #resolveInterceptionPromise = (_value) => {}\n\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n  }\n\n  // Scrolling\n\n  scrollToAnchor(anchor) {\n    const element = this.snapshot.getElementForAnchor(anchor);\n    if (element) {\n      this.focusElement(element);\n      this.scrollToElement(element);\n    } else {\n      this.scrollToPosition({ x: 0, y: 0 });\n    }\n  }\n\n  scrollToAnchorFromLocation(location) {\n    this.scrollToAnchor(getAnchor(location));\n  }\n\n  scrollToElement(element) {\n    element.scrollIntoView();\n  }\n\n  focusElement(element) {\n    if (element instanceof HTMLElement) {\n      if (element.hasAttribute(\"tabindex\")) {\n        element.focus();\n      } else {\n        element.setAttribute(\"tabindex\", \"-1\");\n        element.focus();\n        element.removeAttribute(\"tabindex\");\n      }\n    }\n  }\n\n  scrollToPosition({ x, y }) {\n    this.scrollRoot.scrollTo(x, y);\n  }\n\n  scrollToTop() {\n    this.scrollToPosition({ x: 0, y: 0 });\n  }\n\n  get scrollRoot() {\n    return window\n  }\n\n  // Rendering\n\n  async render(renderer) {\n    const { isPreview, shouldRender, willRender, newSnapshot: snapshot } = renderer;\n\n    // A workaround to ignore tracked element mismatch reloads when performing\n    // a promoted Visit from a frame navigation\n    const shouldInvalidate = willRender;\n\n    if (shouldRender) {\n      try {\n        this.renderPromise = new Promise((resolve) => (this.#resolveRenderPromise = resolve));\n        this.renderer = renderer;\n        await this.prepareToRenderSnapshot(renderer);\n\n        const renderInterception = new Promise((resolve) => (this.#resolveInterceptionPromise = resolve));\n        const options = { resume: this.#resolveInterceptionPromise, render: this.renderer.renderElement, renderMethod: this.renderer.renderMethod };\n        const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n        if (!immediateRender) await renderInterception;\n\n        await this.renderSnapshot(renderer);\n        this.delegate.viewRenderedSnapshot(snapshot, isPreview, this.renderer.renderMethod);\n        this.delegate.preloadOnLoadLinksForView(this.element);\n        this.finishRenderingSnapshot(renderer);\n      } finally {\n        delete this.renderer;\n        this.#resolveRenderPromise(undefined);\n        delete this.renderPromise;\n      }\n    } else if (shouldInvalidate) {\n      this.invalidate(renderer.reloadReason);\n    }\n  }\n\n  invalidate(reason) {\n    this.delegate.viewInvalidated(reason);\n  }\n\n  async prepareToRenderSnapshot(renderer) {\n    this.markAsPreview(renderer.isPreview);\n    await renderer.prepareToRender();\n  }\n\n  markAsPreview(isPreview) {\n    if (isPreview) {\n      this.element.setAttribute(\"data-turbo-preview\", \"\");\n    } else {\n      this.element.removeAttribute(\"data-turbo-preview\");\n    }\n  }\n\n  markVisitDirection(direction) {\n    this.element.setAttribute(\"data-turbo-visit-direction\", direction);\n  }\n\n  unmarkVisitDirection() {\n    this.element.removeAttribute(\"data-turbo-visit-direction\");\n  }\n\n  async renderSnapshot(renderer) {\n    await renderer.render();\n  }\n\n  finishRenderingSnapshot(renderer) {\n    renderer.finishRendering();\n  }\n}\n\nclass FrameView extends View {\n  missing() {\n    this.element.innerHTML = `<strong class=\"turbo-frame-error\">Content missing</strong>`;\n  }\n\n  get snapshot() {\n    return new Snapshot(this.element)\n  }\n}\n\nclass LinkInterceptor {\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n  }\n\n  start() {\n    this.element.addEventListener(\"click\", this.clickBubbled);\n    document.addEventListener(\"turbo:click\", this.linkClicked);\n    document.addEventListener(\"turbo:before-visit\", this.willVisit);\n  }\n\n  stop() {\n    this.element.removeEventListener(\"click\", this.clickBubbled);\n    document.removeEventListener(\"turbo:click\", this.linkClicked);\n    document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n  }\n\n  clickBubbled = (event) => {\n    if (this.clickEventIsSignificant(event)) {\n      this.clickEvent = event;\n    } else {\n      delete this.clickEvent;\n    }\n  }\n\n  linkClicked = (event) => {\n    if (this.clickEvent && this.clickEventIsSignificant(event)) {\n      if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n        this.clickEvent.preventDefault();\n        event.preventDefault();\n        this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n      }\n    }\n    delete this.clickEvent;\n  }\n\n  willVisit = (_event) => {\n    delete this.clickEvent;\n  }\n\n  clickEventIsSignificant(event) {\n    const target = event.composed ? event.target?.parentElement : event.target;\n    const element = findLinkFromClickTarget(target) || target;\n\n    return element instanceof Element && element.closest(\"turbo-frame, html\") == this.element\n  }\n}\n\nclass LinkClickObserver {\n  started = false\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (!this.started) {\n      this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n      this.started = false;\n    }\n  }\n\n  clickCaptured = () => {\n    this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n    this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n  }\n\n  clickBubbled = (event) => {\n    if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n      const target = (event.composedPath && event.composedPath()[0]) || event.target;\n      const link = findLinkFromClickTarget(target);\n      if (link && doesNotTargetIFrame(link.target)) {\n        const location = getLocationForLink(link);\n        if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n          event.preventDefault();\n          this.delegate.followedLinkToLocation(link, location);\n        }\n      }\n    }\n  }\n\n  clickEventIsSignificant(event) {\n    return !(\n      (event.target && event.target.isContentEditable) ||\n      event.defaultPrevented ||\n      event.which > 1 ||\n      event.altKey ||\n      event.ctrlKey ||\n      event.metaKey ||\n      event.shiftKey\n    )\n  }\n}\n\nclass FormLinkClickObserver {\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.linkInterceptor = new LinkClickObserver(this, element);\n  }\n\n  start() {\n    this.linkInterceptor.start();\n  }\n\n  stop() {\n    this.linkInterceptor.stop();\n  }\n\n  // Link hover observer delegate\n\n  canPrefetchRequestToLocation(link, location) {\n    return false\n  }\n\n  prefetchAndCacheRequestToLocation(link, location) {\n    return\n  }\n\n  // Link click observer delegate\n\n  willFollowLinkToLocation(link, location, originalEvent) {\n    return (\n      this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n      (link.hasAttribute(\"data-turbo-method\") || link.hasAttribute(\"data-turbo-stream\"))\n    )\n  }\n\n  followedLinkToLocation(link, location) {\n    const form = document.createElement(\"form\");\n\n    const type = \"hidden\";\n    for (const [name, value] of location.searchParams) {\n      form.append(Object.assign(document.createElement(\"input\"), { type, name, value }));\n    }\n\n    const action = Object.assign(location, { search: \"\" });\n    form.setAttribute(\"data-turbo\", \"true\");\n    form.setAttribute(\"action\", action.href);\n    form.setAttribute(\"hidden\", \"\");\n\n    const method = link.getAttribute(\"data-turbo-method\");\n    if (method) form.setAttribute(\"method\", method);\n\n    const turboFrame = link.getAttribute(\"data-turbo-frame\");\n    if (turboFrame) form.setAttribute(\"data-turbo-frame\", turboFrame);\n\n    const turboAction = getVisitAction(link);\n    if (turboAction) form.setAttribute(\"data-turbo-action\", turboAction);\n\n    const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n    if (turboConfirm) form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n\n    const turboStream = link.hasAttribute(\"data-turbo-stream\");\n    if (turboStream) form.setAttribute(\"data-turbo-stream\", \"\");\n\n    this.delegate.submittedFormLinkToLocation(link, location, form);\n\n    document.body.appendChild(form);\n    form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n    requestAnimationFrame(() => form.requestSubmit());\n  }\n}\n\nclass Bardo {\n  static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n    const bardo = new this(delegate, permanentElementMap);\n    bardo.enter();\n    await callback();\n    bardo.leave();\n  }\n\n  constructor(delegate, permanentElementMap) {\n    this.delegate = delegate;\n    this.permanentElementMap = permanentElementMap;\n  }\n\n  enter() {\n    for (const id in this.permanentElementMap) {\n      const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n      this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n      this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n    }\n  }\n\n  leave() {\n    for (const id in this.permanentElementMap) {\n      const [currentPermanentElement] = this.permanentElementMap[id];\n      this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n      this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n      this.delegate.leavingBardo(currentPermanentElement);\n    }\n  }\n\n  replaceNewPermanentElementWithPlaceholder(permanentElement) {\n    const placeholder = createPlaceholderForPermanentElement(permanentElement);\n    permanentElement.replaceWith(placeholder);\n  }\n\n  replaceCurrentPermanentElementWithClone(permanentElement) {\n    const clone = permanentElement.cloneNode(true);\n    permanentElement.replaceWith(clone);\n  }\n\n  replacePlaceholderWithPermanentElement(permanentElement) {\n    const placeholder = this.getPlaceholderById(permanentElement.id);\n    placeholder?.replaceWith(permanentElement);\n  }\n\n  getPlaceholderById(id) {\n    return this.placeholders.find((element) => element.content == id)\n  }\n\n  get placeholders() {\n    return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")]\n  }\n}\n\nfunction createPlaceholderForPermanentElement(permanentElement) {\n  const element = document.createElement(\"meta\");\n  element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n  element.setAttribute(\"content\", permanentElement.id);\n  return element\n}\n\nclass Renderer {\n  #activeElement = null\n\n  static renderElement(currentElement, newElement) {\n    // Abstract method\n  }\n\n  constructor(currentSnapshot, newSnapshot, isPreview, willRender = true) {\n    this.currentSnapshot = currentSnapshot;\n    this.newSnapshot = newSnapshot;\n    this.isPreview = isPreview;\n    this.willRender = willRender;\n    this.renderElement = this.constructor.renderElement;\n    this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n  }\n\n  get shouldRender() {\n    return true\n  }\n\n  get shouldAutofocus() {\n    return true\n  }\n\n  get reloadReason() {\n    return\n  }\n\n  prepareToRender() {\n    return\n  }\n\n  render() {\n    // Abstract method\n  }\n\n  finishRendering() {\n    if (this.resolvingFunctions) {\n      this.resolvingFunctions.resolve();\n      delete this.resolvingFunctions;\n    }\n  }\n\n  async preservingPermanentElements(callback) {\n    await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n  }\n\n  focusFirstAutofocusableElement() {\n    if (this.shouldAutofocus) {\n      const element = this.connectedSnapshot.firstAutofocusableElement;\n      if (element) {\n        element.focus();\n      }\n    }\n  }\n\n  // Bardo delegate\n\n  enteringBardo(currentPermanentElement) {\n    if (this.#activeElement) return\n\n    if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n      this.#activeElement = this.currentSnapshot.activeElement;\n    }\n  }\n\n  leavingBardo(currentPermanentElement) {\n    if (currentPermanentElement.contains(this.#activeElement) && this.#activeElement instanceof HTMLElement) {\n      this.#activeElement.focus();\n\n      this.#activeElement = null;\n    }\n  }\n\n  get connectedSnapshot() {\n    return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot\n  }\n\n  get currentElement() {\n    return this.currentSnapshot.element\n  }\n\n  get newElement() {\n    return this.newSnapshot.element\n  }\n\n  get permanentElementMap() {\n    return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)\n  }\n\n  get renderMethod() {\n    return \"replace\"\n  }\n}\n\nclass FrameRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    const destinationRange = document.createRange();\n    destinationRange.selectNodeContents(currentElement);\n    destinationRange.deleteContents();\n\n    const frameElement = newElement;\n    const sourceRange = frameElement.ownerDocument?.createRange();\n    if (sourceRange) {\n      sourceRange.selectNodeContents(frameElement);\n      currentElement.appendChild(sourceRange.extractContents());\n    }\n  }\n\n  constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n    super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n    this.delegate = delegate;\n  }\n\n  get shouldRender() {\n    return true\n  }\n\n  async render() {\n    await nextRepaint();\n    this.preservingPermanentElements(() => {\n      this.loadFrameElement();\n    });\n    this.scrollFrameIntoView();\n    await nextRepaint();\n    this.focusFirstAutofocusableElement();\n    await nextRepaint();\n    this.activateScriptElements();\n  }\n\n  loadFrameElement() {\n    this.delegate.willRenderFrame(this.currentElement, this.newElement);\n    this.renderElement(this.currentElement, this.newElement);\n  }\n\n  scrollFrameIntoView() {\n    if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n      const element = this.currentElement.firstElementChild;\n      const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n      const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n\n      if (element) {\n        element.scrollIntoView({ block, behavior });\n        return true\n      }\n    }\n    return false\n  }\n\n  activateScriptElements() {\n    for (const inertScriptElement of this.newScriptElements) {\n      const activatedScriptElement = activateScriptElement(inertScriptElement);\n      inertScriptElement.replaceWith(activatedScriptElement);\n    }\n  }\n\n  get newScriptElements() {\n    return this.currentElement.querySelectorAll(\"script\")\n  }\n}\n\nfunction readScrollLogicalPosition(value, defaultValue) {\n  if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n    return value\n  } else {\n    return defaultValue\n  }\n}\n\nfunction readScrollBehavior(value, defaultValue) {\n  if (value == \"auto\" || value == \"smooth\") {\n    return value\n  } else {\n    return defaultValue\n  }\n}\n\n/**\n * @typedef {object} ConfigHead\n *\n * @property {'merge' | 'append' | 'morph' | 'none'} [style]\n * @property {boolean} [block]\n * @property {boolean} [ignore]\n * @property {function(Element): boolean} [shouldPreserve]\n * @property {function(Element): boolean} [shouldReAppend]\n * @property {function(Element): boolean} [shouldRemove]\n * @property {function(Element, {added: Node[], kept: Element[], removed: Element[]}): void} [afterHeadMorphed]\n */\n\n/**\n * @typedef {object} ConfigCallbacks\n *\n * @property {function(Node): boolean} [beforeNodeAdded]\n * @property {function(Node): void} [afterNodeAdded]\n * @property {function(Element, Node): boolean} [beforeNodeMorphed]\n * @property {function(Element, Node): void} [afterNodeMorphed]\n * @property {function(Element): boolean} [beforeNodeRemoved]\n * @property {function(Element): void} [afterNodeRemoved]\n * @property {function(string, Element, \"update\" | \"remove\"): boolean} [beforeAttributeUpdated]\n */\n\n/**\n * @typedef {object} Config\n *\n * @property {'outerHTML' | 'innerHTML'} [morphStyle]\n * @property {boolean} [ignoreActive]\n * @property {boolean} [ignoreActiveValue]\n * @property {boolean} [restoreFocus]\n * @property {ConfigCallbacks} [callbacks]\n * @property {ConfigHead} [head]\n */\n\n/**\n * @typedef {function} NoOp\n *\n * @returns {void}\n */\n\n/**\n * @typedef {object} ConfigHeadInternal\n *\n * @property {'merge' | 'append' | 'morph' | 'none'} style\n * @property {boolean} [block]\n * @property {boolean} [ignore]\n * @property {(function(Element): boolean) | NoOp} shouldPreserve\n * @property {(function(Element): boolean) | NoOp} shouldReAppend\n * @property {(function(Element): boolean) | NoOp} shouldRemove\n * @property {(function(Element, {added: Node[], kept: Element[], removed: Element[]}): void) | NoOp} afterHeadMorphed\n */\n\n/**\n * @typedef {object} ConfigCallbacksInternal\n *\n * @property {(function(Node): boolean) | NoOp} beforeNodeAdded\n * @property {(function(Node): void) | NoOp} afterNodeAdded\n * @property {(function(Node, Node): boolean) | NoOp} beforeNodeMorphed\n * @property {(function(Node, Node): void) | NoOp} afterNodeMorphed\n * @property {(function(Node): boolean) | NoOp} beforeNodeRemoved\n * @property {(function(Node): void) | NoOp} afterNodeRemoved\n * @property {(function(string, Element, \"update\" | \"remove\"): boolean) | NoOp} beforeAttributeUpdated\n */\n\n/**\n * @typedef {object} ConfigInternal\n *\n * @property {'outerHTML' | 'innerHTML'} morphStyle\n * @property {boolean} [ignoreActive]\n * @property {boolean} [ignoreActiveValue]\n * @property {boolean} [restoreFocus]\n * @property {ConfigCallbacksInternal} callbacks\n * @property {ConfigHeadInternal} head\n */\n\n/**\n * @typedef {Object} IdSets\n * @property {Set<string>} persistentIds\n * @property {Map<Node, Set<string>>} idMap\n */\n\n/**\n * @typedef {Function} Morph\n *\n * @param {Element | Document} oldNode\n * @param {Element | Node | HTMLCollection | Node[] | string | null} newContent\n * @param {Config} [config]\n * @returns {undefined | Node[]}\n */\n\n// base IIFE to define idiomorph\n/**\n *\n * @type {{defaults: ConfigInternal, morph: Morph}}\n */\nvar Idiomorph = (function () {\n\n  /**\n   * @typedef {object} MorphContext\n   *\n   * @property {Element} target\n   * @property {Element} newContent\n   * @property {ConfigInternal} config\n   * @property {ConfigInternal['morphStyle']} morphStyle\n   * @property {ConfigInternal['ignoreActive']} ignoreActive\n   * @property {ConfigInternal['ignoreActiveValue']} ignoreActiveValue\n   * @property {ConfigInternal['restoreFocus']} restoreFocus\n   * @property {Map<Node, Set<string>>} idMap\n   * @property {Set<string>} persistentIds\n   * @property {ConfigInternal['callbacks']} callbacks\n   * @property {ConfigInternal['head']} head\n   * @property {HTMLDivElement} pantry\n   * @property {Element[]} activeElementAndParents\n   */\n\n  //=============================================================================\n  // AND NOW IT BEGINS...\n  //=============================================================================\n\n  const noOp = () => {};\n  /**\n   * Default configuration values, updatable by users now\n   * @type {ConfigInternal}\n   */\n  const defaults = {\n    morphStyle: \"outerHTML\",\n    callbacks: {\n      beforeNodeAdded: noOp,\n      afterNodeAdded: noOp,\n      beforeNodeMorphed: noOp,\n      afterNodeMorphed: noOp,\n      beforeNodeRemoved: noOp,\n      afterNodeRemoved: noOp,\n      beforeAttributeUpdated: noOp,\n    },\n    head: {\n      style: \"merge\",\n      shouldPreserve: (elt) => elt.getAttribute(\"im-preserve\") === \"true\",\n      shouldReAppend: (elt) => elt.getAttribute(\"im-re-append\") === \"true\",\n      shouldRemove: noOp,\n      afterHeadMorphed: noOp,\n    },\n    restoreFocus: true,\n  };\n\n  /**\n   * Core idiomorph function for morphing one DOM tree to another\n   *\n   * @param {Element | Document} oldNode\n   * @param {Element | Node | HTMLCollection | Node[] | string | null} newContent\n   * @param {Config} [config]\n   * @returns {Promise<Node[]> | Node[]}\n   */\n  function morph(oldNode, newContent, config = {}) {\n    oldNode = normalizeElement(oldNode);\n    const newNode = normalizeParent(newContent);\n    const ctx = createMorphContext(oldNode, newNode, config);\n\n    const morphedNodes = saveAndRestoreFocus(ctx, () => {\n      return withHeadBlocking(\n        ctx,\n        oldNode,\n        newNode,\n        /** @param {MorphContext} ctx */ (ctx) => {\n          if (ctx.morphStyle === \"innerHTML\") {\n            morphChildren(ctx, oldNode, newNode);\n            return Array.from(oldNode.childNodes);\n          } else {\n            return morphOuterHTML(ctx, oldNode, newNode);\n          }\n        },\n      );\n    });\n\n    ctx.pantry.remove();\n    return morphedNodes;\n  }\n\n  /**\n   * Morph just the outerHTML of the oldNode to the newContent\n   * We have to be careful because the oldNode could have siblings which need to be untouched\n   * @param {MorphContext} ctx\n   * @param {Element} oldNode\n   * @param {Element} newNode\n   * @returns {Node[]}\n   */\n  function morphOuterHTML(ctx, oldNode, newNode) {\n    const oldParent = normalizeParent(oldNode);\n    morphChildren(\n      ctx,\n      oldParent,\n      newNode,\n      // these two optional params are the secret sauce\n      oldNode, // start point for iteration\n      oldNode.nextSibling, // end point for iteration\n    );\n    // this is safe even with siblings, because normalizeParent returns a SlicedParentNode if needed.\n    return Array.from(oldParent.childNodes);\n  }\n\n  /**\n   * @param {MorphContext} ctx\n   * @param {Function} fn\n   * @returns {Promise<Node[]> | Node[]}\n   */\n  function saveAndRestoreFocus(ctx, fn) {\n    if (!ctx.config.restoreFocus) return fn();\n    let activeElement =\n      /** @type {HTMLInputElement|HTMLTextAreaElement|null} */ (\n        document.activeElement\n      );\n\n    // don't bother if the active element is not an input or textarea\n    if (\n      !(\n        activeElement instanceof HTMLInputElement ||\n        activeElement instanceof HTMLTextAreaElement\n      )\n    ) {\n      return fn();\n    }\n\n    const { id: activeElementId, selectionStart, selectionEnd } = activeElement;\n\n    const results = fn();\n\n    if (\n      activeElementId &&\n      activeElementId !== document.activeElement?.getAttribute(\"id\")\n    ) {\n      activeElement = ctx.target.querySelector(`[id=\"${activeElementId}\"]`);\n      activeElement?.focus();\n    }\n    if (activeElement && !activeElement.selectionEnd && selectionEnd) {\n      activeElement.setSelectionRange(selectionStart, selectionEnd);\n    }\n\n    return results;\n  }\n\n  const morphChildren = (function () {\n    /**\n     * This is the core algorithm for matching up children.  The idea is to use id sets to try to match up\n     * nodes as faithfully as possible.  We greedily match, which allows us to keep the algorithm fast, but\n     * by using id sets, we are able to better match up with content deeper in the DOM.\n     *\n     * Basic algorithm:\n     * - for each node in the new content:\n     *   - search self and siblings for an id set match, falling back to a soft match\n     *   - if match found\n     *     - remove any nodes up to the match:\n     *       - pantry persistent nodes\n     *       - delete the rest\n     *     - morph the match\n     *   - elsif no match found, and node is persistent\n     *     - find its match by querying the old root (future) and pantry (past)\n     *     - move it and its children here\n     *     - morph it\n     *   - else\n     *     - create a new node from scratch as a last result\n     *\n     * @param {MorphContext} ctx the merge context\n     * @param {Element} oldParent the old content that we are merging the new content into\n     * @param {Element} newParent the parent element of the new content\n     * @param {Node|null} [insertionPoint] the point in the DOM we start morphing at (defaults to first child)\n     * @param {Node|null} [endPoint] the point in the DOM we stop morphing at (defaults to after last child)\n     */\n    function morphChildren(\n      ctx,\n      oldParent,\n      newParent,\n      insertionPoint = null,\n      endPoint = null,\n    ) {\n      // normalize\n      if (\n        oldParent instanceof HTMLTemplateElement &&\n        newParent instanceof HTMLTemplateElement\n      ) {\n        // @ts-ignore we can pretend the DocumentFragment is an Element\n        oldParent = oldParent.content;\n        // @ts-ignore ditto\n        newParent = newParent.content;\n      }\n      insertionPoint ||= oldParent.firstChild;\n\n      // run through all the new content\n      for (const newChild of newParent.childNodes) {\n        // once we reach the end of the old parent content skip to the end and insert the rest\n        if (insertionPoint && insertionPoint != endPoint) {\n          const bestMatch = findBestMatch(\n            ctx,\n            newChild,\n            insertionPoint,\n            endPoint,\n          );\n          if (bestMatch) {\n            // if the node to morph is not at the insertion point then remove/move up to it\n            if (bestMatch !== insertionPoint) {\n              removeNodesBetween(ctx, insertionPoint, bestMatch);\n            }\n            morphNode(bestMatch, newChild, ctx);\n            insertionPoint = bestMatch.nextSibling;\n            continue;\n          }\n        }\n\n        // if the matching node is elsewhere in the original content\n        if (newChild instanceof Element) {\n          // we can pretend the id is non-null because the next `.has` line will reject it if not\n          const newChildId = /** @type {String} */ (\n            newChild.getAttribute(\"id\")\n          );\n          if (ctx.persistentIds.has(newChildId)) {\n            // move it and all its children here and morph\n            const movedChild = moveBeforeById(\n              oldParent,\n              newChildId,\n              insertionPoint,\n              ctx,\n            );\n            morphNode(movedChild, newChild, ctx);\n            insertionPoint = movedChild.nextSibling;\n            continue;\n          }\n        }\n\n        // last resort: insert the new node from scratch\n        const insertedNode = createNode(\n          oldParent,\n          newChild,\n          insertionPoint,\n          ctx,\n        );\n        // could be null if beforeNodeAdded prevented insertion\n        if (insertedNode) {\n          insertionPoint = insertedNode.nextSibling;\n        }\n      }\n\n      // remove any remaining old nodes that didn't match up with new content\n      while (insertionPoint && insertionPoint != endPoint) {\n        const tempNode = insertionPoint;\n        insertionPoint = insertionPoint.nextSibling;\n        removeNode(ctx, tempNode);\n      }\n    }\n\n    /**\n     * This performs the action of inserting a new node while handling situations where the node contains\n     * elements with persistent ids and possible state info we can still preserve by moving in and then morphing\n     *\n     * @param {Element} oldParent\n     * @param {Node} newChild\n     * @param {Node|null} insertionPoint\n     * @param {MorphContext} ctx\n     * @returns {Node|null}\n     */\n    function createNode(oldParent, newChild, insertionPoint, ctx) {\n      if (ctx.callbacks.beforeNodeAdded(newChild) === false) return null;\n      if (ctx.idMap.has(newChild)) {\n        // node has children with ids with possible state so create a dummy elt of same type and apply full morph algorithm\n        const newEmptyChild = document.createElement(\n          /** @type {Element} */ (newChild).tagName,\n        );\n        oldParent.insertBefore(newEmptyChild, insertionPoint);\n        morphNode(newEmptyChild, newChild, ctx);\n        ctx.callbacks.afterNodeAdded(newEmptyChild);\n        return newEmptyChild;\n      } else {\n        // optimisation: no id state to preserve so we can just insert a clone of the newChild and its descendants\n        const newClonedChild = document.importNode(newChild, true); // importNode to not mutate newParent\n        oldParent.insertBefore(newClonedChild, insertionPoint);\n        ctx.callbacks.afterNodeAdded(newClonedChild);\n        return newClonedChild;\n      }\n    }\n\n    //=============================================================================\n    // Matching Functions\n    //=============================================================================\n    const findBestMatch = (function () {\n      /**\n       * Scans forward from the startPoint to the endPoint looking for a match\n       * for the node. It looks for an id set match first, then a soft match.\n       * We abort softmatching if we find two future soft matches, to reduce churn.\n       * @param {Node} node\n       * @param {MorphContext} ctx\n       * @param {Node | null} startPoint\n       * @param {Node | null} endPoint\n       * @returns {Node | null}\n       */\n      function findBestMatch(ctx, node, startPoint, endPoint) {\n        let softMatch = null;\n        let nextSibling = node.nextSibling;\n        let siblingSoftMatchCount = 0;\n\n        let cursor = startPoint;\n        while (cursor && cursor != endPoint) {\n          // soft matching is a prerequisite for id set matching\n          if (isSoftMatch(cursor, node)) {\n            if (isIdSetMatch(ctx, cursor, node)) {\n              return cursor; // found an id set match, we're done!\n            }\n\n            // we haven't yet saved a soft match fallback\n            if (softMatch === null) {\n              // the current soft match will hard match something else in the future, leave it\n              if (!ctx.idMap.has(cursor)) {\n                // save this as the fallback if we get through the loop without finding a hard match\n                softMatch = cursor;\n              }\n            }\n          }\n          if (\n            softMatch === null &&\n            nextSibling &&\n            isSoftMatch(cursor, nextSibling)\n          ) {\n            // The next new node has a soft match with this node, so\n            // increment the count of future soft matches\n            siblingSoftMatchCount++;\n            nextSibling = nextSibling.nextSibling;\n\n            // If there are two future soft matches, block soft matching for this node to allow\n            // future siblings to soft match. This is to reduce churn in the DOM when an element\n            // is prepended.\n            if (siblingSoftMatchCount >= 2) {\n              softMatch = undefined;\n            }\n          }\n\n          // if the current node contains active element, stop looking for better future matches,\n          // because if one is found, this node will be moved to the pantry, reparenting it and thus losing focus\n          // @ts-ignore pretend cursor is Element rather than Node, we're just testing for array inclusion\n          if (ctx.activeElementAndParents.includes(cursor)) break;\n\n          cursor = cursor.nextSibling;\n        }\n\n        return softMatch || null;\n      }\n\n      /**\n       *\n       * @param {MorphContext} ctx\n       * @param {Node} oldNode\n       * @param {Node} newNode\n       * @returns {boolean}\n       */\n      function isIdSetMatch(ctx, oldNode, newNode) {\n        let oldSet = ctx.idMap.get(oldNode);\n        let newSet = ctx.idMap.get(newNode);\n\n        if (!newSet || !oldSet) return false;\n\n        for (const id of oldSet) {\n          // a potential match is an id in the new and old nodes that\n          // has not already been merged into the DOM\n          // But the newNode content we call this on has not been\n          // merged yet and we don't allow duplicate IDs so it is simple\n          if (newSet.has(id)) {\n            return true;\n          }\n        }\n        return false;\n      }\n\n      /**\n       *\n       * @param {Node} oldNode\n       * @param {Node} newNode\n       * @returns {boolean}\n       */\n      function isSoftMatch(oldNode, newNode) {\n        // ok to cast: if one is not element, `id` and `tagName` will be undefined and we'll just compare that.\n        const oldElt = /** @type {Element} */ (oldNode);\n        const newElt = /** @type {Element} */ (newNode);\n\n        return (\n          oldElt.nodeType === newElt.nodeType &&\n          oldElt.tagName === newElt.tagName &&\n          // If oldElt has an `id` with possible state and it doesn't match newElt.id then avoid morphing.\n          // We'll still match an anonymous node with an IDed newElt, though, because if it got this far,\n          // its not persistent, and new nodes can't have any hidden state.\n          // We can't use .id because of form input shadowing, and we can't count on .getAttribute's presence because it could be a document-fragment\n          (!oldElt.getAttribute?.(\"id\") ||\n            oldElt.getAttribute?.(\"id\") === newElt.getAttribute?.(\"id\"))\n        );\n      }\n\n      return findBestMatch;\n    })();\n\n    //=============================================================================\n    // DOM Manipulation Functions\n    //=============================================================================\n\n    /**\n     * Gets rid of an unwanted DOM node; strategy depends on nature of its reuse:\n     * - Persistent nodes will be moved to the pantry for later reuse\n     * - Other nodes will have their hooks called, and then are removed\n     * @param {MorphContext} ctx\n     * @param {Node} node\n     */\n    function removeNode(ctx, node) {\n      // are we going to id set match this later?\n      if (ctx.idMap.has(node)) {\n        // skip callbacks and move to pantry\n        moveBefore(ctx.pantry, node, null);\n      } else {\n        // remove for realsies\n        if (ctx.callbacks.beforeNodeRemoved(node) === false) return;\n        node.parentNode?.removeChild(node);\n        ctx.callbacks.afterNodeRemoved(node);\n      }\n    }\n\n    /**\n     * Remove nodes between the start and end nodes\n     * @param {MorphContext} ctx\n     * @param {Node} startInclusive\n     * @param {Node} endExclusive\n     * @returns {Node|null}\n     */\n    function removeNodesBetween(ctx, startInclusive, endExclusive) {\n      /** @type {Node | null} */\n      let cursor = startInclusive;\n      // remove nodes until the endExclusive node\n      while (cursor && cursor !== endExclusive) {\n        let tempNode = /** @type {Node} */ (cursor);\n        cursor = cursor.nextSibling;\n        removeNode(ctx, tempNode);\n      }\n      return cursor;\n    }\n\n    /**\n     * Search for an element by id within the document and pantry, and move it using moveBefore.\n     *\n     * @param {Element} parentNode - The parent node to which the element will be moved.\n     * @param {string} id - The ID of the element to be moved.\n     * @param {Node | null} after - The reference node to insert the element before.\n     *                              If `null`, the element is appended as the last child.\n     * @param {MorphContext} ctx\n     * @returns {Element} The found element\n     */\n    function moveBeforeById(parentNode, id, after, ctx) {\n      const target =\n        /** @type {Element} - will always be found */\n        (\n          // ctx.target.id unsafe because of form input shadowing\n          // ctx.target could be a document fragment which doesn't have `getAttribute`\n          (ctx.target.getAttribute?.(\"id\") === id && ctx.target) ||\n            ctx.target.querySelector(`[id=\"${id}\"]`) ||\n            ctx.pantry.querySelector(`[id=\"${id}\"]`)\n        );\n      removeElementFromAncestorsIdMaps(target, ctx);\n      moveBefore(parentNode, target, after);\n      return target;\n    }\n\n    /**\n     * Removes an element from its ancestors' id maps. This is needed when an element is moved from the\n     * \"future\" via `moveBeforeId`. Otherwise, its erstwhile ancestors could be mistakenly moved to the\n     * pantry rather than being deleted, preventing their removal hooks from being called.\n     *\n     * @param {Element} element - element to remove from its ancestors' id maps\n     * @param {MorphContext} ctx\n     */\n    function removeElementFromAncestorsIdMaps(element, ctx) {\n      // we know id is non-null String, because this function is only called on elements with ids\n      const id = /** @type {String} */ (element.getAttribute(\"id\"));\n      /** @ts-ignore - safe to loop in this way **/\n      while ((element = element.parentNode)) {\n        let idSet = ctx.idMap.get(element);\n        if (idSet) {\n          idSet.delete(id);\n          if (!idSet.size) {\n            ctx.idMap.delete(element);\n          }\n        }\n      }\n    }\n\n    /**\n     * Moves an element before another element within the same parent.\n     * Uses the proposed `moveBefore` API if available (and working), otherwise falls back to `insertBefore`.\n     * This is essentialy a forward-compat wrapper.\n     *\n     * @param {Element} parentNode - The parent node containing the after element.\n     * @param {Node} element - The element to be moved.\n     * @param {Node | null} after - The reference node to insert `element` before.\n     *                              If `null`, `element` is appended as the last child.\n     */\n    function moveBefore(parentNode, element, after) {\n      // @ts-ignore - use proposed moveBefore feature\n      if (parentNode.moveBefore) {\n        try {\n          // @ts-ignore - use proposed moveBefore feature\n          parentNode.moveBefore(element, after);\n        } catch (e) {\n          // fall back to insertBefore as some browsers may fail on moveBefore when trying to move Dom disconnected nodes to pantry\n          parentNode.insertBefore(element, after);\n        }\n      } else {\n        parentNode.insertBefore(element, after);\n      }\n    }\n\n    return morphChildren;\n  })();\n\n  //=============================================================================\n  // Single Node Morphing Code\n  //=============================================================================\n  const morphNode = (function () {\n    /**\n     * @param {Node} oldNode root node to merge content into\n     * @param {Node} newContent new content to merge\n     * @param {MorphContext} ctx the merge context\n     * @returns {Node | null} the element that ended up in the DOM\n     */\n    function morphNode(oldNode, newContent, ctx) {\n      if (ctx.ignoreActive && oldNode === document.activeElement) {\n        // don't morph focused element\n        return null;\n      }\n\n      if (ctx.callbacks.beforeNodeMorphed(oldNode, newContent) === false) {\n        return oldNode;\n      }\n\n      if (oldNode instanceof HTMLHeadElement && ctx.head.ignore) ; else if (\n        oldNode instanceof HTMLHeadElement &&\n        ctx.head.style !== \"morph\"\n      ) {\n        // ok to cast: if newContent wasn't also a <head>, it would've got caught in the `!isSoftMatch` branch above\n        handleHeadElement(\n          oldNode,\n          /** @type {HTMLHeadElement} */ (newContent),\n          ctx,\n        );\n      } else {\n        morphAttributes(oldNode, newContent, ctx);\n        if (!ignoreValueOfActiveElement(oldNode, ctx)) {\n          // @ts-ignore newContent can be a node here because .firstChild will be null\n          morphChildren(ctx, oldNode, newContent);\n        }\n      }\n      ctx.callbacks.afterNodeMorphed(oldNode, newContent);\n      return oldNode;\n    }\n\n    /**\n     * syncs the oldNode to the newNode, copying over all attributes and\n     * inner element state from the newNode to the oldNode\n     *\n     * @param {Node} oldNode the node to copy attributes & state to\n     * @param {Node} newNode the node to copy attributes & state from\n     * @param {MorphContext} ctx the merge context\n     */\n    function morphAttributes(oldNode, newNode, ctx) {\n      let type = newNode.nodeType;\n\n      // if is an element type, sync the attributes from the\n      // new node into the new node\n      if (type === 1 /* element type */) {\n        const oldElt = /** @type {Element} */ (oldNode);\n        const newElt = /** @type {Element} */ (newNode);\n\n        const oldAttributes = oldElt.attributes;\n        const newAttributes = newElt.attributes;\n        for (const newAttribute of newAttributes) {\n          if (ignoreAttribute(newAttribute.name, oldElt, \"update\", ctx)) {\n            continue;\n          }\n          if (oldElt.getAttribute(newAttribute.name) !== newAttribute.value) {\n            oldElt.setAttribute(newAttribute.name, newAttribute.value);\n          }\n        }\n        // iterate backwards to avoid skipping over items when a delete occurs\n        for (let i = oldAttributes.length - 1; 0 <= i; i--) {\n          const oldAttribute = oldAttributes[i];\n\n          // toAttributes is a live NamedNodeMap, so iteration+mutation is unsafe\n          // e.g. custom element attribute callbacks can remove other attributes\n          if (!oldAttribute) continue;\n\n          if (!newElt.hasAttribute(oldAttribute.name)) {\n            if (ignoreAttribute(oldAttribute.name, oldElt, \"remove\", ctx)) {\n              continue;\n            }\n            oldElt.removeAttribute(oldAttribute.name);\n          }\n        }\n\n        if (!ignoreValueOfActiveElement(oldElt, ctx)) {\n          syncInputValue(oldElt, newElt, ctx);\n        }\n      }\n\n      // sync text nodes\n      if (type === 8 /* comment */ || type === 3 /* text */) {\n        if (oldNode.nodeValue !== newNode.nodeValue) {\n          oldNode.nodeValue = newNode.nodeValue;\n        }\n      }\n    }\n\n    /**\n     * NB: many bothans died to bring us information:\n     *\n     *  https://github.com/patrick-steele-idem/morphdom/blob/master/src/specialElHandlers.js\n     *  https://github.com/choojs/nanomorph/blob/master/lib/morph.jsL113\n     *\n     * @param {Element} oldElement the element to sync the input value to\n     * @param {Element} newElement the element to sync the input value from\n     * @param {MorphContext} ctx the merge context\n     */\n    function syncInputValue(oldElement, newElement, ctx) {\n      if (\n        oldElement instanceof HTMLInputElement &&\n        newElement instanceof HTMLInputElement &&\n        newElement.type !== \"file\"\n      ) {\n        let newValue = newElement.value;\n        let oldValue = oldElement.value;\n\n        // sync boolean attributes\n        syncBooleanAttribute(oldElement, newElement, \"checked\", ctx);\n        syncBooleanAttribute(oldElement, newElement, \"disabled\", ctx);\n\n        if (!newElement.hasAttribute(\"value\")) {\n          if (!ignoreAttribute(\"value\", oldElement, \"remove\", ctx)) {\n            oldElement.value = \"\";\n            oldElement.removeAttribute(\"value\");\n          }\n        } else if (oldValue !== newValue) {\n          if (!ignoreAttribute(\"value\", oldElement, \"update\", ctx)) {\n            oldElement.setAttribute(\"value\", newValue);\n            oldElement.value = newValue;\n          }\n        }\n        // TODO: QUESTION(1cg): this used to only check `newElement` unlike the other branches -- why?\n        // did I break something?\n      } else if (\n        oldElement instanceof HTMLOptionElement &&\n        newElement instanceof HTMLOptionElement\n      ) {\n        syncBooleanAttribute(oldElement, newElement, \"selected\", ctx);\n      } else if (\n        oldElement instanceof HTMLTextAreaElement &&\n        newElement instanceof HTMLTextAreaElement\n      ) {\n        let newValue = newElement.value;\n        let oldValue = oldElement.value;\n        if (ignoreAttribute(\"value\", oldElement, \"update\", ctx)) {\n          return;\n        }\n        if (newValue !== oldValue) {\n          oldElement.value = newValue;\n        }\n        if (\n          oldElement.firstChild &&\n          oldElement.firstChild.nodeValue !== newValue\n        ) {\n          oldElement.firstChild.nodeValue = newValue;\n        }\n      }\n    }\n\n    /**\n     * @param {Element} oldElement element to write the value to\n     * @param {Element} newElement element to read the value from\n     * @param {string} attributeName the attribute name\n     * @param {MorphContext} ctx the merge context\n     */\n    function syncBooleanAttribute(oldElement, newElement, attributeName, ctx) {\n      // @ts-ignore this function is only used on boolean attrs that are reflected as dom properties\n      const newLiveValue = newElement[attributeName],\n        // @ts-ignore ditto\n        oldLiveValue = oldElement[attributeName];\n      if (newLiveValue !== oldLiveValue) {\n        const ignoreUpdate = ignoreAttribute(\n          attributeName,\n          oldElement,\n          \"update\",\n          ctx,\n        );\n        if (!ignoreUpdate) {\n          // update attribute's associated DOM property\n          // @ts-ignore this function is only used on boolean attrs that are reflected as dom properties\n          oldElement[attributeName] = newElement[attributeName];\n        }\n        if (newLiveValue) {\n          if (!ignoreUpdate) {\n            // https://developer.mozilla.org/en-US/docs/Glossary/Boolean/HTML\n            // this is the correct way to set a boolean attribute to \"true\"\n            oldElement.setAttribute(attributeName, \"\");\n          }\n        } else {\n          if (!ignoreAttribute(attributeName, oldElement, \"remove\", ctx)) {\n            oldElement.removeAttribute(attributeName);\n          }\n        }\n      }\n    }\n\n    /**\n     * @param {string} attr the attribute to be mutated\n     * @param {Element} element the element that is going to be updated\n     * @param {\"update\" | \"remove\"} updateType\n     * @param {MorphContext} ctx the merge context\n     * @returns {boolean} true if the attribute should be ignored, false otherwise\n     */\n    function ignoreAttribute(attr, element, updateType, ctx) {\n      if (\n        attr === \"value\" &&\n        ctx.ignoreActiveValue &&\n        element === document.activeElement\n      ) {\n        return true;\n      }\n      return (\n        ctx.callbacks.beforeAttributeUpdated(attr, element, updateType) ===\n        false\n      );\n    }\n\n    /**\n     * @param {Node} possibleActiveElement\n     * @param {MorphContext} ctx\n     * @returns {boolean}\n     */\n    function ignoreValueOfActiveElement(possibleActiveElement, ctx) {\n      return (\n        !!ctx.ignoreActiveValue &&\n        possibleActiveElement === document.activeElement &&\n        possibleActiveElement !== document.body\n      );\n    }\n\n    return morphNode;\n  })();\n\n  //=============================================================================\n  // Head Management Functions\n  //=============================================================================\n  /**\n   * @param {MorphContext} ctx\n   * @param {Element} oldNode\n   * @param {Element} newNode\n   * @param {function} callback\n   * @returns {Node[] | Promise<Node[]>}\n   */\n  function withHeadBlocking(ctx, oldNode, newNode, callback) {\n    if (ctx.head.block) {\n      const oldHead = oldNode.querySelector(\"head\");\n      const newHead = newNode.querySelector(\"head\");\n      if (oldHead && newHead) {\n        const promises = handleHeadElement(oldHead, newHead, ctx);\n        // when head promises resolve, proceed ignoring the head tag\n        return Promise.all(promises).then(() => {\n          const newCtx = Object.assign(ctx, {\n            head: {\n              block: false,\n              ignore: true,\n            },\n          });\n          return callback(newCtx);\n        });\n      }\n    }\n    // just proceed if we not head blocking\n    return callback(ctx);\n  }\n\n  /**\n   *  The HEAD tag can be handled specially, either w/ a 'merge' or 'append' style\n   *\n   * @param {Element} oldHead\n   * @param {Element} newHead\n   * @param {MorphContext} ctx\n   * @returns {Promise<void>[]}\n   */\n  function handleHeadElement(oldHead, newHead, ctx) {\n    let added = [];\n    let removed = [];\n    let preserved = [];\n    let nodesToAppend = [];\n\n    // put all new head elements into a Map, by their outerHTML\n    let srcToNewHeadNodes = new Map();\n    for (const newHeadChild of newHead.children) {\n      srcToNewHeadNodes.set(newHeadChild.outerHTML, newHeadChild);\n    }\n\n    // for each elt in the current head\n    for (const currentHeadElt of oldHead.children) {\n      // If the current head element is in the map\n      let inNewContent = srcToNewHeadNodes.has(currentHeadElt.outerHTML);\n      let isReAppended = ctx.head.shouldReAppend(currentHeadElt);\n      let isPreserved = ctx.head.shouldPreserve(currentHeadElt);\n      if (inNewContent || isPreserved) {\n        if (isReAppended) {\n          // remove the current version and let the new version replace it and re-execute\n          removed.push(currentHeadElt);\n        } else {\n          // this element already exists and should not be re-appended, so remove it from\n          // the new content map, preserving it in the DOM\n          srcToNewHeadNodes.delete(currentHeadElt.outerHTML);\n          preserved.push(currentHeadElt);\n        }\n      } else {\n        if (ctx.head.style === \"append\") {\n          // we are appending and this existing element is not new content\n          // so if and only if it is marked for re-append do we do anything\n          if (isReAppended) {\n            removed.push(currentHeadElt);\n            nodesToAppend.push(currentHeadElt);\n          }\n        } else {\n          // if this is a merge, we remove this content since it is not in the new head\n          if (ctx.head.shouldRemove(currentHeadElt) !== false) {\n            removed.push(currentHeadElt);\n          }\n        }\n      }\n    }\n\n    // Push the remaining new head elements in the Map into the\n    // nodes to append to the head tag\n    nodesToAppend.push(...srcToNewHeadNodes.values());\n\n    let promises = [];\n    for (const newNode of nodesToAppend) {\n      // TODO: This could theoretically be null, based on type\n      let newElt = /** @type {ChildNode} */ (\n        document.createRange().createContextualFragment(newNode.outerHTML)\n          .firstChild\n      );\n      if (ctx.callbacks.beforeNodeAdded(newElt) !== false) {\n        if (\n          (\"href\" in newElt && newElt.href) ||\n          (\"src\" in newElt && newElt.src)\n        ) {\n          /** @type {(result?: any) => void} */ let resolve;\n          let promise = new Promise(function (_resolve) {\n            resolve = _resolve;\n          });\n          newElt.addEventListener(\"load\", function () {\n            resolve();\n          });\n          promises.push(promise);\n        }\n        oldHead.appendChild(newElt);\n        ctx.callbacks.afterNodeAdded(newElt);\n        added.push(newElt);\n      }\n    }\n\n    // remove all removed elements, after we have appended the new elements to avoid\n    // additional network requests for things like style sheets\n    for (const removedElement of removed) {\n      if (ctx.callbacks.beforeNodeRemoved(removedElement) !== false) {\n        oldHead.removeChild(removedElement);\n        ctx.callbacks.afterNodeRemoved(removedElement);\n      }\n    }\n\n    ctx.head.afterHeadMorphed(oldHead, {\n      added: added,\n      kept: preserved,\n      removed: removed,\n    });\n    return promises;\n  }\n\n  //=============================================================================\n  // Create Morph Context Functions\n  //=============================================================================\n  const createMorphContext = (function () {\n    /**\n     *\n     * @param {Element} oldNode\n     * @param {Element} newContent\n     * @param {Config} config\n     * @returns {MorphContext}\n     */\n    function createMorphContext(oldNode, newContent, config) {\n      const { persistentIds, idMap } = createIdMaps(oldNode, newContent);\n\n      const mergedConfig = mergeDefaults(config);\n      const morphStyle = mergedConfig.morphStyle || \"outerHTML\";\n      if (![\"innerHTML\", \"outerHTML\"].includes(morphStyle)) {\n        throw `Do not understand how to morph style ${morphStyle}`;\n      }\n\n      return {\n        target: oldNode,\n        newContent: newContent,\n        config: mergedConfig,\n        morphStyle: morphStyle,\n        ignoreActive: mergedConfig.ignoreActive,\n        ignoreActiveValue: mergedConfig.ignoreActiveValue,\n        restoreFocus: mergedConfig.restoreFocus,\n        idMap: idMap,\n        persistentIds: persistentIds,\n        pantry: createPantry(),\n        activeElementAndParents: createActiveElementAndParents(oldNode),\n        callbacks: mergedConfig.callbacks,\n        head: mergedConfig.head,\n      };\n    }\n\n    /**\n     * Deep merges the config object and the Idiomorph.defaults object to\n     * produce a final configuration object\n     * @param {Config} config\n     * @returns {ConfigInternal}\n     */\n    function mergeDefaults(config) {\n      let finalConfig = Object.assign({}, defaults);\n\n      // copy top level stuff into final config\n      Object.assign(finalConfig, config);\n\n      // copy callbacks into final config (do this to deep merge the callbacks)\n      finalConfig.callbacks = Object.assign(\n        {},\n        defaults.callbacks,\n        config.callbacks,\n      );\n\n      // copy head config into final config  (do this to deep merge the head)\n      finalConfig.head = Object.assign({}, defaults.head, config.head);\n\n      return finalConfig;\n    }\n\n    /**\n     * @returns {HTMLDivElement}\n     */\n    function createPantry() {\n      const pantry = document.createElement(\"div\");\n      pantry.hidden = true;\n      document.body.insertAdjacentElement(\"afterend\", pantry);\n      return pantry;\n    }\n\n    /**\n     * @param {Element} oldNode\n     * @returns {Element[]}\n     */\n    function createActiveElementAndParents(oldNode) {\n      /** @type {Element[]} */\n      let activeElementAndParents = [];\n      let elt = document.activeElement;\n      if (elt?.tagName !== \"BODY\" && oldNode.contains(elt)) {\n        while (elt) {\n          activeElementAndParents.push(elt);\n          if (elt === oldNode) break;\n          elt = elt.parentElement;\n        }\n      }\n      return activeElementAndParents;\n    }\n\n    /**\n     * Returns all elements with an ID contained within the root element and its descendants\n     *\n     * @param {Element} root\n     * @returns {Element[]}\n     */\n    function findIdElements(root) {\n      let elements = Array.from(root.querySelectorAll(\"[id]\"));\n      // root could be a document fragment which doesn't have `getAttribute`\n      if (root.getAttribute?.(\"id\")) {\n        elements.push(root);\n      }\n      return elements;\n    }\n\n    /**\n     * A bottom-up algorithm that populates a map of Element -> IdSet.\n     * The idSet for a given element is the set of all IDs contained within its subtree.\n     * As an optimzation, we filter these IDs through the given list of persistent IDs,\n     * because we don't need to bother considering IDed elements that won't be in the new content.\n     *\n     * @param {Map<Node, Set<string>>} idMap\n     * @param {Set<string>} persistentIds\n     * @param {Element} root\n     * @param {Element[]} elements\n     */\n    function populateIdMapWithTree(idMap, persistentIds, root, elements) {\n      for (const elt of elements) {\n        // we can pretend id is non-null String, because the .has line will reject it immediately if not\n        const id = /** @type {String} */ (elt.getAttribute(\"id\"));\n        if (persistentIds.has(id)) {\n          /** @type {Element|null} */\n          let current = elt;\n          // walk up the parent hierarchy of that element, adding the id\n          // of element to the parent's id set\n          while (current) {\n            let idSet = idMap.get(current);\n            // if the id set doesn't exist, create it and insert it in the map\n            if (idSet == null) {\n              idSet = new Set();\n              idMap.set(current, idSet);\n            }\n            idSet.add(id);\n\n            if (current === root) break;\n            current = current.parentElement;\n          }\n        }\n      }\n    }\n\n    /**\n     * This function computes a map of nodes to all ids contained within that node (inclusive of the\n     * node).  This map can be used to ask if two nodes have intersecting sets of ids, which allows\n     * for a looser definition of \"matching\" than tradition id matching, and allows child nodes\n     * to contribute to a parent nodes matching.\n     *\n     * @param {Element} oldContent  the old content that will be morphed\n     * @param {Element} newContent  the new content to morph to\n     * @returns {IdSets}\n     */\n    function createIdMaps(oldContent, newContent) {\n      const oldIdElements = findIdElements(oldContent);\n      const newIdElements = findIdElements(newContent);\n\n      const persistentIds = createPersistentIds(oldIdElements, newIdElements);\n\n      /** @type {Map<Node, Set<string>>} */\n      let idMap = new Map();\n      populateIdMapWithTree(idMap, persistentIds, oldContent, oldIdElements);\n\n      /** @ts-ignore - if newContent is a duck-typed parent, pass its single child node as the root to halt upwards iteration */\n      const newRoot = newContent.__idiomorphRoot || newContent;\n      populateIdMapWithTree(idMap, persistentIds, newRoot, newIdElements);\n\n      return { persistentIds, idMap };\n    }\n\n    /**\n     * This function computes the set of ids that persist between the two contents excluding duplicates\n     *\n     * @param {Element[]} oldIdElements\n     * @param {Element[]} newIdElements\n     * @returns {Set<string>}\n     */\n    function createPersistentIds(oldIdElements, newIdElements) {\n      let duplicateIds = new Set();\n\n      /** @type {Map<string, string>} */\n      let oldIdTagNameMap = new Map();\n      for (const { id, tagName } of oldIdElements) {\n        if (oldIdTagNameMap.has(id)) {\n          duplicateIds.add(id);\n        } else {\n          oldIdTagNameMap.set(id, tagName);\n        }\n      }\n\n      let persistentIds = new Set();\n      for (const { id, tagName } of newIdElements) {\n        if (persistentIds.has(id)) {\n          duplicateIds.add(id);\n        } else if (oldIdTagNameMap.get(id) === tagName) {\n          persistentIds.add(id);\n        }\n        // skip if tag types mismatch because its not possible to morph one tag into another\n      }\n\n      for (const id of duplicateIds) {\n        persistentIds.delete(id);\n      }\n      return persistentIds;\n    }\n\n    return createMorphContext;\n  })();\n\n  //=============================================================================\n  // HTML Normalization Functions\n  //=============================================================================\n  const { normalizeElement, normalizeParent } = (function () {\n    /** @type {WeakSet<Node>} */\n    const generatedByIdiomorph = new WeakSet();\n\n    /**\n     *\n     * @param {Element | Document} content\n     * @returns {Element}\n     */\n    function normalizeElement(content) {\n      if (content instanceof Document) {\n        return content.documentElement;\n      } else {\n        return content;\n      }\n    }\n\n    /**\n     *\n     * @param {null | string | Node | HTMLCollection | Node[] | Document & {generatedByIdiomorph:boolean}} newContent\n     * @returns {Element}\n     */\n    function normalizeParent(newContent) {\n      if (newContent == null) {\n        return document.createElement(\"div\"); // dummy parent element\n      } else if (typeof newContent === \"string\") {\n        return normalizeParent(parseContent(newContent));\n      } else if (\n        generatedByIdiomorph.has(/** @type {Element} */ (newContent))\n      ) {\n        // the template tag created by idiomorph parsing can serve as a dummy parent\n        return /** @type {Element} */ (newContent);\n      } else if (newContent instanceof Node) {\n        if (newContent.parentNode) {\n          // we can't use the parent directly because newContent may have siblings\n          // that we don't want in the morph, and reparenting might be expensive (TODO is it?),\n          // so instead we create a fake parent node that only sees a slice of its children.\n          /** @type {Element} */\n          return /** @type {any} */ (new SlicedParentNode(newContent));\n        } else {\n          // a single node is added as a child to a dummy parent\n          const dummyParent = document.createElement(\"div\");\n          dummyParent.append(newContent);\n          return dummyParent;\n        }\n      } else {\n        // all nodes in the array or HTMLElement collection are consolidated under\n        // a single dummy parent element\n        const dummyParent = document.createElement(\"div\");\n        for (const elt of [...newContent]) {\n          dummyParent.append(elt);\n        }\n        return dummyParent;\n      }\n    }\n\n    /**\n     * A fake duck-typed parent element to wrap a single node, without actually reparenting it.\n     * This is useful because the node may have siblings that we don't want in the morph, and it may also be moved\n     * or replaced with one or more elements during the morph. This class effectively allows us a window into\n     * a slice of a node's children.\n     * \"If it walks like a duck, and quacks like a duck, then it must be a duck!\" -- James Whitcomb Riley (1849\u20131916)\n     */\n    class SlicedParentNode {\n      /** @param {Node} node */\n      constructor(node) {\n        this.originalNode = node;\n        this.realParentNode = /** @type {Element} */ (node.parentNode);\n        this.previousSibling = node.previousSibling;\n        this.nextSibling = node.nextSibling;\n      }\n\n      /** @returns {Node[]} */\n      get childNodes() {\n        // return slice of realParent's current childNodes, based on previousSibling and nextSibling\n        const nodes = [];\n        let cursor = this.previousSibling\n          ? this.previousSibling.nextSibling\n          : this.realParentNode.firstChild;\n        while (cursor && cursor != this.nextSibling) {\n          nodes.push(cursor);\n          cursor = cursor.nextSibling;\n        }\n        return nodes;\n      }\n\n      /**\n       * @param {string} selector\n       * @returns {Element[]}\n       */\n      querySelectorAll(selector) {\n        return this.childNodes.reduce((results, node) => {\n          if (node instanceof Element) {\n            if (node.matches(selector)) results.push(node);\n            const nodeList = node.querySelectorAll(selector);\n            for (let i = 0; i < nodeList.length; i++) {\n              results.push(nodeList[i]);\n            }\n          }\n          return results;\n        }, /** @type {Element[]} */ ([]));\n      }\n\n      /**\n       * @param {Node} node\n       * @param {Node} referenceNode\n       * @returns {Node}\n       */\n      insertBefore(node, referenceNode) {\n        return this.realParentNode.insertBefore(node, referenceNode);\n      }\n\n      /**\n       * @param {Node} node\n       * @param {Node} referenceNode\n       * @returns {Node}\n       */\n      moveBefore(node, referenceNode) {\n        // @ts-ignore - use new moveBefore feature\n        return this.realParentNode.moveBefore(node, referenceNode);\n      }\n\n      /**\n       * for later use with populateIdMapWithTree to halt upwards iteration\n       * @returns {Node}\n       */\n      get __idiomorphRoot() {\n        return this.originalNode;\n      }\n    }\n\n    /**\n     *\n     * @param {string} newContent\n     * @returns {Node | null | DocumentFragment}\n     */\n    function parseContent(newContent) {\n      let parser = new DOMParser();\n\n      // remove svgs to avoid false-positive matches on head, etc.\n      let contentWithSvgsRemoved = newContent.replace(\n        /<svg(\\s[^>]*>|>)([\\s\\S]*?)<\\/svg>/gim,\n        \"\",\n      );\n\n      // if the newContent contains a html, head or body tag, we can simply parse it w/o wrapping\n      if (\n        contentWithSvgsRemoved.match(/<\\/html>/) ||\n        contentWithSvgsRemoved.match(/<\\/head>/) ||\n        contentWithSvgsRemoved.match(/<\\/body>/)\n      ) {\n        let content = parser.parseFromString(newContent, \"text/html\");\n        // if it is a full HTML document, return the document itself as the parent container\n        if (contentWithSvgsRemoved.match(/<\\/html>/)) {\n          generatedByIdiomorph.add(content);\n          return content;\n        } else {\n          // otherwise return the html element as the parent container\n          let htmlElement = content.firstChild;\n          if (htmlElement) {\n            generatedByIdiomorph.add(htmlElement);\n          }\n          return htmlElement;\n        }\n      } else {\n        // if it is partial HTML, wrap it in a template tag to provide a parent element and also to help\n        // deal with touchy tags like tr, tbody, etc.\n        let responseDoc = parser.parseFromString(\n          \"<body><template>\" + newContent + \"</template></body>\",\n          \"text/html\",\n        );\n        let content = /** @type {HTMLTemplateElement} */ (\n          responseDoc.body.querySelector(\"template\")\n        ).content;\n        generatedByIdiomorph.add(content);\n        return content;\n      }\n    }\n\n    return { normalizeElement, normalizeParent };\n  })();\n\n  //=============================================================================\n  // This is what ends up becoming the Idiomorph global object\n  //=============================================================================\n  return {\n    morph,\n    defaults,\n  };\n})();\n\n/**\n * Morph the state of the currentElement based on the attributes and contents of\n * the newElement. Morphing may dispatch turbo:before-morph-element,\n * turbo:before-morph-attribute, and turbo:morph-element events.\n *\n * @param currentElement Element destination of morphing changes\n * @param newElement Element source of morphing changes\n */\nfunction morphElements(currentElement, newElement, { callbacks, ...options } = {}) {\n  Idiomorph.morph(currentElement, newElement, {\n    ...options,\n    callbacks: new DefaultIdiomorphCallbacks(callbacks)\n  });\n}\n\n/**\n * Morph the child elements of the currentElement based on the child elements of\n * the newElement. Morphing children may dispatch turbo:before-morph-element,\n * turbo:before-morph-attribute, and turbo:morph-element events.\n *\n * @param currentElement Element destination of morphing children changes\n * @param newElement Element source of morphing children changes\n */\nfunction morphChildren(currentElement, newElement, options = {}) {\n  morphElements(currentElement, newElement.childNodes, {\n    ...options,\n    morphStyle: \"innerHTML\"\n  });\n}\n\nfunction shouldRefreshFrameWithMorphing(currentFrame, newFrame) {\n  return currentFrame instanceof FrameElement &&\n    currentFrame.shouldReloadWithMorph && (!newFrame || areFramesCompatibleForRefreshing(currentFrame, newFrame)) &&\n    !currentFrame.closest(\"[data-turbo-permanent]\")\n}\n\nfunction areFramesCompatibleForRefreshing(currentFrame, newFrame) {\n  // newFrame cannot yet be an instance of FrameElement because custom\n  // elements don't get initialized until they're attached to the DOM, so\n  // test its Element#nodeName instead\n  return newFrame instanceof Element && newFrame.nodeName === \"TURBO-FRAME\" && currentFrame.id === newFrame.id &&\n  (!newFrame.getAttribute(\"src\") || urlsAreEqual(currentFrame.src, newFrame.getAttribute(\"src\")))\n}\n\nfunction closestFrameReloadableWithMorphing(node) {\n  return node.parentElement.closest(\"turbo-frame[src][refresh=morph]\")\n}\n\nclass DefaultIdiomorphCallbacks {\n  #beforeNodeMorphed\n\n  constructor({ beforeNodeMorphed } = {}) {\n    this.#beforeNodeMorphed = beforeNodeMorphed || (() => true);\n  }\n\n  beforeNodeAdded = (node) => {\n    return !(node.id && node.hasAttribute(\"data-turbo-permanent\") && document.getElementById(node.id))\n  }\n\n  beforeNodeMorphed = (currentElement, newElement) => {\n    if (currentElement instanceof Element) {\n      if (!currentElement.hasAttribute(\"data-turbo-permanent\") && this.#beforeNodeMorphed(currentElement, newElement)) {\n        const event = dispatch(\"turbo:before-morph-element\", {\n          cancelable: true,\n          target: currentElement,\n          detail: { currentElement, newElement }\n        });\n\n        return !event.defaultPrevented\n      } else {\n        return false\n      }\n    }\n  }\n\n  beforeAttributeUpdated = (attributeName, target, mutationType) => {\n    const event = dispatch(\"turbo:before-morph-attribute\", {\n      cancelable: true,\n      target,\n      detail: { attributeName, mutationType }\n    });\n\n    return !event.defaultPrevented\n  }\n\n  beforeNodeRemoved = (node) => {\n    return this.beforeNodeMorphed(node)\n  }\n\n  afterNodeMorphed = (currentElement, newElement) => {\n    if (currentElement instanceof Element) {\n      dispatch(\"turbo:morph-element\", {\n        target: currentElement,\n        detail: { currentElement, newElement }\n      });\n    }\n  }\n}\n\nclass MorphingFrameRenderer extends FrameRenderer {\n  static renderElement(currentElement, newElement) {\n    dispatch(\"turbo:before-frame-morph\", {\n      target: currentElement,\n      detail: { currentElement, newElement }\n    });\n\n    morphChildren(currentElement, newElement, {\n      callbacks: {\n        beforeNodeMorphed: (node, newNode) => {\n          if (\n            shouldRefreshFrameWithMorphing(node, newNode) &&\n              closestFrameReloadableWithMorphing(node) === currentElement\n          ) {\n            node.reload();\n            return false\n          }\n          return true\n        }\n      }\n    });\n  }\n\n  async preservingPermanentElements(callback) {\n    return await callback()\n  }\n}\n\nclass ProgressBar {\n  static animationDuration = 300 /*ms*/\n\n  static get defaultCSS() {\n    return unindent`\n      .turbo-progress-bar {\n        position: fixed;\n        display: block;\n        top: 0;\n        left: 0;\n        height: 3px;\n        background: #0076ff;\n        z-index: 2147483647;\n        transition:\n          width ${ProgressBar.animationDuration}ms ease-out,\n          opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n        transform: translate3d(0, 0, 0);\n      }\n    `\n  }\n\n  hiding = false\n  value = 0\n  visible = false\n\n  constructor() {\n    this.stylesheetElement = this.createStylesheetElement();\n    this.progressElement = this.createProgressElement();\n    this.installStylesheetElement();\n    this.setValue(0);\n  }\n\n  show() {\n    if (!this.visible) {\n      this.visible = true;\n      this.installProgressElement();\n      this.startTrickling();\n    }\n  }\n\n  hide() {\n    if (this.visible && !this.hiding) {\n      this.hiding = true;\n      this.fadeProgressElement(() => {\n        this.uninstallProgressElement();\n        this.stopTrickling();\n        this.visible = false;\n        this.hiding = false;\n      });\n    }\n  }\n\n  setValue(value) {\n    this.value = value;\n    this.refresh();\n  }\n\n  // Private\n\n  installStylesheetElement() {\n    document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n  }\n\n  installProgressElement() {\n    this.progressElement.style.width = \"0\";\n    this.progressElement.style.opacity = \"1\";\n    document.documentElement.insertBefore(this.progressElement, document.body);\n    this.refresh();\n  }\n\n  fadeProgressElement(callback) {\n    this.progressElement.style.opacity = \"0\";\n    setTimeout(callback, ProgressBar.animationDuration * 1.5);\n  }\n\n  uninstallProgressElement() {\n    if (this.progressElement.parentNode) {\n      document.documentElement.removeChild(this.progressElement);\n    }\n  }\n\n  startTrickling() {\n    if (!this.trickleInterval) {\n      this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n    }\n  }\n\n  stopTrickling() {\n    window.clearInterval(this.trickleInterval);\n    delete this.trickleInterval;\n  }\n\n  trickle = () => {\n    this.setValue(this.value + Math.random() / 100);\n  }\n\n  refresh() {\n    requestAnimationFrame(() => {\n      this.progressElement.style.width = `${10 + this.value * 90}%`;\n    });\n  }\n\n  createStylesheetElement() {\n    const element = document.createElement(\"style\");\n    element.type = \"text/css\";\n    element.textContent = ProgressBar.defaultCSS;\n    const cspNonce = getCspNonce();\n    if (cspNonce) {\n      element.nonce = cspNonce;\n    }\n    return element\n  }\n\n  createProgressElement() {\n    const element = document.createElement(\"div\");\n    element.className = \"turbo-progress-bar\";\n    return element\n  }\n}\n\nclass HeadSnapshot extends Snapshot {\n  detailsByOuterHTML = this.children\n    .filter((element) => !elementIsNoscript(element))\n    .map((element) => elementWithoutNonce(element))\n    .reduce((result, element) => {\n      const { outerHTML } = element;\n      const details =\n        outerHTML in result\n          ? result[outerHTML]\n          : {\n              type: elementType(element),\n              tracked: elementIsTracked(element),\n              elements: []\n            };\n      return {\n        ...result,\n        [outerHTML]: {\n          ...details,\n          elements: [...details.elements, element]\n        }\n      }\n    }, {})\n\n  get trackedElementSignature() {\n    return Object.keys(this.detailsByOuterHTML)\n      .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n      .join(\"\")\n  }\n\n  getScriptElementsNotInSnapshot(snapshot) {\n    return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot)\n  }\n\n  getStylesheetElementsNotInSnapshot(snapshot) {\n    return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot)\n  }\n\n  getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n    return Object.keys(this.detailsByOuterHTML)\n      .filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML))\n      .map((outerHTML) => this.detailsByOuterHTML[outerHTML])\n      .filter(({ type }) => type == matchedType)\n      .map(({ elements: [element] }) => element)\n  }\n\n  get provisionalElements() {\n    return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n      const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n      if (type == null && !tracked) {\n        return [...result, ...elements]\n      } else if (elements.length > 1) {\n        return [...result, ...elements.slice(1)]\n      } else {\n        return result\n      }\n    }, [])\n  }\n\n  getMetaValue(name) {\n    const element = this.findMetaElementByName(name);\n    return element ? element.getAttribute(\"content\") : null\n  }\n\n  findMetaElementByName(name) {\n    return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n      const {\n        elements: [element]\n      } = this.detailsByOuterHTML[outerHTML];\n      return elementIsMetaElementWithName(element, name) ? element : result\n    }, undefined | undefined)\n  }\n}\n\nfunction elementType(element) {\n  if (elementIsScript(element)) {\n    return \"script\"\n  } else if (elementIsStylesheet(element)) {\n    return \"stylesheet\"\n  }\n}\n\nfunction elementIsTracked(element) {\n  return element.getAttribute(\"data-turbo-track\") == \"reload\"\n}\n\nfunction elementIsScript(element) {\n  const tagName = element.localName;\n  return tagName == \"script\"\n}\n\nfunction elementIsNoscript(element) {\n  const tagName = element.localName;\n  return tagName == \"noscript\"\n}\n\nfunction elementIsStylesheet(element) {\n  const tagName = element.localName;\n  return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\")\n}\n\nfunction elementIsMetaElementWithName(element, name) {\n  const tagName = element.localName;\n  return tagName == \"meta\" && element.getAttribute(\"name\") == name\n}\n\nfunction elementWithoutNonce(element) {\n  if (element.hasAttribute(\"nonce\")) {\n    element.setAttribute(\"nonce\", \"\");\n  }\n\n  return element\n}\n\nclass PageSnapshot extends Snapshot {\n  static fromHTMLString(html = \"\") {\n    return this.fromDocument(parseHTMLDocument(html))\n  }\n\n  static fromElement(element) {\n    return this.fromDocument(element.ownerDocument)\n  }\n\n  static fromDocument({ documentElement, body, head }) {\n    return new this(documentElement, body, new HeadSnapshot(head))\n  }\n\n  constructor(documentElement, body, headSnapshot) {\n    super(body);\n    this.documentElement = documentElement;\n    this.headSnapshot = headSnapshot;\n  }\n\n  clone() {\n    const clonedElement = this.element.cloneNode(true);\n\n    const selectElements = this.element.querySelectorAll(\"select\");\n    const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n\n    for (const [index, source] of selectElements.entries()) {\n      const clone = clonedSelectElements[index];\n      for (const option of clone.selectedOptions) option.selected = false;\n      for (const option of source.selectedOptions) clone.options[option.index].selected = true;\n    }\n\n    for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n      clonedPasswordInput.value = \"\";\n    }\n\n    for (const clonedNoscriptElement of clonedElement.querySelectorAll(\"noscript\")) {\n      clonedNoscriptElement.remove();\n    }\n\n    return new PageSnapshot(this.documentElement, clonedElement, this.headSnapshot)\n  }\n\n  get lang() {\n    return this.documentElement.getAttribute(\"lang\")\n  }\n\n  get dir() {\n    return this.documentElement.getAttribute(\"dir\")\n  }\n\n  get headElement() {\n    return this.headSnapshot.element\n  }\n\n  get rootLocation() {\n    const root = this.getSetting(\"root\") ?? \"/\";\n    return expandURL(root)\n  }\n\n  get cacheControlValue() {\n    return this.getSetting(\"cache-control\")\n  }\n\n  get isPreviewable() {\n    return this.cacheControlValue != \"no-preview\"\n  }\n\n  get isCacheable() {\n    return this.cacheControlValue != \"no-cache\"\n  }\n\n  get isVisitable() {\n    return this.getSetting(\"visit-control\") != \"reload\"\n  }\n\n  get prefersViewTransitions() {\n    const viewTransitionEnabled = this.getSetting(\"view-transition\") === \"true\" || this.headSnapshot.getMetaValue(\"view-transition\") === \"same-origin\";\n    return viewTransitionEnabled && !window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n  }\n\n  get refreshMethod() {\n    return this.getSetting(\"refresh-method\")\n  }\n\n  get refreshScroll() {\n    return this.getSetting(\"refresh-scroll\")\n  }\n\n  // Private\n\n  getSetting(name) {\n    return this.headSnapshot.getMetaValue(`turbo-${name}`)\n  }\n}\n\nclass ViewTransitioner {\n  #viewTransitionStarted = false\n  #lastOperation = Promise.resolve()\n\n  renderChange(useViewTransition, render) {\n    if (useViewTransition && this.viewTransitionsAvailable && !this.#viewTransitionStarted) {\n      this.#viewTransitionStarted = true;\n      this.#lastOperation = this.#lastOperation.then(async () => {\n        await document.startViewTransition(render).finished;\n      });\n    } else {\n      this.#lastOperation = this.#lastOperation.then(render);\n    }\n\n    return this.#lastOperation\n  }\n\n  get viewTransitionsAvailable() {\n    return document.startViewTransition\n  }\n}\n\nconst defaultOptions = {\n  action: \"advance\",\n  historyChanged: false,\n  visitCachedSnapshot: () => {},\n  willRender: true,\n  updateHistory: true,\n  shouldCacheSnapshot: true,\n  acceptsStreamResponse: false,\n  refresh: {}\n};\n\nconst TimingMetric = {\n  visitStart: \"visitStart\",\n  requestStart: \"requestStart\",\n  requestEnd: \"requestEnd\",\n  visitEnd: \"visitEnd\"\n};\n\nconst VisitState = {\n  initialized: \"initialized\",\n  started: \"started\",\n  canceled: \"canceled\",\n  failed: \"failed\",\n  completed: \"completed\"\n};\n\nconst SystemStatusCode = {\n  networkFailure: 0,\n  timeoutFailure: -1,\n  contentTypeMismatch: -2\n};\n\nconst Direction = {\n  advance: \"forward\",\n  restore: \"back\",\n  replace: \"none\"\n};\n\nclass Visit {\n  identifier = uuid() // Required by turbo-ios\n  timingMetrics = {}\n\n  followedRedirect = false\n  historyChanged = false\n  scrolled = false\n  shouldCacheSnapshot = true\n  acceptsStreamResponse = false\n  snapshotCached = false\n  state = VisitState.initialized\n  viewTransitioner = new ViewTransitioner()\n\n  constructor(delegate, location, restorationIdentifier, options = {}) {\n    this.delegate = delegate;\n    this.location = location;\n    this.restorationIdentifier = restorationIdentifier || uuid();\n\n    const {\n      action,\n      historyChanged,\n      referrer,\n      snapshot,\n      snapshotHTML,\n      response,\n      visitCachedSnapshot,\n      willRender,\n      updateHistory,\n      shouldCacheSnapshot,\n      acceptsStreamResponse,\n      direction,\n      refresh\n    } = {\n      ...defaultOptions,\n      ...options\n    };\n    this.action = action;\n    this.historyChanged = historyChanged;\n    this.referrer = referrer;\n    this.snapshot = snapshot;\n    this.snapshotHTML = snapshotHTML;\n    this.response = response;\n    this.isPageRefresh = this.view.isPageRefresh(this);\n    this.visitCachedSnapshot = visitCachedSnapshot;\n    this.willRender = willRender;\n    this.updateHistory = updateHistory;\n    this.scrolled = !willRender;\n    this.shouldCacheSnapshot = shouldCacheSnapshot;\n    this.acceptsStreamResponse = acceptsStreamResponse;\n    this.direction = direction || Direction[action];\n    this.refresh = refresh;\n  }\n\n  get adapter() {\n    return this.delegate.adapter\n  }\n\n  get view() {\n    return this.delegate.view\n  }\n\n  get history() {\n    return this.delegate.history\n  }\n\n  get restorationData() {\n    return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)\n  }\n\n  start() {\n    if (this.state == VisitState.initialized) {\n      this.recordTimingMetric(TimingMetric.visitStart);\n      this.state = VisitState.started;\n      this.adapter.visitStarted(this);\n      this.delegate.visitStarted(this);\n    }\n  }\n\n  cancel() {\n    if (this.state == VisitState.started) {\n      if (this.request) {\n        this.request.cancel();\n      }\n      this.cancelRender();\n      this.state = VisitState.canceled;\n    }\n  }\n\n  complete() {\n    if (this.state == VisitState.started) {\n      this.recordTimingMetric(TimingMetric.visitEnd);\n      this.adapter.visitCompleted(this);\n      this.state = VisitState.completed;\n      this.followRedirect();\n\n      if (!this.followedRedirect) {\n        this.delegate.visitCompleted(this);\n      }\n    }\n  }\n\n  fail() {\n    if (this.state == VisitState.started) {\n      this.state = VisitState.failed;\n      this.adapter.visitFailed(this);\n      this.delegate.visitCompleted(this);\n    }\n  }\n\n  changeHistory() {\n    if (!this.historyChanged && this.updateHistory) {\n      const actionForHistory = this.location.href === this.referrer?.href ? \"replace\" : this.action;\n      const method = getHistoryMethodForAction(actionForHistory);\n      this.history.update(method, this.location, this.restorationIdentifier);\n      this.historyChanged = true;\n    }\n  }\n\n  issueRequest() {\n    if (this.hasPreloadedResponse()) {\n      this.simulateRequest();\n    } else if (this.shouldIssueRequest() && !this.request) {\n      this.request = new FetchRequest(this, FetchMethod.get, this.location);\n      this.request.perform();\n    }\n  }\n\n  simulateRequest() {\n    if (this.response) {\n      this.startRequest();\n      this.recordResponse();\n      this.finishRequest();\n    }\n  }\n\n  startRequest() {\n    this.recordTimingMetric(TimingMetric.requestStart);\n    this.adapter.visitRequestStarted(this);\n  }\n\n  recordResponse(response = this.response) {\n    this.response = response;\n    if (response) {\n      const { statusCode } = response;\n      if (isSuccessful(statusCode)) {\n        this.adapter.visitRequestCompleted(this);\n      } else {\n        this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n      }\n    }\n  }\n\n  finishRequest() {\n    this.recordTimingMetric(TimingMetric.requestEnd);\n    this.adapter.visitRequestFinished(this);\n  }\n\n  loadResponse() {\n    if (this.response) {\n      const { statusCode, responseHTML } = this.response;\n      this.render(async () => {\n        if (this.shouldCacheSnapshot) this.cacheSnapshot();\n        if (this.view.renderPromise) await this.view.renderPromise;\n\n        if (isSuccessful(statusCode) && responseHTML != null) {\n          const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n          await this.renderPageSnapshot(snapshot, false);\n\n          this.adapter.visitRendered(this);\n          this.complete();\n        } else {\n          await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n          this.adapter.visitRendered(this);\n          this.fail();\n        }\n      });\n    }\n  }\n\n  getCachedSnapshot() {\n    const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n\n    if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n      if (this.action == \"restore\" || snapshot.isPreviewable) {\n        return snapshot\n      }\n    }\n  }\n\n  getPreloadedSnapshot() {\n    if (this.snapshotHTML) {\n      return PageSnapshot.fromHTMLString(this.snapshotHTML)\n    }\n  }\n\n  hasCachedSnapshot() {\n    return this.getCachedSnapshot() != null\n  }\n\n  loadCachedSnapshot() {\n    const snapshot = this.getCachedSnapshot();\n    if (snapshot) {\n      const isPreview = this.shouldIssueRequest();\n      this.render(async () => {\n        this.cacheSnapshot();\n        if (this.isPageRefresh) {\n          this.adapter.visitRendered(this);\n        } else {\n          if (this.view.renderPromise) await this.view.renderPromise;\n\n          await this.renderPageSnapshot(snapshot, isPreview);\n\n          this.adapter.visitRendered(this);\n          if (!isPreview) {\n            this.complete();\n          }\n        }\n      });\n    }\n  }\n\n  followRedirect() {\n    if (this.redirectedToLocation && !this.followedRedirect && this.response?.redirected) {\n      this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n        action: \"replace\",\n        response: this.response,\n        shouldCacheSnapshot: false,\n        willRender: false\n      });\n      this.followedRedirect = true;\n    }\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request) {\n    if (this.acceptsStreamResponse) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted() {\n    this.startRequest();\n  }\n\n  requestPreventedHandlingResponse(_request, _response) {}\n\n  async requestSucceededWithResponse(request, response) {\n    const responseHTML = await response.responseHTML;\n    const { redirected, statusCode } = response;\n    if (responseHTML == undefined) {\n      this.recordResponse({\n        statusCode: SystemStatusCode.contentTypeMismatch,\n        redirected\n      });\n    } else {\n      this.redirectedToLocation = response.redirected ? response.location : undefined;\n      this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n    }\n  }\n\n  async requestFailedWithResponse(request, response) {\n    const responseHTML = await response.responseHTML;\n    const { redirected, statusCode } = response;\n    if (responseHTML == undefined) {\n      this.recordResponse({\n        statusCode: SystemStatusCode.contentTypeMismatch,\n        redirected\n      });\n    } else {\n      this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n    }\n  }\n\n  requestErrored(_request, _error) {\n    this.recordResponse({\n      statusCode: SystemStatusCode.networkFailure,\n      redirected: false\n    });\n  }\n\n  requestFinished() {\n    this.finishRequest();\n  }\n\n  // Scrolling\n\n  performScroll() {\n    if (!this.scrolled && !this.view.forceReloaded && !this.view.shouldPreserveScrollPosition(this)) {\n      if (this.action == \"restore\") {\n        this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n      } else {\n        this.scrollToAnchor() || this.view.scrollToTop();\n      }\n\n      this.scrolled = true;\n    }\n  }\n\n  scrollToRestoredPosition() {\n    const { scrollPosition } = this.restorationData;\n    if (scrollPosition) {\n      this.view.scrollToPosition(scrollPosition);\n      return true\n    }\n  }\n\n  scrollToAnchor() {\n    const anchor = getAnchor(this.location);\n    if (anchor != null) {\n      this.view.scrollToAnchor(anchor);\n      return true\n    }\n  }\n\n  // Instrumentation\n\n  recordTimingMetric(metric) {\n    this.timingMetrics[metric] = new Date().getTime();\n  }\n\n  getTimingMetrics() {\n    return { ...this.timingMetrics }\n  }\n\n  // Private\n\n  hasPreloadedResponse() {\n    return typeof this.response == \"object\"\n  }\n\n  shouldIssueRequest() {\n    if (this.action == \"restore\") {\n      return !this.hasCachedSnapshot()\n    } else {\n      return this.willRender\n    }\n  }\n\n  cacheSnapshot() {\n    if (!this.snapshotCached) {\n      this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n      this.snapshotCached = true;\n    }\n  }\n\n  async render(callback) {\n    this.cancelRender();\n    await new Promise((resolve) => {\n      this.frame =\n        document.visibilityState === \"hidden\" ? setTimeout(() => resolve(), 0) : requestAnimationFrame(() => resolve());\n    });\n    await callback();\n    delete this.frame;\n  }\n\n  async renderPageSnapshot(snapshot, isPreview) {\n    await this.viewTransitioner.renderChange(this.view.shouldTransitionTo(snapshot), async () => {\n      await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n      this.performScroll();\n    });\n  }\n\n  cancelRender() {\n    if (this.frame) {\n      cancelAnimationFrame(this.frame);\n      delete this.frame;\n    }\n  }\n}\n\nfunction isSuccessful(statusCode) {\n  return statusCode >= 200 && statusCode < 300\n}\n\nclass BrowserAdapter {\n  progressBar = new ProgressBar()\n\n  constructor(session) {\n    this.session = session;\n  }\n\n  visitProposedToLocation(location, options) {\n    if (locationIsVisitable(location, this.navigator.rootLocation)) {\n      this.navigator.startVisit(location, options?.restorationIdentifier || uuid(), options);\n    } else {\n      window.location.href = location.toString();\n    }\n  }\n\n  visitStarted(visit) {\n    this.location = visit.location;\n    this.redirectedToLocation = null;\n\n    visit.loadCachedSnapshot();\n    visit.issueRequest();\n  }\n\n  visitRequestStarted(visit) {\n    this.progressBar.setValue(0);\n    if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n      this.showVisitProgressBarAfterDelay();\n    } else {\n      this.showProgressBar();\n    }\n  }\n\n  visitRequestCompleted(visit) {\n    visit.loadResponse();\n\n    if (visit.response.redirected) {\n      this.redirectedToLocation = visit.redirectedToLocation;\n    }\n  }\n\n  visitRequestFailedWithStatusCode(visit, statusCode) {\n    switch (statusCode) {\n      case SystemStatusCode.networkFailure:\n      case SystemStatusCode.timeoutFailure:\n      case SystemStatusCode.contentTypeMismatch:\n        return this.reload({\n          reason: \"request_failed\",\n          context: {\n            statusCode\n          }\n        })\n      default:\n        return visit.loadResponse()\n    }\n  }\n\n  visitRequestFinished(_visit) {}\n\n  visitCompleted(_visit) {\n    this.progressBar.setValue(1);\n    this.hideVisitProgressBar();\n  }\n\n  pageInvalidated(reason) {\n    this.reload(reason);\n  }\n\n  visitFailed(_visit) {\n    this.progressBar.setValue(1);\n    this.hideVisitProgressBar();\n  }\n\n  visitRendered(_visit) {}\n\n  // Link prefetching\n\n  linkPrefetchingIsEnabledForLocation(location) {\n    return true\n  }\n\n  // Form Submission Delegate\n\n  formSubmissionStarted(_formSubmission) {\n    this.progressBar.setValue(0);\n    this.showFormProgressBarAfterDelay();\n  }\n\n  formSubmissionFinished(_formSubmission) {\n    this.progressBar.setValue(1);\n    this.hideFormProgressBar();\n  }\n\n  // Private\n\n  showVisitProgressBarAfterDelay() {\n    this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n  }\n\n  hideVisitProgressBar() {\n    this.progressBar.hide();\n    if (this.visitProgressBarTimeout != null) {\n      window.clearTimeout(this.visitProgressBarTimeout);\n      delete this.visitProgressBarTimeout;\n    }\n  }\n\n  showFormProgressBarAfterDelay() {\n    if (this.formProgressBarTimeout == null) {\n      this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n    }\n  }\n\n  hideFormProgressBar() {\n    this.progressBar.hide();\n    if (this.formProgressBarTimeout != null) {\n      window.clearTimeout(this.formProgressBarTimeout);\n      delete this.formProgressBarTimeout;\n    }\n  }\n\n  showProgressBar = () => {\n    this.progressBar.show();\n  }\n\n  reload(reason) {\n    dispatch(\"turbo:reload\", { detail: reason });\n\n    window.location.href = (this.redirectedToLocation || this.location)?.toString() || window.location.href;\n  }\n\n  get navigator() {\n    return this.session.navigator\n  }\n}\n\nclass CacheObserver {\n  selector = \"[data-turbo-temporary]\"\n\n  started = false\n\n  start() {\n    if (!this.started) {\n      this.started = true;\n      addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.started = false;\n      removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n    }\n  }\n\n  removeTemporaryElements = (_event) => {\n    for (const element of this.temporaryElements) {\n      element.remove();\n    }\n  }\n\n  get temporaryElements() {\n    return [...document.querySelectorAll(this.selector)]\n  }\n}\n\nclass FrameRedirector {\n  constructor(session, element) {\n    this.session = session;\n    this.element = element;\n    this.linkInterceptor = new LinkInterceptor(this, element);\n    this.formSubmitObserver = new FormSubmitObserver(this, element);\n  }\n\n  start() {\n    this.linkInterceptor.start();\n    this.formSubmitObserver.start();\n  }\n\n  stop() {\n    this.linkInterceptor.stop();\n    this.formSubmitObserver.stop();\n  }\n\n  // Link interceptor delegate\n\n  shouldInterceptLinkClick(element, _location, _event) {\n    return this.#shouldRedirect(element)\n  }\n\n  linkClickIntercepted(element, url, event) {\n    const frame = this.#findFrameElement(element);\n    if (frame) {\n      frame.delegate.linkClickIntercepted(element, url, event);\n    }\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(element, submitter) {\n    return (\n      element.closest(\"turbo-frame\") == null &&\n      this.#shouldSubmit(element, submitter) &&\n      this.#shouldRedirect(element, submitter)\n    )\n  }\n\n  formSubmitted(element, submitter) {\n    const frame = this.#findFrameElement(element, submitter);\n    if (frame) {\n      frame.delegate.formSubmitted(element, submitter);\n    }\n  }\n\n  #shouldSubmit(form, submitter) {\n    const action = getAction$1(form, submitter);\n    const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n    const rootLocation = expandURL(meta?.content ?? \"/\");\n\n    return this.#shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation)\n  }\n\n  #shouldRedirect(element, submitter) {\n    const isNavigatable =\n      element instanceof HTMLFormElement\n        ? this.session.submissionIsNavigatable(element, submitter)\n        : this.session.elementIsNavigatable(element);\n\n    if (isNavigatable) {\n      const frame = this.#findFrameElement(element, submitter);\n      return frame ? frame != element.closest(\"turbo-frame\") : false\n    } else {\n      return false\n    }\n  }\n\n  #findFrameElement(element, submitter) {\n    const id = submitter?.getAttribute(\"data-turbo-frame\") || element.getAttribute(\"data-turbo-frame\");\n    if (id && id != \"_top\") {\n      const frame = this.element.querySelector(`#${id}:not([disabled])`);\n      if (frame instanceof FrameElement) {\n        return frame\n      }\n    }\n  }\n}\n\nclass History {\n  location\n  restorationIdentifier = uuid()\n  restorationData = {}\n  started = false\n  currentIndex = 0\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      addEventListener(\"popstate\", this.onPopState, false);\n      this.currentIndex = history.state?.turbo?.restorationIndex || 0;\n      this.started = true;\n      this.replace(new URL(window.location.href));\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      removeEventListener(\"popstate\", this.onPopState, false);\n      this.started = false;\n    }\n  }\n\n  push(location, restorationIdentifier) {\n    this.update(history.pushState, location, restorationIdentifier);\n  }\n\n  replace(location, restorationIdentifier) {\n    this.update(history.replaceState, location, restorationIdentifier);\n  }\n\n  update(method, location, restorationIdentifier = uuid()) {\n    if (method === history.pushState) ++this.currentIndex;\n\n    const state = { turbo: { restorationIdentifier, restorationIndex: this.currentIndex } };\n    method.call(history, state, \"\", location.href);\n    this.location = location;\n    this.restorationIdentifier = restorationIdentifier;\n  }\n\n  // Restoration data\n\n  getRestorationDataForIdentifier(restorationIdentifier) {\n    return this.restorationData[restorationIdentifier] || {}\n  }\n\n  updateRestorationData(additionalData) {\n    const { restorationIdentifier } = this;\n    const restorationData = this.restorationData[restorationIdentifier];\n    this.restorationData[restorationIdentifier] = {\n      ...restorationData,\n      ...additionalData\n    };\n  }\n\n  // Scroll restoration\n\n  assumeControlOfScrollRestoration() {\n    if (!this.previousScrollRestoration) {\n      this.previousScrollRestoration = history.scrollRestoration ?? \"auto\";\n      history.scrollRestoration = \"manual\";\n    }\n  }\n\n  relinquishControlOfScrollRestoration() {\n    if (this.previousScrollRestoration) {\n      history.scrollRestoration = this.previousScrollRestoration;\n      delete this.previousScrollRestoration;\n    }\n  }\n\n  // Event handlers\n\n  onPopState = (event) => {\n    const { turbo } = event.state || {};\n    this.location = new URL(window.location.href);\n\n    if (turbo) {\n      const { restorationIdentifier, restorationIndex } = turbo;\n      this.restorationIdentifier = restorationIdentifier;\n      const direction = restorationIndex > this.currentIndex ? \"forward\" : \"back\";\n      this.delegate.historyPoppedToLocationWithRestorationIdentifierAndDirection(this.location, restorationIdentifier, direction);\n      this.currentIndex = restorationIndex;\n    } else {\n      this.currentIndex++;\n      this.delegate.historyPoppedWithEmptyState(this.location);\n    }\n  }\n}\n\nclass LinkPrefetchObserver {\n  started = false\n  #prefetchedLink = null\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (this.started) return\n\n    if (this.eventTarget.readyState === \"loading\") {\n      this.eventTarget.addEventListener(\"DOMContentLoaded\", this.#enable, { once: true });\n    } else {\n      this.#enable();\n    }\n  }\n\n  stop() {\n    if (!this.started) return\n\n    this.eventTarget.removeEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n      capture: true,\n      passive: true\n    });\n    this.eventTarget.removeEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n      capture: true,\n      passive: true\n    });\n\n    this.eventTarget.removeEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n    this.started = false;\n  }\n\n  #enable = () => {\n    this.eventTarget.addEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n      capture: true,\n      passive: true\n    });\n    this.eventTarget.addEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n      capture: true,\n      passive: true\n    });\n\n    this.eventTarget.addEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n    this.started = true;\n  }\n\n  #tryToPrefetchRequest = (event) => {\n    if (getMetaContent(\"turbo-prefetch\") === \"false\") return\n\n    const target = event.target;\n    const isLink = target.matches && target.matches(\"a[href]:not([target^=_]):not([download])\");\n\n    if (isLink && this.#isPrefetchable(target)) {\n      const link = target;\n      const location = getLocationForLink(link);\n\n      if (this.delegate.canPrefetchRequestToLocation(link, location)) {\n        this.#prefetchedLink = link;\n\n        const fetchRequest = new FetchRequest(\n          this,\n          FetchMethod.get,\n          location,\n          new URLSearchParams(),\n          target\n        );\n\n        fetchRequest.fetchOptions.priority = \"low\";\n\n        prefetchCache.putLater(location, fetchRequest, this.#cacheTtl);\n      }\n    }\n  }\n\n  #cancelRequestIfObsolete = (event) => {\n    if (event.target === this.#prefetchedLink) this.#cancelPrefetchRequest();\n  }\n\n  #cancelPrefetchRequest = () => {\n    prefetchCache.clear();\n    this.#prefetchedLink = null;\n  }\n\n  #tryToUsePrefetchedRequest = (event) => {\n    if (event.target.tagName !== \"FORM\" && event.detail.fetchOptions.method === \"GET\") {\n      const cached = prefetchCache.get(event.detail.url);\n\n      if (cached) {\n        // User clicked link, use cache response\n        event.detail.fetchRequest = cached;\n      }\n\n      prefetchCache.clear();\n    }\n  }\n\n  prepareRequest(request) {\n    const link = request.target;\n\n    request.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n\n    const turboFrame = link.closest(\"turbo-frame\");\n    const turboFrameTarget = link.getAttribute(\"data-turbo-frame\") || turboFrame?.getAttribute(\"target\") || turboFrame?.id;\n\n    if (turboFrameTarget && turboFrameTarget !== \"_top\") {\n      request.headers[\"Turbo-Frame\"] = turboFrameTarget;\n    }\n  }\n\n  // Fetch request interface\n\n  requestSucceededWithResponse() {}\n\n  requestStarted(fetchRequest) {}\n\n  requestErrored(fetchRequest) {}\n\n  requestFinished(fetchRequest) {}\n\n  requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n  requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n  get #cacheTtl() {\n    return Number(getMetaContent(\"turbo-prefetch-cache-time\")) || cacheTtl\n  }\n\n  #isPrefetchable(link) {\n    const href = link.getAttribute(\"href\");\n\n    if (!href) return false\n\n    if (unfetchableLink(link)) return false\n    if (linkToTheSamePage(link)) return false\n    if (linkOptsOut(link)) return false\n    if (nonSafeLink(link)) return false\n    if (eventPrevented(link)) return false\n\n    return true\n  }\n}\n\nconst unfetchableLink = (link) => {\n  return link.origin !== document.location.origin || ![\"http:\", \"https:\"].includes(link.protocol) || link.hasAttribute(\"target\")\n};\n\nconst linkToTheSamePage = (link) => {\n  return (link.pathname + link.search === document.location.pathname + document.location.search) || link.href.startsWith(\"#\")\n};\n\nconst linkOptsOut = (link) => {\n  if (link.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n  if (link.getAttribute(\"data-turbo\") === \"false\") return true\n\n  const turboPrefetchParent = findClosestRecursively(link, \"[data-turbo-prefetch]\");\n  if (turboPrefetchParent && turboPrefetchParent.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n\n  return false\n};\n\nconst nonSafeLink = (link) => {\n  const turboMethod = link.getAttribute(\"data-turbo-method\");\n  if (turboMethod && turboMethod.toLowerCase() !== \"get\") return true\n\n  if (isUJS(link)) return true\n  if (link.hasAttribute(\"data-turbo-confirm\")) return true\n  if (link.hasAttribute(\"data-turbo-stream\")) return true\n\n  return false\n};\n\nconst isUJS = (link) => {\n  return link.hasAttribute(\"data-remote\") || link.hasAttribute(\"data-behavior\") || link.hasAttribute(\"data-confirm\") || link.hasAttribute(\"data-method\")\n};\n\nconst eventPrevented = (link) => {\n  const event = dispatch(\"turbo:before-prefetch\", { target: link, cancelable: true });\n  return event.defaultPrevented\n};\n\nclass Navigator {\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  proposeVisit(location, options = {}) {\n    if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n      this.delegate.visitProposedToLocation(location, options);\n    }\n  }\n\n  startVisit(locatable, restorationIdentifier, options = {}) {\n    this.stop();\n    this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, {\n      referrer: this.location,\n      ...options\n    });\n    this.currentVisit.start();\n  }\n\n  submitForm(form, submitter) {\n    this.stop();\n    this.formSubmission = new FormSubmission(this, form, submitter, true);\n\n    this.formSubmission.start();\n  }\n\n  stop() {\n    if (this.formSubmission) {\n      this.formSubmission.stop();\n      delete this.formSubmission;\n    }\n\n    if (this.currentVisit) {\n      this.currentVisit.cancel();\n      delete this.currentVisit;\n    }\n  }\n\n  get adapter() {\n    return this.delegate.adapter\n  }\n\n  get view() {\n    return this.delegate.view\n  }\n\n  get rootLocation() {\n    return this.view.snapshot.rootLocation\n  }\n\n  get history() {\n    return this.delegate.history\n  }\n\n  // Form submission delegate\n\n  formSubmissionStarted(formSubmission) {\n    // Not all adapters implement formSubmissionStarted\n    if (typeof this.adapter.formSubmissionStarted === \"function\") {\n      this.adapter.formSubmissionStarted(formSubmission);\n    }\n  }\n\n  async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n    if (formSubmission == this.formSubmission) {\n      const responseHTML = await fetchResponse.responseHTML;\n      if (responseHTML) {\n        const shouldCacheSnapshot = formSubmission.isSafe;\n        if (!shouldCacheSnapshot) {\n          this.view.clearSnapshotCache();\n        }\n\n        const { statusCode, redirected } = fetchResponse;\n        const action = this.#getActionForFormSubmission(formSubmission, fetchResponse);\n        const visitOptions = {\n          action,\n          shouldCacheSnapshot,\n          response: { statusCode, responseHTML, redirected }\n        };\n        this.proposeVisit(fetchResponse.location, visitOptions);\n      }\n    }\n  }\n\n  async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n    const responseHTML = await fetchResponse.responseHTML;\n\n    if (responseHTML) {\n      const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n      if (fetchResponse.serverError) {\n        await this.view.renderError(snapshot, this.currentVisit);\n      } else {\n        await this.view.renderPage(snapshot, false, true, this.currentVisit);\n      }\n      if (snapshot.refreshScroll !== \"preserve\") {\n        this.view.scrollToTop();\n      }\n      this.view.clearSnapshotCache();\n    }\n  }\n\n  formSubmissionErrored(formSubmission, error) {\n    console.error(error);\n  }\n\n  formSubmissionFinished(formSubmission) {\n    // Not all adapters implement formSubmissionFinished\n    if (typeof this.adapter.formSubmissionFinished === \"function\") {\n      this.adapter.formSubmissionFinished(formSubmission);\n    }\n  }\n\n  // Link prefetching\n\n  linkPrefetchingIsEnabledForLocation(location) {\n    // Not all adapters implement linkPrefetchingIsEnabledForLocation\n    if (typeof this.adapter.linkPrefetchingIsEnabledForLocation === \"function\") {\n      return this.adapter.linkPrefetchingIsEnabledForLocation(location)\n    }\n\n    return true\n  }\n\n  // Visit delegate\n\n  visitStarted(visit) {\n    this.delegate.visitStarted(visit);\n  }\n\n  visitCompleted(visit) {\n    this.delegate.visitCompleted(visit);\n    delete this.currentVisit;\n  }\n\n  // Same-page links are no longer handled with a Visit.\n  // This method is still needed for Turbo Native adapters.\n  locationWithActionIsSamePage(location, action) {\n    return false\n  }\n\n  // Visits\n\n  get location() {\n    return this.history.location\n  }\n\n  get restorationIdentifier() {\n    return this.history.restorationIdentifier\n  }\n\n  #getActionForFormSubmission(formSubmission, fetchResponse) {\n    const { submitter, formElement } = formSubmission;\n    return getVisitAction(submitter, formElement) || this.#getDefaultAction(fetchResponse)\n  }\n\n  #getDefaultAction(fetchResponse) {\n    const sameLocationRedirect = fetchResponse.redirected && fetchResponse.location.href === this.location?.href;\n    return sameLocationRedirect ? \"replace\" : \"advance\"\n  }\n}\n\nconst PageStage = {\n  initial: 0,\n  loading: 1,\n  interactive: 2,\n  complete: 3\n};\n\nclass PageObserver {\n  stage = PageStage.initial\n  started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      if (this.stage == PageStage.initial) {\n        this.stage = PageStage.loading;\n      }\n      document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n      addEventListener(\"pagehide\", this.pageWillUnload, false);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n      removeEventListener(\"pagehide\", this.pageWillUnload, false);\n      this.started = false;\n    }\n  }\n\n  interpretReadyState = () => {\n    const { readyState } = this;\n    if (readyState == \"interactive\") {\n      this.pageIsInteractive();\n    } else if (readyState == \"complete\") {\n      this.pageIsComplete();\n    }\n  }\n\n  pageIsInteractive() {\n    if (this.stage == PageStage.loading) {\n      this.stage = PageStage.interactive;\n      this.delegate.pageBecameInteractive();\n    }\n  }\n\n  pageIsComplete() {\n    this.pageIsInteractive();\n    if (this.stage == PageStage.interactive) {\n      this.stage = PageStage.complete;\n      this.delegate.pageLoaded();\n    }\n  }\n\n  pageWillUnload = () => {\n    this.delegate.pageWillUnload();\n  }\n\n  get readyState() {\n    return document.readyState\n  }\n}\n\nclass ScrollObserver {\n  started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      addEventListener(\"scroll\", this.onScroll, false);\n      this.onScroll();\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      removeEventListener(\"scroll\", this.onScroll, false);\n      this.started = false;\n    }\n  }\n\n  onScroll = () => {\n    this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n  }\n\n  // Private\n\n  updatePosition(position) {\n    this.delegate.scrollPositionChanged(position);\n  }\n}\n\nclass StreamMessageRenderer {\n  render({ fragment }) {\n    Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => {\n      withAutofocusFromFragment(fragment, () => {\n        withPreservedFocus(() => {\n          document.documentElement.appendChild(fragment);\n        });\n      });\n    });\n  }\n\n  // Bardo delegate\n\n  enteringBardo(currentPermanentElement, newPermanentElement) {\n    newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n  }\n\n  leavingBardo() {}\n}\n\nfunction getPermanentElementMapForFragment(fragment) {\n  const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n  const permanentElementMap = {};\n  for (const permanentElementInDocument of permanentElementsInDocument) {\n    const { id } = permanentElementInDocument;\n\n    for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n      const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n\n      if (elementInStream) {\n        permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n      }\n    }\n  }\n\n  return permanentElementMap\n}\n\nasync function withAutofocusFromFragment(fragment, callback) {\n  const generatedID = `turbo-stream-autofocus-${uuid()}`;\n  const turboStreams = fragment.querySelectorAll(\"turbo-stream\");\n  const elementWithAutofocus = firstAutofocusableElementInStreams(turboStreams);\n  let willAutofocusId = null;\n\n  if (elementWithAutofocus) {\n    if (elementWithAutofocus.id) {\n      willAutofocusId = elementWithAutofocus.id;\n    } else {\n      willAutofocusId = generatedID;\n    }\n\n    elementWithAutofocus.id = willAutofocusId;\n  }\n\n  callback();\n  await nextRepaint();\n\n  const hasNoActiveElement = document.activeElement == null || document.activeElement == document.body;\n\n  if (hasNoActiveElement && willAutofocusId) {\n    const elementToAutofocus = document.getElementById(willAutofocusId);\n\n    if (elementIsFocusable(elementToAutofocus)) {\n      elementToAutofocus.focus();\n    }\n    if (elementToAutofocus && elementToAutofocus.id == generatedID) {\n      elementToAutofocus.removeAttribute(\"id\");\n    }\n  }\n}\n\nasync function withPreservedFocus(callback) {\n  const [activeElementBeforeRender, activeElementAfterRender] = await around(callback, () => document.activeElement);\n\n  const restoreFocusTo = activeElementBeforeRender && activeElementBeforeRender.id;\n\n  if (restoreFocusTo) {\n    const elementToFocus = document.getElementById(restoreFocusTo);\n\n    if (elementIsFocusable(elementToFocus) && elementToFocus != activeElementAfterRender) {\n      elementToFocus.focus();\n    }\n  }\n}\n\nfunction firstAutofocusableElementInStreams(nodeListOfStreamElements) {\n  for (const streamElement of nodeListOfStreamElements) {\n    const elementWithAutofocus = queryAutofocusableElement(streamElement.templateElement.content);\n\n    if (elementWithAutofocus) return elementWithAutofocus\n  }\n\n  return null\n}\n\nclass StreamObserver {\n  sources = new Set()\n  #started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.#started) {\n      this.#started = true;\n      addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n    }\n  }\n\n  stop() {\n    if (this.#started) {\n      this.#started = false;\n      removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n    }\n  }\n\n  connectStreamSource(source) {\n    if (!this.streamSourceIsConnected(source)) {\n      this.sources.add(source);\n      source.addEventListener(\"message\", this.receiveMessageEvent, false);\n    }\n  }\n\n  disconnectStreamSource(source) {\n    if (this.streamSourceIsConnected(source)) {\n      this.sources.delete(source);\n      source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n    }\n  }\n\n  streamSourceIsConnected(source) {\n    return this.sources.has(source)\n  }\n\n  inspectFetchResponse = (event) => {\n    const response = fetchResponseFromEvent(event);\n    if (response && fetchResponseIsStream(response)) {\n      event.preventDefault();\n      this.receiveMessageResponse(response);\n    }\n  }\n\n  receiveMessageEvent = (event) => {\n    if (this.#started && typeof event.data == \"string\") {\n      this.receiveMessageHTML(event.data);\n    }\n  }\n\n  async receiveMessageResponse(response) {\n    const html = await response.responseHTML;\n    if (html) {\n      this.receiveMessageHTML(html);\n    }\n  }\n\n  receiveMessageHTML(html) {\n    this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n  }\n}\n\nfunction fetchResponseFromEvent(event) {\n  const fetchResponse = event.detail?.fetchResponse;\n  if (fetchResponse instanceof FetchResponse) {\n    return fetchResponse\n  }\n}\n\nfunction fetchResponseIsStream(response) {\n  const contentType = response.contentType ?? \"\";\n  return contentType.startsWith(StreamMessage.contentType)\n}\n\nclass ErrorRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    const { documentElement, body } = document;\n\n    documentElement.replaceChild(newElement, body);\n  }\n\n  async render() {\n    this.replaceHeadAndBody();\n    this.activateScriptElements();\n  }\n\n  replaceHeadAndBody() {\n    const { documentElement, head } = document;\n    documentElement.replaceChild(this.newHead, head);\n    this.renderElement(this.currentElement, this.newElement);\n  }\n\n  activateScriptElements() {\n    for (const replaceableElement of this.scriptElements) {\n      const parentNode = replaceableElement.parentNode;\n      if (parentNode) {\n        const element = activateScriptElement(replaceableElement);\n        parentNode.replaceChild(element, replaceableElement);\n      }\n    }\n  }\n\n  get newHead() {\n    return this.newSnapshot.headSnapshot.element\n  }\n\n  get scriptElements() {\n    return document.documentElement.querySelectorAll(\"script\")\n  }\n}\n\nclass PageRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    if (document.body && newElement instanceof HTMLBodyElement) {\n      document.body.replaceWith(newElement);\n    } else {\n      document.documentElement.appendChild(newElement);\n    }\n  }\n\n  get shouldRender() {\n    return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical\n  }\n\n  get reloadReason() {\n    if (!this.newSnapshot.isVisitable) {\n      return {\n        reason: \"turbo_visit_control_is_reload\"\n      }\n    }\n\n    if (!this.trackedElementsAreIdentical) {\n      return {\n        reason: \"tracked_element_mismatch\"\n      }\n    }\n  }\n\n  async prepareToRender() {\n    this.#setLanguage();\n    await this.mergeHead();\n  }\n\n  async render() {\n    if (this.willRender) {\n      await this.replaceBody();\n    }\n  }\n\n  finishRendering() {\n    super.finishRendering();\n    if (!this.isPreview) {\n      this.focusFirstAutofocusableElement();\n    }\n  }\n\n  get currentHeadSnapshot() {\n    return this.currentSnapshot.headSnapshot\n  }\n\n  get newHeadSnapshot() {\n    return this.newSnapshot.headSnapshot\n  }\n\n  get newElement() {\n    return this.newSnapshot.element\n  }\n\n  #setLanguage() {\n    const { documentElement } = this.currentSnapshot;\n    const { dir, lang } = this.newSnapshot;\n\n    if (lang) {\n      documentElement.setAttribute(\"lang\", lang);\n    } else {\n      documentElement.removeAttribute(\"lang\");\n    }\n    if (dir) {\n      documentElement.setAttribute(\"dir\", dir);\n    } else {\n      documentElement.removeAttribute(\"dir\");\n    }\n  }\n\n  async mergeHead() {\n    const mergedHeadElements = this.mergeProvisionalElements();\n    const newStylesheetElements = this.copyNewHeadStylesheetElements();\n    this.copyNewHeadScriptElements();\n\n    await mergedHeadElements;\n    await newStylesheetElements;\n\n    if (this.willRender) {\n      this.removeUnusedDynamicStylesheetElements();\n    }\n  }\n\n  async replaceBody() {\n    await this.preservingPermanentElements(async () => {\n      this.activateNewBody();\n      await this.assignNewBody();\n    });\n  }\n\n  get trackedElementsAreIdentical() {\n    return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature\n  }\n\n  async copyNewHeadStylesheetElements() {\n    const loadingElements = [];\n\n    for (const element of this.newHeadStylesheetElements) {\n      loadingElements.push(waitForLoad(element));\n\n      document.head.appendChild(element);\n    }\n\n    await Promise.all(loadingElements);\n  }\n\n  copyNewHeadScriptElements() {\n    for (const element of this.newHeadScriptElements) {\n      document.head.appendChild(activateScriptElement(element));\n    }\n  }\n\n  removeUnusedDynamicStylesheetElements() {\n    for (const element of this.unusedDynamicStylesheetElements) {\n      document.head.removeChild(element);\n    }\n  }\n\n  async mergeProvisionalElements() {\n    const newHeadElements = [...this.newHeadProvisionalElements];\n\n    for (const element of this.currentHeadProvisionalElements) {\n      if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n        document.head.removeChild(element);\n      }\n    }\n\n    for (const element of newHeadElements) {\n      document.head.appendChild(element);\n    }\n  }\n\n  isCurrentElementInElementList(element, elementList) {\n    for (const [index, newElement] of elementList.entries()) {\n      // if title element...\n      if (element.tagName == \"TITLE\") {\n        if (newElement.tagName != \"TITLE\") {\n          continue\n        }\n        if (element.innerHTML == newElement.innerHTML) {\n          elementList.splice(index, 1);\n          return true\n        }\n      }\n\n      // if any other element...\n      if (newElement.isEqualNode(element)) {\n        elementList.splice(index, 1);\n        return true\n      }\n    }\n\n    return false\n  }\n\n  removeCurrentHeadProvisionalElements() {\n    for (const element of this.currentHeadProvisionalElements) {\n      document.head.removeChild(element);\n    }\n  }\n\n  copyNewHeadProvisionalElements() {\n    for (const element of this.newHeadProvisionalElements) {\n      document.head.appendChild(element);\n    }\n  }\n\n  activateNewBody() {\n    document.adoptNode(this.newElement);\n    this.removeNoscriptElements();\n    this.activateNewBodyScriptElements();\n  }\n\n  removeNoscriptElements() {\n    for (const noscriptElement of this.newElement.querySelectorAll(\"noscript\")) {\n      noscriptElement.remove();\n    }\n  }\n\n  activateNewBodyScriptElements() {\n    for (const inertScriptElement of this.newBodyScriptElements) {\n      const activatedScriptElement = activateScriptElement(inertScriptElement);\n      inertScriptElement.replaceWith(activatedScriptElement);\n    }\n  }\n\n  async assignNewBody() {\n    await this.renderElement(this.currentElement, this.newElement);\n  }\n\n  get unusedDynamicStylesheetElements() {\n    return this.oldHeadStylesheetElements.filter((element) => {\n      return element.getAttribute(\"data-turbo-track\") === \"dynamic\"\n    })\n  }\n\n  get oldHeadStylesheetElements() {\n    return this.currentHeadSnapshot.getStylesheetElementsNotInSnapshot(this.newHeadSnapshot)\n  }\n\n  get newHeadStylesheetElements() {\n    return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot)\n  }\n\n  get newHeadScriptElements() {\n    return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot)\n  }\n\n  get currentHeadProvisionalElements() {\n    return this.currentHeadSnapshot.provisionalElements\n  }\n\n  get newHeadProvisionalElements() {\n    return this.newHeadSnapshot.provisionalElements\n  }\n\n  get newBodyScriptElements() {\n    return this.newElement.querySelectorAll(\"script\")\n  }\n}\n\nclass MorphingPageRenderer extends PageRenderer {\n  static renderElement(currentElement, newElement) {\n    morphElements(currentElement, newElement, {\n      callbacks: {\n        beforeNodeMorphed: (node, newNode) => {\n          if (\n            shouldRefreshFrameWithMorphing(node, newNode) &&\n              !closestFrameReloadableWithMorphing(node)\n          ) {\n            node.reload();\n            return false\n          }\n          return true\n        }\n      }\n    });\n\n    dispatch(\"turbo:morph\", { detail: { currentElement, newElement } });\n  }\n\n  async preservingPermanentElements(callback) {\n    return await callback()\n  }\n\n  get renderMethod() {\n    return \"morph\"\n  }\n\n  get shouldAutofocus() {\n    return false\n  }\n}\n\nclass SnapshotCache extends LRUCache {\n  constructor(size) {\n    super(size, toCacheKey);\n  }\n\n  get snapshots() {\n    return this.entries\n  }\n}\n\nclass PageView extends View {\n  snapshotCache = new SnapshotCache(10)\n  lastRenderedLocation = new URL(location.href)\n  forceReloaded = false\n\n  shouldTransitionTo(newSnapshot) {\n    return this.snapshot.prefersViewTransitions && newSnapshot.prefersViewTransitions\n  }\n\n  renderPage(snapshot, isPreview = false, willRender = true, visit) {\n    const shouldMorphPage = this.isPageRefresh(visit) && (visit?.refresh?.method || this.snapshot.refreshMethod) === \"morph\";\n    const rendererClass = shouldMorphPage ? MorphingPageRenderer : PageRenderer;\n\n    const renderer = new rendererClass(this.snapshot, snapshot, isPreview, willRender);\n\n    if (!renderer.shouldRender) {\n      this.forceReloaded = true;\n    } else {\n      visit?.changeHistory();\n    }\n\n    return this.render(renderer)\n  }\n\n  renderError(snapshot, visit) {\n    visit?.changeHistory();\n    const renderer = new ErrorRenderer(this.snapshot, snapshot, false);\n    return this.render(renderer)\n  }\n\n  clearSnapshotCache() {\n    this.snapshotCache.clear();\n  }\n\n  async cacheSnapshot(snapshot = this.snapshot) {\n    if (snapshot.isCacheable) {\n      this.delegate.viewWillCacheSnapshot();\n      const { lastRenderedLocation: location } = this;\n      await nextEventLoopTick();\n      const cachedSnapshot = snapshot.clone();\n      this.snapshotCache.put(location, cachedSnapshot);\n      return cachedSnapshot\n    }\n  }\n\n  getCachedSnapshotForLocation(location) {\n    return this.snapshotCache.get(location)\n  }\n\n  isPageRefresh(visit) {\n    return !visit || (this.lastRenderedLocation.pathname === visit.location.pathname && visit.action === \"replace\")\n  }\n\n  shouldPreserveScrollPosition(visit) {\n    return this.isPageRefresh(visit) && (visit?.refresh?.scroll || this.snapshot.refreshScroll) === \"preserve\"\n  }\n\n  get snapshot() {\n    return PageSnapshot.fromElement(this.element)\n  }\n}\n\nclass Preloader {\n  selector = \"a[data-turbo-preload]\"\n\n  constructor(delegate, snapshotCache) {\n    this.delegate = delegate;\n    this.snapshotCache = snapshotCache;\n  }\n\n  start() {\n    if (document.readyState === \"loading\") {\n      document.addEventListener(\"DOMContentLoaded\", this.#preloadAll);\n    } else {\n      this.preloadOnLoadLinksForView(document.body);\n    }\n  }\n\n  stop() {\n    document.removeEventListener(\"DOMContentLoaded\", this.#preloadAll);\n  }\n\n  preloadOnLoadLinksForView(element) {\n    for (const link of element.querySelectorAll(this.selector)) {\n      if (this.delegate.shouldPreloadLink(link)) {\n        this.preloadURL(link);\n      }\n    }\n  }\n\n  async preloadURL(link) {\n    const location = new URL(link.href);\n\n    if (this.snapshotCache.has(location)) {\n      return\n    }\n\n    const fetchRequest = new FetchRequest(this, FetchMethod.get, location, new URLSearchParams(), link);\n    await fetchRequest.perform();\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(fetchRequest) {\n    fetchRequest.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n  }\n\n  async requestSucceededWithResponse(fetchRequest, fetchResponse) {\n    try {\n      const responseHTML = await fetchResponse.responseHTML;\n      const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n\n      this.snapshotCache.put(fetchRequest.url, snapshot);\n    } catch (_) {\n      // If we cannot preload that is ok!\n    }\n  }\n\n  requestStarted(fetchRequest) {}\n\n  requestErrored(fetchRequest) {}\n\n  requestFinished(fetchRequest) {}\n\n  requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n  requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n  #preloadAll = () => {\n    this.preloadOnLoadLinksForView(document.body);\n  }\n}\n\nclass Cache {\n  constructor(session) {\n    this.session = session;\n  }\n\n  clear() {\n    this.session.clearCache();\n  }\n\n  resetCacheControl() {\n    this.#setCacheControl(\"\");\n  }\n\n  exemptPageFromCache() {\n    this.#setCacheControl(\"no-cache\");\n  }\n\n  exemptPageFromPreview() {\n    this.#setCacheControl(\"no-preview\");\n  }\n\n  #setCacheControl(value) {\n    setMetaContent(\"turbo-cache-control\", value);\n  }\n}\n\nclass Session {\n  navigator = new Navigator(this)\n  history = new History(this)\n  view = new PageView(this, document.documentElement)\n  adapter = new BrowserAdapter(this)\n\n  pageObserver = new PageObserver(this)\n  cacheObserver = new CacheObserver()\n  linkPrefetchObserver = new LinkPrefetchObserver(this, document)\n  linkClickObserver = new LinkClickObserver(this, window)\n  formSubmitObserver = new FormSubmitObserver(this, document)\n  scrollObserver = new ScrollObserver(this)\n  streamObserver = new StreamObserver(this)\n  formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement)\n  frameRedirector = new FrameRedirector(this, document.documentElement)\n  streamMessageRenderer = new StreamMessageRenderer()\n  cache = new Cache(this)\n\n  enabled = true\n  started = false\n  #pageRefreshDebouncePeriod = 150\n\n  constructor(recentRequests) {\n    this.recentRequests = recentRequests;\n    this.preloader = new Preloader(this, this.view.snapshotCache);\n    this.debouncedRefresh = this.refresh;\n    this.pageRefreshDebouncePeriod = this.pageRefreshDebouncePeriod;\n  }\n\n  start() {\n    if (!this.started) {\n      this.pageObserver.start();\n      this.cacheObserver.start();\n      this.linkPrefetchObserver.start();\n      this.formLinkClickObserver.start();\n      this.linkClickObserver.start();\n      this.formSubmitObserver.start();\n      this.scrollObserver.start();\n      this.streamObserver.start();\n      this.frameRedirector.start();\n      this.history.start();\n      this.preloader.start();\n      this.started = true;\n      this.enabled = true;\n    }\n  }\n\n  disable() {\n    this.enabled = false;\n  }\n\n  stop() {\n    if (this.started) {\n      this.pageObserver.stop();\n      this.cacheObserver.stop();\n      this.linkPrefetchObserver.stop();\n      this.formLinkClickObserver.stop();\n      this.linkClickObserver.stop();\n      this.formSubmitObserver.stop();\n      this.scrollObserver.stop();\n      this.streamObserver.stop();\n      this.frameRedirector.stop();\n      this.history.stop();\n      this.preloader.stop();\n      this.started = false;\n    }\n  }\n\n  registerAdapter(adapter) {\n    this.adapter = adapter;\n  }\n\n  visit(location, options = {}) {\n    const frameElement = options.frame ? document.getElementById(options.frame) : null;\n\n    if (frameElement instanceof FrameElement) {\n      const action = options.action || getVisitAction(frameElement);\n\n      frameElement.delegate.proposeVisitIfNavigatedWithAction(frameElement, action);\n      frameElement.src = location.toString();\n    } else {\n      this.navigator.proposeVisit(expandURL(location), options);\n    }\n  }\n\n  refresh(url, options = {}) {\n    options = typeof options === \"string\" ? { requestId: options } : options;\n\n    const { method, requestId, scroll } = options;\n    const isRecentRequest = requestId && this.recentRequests.has(requestId);\n    const isCurrentUrl = url === document.baseURI;\n    if (!isRecentRequest && !this.navigator.currentVisit && isCurrentUrl) {\n      this.visit(url, { action: \"replace\", shouldCacheSnapshot: false, refresh: { method, scroll } });\n    }\n  }\n\n  connectStreamSource(source) {\n    this.streamObserver.connectStreamSource(source);\n  }\n\n  disconnectStreamSource(source) {\n    this.streamObserver.disconnectStreamSource(source);\n  }\n\n  renderStreamMessage(message) {\n    this.streamMessageRenderer.render(StreamMessage.wrap(message));\n  }\n\n  clearCache() {\n    this.view.clearSnapshotCache();\n  }\n\n  setProgressBarDelay(delay) {\n    console.warn(\n      \"Please replace `session.setProgressBarDelay(delay)` with `session.progressBarDelay = delay`. The function is deprecated and will be removed in a future version of Turbo.`\"\n    );\n\n    this.progressBarDelay = delay;\n  }\n\n  set progressBarDelay(delay) {\n    config.drive.progressBarDelay = delay;\n  }\n\n  get progressBarDelay() {\n    return config.drive.progressBarDelay\n  }\n\n  set drive(value) {\n    config.drive.enabled = value;\n  }\n\n  get drive() {\n    return config.drive.enabled\n  }\n\n  set formMode(value) {\n    config.forms.mode = value;\n  }\n\n  get formMode() {\n    return config.forms.mode\n  }\n\n  get location() {\n    return this.history.location\n  }\n\n  get restorationIdentifier() {\n    return this.history.restorationIdentifier\n  }\n\n  get pageRefreshDebouncePeriod() {\n    return this.#pageRefreshDebouncePeriod\n  }\n\n  set pageRefreshDebouncePeriod(value) {\n    this.refresh = debounce(this.debouncedRefresh.bind(this), value);\n    this.#pageRefreshDebouncePeriod = value;\n  }\n\n  // Preloader delegate\n\n  shouldPreloadLink(element) {\n    const isUnsafe = element.hasAttribute(\"data-turbo-method\");\n    const isStream = element.hasAttribute(\"data-turbo-stream\");\n    const frameTarget = element.getAttribute(\"data-turbo-frame\");\n    const frame = frameTarget == \"_top\" ?\n      null :\n      document.getElementById(frameTarget) || findClosestRecursively(element, \"turbo-frame:not([disabled])\");\n\n    if (isUnsafe || isStream || frame instanceof FrameElement) {\n      return false\n    } else {\n      const location = new URL(element.href);\n\n      return this.elementIsNavigatable(element) && locationIsVisitable(location, this.snapshot.rootLocation)\n    }\n  }\n\n  // History delegate\n\n  historyPoppedToLocationWithRestorationIdentifierAndDirection(location, restorationIdentifier, direction) {\n    if (this.enabled) {\n      this.navigator.startVisit(location, restorationIdentifier, {\n        action: \"restore\",\n        historyChanged: true,\n        direction\n      });\n    } else {\n      this.adapter.pageInvalidated({\n        reason: \"turbo_disabled\"\n      });\n    }\n  }\n\n  historyPoppedWithEmptyState(location) {\n    this.history.replace(location);\n    this.view.lastRenderedLocation = location;\n    this.view.cacheSnapshot();\n  }\n\n  // Scroll observer delegate\n\n  scrollPositionChanged(position) {\n    this.history.updateRestorationData({ scrollPosition: position });\n  }\n\n  // Form click observer delegate\n\n  willSubmitFormLinkToLocation(link, location) {\n    return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation)\n  }\n\n  submittedFormLinkToLocation() {}\n\n  // Link hover observer delegate\n\n  canPrefetchRequestToLocation(link, location) {\n    return (\n      this.elementIsNavigatable(link) &&\n      locationIsVisitable(location, this.snapshot.rootLocation) &&\n      this.navigator.linkPrefetchingIsEnabledForLocation(location)\n    )\n  }\n\n  // Link click observer delegate\n\n  willFollowLinkToLocation(link, location, event) {\n    return (\n      this.elementIsNavigatable(link) &&\n      locationIsVisitable(location, this.snapshot.rootLocation) &&\n      this.applicationAllowsFollowingLinkToLocation(link, location, event)\n    )\n  }\n\n  followedLinkToLocation(link, location) {\n    const action = this.getActionForLink(link);\n    const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n\n    this.visit(location.href, { action, acceptsStreamResponse });\n  }\n\n  // Navigator delegate\n\n  allowsVisitingLocationWithAction(location, action) {\n    return this.applicationAllowsVisitingLocation(location)\n  }\n\n  visitProposedToLocation(location, options) {\n    extendURLWithDeprecatedProperties(location);\n    this.adapter.visitProposedToLocation(location, options);\n  }\n\n  // Visit delegate\n\n  visitStarted(visit) {\n    if (!visit.acceptsStreamResponse) {\n      markAsBusy(document.documentElement);\n      this.view.markVisitDirection(visit.direction);\n    }\n    extendURLWithDeprecatedProperties(visit.location);\n    this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n  }\n\n  visitCompleted(visit) {\n    this.view.unmarkVisitDirection();\n    clearBusyState(document.documentElement);\n    this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(form, submitter) {\n    const action = getAction$1(form, submitter);\n\n    return (\n      this.submissionIsNavigatable(form, submitter) &&\n      locationIsVisitable(expandURL(action), this.snapshot.rootLocation)\n    )\n  }\n\n  formSubmitted(form, submitter) {\n    this.navigator.submitForm(form, submitter);\n  }\n\n  // Page observer delegate\n\n  pageBecameInteractive() {\n    this.view.lastRenderedLocation = this.location;\n    this.notifyApplicationAfterPageLoad();\n  }\n\n  pageLoaded() {\n    this.history.assumeControlOfScrollRestoration();\n  }\n\n  pageWillUnload() {\n    this.history.relinquishControlOfScrollRestoration();\n  }\n\n  // Stream observer delegate\n\n  receivedMessageFromStream(message) {\n    this.renderStreamMessage(message);\n  }\n\n  // Page view delegate\n\n  viewWillCacheSnapshot() {\n    this.notifyApplicationBeforeCachingSnapshot();\n  }\n\n  allowsImmediateRender({ element }, options) {\n    const event = this.notifyApplicationBeforeRender(element, options);\n    const {\n      defaultPrevented,\n      detail: { render }\n    } = event;\n\n    if (this.view.renderer && render) {\n      this.view.renderer.renderElement = render;\n    }\n\n    return !defaultPrevented\n  }\n\n  viewRenderedSnapshot(_snapshot, _isPreview, renderMethod) {\n    this.view.lastRenderedLocation = this.history.location;\n    this.notifyApplicationAfterRender(renderMethod);\n  }\n\n  preloadOnLoadLinksForView(element) {\n    this.preloader.preloadOnLoadLinksForView(element);\n  }\n\n  viewInvalidated(reason) {\n    this.adapter.pageInvalidated(reason);\n  }\n\n  // Frame element\n\n  frameLoaded(frame) {\n    this.notifyApplicationAfterFrameLoad(frame);\n  }\n\n  frameRendered(fetchResponse, frame) {\n    this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n  }\n\n  // Application events\n\n  applicationAllowsFollowingLinkToLocation(link, location, ev) {\n    const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n    return !event.defaultPrevented\n  }\n\n  applicationAllowsVisitingLocation(location) {\n    const event = this.notifyApplicationBeforeVisitingLocation(location);\n    return !event.defaultPrevented\n  }\n\n  notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n    return dispatch(\"turbo:click\", {\n      target: link,\n      detail: { url: location.href, originalEvent: event },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationBeforeVisitingLocation(location) {\n    return dispatch(\"turbo:before-visit\", {\n      detail: { url: location.href },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationAfterVisitingLocation(location, action) {\n    return dispatch(\"turbo:visit\", { detail: { url: location.href, action } })\n  }\n\n  notifyApplicationBeforeCachingSnapshot() {\n    return dispatch(\"turbo:before-cache\")\n  }\n\n  notifyApplicationBeforeRender(newBody, options) {\n    return dispatch(\"turbo:before-render\", {\n      detail: { newBody, ...options },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationAfterRender(renderMethod) {\n    return dispatch(\"turbo:render\", { detail: { renderMethod } })\n  }\n\n  notifyApplicationAfterPageLoad(timing = {}) {\n    return dispatch(\"turbo:load\", {\n      detail: { url: this.location.href, timing }\n    })\n  }\n\n  notifyApplicationAfterFrameLoad(frame) {\n    return dispatch(\"turbo:frame-load\", { target: frame })\n  }\n\n  notifyApplicationAfterFrameRender(fetchResponse, frame) {\n    return dispatch(\"turbo:frame-render\", {\n      detail: { fetchResponse },\n      target: frame,\n      cancelable: true\n    })\n  }\n\n  // Helpers\n\n  submissionIsNavigatable(form, submitter) {\n    if (config.forms.mode == \"off\") {\n      return false\n    } else {\n      const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n\n      if (config.forms.mode == \"optin\") {\n        return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null\n      } else {\n        return submitterIsNavigatable && this.elementIsNavigatable(form)\n      }\n    }\n  }\n\n  elementIsNavigatable(element) {\n    const container = findClosestRecursively(element, \"[data-turbo]\");\n    const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n\n    // Check if Drive is enabled on the session or we're within a Frame.\n    if (config.drive.enabled || withinFrame) {\n      // Element is navigatable by default, unless `data-turbo=\"false\"`.\n      if (container) {\n        return container.getAttribute(\"data-turbo\") != \"false\"\n      } else {\n        return true\n      }\n    } else {\n      // Element isn't navigatable by default, unless `data-turbo=\"true\"`.\n      if (container) {\n        return container.getAttribute(\"data-turbo\") == \"true\"\n      } else {\n        return false\n      }\n    }\n  }\n\n  // Private\n\n  getActionForLink(link) {\n    return getVisitAction(link) || \"advance\"\n  }\n\n  get snapshot() {\n    return this.view.snapshot\n  }\n}\n\n// Older versions of the Turbo Native adapters referenced the\n// `Location#absoluteURL` property in their implementations of\n// the `Adapter#visitProposedToLocation()` and `#visitStarted()`\n// methods. The Location class has since been removed in favor\n// of the DOM URL API, and accordingly all Adapter methods now\n// receive URL objects.\n//\n// We alias #absoluteURL to #toString() here to avoid crashing\n// older adapters which do not expect URL objects. We should\n// consider removing this support at some point in the future.\n\nfunction extendURLWithDeprecatedProperties(url) {\n  Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\n\nconst deprecatedLocationPropertyDescriptors = {\n  absoluteURL: {\n    get() {\n      return this.toString()\n    }\n  }\n};\n\nconst session = new Session(recentRequests);\n\n// Rename `navigator` to avoid shadowing `window.navigator`\nconst { cache, navigator: sessionNavigator } = session;\n\n/**\n * Starts the main session.\n * This initialises any necessary observers such as those to monitor\n * link interactions.\n */\nfunction start() {\n  session.start();\n}\n\n/**\n * Registers an adapter for the main session.\n *\n * @param adapter Adapter to register\n */\nfunction registerAdapter(adapter) {\n  session.registerAdapter(adapter);\n}\n\n/**\n * Performs an application visit to the given location.\n *\n * @param location Location to visit (a URL or path)\n * @param options Options to apply\n * @param options.action Type of history navigation to apply (\"restore\",\n * \"replace\" or \"advance\")\n * @param options.historyChanged Specifies whether the browser history has\n * already been changed for this visit or not\n * @param options.referrer Specifies the referrer of this visit such that\n * navigations to the same page will not result in a new history entry.\n * @param options.snapshotHTML Cached snapshot to render\n * @param options.response Response of the specified location\n */\nfunction visit(location, options) {\n  session.visit(location, options);\n}\n\n/**\n * Connects a stream source to the main session.\n *\n * @param source Stream source to connect\n */\nfunction connectStreamSource(source) {\n  session.connectStreamSource(source);\n}\n\n/**\n * Disconnects a stream source from the main session.\n *\n * @param source Stream source to disconnect\n */\nfunction disconnectStreamSource(source) {\n  session.disconnectStreamSource(source);\n}\n\n/**\n * Renders a stream message to the main session by appending it to the\n * current document.\n *\n * @param message Message to render\n */\nfunction renderStreamMessage(message) {\n  session.renderStreamMessage(message);\n}\n\n/**\n * Sets the delay after which the progress bar will appear during navigation.\n *\n * The progress bar appears after 500ms by default.\n *\n * Note that this method has no effect when used with the iOS or Android\n * adapters.\n *\n * @param delay Time to delay in milliseconds\n */\nfunction setProgressBarDelay(delay) {\n  console.warn(\n    \"Please replace `Turbo.setProgressBarDelay(delay)` with `Turbo.config.drive.progressBarDelay = delay`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  config.drive.progressBarDelay = delay;\n}\n\nfunction setConfirmMethod(confirmMethod) {\n  console.warn(\n    \"Please replace `Turbo.setConfirmMethod(confirmMethod)` with `Turbo.config.forms.confirm = confirmMethod`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  config.forms.confirm = confirmMethod;\n}\n\nfunction setFormMode(mode) {\n  console.warn(\n    \"Please replace `Turbo.setFormMode(mode)` with `Turbo.config.forms.mode = mode`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  config.forms.mode = mode;\n}\n\n/**\n * Morph the state of the currentBody based on the attributes and contents of\n * the newBody. Morphing body elements may dispatch turbo:morph,\n * turbo:before-morph-element, turbo:before-morph-attribute, and\n * turbo:morph-element events.\n *\n * @param currentBody HTMLBodyElement destination of morphing changes\n * @param newBody HTMLBodyElement source of morphing changes\n */\nfunction morphBodyElements(currentBody, newBody) {\n  MorphingPageRenderer.renderElement(currentBody, newBody);\n}\n\n/**\n * Morph the child elements of the currentFrame based on the child elements of\n * the newFrame. Morphing turbo-frame elements may dispatch turbo:before-frame-morph,\n * turbo:before-morph-element, turbo:before-morph-attribute, and\n * turbo:morph-element events.\n *\n * @param currentFrame FrameElement destination of morphing children changes\n * @param newFrame FrameElement source of morphing children changes\n */\nfunction morphTurboFrameElements(currentFrame, newFrame) {\n  MorphingFrameRenderer.renderElement(currentFrame, newFrame);\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  PageRenderer: PageRenderer,\n  PageSnapshot: PageSnapshot,\n  FrameRenderer: FrameRenderer,\n  fetch: fetchWithTurboHeaders,\n  config: config,\n  session: session,\n  cache: cache,\n  navigator: sessionNavigator,\n  start: start,\n  registerAdapter: registerAdapter,\n  visit: visit,\n  connectStreamSource: connectStreamSource,\n  disconnectStreamSource: disconnectStreamSource,\n  renderStreamMessage: renderStreamMessage,\n  setProgressBarDelay: setProgressBarDelay,\n  setConfirmMethod: setConfirmMethod,\n  setFormMode: setFormMode,\n  morphBodyElements: morphBodyElements,\n  morphTurboFrameElements: morphTurboFrameElements,\n  morphChildren: morphChildren,\n  morphElements: morphElements\n});\n\nclass TurboFrameMissingError extends Error {}\n\nclass FrameController {\n  fetchResponseLoaded = (_fetchResponse) => Promise.resolve()\n  #currentFetchRequest = null\n  #resolveVisitPromise = () => {}\n  #connected = false\n  #hasBeenLoaded = false\n  #ignoredAttributes = new Set()\n  #shouldMorphFrame = false\n  action = null\n\n  constructor(element) {\n    this.element = element;\n    this.view = new FrameView(this, this.element);\n    this.appearanceObserver = new AppearanceObserver(this, this.element);\n    this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n    this.linkInterceptor = new LinkInterceptor(this, this.element);\n    this.restorationIdentifier = uuid();\n    this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n  }\n\n  // Frame delegate\n\n  connect() {\n    if (!this.#connected) {\n      this.#connected = true;\n      if (this.loadingStyle == FrameLoadingStyle.lazy) {\n        this.appearanceObserver.start();\n      } else {\n        this.#loadSourceURL();\n      }\n      this.formLinkClickObserver.start();\n      this.linkInterceptor.start();\n      this.formSubmitObserver.start();\n    }\n  }\n\n  disconnect() {\n    if (this.#connected) {\n      this.#connected = false;\n      this.appearanceObserver.stop();\n      this.formLinkClickObserver.stop();\n      this.linkInterceptor.stop();\n      this.formSubmitObserver.stop();\n\n      if (!this.element.hasAttribute(\"recurse\")) {\n        this.#currentFetchRequest?.cancel();\n      }\n    }\n  }\n\n  disabledChanged() {\n    if (this.disabled) {\n      this.#currentFetchRequest?.cancel();\n    } else if (this.loadingStyle == FrameLoadingStyle.eager) {\n      this.#loadSourceURL();\n    }\n  }\n\n  sourceURLChanged() {\n    if (this.#isIgnoringChangesTo(\"src\")) return\n\n    if (!this.sourceURL) {\n      this.#currentFetchRequest?.cancel();\n    }\n\n    if (this.element.isConnected) {\n      this.complete = false;\n    }\n\n    if (this.loadingStyle == FrameLoadingStyle.eager || this.#hasBeenLoaded) {\n      this.#loadSourceURL();\n    }\n  }\n\n  sourceURLReloaded() {\n    const { refresh, src } = this.element;\n\n    this.#shouldMorphFrame = src && refresh === \"morph\";\n\n    this.element.removeAttribute(\"complete\");\n    this.element.src = null;\n    this.element.src = src;\n    return this.element.loaded\n  }\n\n  loadingStyleChanged() {\n    if (this.loadingStyle == FrameLoadingStyle.lazy) {\n      this.appearanceObserver.start();\n    } else {\n      this.appearanceObserver.stop();\n      this.#loadSourceURL();\n    }\n  }\n\n  async #loadSourceURL() {\n    if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n      this.element.loaded = this.#visit(expandURL(this.sourceURL));\n      this.appearanceObserver.stop();\n      await this.element.loaded;\n      this.#hasBeenLoaded = true;\n    }\n  }\n\n  async loadResponse(fetchResponse) {\n    if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n      this.sourceURL = fetchResponse.response.url;\n    }\n\n    try {\n      const html = await fetchResponse.responseHTML;\n      if (html) {\n        const document = parseHTMLDocument(html);\n        const pageSnapshot = PageSnapshot.fromDocument(document);\n\n        if (pageSnapshot.isVisitable) {\n          await this.#loadFrameResponse(fetchResponse, document);\n        } else {\n          await this.#handleUnvisitableFrameResponse(fetchResponse);\n        }\n      }\n    } finally {\n      this.#shouldMorphFrame = false;\n      this.fetchResponseLoaded = () => Promise.resolve();\n    }\n  }\n\n  // Appearance observer delegate\n\n  elementAppearedInViewport(element) {\n    this.proposeVisitIfNavigatedWithAction(element, getVisitAction(element));\n    this.#loadSourceURL();\n  }\n\n  // Form link click observer delegate\n\n  willSubmitFormLinkToLocation(link) {\n    return this.#shouldInterceptNavigation(link)\n  }\n\n  submittedFormLinkToLocation(link, _location, form) {\n    const frame = this.#findFrameElement(link);\n    if (frame) form.setAttribute(\"data-turbo-frame\", frame.id);\n  }\n\n  // Link interceptor delegate\n\n  shouldInterceptLinkClick(element, _location, _event) {\n    return this.#shouldInterceptNavigation(element)\n  }\n\n  linkClickIntercepted(element, location) {\n    this.#navigateFrame(element, location);\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(element, submitter) {\n    return element.closest(\"turbo-frame\") == this.element && this.#shouldInterceptNavigation(element, submitter)\n  }\n\n  formSubmitted(element, submitter) {\n    if (this.formSubmission) {\n      this.formSubmission.stop();\n    }\n\n    this.formSubmission = new FormSubmission(this, element, submitter);\n\n    const { fetchRequest } = this.formSubmission;\n    const frame = this.#findFrameElement(element, submitter);\n\n    this.prepareRequest(fetchRequest, frame);\n    this.formSubmission.start();\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request, frame = this) {\n    request.headers[\"Turbo-Frame\"] = frame.id;\n\n    if (this.currentNavigationElement?.hasAttribute(\"data-turbo-stream\")) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted(_request) {\n    markAsBusy(this.element);\n  }\n\n  requestPreventedHandlingResponse(_request, _response) {\n    this.#resolveVisitPromise();\n  }\n\n  async requestSucceededWithResponse(request, response) {\n    await this.loadResponse(response);\n    this.#resolveVisitPromise();\n  }\n\n  async requestFailedWithResponse(request, response) {\n    await this.loadResponse(response);\n    this.#resolveVisitPromise();\n  }\n\n  requestErrored(request, error) {\n    console.error(error);\n    this.#resolveVisitPromise();\n  }\n\n  requestFinished(_request) {\n    clearBusyState(this.element);\n  }\n\n  // Form submission delegate\n\n  formSubmissionStarted({ formElement }) {\n    markAsBusy(formElement, this.#findFrameElement(formElement));\n  }\n\n  formSubmissionSucceededWithResponse(formSubmission, response) {\n    const frame = this.#findFrameElement(formSubmission.formElement, formSubmission.submitter);\n\n    frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(formSubmission.submitter, formSubmission.formElement, frame));\n    frame.delegate.loadResponse(response);\n\n    if (!formSubmission.isSafe) {\n      session.clearCache();\n    }\n  }\n\n  formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n    this.element.delegate.loadResponse(fetchResponse);\n    session.clearCache();\n  }\n\n  formSubmissionErrored(formSubmission, error) {\n    console.error(error);\n  }\n\n  formSubmissionFinished({ formElement }) {\n    clearBusyState(formElement, this.#findFrameElement(formElement));\n  }\n\n  // View delegate\n\n  allowsImmediateRender({ element: newFrame }, options) {\n    const event = dispatch(\"turbo:before-frame-render\", {\n      target: this.element,\n      detail: { newFrame, ...options },\n      cancelable: true\n    });\n\n    const {\n      defaultPrevented,\n      detail: { render }\n    } = event;\n\n    if (this.view.renderer && render) {\n      this.view.renderer.renderElement = render;\n    }\n\n    return !defaultPrevented\n  }\n\n  viewRenderedSnapshot(_snapshot, _isPreview, _renderMethod) {}\n\n  preloadOnLoadLinksForView(element) {\n    session.preloadOnLoadLinksForView(element);\n  }\n\n  viewInvalidated() {}\n\n  // Frame renderer delegate\n\n  willRenderFrame(currentElement, _newElement) {\n    this.previousFrameElement = currentElement.cloneNode(true);\n  }\n\n  visitCachedSnapshot = ({ element }) => {\n    const frame = element.querySelector(\"#\" + this.element.id);\n\n    if (frame && this.previousFrameElement) {\n      frame.replaceChildren(...this.previousFrameElement.children);\n    }\n\n    delete this.previousFrameElement;\n  }\n\n  // Private\n\n  async #loadFrameResponse(fetchResponse, document) {\n    const newFrameElement = await this.extractForeignFrameElement(document.body);\n    const rendererClass = this.#shouldMorphFrame ? MorphingFrameRenderer : FrameRenderer;\n\n    if (newFrameElement) {\n      const snapshot = new Snapshot(newFrameElement);\n      const renderer = new rendererClass(this, this.view.snapshot, snapshot, false, false);\n      if (this.view.renderPromise) await this.view.renderPromise;\n      this.changeHistory();\n\n      await this.view.render(renderer);\n      this.complete = true;\n      session.frameRendered(fetchResponse, this.element);\n      session.frameLoaded(this.element);\n      await this.fetchResponseLoaded(fetchResponse);\n    } else if (this.#willHandleFrameMissingFromResponse(fetchResponse)) {\n      this.#handleFrameMissingFromResponse(fetchResponse);\n    }\n  }\n\n  async #visit(url) {\n    const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n\n    this.#currentFetchRequest?.cancel();\n    this.#currentFetchRequest = request;\n\n    return new Promise((resolve) => {\n      this.#resolveVisitPromise = () => {\n        this.#resolveVisitPromise = () => {};\n        this.#currentFetchRequest = null;\n        resolve();\n      };\n      request.perform();\n    })\n  }\n\n  #navigateFrame(element, url, submitter) {\n    const frame = this.#findFrameElement(element, submitter);\n\n    frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(submitter, element, frame));\n\n    this.#withCurrentNavigationElement(element, () => {\n      frame.src = url;\n    });\n  }\n\n  proposeVisitIfNavigatedWithAction(frame, action = null) {\n    this.action = action;\n\n    if (this.action) {\n      const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n      const { visitCachedSnapshot } = frame.delegate;\n\n      frame.delegate.fetchResponseLoaded = async (fetchResponse) => {\n        if (frame.src) {\n          const { statusCode, redirected } = fetchResponse;\n          const responseHTML = await fetchResponse.responseHTML;\n          const response = { statusCode, redirected, responseHTML };\n          const options = {\n            response,\n            visitCachedSnapshot,\n            willRender: false,\n            updateHistory: false,\n            restorationIdentifier: this.restorationIdentifier,\n            snapshot: pageSnapshot\n          };\n\n          if (this.action) options.action = this.action;\n\n          session.visit(frame.src, options);\n        }\n      };\n    }\n  }\n\n  changeHistory() {\n    if (this.action) {\n      const method = getHistoryMethodForAction(this.action);\n      session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n    }\n  }\n\n  async #handleUnvisitableFrameResponse(fetchResponse) {\n    console.warn(\n      `The response (${fetchResponse.statusCode}) from <turbo-frame id=\"${this.element.id}\"> is performing a full page visit due to turbo-visit-control.`\n    );\n\n    await this.#visitResponse(fetchResponse.response);\n  }\n\n  #willHandleFrameMissingFromResponse(fetchResponse) {\n    this.element.setAttribute(\"complete\", \"\");\n\n    const response = fetchResponse.response;\n    const visit = async (url, options) => {\n      if (url instanceof Response) {\n        this.#visitResponse(url);\n      } else {\n        session.visit(url, options);\n      }\n    };\n\n    const event = dispatch(\"turbo:frame-missing\", {\n      target: this.element,\n      detail: { response, visit },\n      cancelable: true\n    });\n\n    return !event.defaultPrevented\n  }\n\n  #handleFrameMissingFromResponse(fetchResponse) {\n    this.view.missing();\n    this.#throwFrameMissingError(fetchResponse);\n  }\n\n  #throwFrameMissingError(fetchResponse) {\n    const message = `The response (${fetchResponse.statusCode}) did not contain the expected <turbo-frame id=\"${this.element.id}\"> and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;\n    throw new TurboFrameMissingError(message)\n  }\n\n  async #visitResponse(response) {\n    const wrapped = new FetchResponse(response);\n    const responseHTML = await wrapped.responseHTML;\n    const { location, redirected, statusCode } = wrapped;\n\n    return session.visit(location, { response: { redirected, statusCode, responseHTML } })\n  }\n\n  #findFrameElement(element, submitter) {\n    const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n    const target = this.#getFrameElementById(id);\n\n    return target instanceof FrameElement ? target : this.element\n  }\n\n  async extractForeignFrameElement(container) {\n    let element;\n    const id = CSS.escape(this.id);\n\n    try {\n      element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n      if (element) {\n        return element\n      }\n\n      element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n      if (element) {\n        await element.loaded;\n        return await this.extractForeignFrameElement(element)\n      }\n    } catch (error) {\n      console.error(error);\n      return new FrameElement()\n    }\n\n    return null\n  }\n\n  #formActionIsVisitable(form, submitter) {\n    const action = getAction$1(form, submitter);\n\n    return locationIsVisitable(expandURL(action), this.rootLocation)\n  }\n\n  #shouldInterceptNavigation(element, submitter) {\n    const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n\n    if (element instanceof HTMLFormElement && !this.#formActionIsVisitable(element, submitter)) {\n      return false\n    }\n\n    if (!this.enabled || id == \"_top\") {\n      return false\n    }\n\n    if (id) {\n      const frameElement = this.#getFrameElementById(id);\n      if (frameElement) {\n        return !frameElement.disabled\n      } else if (id == \"_parent\") {\n        return false\n      }\n    }\n\n    if (!session.elementIsNavigatable(element)) {\n      return false\n    }\n\n    if (submitter && !session.elementIsNavigatable(submitter)) {\n      return false\n    }\n\n    return true\n  }\n\n  // Computed properties\n\n  get id() {\n    return this.element.id\n  }\n\n  get disabled() {\n    return this.element.disabled\n  }\n\n  get enabled() {\n    return !this.disabled\n  }\n\n  get sourceURL() {\n    if (this.element.src) {\n      return this.element.src\n    }\n  }\n\n  set sourceURL(sourceURL) {\n    this.#ignoringChangesToAttribute(\"src\", () => {\n      this.element.src = sourceURL ?? null;\n    });\n  }\n\n  get loadingStyle() {\n    return this.element.loading\n  }\n\n  get isLoading() {\n    return this.formSubmission !== undefined || this.#resolveVisitPromise() !== undefined\n  }\n\n  get complete() {\n    return this.element.hasAttribute(\"complete\")\n  }\n\n  set complete(value) {\n    if (value) {\n      this.element.setAttribute(\"complete\", \"\");\n    } else {\n      this.element.removeAttribute(\"complete\");\n    }\n  }\n\n  get isActive() {\n    return this.element.isActive && this.#connected\n  }\n\n  get rootLocation() {\n    const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n    const root = meta?.content ?? \"/\";\n    return expandURL(root)\n  }\n\n  #isIgnoringChangesTo(attributeName) {\n    return this.#ignoredAttributes.has(attributeName)\n  }\n\n  #ignoringChangesToAttribute(attributeName, callback) {\n    this.#ignoredAttributes.add(attributeName);\n    callback();\n    this.#ignoredAttributes.delete(attributeName);\n  }\n\n  #withCurrentNavigationElement(element, callback) {\n    this.currentNavigationElement = element;\n    callback();\n    delete this.currentNavigationElement;\n  }\n\n  #getFrameElementById(id) {\n    if (id != null) {\n      const element = id === \"_parent\" ?\n        this.element.parentElement.closest(\"turbo-frame\") :\n        document.getElementById(id);\n      if (element instanceof FrameElement) {\n        return element\n      }\n    }\n  }\n}\n\nfunction activateElement(element, currentURL) {\n  if (element) {\n    const src = element.getAttribute(\"src\");\n    if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n      throw new Error(`Matching <turbo-frame id=\"${element.id}\"> element has a source URL which references itself`)\n    }\n    if (element.ownerDocument !== document) {\n      element = document.importNode(element, true);\n    }\n\n    if (element instanceof FrameElement) {\n      element.connectedCallback();\n      element.disconnectedCallback();\n      return element\n    }\n  }\n}\n\nconst StreamActions = {\n  after() {\n    this.removeDuplicateTargetSiblings();\n    this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e.nextSibling));\n  },\n\n  append() {\n    this.removeDuplicateTargetChildren();\n    this.targetElements.forEach((e) => e.append(this.templateContent));\n  },\n\n  before() {\n    this.removeDuplicateTargetSiblings();\n    this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e));\n  },\n\n  prepend() {\n    this.removeDuplicateTargetChildren();\n    this.targetElements.forEach((e) => e.prepend(this.templateContent));\n  },\n\n  remove() {\n    this.targetElements.forEach((e) => e.remove());\n  },\n\n  replace() {\n    const method = this.getAttribute(\"method\");\n\n    this.targetElements.forEach((targetElement) => {\n      if (method === \"morph\") {\n        morphElements(targetElement, this.templateContent);\n      } else {\n        targetElement.replaceWith(this.templateContent);\n      }\n    });\n  },\n\n  update() {\n    const method = this.getAttribute(\"method\");\n\n    this.targetElements.forEach((targetElement) => {\n      if (method === \"morph\") {\n        morphChildren(targetElement, this.templateContent);\n      } else {\n        targetElement.innerHTML = \"\";\n        targetElement.append(this.templateContent);\n      }\n    });\n  },\n\n  refresh() {\n    const method = this.getAttribute(\"method\");\n    const requestId = this.requestId;\n    const scroll = this.getAttribute(\"scroll\");\n\n    session.refresh(this.baseURI, { method, requestId, scroll });\n  }\n};\n\n// <turbo-stream action=replace target=id><template>...\n\n/**\n * Renders updates to the page from a stream of messages.\n *\n * Using the `action` attribute, this can be configured one of eight ways:\n *\n * - `after` - inserts the result after the target\n * - `append` - appends the result to the target\n * - `before` - inserts the result before the target\n * - `prepend` - prepends the result to the target\n * - `refresh` - initiates a page refresh\n * - `remove` - removes the target\n * - `replace` - replaces the outer HTML of the target\n * - `update` - replaces the inner HTML of the target\n *\n * @customElement turbo-stream\n * @example\n *   <turbo-stream action=\"append\" target=\"dom_id\">\n *     <template>\n *       Content to append to target designated with the dom_id.\n *     </template>\n *   </turbo-stream>\n */\nclass StreamElement extends HTMLElement {\n  static async renderElement(newElement) {\n    await newElement.performAction();\n  }\n\n  async connectedCallback() {\n    try {\n      await this.render();\n    } catch (error) {\n      console.error(error);\n    } finally {\n      this.disconnect();\n    }\n  }\n\n  async render() {\n    return (this.renderPromise ??= (async () => {\n      const event = this.beforeRenderEvent;\n\n      if (this.dispatchEvent(event)) {\n        await nextRepaint();\n        await event.detail.render(this);\n      }\n    })())\n  }\n\n  disconnect() {\n    try {\n      this.remove();\n      // eslint-disable-next-line no-empty\n    } catch {}\n  }\n\n  /**\n   * Removes duplicate children (by ID)\n   */\n  removeDuplicateTargetChildren() {\n    this.duplicateChildren.forEach((c) => c.remove());\n  }\n\n  /**\n   * Gets the list of duplicate children (i.e. those with the same ID)\n   */\n  get duplicateChildren() {\n    const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.getAttribute(\"id\"));\n    const newChildrenIds = [...(this.templateContent?.children || [])].filter((c) => !!c.getAttribute(\"id\")).map((c) => c.getAttribute(\"id\"));\n\n    return existingChildren.filter((c) => newChildrenIds.includes(c.getAttribute(\"id\")))\n  }\n\n  /**\n  * Removes duplicate siblings (by ID)\n  */\n  removeDuplicateTargetSiblings() {\n    this.duplicateSiblings.forEach((c) => c.remove());\n  }\n\n  /**\n  * Gets the list of duplicate siblings (i.e. those with the same ID)\n  */\n  get duplicateSiblings() {\n    const existingChildren = this.targetElements.flatMap((e) => [...e.parentElement.children]).filter((c) => !!c.id);\n    const newChildrenIds = [...(this.templateContent?.children || [])].filter((c) => !!c.id).map((c) => c.id);\n\n    return existingChildren.filter((c) => newChildrenIds.includes(c.id))\n  }\n\n  /**\n   * Gets the action function to be performed.\n   */\n  get performAction() {\n    if (this.action) {\n      const actionFunction = StreamActions[this.action];\n      if (actionFunction) {\n        return actionFunction\n      }\n      this.#raise(\"unknown action\");\n    }\n    this.#raise(\"action attribute is missing\");\n  }\n\n  /**\n   * Gets the target elements which the template will be rendered to.\n   */\n  get targetElements() {\n    if (this.target) {\n      return this.targetElementsById\n    } else if (this.targets) {\n      return this.targetElementsByQuery\n    } else {\n      this.#raise(\"target or targets attribute is missing\");\n    }\n  }\n\n  /**\n   * Gets the contents of the main `<template>`.\n   */\n  get templateContent() {\n    return this.templateElement.content.cloneNode(true)\n  }\n\n  /**\n   * Gets the main `<template>` used for rendering\n   */\n  get templateElement() {\n    if (this.firstElementChild === null) {\n      const template = this.ownerDocument.createElement(\"template\");\n      this.appendChild(template);\n      return template\n    } else if (this.firstElementChild instanceof HTMLTemplateElement) {\n      return this.firstElementChild\n    }\n    this.#raise(\"first child element must be a <template> element\");\n  }\n\n  /**\n   * Gets the current action.\n   */\n  get action() {\n    return this.getAttribute(\"action\")\n  }\n\n  /**\n   * Gets the current target (an element ID) to which the result will\n   * be rendered.\n   */\n  get target() {\n    return this.getAttribute(\"target\")\n  }\n\n  /**\n   * Gets the current \"targets\" selector (a CSS selector)\n   */\n  get targets() {\n    return this.getAttribute(\"targets\")\n  }\n\n  /**\n   * Reads the request-id attribute\n   */\n  get requestId() {\n    return this.getAttribute(\"request-id\")\n  }\n\n  #raise(message) {\n    throw new Error(`${this.description}: ${message}`)\n  }\n\n  get description() {\n    return (this.outerHTML.match(/<[^>]+>/) ?? [])[0] ?? \"<turbo-stream>\"\n  }\n\n  get beforeRenderEvent() {\n    return new CustomEvent(\"turbo:before-stream-render\", {\n      bubbles: true,\n      cancelable: true,\n      detail: { newStream: this, render: StreamElement.renderElement }\n    })\n  }\n\n  get targetElementsById() {\n    const element = this.ownerDocument?.getElementById(this.target);\n\n    if (element !== null) {\n      return [element]\n    } else {\n      return []\n    }\n  }\n\n  get targetElementsByQuery() {\n    const elements = this.ownerDocument?.querySelectorAll(this.targets);\n\n    if (elements.length !== 0) {\n      return Array.prototype.slice.call(elements)\n    } else {\n      return []\n    }\n  }\n}\n\nclass StreamSourceElement extends HTMLElement {\n  streamSource = null\n\n  connectedCallback() {\n    this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n\n    connectStreamSource(this.streamSource);\n  }\n\n  disconnectedCallback() {\n    if (this.streamSource) {\n      this.streamSource.close();\n\n      disconnectStreamSource(this.streamSource);\n    }\n  }\n\n  get src() {\n    return this.getAttribute(\"src\") || \"\"\n  }\n}\n\nFrameElement.delegateConstructor = FrameController;\n\nif (customElements.get(\"turbo-frame\") === undefined) {\n  customElements.define(\"turbo-frame\", FrameElement);\n}\n\nif (customElements.get(\"turbo-stream\") === undefined) {\n  customElements.define(\"turbo-stream\", StreamElement);\n}\n\nif (customElements.get(\"turbo-stream-source\") === undefined) {\n  customElements.define(\"turbo-stream-source\", StreamSourceElement);\n}\n\n(() => {\n  const scriptElement = document.currentScript;\n  if (!scriptElement) return\n  if (scriptElement.hasAttribute(\"data-turbo-suppress-warning\")) return\n\n  let element = scriptElement.parentElement;\n  while (element) {\n    if (element == document.body) {\n      return console.warn(\n        unindent`\n        You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!\n\n        Load your application\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\n        For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements\n\n        \u2014\u2014\n        Suppress this warning by adding a \"data-turbo-suppress-warning\" attribute to: %s\n      `,\n        scriptElement.outerHTML\n      )\n    }\n\n    element = element.parentElement;\n  }\n})();\n\nwindow.Turbo = { ...Turbo, StreamActions };\nstart();\n\nexport { FetchEnctype, FetchMethod, FetchRequest, FetchResponse, FrameElement, FrameLoadingStyle, FrameRenderer, PageRenderer, PageSnapshot, StreamActions, StreamElement, StreamSourceElement, cache, config, connectStreamSource, disconnectStreamSource, fetchWithTurboHeaders as fetch, fetchEnctypeFromString, fetchMethodFromString, isSafe, morphBodyElements, morphChildren, morphElements, morphTurboFrameElements, sessionNavigator as navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, setFormMode, setProgressBarDelay, start, visit };\n", "let consumer\n\nexport async function getConsumer() {\n  return consumer || setConsumer(createConsumer().then(setConsumer))\n}\n\nexport function setConsumer(newConsumer) {\n  return consumer = newConsumer\n}\n\nexport async function createConsumer() {\n  const { createConsumer } = await import(/* webpackChunkName: \"actioncable\" */ \"@rails/actioncable/src\")\n  return createConsumer()\n}\n\nexport async function subscribeTo(channel, mixin) {\n  const { subscriptions } = await getConsumer()\n  return subscriptions.create(channel, mixin)\n}\n", "// Based on https://github.com/nathan7/snakeize\n//\n// This software is released under the MIT license:\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\nexport default function walk (obj) {\n    if (!obj || typeof obj !== 'object') return obj;\n    if (obj instanceof Date || obj instanceof RegExp) return obj;\n    if (Array.isArray(obj)) return obj.map(walk);\n    return Object.keys(obj).reduce(function (acc, key) {\n        var camel = key[0].toLowerCase() + key.slice(1).replace(/([A-Z]+)/g, function (m, x) {\n            return '_' + x.toLowerCase();\n        });\n        acc[camel] = walk(obj[key]);\n        return acc;\n    }, {});\n};", "import { connectStreamSource, disconnectStreamSource } from \"@hotwired/turbo\"\nimport { subscribeTo } from \"./cable\"\nimport snakeize from \"./snakeize\"\n\nclass TurboCableStreamSourceElement extends HTMLElement {\n  static observedAttributes = [\"channel\", \"signed-stream-name\"]\n\n  async connectedCallback() {\n    connectStreamSource(this)\n    this.subscription = await subscribeTo(this.channel, {\n      received: this.dispatchMessageEvent.bind(this),\n      connected: this.subscriptionConnected.bind(this),\n      disconnected: this.subscriptionDisconnected.bind(this)\n    })\n  }\n\n  disconnectedCallback() {\n    disconnectStreamSource(this)\n    if (this.subscription) this.subscription.unsubscribe()\n    this.subscriptionDisconnected()\n  }\n\n  attributeChangedCallback() {\n    if (this.subscription) {\n      this.disconnectedCallback()\n      this.connectedCallback()\n    }\n  }\n\n  dispatchMessageEvent(data) {\n    const event = new MessageEvent(\"message\", { data })\n    return this.dispatchEvent(event)\n  }\n\n  subscriptionConnected() {\n    this.setAttribute(\"connected\", \"\")\n  }\n\n  subscriptionDisconnected() {\n    this.removeAttribute(\"connected\")\n  }\n\n  get channel() {\n    const channel = this.getAttribute(\"channel\")\n    const signed_stream_name = this.getAttribute(\"signed-stream-name\")\n    return { channel, signed_stream_name, ...snakeize({ ...this.dataset }) }\n  }\n}\n\n\nif (customElements.get(\"turbo-cable-stream-source\") === undefined) {\n  customElements.define(\"turbo-cable-stream-source\", TurboCableStreamSourceElement)\n}\n", "export function encodeMethodIntoRequestBody(event) {\n  if (event.target instanceof HTMLFormElement) {\n    const { target: form, detail: { fetchOptions } } = event\n\n    form.addEventListener(\"turbo:submit-start\", ({ detail: { formSubmission: { submitter } } }) => {\n      const body = isBodyInit(fetchOptions.body) ? fetchOptions.body : new URLSearchParams()\n      const method = determineFetchMethod(submitter, body, form)\n\n      if (!/get/i.test(method)) {\n        if (/post/i.test(method)) {\n          body.delete(\"_method\")\n        } else {\n          body.set(\"_method\", method)\n        }\n\n        fetchOptions.method = \"post\"\n      }\n    }, { once: true })\n  }\n}\n\nfunction determineFetchMethod(submitter, body, form) {\n  const formMethod = determineFormMethod(submitter)\n  const overrideMethod = body.get(\"_method\")\n  const method = form.getAttribute(\"method\") || \"get\"\n\n  if (typeof formMethod == \"string\") {\n    return formMethod\n  } else if (typeof overrideMethod == \"string\") {\n    return overrideMethod\n  } else {\n    return method\n  }\n}\n\nfunction determineFormMethod(submitter) {\n  if (submitter instanceof HTMLButtonElement || submitter instanceof HTMLInputElement) {\n    // Rails 7 ActionView::Helpers::FormBuilder#button method has an override\n    // for formmethod if the button does not have name or value attributes\n    // set, which is the default. This means that if you use <%= f.button\n    // formmethod: :delete %>, it will generate a <button name=\"_method\"\n    // value=\"delete\" formmethod=\"post\">. Therefore, if the submitter's name\n    // is already _method, it's value attribute already contains the desired\n    // method.\n    if (submitter.name === '_method') {\n      return submitter.value\n    } else if (submitter.hasAttribute(\"formmethod\")) {\n      return submitter.formMethod\n    } else {\n      return null\n    }\n  } else {\n    return null\n  }\n}\n\nfunction isBodyInit(body) {\n  return body instanceof FormData || body instanceof URLSearchParams\n}\n", "import \"./cable_stream_source_element\"\n\nimport * as Turbo from \"@hotwired/turbo\"\nexport { Turbo }\n\nimport * as cable from \"./cable\"\nexport { cable }\n\nimport { encodeMethodIntoRequestBody } from \"./fetch_requests\"\n\nwindow.Turbo = Turbo\n\naddEventListener(\"turbo:before-fetch-request\", encodeMethodIntoRequestBody)\n", "/*\nStimulus 3.2.1\nCopyright \u00A9 2023 Basecamp, LLC\n */\nclass EventListener {\n    constructor(eventTarget, eventName, eventOptions) {\n        this.eventTarget = eventTarget;\n        this.eventName = eventName;\n        this.eventOptions = eventOptions;\n        this.unorderedBindings = new Set();\n    }\n    connect() {\n        this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n    }\n    disconnect() {\n        this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n    }\n    bindingConnected(binding) {\n        this.unorderedBindings.add(binding);\n    }\n    bindingDisconnected(binding) {\n        this.unorderedBindings.delete(binding);\n    }\n    handleEvent(event) {\n        const extendedEvent = extendEvent(event);\n        for (const binding of this.bindings) {\n            if (extendedEvent.immediatePropagationStopped) {\n                break;\n            }\n            else {\n                binding.handleEvent(extendedEvent);\n            }\n        }\n    }\n    hasBindings() {\n        return this.unorderedBindings.size > 0;\n    }\n    get bindings() {\n        return Array.from(this.unorderedBindings).sort((left, right) => {\n            const leftIndex = left.index, rightIndex = right.index;\n            return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n        });\n    }\n}\nfunction extendEvent(event) {\n    if (\"immediatePropagationStopped\" in event) {\n        return event;\n    }\n    else {\n        const { stopImmediatePropagation } = event;\n        return Object.assign(event, {\n            immediatePropagationStopped: false,\n            stopImmediatePropagation() {\n                this.immediatePropagationStopped = true;\n                stopImmediatePropagation.call(this);\n            },\n        });\n    }\n}\n\nclass Dispatcher {\n    constructor(application) {\n        this.application = application;\n        this.eventListenerMaps = new Map();\n        this.started = false;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.eventListeners.forEach((eventListener) => eventListener.connect());\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n        }\n    }\n    get eventListeners() {\n        return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n    }\n    bindingConnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n    }\n    bindingDisconnected(binding, clearEventListeners = false) {\n        this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n        if (clearEventListeners)\n            this.clearEventListenersForBinding(binding);\n    }\n    handleError(error, message, detail = {}) {\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    clearEventListenersForBinding(binding) {\n        const eventListener = this.fetchEventListenerForBinding(binding);\n        if (!eventListener.hasBindings()) {\n            eventListener.disconnect();\n            this.removeMappedEventListenerFor(binding);\n        }\n    }\n    removeMappedEventListenerFor(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        eventListenerMap.delete(cacheKey);\n        if (eventListenerMap.size == 0)\n            this.eventListenerMaps.delete(eventTarget);\n    }\n    fetchEventListenerForBinding(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        return this.fetchEventListener(eventTarget, eventName, eventOptions);\n    }\n    fetchEventListener(eventTarget, eventName, eventOptions) {\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        let eventListener = eventListenerMap.get(cacheKey);\n        if (!eventListener) {\n            eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n            eventListenerMap.set(cacheKey, eventListener);\n        }\n        return eventListener;\n    }\n    createEventListener(eventTarget, eventName, eventOptions) {\n        const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n        if (this.started) {\n            eventListener.connect();\n        }\n        return eventListener;\n    }\n    fetchEventListenerMapForEventTarget(eventTarget) {\n        let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n        if (!eventListenerMap) {\n            eventListenerMap = new Map();\n            this.eventListenerMaps.set(eventTarget, eventListenerMap);\n        }\n        return eventListenerMap;\n    }\n    cacheKey(eventName, eventOptions) {\n        const parts = [eventName];\n        Object.keys(eventOptions)\n            .sort()\n            .forEach((key) => {\n            parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n        });\n        return parts.join(\":\");\n    }\n}\n\nconst defaultActionDescriptorFilters = {\n    stop({ event, value }) {\n        if (value)\n            event.stopPropagation();\n        return true;\n    },\n    prevent({ event, value }) {\n        if (value)\n            event.preventDefault();\n        return true;\n    },\n    self({ event, value, element }) {\n        if (value) {\n            return element === event.target;\n        }\n        else {\n            return true;\n        }\n    },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n    const source = descriptorString.trim();\n    const matches = source.match(descriptorPattern) || [];\n    let eventName = matches[2];\n    let keyFilter = matches[3];\n    if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n        eventName += `.${keyFilter}`;\n        keyFilter = \"\";\n    }\n    return {\n        eventTarget: parseEventTarget(matches[4]),\n        eventName,\n        eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n        identifier: matches[5],\n        methodName: matches[6],\n        keyFilter: matches[1] || keyFilter,\n    };\n}\nfunction parseEventTarget(eventTargetName) {\n    if (eventTargetName == \"window\") {\n        return window;\n    }\n    else if (eventTargetName == \"document\") {\n        return document;\n    }\n}\nfunction parseEventOptions(eventOptions) {\n    return eventOptions\n        .split(\":\")\n        .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n    if (eventTarget == window) {\n        return \"window\";\n    }\n    else if (eventTarget == document) {\n        return \"document\";\n    }\n}\n\nfunction camelize(value) {\n    return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n    return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n    return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n    return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n    return value.match(/[^\\s]+/g) || [];\n}\n\nfunction isSomething(object) {\n    return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n    return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n    constructor(element, index, descriptor, schema) {\n        this.element = element;\n        this.index = index;\n        this.eventTarget = descriptor.eventTarget || element;\n        this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n        this.eventOptions = descriptor.eventOptions || {};\n        this.identifier = descriptor.identifier || error(\"missing identifier\");\n        this.methodName = descriptor.methodName || error(\"missing method name\");\n        this.keyFilter = descriptor.keyFilter || \"\";\n        this.schema = schema;\n    }\n    static forToken(token, schema) {\n        return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n    }\n    toString() {\n        const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n        const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n        return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n    }\n    shouldIgnoreKeyboardEvent(event) {\n        if (!this.keyFilter) {\n            return false;\n        }\n        const filters = this.keyFilter.split(\"+\");\n        if (this.keyFilterDissatisfied(event, filters)) {\n            return true;\n        }\n        const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n        if (!standardFilter) {\n            return false;\n        }\n        if (!hasProperty(this.keyMappings, standardFilter)) {\n            error(`contains unknown key filter: ${this.keyFilter}`);\n        }\n        return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n    }\n    shouldIgnoreMouseEvent(event) {\n        if (!this.keyFilter) {\n            return false;\n        }\n        const filters = [this.keyFilter];\n        if (this.keyFilterDissatisfied(event, filters)) {\n            return true;\n        }\n        return false;\n    }\n    get params() {\n        const params = {};\n        const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n        for (const { name, value } of Array.from(this.element.attributes)) {\n            const match = name.match(pattern);\n            const key = match && match[1];\n            if (key) {\n                params[camelize(key)] = typecast(value);\n            }\n        }\n        return params;\n    }\n    get eventTargetName() {\n        return stringifyEventTarget(this.eventTarget);\n    }\n    get keyMappings() {\n        return this.schema.keyMappings;\n    }\n    keyFilterDissatisfied(event, filters) {\n        const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n        return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n    }\n}\nconst defaultEventNames = {\n    a: () => \"click\",\n    button: () => \"click\",\n    form: () => \"submit\",\n    details: () => \"toggle\",\n    input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n    select: () => \"change\",\n    textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n    const tagName = element.tagName.toLowerCase();\n    if (tagName in defaultEventNames) {\n        return defaultEventNames[tagName](element);\n    }\n}\nfunction error(message) {\n    throw new Error(message);\n}\nfunction typecast(value) {\n    try {\n        return JSON.parse(value);\n    }\n    catch (o_O) {\n        return value;\n    }\n}\n\nclass Binding {\n    constructor(context, action) {\n        this.context = context;\n        this.action = action;\n    }\n    get index() {\n        return this.action.index;\n    }\n    get eventTarget() {\n        return this.action.eventTarget;\n    }\n    get eventOptions() {\n        return this.action.eventOptions;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    handleEvent(event) {\n        const actionEvent = this.prepareActionEvent(event);\n        if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n            this.invokeWithEvent(actionEvent);\n        }\n    }\n    get eventName() {\n        return this.action.eventName;\n    }\n    get method() {\n        const method = this.controller[this.methodName];\n        if (typeof method == \"function\") {\n            return method;\n        }\n        throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n    }\n    applyEventModifiers(event) {\n        const { element } = this.action;\n        const { actionDescriptorFilters } = this.context.application;\n        const { controller } = this.context;\n        let passes = true;\n        for (const [name, value] of Object.entries(this.eventOptions)) {\n            if (name in actionDescriptorFilters) {\n                const filter = actionDescriptorFilters[name];\n                passes = passes && filter({ name, value, event, element, controller });\n            }\n            else {\n                continue;\n            }\n        }\n        return passes;\n    }\n    prepareActionEvent(event) {\n        return Object.assign(event, { params: this.action.params });\n    }\n    invokeWithEvent(event) {\n        const { target, currentTarget } = event;\n        try {\n            this.method.call(this.controller, event);\n            this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n        }\n        catch (error) {\n            const { identifier, controller, element, index } = this;\n            const detail = { identifier, controller, element, index, event };\n            this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n        }\n    }\n    willBeInvokedByEvent(event) {\n        const eventTarget = event.target;\n        if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n            return false;\n        }\n        if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n            return false;\n        }\n        if (this.element === eventTarget) {\n            return true;\n        }\n        else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n            return this.scope.containsElement(eventTarget);\n        }\n        else {\n            return this.scope.containsElement(this.action.element);\n        }\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    get methodName() {\n        return this.action.methodName;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nclass ElementObserver {\n    constructor(element, delegate) {\n        this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n        this.element = element;\n        this.started = false;\n        this.delegate = delegate;\n        this.elements = new Set();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.refresh();\n        }\n    }\n    pause(callback) {\n        if (this.started) {\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n        callback();\n        if (!this.started) {\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            const matches = new Set(this.matchElementsInTree());\n            for (const element of Array.from(this.elements)) {\n                if (!matches.has(element)) {\n                    this.removeElement(element);\n                }\n            }\n            for (const element of Array.from(matches)) {\n                this.addElement(element);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        if (mutation.type == \"attributes\") {\n            this.processAttributeChange(mutation.target, mutation.attributeName);\n        }\n        else if (mutation.type == \"childList\") {\n            this.processRemovedNodes(mutation.removedNodes);\n            this.processAddedNodes(mutation.addedNodes);\n        }\n    }\n    processAttributeChange(element, attributeName) {\n        if (this.elements.has(element)) {\n            if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n                this.delegate.elementAttributeChanged(element, attributeName);\n            }\n            else {\n                this.removeElement(element);\n            }\n        }\n        else if (this.matchElement(element)) {\n            this.addElement(element);\n        }\n    }\n    processRemovedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element) {\n                this.processTree(element, this.removeElement);\n            }\n        }\n    }\n    processAddedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element && this.elementIsActive(element)) {\n                this.processTree(element, this.addElement);\n            }\n        }\n    }\n    matchElement(element) {\n        return this.delegate.matchElement(element);\n    }\n    matchElementsInTree(tree = this.element) {\n        return this.delegate.matchElementsInTree(tree);\n    }\n    processTree(tree, processor) {\n        for (const element of this.matchElementsInTree(tree)) {\n            processor.call(this, element);\n        }\n    }\n    elementFromNode(node) {\n        if (node.nodeType == Node.ELEMENT_NODE) {\n            return node;\n        }\n    }\n    elementIsActive(element) {\n        if (element.isConnected != this.element.isConnected) {\n            return false;\n        }\n        else {\n            return this.element.contains(element);\n        }\n    }\n    addElement(element) {\n        if (!this.elements.has(element)) {\n            if (this.elementIsActive(element)) {\n                this.elements.add(element);\n                if (this.delegate.elementMatched) {\n                    this.delegate.elementMatched(element);\n                }\n            }\n        }\n    }\n    removeElement(element) {\n        if (this.elements.has(element)) {\n            this.elements.delete(element);\n            if (this.delegate.elementUnmatched) {\n                this.delegate.elementUnmatched(element);\n            }\n        }\n    }\n}\n\nclass AttributeObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeName = attributeName;\n        this.delegate = delegate;\n        this.elementObserver = new ElementObserver(element, this);\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    get selector() {\n        return `[${this.attributeName}]`;\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    matchElement(element) {\n        return element.hasAttribute(this.attributeName);\n    }\n    matchElementsInTree(tree) {\n        const match = this.matchElement(tree) ? [tree] : [];\n        const matches = Array.from(tree.querySelectorAll(this.selector));\n        return match.concat(matches);\n    }\n    elementMatched(element) {\n        if (this.delegate.elementMatchedAttribute) {\n            this.delegate.elementMatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementUnmatched(element) {\n        if (this.delegate.elementUnmatchedAttribute) {\n            this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementAttributeChanged(element, attributeName) {\n        if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n            this.delegate.elementAttributeValueChanged(element, attributeName);\n        }\n    }\n}\n\nfunction add(map, key, value) {\n    fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n    fetch(map, key).delete(value);\n    prune(map, key);\n}\nfunction fetch(map, key) {\n    let values = map.get(key);\n    if (!values) {\n        values = new Set();\n        map.set(key, values);\n    }\n    return values;\n}\nfunction prune(map, key) {\n    const values = map.get(key);\n    if (values != null && values.size == 0) {\n        map.delete(key);\n    }\n}\n\nclass Multimap {\n    constructor() {\n        this.valuesByKey = new Map();\n    }\n    get keys() {\n        return Array.from(this.valuesByKey.keys());\n    }\n    get values() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n    }\n    get size() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((size, set) => size + set.size, 0);\n    }\n    add(key, value) {\n        add(this.valuesByKey, key, value);\n    }\n    delete(key, value) {\n        del(this.valuesByKey, key, value);\n    }\n    has(key, value) {\n        const values = this.valuesByKey.get(key);\n        return values != null && values.has(value);\n    }\n    hasKey(key) {\n        return this.valuesByKey.has(key);\n    }\n    hasValue(value) {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.some((set) => set.has(value));\n    }\n    getValuesForKey(key) {\n        const values = this.valuesByKey.get(key);\n        return values ? Array.from(values) : [];\n    }\n    getKeysForValue(value) {\n        return Array.from(this.valuesByKey)\n            .filter(([_key, values]) => values.has(value))\n            .map(([key, _values]) => key);\n    }\n}\n\nclass IndexedMultimap extends Multimap {\n    constructor() {\n        super();\n        this.keysByValue = new Map();\n    }\n    get values() {\n        return Array.from(this.keysByValue.keys());\n    }\n    add(key, value) {\n        super.add(key, value);\n        add(this.keysByValue, value, key);\n    }\n    delete(key, value) {\n        super.delete(key, value);\n        del(this.keysByValue, value, key);\n    }\n    hasValue(value) {\n        return this.keysByValue.has(value);\n    }\n    getKeysForValue(value) {\n        const set = this.keysByValue.get(value);\n        return set ? Array.from(set) : [];\n    }\n}\n\nclass SelectorObserver {\n    constructor(element, selector, delegate, details) {\n        this._selector = selector;\n        this.details = details;\n        this.elementObserver = new ElementObserver(element, this);\n        this.delegate = delegate;\n        this.matchesByElement = new Multimap();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    get selector() {\n        return this._selector;\n    }\n    set selector(selector) {\n        this._selector = selector;\n        this.refresh();\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    matchElement(element) {\n        const { selector } = this;\n        if (selector) {\n            const matches = element.matches(selector);\n            if (this.delegate.selectorMatchElement) {\n                return matches && this.delegate.selectorMatchElement(element, this.details);\n            }\n            return matches;\n        }\n        else {\n            return false;\n        }\n    }\n    matchElementsInTree(tree) {\n        const { selector } = this;\n        if (selector) {\n            const match = this.matchElement(tree) ? [tree] : [];\n            const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n            return match.concat(matches);\n        }\n        else {\n            return [];\n        }\n    }\n    elementMatched(element) {\n        const { selector } = this;\n        if (selector) {\n            this.selectorMatched(element, selector);\n        }\n    }\n    elementUnmatched(element) {\n        const selectors = this.matchesByElement.getKeysForValue(element);\n        for (const selector of selectors) {\n            this.selectorUnmatched(element, selector);\n        }\n    }\n    elementAttributeChanged(element, _attributeName) {\n        const { selector } = this;\n        if (selector) {\n            const matches = this.matchElement(element);\n            const matchedBefore = this.matchesByElement.has(selector, element);\n            if (matches && !matchedBefore) {\n                this.selectorMatched(element, selector);\n            }\n            else if (!matches && matchedBefore) {\n                this.selectorUnmatched(element, selector);\n            }\n        }\n    }\n    selectorMatched(element, selector) {\n        this.delegate.selectorMatched(element, selector, this.details);\n        this.matchesByElement.add(selector, element);\n    }\n    selectorUnmatched(element, selector) {\n        this.delegate.selectorUnmatched(element, selector, this.details);\n        this.matchesByElement.delete(selector, element);\n    }\n}\n\nclass StringMapObserver {\n    constructor(element, delegate) {\n        this.element = element;\n        this.delegate = delegate;\n        this.started = false;\n        this.stringMap = new Map();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n            this.refresh();\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            for (const attributeName of this.knownAttributeNames) {\n                this.refreshAttribute(attributeName, null);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        const attributeName = mutation.attributeName;\n        if (attributeName) {\n            this.refreshAttribute(attributeName, mutation.oldValue);\n        }\n    }\n    refreshAttribute(attributeName, oldValue) {\n        const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n        if (key != null) {\n            if (!this.stringMap.has(attributeName)) {\n                this.stringMapKeyAdded(key, attributeName);\n            }\n            const value = this.element.getAttribute(attributeName);\n            if (this.stringMap.get(attributeName) != value) {\n                this.stringMapValueChanged(value, key, oldValue);\n            }\n            if (value == null) {\n                const oldValue = this.stringMap.get(attributeName);\n                this.stringMap.delete(attributeName);\n                if (oldValue)\n                    this.stringMapKeyRemoved(key, attributeName, oldValue);\n            }\n            else {\n                this.stringMap.set(attributeName, value);\n            }\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        if (this.delegate.stringMapKeyAdded) {\n            this.delegate.stringMapKeyAdded(key, attributeName);\n        }\n    }\n    stringMapValueChanged(value, key, oldValue) {\n        if (this.delegate.stringMapValueChanged) {\n            this.delegate.stringMapValueChanged(value, key, oldValue);\n        }\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        if (this.delegate.stringMapKeyRemoved) {\n            this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n        }\n    }\n    get knownAttributeNames() {\n        return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n    }\n    get currentAttributeNames() {\n        return Array.from(this.element.attributes).map((attribute) => attribute.name);\n    }\n    get recordedAttributeNames() {\n        return Array.from(this.stringMap.keys());\n    }\n}\n\nclass TokenListObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeObserver = new AttributeObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.tokensByElement = new Multimap();\n    }\n    get started() {\n        return this.attributeObserver.started;\n    }\n    start() {\n        this.attributeObserver.start();\n    }\n    pause(callback) {\n        this.attributeObserver.pause(callback);\n    }\n    stop() {\n        this.attributeObserver.stop();\n    }\n    refresh() {\n        this.attributeObserver.refresh();\n    }\n    get element() {\n        return this.attributeObserver.element;\n    }\n    get attributeName() {\n        return this.attributeObserver.attributeName;\n    }\n    elementMatchedAttribute(element) {\n        this.tokensMatched(this.readTokensForElement(element));\n    }\n    elementAttributeValueChanged(element) {\n        const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n        this.tokensUnmatched(unmatchedTokens);\n        this.tokensMatched(matchedTokens);\n    }\n    elementUnmatchedAttribute(element) {\n        this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n    }\n    tokensMatched(tokens) {\n        tokens.forEach((token) => this.tokenMatched(token));\n    }\n    tokensUnmatched(tokens) {\n        tokens.forEach((token) => this.tokenUnmatched(token));\n    }\n    tokenMatched(token) {\n        this.delegate.tokenMatched(token);\n        this.tokensByElement.add(token.element, token);\n    }\n    tokenUnmatched(token) {\n        this.delegate.tokenUnmatched(token);\n        this.tokensByElement.delete(token.element, token);\n    }\n    refreshTokensForElement(element) {\n        const previousTokens = this.tokensByElement.getValuesForKey(element);\n        const currentTokens = this.readTokensForElement(element);\n        const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n        if (firstDifferingIndex == -1) {\n            return [[], []];\n        }\n        else {\n            return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n        }\n    }\n    readTokensForElement(element) {\n        const attributeName = this.attributeName;\n        const tokenString = element.getAttribute(attributeName) || \"\";\n        return parseTokenString(tokenString, element, attributeName);\n    }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n    return tokenString\n        .trim()\n        .split(/\\s+/)\n        .filter((content) => content.length)\n        .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n    const length = Math.max(left.length, right.length);\n    return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n    return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n    constructor(element, attributeName, delegate) {\n        this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.parseResultsByToken = new WeakMap();\n        this.valuesByTokenByElement = new WeakMap();\n    }\n    get started() {\n        return this.tokenListObserver.started;\n    }\n    start() {\n        this.tokenListObserver.start();\n    }\n    stop() {\n        this.tokenListObserver.stop();\n    }\n    refresh() {\n        this.tokenListObserver.refresh();\n    }\n    get element() {\n        return this.tokenListObserver.element;\n    }\n    get attributeName() {\n        return this.tokenListObserver.attributeName;\n    }\n    tokenMatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).set(token, value);\n            this.delegate.elementMatchedValue(element, value);\n        }\n    }\n    tokenUnmatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).delete(token);\n            this.delegate.elementUnmatchedValue(element, value);\n        }\n    }\n    fetchParseResultForToken(token) {\n        let parseResult = this.parseResultsByToken.get(token);\n        if (!parseResult) {\n            parseResult = this.parseToken(token);\n            this.parseResultsByToken.set(token, parseResult);\n        }\n        return parseResult;\n    }\n    fetchValuesByTokenForElement(element) {\n        let valuesByToken = this.valuesByTokenByElement.get(element);\n        if (!valuesByToken) {\n            valuesByToken = new Map();\n            this.valuesByTokenByElement.set(element, valuesByToken);\n        }\n        return valuesByToken;\n    }\n    parseToken(token) {\n        try {\n            const value = this.delegate.parseValueForToken(token);\n            return { value };\n        }\n        catch (error) {\n            return { error };\n        }\n    }\n}\n\nclass BindingObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.bindingsByAction = new Map();\n    }\n    start() {\n        if (!this.valueListObserver) {\n            this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n            this.valueListObserver.start();\n        }\n    }\n    stop() {\n        if (this.valueListObserver) {\n            this.valueListObserver.stop();\n            delete this.valueListObserver;\n            this.disconnectAllActions();\n        }\n    }\n    get element() {\n        return this.context.element;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get actionAttribute() {\n        return this.schema.actionAttribute;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get bindings() {\n        return Array.from(this.bindingsByAction.values());\n    }\n    connectAction(action) {\n        const binding = new Binding(this.context, action);\n        this.bindingsByAction.set(action, binding);\n        this.delegate.bindingConnected(binding);\n    }\n    disconnectAction(action) {\n        const binding = this.bindingsByAction.get(action);\n        if (binding) {\n            this.bindingsByAction.delete(action);\n            this.delegate.bindingDisconnected(binding);\n        }\n    }\n    disconnectAllActions() {\n        this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n        this.bindingsByAction.clear();\n    }\n    parseValueForToken(token) {\n        const action = Action.forToken(token, this.schema);\n        if (action.identifier == this.identifier) {\n            return action;\n        }\n    }\n    elementMatchedValue(element, action) {\n        this.connectAction(action);\n    }\n    elementUnmatchedValue(element, action) {\n        this.disconnectAction(action);\n    }\n}\n\nclass ValueObserver {\n    constructor(context, receiver) {\n        this.context = context;\n        this.receiver = receiver;\n        this.stringMapObserver = new StringMapObserver(this.element, this);\n        this.valueDescriptorMap = this.controller.valueDescriptorMap;\n    }\n    start() {\n        this.stringMapObserver.start();\n        this.invokeChangedCallbacksForDefaultValues();\n    }\n    stop() {\n        this.stringMapObserver.stop();\n    }\n    get element() {\n        return this.context.element;\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    getStringMapKeyForAttribute(attributeName) {\n        if (attributeName in this.valueDescriptorMap) {\n            return this.valueDescriptorMap[attributeName].name;\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        const descriptor = this.valueDescriptorMap[attributeName];\n        if (!this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n        }\n    }\n    stringMapValueChanged(value, name, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[name];\n        if (value === null)\n            return;\n        if (oldValue === null) {\n            oldValue = descriptor.writer(descriptor.defaultValue);\n        }\n        this.invokeChangedCallback(name, value, oldValue);\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[key];\n        if (this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n        }\n        else {\n            this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n        }\n    }\n    invokeChangedCallbacksForDefaultValues() {\n        for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n            if (defaultValue != undefined && !this.controller.data.has(key)) {\n                this.invokeChangedCallback(name, writer(defaultValue), undefined);\n            }\n        }\n    }\n    invokeChangedCallback(name, rawValue, rawOldValue) {\n        const changedMethodName = `${name}Changed`;\n        const changedMethod = this.receiver[changedMethodName];\n        if (typeof changedMethod == \"function\") {\n            const descriptor = this.valueDescriptorNameMap[name];\n            try {\n                const value = descriptor.reader(rawValue);\n                let oldValue = rawOldValue;\n                if (rawOldValue) {\n                    oldValue = descriptor.reader(rawOldValue);\n                }\n                changedMethod.call(this.receiver, value, oldValue);\n            }\n            catch (error) {\n                if (error instanceof TypeError) {\n                    error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n                }\n                throw error;\n            }\n        }\n    }\n    get valueDescriptors() {\n        const { valueDescriptorMap } = this;\n        return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n    }\n    get valueDescriptorNameMap() {\n        const descriptors = {};\n        Object.keys(this.valueDescriptorMap).forEach((key) => {\n            const descriptor = this.valueDescriptorMap[key];\n            descriptors[descriptor.name] = descriptor;\n        });\n        return descriptors;\n    }\n    hasValue(attributeName) {\n        const descriptor = this.valueDescriptorNameMap[attributeName];\n        const hasMethodName = `has${capitalize(descriptor.name)}`;\n        return this.receiver[hasMethodName];\n    }\n}\n\nclass TargetObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.targetsByName = new Multimap();\n    }\n    start() {\n        if (!this.tokenListObserver) {\n            this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n            this.tokenListObserver.start();\n        }\n    }\n    stop() {\n        if (this.tokenListObserver) {\n            this.disconnectAllTargets();\n            this.tokenListObserver.stop();\n            delete this.tokenListObserver;\n        }\n    }\n    tokenMatched({ element, content: name }) {\n        if (this.scope.containsElement(element)) {\n            this.connectTarget(element, name);\n        }\n    }\n    tokenUnmatched({ element, content: name }) {\n        this.disconnectTarget(element, name);\n    }\n    connectTarget(element, name) {\n        var _a;\n        if (!this.targetsByName.has(name, element)) {\n            this.targetsByName.add(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n        }\n    }\n    disconnectTarget(element, name) {\n        var _a;\n        if (this.targetsByName.has(name, element)) {\n            this.targetsByName.delete(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n        }\n    }\n    disconnectAllTargets() {\n        for (const name of this.targetsByName.keys) {\n            for (const element of this.targetsByName.getValuesForKey(name)) {\n                this.disconnectTarget(element, name);\n            }\n        }\n    }\n    get attributeName() {\n        return `data-${this.context.identifier}-target`;\n    }\n    get element() {\n        return this.context.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return Array.from(ancestors.reduce((values, constructor) => {\n        getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n        return values;\n    }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return ancestors.reduce((pairs, constructor) => {\n        pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n        return pairs;\n    }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n    const ancestors = [];\n    while (constructor) {\n        ancestors.push(constructor);\n        constructor = Object.getPrototypeOf(constructor);\n    }\n    return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n    constructor(context, delegate) {\n        this.started = false;\n        this.context = context;\n        this.delegate = delegate;\n        this.outletsByName = new Multimap();\n        this.outletElementsByName = new Multimap();\n        this.selectorObserverMap = new Map();\n        this.attributeObserverMap = new Map();\n    }\n    start() {\n        if (!this.started) {\n            this.outletDefinitions.forEach((outletName) => {\n                this.setupSelectorObserverForOutlet(outletName);\n                this.setupAttributeObserverForOutlet(outletName);\n            });\n            this.started = true;\n            this.dependentContexts.forEach((context) => context.refresh());\n        }\n    }\n    refresh() {\n        this.selectorObserverMap.forEach((observer) => observer.refresh());\n        this.attributeObserverMap.forEach((observer) => observer.refresh());\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.disconnectAllOutlets();\n            this.stopSelectorObservers();\n            this.stopAttributeObservers();\n        }\n    }\n    stopSelectorObservers() {\n        if (this.selectorObserverMap.size > 0) {\n            this.selectorObserverMap.forEach((observer) => observer.stop());\n            this.selectorObserverMap.clear();\n        }\n    }\n    stopAttributeObservers() {\n        if (this.attributeObserverMap.size > 0) {\n            this.attributeObserverMap.forEach((observer) => observer.stop());\n            this.attributeObserverMap.clear();\n        }\n    }\n    selectorMatched(element, _selector, { outletName }) {\n        const outlet = this.getOutlet(element, outletName);\n        if (outlet) {\n            this.connectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorUnmatched(element, _selector, { outletName }) {\n        const outlet = this.getOutletFromMap(element, outletName);\n        if (outlet) {\n            this.disconnectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorMatchElement(element, { outletName }) {\n        const selector = this.selector(outletName);\n        const hasOutlet = this.hasOutlet(element, outletName);\n        const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n        if (selector) {\n            return hasOutlet && hasOutletController && element.matches(selector);\n        }\n        else {\n            return false;\n        }\n    }\n    elementMatchedAttribute(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    elementAttributeValueChanged(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    elementUnmatchedAttribute(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    connectOutlet(outlet, element, outletName) {\n        var _a;\n        if (!this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.add(outletName, outlet);\n            this.outletElementsByName.add(outletName, element);\n            (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n        }\n    }\n    disconnectOutlet(outlet, element, outletName) {\n        var _a;\n        if (this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.delete(outletName, outlet);\n            this.outletElementsByName.delete(outletName, element);\n            (_a = this.selectorObserverMap\n                .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n        }\n    }\n    disconnectAllOutlets() {\n        for (const outletName of this.outletElementsByName.keys) {\n            for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n                for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n                    this.disconnectOutlet(outlet, element, outletName);\n                }\n            }\n        }\n    }\n    updateSelectorObserverForOutlet(outletName) {\n        const observer = this.selectorObserverMap.get(outletName);\n        if (observer) {\n            observer.selector = this.selector(outletName);\n        }\n    }\n    setupSelectorObserverForOutlet(outletName) {\n        const selector = this.selector(outletName);\n        const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n        this.selectorObserverMap.set(outletName, selectorObserver);\n        selectorObserver.start();\n    }\n    setupAttributeObserverForOutlet(outletName) {\n        const attributeName = this.attributeNameForOutletName(outletName);\n        const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n        this.attributeObserverMap.set(outletName, attributeObserver);\n        attributeObserver.start();\n    }\n    selector(outletName) {\n        return this.scope.outlets.getSelectorForOutletName(outletName);\n    }\n    attributeNameForOutletName(outletName) {\n        return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n    }\n    getOutletNameFromOutletAttributeName(attributeName) {\n        return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n    }\n    get outletDependencies() {\n        const dependencies = new Multimap();\n        this.router.modules.forEach((module) => {\n            const constructor = module.definition.controllerConstructor;\n            const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n            outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n        });\n        return dependencies;\n    }\n    get outletDefinitions() {\n        return this.outletDependencies.getKeysForValue(this.identifier);\n    }\n    get dependentControllerIdentifiers() {\n        return this.outletDependencies.getValuesForKey(this.identifier);\n    }\n    get dependentContexts() {\n        const identifiers = this.dependentControllerIdentifiers;\n        return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n    }\n    hasOutlet(element, outletName) {\n        return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n    }\n    getOutlet(element, outletName) {\n        return this.application.getControllerForElementAndIdentifier(element, outletName);\n    }\n    getOutletFromMap(element, outletName) {\n        return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get router() {\n        return this.application.router;\n    }\n}\n\nclass Context {\n    constructor(module, scope) {\n        this.logDebugActivity = (functionName, detail = {}) => {\n            const { identifier, controller, element } = this;\n            detail = Object.assign({ identifier, controller, element }, detail);\n            this.application.logDebugActivity(this.identifier, functionName, detail);\n        };\n        this.module = module;\n        this.scope = scope;\n        this.controller = new module.controllerConstructor(this);\n        this.bindingObserver = new BindingObserver(this, this.dispatcher);\n        this.valueObserver = new ValueObserver(this, this.controller);\n        this.targetObserver = new TargetObserver(this, this);\n        this.outletObserver = new OutletObserver(this, this);\n        try {\n            this.controller.initialize();\n            this.logDebugActivity(\"initialize\");\n        }\n        catch (error) {\n            this.handleError(error, \"initializing controller\");\n        }\n    }\n    connect() {\n        this.bindingObserver.start();\n        this.valueObserver.start();\n        this.targetObserver.start();\n        this.outletObserver.start();\n        try {\n            this.controller.connect();\n            this.logDebugActivity(\"connect\");\n        }\n        catch (error) {\n            this.handleError(error, \"connecting controller\");\n        }\n    }\n    refresh() {\n        this.outletObserver.refresh();\n    }\n    disconnect() {\n        try {\n            this.controller.disconnect();\n            this.logDebugActivity(\"disconnect\");\n        }\n        catch (error) {\n            this.handleError(error, \"disconnecting controller\");\n        }\n        this.outletObserver.stop();\n        this.targetObserver.stop();\n        this.valueObserver.stop();\n        this.bindingObserver.stop();\n    }\n    get application() {\n        return this.module.application;\n    }\n    get identifier() {\n        return this.module.identifier;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get dispatcher() {\n        return this.application.dispatcher;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get parentElement() {\n        return this.element.parentElement;\n    }\n    handleError(error, message, detail = {}) {\n        const { identifier, controller, element } = this;\n        detail = Object.assign({ identifier, controller, element }, detail);\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    targetConnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetConnected`, element);\n    }\n    targetDisconnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n    }\n    outletConnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n    }\n    outletDisconnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n    }\n    invokeControllerMethod(methodName, ...args) {\n        const controller = this.controller;\n        if (typeof controller[methodName] == \"function\") {\n            controller[methodName](...args);\n        }\n    }\n}\n\nfunction bless(constructor) {\n    return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n    const shadowConstructor = extend(constructor);\n    const shadowProperties = getShadowProperties(constructor.prototype, properties);\n    Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n    return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n    const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n    return blessings.reduce((blessedProperties, blessing) => {\n        const properties = blessing(constructor);\n        for (const key in properties) {\n            const descriptor = blessedProperties[key] || {};\n            blessedProperties[key] = Object.assign(descriptor, properties[key]);\n        }\n        return blessedProperties;\n    }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n    return getOwnKeys(properties).reduce((shadowProperties, key) => {\n        const descriptor = getShadowedDescriptor(prototype, properties, key);\n        if (descriptor) {\n            Object.assign(shadowProperties, { [key]: descriptor });\n        }\n        return shadowProperties;\n    }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n    const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n    const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n    if (!shadowedByValue) {\n        const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n        if (shadowingDescriptor) {\n            descriptor.get = shadowingDescriptor.get || descriptor.get;\n            descriptor.set = shadowingDescriptor.set || descriptor.set;\n        }\n        return descriptor;\n    }\n}\nconst getOwnKeys = (() => {\n    if (typeof Object.getOwnPropertySymbols == \"function\") {\n        return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n    }\n    else {\n        return Object.getOwnPropertyNames;\n    }\n})();\nconst extend = (() => {\n    function extendWithReflect(constructor) {\n        function extended() {\n            return Reflect.construct(constructor, arguments, new.target);\n        }\n        extended.prototype = Object.create(constructor.prototype, {\n            constructor: { value: extended },\n        });\n        Reflect.setPrototypeOf(extended, constructor);\n        return extended;\n    }\n    function testReflectExtension() {\n        const a = function () {\n            this.a.call(this);\n        };\n        const b = extendWithReflect(a);\n        b.prototype.a = function () { };\n        return new b();\n    }\n    try {\n        testReflectExtension();\n        return extendWithReflect;\n    }\n    catch (error) {\n        return (constructor) => class extended extends constructor {\n        };\n    }\n})();\n\nfunction blessDefinition(definition) {\n    return {\n        identifier: definition.identifier,\n        controllerConstructor: bless(definition.controllerConstructor),\n    };\n}\n\nclass Module {\n    constructor(application, definition) {\n        this.application = application;\n        this.definition = blessDefinition(definition);\n        this.contextsByScope = new WeakMap();\n        this.connectedContexts = new Set();\n    }\n    get identifier() {\n        return this.definition.identifier;\n    }\n    get controllerConstructor() {\n        return this.definition.controllerConstructor;\n    }\n    get contexts() {\n        return Array.from(this.connectedContexts);\n    }\n    connectContextForScope(scope) {\n        const context = this.fetchContextForScope(scope);\n        this.connectedContexts.add(context);\n        context.connect();\n    }\n    disconnectContextForScope(scope) {\n        const context = this.contextsByScope.get(scope);\n        if (context) {\n            this.connectedContexts.delete(context);\n            context.disconnect();\n        }\n    }\n    fetchContextForScope(scope) {\n        let context = this.contextsByScope.get(scope);\n        if (!context) {\n            context = new Context(this, scope);\n            this.contextsByScope.set(scope, context);\n        }\n        return context;\n    }\n}\n\nclass ClassMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    has(name) {\n        return this.data.has(this.getDataKey(name));\n    }\n    get(name) {\n        return this.getAll(name)[0];\n    }\n    getAll(name) {\n        const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n        return tokenize(tokenString);\n    }\n    getAttributeName(name) {\n        return this.data.getAttributeNameForKey(this.getDataKey(name));\n    }\n    getDataKey(name) {\n        return `${name}-class`;\n    }\n    get data() {\n        return this.scope.data;\n    }\n}\n\nclass DataMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.getAttribute(name);\n    }\n    set(key, value) {\n        const name = this.getAttributeNameForKey(key);\n        this.element.setAttribute(name, value);\n        return this.get(key);\n    }\n    has(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.hasAttribute(name);\n    }\n    delete(key) {\n        if (this.has(key)) {\n            const name = this.getAttributeNameForKey(key);\n            this.element.removeAttribute(name);\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    getAttributeNameForKey(key) {\n        return `data-${this.identifier}-${dasherize(key)}`;\n    }\n}\n\nclass Guide {\n    constructor(logger) {\n        this.warnedKeysByObject = new WeakMap();\n        this.logger = logger;\n    }\n    warn(object, key, message) {\n        let warnedKeys = this.warnedKeysByObject.get(object);\n        if (!warnedKeys) {\n            warnedKeys = new Set();\n            this.warnedKeysByObject.set(object, warnedKeys);\n        }\n        if (!warnedKeys.has(key)) {\n            warnedKeys.add(key);\n            this.logger.warn(message, object);\n        }\n    }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n    return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(targetName) {\n        return this.find(targetName) != null;\n    }\n    find(...targetNames) {\n        return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n    }\n    findAll(...targetNames) {\n        return targetNames.reduce((targets, targetName) => [\n            ...targets,\n            ...this.findAllTargets(targetName),\n            ...this.findAllLegacyTargets(targetName),\n        ], []);\n    }\n    findTarget(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findElement(selector);\n    }\n    findAllTargets(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector);\n    }\n    getSelectorForTargetName(targetName) {\n        const attributeName = this.schema.targetAttributeForScope(this.identifier);\n        return attributeValueContainsToken(attributeName, targetName);\n    }\n    findLegacyTarget(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.deprecate(this.scope.findElement(selector), targetName);\n    }\n    findAllLegacyTargets(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n    }\n    getLegacySelectorForTargetName(targetName) {\n        const targetDescriptor = `${this.identifier}.${targetName}`;\n        return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n    }\n    deprecate(element, targetName) {\n        if (element) {\n            const { identifier } = this;\n            const attributeName = this.schema.targetAttribute;\n            const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n            this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n                `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n        }\n        return element;\n    }\n    get guide() {\n        return this.scope.guide;\n    }\n}\n\nclass OutletSet {\n    constructor(scope, controllerElement) {\n        this.scope = scope;\n        this.controllerElement = controllerElement;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(outletName) {\n        return this.find(outletName) != null;\n    }\n    find(...outletNames) {\n        return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n    }\n    findAll(...outletNames) {\n        return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n    }\n    getSelectorForOutletName(outletName) {\n        const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n        return this.controllerElement.getAttribute(attributeName);\n    }\n    findOutlet(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        if (selector)\n            return this.findElement(selector, outletName);\n    }\n    findAllOutlets(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        return selector ? this.findAllElements(selector, outletName) : [];\n    }\n    findElement(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n    }\n    findAllElements(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName));\n    }\n    matchesElement(element, selector, outletName) {\n        const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n        return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n    }\n}\n\nclass Scope {\n    constructor(schema, element, identifier, logger) {\n        this.targets = new TargetSet(this);\n        this.classes = new ClassMap(this);\n        this.data = new DataMap(this);\n        this.containsElement = (element) => {\n            return element.closest(this.controllerSelector) === this.element;\n        };\n        this.schema = schema;\n        this.element = element;\n        this.identifier = identifier;\n        this.guide = new Guide(logger);\n        this.outlets = new OutletSet(this.documentScope, element);\n    }\n    findElement(selector) {\n        return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n    }\n    findAllElements(selector) {\n        return [\n            ...(this.element.matches(selector) ? [this.element] : []),\n            ...this.queryElements(selector).filter(this.containsElement),\n        ];\n    }\n    queryElements(selector) {\n        return Array.from(this.element.querySelectorAll(selector));\n    }\n    get controllerSelector() {\n        return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n    }\n    get isDocumentScope() {\n        return this.element === document.documentElement;\n    }\n    get documentScope() {\n        return this.isDocumentScope\n            ? this\n            : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n    }\n}\n\nclass ScopeObserver {\n    constructor(element, schema, delegate) {\n        this.element = element;\n        this.schema = schema;\n        this.delegate = delegate;\n        this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n        this.scopesByIdentifierByElement = new WeakMap();\n        this.scopeReferenceCounts = new WeakMap();\n    }\n    start() {\n        this.valueListObserver.start();\n    }\n    stop() {\n        this.valueListObserver.stop();\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    parseValueForToken(token) {\n        const { element, content: identifier } = token;\n        return this.parseValueForElementAndIdentifier(element, identifier);\n    }\n    parseValueForElementAndIdentifier(element, identifier) {\n        const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n        let scope = scopesByIdentifier.get(identifier);\n        if (!scope) {\n            scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n            scopesByIdentifier.set(identifier, scope);\n        }\n        return scope;\n    }\n    elementMatchedValue(element, value) {\n        const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n        this.scopeReferenceCounts.set(value, referenceCount);\n        if (referenceCount == 1) {\n            this.delegate.scopeConnected(value);\n        }\n    }\n    elementUnmatchedValue(element, value) {\n        const referenceCount = this.scopeReferenceCounts.get(value);\n        if (referenceCount) {\n            this.scopeReferenceCounts.set(value, referenceCount - 1);\n            if (referenceCount == 1) {\n                this.delegate.scopeDisconnected(value);\n            }\n        }\n    }\n    fetchScopesByIdentifierForElement(element) {\n        let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n        if (!scopesByIdentifier) {\n            scopesByIdentifier = new Map();\n            this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n        }\n        return scopesByIdentifier;\n    }\n}\n\nclass Router {\n    constructor(application) {\n        this.application = application;\n        this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n        this.scopesByIdentifier = new Multimap();\n        this.modulesByIdentifier = new Map();\n    }\n    get element() {\n        return this.application.element;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get logger() {\n        return this.application.logger;\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    get modules() {\n        return Array.from(this.modulesByIdentifier.values());\n    }\n    get contexts() {\n        return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n    }\n    start() {\n        this.scopeObserver.start();\n    }\n    stop() {\n        this.scopeObserver.stop();\n    }\n    loadDefinition(definition) {\n        this.unloadIdentifier(definition.identifier);\n        const module = new Module(this.application, definition);\n        this.connectModule(module);\n        const afterLoad = definition.controllerConstructor.afterLoad;\n        if (afterLoad) {\n            afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n        }\n    }\n    unloadIdentifier(identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            this.disconnectModule(module);\n        }\n    }\n    getContextForElementAndIdentifier(element, identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            return module.contexts.find((context) => context.element == element);\n        }\n    }\n    proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n        const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n        if (scope) {\n            this.scopeObserver.elementMatchedValue(scope.element, scope);\n        }\n        else {\n            console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n        }\n    }\n    handleError(error, message, detail) {\n        this.application.handleError(error, message, detail);\n    }\n    createScopeForElementAndIdentifier(element, identifier) {\n        return new Scope(this.schema, element, identifier, this.logger);\n    }\n    scopeConnected(scope) {\n        this.scopesByIdentifier.add(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.connectContextForScope(scope);\n        }\n    }\n    scopeDisconnected(scope) {\n        this.scopesByIdentifier.delete(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.disconnectContextForScope(scope);\n        }\n    }\n    connectModule(module) {\n        this.modulesByIdentifier.set(module.identifier, module);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.connectContextForScope(scope));\n    }\n    disconnectModule(module) {\n        this.modulesByIdentifier.delete(module.identifier);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.disconnectContextForScope(scope));\n    }\n}\n\nconst defaultSchema = {\n    controllerAttribute: \"data-controller\",\n    actionAttribute: \"data-action\",\n    targetAttribute: \"data-target\",\n    targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n    outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n    keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n    return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n    constructor(element = document.documentElement, schema = defaultSchema) {\n        this.logger = console;\n        this.debug = false;\n        this.logDebugActivity = (identifier, functionName, detail = {}) => {\n            if (this.debug) {\n                this.logFormattedMessage(identifier, functionName, detail);\n            }\n        };\n        this.element = element;\n        this.schema = schema;\n        this.dispatcher = new Dispatcher(this);\n        this.router = new Router(this);\n        this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n    }\n    static start(element, schema) {\n        const application = new this(element, schema);\n        application.start();\n        return application;\n    }\n    async start() {\n        await domReady();\n        this.logDebugActivity(\"application\", \"starting\");\n        this.dispatcher.start();\n        this.router.start();\n        this.logDebugActivity(\"application\", \"start\");\n    }\n    stop() {\n        this.logDebugActivity(\"application\", \"stopping\");\n        this.dispatcher.stop();\n        this.router.stop();\n        this.logDebugActivity(\"application\", \"stop\");\n    }\n    register(identifier, controllerConstructor) {\n        this.load({ identifier, controllerConstructor });\n    }\n    registerActionOption(name, filter) {\n        this.actionDescriptorFilters[name] = filter;\n    }\n    load(head, ...rest) {\n        const definitions = Array.isArray(head) ? head : [head, ...rest];\n        definitions.forEach((definition) => {\n            if (definition.controllerConstructor.shouldLoad) {\n                this.router.loadDefinition(definition);\n            }\n        });\n    }\n    unload(head, ...rest) {\n        const identifiers = Array.isArray(head) ? head : [head, ...rest];\n        identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n    }\n    get controllers() {\n        return this.router.contexts.map((context) => context.controller);\n    }\n    getControllerForElementAndIdentifier(element, identifier) {\n        const context = this.router.getContextForElementAndIdentifier(element, identifier);\n        return context ? context.controller : null;\n    }\n    handleError(error, message, detail) {\n        var _a;\n        this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n        (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n    }\n    logFormattedMessage(identifier, functionName, detail = {}) {\n        detail = Object.assign({ application: this }, detail);\n        this.logger.groupCollapsed(`${identifier} #${functionName}`);\n        this.logger.log(\"details:\", Object.assign({}, detail));\n        this.logger.groupEnd();\n    }\n}\nfunction domReady() {\n    return new Promise((resolve) => {\n        if (document.readyState == \"loading\") {\n            document.addEventListener(\"DOMContentLoaded\", () => resolve());\n        }\n        else {\n            resolve();\n        }\n    });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n    const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n    return classes.reduce((properties, classDefinition) => {\n        return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n    }, {});\n}\nfunction propertiesForClassDefinition(key) {\n    return {\n        [`${key}Class`]: {\n            get() {\n                const { classes } = this;\n                if (classes.has(key)) {\n                    return classes.get(key);\n                }\n                else {\n                    const attribute = classes.getAttributeName(key);\n                    throw new Error(`Missing attribute \"${attribute}\"`);\n                }\n            },\n        },\n        [`${key}Classes`]: {\n            get() {\n                return this.classes.getAll(key);\n            },\n        },\n        [`has${capitalize(key)}Class`]: {\n            get() {\n                return this.classes.has(key);\n            },\n        },\n    };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n    const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n    return outlets.reduce((properties, outletDefinition) => {\n        return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n    }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n    return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n    let outletController = getOutletController(controller, element, outletName);\n    if (outletController)\n        return outletController;\n    controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n    outletController = getOutletController(controller, element, outletName);\n    if (outletController)\n        return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n    const camelizedName = namespaceCamelize(name);\n    return {\n        [`${camelizedName}Outlet`]: {\n            get() {\n                const outletElement = this.outlets.find(name);\n                const selector = this.outlets.getSelectorForOutletName(name);\n                if (outletElement) {\n                    const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n                    if (outletController)\n                        return outletController;\n                    throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n                }\n                throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n            },\n        },\n        [`${camelizedName}Outlets`]: {\n            get() {\n                const outlets = this.outlets.findAll(name);\n                if (outlets.length > 0) {\n                    return outlets\n                        .map((outletElement) => {\n                        const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n                        if (outletController)\n                            return outletController;\n                        console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n                    })\n                        .filter((controller) => controller);\n                }\n                return [];\n            },\n        },\n        [`${camelizedName}OutletElement`]: {\n            get() {\n                const outletElement = this.outlets.find(name);\n                const selector = this.outlets.getSelectorForOutletName(name);\n                if (outletElement) {\n                    return outletElement;\n                }\n                else {\n                    throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n                }\n            },\n        },\n        [`${camelizedName}OutletElements`]: {\n            get() {\n                return this.outlets.findAll(name);\n            },\n        },\n        [`has${capitalize(camelizedName)}Outlet`]: {\n            get() {\n                return this.outlets.has(name);\n            },\n        },\n    };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n    const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n    return targets.reduce((properties, targetDefinition) => {\n        return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n    }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n    return {\n        [`${name}Target`]: {\n            get() {\n                const target = this.targets.find(name);\n                if (target) {\n                    return target;\n                }\n                else {\n                    throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n                }\n            },\n        },\n        [`${name}Targets`]: {\n            get() {\n                return this.targets.findAll(name);\n            },\n        },\n        [`has${capitalize(name)}Target`]: {\n            get() {\n                return this.targets.has(name);\n            },\n        },\n    };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n    const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n    const propertyDescriptorMap = {\n        valueDescriptorMap: {\n            get() {\n                return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n                    const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n                    const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n                    return Object.assign(result, { [attributeName]: valueDescriptor });\n                }, {});\n            },\n        },\n    };\n    return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n        return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n    }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n    const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n    const { key, name, reader: read, writer: write } = definition;\n    return {\n        [name]: {\n            get() {\n                const value = this.data.get(key);\n                if (value !== null) {\n                    return read(value);\n                }\n                else {\n                    return definition.defaultValue;\n                }\n            },\n            set(value) {\n                if (value === undefined) {\n                    this.data.delete(key);\n                }\n                else {\n                    this.data.set(key, write(value));\n                }\n            },\n        },\n        [`has${capitalize(name)}`]: {\n            get() {\n                return this.data.has(key) || definition.hasCustomDefaultValue;\n            },\n        },\n    };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n    return valueDescriptorForTokenAndTypeDefinition({\n        controller,\n        token,\n        typeDefinition,\n    });\n}\nfunction parseValueTypeConstant(constant) {\n    switch (constant) {\n        case Array:\n            return \"array\";\n        case Boolean:\n            return \"boolean\";\n        case Number:\n            return \"number\";\n        case Object:\n            return \"object\";\n        case String:\n            return \"string\";\n    }\n}\nfunction parseValueTypeDefault(defaultValue) {\n    switch (typeof defaultValue) {\n        case \"boolean\":\n            return \"boolean\";\n        case \"number\":\n            return \"number\";\n        case \"string\":\n            return \"string\";\n    }\n    if (Array.isArray(defaultValue))\n        return \"array\";\n    if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n        return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n    const { controller, token, typeObject } = payload;\n    const hasType = isSomething(typeObject.type);\n    const hasDefault = isSomething(typeObject.default);\n    const fullObject = hasType && hasDefault;\n    const onlyType = hasType && !hasDefault;\n    const onlyDefault = !hasType && hasDefault;\n    const typeFromObject = parseValueTypeConstant(typeObject.type);\n    const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n    if (onlyType)\n        return typeFromObject;\n    if (onlyDefault)\n        return typeFromDefaultValue;\n    if (typeFromObject !== typeFromDefaultValue) {\n        const propertyPath = controller ? `${controller}.${token}` : token;\n        throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n    }\n    if (fullObject)\n        return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n    const { controller, token, typeDefinition } = payload;\n    const typeObject = { controller, token, typeObject: typeDefinition };\n    const typeFromObject = parseValueTypeObject(typeObject);\n    const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n    const typeFromConstant = parseValueTypeConstant(typeDefinition);\n    const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n    if (type)\n        return type;\n    const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n    throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n    const constant = parseValueTypeConstant(typeDefinition);\n    if (constant)\n        return defaultValuesByType[constant];\n    const hasDefault = hasProperty(typeDefinition, \"default\");\n    const hasType = hasProperty(typeDefinition, \"type\");\n    const typeObject = typeDefinition;\n    if (hasDefault)\n        return typeObject.default;\n    if (hasType) {\n        const { type } = typeObject;\n        const constantFromType = parseValueTypeConstant(type);\n        if (constantFromType)\n            return defaultValuesByType[constantFromType];\n    }\n    return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n    const { token, typeDefinition } = payload;\n    const key = `${dasherize(token)}-value`;\n    const type = parseValueTypeDefinition(payload);\n    return {\n        type,\n        key,\n        name: camelize(key),\n        get defaultValue() {\n            return defaultValueForDefinition(typeDefinition);\n        },\n        get hasCustomDefaultValue() {\n            return parseValueTypeDefault(typeDefinition) !== undefined;\n        },\n        reader: readers[type],\n        writer: writers[type] || writers.default,\n    };\n}\nconst defaultValuesByType = {\n    get array() {\n        return [];\n    },\n    boolean: false,\n    number: 0,\n    get object() {\n        return {};\n    },\n    string: \"\",\n};\nconst readers = {\n    array(value) {\n        const array = JSON.parse(value);\n        if (!Array.isArray(array)) {\n            throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n        }\n        return array;\n    },\n    boolean(value) {\n        return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n    },\n    number(value) {\n        return Number(value.replace(/_/g, \"\"));\n    },\n    object(value) {\n        const object = JSON.parse(value);\n        if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n            throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n        }\n        return object;\n    },\n    string(value) {\n        return value;\n    },\n};\nconst writers = {\n    default: writeString,\n    array: writeJSON,\n    object: writeJSON,\n};\nfunction writeJSON(value) {\n    return JSON.stringify(value);\n}\nfunction writeString(value) {\n    return `${value}`;\n}\n\nclass Controller {\n    constructor(context) {\n        this.context = context;\n    }\n    static get shouldLoad() {\n        return true;\n    }\n    static afterLoad(_identifier, _application) {\n        return;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get targets() {\n        return this.scope.targets;\n    }\n    get outlets() {\n        return this.scope.outlets;\n    }\n    get classes() {\n        return this.scope.classes;\n    }\n    get data() {\n        return this.scope.data;\n    }\n    initialize() {\n    }\n    connect() {\n    }\n    disconnect() {\n    }\n    dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true, } = {}) {\n        const type = prefix ? `${prefix}:${eventName}` : eventName;\n        const event = new CustomEvent(type, { detail, bubbles, cancelable });\n        target.dispatchEvent(event);\n        return event;\n    }\n}\nController.blessings = [\n    ClassPropertiesBlessing,\n    TargetPropertiesBlessing,\n    ValuePropertiesBlessing,\n    OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "/* eslint-disable class-methods-use-this, no-underscore-dangle */\n\nimport get from \"lodash/get\";\nimport has from \"lodash/has\";\nimport merge from \"lodash/merge\";\n\nimport {\n  DateTime,\n  Dict,\n  FormatNumberOptions,\n  I18nOptions,\n  MissingPlaceholderHandler,\n  NullPlaceholderHandler,\n  NumberToCurrencyOptions,\n  NumberToDelimitedOptions,\n  NumberToHumanOptions,\n  NumberToHumanSizeOptions,\n  NumberToPercentageOptions,\n  NumberToRoundedOptions,\n  Numeric,\n  OnChangeHandler,\n  Scope,\n  StrftimeOptions,\n  TimeAgoInWordsOptions,\n  ToSentenceOptions,\n  TranslateOptions,\n} from \"./typing\";\nimport { Locales } from \"./Locales\";\nimport { Pluralization } from \"./Pluralization\";\nimport { MissingTranslation } from \"./MissingTranslation\";\nimport {\n  camelCaseKeys,\n  createTranslationOptions,\n  formatNumber,\n  getFullScope,\n  inferType,\n  interpolate,\n  isSet,\n  lookup,\n  numberToDelimited,\n  numberToHuman,\n  numberToHumanSize,\n  parseDate,\n  pluralize,\n  strftime,\n  timeAgoInWords,\n} from \"./helpers\";\n\nconst DEFAULT_I18N_OPTIONS: I18nOptions = {\n  defaultLocale: \"en\",\n  locale: \"en\",\n  defaultSeparator: \".\",\n  placeholder: /(?:\\{\\{|%\\{)(.*?)(?:\\}\\}?)/gm,\n  enableFallback: false,\n  missingBehavior: \"message\",\n  missingTranslationPrefix: \"\",\n\n  missingPlaceholder: (_i18n: I18n, placeholder: string): string =>\n    `[missing \"${placeholder}\" value]`,\n\n  nullPlaceholder: (\n    i18n: I18n,\n    placeholder,\n    message: string,\n    options: Dict,\n  ): string => i18n.missingPlaceholder(i18n, placeholder, message, options),\n\n  transformKey: (key: string): string => key,\n};\n\nexport class I18n {\n  private _locale: string = DEFAULT_I18N_OPTIONS.locale;\n  private _defaultLocale: string = DEFAULT_I18N_OPTIONS.defaultLocale;\n  private _version = 0;\n\n  /**\n   * List of all onChange handlers.\n   *\n   * @type {OnChangeHandler[]}\n   */\n  public onChangeHandlers: OnChangeHandler[] = [];\n\n  /**\n   * Set the default string separator. Defaults to `.`, as in\n   * `scope.translation`.\n   *\n   * @type {string}\n   */\n  public defaultSeparator: string;\n\n  /**\n   * Set if engine should fallback to the default locale when a translation is\n   * missing. Defaults to `false`.\n   *\n   * When enabled, missing translations will first be looked for in less\n   * specific versions of the requested locale and if that fails by taking them\n   * from your `I18n#defaultLocale`.\n   *\n   * @type {boolean}\n   */\n  public enableFallback: boolean;\n\n  /**\n   * The locale resolver registry.\n   *\n   * @see {@link Locales}\n   *\n   * @type {Locales}\n   */\n  public locales: Locales;\n\n  /**\n   * The pluralization behavior registry.\n   *\n   * @see {@link Pluralization}\n   *\n   * @type {Pluralization}\n   */\n  public pluralization: Pluralization;\n\n  /**\n   * Set missing translation behavior.\n   *\n   * - `message` will display a message that the translation is missing.\n   * - `guess` will try to guess the string.\n   * - `error` will raise an exception whenever a translation is not defined.\n   *\n   * See {@link MissingTranslation.register} for instructions on how to define\n   * your own behavior.\n   *\n   * @type {MissingBehavior}\n   */\n  public missingBehavior: string;\n\n  /**\n   * Return a missing placeholder message for given parameters.\n   *\n   * @type {MissingPlaceholderHandler}\n   */\n  public missingPlaceholder: MissingPlaceholderHandler;\n\n  /**\n   * If you use missingBehavior with 'message', but want to know that the string\n   * is actually missing for testing purposes, you can prefix the guessed string\n   * by setting the value here. By default, no prefix is used.\n   *\n   * @type {string}\n   */\n  public missingTranslationPrefix: string;\n\n  /**\n   * Return a placeholder message for null values. Defaults to the same behavior\n   * as `I18n.missingPlaceholder`.\n   *\n   * @type {NullPlaceholderHandler}\n   */\n  public nullPlaceholder: NullPlaceholderHandler;\n\n  /**\n   * The missing translation behavior registry.\n   *\n   * @see {@link MissingTranslation}\n   *\n   * @type {MissingTranslation}\n   */\n  public missingTranslation: MissingTranslation;\n\n  /**\n   * Set the placeholder format. Accepts `{{placeholder}}` and `%{placeholder}`.\n   *\n   * @type {RegExp}\n   */\n  public placeholder: RegExp;\n\n  /**\n   * Set the registered translations. The root key must always be the locale\n   * (and its variations with region).\n   *\n   * Remember that no events will be triggered if you change this object\n   * directly. To trigger `onchange` events, you must perform updates either\n   * using `I18n#store` or `I18n#update`.\n   *\n   * @type {Dict}\n   */\n  public translations: Dict = {};\n\n  /**\n   * Transform keys. By default, it returns the key as it is, but allows for\n   * overriding. For instance, you can set a function to receive the camelcase\n   * key, and convert it to snake case.\n   *\n   * @type {(key: string) => string}\n   */\n  public transformKey: (key: string) => string;\n\n  /**\n   * Override the interpolation function. For the default implementation, see\n   * <https://github.com/fnando/i18n/tree/main/src/helpers/interpolate.ts>\n   * @type {(i18n: I18n, message: string, options: TranslateOptions) => string}\n   */\n  public interpolate: typeof interpolate;\n\n  constructor(translations: Dict = {}, options: Partial<I18nOptions> = {}) {\n    const {\n      locale,\n      enableFallback,\n      missingBehavior,\n      missingTranslationPrefix,\n      missingPlaceholder,\n      nullPlaceholder,\n      defaultLocale,\n      defaultSeparator,\n      placeholder,\n      transformKey,\n    }: I18nOptions = {\n      ...DEFAULT_I18N_OPTIONS,\n      ...options,\n    };\n\n    this.locale = locale;\n    this.defaultLocale = defaultLocale;\n    this.defaultSeparator = defaultSeparator;\n    this.enableFallback = enableFallback;\n    this.locale = locale;\n    this.missingBehavior = missingBehavior;\n    this.missingTranslationPrefix = missingTranslationPrefix;\n    this.missingPlaceholder = missingPlaceholder;\n    this.nullPlaceholder = nullPlaceholder;\n    this.placeholder = placeholder;\n    this.pluralization = new Pluralization(this);\n    this.locales = new Locales(this);\n    this.missingTranslation = new MissingTranslation(this);\n    this.transformKey = transformKey;\n    this.interpolate = interpolate;\n\n    this.store(translations);\n  }\n\n  /**\n   * Update translations by merging them. Newest translations will override\n   * existing ones.\n   *\n   * @param {Dict} translations An object containing the translations that will\n   * be merged into existing translations.\n   *\n   * @returns {void}\n   */\n  public store(translations: Dict): void {\n    merge(this.translations, translations);\n    this.hasChanged();\n  }\n\n  /**\n   * Return the current locale, using a explicit locale set using\n   * `i18n.locale = newLocale`, the default locale set using\n   * `i18n.defaultLocale` or the fallback, which is `en`.\n   *\n   * @returns {string} The current locale.\n   */\n  public get locale(): string {\n    return this._locale || this.defaultLocale || \"en\";\n  }\n\n  /**\n   * Set the current locale explicitly.\n   *\n   * @param {string} newLocale The new locale.\n   */\n  public set locale(newLocale: string) {\n    if (typeof newLocale !== \"string\") {\n      throw new Error(\n        `Expected newLocale to be a string; got ${inferType(newLocale)}`,\n      );\n    }\n\n    const changed = this._locale !== newLocale;\n\n    this._locale = newLocale;\n\n    if (changed) {\n      this.hasChanged();\n    }\n  }\n\n  /**\n   * Return the default locale, using a explicit locale set using\n   * `i18n.defaultLocale = locale`, the default locale set using\n   * `i18n.defaultLocale` or the fallback, which is `en`.\n   *\n   * @returns {string} The current locale.\n   */\n  public get defaultLocale(): string {\n    return this._defaultLocale || \"en\";\n  }\n\n  /**\n   * Set the default locale explicitly.\n   *\n   * @param {string} newLocale The new locale.\n   */\n  public set defaultLocale(newLocale: string) {\n    if (typeof newLocale !== \"string\") {\n      throw new Error(\n        `Expected newLocale to be a string; got ${inferType(newLocale)}`,\n      );\n    }\n\n    const changed = this._defaultLocale !== newLocale;\n\n    this._defaultLocale = newLocale;\n\n    if (changed) {\n      this.hasChanged();\n    }\n  }\n\n  /**\n   * Translate the given scope with the provided options.\n   *\n   * @param {string|array} scope The scope that will be used.\n   *\n   * @param {TranslateOptions} options The options that will be used on the\n   * translation. Can include some special options like `defaultValue`, `count`,\n   * and `scope`. Everything else will be treated as replacement values.\n   *\n   * @param {number} options.count Enable pluralization. The returned\n   * translation will depend on the detected pluralizer.\n   *\n   * @param {any} options.defaultValue The default value that will used in case\n   * the translation defined by `scope` cannot be found. Can be a function that\n   * returns a string; the signature is\n   * `(i18n:I18n, options: TranslateOptions): string`.\n   *\n   * @param {MissingBehavior|string} options.missingBehavior The missing\n   * behavior that will be used instead of the default one.\n   *\n   * @param {Dict[]} options.defaults  An array of hashs where the key is the\n   * type of translation desired, a `scope` or a `message`. The translation\n   * returned will be either the first scope recognized, or the first message\n   * defined.\n   *\n   * @returns {T | string} The translated string.\n   */\n  public translate<T = string>(\n    scope: Scope,\n    options?: TranslateOptions,\n  ): string | T {\n    options = { ...options };\n\n    const translationOptions: TranslateOptions[] = createTranslationOptions(\n      this,\n      scope,\n      options,\n    ) as TranslateOptions[];\n\n    let translation: string | Dict | undefined;\n\n    // Iterate through the translation options until a translation\n    // or message is found.\n    const hasFoundTranslation = translationOptions.some(\n      (translationOption: TranslateOptions) => {\n        if (isSet(translationOption.scope)) {\n          translation = lookup(this, translationOption.scope as Scope, options);\n        } else if (isSet(translationOption.message)) {\n          translation = translationOption.message;\n        }\n\n        return translation !== undefined && translation !== null;\n      },\n    );\n\n    if (!hasFoundTranslation) {\n      return this.missingTranslation.get(scope, options);\n    }\n\n    if (typeof translation === \"string\") {\n      translation = this.interpolate(this, translation, options);\n    } else if (\n      typeof translation === \"object\" &&\n      translation &&\n      isSet(options.count)\n    ) {\n      translation = pluralize({\n        i18n: this,\n        count: options.count || 0,\n        scope: translation as unknown as string,\n        options,\n        baseScope: getFullScope(this, scope, options),\n      });\n    }\n\n    if (options && translation instanceof Array) {\n      translation = translation.map((entry) =>\n        typeof entry === \"string\"\n          ? interpolate(this, entry, options as TranslateOptions)\n          : entry,\n      );\n    }\n\n    return translation as string | T;\n  }\n\n  /**\n   * Alias for {@link translate}.\n   */\n  public t = this.translate;\n\n  /**\n   * Pluralize the given scope using the `count` value. The pluralized\n   * translation may have other placeholders, which will be retrieved from\n   * `options`.\n   *\n   * @param {number} count The counting number.\n   *\n   * @param {Scope} scope The translation scope.\n   *\n   * @param {TranslateOptions} options The translation options.\n   *\n   * @returns {string} The translated string.\n   */\n  public pluralize(\n    count: number,\n    scope: Scope,\n    options?: TranslateOptions,\n  ): string {\n    return pluralize({\n      i18n: this,\n      count,\n      scope,\n      options: { ...options },\n      baseScope: getFullScope(this, scope, options ?? {}),\n    });\n  }\n\n  /**\n   * Alias for {@link pluralize}.\n   */\n  public p = this.pluralize;\n\n  /**\n   * Localize several values.\n   *\n   * You can provide the following scopes: `currency`, `number`, or\n   * `percentage`. If you provide a scope that matches the `/^(date|time)/`\n   * regular expression then the `value` will be converted by using the\n   * `I18n.toTime` function. It will default to the value's `toString` function.\n   *\n   * If value is either `null` or `undefined` then an empty string will be\n   * returned, regardless of what localization type has been used.\n   *\n   * @param {string} type The localization type.\n   *\n   * @param {string|number|Date} value The value that must be localized.\n   *\n   * @param {Dict} options The localization options.\n   *\n   * @returns {string} The localized string.\n   */\n  public localize(\n    type: string,\n    value: string | number | Date | null | undefined,\n    options?: Dict,\n  ): string {\n    options = { ...options };\n\n    if (value === undefined || value === null) {\n      return \"\";\n    }\n\n    switch (type) {\n      case \"currency\":\n        return this.numberToCurrency(value as number);\n\n      case \"number\":\n        return formatNumber(value as number, {\n          delimiter: \",\",\n          precision: 3,\n          separator: \".\",\n          significant: false,\n          stripInsignificantZeros: false,\n          ...lookup(this, \"number.format\"),\n        });\n\n      case \"percentage\":\n        return this.numberToPercentage(value as number);\n\n      default: {\n        let localizedValue: string;\n\n        if (type.match(/^(date|time)/)) {\n          localizedValue = this.toTime(type, value as DateTime);\n        } else {\n          localizedValue = (value as string | number | Date).toString();\n        }\n\n        return interpolate(this, localizedValue, options);\n      }\n    }\n  }\n\n  /**\n   * Alias for {@link localize}.\n   */\n  public l = this.localize;\n\n  /**\n   * Convert the given dateString into a formatted date.\n   *\n   * @param {scope} scope The formatting scope.\n   *\n   * @param {DateTime} input The string that must be parsed into a Date object.\n   *\n   * @returns {string} The formatted date.\n   */\n  public toTime(scope: Scope, input: DateTime): string {\n    const date = parseDate(input);\n    const format: string = lookup(this, scope);\n\n    if (date.toString().match(/invalid/i)) {\n      return date.toString();\n    }\n\n    if (!format) {\n      return date.toString();\n    }\n\n    return this.strftime(date, format);\n  }\n\n  /**\n   * Formats a `number` into a currency string (e.g., $13.65). You can customize\n   * the format in the using an `options` object.\n   *\n   * The currency unit and number formatting of the current locale will be used\n   * unless otherwise specified in the provided options. No currency conversion\n   * is performed. If the user is given a way to change their locale, they will\n   * also be able to change the relative value of the currency displayed with\n   * this helper.\n   *\n   * @example\n   * ```js\n   * i18n.numberToCurrency(1234567890.5);\n   * // => \"$1,234,567,890.50\"\n   *\n   * i18n.numberToCurrency(1234567890.506);\n   * // => \"$1,234,567,890.51\"\n   *\n   * i18n.numberToCurrency(1234567890.506, { precision: 3 });\n   * // => \"$1,234,567,890.506\"\n   *\n   * i18n.numberToCurrency(\"123a456\");\n   * // => \"$123a456\"\n   *\n   * i18n.numberToCurrency(\"123a456\", { raise: true });\n   * // => raises exception (\"123a456\" is not a valid numeric value)\n   *\n   * i18n.numberToCurrency(-0.456789, { precision: 0 });\n   * // => \"$0\"\n   *\n   * i18n.numberToCurrency(-1234567890.5, { negativeFormat: \"(%u%n)\" });\n   * // => \"($1,234,567,890.50)\"\n   *\n   * i18n.numberToCurrency(1234567890.5, {\n   *   unit: \"&pound;\",\n   *   separator: \",\",\n   *   delimiter: \"\",\n   * });\n   * // => \"&pound;1234567890,50\"\n   *\n   * i18n.numberToCurrency(1234567890.5, {\n   *   unit: \"&pound;\",\n   *   separator: \",\",\n   *   delimiter: \"\",\n   *   format: \"%n %u\",\n   * });\n   * // => \"1234567890,50 &pound;\"\n   *\n   * i18n.numberToCurrency(1234567890.5, { stripInsignificantZeros: true });\n   * // => \"$1,234,567,890.5\"\n   *\n   * i18n.numberToCurrency(1234567890.5, { precision: 0, roundMode: \"up\" });\n   * // => \"$1,234,567,891\"\n   * ```\n   *\n   * @param {Numeric} input  The number to be formatted.\n   *\n   * @param {NumberToCurrencyOptions} options The formatting options. When\n   * defined, supersedes the default options defined by `number.format` and\n   * `number.currency.*`.\n   *\n   * @param {number} options.precision Sets the level of precision (defaults to\n   * 2).\n   *\n   * @param {RoundingMode} options.roundMode Determine how rounding is performed\n   * (defaults to `default`.)\n   *\n   * @param {string} options.unit Sets the denomination of the currency\n   * (defaults to \"$\").\n   *\n   * @param {string} options.separator Sets the separator between the units\n   * (defaults to \".\").\n   *\n   * @param {string} options.delimiter Sets the thousands delimiter\n   * (defaults to \",\").\n   *\n   * @param {string} options.format Sets the format for non-negative numbers\n   * (defaults to \"%u%n\"). Fields are `%u` for the currency, and `%n` for the\n   * number.\n   *\n   * @param {string} options.negativeFormat Sets the format for negative numbers\n   * (defaults to prepending a hyphen to the formatted number given by\n   * `format`). Accepts the same fields than `format`, except `%n` is here the\n   * absolute value of the number.\n   *\n   * @param {boolean} options.stripInsignificantZeros If `true` removes\n   * insignificant zeros after the decimal separator (defaults to `false`).\n   *\n   * @param {boolean} options.raise If `true`, raises exception for non-numeric\n   * values like `NaN` and infinite values.\n   *\n   * @returns {string} The formatted number.\n   */\n  public numberToCurrency(\n    input: Numeric,\n    options: Partial<NumberToCurrencyOptions> = {},\n  ): string {\n    return formatNumber(input, {\n      delimiter: \",\",\n      format: \"%u%n\",\n      precision: 2,\n      separator: \".\",\n      significant: false,\n      stripInsignificantZeros: false,\n      unit: \"$\",\n      ...camelCaseKeys<Partial<FormatNumberOptions>>(this.get(\"number.format\")),\n      ...camelCaseKeys<Partial<NumberToCurrencyOptions>>(\n        this.get(\"number.currency.format\"),\n      ),\n      ...options,\n    } as FormatNumberOptions);\n  }\n\n  /**\n   * Convert a number into a formatted percentage value.\n   *\n   * @example\n   * ```js\n   * i18n.numberToPercentage(100);\n   * // => \"100.000%\"\n   *\n   * i18n.numberToPercentage(\"98\");\n   * // => \"98.000%\"\n   *\n   * i18n.numberToPercentage(100, { precision: 0 });\n   * // => \"100%\"\n   *\n   * i18n.numberToPercentage(1000, { delimiter: \".\", separator: \",\" });\n   * // => \"1.000,000%\"\n   *\n   * i18n.numberToPercentage(302.24398923423, { precision: 5 });\n   * // => \"302.24399%\"\n   *\n   * i18n.numberToPercentage(1000, { precision: null });\n   * // => \"1000%\"\n   *\n   * i18n.numberToPercentage(\"98a\");\n   * // => \"98a%\"\n   *\n   * i18n.numberToPercentage(100, { format: \"%n  %\" });\n   * // => \"100.000  %\"\n   *\n   * i18n.numberToPercentage(302.24398923423, { precision: 5, roundMode: \"down\" });\n   * // => \"302.24398%\"\n   * ```\n   *\n   * @param {Numeric} input The number to be formatted.\n   *\n   * @param {NumberToPercentageOptions} options The formatting options. When\n   * defined, supersedes the default options stored at `number.format` and\n   * `number.percentage.*`.\n   *\n   * @param {number} options.precision Sets the level of precision (defaults to\n   * 3).\n   *\n   * @param {RoundingMode} options.roundMode Determine how rounding is performed\n   * (defaults to `default`.)\n   *\n   * @param {string} options.separator Sets the separator between the units\n   * (defaults to \".\").\n   *\n   * @param {string} options.delimiter Sets the thousands delimiter (defaults to\n   * \"\").\n   *\n   * @param {string} options.format Sets the format for non-negative numbers\n   * (defaults to \"%n%\"). The number field is represented by `%n`.\n   *\n   * @param {string} options.negativeFormat Sets the format for negative numbers\n   * (defaults to prepending a hyphen to the formatted number given by\n   * `format`). Accepts the same fields than `format`, except `%n` is here the\n   * absolute value of the number.\n   *\n   * @param {boolean} options.stripInsignificantZeros If `true` removes\n   * insignificant zeros after the decimal separator (defaults to `false`).\n   *\n   * @returns {string} The formatted number.\n   */\n  public numberToPercentage(\n    input: Numeric,\n    options: Partial<NumberToPercentageOptions> = {},\n  ): string {\n    return formatNumber(input, {\n      delimiter: \"\",\n      format: \"%n%\",\n      precision: 3,\n      stripInsignificantZeros: false,\n      separator: \".\",\n      significant: false,\n      ...camelCaseKeys<Partial<FormatNumberOptions>>(this.get(\"number.format\")),\n      ...camelCaseKeys<Partial<NumberToPercentageOptions>>(\n        this.get(\"number.percentage.format\"),\n      ),\n      ...options,\n    } as FormatNumberOptions);\n  }\n\n  /**\n   * Convert a number into a readable size representation.\n   *\n   * @example\n   * ```js\n   * i18n.numberToHumanSize(123)\n   * // => \"123 Bytes\"\n   *\n   * i18n.numberToHumanSize(1234)\n   * // => \"1.21 KB\"\n   *\n   * i18n.numberToHumanSize(12345)\n   * // => \"12.1 KB\"\n   *\n   * i18n.numberToHumanSize(1234567)\n   * // => \"1.18 MB\"\n   *\n   * i18n.numberToHumanSize(1234567890)\n   * // => \"1.15 GB\"\n   *\n   * i18n.numberToHumanSize(1234567890123)\n   * // => \"1.12 TB\"\n   *\n   * i18n.numberToHumanSize(1234567890123456)\n   * // => \"1.1 PB\"\n   *\n   * i18n.numberToHumanSize(1234567890123456789)\n   * // => \"1.07 EB\"\n   *\n   * i18n.numberToHumanSize(1234567, {precision: 2})\n   * // => \"1.2 MB\"\n   *\n   * i18n.numberToHumanSize(483989, precision: 2)\n   * // => \"470 KB\"\n   *\n   * i18n.numberToHumanSize(483989, {precision: 2, roundMode: \"up\"})\n   * // => \"480 KB\"\n   *\n   * i18n.numberToHumanSize(1234567, {precision: 2, separator: \",\"})\n   * // => \"1,2 MB\"\n   *\n   * i18n.numberToHumanSize(1234567890123, {precision: 5})\n   * // => \"1.1228 TB\"\n   *\n   * i18n.numberToHumanSize(524288000, {precision: 5})\n   * // => \"500 MB\"\n   * ```\n   *\n   * @param {Numeric} input The number that will be formatted.\n   *\n   * @param {NumberToHumanSizeOptions} options The formatting options. When\n   * defined, supersedes the default options stored at\n   * `number.human.storage_units.*` and `number.human.format`.\n   *\n   * @param {number} options.precision Sets the precision of the number\n   * (defaults to 3).\n   *\n   * @param {RoundingMode} options.roundMode Determine how rounding is performed\n   * (defaults to `default`)\n   *\n   * @param {boolean} options.significant If `true`, precision will be the\n   * number of significant digits. If `false`, the number of fractional digits\n   * (defaults to `true`).\n   *\n   * @param {string} options.separator Sets the separator between the fractional\n   * and integer digits (defaults to \".\").\n   *\n   * @param {string} options.delimiter Sets the thousands delimiter (defaults\n   * to \"\").\n   *\n   * @param {boolean} options.stripInsignificantZeros If `true` removes\n   * insignificant zeros after the decimal separator (defaults to `true`).\n   *\n   * @returns {string} The formatted number.\n   */\n  public numberToHumanSize(\n    input: Numeric,\n    options: Partial<NumberToHumanSizeOptions> = {},\n  ): string {\n    return numberToHumanSize(this, input, {\n      delimiter: \"\",\n      precision: 3,\n      significant: true,\n      stripInsignificantZeros: true,\n      units: {\n        billion: \"Billion\",\n        million: \"Million\",\n        quadrillion: \"Quadrillion\",\n        thousand: \"Thousand\",\n        trillion: \"Trillion\",\n        unit: \"\",\n      },\n      ...camelCaseKeys<Partial<NumberToHumanSizeOptions>>(\n        this.get(\"number.human.format\"),\n      ),\n      ...camelCaseKeys<Partial<NumberToHumanSizeOptions>>(\n        this.get(\"number.human.storage_units\"),\n      ),\n      ...options,\n    } as NumberToHumanSizeOptions);\n  }\n\n  /**\n   * Convert a number into a readable representation.\n   *\n   * @example\n   * ```js\n   * i18n.numberToHuman(123);\n   * // => \"123\"\n   *\n   * i18n.numberToHuman(1234);\n   * // => \"1.23 Thousand\"\n   *\n   * i18n.numberToHuman(12345);\n   * // => \"12.3 Thousand\"\n   *\n   * i18n.numberToHuman(1234567);\n   * // => \"1.23 Million\"\n   *\n   * i18n.numberToHuman(1234567890);\n   * // => \"1.23 Billion\"\n   *\n   * i18n.numberToHuman(1234567890123);\n   * // => \"1.23 Trillion\"\n   *\n   * i18n.numberToHuman(1234567890123456);\n   * // => \"1.23 Quadrillion\"\n   *\n   * i18n.numberToHuman(1234567890123456789);\n   * // => \"1230 Quadrillion\"\n   *\n   * i18n.numberToHuman(489939, { precision: 2 });\n   * // => \"490 Thousand\"\n   *\n   * i18n.numberToHuman(489939, { precision: 4 });\n   * // => \"489.9 Thousand\"\n   *\n   * i18n.numberToHuman(489939, { precision: 2, roundMode: \"down\" });\n   * // => \"480 Thousand\"\n   *\n   * i18n.numberToHuman(1234567, { precision: 4, significant: false });\n   * // => \"1.2346 Million\"\n   *\n   * i18n.numberToHuman(1234567, {\n   *   precision: 1,\n   *   separator: \",\",\n   *   significant: false,\n   * });\n   * // => \"1,2 Million\"\n   *\n   * i18n.numberToHuman(500000000, { precision: 5 });\n   * // => \"500 Million\"\n   *\n   * i18n.numberToHuman(12345012345, { significant: false });\n   * // => \"12.345 Billion\"\n   * ```\n   *\n   * Non-significant zeros after the decimal separator are stripped out by default\n   * (set `stripInsignificantZeros` to `false` to change that):\n   *\n   * ```js\n   * i18n.numberToHuman(12.00001);\n   * // => \"12\"\n   *\n   * i18n.numberToHuman(12.00001, { stripInsignificantZeros: false });\n   * // => \"12.0\"\n   * ```\n   *\n   * You can also use your own custom unit quantifiers:\n   *\n   * ```js\n   * i18n.numberToHuman(500000, units: { unit: \"ml\", thousand: \"lt\" });\n   * // => \"500 lt\"\n   * ```\n   *\n   * If in your I18n locale you have:\n   *\n   * ```yaml\n   * ---\n   * en:\n   *   distance:\n   *     centi:\n   *       one: \"centimeter\"\n   *       other: \"centimeters\"\n   *     unit:\n   *       one: \"meter\"\n   *       other: \"meters\"\n   *     thousand:\n   *       one: \"kilometer\"\n   *       other: \"kilometers\"\n   *     billion: \"gazillion-distance\"\n   * ```\n   *\n   * Then you could do:\n   *\n   * ```js\n   * i18n.numberToHuman(543934, { units: \"distance\" });\n   * // => \"544 kilometers\"\n   *\n   * i18n.numberToHuman(54393498, { units: \"distance\" });\n   * // => \"54400 kilometers\"\n   *\n   * i18n.numberToHuman(54393498000, { units: \"distance\" });\n   * // => \"54.4 gazillion-distance\"\n   *\n   * i18n.numberToHuman(343, { units: \"distance\", precision: 1 });\n   * // => \"300 meters\"\n   *\n   * i18n.numberToHuman(1, { units: \"distance\" });\n   * // => \"1 meter\"\n   *\n   * i18n.numberToHuman(0.34, { units: \"distance\" });\n   * // => \"34 centimeters\"\n   * ```\n   *\n   * @param  {Numeric} input The number that will be formatted.\n   *\n   * @param  {NumberToHumanOptions} options The formatting options. When\n   * defined, supersedes the default options stored at `number.human.format.*`\n   * and `number.human.storage_units.*`.\n   *\n   * @param {number} options.precision Sets the precision of the number\n   * (defaults to 3).\n   *\n   * @param {RoundingMode} options.roundMode Determine how rounding is performed\n   * (defaults to `default`).\n   *\n   * @param {boolean} options.significant If `true`, precision will be the\n   * number of significant_digits. If `false`, the number of fractional digits\n   * (defaults to `true`)\n   *\n   * @param {string} options.separator Sets the separator between the fractional\n   * and integer digits (defaults to \".\").\n   *\n   * @param {string} options.delimiter Sets the thousands delimiter\n   * (defaults to \"\").\n   *\n   * @param {boolean} options.stripInsignificantZeros If `true` removes\n   * insignificant zeros after the decimal separator (defaults to `true`).\n   *\n   * @param {Dict} options.units A Hash of unit quantifier names. Or a string\n   * containing an I18n scope where to find this object. It might have the\n   * following keys:\n   *\n   * - _integers_: `unit`, `ten`, `hundred`, `thousand`, `million`, `billion`,\n   *   `trillion`, `quadrillion`\n   * - _fractionals_: `deci`, `centi`, `mili`, `micro`, `nano`, `pico`, `femto`\n   *\n   * @param {string} options.format Sets the format of the output string\n   * (defaults to \"%n %u\"). The field types are:\n   *\n   * - `%u` - The quantifier (ex.: 'thousand')\n   * - `%n` - The number\n   *\n   * @returns {string} The formatted number.\n   */\n  public numberToHuman(\n    input: Numeric,\n    options: Partial<NumberToHumanOptions> = {},\n  ): string {\n    return numberToHuman(this, input, {\n      delimiter: \"\",\n      separator: \".\",\n      precision: 3,\n      significant: true,\n      stripInsignificantZeros: true,\n      format: \"%n %u\",\n      roundMode: \"default\",\n      units: {\n        billion: \"Billion\",\n        million: \"Million\",\n        quadrillion: \"Quadrillion\",\n        thousand: \"Thousand\",\n        trillion: \"Trillion\",\n        unit: \"\",\n      },\n      ...camelCaseKeys<Partial<NumberToHumanOptions>>(\n        this.get(\"number.format\"),\n      ),\n      ...camelCaseKeys<Partial<NumberToHumanOptions>>(\n        this.get(\"number.human.format\"),\n      ),\n      ...camelCaseKeys<Partial<NumberToHumanOptions>>(\n        this.get(\"number.human.decimal_units\"),\n      ),\n      ...options,\n    } as NumberToHumanOptions);\n  }\n\n  /**\n   * Convert number to a formatted rounded value.\n   *\n   * @example\n   * ```js\n   * i18n.numberToRounded(111.2345);\n   * // => \"111.235\"\n   *\n   * i18n.numberToRounded(111.2345, { precision: 2 });\n   * // => \"111.23\"\n   *\n   * i18n.numberToRounded(13, { precision: 5 });\n   * // => \"13.00000\"\n   *\n   * i18n.numberToRounded(389.32314, { precision: 0 });\n   * // => \"389\"\n   *\n   * i18n.numberToRounded(111.2345, { significant: true });\n   * // => \"111\"\n   *\n   * i18n.numberToRounded(111.2345, { precision: 1, significant: true });\n   * // => \"100\"\n   *\n   * i18n.numberToRounded(13, { precision: 5, significant: true });\n   * // => \"13.000\"\n   *\n   * i18n.numberToRounded(13, { precision: null });\n   * // => \"13\"\n   *\n   * i18n.numberToRounded(389.32314, { precision: 0, roundMode: \"up\" });\n   * // => \"390\"\n   *\n   * i18n.numberToRounded(13, {\n   *   precision: 5,\n   *   significant: true,\n   *   stripInsignificantZeros: true,\n   * });\n   * // => \"13\"\n   *\n   * i18n.numberToRounded(389.32314, { precision: 4, significant: true });\n   * // => \"389.3\"\n   *\n   * i18n.numberToRounded(1111.2345, {\n   *   precision: 2,\n   *   separator: \",\",\n   *   delimiter: \".\",\n   * });\n   * // => \"1.111,23\"\n   * ```\n   *\n   * @param {Numeric} input The number to be formatted.\n   *\n   * @param {NumberToRoundedOptions} options The formatting options.\n   *\n   * @param {number} options.precision  Sets the precision of the number\n   * (defaults to 3).\n   *\n   * @param {string} options.separator  Sets the separator between the\n   * fractional and integer digits (defaults to \".\").\n   *\n   * @param {RoundingMode} options.roundMode  Determine how rounding is\n   * performed.\n   *\n   * @param {boolean} options.significant  If `true`, precision will be the\n   * number of significant_digits. If `false`, the number of fractional digits\n   * (defaults to `false`).\n   *\n   * @param {boolean} options.stripInsignificantZeros If `true` removes\n   * insignificant zeros after the decimal separator (defaults to `false`).\n   *\n   * @returns {string} The formatted number.\n   */\n  public numberToRounded(\n    input: Numeric,\n    options?: Partial<NumberToRoundedOptions>,\n  ): string {\n    return formatNumber(input, {\n      unit: \"\",\n      precision: 3,\n      significant: false,\n      separator: \".\",\n      delimiter: \"\",\n      stripInsignificantZeros: false,\n      ...options,\n    } as FormatNumberOptions);\n  }\n\n  /**\n   * Formats a +number+ with grouped thousands using `delimiter` (e.g., 12,324).\n   * You can customize the format in the `options` parameter.\n   *\n   * @example\n   * ```js\n   * i18n.numberToDelimited(12345678);\n   * // => \"12,345,678\"\n   *\n   * i18n.numberToDelimited(\"123456\");\n   * // => \"123,456\"\n   *\n   * i18n.numberToDelimited(12345678.05);\n   * // => \"12,345,678.05\"\n   *\n   * i18n.numberToDelimited(12345678, { delimiter: \".\" });\n   * // => \"12.345.678\"\n   *\n   * i18n.numberToDelimited(12345678, { delimiter: \",\" });\n   * // => \"12,345,678\"\n   *\n   * i18n.numberToDelimited(12345678.05, { separator: \" \" });\n   * // => \"12,345,678 05\"\n   *\n   * i18n.numberToDelimited(\"112a\");\n   * // => \"112a\"\n   *\n   * i18n.numberToDelimited(98765432.98, { delimiter: \" \", separator: \",\" });\n   * // => \"98 765 432,98\"\n   *\n   * i18n.numberToDelimited(\"123456.78\", {\n   *   delimiterPattern: /(\\d+?)(?=(\\d\\d)+(\\d)(?!\\d))/g,\n   * });\n   * // => \"1,23,456.78\"\n   * ```\n   *\n   * @param {Numeric} input The numeric value that will be formatted.\n   *\n   * @param {NumberToDelimitedOptions} options The formatting options.\n   *\n   * @param {string} options.delimiter Sets the thousands delimiter (defaults to\n   * \",\").\n   *\n   * @param {string} options.separator Sets the separator between the fractional\n   * and integer digits (defaults to \".\").\n   *\n   * @param {RegExp} options.delimiterPattern Sets a custom regular expression\n   * used for deriving the placement of delimiter. Helpful when using currency\n   * formats like INR.\n   *\n   * @return {string} The formatted number.\n   */\n  public numberToDelimited(\n    input: Numeric,\n    options: Partial<NumberToDelimitedOptions> = {},\n  ): string {\n    return numberToDelimited(input, {\n      delimiterPattern: /(\\d)(?=(\\d\\d\\d)+(?!\\d))/g,\n      delimiter: \",\",\n      separator: \".\",\n      ...options,\n    } as NumberToDelimitedOptions);\n  }\n\n  /**\n   * Executes function with given locale set. The locale will be changed only\n   * during the `callback`'s execution, switching back to the previous value\n   * once it finishes (with or without errors).\n   *\n   * This is an asynchronous call, which means you must use `await` or you may\n   * end up with a race condition.\n   *\n   * @example\n   * ```js\n   * await i18n.withLocale(\"pt\", () => {\n   *   console.log(i18n.t(\"hello\"));\n   * });\n   * ```\n   *\n   * @param {string} locale The temporary locale that will be set during the\n   * function's execution.\n   *\n   * @param {Function} callback The function that will be executed with a\n   * temporary locale set.\n   *\n   * @returns {void}\n   */\n  public async withLocale(locale: string, callback: () => void): Promise<void> {\n    const originalLocale = this.locale;\n\n    try {\n      this.locale = locale;\n      await callback();\n    } finally {\n      this.locale = originalLocale;\n    }\n  }\n\n  /**\n   * Formats time according to the directives in the given format string.\n   * The directives begins with a percent (`%`) character. Any text not listed\n   * as a directive will be passed through to the output string.\n   *\n   * @see strftime\n   *\n   * @param {Date} date The date that will be formatted.\n   *\n   * @param {string} format The formatting string.\n   *\n   * @param {StrftimeOptions} options The formatting options.\n   *\n   * @returns {string}        The formatted date.\n   */\n  public strftime(\n    date: Date,\n    format: string,\n    options: Partial<StrftimeOptions> = {},\n  ): string {\n    return strftime(date, format, {\n      ...camelCaseKeys(lookup(this, \"date\")),\n      meridian: {\n        am: lookup(this, \"time.am\") || \"AM\",\n        pm: lookup(this, \"time.pm\") || \"PM\",\n      },\n      ...options,\n    });\n  }\n\n  /**\n   * You may want to update a part of your translations. This is a public\n   * interface for doing it so.\n   *\n   * If the provided path exists, it'll be replaced. Otherwise, a new node will\n   * be created. When running in strict mode, paths that doesn't already exist\n   * will raise an exception.\n   *\n   * Strict mode will also raise an exception if the override type differs from\n   * previous node type.\n   *\n   * @example\n   * ```js\n   * i18n.update(\"en.number.format\", {unit: \"%n %u\"});\n   * i18n.update(\"en.number.format\", {unit: \"%n %u\"}, true);\n   * ```\n   *\n   * @param {string} path The path that's going to be updated. It must\n   * include the language, as in `en.messages`.\n   *\n   * @param {Dict} override The new translation node.\n   *\n   * @param {boolean} options Set options.\n   *\n   * @param {boolean} options.strict Raise an exception if path doesn't already\n   * exist, or if previous node's type differs from new node's type.\n   *\n   * @returns {void}\n   */\n  public update(\n    path: string,\n    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n    override: any,\n    options: { strict: boolean } = { strict: false },\n  ): void {\n    if (options.strict && !has(this.translations, path)) {\n      throw new Error(`The path \"${path}\" is not currently defined`);\n    }\n\n    const currentNode = get(this.translations, path);\n    const currentType = inferType(currentNode);\n    const overrideType = inferType(override);\n\n    if (options.strict && currentType !== overrideType) {\n      throw new Error(\n        `The current type for \"${path}\" is \"${currentType}\", but you're trying to override it with \"${overrideType}\"`,\n      );\n    }\n\n    let newNode: unknown;\n\n    if (overrideType === \"object\") {\n      newNode = { ...currentNode, ...override };\n    } else {\n      newNode = override;\n    }\n\n    const components = path.split(this.defaultSeparator);\n    const prop = components.pop();\n    let buffer = this.translations;\n\n    for (const component of components) {\n      if (!buffer[component]) {\n        buffer[component] = {};\n      }\n\n      buffer = buffer[component];\n    }\n\n    buffer[prop as keyof typeof buffer] = newNode;\n\n    this.hasChanged();\n  }\n\n  /**\n   * Converts the array to a comma-separated sentence where the last element is\n   * joined by the connector word.\n   *\n   * @example\n   * ```js\n   * i18n.toSentence([\"apple\", \"banana\", \"pineapple\"]);\n   * //=> apple, banana, and pineapple.\n   * ```\n   *\n   * @param {any[]} items The list of items that will be joined.\n   *\n   * @param {ToSentenceOptions} options The options.\n   *\n   * @param {string} options.wordsConnector The sign or word used to join the\n   * elements in arrays with two or more elements (default: \", \").\n   *\n   * @param {string} options.twoWordsConnector The sign or word used to join the\n   * elements in arrays with two elements (default: \" and \").\n   *\n   * @param {string} options.lastWordConnector The sign or word used to join the\n   * last element in arrays with three or more elements (default: \", and \").\n   *\n   * @returns {string} The joined string.\n   */\n  public toSentence(\n    items: any[],\n    options: Partial<ToSentenceOptions> = {},\n  ): string {\n    const { wordsConnector, twoWordsConnector, lastWordConnector } = {\n      wordsConnector: \", \",\n      twoWordsConnector: \" and \",\n      lastWordConnector: \", and \",\n      ...camelCaseKeys<Partial<ToSentenceOptions>>(\n        lookup(this, \"support.array\"),\n      ),\n      ...options,\n    } as ToSentenceOptions;\n\n    const size = items.length;\n\n    switch (size) {\n      case 0:\n        return \"\";\n\n      case 1:\n        return `${items[0]}`;\n\n      case 2:\n        return items.join(twoWordsConnector);\n\n      default:\n        return [\n          items.slice(0, size - 1).join(wordsConnector),\n          lastWordConnector,\n          items[size - 1],\n        ].join(\"\");\n    }\n  }\n\n  /**\n   * Reports the approximate distance in time between two time representations.\n   *\n   * @param {DateTime} fromTime The initial time.\n   *\n   * @param {DateTime} toTime The ending time. Defaults to `Date.now()`.\n   *\n   * @param {TimeAgoInWordsOptions} options The options.\n   *\n   * @param {boolean} options.includeSeconds Pass `{includeSeconds: true}` if\n   * you want more detailed approximations when distance < 1 min, 29 secs.\n   *\n   * @param {Scope} options.scope With the scope option, you can define a custom\n   * scope to look up the translation.\n   *\n   * @returns {string} The distance in time representation.\n   */\n  public timeAgoInWords(\n    fromTime: DateTime,\n    toTime: DateTime,\n    options: TimeAgoInWordsOptions = {},\n  ): string {\n    return timeAgoInWords(this, fromTime, toTime, options);\n  }\n\n  /**\n   * Alias for {@link timeAgoInWords}.\n   */\n  public distanceOfTimeInWords = this.timeAgoInWords;\n\n  /**\n   * Add a callback that will be executed whenever locale/defaultLocale changes,\n   * or `I18n#store` / `I18n#update` is called.\n   *\n   * @param {OnChangeHandler} callback The callback that will be executed.\n   *\n   * @returns {Function} Return a function that can be used to unsubscribe the\n   *                     event handler.\n   *\n   */\n  public onChange(callback: OnChangeHandler): () => void {\n    this.onChangeHandlers.push(callback);\n\n    return () => {\n      this.onChangeHandlers.splice(this.onChangeHandlers.indexOf(callback), 1);\n    };\n  }\n\n  /**\n   * Return the change version. This value is incremented whenever `I18n#store`\n   * or `I18n#update` is called, or when `I18n#locale`/`I18n#defaultLocale` is\n   * set.\n   */\n  public get version(): number {\n    return this._version;\n  }\n\n  /**\n   * Formats a number.\n   *\n   * @param {Numeric}             input   The numeric value that will be\n   *                                      formatted.\n   * @param {FormatNumberOptions} options The formatting options. Defaults to:\n   *                                      `{\n   *                                        delimiter: \",\",\n   *                                        precision: 3,\n   *                                        separator: \".\",\n   *                                        unit: \"\",\n   *                                        format: \"%u%n\",\n   *                                        significant: false,\n   *                                        stripInsignificantZeros: false,\n   *                                      }`\n   * @return {string}                     The formatted number.\n   */\n  public formatNumber(\n    input: Numeric,\n    options: Partial<FormatNumberOptions> = {},\n  ): string {\n    options = {\n      delimiter: \",\",\n      precision: 3,\n      separator: \".\",\n      unit: \"\",\n      format: \"%u%n\",\n      significant: false,\n      stripInsignificantZeros: false,\n      ...camelCaseKeys<Partial<FormatNumberOptions>>(this.get(\"number.format\")),\n      ...options,\n    };\n\n    return formatNumber(input, options as FormatNumberOptions);\n  }\n\n  /**\n   * @param {Scope} scope The scope lookup path.\n   *\n   * @returns {any} The found scope.\n   */\n  public get(scope: Scope): any {\n    return lookup(this, scope);\n  }\n\n  /**\n   * @private\n   *\n   * @returns {void}\n   */\n  private runCallbacks(): void {\n    this.onChangeHandlers.forEach((callback) => callback(this));\n  }\n\n  /**\n   * @private\n   *\n   * @returns {void}\n   */\n  private hasChanged(): void {\n    this._version += 1;\n\n    this.runCallbacks();\n  }\n}\n", "import uniq from \"lodash/uniq\";\n\nimport { Dict, LocaleResolver } from \"./typing\";\nimport { I18n } from \"./I18n\";\n\n/**\n * The default locale resolver.\n *\n * This resolver will add `options.locale` if provided (this function receives\n * it inlined). In case nothing is set, then `i18n.locale` will be used.\n * Additionally, adds the default locale to the list if `i18n.enableFallback` is\n * set.\n *\n * Every locale added to the list will then be split apart; if `pt-BR` is the\n * locale, then the list will be returned as `[\"pt-BR\", \"pt\"]`.\n *\n * The default in case nothing is defined is `[\"en\"]`.\n *\n * @type {LocaleResolver}\n *\n * @param {I18n} i18n The I18n instance.\n *\n * @param {string} locale The locale that being analysed.\n *\n * @returns {string[]} The resolved locales.\n */\nexport const defaultLocaleResolver: LocaleResolver = (\n  i18n: I18n,\n  locale: string,\n): string[] => {\n  const locales = [];\n  const list: string[] = [];\n\n  // Handle the inline locale option that can be provided to\n  // the `I18n.t` options.\n  locales.push(locale);\n\n  // Add the current locale to the list.\n  if (!locale) {\n    locales.push(i18n.locale);\n  }\n\n  // Add the default locale if fallback strategy is enabled.\n  if (i18n.enableFallback) {\n    locales.push(i18n.defaultLocale);\n  }\n\n  // Compute each locale with its country code.\n  // So this will return an array containing both\n  // `de-DE` and `de` locales.\n  //\n  // We also need to support locales with region code (e.g. zh-Hant-TW).\n  // In that case, the list should be `[\"zh-hant-tw\", \"zh-hant\", \"zh\"]`.\n  locales\n    .filter(Boolean)\n    .map((entry) => entry.toString())\n    .forEach(function (currentLocale: string) {\n      if (!list.includes(currentLocale)) {\n        list.push(currentLocale);\n      }\n\n      if (!i18n.enableFallback) {\n        return;\n      }\n\n      const codes = currentLocale.split(\"-\");\n\n      if (codes.length === 3) {\n        list.push(`${codes[0]}-${codes[1]}`);\n      }\n\n      list.push(codes[0]);\n    });\n\n  return uniq(list);\n};\n\nexport class Locales {\n  private i18n: I18n;\n  private registry: Dict;\n\n  constructor(i18n: I18n) {\n    this.i18n = i18n;\n    this.registry = {};\n\n    this.register(\"default\", defaultLocaleResolver);\n  }\n\n  /**\n   * You can define custom rules for any locale. Just make sure you return an\n   * array containing all locales.\n   *\n   * ```js\n   * // Default the Wookie locale to English.\n   * i18n.locales.register(\"wk\",  (_i18n, locale) => {\n   *   return [\"en\"];\n   * });\n   * ```\n   *\n   * @param {string} locale The locale's name.\n   *\n   * @param {LocaleResolver|string|string[]} localeResolver The locale resolver\n   * strategy.\n   *\n   * @returns {void}\n   */\n  public register(\n    locale: string,\n    localeResolver: LocaleResolver | string | string[],\n  ): void {\n    if (typeof localeResolver !== \"function\") {\n      const result = localeResolver;\n      localeResolver = (() => result) as LocaleResolver;\n    }\n\n    this.registry[locale] = localeResolver;\n  }\n\n  /**\n   * Return a list of all locales that must be tried before returning the\n   * missing translation message. By default, this will consider the inline\n   * option, current locale and fallback locale.\n   *\n   * ```js\n   * i18n.locales.get(\"de-DE\");\n   * // [\"de-DE\", \"de\", \"en\"]\n   * ```\n   *\n   * @param {string} locale The locale query.\n   *\n   * @returns {string[]} The list of locales.\n   */\n  public get(locale: string): string[] {\n    let locales =\n      this.registry[locale] ||\n      this.registry[this.i18n.locale] ||\n      this.registry.default;\n\n    if (typeof locales === \"function\") {\n      locales = locales(this.i18n, locale);\n    }\n\n    if (!(locales instanceof Array)) {\n      locales = [locales];\n    }\n    return locales;\n  }\n}\n", "const a = (n, ord) => {\n  if (ord) return 'other';\n  return n == 1 ? 'one' : 'other';\n};\nconst b = (n, ord) => {\n  if (ord) return 'other';\n  return (n == 0 || n == 1) ? 'one' : 'other';\n};\nconst c = (n, ord) => {\n  if (ord) return 'other';\n  return n >= 0 && n <= 1 ? 'one' : 'other';\n};\nconst d = (n, ord) => {\n  const s = String(n).split('.'), v0 = !s[1];\n  if (ord) return 'other';\n  return n == 1 && v0 ? 'one' : 'other';\n};\nconst e = (n, ord) => 'other';\nconst f = (n, ord) => {\n  if (ord) return 'other';\n  return n == 1 ? 'one'\n    : n == 2 ? 'two'\n    : 'other';\n};\n\nexport const af = a;\nexport const ak = b;\nexport const am = c;\nexport const an = a;\nexport const ar = (n, ord) => {\n  const s = String(n).split('.'), t0 = Number(s[0]) == n, n100 = t0 && s[0].slice(-2);\n  if (ord) return 'other';\n  return n == 0 ? 'zero'\n    : n == 1 ? 'one'\n    : n == 2 ? 'two'\n    : (n100 >= 3 && n100 <= 10) ? 'few'\n    : (n100 >= 11 && n100 <= 99) ? 'many'\n    : 'other';\n};\nexport const ars = (n, ord) => {\n  const s = String(n).split('.'), t0 = Number(s[0]) == n, n100 = t0 && s[0].slice(-2);\n  if (ord) return 'other';\n  return n == 0 ? 'zero'\n    : n == 1 ? 'one'\n    : n == 2 ? 'two'\n    : (n100 >= 3 && n100 <= 10) ? 'few'\n    : (n100 >= 11 && n100 <= 99) ? 'many'\n    : 'other';\n};\nexport const as = (n, ord) => {\n  if (ord) return (n == 1 || n == 5 || n == 7 || n == 8 || n == 9 || n == 10) ? 'one'\n    : (n == 2 || n == 3) ? 'two'\n    : n == 4 ? 'few'\n    : n == 6 ? 'many'\n    : 'other';\n  return n >= 0 && n <= 1 ? 'one' : 'other';\n};\nexport const asa = a;\nexport const ast = d;\nexport const az = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], i10 = i.slice(-1), i100 = i.slice(-2), i1000 = i.slice(-3);\n  if (ord) return (i10 == 1 || i10 == 2 || i10 == 5 || i10 == 7 || i10 == 8) || (i100 == 20 || i100 == 50 || i100 == 70 || i100 == 80) ? 'one'\n    : (i10 == 3 || i10 == 4) || (i1000 == 100 || i1000 == 200 || i1000 == 300 || i1000 == 400 || i1000 == 500 || i1000 == 600 || i1000 == 700 || i1000 == 800 || i1000 == 900) ? 'few'\n    : i == 0 || i10 == 6 || (i100 == 40 || i100 == 60 || i100 == 90) ? 'many'\n    : 'other';\n  return n == 1 ? 'one' : 'other';\n};\nexport const bal = (n, ord) => n == 1 ? 'one' : 'other';\nexport const be = (n, ord) => {\n  const s = String(n).split('.'), t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2);\n  if (ord) return (n10 == 2 || n10 == 3) && n100 != 12 && n100 != 13 ? 'few' : 'other';\n  return n10 == 1 && n100 != 11 ? 'one'\n    : (n10 >= 2 && n10 <= 4) && (n100 < 12 || n100 > 14) ? 'few'\n    : t0 && n10 == 0 || (n10 >= 5 && n10 <= 9) || (n100 >= 11 && n100 <= 14) ? 'many'\n    : 'other';\n};\nexport const bem = a;\nexport const bez = a;\nexport const bg = a;\nexport const bho = b;\nexport const blo = (n, ord) => {\n  const s = String(n).split('.'), i = s[0];\n  if (ord) return i == 0 ? 'zero'\n    : i == 1 ? 'one'\n    : (i == 2 || i == 3 || i == 4 || i == 5 || i == 6) ? 'few'\n    : 'other';\n  return n == 0 ? 'zero'\n    : n == 1 ? 'one'\n    : 'other';\n};\nexport const bm = e;\nexport const bn = (n, ord) => {\n  if (ord) return (n == 1 || n == 5 || n == 7 || n == 8 || n == 9 || n == 10) ? 'one'\n    : (n == 2 || n == 3) ? 'two'\n    : n == 4 ? 'few'\n    : n == 6 ? 'many'\n    : 'other';\n  return n >= 0 && n <= 1 ? 'one' : 'other';\n};\nexport const bo = e;\nexport const br = (n, ord) => {\n  const s = String(n).split('.'), t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2), n1000000 = t0 && s[0].slice(-6);\n  if (ord) return 'other';\n  return n10 == 1 && n100 != 11 && n100 != 71 && n100 != 91 ? 'one'\n    : n10 == 2 && n100 != 12 && n100 != 72 && n100 != 92 ? 'two'\n    : ((n10 == 3 || n10 == 4) || n10 == 9) && (n100 < 10 || n100 > 19) && (n100 < 70 || n100 > 79) && (n100 < 90 || n100 > 99) ? 'few'\n    : n != 0 && t0 && n1000000 == 0 ? 'many'\n    : 'other';\n};\nexport const brx = a;\nexport const bs = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2);\n  if (ord) return 'other';\n  return v0 && i10 == 1 && i100 != 11 || f10 == 1 && f100 != 11 ? 'one'\n    : v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) || (f10 >= 2 && f10 <= 4) && (f100 < 12 || f100 > 14) ? 'few'\n    : 'other';\n};\nexport const ca = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], v0 = !s[1], i1000000 = i.slice(-6);\n  if (ord) return (n == 1 || n == 3) ? 'one'\n    : n == 2 ? 'two'\n    : n == 4 ? 'few'\n    : 'other';\n  return n == 1 && v0 ? 'one'\n    : i != 0 && i1000000 == 0 && v0 ? 'many'\n    : 'other';\n};\nexport const ce = a;\nexport const ceb = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i10 = i.slice(-1), f10 = f.slice(-1);\n  if (ord) return 'other';\n  return v0 && (i == 1 || i == 2 || i == 3) || v0 && i10 != 4 && i10 != 6 && i10 != 9 || !v0 && f10 != 4 && f10 != 6 && f10 != 9 ? 'one' : 'other';\n};\nexport const cgg = a;\nexport const chr = a;\nexport const ckb = a;\nexport const cs = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], v0 = !s[1];\n  if (ord) return 'other';\n  return n == 1 && v0 ? 'one'\n    : (i >= 2 && i <= 4) && v0 ? 'few'\n    : !v0 ? 'many'\n    : 'other';\n};\nexport const csw = b;\nexport const cv = (n, ord) => {\n  if (ord) return 'other';\n  return n == 0 ? 'zero'\n    : n == 1 ? 'one'\n    : 'other';\n};\nexport const cy = (n, ord) => {\n  if (ord) return (n == 0 || n == 7 || n == 8 || n == 9) ? 'zero'\n    : n == 1 ? 'one'\n    : n == 2 ? 'two'\n    : (n == 3 || n == 4) ? 'few'\n    : (n == 5 || n == 6) ? 'many'\n    : 'other';\n  return n == 0 ? 'zero'\n    : n == 1 ? 'one'\n    : n == 2 ? 'two'\n    : n == 3 ? 'few'\n    : n == 6 ? 'many'\n    : 'other';\n};\nexport const da = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], t0 = Number(s[0]) == n;\n  if (ord) return 'other';\n  return n == 1 || !t0 && (i == 0 || i == 1) ? 'one' : 'other';\n};\nexport const de = d;\nexport const doi = c;\nexport const dsb = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i100 = i.slice(-2), f100 = f.slice(-2);\n  if (ord) return 'other';\n  return v0 && i100 == 1 || f100 == 1 ? 'one'\n    : v0 && i100 == 2 || f100 == 2 ? 'two'\n    : v0 && (i100 == 3 || i100 == 4) || (f100 == 3 || f100 == 4) ? 'few'\n    : 'other';\n};\nexport const dv = a;\nexport const dz = e;\nexport const ee = a;\nexport const el = a;\nexport const en = (n, ord) => {\n  const s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2);\n  if (ord) return n10 == 1 && n100 != 11 ? 'one'\n    : n10 == 2 && n100 != 12 ? 'two'\n    : n10 == 3 && n100 != 13 ? 'few'\n    : 'other';\n  return n == 1 && v0 ? 'one' : 'other';\n};\nexport const eo = a;\nexport const es = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], v0 = !s[1], i1000000 = i.slice(-6);\n  if (ord) return 'other';\n  return n == 1 ? 'one'\n    : i != 0 && i1000000 == 0 && v0 ? 'many'\n    : 'other';\n};\nexport const et = d;\nexport const eu = a;\nexport const fa = c;\nexport const ff = (n, ord) => {\n  if (ord) return 'other';\n  return n >= 0 && n < 2 ? 'one' : 'other';\n};\nexport const fi = d;\nexport const fil = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i10 = i.slice(-1), f10 = f.slice(-1);\n  if (ord) return n == 1 ? 'one' : 'other';\n  return v0 && (i == 1 || i == 2 || i == 3) || v0 && i10 != 4 && i10 != 6 && i10 != 9 || !v0 && f10 != 4 && f10 != 6 && f10 != 9 ? 'one' : 'other';\n};\nexport const fo = a;\nexport const fr = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], v0 = !s[1], i1000000 = i.slice(-6);\n  if (ord) return n == 1 ? 'one' : 'other';\n  return n >= 0 && n < 2 ? 'one'\n    : i != 0 && i1000000 == 0 && v0 ? 'many'\n    : 'other';\n};\nexport const fur = a;\nexport const fy = d;\nexport const ga = (n, ord) => {\n  const s = String(n).split('.'), t0 = Number(s[0]) == n;\n  if (ord) return n == 1 ? 'one' : 'other';\n  return n == 1 ? 'one'\n    : n == 2 ? 'two'\n    : (t0 && n >= 3 && n <= 6) ? 'few'\n    : (t0 && n >= 7 && n <= 10) ? 'many'\n    : 'other';\n};\nexport const gd = (n, ord) => {\n  const s = String(n).split('.'), t0 = Number(s[0]) == n;\n  if (ord) return (n == 1 || n == 11) ? 'one'\n    : (n == 2 || n == 12) ? 'two'\n    : (n == 3 || n == 13) ? 'few'\n    : 'other';\n  return (n == 1 || n == 11) ? 'one'\n    : (n == 2 || n == 12) ? 'two'\n    : ((t0 && n >= 3 && n <= 10) || (t0 && n >= 13 && n <= 19)) ? 'few'\n    : 'other';\n};\nexport const gl = d;\nexport const gsw = a;\nexport const gu = (n, ord) => {\n  if (ord) return n == 1 ? 'one'\n    : (n == 2 || n == 3) ? 'two'\n    : n == 4 ? 'few'\n    : n == 6 ? 'many'\n    : 'other';\n  return n >= 0 && n <= 1 ? 'one' : 'other';\n};\nexport const guw = b;\nexport const gv = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], v0 = !s[1], i10 = i.slice(-1), i100 = i.slice(-2);\n  if (ord) return 'other';\n  return v0 && i10 == 1 ? 'one'\n    : v0 && i10 == 2 ? 'two'\n    : v0 && (i100 == 0 || i100 == 20 || i100 == 40 || i100 == 60 || i100 == 80) ? 'few'\n    : !v0 ? 'many'\n    : 'other';\n};\nexport const ha = a;\nexport const haw = a;\nexport const he = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], v0 = !s[1];\n  if (ord) return 'other';\n  return i == 1 && v0 || i == 0 && !v0 ? 'one'\n    : i == 2 && v0 ? 'two'\n    : 'other';\n};\nexport const hi = (n, ord) => {\n  if (ord) return n == 1 ? 'one'\n    : (n == 2 || n == 3) ? 'two'\n    : n == 4 ? 'few'\n    : n == 6 ? 'many'\n    : 'other';\n  return n >= 0 && n <= 1 ? 'one' : 'other';\n};\nexport const hnj = e;\nexport const hr = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2);\n  if (ord) return 'other';\n  return v0 && i10 == 1 && i100 != 11 || f10 == 1 && f100 != 11 ? 'one'\n    : v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) || (f10 >= 2 && f10 <= 4) && (f100 < 12 || f100 > 14) ? 'few'\n    : 'other';\n};\nexport const hsb = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i100 = i.slice(-2), f100 = f.slice(-2);\n  if (ord) return 'other';\n  return v0 && i100 == 1 || f100 == 1 ? 'one'\n    : v0 && i100 == 2 || f100 == 2 ? 'two'\n    : v0 && (i100 == 3 || i100 == 4) || (f100 == 3 || f100 == 4) ? 'few'\n    : 'other';\n};\nexport const hu = (n, ord) => {\n  if (ord) return (n == 1 || n == 5) ? 'one' : 'other';\n  return n == 1 ? 'one' : 'other';\n};\nexport const hy = (n, ord) => {\n  if (ord) return n == 1 ? 'one' : 'other';\n  return n >= 0 && n < 2 ? 'one' : 'other';\n};\nexport const ia = d;\nexport const id = e;\nexport const ie = d;\nexport const ig = e;\nexport const ii = e;\nexport const io = d;\nexport const is = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], t = (s[1] || '').replace(/0+$/, ''), t0 = Number(s[0]) == n, i10 = i.slice(-1), i100 = i.slice(-2);\n  if (ord) return 'other';\n  return t0 && i10 == 1 && i100 != 11 || t % 10 == 1 && t % 100 != 11 ? 'one' : 'other';\n};\nexport const it = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], v0 = !s[1], i1000000 = i.slice(-6);\n  if (ord) return (n == 11 || n == 8 || n == 80 || n == 800) ? 'many' : 'other';\n  return n == 1 && v0 ? 'one'\n    : i != 0 && i1000000 == 0 && v0 ? 'many'\n    : 'other';\n};\nexport const iu = f;\nexport const ja = e;\nexport const jbo = e;\nexport const jgo = a;\nexport const jmc = a;\nexport const jv = e;\nexport const jw = e;\nexport const ka = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], i100 = i.slice(-2);\n  if (ord) return i == 1 ? 'one'\n    : i == 0 || ((i100 >= 2 && i100 <= 20) || i100 == 40 || i100 == 60 || i100 == 80) ? 'many'\n    : 'other';\n  return n == 1 ? 'one' : 'other';\n};\nexport const kab = (n, ord) => {\n  if (ord) return 'other';\n  return n >= 0 && n < 2 ? 'one' : 'other';\n};\nexport const kaj = a;\nexport const kcg = a;\nexport const kde = e;\nexport const kea = e;\nexport const kk = (n, ord) => {\n  const s = String(n).split('.'), t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1);\n  if (ord) return n10 == 6 || n10 == 9 || t0 && n10 == 0 && n != 0 ? 'many' : 'other';\n  return n == 1 ? 'one' : 'other';\n};\nexport const kkj = a;\nexport const kl = a;\nexport const km = e;\nexport const kn = c;\nexport const ko = e;\nexport const kok = (n, ord) => {\n  if (ord) return n == 1 ? 'one'\n    : (n == 2 || n == 3) ? 'two'\n    : n == 4 ? 'few'\n    : 'other';\n  return n >= 0 && n <= 1 ? 'one' : 'other';\n};\nexport const kok_Latn = (n, ord) => {\n  if (ord) return n == 1 ? 'one'\n    : (n == 2 || n == 3) ? 'two'\n    : n == 4 ? 'few'\n    : 'other';\n  return n >= 0 && n <= 1 ? 'one' : 'other';\n};\nexport const ks = a;\nexport const ksb = a;\nexport const ksh = (n, ord) => {\n  if (ord) return 'other';\n  return n == 0 ? 'zero'\n    : n == 1 ? 'one'\n    : 'other';\n};\nexport const ku = a;\nexport const kw = (n, ord) => {\n  const s = String(n).split('.'), t0 = Number(s[0]) == n, n100 = t0 && s[0].slice(-2), n1000 = t0 && s[0].slice(-3), n100000 = t0 && s[0].slice(-5), n1000000 = t0 && s[0].slice(-6);\n  if (ord) return (t0 && n >= 1 && n <= 4) || ((n100 >= 1 && n100 <= 4) || (n100 >= 21 && n100 <= 24) || (n100 >= 41 && n100 <= 44) || (n100 >= 61 && n100 <= 64) || (n100 >= 81 && n100 <= 84)) ? 'one'\n    : n == 5 || n100 == 5 ? 'many'\n    : 'other';\n  return n == 0 ? 'zero'\n    : n == 1 ? 'one'\n    : (n100 == 2 || n100 == 22 || n100 == 42 || n100 == 62 || n100 == 82) || t0 && n1000 == 0 && ((n100000 >= 1000 && n100000 <= 20000) || n100000 == 40000 || n100000 == 60000 || n100000 == 80000) || n != 0 && n1000000 == 100000 ? 'two'\n    : (n100 == 3 || n100 == 23 || n100 == 43 || n100 == 63 || n100 == 83) ? 'few'\n    : n != 1 && (n100 == 1 || n100 == 21 || n100 == 41 || n100 == 61 || n100 == 81) ? 'many'\n    : 'other';\n};\nexport const ky = a;\nexport const lag = (n, ord) => {\n  const s = String(n).split('.'), i = s[0];\n  if (ord) return 'other';\n  return n == 0 ? 'zero'\n    : (i == 0 || i == 1) && n != 0 ? 'one'\n    : 'other';\n};\nexport const lb = a;\nexport const lg = a;\nexport const lij = (n, ord) => {\n  const s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n;\n  if (ord) return (n == 11 || n == 8 || (t0 && n >= 80 && n <= 89) || (t0 && n >= 800 && n <= 899)) ? 'many' : 'other';\n  return n == 1 && v0 ? 'one' : 'other';\n};\nexport const lkt = e;\nexport const lld = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], v0 = !s[1], i1000000 = i.slice(-6);\n  if (ord) return (n == 11 || n == 8 || n == 80 || n == 800) ? 'many' : 'other';\n  return n == 1 && v0 ? 'one'\n    : i != 0 && i1000000 == 0 && v0 ? 'many'\n    : 'other';\n};\nexport const ln = b;\nexport const lo = (n, ord) => {\n  if (ord) return n == 1 ? 'one' : 'other';\n  return 'other';\n};\nexport const lt = (n, ord) => {\n  const s = String(n).split('.'), f = s[1] || '', t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2);\n  if (ord) return 'other';\n  return n10 == 1 && (n100 < 11 || n100 > 19) ? 'one'\n    : (n10 >= 2 && n10 <= 9) && (n100 < 11 || n100 > 19) ? 'few'\n    : f != 0 ? 'many'\n    : 'other';\n};\nexport const lv = (n, ord) => {\n  const s = String(n).split('.'), f = s[1] || '', v = f.length, t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2), f100 = f.slice(-2), f10 = f.slice(-1);\n  if (ord) return 'other';\n  return t0 && n10 == 0 || (n100 >= 11 && n100 <= 19) || v == 2 && (f100 >= 11 && f100 <= 19) ? 'zero'\n    : n10 == 1 && n100 != 11 || v == 2 && f10 == 1 && f100 != 11 || v != 2 && f10 == 1 ? 'one'\n    : 'other';\n};\nexport const mas = a;\nexport const mg = b;\nexport const mgo = a;\nexport const mk = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2);\n  if (ord) return i10 == 1 && i100 != 11 ? 'one'\n    : i10 == 2 && i100 != 12 ? 'two'\n    : (i10 == 7 || i10 == 8) && i100 != 17 && i100 != 18 ? 'many'\n    : 'other';\n  return v0 && i10 == 1 && i100 != 11 || f10 == 1 && f100 != 11 ? 'one' : 'other';\n};\nexport const ml = a;\nexport const mn = a;\nexport const mo = (n, ord) => {\n  const s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n, n100 = t0 && s[0].slice(-2);\n  if (ord) return n == 1 ? 'one' : 'other';\n  return n == 1 && v0 ? 'one'\n    : !v0 || n == 0 || n != 1 && (n100 >= 1 && n100 <= 19) ? 'few'\n    : 'other';\n};\nexport const mr = (n, ord) => {\n  if (ord) return n == 1 ? 'one'\n    : (n == 2 || n == 3) ? 'two'\n    : n == 4 ? 'few'\n    : 'other';\n  return n == 1 ? 'one' : 'other';\n};\nexport const ms = (n, ord) => {\n  if (ord) return n == 1 ? 'one' : 'other';\n  return 'other';\n};\nexport const mt = (n, ord) => {\n  const s = String(n).split('.'), t0 = Number(s[0]) == n, n100 = t0 && s[0].slice(-2);\n  if (ord) return 'other';\n  return n == 1 ? 'one'\n    : n == 2 ? 'two'\n    : n == 0 || (n100 >= 3 && n100 <= 10) ? 'few'\n    : (n100 >= 11 && n100 <= 19) ? 'many'\n    : 'other';\n};\nexport const my = e;\nexport const nah = a;\nexport const naq = f;\nexport const nb = a;\nexport const nd = a;\nexport const ne = (n, ord) => {\n  const s = String(n).split('.'), t0 = Number(s[0]) == n;\n  if (ord) return (t0 && n >= 1 && n <= 4) ? 'one' : 'other';\n  return n == 1 ? 'one' : 'other';\n};\nexport const nl = d;\nexport const nn = a;\nexport const nnh = a;\nexport const no = a;\nexport const nqo = e;\nexport const nr = a;\nexport const nso = b;\nexport const ny = a;\nexport const nyn = a;\nexport const om = a;\nexport const or = (n, ord) => {\n  const s = String(n).split('.'), t0 = Number(s[0]) == n;\n  if (ord) return (n == 1 || n == 5 || (t0 && n >= 7 && n <= 9)) ? 'one'\n    : (n == 2 || n == 3) ? 'two'\n    : n == 4 ? 'few'\n    : n == 6 ? 'many'\n    : 'other';\n  return n == 1 ? 'one' : 'other';\n};\nexport const os = a;\nexport const osa = e;\nexport const pa = b;\nexport const pap = a;\nexport const pcm = c;\nexport const pl = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], v0 = !s[1], i10 = i.slice(-1), i100 = i.slice(-2);\n  if (ord) return 'other';\n  return n == 1 && v0 ? 'one'\n    : v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) ? 'few'\n    : v0 && i != 1 && (i10 == 0 || i10 == 1) || v0 && (i10 >= 5 && i10 <= 9) || v0 && (i100 >= 12 && i100 <= 14) ? 'many'\n    : 'other';\n};\nexport const prg = (n, ord) => {\n  const s = String(n).split('.'), f = s[1] || '', v = f.length, t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2), f100 = f.slice(-2), f10 = f.slice(-1);\n  if (ord) return 'other';\n  return t0 && n10 == 0 || (n100 >= 11 && n100 <= 19) || v == 2 && (f100 >= 11 && f100 <= 19) ? 'zero'\n    : n10 == 1 && n100 != 11 || v == 2 && f10 == 1 && f100 != 11 || v != 2 && f10 == 1 ? 'one'\n    : 'other';\n};\nexport const ps = a;\nexport const pt = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], v0 = !s[1], i1000000 = i.slice(-6);\n  if (ord) return 'other';\n  return (i == 0 || i == 1) ? 'one'\n    : i != 0 && i1000000 == 0 && v0 ? 'many'\n    : 'other';\n};\nexport const pt_PT = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], v0 = !s[1], i1000000 = i.slice(-6);\n  if (ord) return 'other';\n  return n == 1 && v0 ? 'one'\n    : i != 0 && i1000000 == 0 && v0 ? 'many'\n    : 'other';\n};\nexport const rm = a;\nexport const ro = (n, ord) => {\n  const s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n, n100 = t0 && s[0].slice(-2);\n  if (ord) return n == 1 ? 'one' : 'other';\n  return n == 1 && v0 ? 'one'\n    : !v0 || n == 0 || n != 1 && (n100 >= 1 && n100 <= 19) ? 'few'\n    : 'other';\n};\nexport const rof = a;\nexport const ru = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], v0 = !s[1], i10 = i.slice(-1), i100 = i.slice(-2);\n  if (ord) return 'other';\n  return v0 && i10 == 1 && i100 != 11 ? 'one'\n    : v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) ? 'few'\n    : v0 && i10 == 0 || v0 && (i10 >= 5 && i10 <= 9) || v0 && (i100 >= 11 && i100 <= 14) ? 'many'\n    : 'other';\n};\nexport const rwk = a;\nexport const sah = e;\nexport const saq = a;\nexport const sat = f;\nexport const sc = (n, ord) => {\n  const s = String(n).split('.'), v0 = !s[1];\n  if (ord) return (n == 11 || n == 8 || n == 80 || n == 800) ? 'many' : 'other';\n  return n == 1 && v0 ? 'one' : 'other';\n};\nexport const scn = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], v0 = !s[1], t0 = Number(s[0]) == n, i1000000 = i.slice(-6);\n  if (ord) return (n == 11 || n == 8 || (t0 && n >= 80 && n <= 89) || (t0 && n >= 800 && n <= 899)) ? 'many' : 'other';\n  return n == 1 && v0 ? 'one'\n    : i != 0 && i1000000 == 0 && v0 ? 'many'\n    : 'other';\n};\nexport const sd = a;\nexport const sdh = a;\nexport const se = f;\nexport const seh = a;\nexport const ses = e;\nexport const sg = e;\nexport const sgs = (n, ord) => {\n  const s = String(n).split('.'), f = s[1] || '', t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2);\n  if (ord) return 'other';\n  return n10 == 1 && n100 != 11 ? 'one'\n    : n == 2 ? 'two'\n    : n != 2 && (n10 >= 2 && n10 <= 9) && (n100 < 11 || n100 > 19) ? 'few'\n    : f != 0 ? 'many'\n    : 'other';\n};\nexport const sh = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2);\n  if (ord) return 'other';\n  return v0 && i10 == 1 && i100 != 11 || f10 == 1 && f100 != 11 ? 'one'\n    : v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) || (f10 >= 2 && f10 <= 4) && (f100 < 12 || f100 > 14) ? 'few'\n    : 'other';\n};\nexport const shi = (n, ord) => {\n  const s = String(n).split('.'), t0 = Number(s[0]) == n;\n  if (ord) return 'other';\n  return n >= 0 && n <= 1 ? 'one'\n    : (t0 && n >= 2 && n <= 10) ? 'few'\n    : 'other';\n};\nexport const si = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], f = s[1] || '';\n  if (ord) return 'other';\n  return (n == 0 || n == 1) || i == 0 && f == 1 ? 'one' : 'other';\n};\nexport const sk = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], v0 = !s[1];\n  if (ord) return 'other';\n  return n == 1 && v0 ? 'one'\n    : (i >= 2 && i <= 4) && v0 ? 'few'\n    : !v0 ? 'many'\n    : 'other';\n};\nexport const sl = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], v0 = !s[1], i100 = i.slice(-2);\n  if (ord) return 'other';\n  return v0 && i100 == 1 ? 'one'\n    : v0 && i100 == 2 ? 'two'\n    : v0 && (i100 == 3 || i100 == 4) || !v0 ? 'few'\n    : 'other';\n};\nexport const sma = f;\nexport const smi = f;\nexport const smj = f;\nexport const smn = f;\nexport const sms = f;\nexport const sn = a;\nexport const so = a;\nexport const sq = (n, ord) => {\n  const s = String(n).split('.'), t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2);\n  if (ord) return n == 1 ? 'one'\n    : n10 == 4 && n100 != 14 ? 'many'\n    : 'other';\n  return n == 1 ? 'one' : 'other';\n};\nexport const sr = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2);\n  if (ord) return 'other';\n  return v0 && i10 == 1 && i100 != 11 || f10 == 1 && f100 != 11 ? 'one'\n    : v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) || (f10 >= 2 && f10 <= 4) && (f100 < 12 || f100 > 14) ? 'few'\n    : 'other';\n};\nexport const ss = a;\nexport const ssy = a;\nexport const st = a;\nexport const su = e;\nexport const sv = (n, ord) => {\n  const s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2);\n  if (ord) return (n10 == 1 || n10 == 2) && n100 != 11 && n100 != 12 ? 'one' : 'other';\n  return n == 1 && v0 ? 'one' : 'other';\n};\nexport const sw = d;\nexport const syr = a;\nexport const ta = a;\nexport const te = a;\nexport const teo = a;\nexport const th = e;\nexport const ti = b;\nexport const tig = a;\nexport const tk = (n, ord) => {\n  const s = String(n).split('.'), t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1);\n  if (ord) return (n10 == 6 || n10 == 9) || n == 10 ? 'few' : 'other';\n  return n == 1 ? 'one' : 'other';\n};\nexport const tl = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1], i10 = i.slice(-1), f10 = f.slice(-1);\n  if (ord) return n == 1 ? 'one' : 'other';\n  return v0 && (i == 1 || i == 2 || i == 3) || v0 && i10 != 4 && i10 != 6 && i10 != 9 || !v0 && f10 != 4 && f10 != 6 && f10 != 9 ? 'one' : 'other';\n};\nexport const tn = a;\nexport const to = e;\nexport const tpi = e;\nexport const tr = a;\nexport const ts = a;\nexport const tzm = (n, ord) => {\n  const s = String(n).split('.'), t0 = Number(s[0]) == n;\n  if (ord) return 'other';\n  return (n == 0 || n == 1) || (t0 && n >= 11 && n <= 99) ? 'one' : 'other';\n};\nexport const ug = a;\nexport const uk = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], v0 = !s[1], t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2), i10 = i.slice(-1), i100 = i.slice(-2);\n  if (ord) return n10 == 3 && n100 != 13 ? 'few' : 'other';\n  return v0 && i10 == 1 && i100 != 11 ? 'one'\n    : v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14) ? 'few'\n    : v0 && i10 == 0 || v0 && (i10 >= 5 && i10 <= 9) || v0 && (i100 >= 11 && i100 <= 14) ? 'many'\n    : 'other';\n};\nexport const und = e;\nexport const ur = d;\nexport const uz = a;\nexport const ve = a;\nexport const vec = (n, ord) => {\n  const s = String(n).split('.'), i = s[0], v0 = !s[1], i1000000 = i.slice(-6);\n  if (ord) return (n == 11 || n == 8 || n == 80 || n == 800) ? 'many' : 'other';\n  return n == 1 && v0 ? 'one'\n    : i != 0 && i1000000 == 0 && v0 ? 'many'\n    : 'other';\n};\nexport const vi = (n, ord) => {\n  if (ord) return n == 1 ? 'one' : 'other';\n  return 'other';\n};\nexport const vo = a;\nexport const vun = a;\nexport const wa = b;\nexport const wae = a;\nexport const wo = e;\nexport const xh = a;\nexport const xog = a;\nexport const yi = d;\nexport const yo = e;\nexport const yue = e;\nexport const zh = e;\nexport const zu = c;\n", "import { en } from \"make-plural\";\n\nimport { Dict, Pluralizer, MakePlural } from \"./typing\";\nimport { I18n } from \"./I18n\";\n\n/**\n * Creates a new pluralizer function based on [make-plural](https://github.com/eemeli/make-plural/tree/master/packages/plurals).\n *\n * @param options The options object.\n * @param options.pluralizer The make-plural function that will be wrapped.\n * @param options.includeZero When `true`, will return `zero` as the first key\n *                            for `0` pluralization.\n * @param options.ordinal When `true`, will return the scope based on\n *                        make-plural's ordinal category.\n * @returns Returns a pluralizer that can be used by I18n.\n */\nexport function useMakePlural({\n  pluralizer,\n  includeZero = true,\n  ordinal = false,\n}: {\n  pluralizer: MakePlural;\n  includeZero?: boolean;\n  ordinal?: boolean;\n}): Pluralizer {\n  return function (_i18n: I18n, count: number) {\n    return [\n      includeZero && count === 0 ? \"zero\" : \"\",\n      pluralizer(count, ordinal),\n    ].filter(Boolean);\n  };\n}\n\n/**\n * The default pluralizer.\n *\n * It's pretty straightforward:\n *\n * - when count is `0`, then the possible keys are\n * either `zero` for `other`; this allows having translations like\n * \"You have no messages\", defaulting to \"You have 0 messages\".\n * - when count is `1`, then the key is `one`.\n * - when greater than `1`, then the key is `other`.\n *\n * @type {Pluralizer}\n *\n * @param {I18n} _i18n The I18n's instance.\n *\n * @param {number} count The number that's being analyzed.\n *\n * @returns {string[]} The list of possible translation scopes.\n */\nexport const defaultPluralizer: Pluralizer = useMakePlural({\n  pluralizer: en,\n  includeZero: true,\n});\n\n/**\n * This class enables registering different strategies for pluralization, as\n * well as getting a pluralized translation.\n *\n * The default pluralization strategy is based on three counters:\n *\n * - `one`: returned when count is equal to absolute `1`.\n * - `zero`: returned when count is equal to `0`. If this translation is not\n * set, then it defaults to `other`.\n * - `other`: returned when count is different than absolute `1`.\n *\n * When calling `i18n.translate` (or its alias), pluralization rules will be\n * triggered whenever the translation options contain `count`.\n *\n * @example\n * A JSON describing the pluralization rules.\n *\n * ```json\n * {\n *   \"en\": {\n *     \"inbox\": {\n *       \"zero\": \"You have no messages\",\n *       \"one\": \"You have one message\",\n *       \"other\": \"You have %{count} messages\"\n *     }\n *   }\n * }\n * ```\n *\n * @example\n * How to get pluralized translations.\n *\n * ```js\n * i18n.t(\"inbox\", {count: 0}); // returns \"You have no messages\"\n * i18n.t(\"inbox\", {count: 1}); // returns \"You have one message\"\n * i18n.t(\"inbox\", {count: 2}); // returns \"You have 2 messages\"\n * ```\n */\nexport class Pluralization {\n  private i18n: I18n;\n  private registry: Dict;\n\n  constructor(i18n: I18n) {\n    this.i18n = i18n;\n    this.registry = {};\n\n    this.register(\"default\", defaultPluralizer);\n  }\n\n  /**\n   * Register a new pluralizer strategy.\n   *\n   * You may want to support different pluralization rules based on the locales\n   * you have to support. If you do, make sure you submit a pull request at\n   * <https://github.com/fnando/i18n> so we can distribute it. For now only\n   * Russian is distributed.\n   *\n   * The pluralizer will receive the `I18n` instance, together with `count`.\n   * Is up to the pluralizer to return a list of possible keys given that count.\n   * The Russian pluralizer, for instance, returns `one`, `few`, `many`, `other`\n   * as possible pluralization keys.\n   *\n   * You can view a complete list of pluralization rules at\n   * [unicode.org](http://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html).\n   *\n   * You can also leverage\n   * [make-plural](https://github.com/eemeli/make-plural/), rather than writing\n   * all your pluralization functions. For this, you must wrap make-plural's\n   * function by using `useMakePlural({ pluralizer, includeZero, ordinal })`:\n   *\n   * @example\n   * ```js\n   * import { ru } from \"make-plural\";\n   * import { useMakePlural } from \"i18n-js\";\n   *\n   * i18n.pluralization.register(\"ru\", useMakePlural({ pluralizer: ru }));\n   * ```\n   *\n   * @param {string} locale The locale.\n   *\n   * @param {Pluralizer} pluralizer The pluralizer function.\n   *\n   * @returns {void}\n   */\n  public register(locale: string, pluralizer: Pluralizer): void {\n    this.registry[locale] = pluralizer;\n  }\n\n  /**\n   * Returns a list of possible pluralization keys.\n   * This is defined by a chain of pluralizers, going from locale set\n   * explicitly, then the locale set through `i18n.locale`, defaulting to\n   * `defaultPluralizer`.\n   *\n   * @param  {string} locale The locale.\n   *\n   * @returns {Pluralizer} The pluralizer function.\n   */\n  public get(locale: string): Pluralizer {\n    return (\n      this.registry[locale] ||\n      this.registry[this.i18n.locale] ||\n      this.registry[\"default\"]\n    );\n  }\n}\n", "import camelCase from \"lodash/camelCase\";\n\nimport { Dict } from \"../typing\";\n\n/**\n * Shallow transform an object's keys from snake case (that's assumption) to\n * camel case.\n *\n * @private\n *\n * @param  {object} target The object that will be transformed.\n *\n * @returns {object} A new transformed object.\n */\nexport function camelCaseKeys<T = Dict>(target: unknown): T {\n  if (!target) {\n    return {} as T;\n  }\n\n  return Object.keys(target as Dict).reduce((buffer, key) => {\n    (buffer as Dict)[camelCase(key)] = (target as Dict)[key];\n    return buffer;\n  }, {} as T);\n}\n", "/**\n * Check if value is different than undefined and null.\n *\n * @private\n *\n * @param {unknown} value The inspecting value.\n *\n * @returns {boolean} Whether the value is set or not.\n */\nexport function isSet(value: unknown): boolean {\n  return value !== undefined && value !== null;\n}\n", "import { Dict, Scope, TranslateOptions } from \"../typing\";\nimport { I18n } from \"../I18n\";\nimport { isSet } from \"./isSet\";\n\n/**\n * Generate a list of translation options for default fallback.\n * `defaultValue` is also deleted from options as it is returned as part of\n * the translationOptions array.\n *\n * @private\n *\n * @param {I18n} i18n The I18n instance.\n *\n * @param {string|array} scope The translation scope.\n *\n * @param {object} options The translation options.\n *\n * @returns {array} Translation options\n */\nexport function createTranslationOptions(\n  i18n: I18n,\n  scope: Scope,\n  options: Dict,\n): TranslateOptions[] {\n  let translationOptions: Dict[] = [{ scope }];\n\n  // Defaults should be an array of hashes containing either\n  // fallback scopes or messages\n  if (isSet(options.defaults)) {\n    translationOptions = translationOptions.concat(options.defaults);\n  }\n\n  // Maintain support for defaultValue. Since it is always a message\n  // insert it in to the translation options as such.\n  if (isSet(options.defaultValue)) {\n    const message =\n      typeof options.defaultValue === \"function\"\n        ? options.defaultValue(i18n, scope, options)\n        : options.defaultValue;\n\n    translationOptions.push({ message });\n    delete options.defaultValue;\n  }\n\n  return translationOptions as unknown as TranslateOptions[];\n}\n", "/*\r\n *      bignumber.js v9.1.2\r\n *      A JavaScript library for arbitrary-precision arithmetic.\r\n *      https://github.com/MikeMcl/bignumber.js\r\n *      Copyright (c) 2022 Michael Mclaughlin <M8ch88l@gmail.com>\r\n *      MIT Licensed.\r\n *\r\n *      BigNumber.prototype methods     |  BigNumber methods\r\n *                                      |\r\n *      absoluteValue            abs    |  clone\r\n *      comparedTo                      |  config               set\r\n *      decimalPlaces            dp     |      DECIMAL_PLACES\r\n *      dividedBy                div    |      ROUNDING_MODE\r\n *      dividedToIntegerBy       idiv   |      EXPONENTIAL_AT\r\n *      exponentiatedBy          pow    |      RANGE\r\n *      integerValue                    |      CRYPTO\r\n *      isEqualTo                eq     |      MODULO_MODE\r\n *      isFinite                        |      POW_PRECISION\r\n *      isGreaterThan            gt     |      FORMAT\r\n *      isGreaterThanOrEqualTo   gte    |      ALPHABET\r\n *      isInteger                       |  isBigNumber\r\n *      isLessThan               lt     |  maximum              max\r\n *      isLessThanOrEqualTo      lte    |  minimum              min\r\n *      isNaN                           |  random\r\n *      isNegative                      |  sum\r\n *      isPositive                      |\r\n *      isZero                          |\r\n *      minus                           |\r\n *      modulo                   mod    |\r\n *      multipliedBy             times  |\r\n *      negated                         |\r\n *      plus                            |\r\n *      precision                sd     |\r\n *      shiftedBy                       |\r\n *      squareRoot               sqrt   |\r\n *      toExponential                   |\r\n *      toFixed                         |\r\n *      toFormat                        |\r\n *      toFraction                      |\r\n *      toJSON                          |\r\n *      toNumber                        |\r\n *      toPrecision                     |\r\n *      toString                        |\r\n *      valueOf                         |\r\n *\r\n */\r\n\r\n\r\nvar\r\n  isNumeric = /^-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i,\r\n  mathceil = Math.ceil,\r\n  mathfloor = Math.floor,\r\n\r\n  bignumberError = '[BigNumber Error] ',\r\n  tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ',\r\n\r\n  BASE = 1e14,\r\n  LOG_BASE = 14,\r\n  MAX_SAFE_INTEGER = 0x1fffffffffffff,         // 2^53 - 1\r\n  // MAX_INT32 = 0x7fffffff,                   // 2^31 - 1\r\n  POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],\r\n  SQRT_BASE = 1e7,\r\n\r\n  // EDITABLE\r\n  // The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and\r\n  // the arguments to toExponential, toFixed, toFormat, and toPrecision.\r\n  MAX = 1E9;                                   // 0 to MAX_INT32\r\n\r\n\r\n/*\r\n * Create and return a BigNumber constructor.\r\n */\r\nfunction clone(configObject) {\r\n  var div, convertBase, parseNumeric,\r\n    P = BigNumber.prototype = { constructor: BigNumber, toString: null, valueOf: null },\r\n    ONE = new BigNumber(1),\r\n\r\n\r\n    //----------------------------- EDITABLE CONFIG DEFAULTS -------------------------------\r\n\r\n\r\n    // The default values below must be integers within the inclusive ranges stated.\r\n    // The values can also be changed at run-time using BigNumber.set.\r\n\r\n    // The maximum number of decimal places for operations involving division.\r\n    DECIMAL_PLACES = 20,                     // 0 to MAX\r\n\r\n    // The rounding mode used when rounding to the above decimal places, and when using\r\n    // toExponential, toFixed, toFormat and toPrecision, and round (default value).\r\n    // UP         0 Away from zero.\r\n    // DOWN       1 Towards zero.\r\n    // CEIL       2 Towards +Infinity.\r\n    // FLOOR      3 Towards -Infinity.\r\n    // HALF_UP    4 Towards nearest neighbour. If equidistant, up.\r\n    // HALF_DOWN  5 Towards nearest neighbour. If equidistant, down.\r\n    // HALF_EVEN  6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n    // HALF_CEIL  7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n    // HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n    ROUNDING_MODE = 4,                       // 0 to 8\r\n\r\n    // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]\r\n\r\n    // The exponent value at and beneath which toString returns exponential notation.\r\n    // Number type: -7\r\n    TO_EXP_NEG = -7,                         // 0 to -MAX\r\n\r\n    // The exponent value at and above which toString returns exponential notation.\r\n    // Number type: 21\r\n    TO_EXP_POS = 21,                         // 0 to MAX\r\n\r\n    // RANGE : [MIN_EXP, MAX_EXP]\r\n\r\n    // The minimum exponent value, beneath which underflow to zero occurs.\r\n    // Number type: -324  (5e-324)\r\n    MIN_EXP = -1e7,                          // -1 to -MAX\r\n\r\n    // The maximum exponent value, above which overflow to Infinity occurs.\r\n    // Number type:  308  (1.7976931348623157e+308)\r\n    // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.\r\n    MAX_EXP = 1e7,                           // 1 to MAX\r\n\r\n    // Whether to use cryptographically-secure random number generation, if available.\r\n    CRYPTO = false,                          // true or false\r\n\r\n    // The modulo mode used when calculating the modulus: a mod n.\r\n    // The quotient (q = a / n) is calculated according to the corresponding rounding mode.\r\n    // The remainder (r) is calculated as: r = a - n * q.\r\n    //\r\n    // UP        0 The remainder is positive if the dividend is negative, else is negative.\r\n    // DOWN      1 The remainder has the same sign as the dividend.\r\n    //             This modulo mode is commonly known as 'truncated division' and is\r\n    //             equivalent to (a % n) in JavaScript.\r\n    // FLOOR     3 The remainder has the same sign as the divisor (Python %).\r\n    // HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.\r\n    // EUCLID    9 Euclidian division. q = sign(n) * floor(a / abs(n)).\r\n    //             The remainder is always positive.\r\n    //\r\n    // The truncated division, floored division, Euclidian division and IEEE 754 remainder\r\n    // modes are commonly used for the modulus operation.\r\n    // Although the other rounding modes can also be used, they may not give useful results.\r\n    MODULO_MODE = 1,                         // 0 to 9\r\n\r\n    // The maximum number of significant digits of the result of the exponentiatedBy operation.\r\n    // If POW_PRECISION is 0, there will be unlimited significant digits.\r\n    POW_PRECISION = 0,                       // 0 to MAX\r\n\r\n    // The format specification used by the BigNumber.prototype.toFormat method.\r\n    FORMAT = {\r\n      prefix: '',\r\n      groupSize: 3,\r\n      secondaryGroupSize: 0,\r\n      groupSeparator: ',',\r\n      decimalSeparator: '.',\r\n      fractionGroupSize: 0,\r\n      fractionGroupSeparator: '\\xA0',        // non-breaking space\r\n      suffix: ''\r\n    },\r\n\r\n    // The alphabet used for base conversion. It must be at least 2 characters long, with no '+',\r\n    // '-', '.', whitespace, or repeated character.\r\n    // '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_'\r\n    ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz',\r\n    alphabetHasNormalDecimalDigits = true;\r\n\r\n\r\n  //------------------------------------------------------------------------------------------\r\n\r\n\r\n  // CONSTRUCTOR\r\n\r\n\r\n  /*\r\n   * The BigNumber constructor and exported function.\r\n   * Create and return a new instance of a BigNumber object.\r\n   *\r\n   * v {number|string|BigNumber} A numeric value.\r\n   * [b] {number} The base of v. Integer, 2 to ALPHABET.length inclusive.\r\n   */\r\n  function BigNumber(v, b) {\r\n    var alphabet, c, caseChanged, e, i, isNum, len, str,\r\n      x = this;\r\n\r\n    // Enable constructor call without `new`.\r\n    if (!(x instanceof BigNumber)) return new BigNumber(v, b);\r\n\r\n    if (b == null) {\r\n\r\n      if (v && v._isBigNumber === true) {\r\n        x.s = v.s;\r\n\r\n        if (!v.c || v.e > MAX_EXP) {\r\n          x.c = x.e = null;\r\n        } else if (v.e < MIN_EXP) {\r\n          x.c = [x.e = 0];\r\n        } else {\r\n          x.e = v.e;\r\n          x.c = v.c.slice();\r\n        }\r\n\r\n        return;\r\n      }\r\n\r\n      if ((isNum = typeof v == 'number') && v * 0 == 0) {\r\n\r\n        // Use `1 / n` to handle minus zero also.\r\n        x.s = 1 / v < 0 ? (v = -v, -1) : 1;\r\n\r\n        // Fast path for integers, where n < 2147483648 (2**31).\r\n        if (v === ~~v) {\r\n          for (e = 0, i = v; i >= 10; i /= 10, e++);\r\n\r\n          if (e > MAX_EXP) {\r\n            x.c = x.e = null;\r\n          } else {\r\n            x.e = e;\r\n            x.c = [v];\r\n          }\r\n\r\n          return;\r\n        }\r\n\r\n        str = String(v);\r\n      } else {\r\n\r\n        if (!isNumeric.test(str = String(v))) return parseNumeric(x, str, isNum);\r\n\r\n        x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1;\r\n      }\r\n\r\n      // Decimal point?\r\n      if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n      // Exponential form?\r\n      if ((i = str.search(/e/i)) > 0) {\r\n\r\n        // Determine exponent.\r\n        if (e < 0) e = i;\r\n        e += +str.slice(i + 1);\r\n        str = str.substring(0, i);\r\n      } else if (e < 0) {\r\n\r\n        // Integer.\r\n        e = str.length;\r\n      }\r\n\r\n    } else {\r\n\r\n      // '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n      intCheck(b, 2, ALPHABET.length, 'Base');\r\n\r\n      // Allow exponential notation to be used with base 10 argument, while\r\n      // also rounding to DECIMAL_PLACES as with other bases.\r\n      if (b == 10 && alphabetHasNormalDecimalDigits) {\r\n        x = new BigNumber(v);\r\n        return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE);\r\n      }\r\n\r\n      str = String(v);\r\n\r\n      if (isNum = typeof v == 'number') {\r\n\r\n        // Avoid potential interpretation of Infinity and NaN as base 44+ values.\r\n        if (v * 0 != 0) return parseNumeric(x, str, isNum, b);\r\n\r\n        x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1;\r\n\r\n        // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n        if (BigNumber.DEBUG && str.replace(/^0\\.0*|\\./, '').length > 15) {\r\n          throw Error\r\n           (tooManyDigits + v);\r\n        }\r\n      } else {\r\n        x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1;\r\n      }\r\n\r\n      alphabet = ALPHABET.slice(0, b);\r\n      e = i = 0;\r\n\r\n      // Check that str is a valid base b number.\r\n      // Don't use RegExp, so alphabet can contain special characters.\r\n      for (len = str.length; i < len; i++) {\r\n        if (alphabet.indexOf(c = str.charAt(i)) < 0) {\r\n          if (c == '.') {\r\n\r\n            // If '.' is not the first character and it has not be found before.\r\n            if (i > e) {\r\n              e = len;\r\n              continue;\r\n            }\r\n          } else if (!caseChanged) {\r\n\r\n            // Allow e.g. hexadecimal 'FF' as well as 'ff'.\r\n            if (str == str.toUpperCase() && (str = str.toLowerCase()) ||\r\n                str == str.toLowerCase() && (str = str.toUpperCase())) {\r\n              caseChanged = true;\r\n              i = -1;\r\n              e = 0;\r\n              continue;\r\n            }\r\n          }\r\n\r\n          return parseNumeric(x, String(v), isNum, b);\r\n        }\r\n      }\r\n\r\n      // Prevent later check for length on converted number.\r\n      isNum = false;\r\n      str = convertBase(str, b, 10, x.s);\r\n\r\n      // Decimal point?\r\n      if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n      else e = str.length;\r\n    }\r\n\r\n    // Determine leading zeros.\r\n    for (i = 0; str.charCodeAt(i) === 48; i++);\r\n\r\n    // Determine trailing zeros.\r\n    for (len = str.length; str.charCodeAt(--len) === 48;);\r\n\r\n    if (str = str.slice(i, ++len)) {\r\n      len -= i;\r\n\r\n      // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n      if (isNum && BigNumber.DEBUG &&\r\n        len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) {\r\n          throw Error\r\n           (tooManyDigits + (x.s * v));\r\n      }\r\n\r\n       // Overflow?\r\n      if ((e = e - i - 1) > MAX_EXP) {\r\n\r\n        // Infinity.\r\n        x.c = x.e = null;\r\n\r\n      // Underflow?\r\n      } else if (e < MIN_EXP) {\r\n\r\n        // Zero.\r\n        x.c = [x.e = 0];\r\n      } else {\r\n        x.e = e;\r\n        x.c = [];\r\n\r\n        // Transform base\r\n\r\n        // e is the base 10 exponent.\r\n        // i is where to slice str to get the first element of the coefficient array.\r\n        i = (e + 1) % LOG_BASE;\r\n        if (e < 0) i += LOG_BASE;  // i < 1\r\n\r\n        if (i < len) {\r\n          if (i) x.c.push(+str.slice(0, i));\r\n\r\n          for (len -= LOG_BASE; i < len;) {\r\n            x.c.push(+str.slice(i, i += LOG_BASE));\r\n          }\r\n\r\n          i = LOG_BASE - (str = str.slice(i)).length;\r\n        } else {\r\n          i -= len;\r\n        }\r\n\r\n        for (; i--; str += '0');\r\n        x.c.push(+str);\r\n      }\r\n    } else {\r\n\r\n      // Zero.\r\n      x.c = [x.e = 0];\r\n    }\r\n  }\r\n\r\n\r\n  // CONSTRUCTOR PROPERTIES\r\n\r\n\r\n  BigNumber.clone = clone;\r\n\r\n  BigNumber.ROUND_UP = 0;\r\n  BigNumber.ROUND_DOWN = 1;\r\n  BigNumber.ROUND_CEIL = 2;\r\n  BigNumber.ROUND_FLOOR = 3;\r\n  BigNumber.ROUND_HALF_UP = 4;\r\n  BigNumber.ROUND_HALF_DOWN = 5;\r\n  BigNumber.ROUND_HALF_EVEN = 6;\r\n  BigNumber.ROUND_HALF_CEIL = 7;\r\n  BigNumber.ROUND_HALF_FLOOR = 8;\r\n  BigNumber.EUCLID = 9;\r\n\r\n\r\n  /*\r\n   * Configure infrequently-changing library-wide settings.\r\n   *\r\n   * Accept an object with the following optional properties (if the value of a property is\r\n   * a number, it must be an integer within the inclusive range stated):\r\n   *\r\n   *   DECIMAL_PLACES   {number}           0 to MAX\r\n   *   ROUNDING_MODE    {number}           0 to 8\r\n   *   EXPONENTIAL_AT   {number|number[]}  -MAX to MAX  or  [-MAX to 0, 0 to MAX]\r\n   *   RANGE            {number|number[]}  -MAX to MAX (not zero)  or  [-MAX to -1, 1 to MAX]\r\n   *   CRYPTO           {boolean}          true or false\r\n   *   MODULO_MODE      {number}           0 to 9\r\n   *   POW_PRECISION       {number}           0 to MAX\r\n   *   ALPHABET         {string}           A string of two or more unique characters which does\r\n   *                                       not contain '.'.\r\n   *   FORMAT           {object}           An object with some of the following properties:\r\n   *     prefix                 {string}\r\n   *     groupSize              {number}\r\n   *     secondaryGroupSize     {number}\r\n   *     groupSeparator         {string}\r\n   *     decimalSeparator       {string}\r\n   *     fractionGroupSize      {number}\r\n   *     fractionGroupSeparator {string}\r\n   *     suffix                 {string}\r\n   *\r\n   * (The values assigned to the above FORMAT object properties are not checked for validity.)\r\n   *\r\n   * E.g.\r\n   * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })\r\n   *\r\n   * Ignore properties/parameters set to null or undefined, except for ALPHABET.\r\n   *\r\n   * Return an object with the properties current values.\r\n   */\r\n  BigNumber.config = BigNumber.set = function (obj) {\r\n    var p, v;\r\n\r\n    if (obj != null) {\r\n\r\n      if (typeof obj == 'object') {\r\n\r\n        // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.\r\n        // '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}'\r\n        if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) {\r\n          v = obj[p];\r\n          intCheck(v, 0, MAX, p);\r\n          DECIMAL_PLACES = v;\r\n        }\r\n\r\n        // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.\r\n        // '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n        if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) {\r\n          v = obj[p];\r\n          intCheck(v, 0, 8, p);\r\n          ROUNDING_MODE = v;\r\n        }\r\n\r\n        // EXPONENTIAL_AT {number|number[]}\r\n        // Integer, -MAX to MAX inclusive or\r\n        // [integer -MAX to 0 inclusive, 0 to MAX inclusive].\r\n        // '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}'\r\n        if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) {\r\n          v = obj[p];\r\n          if (v && v.pop) {\r\n            intCheck(v[0], -MAX, 0, p);\r\n            intCheck(v[1], 0, MAX, p);\r\n            TO_EXP_NEG = v[0];\r\n            TO_EXP_POS = v[1];\r\n          } else {\r\n            intCheck(v, -MAX, MAX, p);\r\n            TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v);\r\n          }\r\n        }\r\n\r\n        // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or\r\n        // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].\r\n        // '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}'\r\n        if (obj.hasOwnProperty(p = 'RANGE')) {\r\n          v = obj[p];\r\n          if (v && v.pop) {\r\n            intCheck(v[0], -MAX, -1, p);\r\n            intCheck(v[1], 1, MAX, p);\r\n            MIN_EXP = v[0];\r\n            MAX_EXP = v[1];\r\n          } else {\r\n            intCheck(v, -MAX, MAX, p);\r\n            if (v) {\r\n              MIN_EXP = -(MAX_EXP = v < 0 ? -v : v);\r\n            } else {\r\n              throw Error\r\n               (bignumberError + p + ' cannot be zero: ' + v);\r\n            }\r\n          }\r\n        }\r\n\r\n        // CRYPTO {boolean} true or false.\r\n        // '[BigNumber Error] CRYPTO not true or false: {v}'\r\n        // '[BigNumber Error] crypto unavailable'\r\n        if (obj.hasOwnProperty(p = 'CRYPTO')) {\r\n          v = obj[p];\r\n          if (v === !!v) {\r\n            if (v) {\r\n              if (typeof crypto != 'undefined' && crypto &&\r\n               (crypto.getRandomValues || crypto.randomBytes)) {\r\n                CRYPTO = v;\r\n              } else {\r\n                CRYPTO = !v;\r\n                throw Error\r\n                 (bignumberError + 'crypto unavailable');\r\n              }\r\n            } else {\r\n              CRYPTO = v;\r\n            }\r\n          } else {\r\n            throw Error\r\n             (bignumberError + p + ' not true or false: ' + v);\r\n          }\r\n        }\r\n\r\n        // MODULO_MODE {number} Integer, 0 to 9 inclusive.\r\n        // '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n        if (obj.hasOwnProperty(p = 'MODULO_MODE')) {\r\n          v = obj[p];\r\n          intCheck(v, 0, 9, p);\r\n          MODULO_MODE = v;\r\n        }\r\n\r\n        // POW_PRECISION {number} Integer, 0 to MAX inclusive.\r\n        // '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}'\r\n        if (obj.hasOwnProperty(p = 'POW_PRECISION')) {\r\n          v = obj[p];\r\n          intCheck(v, 0, MAX, p);\r\n          POW_PRECISION = v;\r\n        }\r\n\r\n        // FORMAT {object}\r\n        // '[BigNumber Error] FORMAT not an object: {v}'\r\n        if (obj.hasOwnProperty(p = 'FORMAT')) {\r\n          v = obj[p];\r\n          if (typeof v == 'object') FORMAT = v;\r\n          else throw Error\r\n           (bignumberError + p + ' not an object: ' + v);\r\n        }\r\n\r\n        // ALPHABET {string}\r\n        // '[BigNumber Error] ALPHABET invalid: {v}'\r\n        if (obj.hasOwnProperty(p = 'ALPHABET')) {\r\n          v = obj[p];\r\n\r\n          // Disallow if less than two characters,\r\n          // or if it contains '+', '-', '.', whitespace, or a repeated character.\r\n          if (typeof v == 'string' && !/^.?$|[+\\-.\\s]|(.).*\\1/.test(v)) {\r\n            alphabetHasNormalDecimalDigits = v.slice(0, 10) == '0123456789';\r\n            ALPHABET = v;\r\n          } else {\r\n            throw Error\r\n             (bignumberError + p + ' invalid: ' + v);\r\n          }\r\n        }\r\n\r\n      } else {\r\n\r\n        // '[BigNumber Error] Object expected: {v}'\r\n        throw Error\r\n         (bignumberError + 'Object expected: ' + obj);\r\n      }\r\n    }\r\n\r\n    return {\r\n      DECIMAL_PLACES: DECIMAL_PLACES,\r\n      ROUNDING_MODE: ROUNDING_MODE,\r\n      EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS],\r\n      RANGE: [MIN_EXP, MAX_EXP],\r\n      CRYPTO: CRYPTO,\r\n      MODULO_MODE: MODULO_MODE,\r\n      POW_PRECISION: POW_PRECISION,\r\n      FORMAT: FORMAT,\r\n      ALPHABET: ALPHABET\r\n    };\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if v is a BigNumber instance, otherwise return false.\r\n   *\r\n   * If BigNumber.DEBUG is true, throw if a BigNumber instance is not well-formed.\r\n   *\r\n   * v {any}\r\n   *\r\n   * '[BigNumber Error] Invalid BigNumber: {v}'\r\n   */\r\n  BigNumber.isBigNumber = function (v) {\r\n    if (!v || v._isBigNumber !== true) return false;\r\n    if (!BigNumber.DEBUG) return true;\r\n\r\n    var i, n,\r\n      c = v.c,\r\n      e = v.e,\r\n      s = v.s;\r\n\r\n    out: if ({}.toString.call(c) == '[object Array]') {\r\n\r\n      if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) {\r\n\r\n        // If the first element is zero, the BigNumber value must be zero.\r\n        if (c[0] === 0) {\r\n          if (e === 0 && c.length === 1) return true;\r\n          break out;\r\n        }\r\n\r\n        // Calculate number of digits that c[0] should have, based on the exponent.\r\n        i = (e + 1) % LOG_BASE;\r\n        if (i < 1) i += LOG_BASE;\r\n\r\n        // Calculate number of digits of c[0].\r\n        //if (Math.ceil(Math.log(c[0] + 1) / Math.LN10) == i) {\r\n        if (String(c[0]).length == i) {\r\n\r\n          for (i = 0; i < c.length; i++) {\r\n            n = c[i];\r\n            if (n < 0 || n >= BASE || n !== mathfloor(n)) break out;\r\n          }\r\n\r\n          // Last element cannot be zero, unless it is the only element.\r\n          if (n !== 0) return true;\r\n        }\r\n      }\r\n\r\n    // Infinity/NaN\r\n    } else if (c === null && e === null && (s === null || s === 1 || s === -1)) {\r\n      return true;\r\n    }\r\n\r\n    throw Error\r\n      (bignumberError + 'Invalid BigNumber: ' + v);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the maximum of the arguments.\r\n   *\r\n   * arguments {number|string|BigNumber}\r\n   */\r\n  BigNumber.maximum = BigNumber.max = function () {\r\n    return maxOrMin(arguments, -1);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the minimum of the arguments.\r\n   *\r\n   * arguments {number|string|BigNumber}\r\n   */\r\n  BigNumber.minimum = BigNumber.min = function () {\r\n    return maxOrMin(arguments, 1);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,\r\n   * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing\r\n   * zeros are produced).\r\n   *\r\n   * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}'\r\n   * '[BigNumber Error] crypto unavailable'\r\n   */\r\n  BigNumber.random = (function () {\r\n    var pow2_53 = 0x20000000000000;\r\n\r\n    // Return a 53 bit integer n, where 0 <= n < 9007199254740992.\r\n    // Check if Math.random() produces more than 32 bits of randomness.\r\n    // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.\r\n    // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.\r\n    var random53bitInt = (Math.random() * pow2_53) & 0x1fffff\r\n     ? function () { return mathfloor(Math.random() * pow2_53); }\r\n     : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +\r\n       (Math.random() * 0x800000 | 0); };\r\n\r\n    return function (dp) {\r\n      var a, b, e, k, v,\r\n        i = 0,\r\n        c = [],\r\n        rand = new BigNumber(ONE);\r\n\r\n      if (dp == null) dp = DECIMAL_PLACES;\r\n      else intCheck(dp, 0, MAX);\r\n\r\n      k = mathceil(dp / LOG_BASE);\r\n\r\n      if (CRYPTO) {\r\n\r\n        // Browsers supporting crypto.getRandomValues.\r\n        if (crypto.getRandomValues) {\r\n\r\n          a = crypto.getRandomValues(new Uint32Array(k *= 2));\r\n\r\n          for (; i < k;) {\r\n\r\n            // 53 bits:\r\n            // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)\r\n            // 11111 11111111 11111111 11111111 11100000 00000000 00000000\r\n            // ((Math.pow(2, 32) - 1) >>> 11).toString(2)\r\n            //                                     11111 11111111 11111111\r\n            // 0x20000 is 2^21.\r\n            v = a[i] * 0x20000 + (a[i + 1] >>> 11);\r\n\r\n            // Rejection sampling:\r\n            // 0 <= v < 9007199254740992\r\n            // Probability that v >= 9e15, is\r\n            // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251\r\n            if (v >= 9e15) {\r\n              b = crypto.getRandomValues(new Uint32Array(2));\r\n              a[i] = b[0];\r\n              a[i + 1] = b[1];\r\n            } else {\r\n\r\n              // 0 <= v <= 8999999999999999\r\n              // 0 <= (v % 1e14) <= 99999999999999\r\n              c.push(v % 1e14);\r\n              i += 2;\r\n            }\r\n          }\r\n          i = k / 2;\r\n\r\n        // Node.js supporting crypto.randomBytes.\r\n        } else if (crypto.randomBytes) {\r\n\r\n          // buffer\r\n          a = crypto.randomBytes(k *= 7);\r\n\r\n          for (; i < k;) {\r\n\r\n            // 0x1000000000000 is 2^48, 0x10000000000 is 2^40\r\n            // 0x100000000 is 2^32, 0x1000000 is 2^24\r\n            // 11111 11111111 11111111 11111111 11111111 11111111 11111111\r\n            // 0 <= v < 9007199254740992\r\n            v = ((a[i] & 31) * 0x1000000000000) + (a[i + 1] * 0x10000000000) +\r\n               (a[i + 2] * 0x100000000) + (a[i + 3] * 0x1000000) +\r\n               (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6];\r\n\r\n            if (v >= 9e15) {\r\n              crypto.randomBytes(7).copy(a, i);\r\n            } else {\r\n\r\n              // 0 <= (v % 1e14) <= 99999999999999\r\n              c.push(v % 1e14);\r\n              i += 7;\r\n            }\r\n          }\r\n          i = k / 7;\r\n        } else {\r\n          CRYPTO = false;\r\n          throw Error\r\n           (bignumberError + 'crypto unavailable');\r\n        }\r\n      }\r\n\r\n      // Use Math.random.\r\n      if (!CRYPTO) {\r\n\r\n        for (; i < k;) {\r\n          v = random53bitInt();\r\n          if (v < 9e15) c[i++] = v % 1e14;\r\n        }\r\n      }\r\n\r\n      k = c[--i];\r\n      dp %= LOG_BASE;\r\n\r\n      // Convert trailing digits to zeros according to dp.\r\n      if (k && dp) {\r\n        v = POWS_TEN[LOG_BASE - dp];\r\n        c[i] = mathfloor(k / v) * v;\r\n      }\r\n\r\n      // Remove trailing elements which are zero.\r\n      for (; c[i] === 0; c.pop(), i--);\r\n\r\n      // Zero?\r\n      if (i < 0) {\r\n        c = [e = 0];\r\n      } else {\r\n\r\n        // Remove leading elements which are zero and adjust exponent accordingly.\r\n        for (e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE);\r\n\r\n        // Count the digits of the first element of c to determine leading zeros, and...\r\n        for (i = 1, v = c[0]; v >= 10; v /= 10, i++);\r\n\r\n        // adjust the exponent accordingly.\r\n        if (i < LOG_BASE) e -= LOG_BASE - i;\r\n      }\r\n\r\n      rand.e = e;\r\n      rand.c = c;\r\n      return rand;\r\n    };\r\n  })();\r\n\r\n\r\n   /*\r\n   * Return a BigNumber whose value is the sum of the arguments.\r\n   *\r\n   * arguments {number|string|BigNumber}\r\n   */\r\n  BigNumber.sum = function () {\r\n    var i = 1,\r\n      args = arguments,\r\n      sum = new BigNumber(args[0]);\r\n    for (; i < args.length;) sum = sum.plus(args[i++]);\r\n    return sum;\r\n  };\r\n\r\n\r\n  // PRIVATE FUNCTIONS\r\n\r\n\r\n  // Called by BigNumber and BigNumber.prototype.toString.\r\n  convertBase = (function () {\r\n    var decimal = '0123456789';\r\n\r\n    /*\r\n     * Convert string of baseIn to an array of numbers of baseOut.\r\n     * Eg. toBaseOut('255', 10, 16) returns [15, 15].\r\n     * Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5].\r\n     */\r\n    function toBaseOut(str, baseIn, baseOut, alphabet) {\r\n      var j,\r\n        arr = [0],\r\n        arrL,\r\n        i = 0,\r\n        len = str.length;\r\n\r\n      for (; i < len;) {\r\n        for (arrL = arr.length; arrL--; arr[arrL] *= baseIn);\r\n\r\n        arr[0] += alphabet.indexOf(str.charAt(i++));\r\n\r\n        for (j = 0; j < arr.length; j++) {\r\n\r\n          if (arr[j] > baseOut - 1) {\r\n            if (arr[j + 1] == null) arr[j + 1] = 0;\r\n            arr[j + 1] += arr[j] / baseOut | 0;\r\n            arr[j] %= baseOut;\r\n          }\r\n        }\r\n      }\r\n\r\n      return arr.reverse();\r\n    }\r\n\r\n    // Convert a numeric string of baseIn to a numeric string of baseOut.\r\n    // If the caller is toString, we are converting from base 10 to baseOut.\r\n    // If the caller is BigNumber, we are converting from baseIn to base 10.\r\n    return function (str, baseIn, baseOut, sign, callerIsToString) {\r\n      var alphabet, d, e, k, r, x, xc, y,\r\n        i = str.indexOf('.'),\r\n        dp = DECIMAL_PLACES,\r\n        rm = ROUNDING_MODE;\r\n\r\n      // Non-integer.\r\n      if (i >= 0) {\r\n        k = POW_PRECISION;\r\n\r\n        // Unlimited precision.\r\n        POW_PRECISION = 0;\r\n        str = str.replace('.', '');\r\n        y = new BigNumber(baseIn);\r\n        x = y.pow(str.length - i);\r\n        POW_PRECISION = k;\r\n\r\n        // Convert str as if an integer, then restore the fraction part by dividing the\r\n        // result by its base raised to a power.\r\n\r\n        y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'),\r\n         10, baseOut, decimal);\r\n        y.e = y.c.length;\r\n      }\r\n\r\n      // Convert the number as integer.\r\n\r\n      xc = toBaseOut(str, baseIn, baseOut, callerIsToString\r\n       ? (alphabet = ALPHABET, decimal)\r\n       : (alphabet = decimal, ALPHABET));\r\n\r\n      // xc now represents str as an integer and converted to baseOut. e is the exponent.\r\n      e = k = xc.length;\r\n\r\n      // Remove trailing zeros.\r\n      for (; xc[--k] == 0; xc.pop());\r\n\r\n      // Zero?\r\n      if (!xc[0]) return alphabet.charAt(0);\r\n\r\n      // Does str represent an integer? If so, no need for the division.\r\n      if (i < 0) {\r\n        --e;\r\n      } else {\r\n        x.c = xc;\r\n        x.e = e;\r\n\r\n        // The sign is needed for correct rounding.\r\n        x.s = sign;\r\n        x = div(x, y, dp, rm, baseOut);\r\n        xc = x.c;\r\n        r = x.r;\r\n        e = x.e;\r\n      }\r\n\r\n      // xc now represents str converted to baseOut.\r\n\r\n      // THe index of the rounding digit.\r\n      d = e + dp + 1;\r\n\r\n      // The rounding digit: the digit to the right of the digit that may be rounded up.\r\n      i = xc[d];\r\n\r\n      // Look at the rounding digits and mode to determine whether to round up.\r\n\r\n      k = baseOut / 2;\r\n      r = r || d < 0 || xc[d + 1] != null;\r\n\r\n      r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n            : i > k || i == k &&(rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||\r\n             rm == (x.s < 0 ? 8 : 7));\r\n\r\n      // If the index of the rounding digit is not greater than zero, or xc represents\r\n      // zero, then the result of the base conversion is zero or, if rounding up, a value\r\n      // such as 0.00001.\r\n      if (d < 1 || !xc[0]) {\r\n\r\n        // 1^-dp or 0\r\n        str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0);\r\n      } else {\r\n\r\n        // Truncate xc to the required number of decimal places.\r\n        xc.length = d;\r\n\r\n        // Round up?\r\n        if (r) {\r\n\r\n          // Rounding up may mean the previous digit has to be rounded up and so on.\r\n          for (--baseOut; ++xc[--d] > baseOut;) {\r\n            xc[d] = 0;\r\n\r\n            if (!d) {\r\n              ++e;\r\n              xc = [1].concat(xc);\r\n            }\r\n          }\r\n        }\r\n\r\n        // Determine trailing zeros.\r\n        for (k = xc.length; !xc[--k];);\r\n\r\n        // E.g. [4, 11, 15] becomes 4bf.\r\n        for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++]));\r\n\r\n        // Add leading zeros, decimal point and trailing zeros as required.\r\n        str = toFixedPoint(str, e, alphabet.charAt(0));\r\n      }\r\n\r\n      // The caller will add the sign.\r\n      return str;\r\n    };\r\n  })();\r\n\r\n\r\n  // Perform division in the specified base. Called by div and convertBase.\r\n  div = (function () {\r\n\r\n    // Assume non-zero x and k.\r\n    function multiply(x, k, base) {\r\n      var m, temp, xlo, xhi,\r\n        carry = 0,\r\n        i = x.length,\r\n        klo = k % SQRT_BASE,\r\n        khi = k / SQRT_BASE | 0;\r\n\r\n      for (x = x.slice(); i--;) {\r\n        xlo = x[i] % SQRT_BASE;\r\n        xhi = x[i] / SQRT_BASE | 0;\r\n        m = khi * xlo + xhi * klo;\r\n        temp = klo * xlo + ((m % SQRT_BASE) * SQRT_BASE) + carry;\r\n        carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi;\r\n        x[i] = temp % base;\r\n      }\r\n\r\n      if (carry) x = [carry].concat(x);\r\n\r\n      return x;\r\n    }\r\n\r\n    function compare(a, b, aL, bL) {\r\n      var i, cmp;\r\n\r\n      if (aL != bL) {\r\n        cmp = aL > bL ? 1 : -1;\r\n      } else {\r\n\r\n        for (i = cmp = 0; i < aL; i++) {\r\n\r\n          if (a[i] != b[i]) {\r\n            cmp = a[i] > b[i] ? 1 : -1;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n\r\n      return cmp;\r\n    }\r\n\r\n    function subtract(a, b, aL, base) {\r\n      var i = 0;\r\n\r\n      // Subtract b from a.\r\n      for (; aL--;) {\r\n        a[aL] -= i;\r\n        i = a[aL] < b[aL] ? 1 : 0;\r\n        a[aL] = i * base + a[aL] - b[aL];\r\n      }\r\n\r\n      // Remove leading zeros.\r\n      for (; !a[0] && a.length > 1; a.splice(0, 1));\r\n    }\r\n\r\n    // x: dividend, y: divisor.\r\n    return function (x, y, dp, rm, base) {\r\n      var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,\r\n        yL, yz,\r\n        s = x.s == y.s ? 1 : -1,\r\n        xc = x.c,\r\n        yc = y.c;\r\n\r\n      // Either NaN, Infinity or 0?\r\n      if (!xc || !xc[0] || !yc || !yc[0]) {\r\n\r\n        return new BigNumber(\r\n\r\n         // Return NaN if either NaN, or both Infinity or 0.\r\n         !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN :\r\n\r\n          // Return \u00B10 if x is \u00B10 or y is \u00B1Infinity, or return \u00B1Infinity as y is \u00B10.\r\n          xc && xc[0] == 0 || !yc ? s * 0 : s / 0\r\n       );\r\n      }\r\n\r\n      q = new BigNumber(s);\r\n      qc = q.c = [];\r\n      e = x.e - y.e;\r\n      s = dp + e + 1;\r\n\r\n      if (!base) {\r\n        base = BASE;\r\n        e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE);\r\n        s = s / LOG_BASE | 0;\r\n      }\r\n\r\n      // Result exponent may be one less then the current value of e.\r\n      // The coefficients of the BigNumbers from convertBase may have trailing zeros.\r\n      for (i = 0; yc[i] == (xc[i] || 0); i++);\r\n\r\n      if (yc[i] > (xc[i] || 0)) e--;\r\n\r\n      if (s < 0) {\r\n        qc.push(1);\r\n        more = true;\r\n      } else {\r\n        xL = xc.length;\r\n        yL = yc.length;\r\n        i = 0;\r\n        s += 2;\r\n\r\n        // Normalise xc and yc so highest order digit of yc is >= base / 2.\r\n\r\n        n = mathfloor(base / (yc[0] + 1));\r\n\r\n        // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1.\r\n        // if (n > 1 || n++ == 1 && yc[0] < base / 2) {\r\n        if (n > 1) {\r\n          yc = multiply(yc, n, base);\r\n          xc = multiply(xc, n, base);\r\n          yL = yc.length;\r\n          xL = xc.length;\r\n        }\r\n\r\n        xi = yL;\r\n        rem = xc.slice(0, yL);\r\n        remL = rem.length;\r\n\r\n        // Add zeros to make remainder as long as divisor.\r\n        for (; remL < yL; rem[remL++] = 0);\r\n        yz = yc.slice();\r\n        yz = [0].concat(yz);\r\n        yc0 = yc[0];\r\n        if (yc[1] >= base / 2) yc0++;\r\n        // Not necessary, but to prevent trial digit n > base, when using base 3.\r\n        // else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15;\r\n\r\n        do {\r\n          n = 0;\r\n\r\n          // Compare divisor and remainder.\r\n          cmp = compare(yc, rem, yL, remL);\r\n\r\n          // If divisor < remainder.\r\n          if (cmp < 0) {\r\n\r\n            // Calculate trial digit, n.\r\n\r\n            rem0 = rem[0];\r\n            if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\r\n\r\n            // n is how many times the divisor goes into the current remainder.\r\n            n = mathfloor(rem0 / yc0);\r\n\r\n            //  Algorithm:\r\n            //  product = divisor multiplied by trial digit (n).\r\n            //  Compare product and remainder.\r\n            //  If product is greater than remainder:\r\n            //    Subtract divisor from product, decrement trial digit.\r\n            //  Subtract product from remainder.\r\n            //  If product was less than remainder at the last compare:\r\n            //    Compare new remainder and divisor.\r\n            //    If remainder is greater than divisor:\r\n            //      Subtract divisor from remainder, increment trial digit.\r\n\r\n            if (n > 1) {\r\n\r\n              // n may be > base only when base is 3.\r\n              if (n >= base) n = base - 1;\r\n\r\n              // product = divisor * trial digit.\r\n              prod = multiply(yc, n, base);\r\n              prodL = prod.length;\r\n              remL = rem.length;\r\n\r\n              // Compare product and remainder.\r\n              // If product > remainder then trial digit n too high.\r\n              // n is 1 too high about 5% of the time, and is not known to have\r\n              // ever been more than 1 too high.\r\n              while (compare(prod, rem, prodL, remL) == 1) {\r\n                n--;\r\n\r\n                // Subtract divisor from product.\r\n                subtract(prod, yL < prodL ? yz : yc, prodL, base);\r\n                prodL = prod.length;\r\n                cmp = 1;\r\n              }\r\n            } else {\r\n\r\n              // n is 0 or 1, cmp is -1.\r\n              // If n is 0, there is no need to compare yc and rem again below,\r\n              // so change cmp to 1 to avoid it.\r\n              // If n is 1, leave cmp as -1, so yc and rem are compared again.\r\n              if (n == 0) {\r\n\r\n                // divisor < remainder, so n must be at least 1.\r\n                cmp = n = 1;\r\n              }\r\n\r\n              // product = divisor\r\n              prod = yc.slice();\r\n              prodL = prod.length;\r\n            }\r\n\r\n            if (prodL < remL) prod = [0].concat(prod);\r\n\r\n            // Subtract product from remainder.\r\n            subtract(rem, prod, remL, base);\r\n            remL = rem.length;\r\n\r\n             // If product was < remainder.\r\n            if (cmp == -1) {\r\n\r\n              // Compare divisor and new remainder.\r\n              // If divisor < new remainder, subtract divisor from remainder.\r\n              // Trial digit n too low.\r\n              // n is 1 too low about 5% of the time, and very rarely 2 too low.\r\n              while (compare(yc, rem, yL, remL) < 1) {\r\n                n++;\r\n\r\n                // Subtract divisor from remainder.\r\n                subtract(rem, yL < remL ? yz : yc, remL, base);\r\n                remL = rem.length;\r\n              }\r\n            }\r\n          } else if (cmp === 0) {\r\n            n++;\r\n            rem = [0];\r\n          } // else cmp === 1 and n will be 0\r\n\r\n          // Add the next digit, n, to the result array.\r\n          qc[i++] = n;\r\n\r\n          // Update the remainder.\r\n          if (rem[0]) {\r\n            rem[remL++] = xc[xi] || 0;\r\n          } else {\r\n            rem = [xc[xi]];\r\n            remL = 1;\r\n          }\r\n        } while ((xi++ < xL || rem[0] != null) && s--);\r\n\r\n        more = rem[0] != null;\r\n\r\n        // Leading zero?\r\n        if (!qc[0]) qc.splice(0, 1);\r\n      }\r\n\r\n      if (base == BASE) {\r\n\r\n        // To calculate q.e, first get the number of digits of qc[0].\r\n        for (i = 1, s = qc[0]; s >= 10; s /= 10, i++);\r\n\r\n        round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more);\r\n\r\n      // Caller is convertBase.\r\n      } else {\r\n        q.e = e;\r\n        q.r = +more;\r\n      }\r\n\r\n      return q;\r\n    };\r\n  })();\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of BigNumber n in fixed-point or exponential\r\n   * notation rounded to the specified decimal places or significant digits.\r\n   *\r\n   * n: a BigNumber.\r\n   * i: the index of the last digit required (i.e. the digit that may be rounded up).\r\n   * rm: the rounding mode.\r\n   * id: 1 (toExponential) or 2 (toPrecision).\r\n   */\r\n  function format(n, i, rm, id) {\r\n    var c0, e, ne, len, str;\r\n\r\n    if (rm == null) rm = ROUNDING_MODE;\r\n    else intCheck(rm, 0, 8);\r\n\r\n    if (!n.c) return n.toString();\r\n\r\n    c0 = n.c[0];\r\n    ne = n.e;\r\n\r\n    if (i == null) {\r\n      str = coeffToString(n.c);\r\n      str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS)\r\n       ? toExponential(str, ne)\r\n       : toFixedPoint(str, ne, '0');\r\n    } else {\r\n      n = round(new BigNumber(n), i, rm);\r\n\r\n      // n.e may have changed if the value was rounded up.\r\n      e = n.e;\r\n\r\n      str = coeffToString(n.c);\r\n      len = str.length;\r\n\r\n      // toPrecision returns exponential notation if the number of significant digits\r\n      // specified is less than the number of digits necessary to represent the integer\r\n      // part of the value in fixed-point notation.\r\n\r\n      // Exponential notation.\r\n      if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) {\r\n\r\n        // Append zeros?\r\n        for (; len < i; str += '0', len++);\r\n        str = toExponential(str, e);\r\n\r\n      // Fixed-point notation.\r\n      } else {\r\n        i -= ne;\r\n        str = toFixedPoint(str, e, '0');\r\n\r\n        // Append zeros?\r\n        if (e + 1 > len) {\r\n          if (--i > 0) for (str += '.'; i--; str += '0');\r\n        } else {\r\n          i += e - len;\r\n          if (i > 0) {\r\n            if (e + 1 == len) str += '.';\r\n            for (; i--; str += '0');\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return n.s < 0 && c0 ? '-' + str : str;\r\n  }\r\n\r\n\r\n  // Handle BigNumber.max and BigNumber.min.\r\n  // If any number is NaN, return NaN.\r\n  function maxOrMin(args, n) {\r\n    var k, y,\r\n      i = 1,\r\n      x = new BigNumber(args[0]);\r\n\r\n    for (; i < args.length; i++) {\r\n      y = new BigNumber(args[i]);\r\n      if (!y.s || (k = compare(x, y)) === n || k === 0 && x.s === n) {\r\n        x = y;\r\n      }\r\n    }\r\n\r\n    return x;\r\n  }\r\n\r\n\r\n  /*\r\n   * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.\r\n   * Called by minus, plus and times.\r\n   */\r\n  function normalise(n, c, e) {\r\n    var i = 1,\r\n      j = c.length;\r\n\r\n     // Remove trailing zeros.\r\n    for (; !c[--j]; c.pop());\r\n\r\n    // Calculate the base 10 exponent. First get the number of digits of c[0].\r\n    for (j = c[0]; j >= 10; j /= 10, i++);\r\n\r\n    // Overflow?\r\n    if ((e = i + e * LOG_BASE - 1) > MAX_EXP) {\r\n\r\n      // Infinity.\r\n      n.c = n.e = null;\r\n\r\n    // Underflow?\r\n    } else if (e < MIN_EXP) {\r\n\r\n      // Zero.\r\n      n.c = [n.e = 0];\r\n    } else {\r\n      n.e = e;\r\n      n.c = c;\r\n    }\r\n\r\n    return n;\r\n  }\r\n\r\n\r\n  // Handle values that fail the validity test in BigNumber.\r\n  parseNumeric = (function () {\r\n    var basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i,\r\n      dotAfter = /^([^.]+)\\.$/,\r\n      dotBefore = /^\\.([^.]+)$/,\r\n      isInfinityOrNaN = /^-?(Infinity|NaN)$/,\r\n      whitespaceOrPlus = /^\\s*\\+(?=[\\w.])|^\\s+|\\s+$/g;\r\n\r\n    return function (x, str, isNum, b) {\r\n      var base,\r\n        s = isNum ? str : str.replace(whitespaceOrPlus, '');\r\n\r\n      // No exception on \u00B1Infinity or NaN.\r\n      if (isInfinityOrNaN.test(s)) {\r\n        x.s = isNaN(s) ? null : s < 0 ? -1 : 1;\r\n      } else {\r\n        if (!isNum) {\r\n\r\n          // basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i\r\n          s = s.replace(basePrefix, function (m, p1, p2) {\r\n            base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8;\r\n            return !b || b == base ? p1 : m;\r\n          });\r\n\r\n          if (b) {\r\n            base = b;\r\n\r\n            // E.g. '1.' to '1', '.1' to '0.1'\r\n            s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1');\r\n          }\r\n\r\n          if (str != s) return new BigNumber(s, base);\r\n        }\r\n\r\n        // '[BigNumber Error] Not a number: {n}'\r\n        // '[BigNumber Error] Not a base {b} number: {n}'\r\n        if (BigNumber.DEBUG) {\r\n          throw Error\r\n            (bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str);\r\n        }\r\n\r\n        // NaN\r\n        x.s = null;\r\n      }\r\n\r\n      x.c = x.e = null;\r\n    }\r\n  })();\r\n\r\n\r\n  /*\r\n   * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.\r\n   * If r is truthy, it is known that there are more digits after the rounding digit.\r\n   */\r\n  function round(x, sd, rm, r) {\r\n    var d, i, j, k, n, ni, rd,\r\n      xc = x.c,\r\n      pows10 = POWS_TEN;\r\n\r\n    // if x is not Infinity or NaN...\r\n    if (xc) {\r\n\r\n      // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n      // n is a base 1e14 number, the value of the element of array x.c containing rd.\r\n      // ni is the index of n within x.c.\r\n      // d is the number of digits of n.\r\n      // i is the index of rd within n including leading zeros.\r\n      // j is the actual index of rd within n (if < 0, rd is a leading zero).\r\n      out: {\r\n\r\n        // Get the number of digits of the first element of xc.\r\n        for (d = 1, k = xc[0]; k >= 10; k /= 10, d++);\r\n        i = sd - d;\r\n\r\n        // If the rounding digit is in the first element of xc...\r\n        if (i < 0) {\r\n          i += LOG_BASE;\r\n          j = sd;\r\n          n = xc[ni = 0];\r\n\r\n          // Get the rounding digit at index j of n.\r\n          rd = mathfloor(n / pows10[d - j - 1] % 10);\r\n        } else {\r\n          ni = mathceil((i + 1) / LOG_BASE);\r\n\r\n          if (ni >= xc.length) {\r\n\r\n            if (r) {\r\n\r\n              // Needed by sqrt.\r\n              for (; xc.length <= ni; xc.push(0));\r\n              n = rd = 0;\r\n              d = 1;\r\n              i %= LOG_BASE;\r\n              j = i - LOG_BASE + 1;\r\n            } else {\r\n              break out;\r\n            }\r\n          } else {\r\n            n = k = xc[ni];\r\n\r\n            // Get the number of digits of n.\r\n            for (d = 1; k >= 10; k /= 10, d++);\r\n\r\n            // Get the index of rd within n.\r\n            i %= LOG_BASE;\r\n\r\n            // Get the index of rd within n, adjusted for leading zeros.\r\n            // The number of leading zeros of n is given by LOG_BASE - d.\r\n            j = i - LOG_BASE + d;\r\n\r\n            // Get the rounding digit at index j of n.\r\n            rd = j < 0 ? 0 : mathfloor(n / pows10[d - j - 1] % 10);\r\n          }\r\n        }\r\n\r\n        r = r || sd < 0 ||\r\n\r\n        // Are there any non-zero digits after the rounding digit?\r\n        // The expression  n % pows10[d - j - 1]  returns all digits of n to the right\r\n        // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.\r\n         xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]);\r\n\r\n        r = rm < 4\r\n         ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n         : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 &&\r\n\r\n          // Check whether the digit to the left of the rounding digit is odd.\r\n          ((i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10) & 1 ||\r\n           rm == (x.s < 0 ? 8 : 7));\r\n\r\n        if (sd < 1 || !xc[0]) {\r\n          xc.length = 0;\r\n\r\n          if (r) {\r\n\r\n            // Convert sd to decimal places.\r\n            sd -= x.e + 1;\r\n\r\n            // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n            xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE];\r\n            x.e = -sd || 0;\r\n          } else {\r\n\r\n            // Zero.\r\n            xc[0] = x.e = 0;\r\n          }\r\n\r\n          return x;\r\n        }\r\n\r\n        // Remove excess digits.\r\n        if (i == 0) {\r\n          xc.length = ni;\r\n          k = 1;\r\n          ni--;\r\n        } else {\r\n          xc.length = ni + 1;\r\n          k = pows10[LOG_BASE - i];\r\n\r\n          // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n          // j > 0 means i > number of leading zeros of n.\r\n          xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0;\r\n        }\r\n\r\n        // Round up?\r\n        if (r) {\r\n\r\n          for (; ;) {\r\n\r\n            // If the digit to be rounded up is in the first element of xc...\r\n            if (ni == 0) {\r\n\r\n              // i will be the length of xc[0] before k is added.\r\n              for (i = 1, j = xc[0]; j >= 10; j /= 10, i++);\r\n              j = xc[0] += k;\r\n              for (k = 1; j >= 10; j /= 10, k++);\r\n\r\n              // if i != k the length has increased.\r\n              if (i != k) {\r\n                x.e++;\r\n                if (xc[0] == BASE) xc[0] = 1;\r\n              }\r\n\r\n              break;\r\n            } else {\r\n              xc[ni] += k;\r\n              if (xc[ni] != BASE) break;\r\n              xc[ni--] = 0;\r\n              k = 1;\r\n            }\r\n          }\r\n        }\r\n\r\n        // Remove trailing zeros.\r\n        for (i = xc.length; xc[--i] === 0; xc.pop());\r\n      }\r\n\r\n      // Overflow? Infinity.\r\n      if (x.e > MAX_EXP) {\r\n        x.c = x.e = null;\r\n\r\n      // Underflow? Zero.\r\n      } else if (x.e < MIN_EXP) {\r\n        x.c = [x.e = 0];\r\n      }\r\n    }\r\n\r\n    return x;\r\n  }\r\n\r\n\r\n  function valueOf(n) {\r\n    var str,\r\n      e = n.e;\r\n\r\n    if (e === null) return n.toString();\r\n\r\n    str = coeffToString(n.c);\r\n\r\n    str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n      ? toExponential(str, e)\r\n      : toFixedPoint(str, e, '0');\r\n\r\n    return n.s < 0 ? '-' + str : str;\r\n  }\r\n\r\n\r\n  // PROTOTYPE/INSTANCE METHODS\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the absolute value of this BigNumber.\r\n   */\r\n  P.absoluteValue = P.abs = function () {\r\n    var x = new BigNumber(this);\r\n    if (x.s < 0) x.s = 1;\r\n    return x;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return\r\n   *   1 if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n   *   -1 if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n   *   0 if they have the same value,\r\n   *   or null if the value of either is NaN.\r\n   */\r\n  P.comparedTo = function (y, b) {\r\n    return compare(this, new BigNumber(y, b));\r\n  };\r\n\r\n\r\n  /*\r\n   * If dp is undefined or null or true or false, return the number of decimal places of the\r\n   * value of this BigNumber, or null if the value of this BigNumber is \u00B1Infinity or NaN.\r\n   *\r\n   * Otherwise, if dp is a number, return a new BigNumber whose value is the value of this\r\n   * BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or\r\n   * ROUNDING_MODE if rm is omitted.\r\n   *\r\n   * [dp] {number} Decimal places: integer, 0 to MAX inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n   */\r\n  P.decimalPlaces = P.dp = function (dp, rm) {\r\n    var c, n, v,\r\n      x = this;\r\n\r\n    if (dp != null) {\r\n      intCheck(dp, 0, MAX);\r\n      if (rm == null) rm = ROUNDING_MODE;\r\n      else intCheck(rm, 0, 8);\r\n\r\n      return round(new BigNumber(x), dp + x.e + 1, rm);\r\n    }\r\n\r\n    if (!(c = x.c)) return null;\r\n    n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE;\r\n\r\n    // Subtract the number of trailing zeros of the last number.\r\n    if (v = c[v]) for (; v % 10 == 0; v /= 10, n--);\r\n    if (n < 0) n = 0;\r\n\r\n    return n;\r\n  };\r\n\r\n\r\n  /*\r\n   *  n / 0 = I\r\n   *  n / N = N\r\n   *  n / I = 0\r\n   *  0 / n = 0\r\n   *  0 / 0 = N\r\n   *  0 / N = N\r\n   *  0 / I = 0\r\n   *  N / n = N\r\n   *  N / 0 = N\r\n   *  N / N = N\r\n   *  N / I = N\r\n   *  I / n = I\r\n   *  I / 0 = I\r\n   *  I / N = N\r\n   *  I / I = N\r\n   *\r\n   * Return a new BigNumber whose value is the value of this BigNumber divided by the value of\r\n   * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n   */\r\n  P.dividedBy = P.div = function (y, b) {\r\n    return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the integer part of dividing the value of this\r\n   * BigNumber by the value of BigNumber(y, b).\r\n   */\r\n  P.dividedToIntegerBy = P.idiv = function (y, b) {\r\n    return div(this, new BigNumber(y, b), 0, 1);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a BigNumber whose value is the value of this BigNumber exponentiated by n.\r\n   *\r\n   * If m is present, return the result modulo m.\r\n   * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.\r\n   * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE.\r\n   *\r\n   * The modular power operation works efficiently when x, n, and m are integers, otherwise it\r\n   * is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0.\r\n   *\r\n   * n {number|string|BigNumber} The exponent. An integer.\r\n   * [m] {number|string|BigNumber} The modulus.\r\n   *\r\n   * '[BigNumber Error] Exponent not an integer: {n}'\r\n   */\r\n  P.exponentiatedBy = P.pow = function (n, m) {\r\n    var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y,\r\n      x = this;\r\n\r\n    n = new BigNumber(n);\r\n\r\n    // Allow NaN and \u00B1Infinity, but not other non-integers.\r\n    if (n.c && !n.isInteger()) {\r\n      throw Error\r\n        (bignumberError + 'Exponent not an integer: ' + valueOf(n));\r\n    }\r\n\r\n    if (m != null) m = new BigNumber(m);\r\n\r\n    // Exponent of MAX_SAFE_INTEGER is 15.\r\n    nIsBig = n.e > 14;\r\n\r\n    // If x is NaN, \u00B1Infinity, \u00B10 or \u00B11, or n is \u00B1Infinity, NaN or \u00B10.\r\n    if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) {\r\n\r\n      // The sign of the result of pow when x is negative depends on the evenness of n.\r\n      // If +n overflows to \u00B1Infinity, the evenness of n would be not be known.\r\n      y = new BigNumber(Math.pow(+valueOf(x), nIsBig ? n.s * (2 - isOdd(n)) : +valueOf(n)));\r\n      return m ? y.mod(m) : y;\r\n    }\r\n\r\n    nIsNeg = n.s < 0;\r\n\r\n    if (m) {\r\n\r\n      // x % m returns NaN if abs(m) is zero, or m is NaN.\r\n      if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN);\r\n\r\n      isModExp = !nIsNeg && x.isInteger() && m.isInteger();\r\n\r\n      if (isModExp) x = x.mod(m);\r\n\r\n    // Overflow to \u00B1Infinity: >=2**1e10 or >=1.0000024**1e15.\r\n    // Underflow to \u00B10: <=0.79**1e10 or <=0.9999975**1e15.\r\n    } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0\r\n      // [1, 240000000]\r\n      ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7\r\n      // [80000000000000]  [99999750000000]\r\n      : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) {\r\n\r\n      // If x is negative and n is odd, k = -0, else k = 0.\r\n      k = x.s < 0 && isOdd(n) ? -0 : 0;\r\n\r\n      // If x >= 1, k = \u00B1Infinity.\r\n      if (x.e > -1) k = 1 / k;\r\n\r\n      // If n is negative return \u00B10, else return \u00B1Infinity.\r\n      return new BigNumber(nIsNeg ? 1 / k : k);\r\n\r\n    } else if (POW_PRECISION) {\r\n\r\n      // Truncating each coefficient array to a length of k after each multiplication\r\n      // equates to truncating significant digits to POW_PRECISION + [28, 41],\r\n      // i.e. there will be a minimum of 28 guard digits retained.\r\n      k = mathceil(POW_PRECISION / LOG_BASE + 2);\r\n    }\r\n\r\n    if (nIsBig) {\r\n      half = new BigNumber(0.5);\r\n      if (nIsNeg) n.s = 1;\r\n      nIsOdd = isOdd(n);\r\n    } else {\r\n      i = Math.abs(+valueOf(n));\r\n      nIsOdd = i % 2;\r\n    }\r\n\r\n    y = new BigNumber(ONE);\r\n\r\n    // Performs 54 loop iterations for n of 9007199254740991.\r\n    for (; ;) {\r\n\r\n      if (nIsOdd) {\r\n        y = y.times(x);\r\n        if (!y.c) break;\r\n\r\n        if (k) {\r\n          if (y.c.length > k) y.c.length = k;\r\n        } else if (isModExp) {\r\n          y = y.mod(m);    //y = y.minus(div(y, m, 0, MODULO_MODE).times(m));\r\n        }\r\n      }\r\n\r\n      if (i) {\r\n        i = mathfloor(i / 2);\r\n        if (i === 0) break;\r\n        nIsOdd = i % 2;\r\n      } else {\r\n        n = n.times(half);\r\n        round(n, n.e + 1, 1);\r\n\r\n        if (n.e > 14) {\r\n          nIsOdd = isOdd(n);\r\n        } else {\r\n          i = +valueOf(n);\r\n          if (i === 0) break;\r\n          nIsOdd = i % 2;\r\n        }\r\n      }\r\n\r\n      x = x.times(x);\r\n\r\n      if (k) {\r\n        if (x.c && x.c.length > k) x.c.length = k;\r\n      } else if (isModExp) {\r\n        x = x.mod(m);    //x = x.minus(div(x, m, 0, MODULO_MODE).times(m));\r\n      }\r\n    }\r\n\r\n    if (isModExp) return y;\r\n    if (nIsNeg) y = ONE.div(y);\r\n\r\n    return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the value of this BigNumber rounded to an integer\r\n   * using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n   *\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}'\r\n   */\r\n  P.integerValue = function (rm) {\r\n    var n = new BigNumber(this);\r\n    if (rm == null) rm = ROUNDING_MODE;\r\n    else intCheck(rm, 0, 8);\r\n    return round(n, n.e + 1, rm);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),\r\n   * otherwise return false.\r\n   */\r\n  P.isEqualTo = P.eq = function (y, b) {\r\n    return compare(this, new BigNumber(y, b)) === 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is a finite number, otherwise return false.\r\n   */\r\n  P.isFinite = function () {\r\n    return !!this.c;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n   * otherwise return false.\r\n   */\r\n  P.isGreaterThan = P.gt = function (y, b) {\r\n    return compare(this, new BigNumber(y, b)) > 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is greater than or equal to the value of\r\n   * BigNumber(y, b), otherwise return false.\r\n   */\r\n  P.isGreaterThanOrEqualTo = P.gte = function (y, b) {\r\n    return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0;\r\n\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is an integer, otherwise return false.\r\n   */\r\n  P.isInteger = function () {\r\n    return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n   * otherwise return false.\r\n   */\r\n  P.isLessThan = P.lt = function (y, b) {\r\n    return compare(this, new BigNumber(y, b)) < 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is less than or equal to the value of\r\n   * BigNumber(y, b), otherwise return false.\r\n   */\r\n  P.isLessThanOrEqualTo = P.lte = function (y, b) {\r\n    return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is NaN, otherwise return false.\r\n   */\r\n  P.isNaN = function () {\r\n    return !this.s;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is negative, otherwise return false.\r\n   */\r\n  P.isNegative = function () {\r\n    return this.s < 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is positive, otherwise return false.\r\n   */\r\n  P.isPositive = function () {\r\n    return this.s > 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is 0 or -0, otherwise return false.\r\n   */\r\n  P.isZero = function () {\r\n    return !!this.c && this.c[0] == 0;\r\n  };\r\n\r\n\r\n  /*\r\n   *  n - 0 = n\r\n   *  n - N = N\r\n   *  n - I = -I\r\n   *  0 - n = -n\r\n   *  0 - 0 = 0\r\n   *  0 - N = N\r\n   *  0 - I = -I\r\n   *  N - n = N\r\n   *  N - 0 = N\r\n   *  N - N = N\r\n   *  N - I = N\r\n   *  I - n = I\r\n   *  I - 0 = I\r\n   *  I - N = N\r\n   *  I - I = N\r\n   *\r\n   * Return a new BigNumber whose value is the value of this BigNumber minus the value of\r\n   * BigNumber(y, b).\r\n   */\r\n  P.minus = function (y, b) {\r\n    var i, j, t, xLTy,\r\n      x = this,\r\n      a = x.s;\r\n\r\n    y = new BigNumber(y, b);\r\n    b = y.s;\r\n\r\n    // Either NaN?\r\n    if (!a || !b) return new BigNumber(NaN);\r\n\r\n    // Signs differ?\r\n    if (a != b) {\r\n      y.s = -b;\r\n      return x.plus(y);\r\n    }\r\n\r\n    var xe = x.e / LOG_BASE,\r\n      ye = y.e / LOG_BASE,\r\n      xc = x.c,\r\n      yc = y.c;\r\n\r\n    if (!xe || !ye) {\r\n\r\n      // Either Infinity?\r\n      if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN);\r\n\r\n      // Either zero?\r\n      if (!xc[0] || !yc[0]) {\r\n\r\n        // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n        return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x :\r\n\r\n         // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity\r\n         ROUNDING_MODE == 3 ? -0 : 0);\r\n      }\r\n    }\r\n\r\n    xe = bitFloor(xe);\r\n    ye = bitFloor(ye);\r\n    xc = xc.slice();\r\n\r\n    // Determine which is the bigger number.\r\n    if (a = xe - ye) {\r\n\r\n      if (xLTy = a < 0) {\r\n        a = -a;\r\n        t = xc;\r\n      } else {\r\n        ye = xe;\r\n        t = yc;\r\n      }\r\n\r\n      t.reverse();\r\n\r\n      // Prepend zeros to equalise exponents.\r\n      for (b = a; b--; t.push(0));\r\n      t.reverse();\r\n    } else {\r\n\r\n      // Exponents equal. Check digit by digit.\r\n      j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b;\r\n\r\n      for (a = b = 0; b < j; b++) {\r\n\r\n        if (xc[b] != yc[b]) {\r\n          xLTy = xc[b] < yc[b];\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    // x < y? Point xc to the array of the bigger number.\r\n    if (xLTy) {\r\n      t = xc;\r\n      xc = yc;\r\n      yc = t;\r\n      y.s = -y.s;\r\n    }\r\n\r\n    b = (j = yc.length) - (i = xc.length);\r\n\r\n    // Append zeros to xc if shorter.\r\n    // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.\r\n    if (b > 0) for (; b--; xc[i++] = 0);\r\n    b = BASE - 1;\r\n\r\n    // Subtract yc from xc.\r\n    for (; j > a;) {\r\n\r\n      if (xc[--j] < yc[j]) {\r\n        for (i = j; i && !xc[--i]; xc[i] = b);\r\n        --xc[i];\r\n        xc[j] += BASE;\r\n      }\r\n\r\n      xc[j] -= yc[j];\r\n    }\r\n\r\n    // Remove leading zeros and adjust exponent accordingly.\r\n    for (; xc[0] == 0; xc.splice(0, 1), --ye);\r\n\r\n    // Zero?\r\n    if (!xc[0]) {\r\n\r\n      // Following IEEE 754 (2008) 6.3,\r\n      // n - n = +0  but  n - n = -0  when rounding towards -Infinity.\r\n      y.s = ROUNDING_MODE == 3 ? -1 : 1;\r\n      y.c = [y.e = 0];\r\n      return y;\r\n    }\r\n\r\n    // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity\r\n    // for finite x and y.\r\n    return normalise(y, xc, ye);\r\n  };\r\n\r\n\r\n  /*\r\n   *   n % 0 =  N\r\n   *   n % N =  N\r\n   *   n % I =  n\r\n   *   0 % n =  0\r\n   *  -0 % n = -0\r\n   *   0 % 0 =  N\r\n   *   0 % N =  N\r\n   *   0 % I =  0\r\n   *   N % n =  N\r\n   *   N % 0 =  N\r\n   *   N % N =  N\r\n   *   N % I =  N\r\n   *   I % n =  N\r\n   *   I % 0 =  N\r\n   *   I % N =  N\r\n   *   I % I =  N\r\n   *\r\n   * Return a new BigNumber whose value is the value of this BigNumber modulo the value of\r\n   * BigNumber(y, b). The result depends on the value of MODULO_MODE.\r\n   */\r\n  P.modulo = P.mod = function (y, b) {\r\n    var q, s,\r\n      x = this;\r\n\r\n    y = new BigNumber(y, b);\r\n\r\n    // Return NaN if x is Infinity or NaN, or y is NaN or zero.\r\n    if (!x.c || !y.s || y.c && !y.c[0]) {\r\n      return new BigNumber(NaN);\r\n\r\n    // Return x if y is Infinity or x is zero.\r\n    } else if (!y.c || x.c && !x.c[0]) {\r\n      return new BigNumber(x);\r\n    }\r\n\r\n    if (MODULO_MODE == 9) {\r\n\r\n      // Euclidian division: q = sign(y) * floor(x / abs(y))\r\n      // r = x - qy    where  0 <= r < abs(y)\r\n      s = y.s;\r\n      y.s = 1;\r\n      q = div(x, y, 0, 3);\r\n      y.s = s;\r\n      q.s *= s;\r\n    } else {\r\n      q = div(x, y, 0, MODULO_MODE);\r\n    }\r\n\r\n    y = x.minus(q.times(y));\r\n\r\n    // To match JavaScript %, ensure sign of zero is sign of dividend.\r\n    if (!y.c[0] && MODULO_MODE == 1) y.s = x.s;\r\n\r\n    return y;\r\n  };\r\n\r\n\r\n  /*\r\n   *  n * 0 = 0\r\n   *  n * N = N\r\n   *  n * I = I\r\n   *  0 * n = 0\r\n   *  0 * 0 = 0\r\n   *  0 * N = N\r\n   *  0 * I = N\r\n   *  N * n = N\r\n   *  N * 0 = N\r\n   *  N * N = N\r\n   *  N * I = N\r\n   *  I * n = I\r\n   *  I * 0 = N\r\n   *  I * N = N\r\n   *  I * I = I\r\n   *\r\n   * Return a new BigNumber whose value is the value of this BigNumber multiplied by the value\r\n   * of BigNumber(y, b).\r\n   */\r\n  P.multipliedBy = P.times = function (y, b) {\r\n    var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,\r\n      base, sqrtBase,\r\n      x = this,\r\n      xc = x.c,\r\n      yc = (y = new BigNumber(y, b)).c;\r\n\r\n    // Either NaN, \u00B1Infinity or \u00B10?\r\n    if (!xc || !yc || !xc[0] || !yc[0]) {\r\n\r\n      // Return NaN if either is NaN, or one is 0 and the other is Infinity.\r\n      if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) {\r\n        y.c = y.e = y.s = null;\r\n      } else {\r\n        y.s *= x.s;\r\n\r\n        // Return \u00B1Infinity if either is \u00B1Infinity.\r\n        if (!xc || !yc) {\r\n          y.c = y.e = null;\r\n\r\n        // Return \u00B10 if either is \u00B10.\r\n        } else {\r\n          y.c = [0];\r\n          y.e = 0;\r\n        }\r\n      }\r\n\r\n      return y;\r\n    }\r\n\r\n    e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE);\r\n    y.s *= x.s;\r\n    xcL = xc.length;\r\n    ycL = yc.length;\r\n\r\n    // Ensure xc points to longer array and xcL to its length.\r\n    if (xcL < ycL) {\r\n      zc = xc;\r\n      xc = yc;\r\n      yc = zc;\r\n      i = xcL;\r\n      xcL = ycL;\r\n      ycL = i;\r\n    }\r\n\r\n    // Initialise the result array with zeros.\r\n    for (i = xcL + ycL, zc = []; i--; zc.push(0));\r\n\r\n    base = BASE;\r\n    sqrtBase = SQRT_BASE;\r\n\r\n    for (i = ycL; --i >= 0;) {\r\n      c = 0;\r\n      ylo = yc[i] % sqrtBase;\r\n      yhi = yc[i] / sqrtBase | 0;\r\n\r\n      for (k = xcL, j = i + k; j > i;) {\r\n        xlo = xc[--k] % sqrtBase;\r\n        xhi = xc[k] / sqrtBase | 0;\r\n        m = yhi * xlo + xhi * ylo;\r\n        xlo = ylo * xlo + ((m % sqrtBase) * sqrtBase) + zc[j] + c;\r\n        c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi;\r\n        zc[j--] = xlo % base;\r\n      }\r\n\r\n      zc[j] = c;\r\n    }\r\n\r\n    if (c) {\r\n      ++e;\r\n    } else {\r\n      zc.splice(0, 1);\r\n    }\r\n\r\n    return normalise(y, zc, e);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the value of this BigNumber negated,\r\n   * i.e. multiplied by -1.\r\n   */\r\n  P.negated = function () {\r\n    var x = new BigNumber(this);\r\n    x.s = -x.s || null;\r\n    return x;\r\n  };\r\n\r\n\r\n  /*\r\n   *  n + 0 = n\r\n   *  n + N = N\r\n   *  n + I = I\r\n   *  0 + n = n\r\n   *  0 + 0 = 0\r\n   *  0 + N = N\r\n   *  0 + I = I\r\n   *  N + n = N\r\n   *  N + 0 = N\r\n   *  N + N = N\r\n   *  N + I = N\r\n   *  I + n = I\r\n   *  I + 0 = I\r\n   *  I + N = N\r\n   *  I + I = I\r\n   *\r\n   * Return a new BigNumber whose value is the value of this BigNumber plus the value of\r\n   * BigNumber(y, b).\r\n   */\r\n  P.plus = function (y, b) {\r\n    var t,\r\n      x = this,\r\n      a = x.s;\r\n\r\n    y = new BigNumber(y, b);\r\n    b = y.s;\r\n\r\n    // Either NaN?\r\n    if (!a || !b) return new BigNumber(NaN);\r\n\r\n    // Signs differ?\r\n     if (a != b) {\r\n      y.s = -b;\r\n      return x.minus(y);\r\n    }\r\n\r\n    var xe = x.e / LOG_BASE,\r\n      ye = y.e / LOG_BASE,\r\n      xc = x.c,\r\n      yc = y.c;\r\n\r\n    if (!xe || !ye) {\r\n\r\n      // Return \u00B1Infinity if either \u00B1Infinity.\r\n      if (!xc || !yc) return new BigNumber(a / 0);\r\n\r\n      // Either zero?\r\n      // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n      if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0);\r\n    }\r\n\r\n    xe = bitFloor(xe);\r\n    ye = bitFloor(ye);\r\n    xc = xc.slice();\r\n\r\n    // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.\r\n    if (a = xe - ye) {\r\n      if (a > 0) {\r\n        ye = xe;\r\n        t = yc;\r\n      } else {\r\n        a = -a;\r\n        t = xc;\r\n      }\r\n\r\n      t.reverse();\r\n      for (; a--; t.push(0));\r\n      t.reverse();\r\n    }\r\n\r\n    a = xc.length;\r\n    b = yc.length;\r\n\r\n    // Point xc to the longer array, and b to the shorter length.\r\n    if (a - b < 0) {\r\n      t = yc;\r\n      yc = xc;\r\n      xc = t;\r\n      b = a;\r\n    }\r\n\r\n    // Only start adding at yc.length - 1 as the further digits of xc can be ignored.\r\n    for (a = 0; b;) {\r\n      a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0;\r\n      xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE;\r\n    }\r\n\r\n    if (a) {\r\n      xc = [a].concat(xc);\r\n      ++ye;\r\n    }\r\n\r\n    // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n    // ye = MAX_EXP + 1 possible\r\n    return normalise(y, xc, ye);\r\n  };\r\n\r\n\r\n  /*\r\n   * If sd is undefined or null or true or false, return the number of significant digits of\r\n   * the value of this BigNumber, or null if the value of this BigNumber is \u00B1Infinity or NaN.\r\n   * If sd is true include integer-part trailing zeros in the count.\r\n   *\r\n   * Otherwise, if sd is a number, return a new BigNumber whose value is the value of this\r\n   * BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or\r\n   * ROUNDING_MODE if rm is omitted.\r\n   *\r\n   * sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive.\r\n   *                     boolean: whether to count integer-part trailing zeros: true or false.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n   */\r\n  P.precision = P.sd = function (sd, rm) {\r\n    var c, n, v,\r\n      x = this;\r\n\r\n    if (sd != null && sd !== !!sd) {\r\n      intCheck(sd, 1, MAX);\r\n      if (rm == null) rm = ROUNDING_MODE;\r\n      else intCheck(rm, 0, 8);\r\n\r\n      return round(new BigNumber(x), sd, rm);\r\n    }\r\n\r\n    if (!(c = x.c)) return null;\r\n    v = c.length - 1;\r\n    n = v * LOG_BASE + 1;\r\n\r\n    if (v = c[v]) {\r\n\r\n      // Subtract the number of trailing zeros of the last element.\r\n      for (; v % 10 == 0; v /= 10, n--);\r\n\r\n      // Add the number of digits of the first element.\r\n      for (v = c[0]; v >= 10; v /= 10, n++);\r\n    }\r\n\r\n    if (sd && x.e + 1 > n) n = x.e + 1;\r\n\r\n    return n;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the value of this BigNumber shifted by k places\r\n   * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.\r\n   *\r\n   * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}'\r\n   */\r\n  P.shiftedBy = function (k) {\r\n    intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);\r\n    return this.times('1e' + k);\r\n  };\r\n\r\n\r\n  /*\r\n   *  sqrt(-n) =  N\r\n   *  sqrt(N) =  N\r\n   *  sqrt(-I) =  N\r\n   *  sqrt(I) =  I\r\n   *  sqrt(0) =  0\r\n   *  sqrt(-0) = -0\r\n   *\r\n   * Return a new BigNumber whose value is the square root of the value of this BigNumber,\r\n   * rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n   */\r\n  P.squareRoot = P.sqrt = function () {\r\n    var m, n, r, rep, t,\r\n      x = this,\r\n      c = x.c,\r\n      s = x.s,\r\n      e = x.e,\r\n      dp = DECIMAL_PLACES + 4,\r\n      half = new BigNumber('0.5');\r\n\r\n    // Negative/NaN/Infinity/zero?\r\n    if (s !== 1 || !c || !c[0]) {\r\n      return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0);\r\n    }\r\n\r\n    // Initial estimate.\r\n    s = Math.sqrt(+valueOf(x));\r\n\r\n    // Math.sqrt underflow/overflow?\r\n    // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n    if (s == 0 || s == 1 / 0) {\r\n      n = coeffToString(c);\r\n      if ((n.length + e) % 2 == 0) n += '0';\r\n      s = Math.sqrt(+n);\r\n      e = bitFloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n      if (s == 1 / 0) {\r\n        n = '5e' + e;\r\n      } else {\r\n        n = s.toExponential();\r\n        n = n.slice(0, n.indexOf('e') + 1) + e;\r\n      }\r\n\r\n      r = new BigNumber(n);\r\n    } else {\r\n      r = new BigNumber(s + '');\r\n    }\r\n\r\n    // Check for zero.\r\n    // r could be zero if MIN_EXP is changed after the this value was created.\r\n    // This would cause a division by zero (x/t) and hence Infinity below, which would cause\r\n    // coeffToString to throw.\r\n    if (r.c[0]) {\r\n      e = r.e;\r\n      s = e + dp;\r\n      if (s < 3) s = 0;\r\n\r\n      // Newton-Raphson iteration.\r\n      for (; ;) {\r\n        t = r;\r\n        r = half.times(t.plus(div(x, t, dp, 1)));\r\n\r\n        if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) {\r\n\r\n          // The exponent of r may here be one less than the final result exponent,\r\n          // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits\r\n          // are indexed correctly.\r\n          if (r.e < e) --s;\r\n          n = n.slice(s - 3, s + 1);\r\n\r\n          // The 4th rounding digit may be in error by -1 so if the 4 rounding digits\r\n          // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the\r\n          // iteration.\r\n          if (n == '9999' || !rep && n == '4999') {\r\n\r\n            // On the first iteration only, check to see if rounding up gives the\r\n            // exact result as the nines may infinitely repeat.\r\n            if (!rep) {\r\n              round(t, t.e + DECIMAL_PLACES + 2, 0);\r\n\r\n              if (t.times(t).eq(x)) {\r\n                r = t;\r\n                break;\r\n              }\r\n            }\r\n\r\n            dp += 4;\r\n            s += 4;\r\n            rep = 1;\r\n          } else {\r\n\r\n            // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact\r\n            // result. If not, then there are further digits and m will be truthy.\r\n            if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n              // Truncate to the first rounding digit.\r\n              round(r, r.e + DECIMAL_PLACES + 2, 1);\r\n              m = !r.times(r).eq(x);\r\n            }\r\n\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this BigNumber in exponential notation and\r\n   * rounded using ROUNDING_MODE to dp fixed decimal places.\r\n   *\r\n   * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n   */\r\n  P.toExponential = function (dp, rm) {\r\n    if (dp != null) {\r\n      intCheck(dp, 0, MAX);\r\n      dp++;\r\n    }\r\n    return format(this, dp, rm, 1);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this BigNumber in fixed-point notation rounding\r\n   * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n   *\r\n   * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',\r\n   * but e.g. (-0.00001).toFixed(0) is '-0'.\r\n   *\r\n   * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n   */\r\n  P.toFixed = function (dp, rm) {\r\n    if (dp != null) {\r\n      intCheck(dp, 0, MAX);\r\n      dp = dp + this.e + 1;\r\n    }\r\n    return format(this, dp, rm);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this BigNumber in fixed-point notation rounded\r\n   * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties\r\n   * of the format or FORMAT object (see BigNumber.set).\r\n   *\r\n   * The formatting object may contain some or all of the properties shown below.\r\n   *\r\n   * FORMAT = {\r\n   *   prefix: '',\r\n   *   groupSize: 3,\r\n   *   secondaryGroupSize: 0,\r\n   *   groupSeparator: ',',\r\n   *   decimalSeparator: '.',\r\n   *   fractionGroupSize: 0,\r\n   *   fractionGroupSeparator: '\\xA0',      // non-breaking space\r\n   *   suffix: ''\r\n   * };\r\n   *\r\n   * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   * [format] {object} Formatting options. See FORMAT pbject above.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n   * '[BigNumber Error] Argument not an object: {format}'\r\n   */\r\n  P.toFormat = function (dp, rm, format) {\r\n    var str,\r\n      x = this;\r\n\r\n    if (format == null) {\r\n      if (dp != null && rm && typeof rm == 'object') {\r\n        format = rm;\r\n        rm = null;\r\n      } else if (dp && typeof dp == 'object') {\r\n        format = dp;\r\n        dp = rm = null;\r\n      } else {\r\n        format = FORMAT;\r\n      }\r\n    } else if (typeof format != 'object') {\r\n      throw Error\r\n        (bignumberError + 'Argument not an object: ' + format);\r\n    }\r\n\r\n    str = x.toFixed(dp, rm);\r\n\r\n    if (x.c) {\r\n      var i,\r\n        arr = str.split('.'),\r\n        g1 = +format.groupSize,\r\n        g2 = +format.secondaryGroupSize,\r\n        groupSeparator = format.groupSeparator || '',\r\n        intPart = arr[0],\r\n        fractionPart = arr[1],\r\n        isNeg = x.s < 0,\r\n        intDigits = isNeg ? intPart.slice(1) : intPart,\r\n        len = intDigits.length;\r\n\r\n      if (g2) {\r\n        i = g1;\r\n        g1 = g2;\r\n        g2 = i;\r\n        len -= i;\r\n      }\r\n\r\n      if (g1 > 0 && len > 0) {\r\n        i = len % g1 || g1;\r\n        intPart = intDigits.substr(0, i);\r\n        for (; i < len; i += g1) intPart += groupSeparator + intDigits.substr(i, g1);\r\n        if (g2 > 0) intPart += groupSeparator + intDigits.slice(i);\r\n        if (isNeg) intPart = '-' + intPart;\r\n      }\r\n\r\n      str = fractionPart\r\n       ? intPart + (format.decimalSeparator || '') + ((g2 = +format.fractionGroupSize)\r\n        ? fractionPart.replace(new RegExp('\\\\d{' + g2 + '}\\\\B', 'g'),\r\n         '$&' + (format.fractionGroupSeparator || ''))\r\n        : fractionPart)\r\n       : intPart;\r\n    }\r\n\r\n    return (format.prefix || '') + str + (format.suffix || '');\r\n  };\r\n\r\n\r\n  /*\r\n   * Return an array of two BigNumbers representing the value of this BigNumber as a simple\r\n   * fraction with an integer numerator and an integer denominator.\r\n   * The denominator will be a positive non-zero value less than or equal to the specified\r\n   * maximum denominator. If a maximum denominator is not specified, the denominator will be\r\n   * the lowest value necessary to represent the number exactly.\r\n   *\r\n   * [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator.\r\n   *\r\n   * '[BigNumber Error] Argument {not an integer|out of range} : {md}'\r\n   */\r\n  P.toFraction = function (md) {\r\n    var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s,\r\n      x = this,\r\n      xc = x.c;\r\n\r\n    if (md != null) {\r\n      n = new BigNumber(md);\r\n\r\n      // Throw if md is less than one or is not an integer, unless it is Infinity.\r\n      if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) {\r\n        throw Error\r\n          (bignumberError + 'Argument ' +\r\n            (n.isInteger() ? 'out of range: ' : 'not an integer: ') + valueOf(n));\r\n      }\r\n    }\r\n\r\n    if (!xc) return new BigNumber(x);\r\n\r\n    d = new BigNumber(ONE);\r\n    n1 = d0 = new BigNumber(ONE);\r\n    d1 = n0 = new BigNumber(ONE);\r\n    s = coeffToString(xc);\r\n\r\n    // Determine initial denominator.\r\n    // d is a power of 10 and the minimum max denominator that specifies the value exactly.\r\n    e = d.e = s.length - x.e - 1;\r\n    d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp];\r\n    md = !md || n.comparedTo(d) > 0 ? (e > 0 ? d : n1) : n;\r\n\r\n    exp = MAX_EXP;\r\n    MAX_EXP = 1 / 0;\r\n    n = new BigNumber(s);\r\n\r\n    // n0 = d1 = 0\r\n    n0.c[0] = 0;\r\n\r\n    for (; ;)  {\r\n      q = div(n, d, 0, 1);\r\n      d2 = d0.plus(q.times(d1));\r\n      if (d2.comparedTo(md) == 1) break;\r\n      d0 = d1;\r\n      d1 = d2;\r\n      n1 = n0.plus(q.times(d2 = n1));\r\n      n0 = d2;\r\n      d = n.minus(q.times(d2 = d));\r\n      n = d2;\r\n    }\r\n\r\n    d2 = div(md.minus(d0), d1, 0, 1);\r\n    n0 = n0.plus(d2.times(n1));\r\n    d0 = d0.plus(d2.times(d1));\r\n    n0.s = n1.s = x.s;\r\n    e = e * 2;\r\n\r\n    // Determine which fraction is closer to x, n0/d0 or n1/d1\r\n    r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo(\r\n        div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0];\r\n\r\n    MAX_EXP = exp;\r\n\r\n    return r;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return the value of this BigNumber converted to a number primitive.\r\n   */\r\n  P.toNumber = function () {\r\n    return +valueOf(this);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this BigNumber rounded to sd significant digits\r\n   * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits\r\n   * necessary to represent the integer part of the value in fixed-point notation, then use\r\n   * exponential notation.\r\n   *\r\n   * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n   */\r\n  P.toPrecision = function (sd, rm) {\r\n    if (sd != null) intCheck(sd, 1, MAX);\r\n    return format(this, sd, rm, 2);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this BigNumber in base b, or base 10 if b is\r\n   * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and\r\n   * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent\r\n   * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than\r\n   * TO_EXP_NEG, return exponential notation.\r\n   *\r\n   * [b] {number} Integer, 2 to ALPHABET.length inclusive.\r\n   *\r\n   * '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n   */\r\n  P.toString = function (b) {\r\n    var str,\r\n      n = this,\r\n      s = n.s,\r\n      e = n.e;\r\n\r\n    // Infinity or NaN?\r\n    if (e === null) {\r\n      if (s) {\r\n        str = 'Infinity';\r\n        if (s < 0) str = '-' + str;\r\n      } else {\r\n        str = 'NaN';\r\n      }\r\n    } else {\r\n      if (b == null) {\r\n        str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n         ? toExponential(coeffToString(n.c), e)\r\n         : toFixedPoint(coeffToString(n.c), e, '0');\r\n      } else if (b === 10 && alphabetHasNormalDecimalDigits) {\r\n        n = round(new BigNumber(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE);\r\n        str = toFixedPoint(coeffToString(n.c), n.e, '0');\r\n      } else {\r\n        intCheck(b, 2, ALPHABET.length, 'Base');\r\n        str = convertBase(toFixedPoint(coeffToString(n.c), e, '0'), 10, b, s, true);\r\n      }\r\n\r\n      if (s < 0 && n.c[0]) str = '-' + str;\r\n    }\r\n\r\n    return str;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return as toString, but do not accept a base argument, and include the minus sign for\r\n   * negative zero.\r\n   */\r\n  P.valueOf = P.toJSON = function () {\r\n    return valueOf(this);\r\n  };\r\n\r\n\r\n  P._isBigNumber = true;\r\n\r\n  P[Symbol.toStringTag] = 'BigNumber';\r\n\r\n  // Node.js v10.12.0+\r\n  P[Symbol.for('nodejs.util.inspect.custom')] = P.valueOf;\r\n\r\n  if (configObject != null) BigNumber.set(configObject);\r\n\r\n  return BigNumber;\r\n}\r\n\r\n\r\n// PRIVATE HELPER FUNCTIONS\r\n\r\n// These functions don't need access to variables,\r\n// e.g. DECIMAL_PLACES, in the scope of the `clone` function above.\r\n\r\n\r\nfunction bitFloor(n) {\r\n  var i = n | 0;\r\n  return n > 0 || n === i ? i : i - 1;\r\n}\r\n\r\n\r\n// Return a coefficient array as a string of base 10 digits.\r\nfunction coeffToString(a) {\r\n  var s, z,\r\n    i = 1,\r\n    j = a.length,\r\n    r = a[0] + '';\r\n\r\n  for (; i < j;) {\r\n    s = a[i++] + '';\r\n    z = LOG_BASE - s.length;\r\n    for (; z--; s = '0' + s);\r\n    r += s;\r\n  }\r\n\r\n  // Determine trailing zeros.\r\n  for (j = r.length; r.charCodeAt(--j) === 48;);\r\n\r\n  return r.slice(0, j + 1 || 1);\r\n}\r\n\r\n\r\n// Compare the value of BigNumbers x and y.\r\nfunction compare(x, y) {\r\n  var a, b,\r\n    xc = x.c,\r\n    yc = y.c,\r\n    i = x.s,\r\n    j = y.s,\r\n    k = x.e,\r\n    l = y.e;\r\n\r\n  // Either NaN?\r\n  if (!i || !j) return null;\r\n\r\n  a = xc && !xc[0];\r\n  b = yc && !yc[0];\r\n\r\n  // Either zero?\r\n  if (a || b) return a ? b ? 0 : -j : i;\r\n\r\n  // Signs differ?\r\n  if (i != j) return i;\r\n\r\n  a = i < 0;\r\n  b = k == l;\r\n\r\n  // Either Infinity?\r\n  if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1;\r\n\r\n  // Compare exponents.\r\n  if (!b) return k > l ^ a ? 1 : -1;\r\n\r\n  j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n  // Compare digit by digit.\r\n  for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1;\r\n\r\n  // Compare lengths.\r\n  return k == l ? 0 : k > l ^ a ? 1 : -1;\r\n}\r\n\r\n\r\n/*\r\n * Check that n is a primitive number, an integer, and in range, otherwise throw.\r\n */\r\nfunction intCheck(n, min, max, name) {\r\n  if (n < min || n > max || n !== mathfloor(n)) {\r\n    throw Error\r\n     (bignumberError + (name || 'Argument') + (typeof n == 'number'\r\n       ? n < min || n > max ? ' out of range: ' : ' not an integer: '\r\n       : ' not a primitive number: ') + String(n));\r\n  }\r\n}\r\n\r\n\r\n// Assumes finite n.\r\nfunction isOdd(n) {\r\n  var k = n.c.length - 1;\r\n  return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0;\r\n}\r\n\r\n\r\nfunction toExponential(str, e) {\r\n  return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) +\r\n   (e < 0 ? 'e' : 'e+') + e;\r\n}\r\n\r\n\r\nfunction toFixedPoint(str, e, z) {\r\n  var len, zs;\r\n\r\n  // Negative exponent?\r\n  if (e < 0) {\r\n\r\n    // Prepend zeros.\r\n    for (zs = z + '.'; ++e; zs += z);\r\n    str = zs + str;\r\n\r\n  // Positive exponent\r\n  } else {\r\n    len = str.length;\r\n\r\n    // Append zeros.\r\n    if (++e > len) {\r\n      for (zs = z, e -= len; --e; zs += z);\r\n      str += zs;\r\n    } else if (e < len) {\r\n      str = str.slice(0, e) + '.' + str.slice(e);\r\n    }\r\n  }\r\n\r\n  return str;\r\n}\r\n\r\n\r\n// EXPORT\r\n\r\n\r\nexport var BigNumber = clone();\r\n\r\nexport default BigNumber;\r\n", "import BigNumber from \"bignumber.js\";\nimport { RoundingMode } from \"../typing\";\n\nenum RoundingModeMap {\n  \"up\" = BigNumber.ROUND_UP,\n  \"down\" = BigNumber.ROUND_DOWN,\n  \"truncate\" = BigNumber.ROUND_DOWN,\n  \"halfUp\" = BigNumber.ROUND_HALF_UP,\n  \"default\" = BigNumber.ROUND_HALF_UP,\n  \"halfDown\" = BigNumber.ROUND_HALF_DOWN,\n  \"halfEven\" = BigNumber.ROUND_HALF_EVEN,\n  \"banker\" = BigNumber.ROUND_HALF_EVEN,\n  \"ceiling\" = BigNumber.ROUND_CEIL,\n  \"ceil\" = BigNumber.ROUND_CEIL,\n  \"floor\" = BigNumber.ROUND_FLOOR,\n}\n\n/**\n * @param {RoundingMode} roundMode BigNumber's rounding mode shortcut.\n *\n * @return {BigNumber.RoundingMode} The related BigNumber rounding mode.\n */\nexport function expandRoundMode(\n  roundMode: RoundingMode,\n): BigNumber.RoundingMode {\n  return (RoundingModeMap[roundMode] ??\n    RoundingModeMap.default) as BigNumber.RoundingMode;\n}\n", "import BigNumber from \"bignumber.js\";\nimport repeat from \"lodash/repeat\";\n\nimport { FormatNumberOptions, Numeric } from \"../typing\";\nimport { roundNumber } from \"./roundNumber\";\nimport { parseBigNumber } from \"./parseBigNumber\";\n\nfunction replaceInFormat(\n  format: string,\n  { formattedNumber, unit }: { formattedNumber: string; unit: string },\n): string {\n  return format.replace(\"%n\", formattedNumber).replace(\"%u\", unit);\n}\n\nfunction computeSignificand({\n  significand,\n  whole,\n  precision,\n}: {\n  significand: string;\n  whole: string;\n  precision: number | null;\n}) {\n  if (whole === \"0\" || precision === null) {\n    return significand;\n  }\n\n  const limit = Math.max(0, precision - whole.length);\n\n  return (significand ?? \"\").substr(0, limit);\n}\n\n/**\n * Formats a number.\n *\n * @param {Numeric} input The numeric value that will be formatted.\n *\n * @param {FormatNumberOptions} options The formatting options.\n *\n * @return {string}                      The formatted number.\n */\nexport function formatNumber(\n  input: Numeric,\n  options: FormatNumberOptions,\n): string {\n  const originalNumber = parseBigNumber(input, options.raise);\n  const roundedNumber = roundNumber(originalNumber, options);\n  const numeric = new BigNumber(roundedNumber);\n  const isNegative = numeric.lt(0);\n  const isZero = numeric.isZero();\n  let [whole, significand] = roundedNumber.split(\".\");\n  const buffer: string[] = [];\n  let formattedNumber: string;\n  const positiveFormat = options.format ?? \"%n\";\n  const negativeFormat = options.negativeFormat ?? `-${positiveFormat}`;\n  const format = isNegative && !isZero ? negativeFormat : positiveFormat;\n\n  whole = whole.replace(\"-\", \"\");\n\n  while (whole.length > 0) {\n    buffer.unshift(whole.substr(Math.max(0, whole.length - 3), 3));\n    whole = whole.substr(0, whole.length - 3);\n  }\n\n  whole = buffer.join(\"\");\n  formattedNumber = buffer.join(options.delimiter);\n\n  if (options.significant) {\n    significand = computeSignificand({\n      whole,\n      significand,\n      precision: options.precision,\n    });\n  } else {\n    significand = significand ?? repeat(\"0\", options.precision ?? 0);\n  }\n\n  if (options.stripInsignificantZeros && significand) {\n    significand = significand.replace(/0+$/, \"\");\n  }\n\n  if (originalNumber.isNaN()) {\n    formattedNumber = input.toString();\n  }\n\n  if (significand && originalNumber.isFinite()) {\n    formattedNumber += (options.separator || \".\") + significand;\n  }\n\n  return replaceInFormat(format, {\n    formattedNumber,\n    unit: options.unit,\n  });\n}\n", "import BigNumber from \"bignumber.js\";\n\nimport { RoundingMode } from \"../typing\";\nimport { expandRoundMode } from \"./expandRoundMode\";\n\ntype RoundingOptions = {\n  roundMode: RoundingMode;\n  precision: number | null;\n  significant: boolean;\n};\n\nfunction digitCount(numeric: BigNumber): number {\n  if (numeric.isZero()) {\n    return 1;\n  }\n\n  return Math.floor(Math.log10(numeric.abs().toNumber()) + 1);\n}\n\nfunction getAbsolutePrecision(\n  numeric: BigNumber,\n  { precision, significant }: RoundingOptions,\n): number | null {\n  if (significant && precision !== null && precision > 0) {\n    return precision - digitCount(numeric);\n  }\n\n  return precision;\n}\n\n/**\n * Round a number.\n *\n * @private\n *\n * @param {BigNumber} numeric The number that will be rounded.\n *\n * @param {RoundingOptions} options The rounding options.\n *\n * @return {string} The rounded number.\n */\nexport function roundNumber(\n  numeric: BigNumber,\n  options: RoundingOptions,\n): string {\n  const precision = getAbsolutePrecision(numeric, options);\n\n  if (precision === null) {\n    return numeric.toString();\n  }\n\n  const roundMode = expandRoundMode(options.roundMode);\n\n  if (precision >= 0) {\n    return numeric.toFixed(precision, roundMode);\n  }\n\n  // Ruby's BigDecimal support negative precision calculation, but JS'\n  // BigNumber doesn't. This will ensure we'll match Ruby's behavior.\n  const rounder = 10 ** Math.abs(precision);\n\n  numeric = new BigNumber(numeric.div(rounder).toFixed(0, roundMode)).times(\n    rounder,\n  );\n\n  return numeric.toString();\n}\n", "import BigNumber from \"bignumber.js\";\nimport { Numeric } from \"typing\";\n\nexport function parseBigNumber(input: Numeric, raise: boolean = false) {\n  let output = BigNumber(NaN);\n\n  try {\n    output = new BigNumber(input);\n  } catch {\n    if (raise && output.isNaN()) {\n      throw new Error(`\"${input}\" is not a valid numeric value`);\n    }\n  }\n\n  return output;\n}\n", "import { Dict, Scope } from \"../typing\";\nimport { I18n } from \"../I18n\";\n\n/**\n * Get the full scope.\n *\n * @private\n *\n * @param {I18n} i18n The I18n instance.\n * @param {Scope} scope The scope object.\n * @param {object} options  Options containing the base scope to be prepended.\n * @returns {string} The full scope joined by the default separator.\n */\nexport function getFullScope(i18n: I18n, scope: Scope, options: Dict): string {\n  let result = \"\";\n\n  // Deal with string scopes.\n  if (scope instanceof String || typeof scope === \"string\") {\n    result = scope as string;\n  }\n\n  // Deal with the scope as an array.\n  if (scope instanceof Array) {\n    result = (scope as string[]).join(i18n.defaultSeparator);\n  }\n\n  // Deal with the scope option provided through the second argument.\n  //\n  //    I18n.t('hello', {scope: 'greetings'});\n  //\n  if (options.scope) {\n    result = [options.scope, result].join(i18n.defaultSeparator);\n  }\n\n  return result;\n}\n", "/**\n * Return object type.\n *\n * @private\n *\n * @param {unknown} instance The object that will be inspected.\n *\n * @returns {string} The object's type.\n */\nexport function inferType(instance: unknown): string {\n  if (instance === null) {\n    return \"null\";\n  }\n\n  const type = typeof instance;\n\n  if (type !== \"object\") {\n    return type;\n  }\n\n  return (instance as any)?.constructor?.name?.toLowerCase() || \"object\";\n}\n", "import { TranslateOptions } from \"../typing\";\nimport { I18n } from \"../I18n\";\nimport { isSet } from \"./isSet\";\n\n/**\n * This function interpolates the all variables in the given message.\n *\n * @private\n *\n * @param {I18n} i18n The I18n instance.\n *\n * @param {string} message The string containing the placeholders.\n *\n * @param {object} options The source object that will be used as the\n * placeholders' source.\n *\n * @returns {string} The interpolated string.\n */\nexport function interpolate(\n  i18n: I18n,\n  message: string,\n  options: TranslateOptions,\n): string {\n  options = Object.keys(options).reduce((buffer, key) => {\n    buffer[i18n.transformKey(key)] = options[key];\n    return buffer;\n  }, {} as TranslateOptions);\n  const matches = message.match(i18n.placeholder);\n\n  if (!matches) {\n    return message;\n  }\n\n  while (matches.length) {\n    let value: string;\n    const placeholder = matches.shift() as string;\n    const name = placeholder.replace(i18n.placeholder, \"$1\");\n\n    if (isSet(options[name])) {\n      value = options[name].toString().replace(/\\$/gm, \"_#$#_\");\n    } else if (name in options) {\n      value = i18n.nullPlaceholder(i18n, placeholder, message, options);\n    } else {\n      value = i18n.missingPlaceholder(i18n, placeholder, message, options);\n    }\n\n    const regex = new RegExp(\n      placeholder.replace(/\\{/gm, \"\\\\{\").replace(/\\}/gm, \"\\\\}\"),\n      \"g\",\n    );\n\n    message = message.replace(regex, value);\n  }\n\n  return message.replace(/_#\\$#_/g, \"$\");\n}\n", "import { Dict, Scope } from \"../typing\";\nimport { I18n } from \"../I18n\";\nimport { isSet } from \"./isSet\";\nimport { getFullScope } from \"./getFullScope\";\nimport { inferType } from \"./inferType\";\n\n/**\n * Find and process the translation using the provided scope and options.\n * This is used internally by some functions and should not be used as a\n * public API.\n *\n * @private\n *\n * @param {I18n} i18n The I18n instance.\n *\n * @param {Scope} scope The translation scope.\n *\n * @param {Dict|undefined} options The lookup options.\n *\n * @returns {any} The resolved translation.\n */\nexport function lookup(i18n: I18n, scope: Scope, options: Dict = {}): any {\n  options = { ...options };\n\n  const locale = \"locale\" in options ? options.locale : i18n.locale;\n  const localeType = inferType(locale);\n\n  const locales = i18n.locales\n    .get(localeType === \"string\" ? locale : typeof locale)\n    .slice();\n\n  const keys = getFullScope(i18n, scope, options)\n    .split(i18n.defaultSeparator)\n    .map((component) => i18n.transformKey(component));\n\n  const entries = locales.map((locale) =>\n    keys.reduce((path, key) => path && path[key], i18n.translations[locale]),\n  );\n\n  entries.push(options.defaultValue);\n\n  return entries.find((entry) => isSet(entry));\n}\n", "import { Numeric, NumberToDelimitedOptions } from \"../typing\";\nimport { parseBigNumber } from \"./parseBigNumber\";\n\n/**\n * Formats a number with grouped thousands using delimiter (e.g., 12,324).\n *\n * @private\n *\n * @param {Numeric} input The number that will be formatted.\n *\n * @param {NumberToDelimitedOptions} options The formatting options.\n *\n * @return {string} The formatted number.\n */\nexport function numberToDelimited(\n  input: Numeric,\n  options: NumberToDelimitedOptions,\n): string {\n  const numeric = parseBigNumber(input, options.raise);\n\n  if (!numeric.isFinite()) {\n    return input.toString();\n  }\n\n  if (!options.delimiterPattern.global) {\n    throw new Error(\n      `options.delimiterPattern must be a global regular expression; received ${options.delimiterPattern}`,\n    );\n  }\n\n  // eslint-disable-next-line prefer-const\n  let [left, right] = numeric.toString().split(\".\");\n\n  left = left.replace(\n    options.delimiterPattern,\n    (digitToDelimiter) => `${digitToDelimiter}${options.delimiter}`,\n  );\n\n  return [left, right].filter(Boolean).join(options.separator);\n}\n", "import BigNumber from \"bignumber.js\";\nimport sortBy from \"lodash/sortBy\";\nimport zipObject from \"lodash/zipObject\";\n\nimport { I18n } from \"../I18n\";\nimport { Numeric, NumberToHumanOptions, NumberToHumanUnits } from \"../typing\";\nimport { getFullScope } from \"./getFullScope\";\nimport { lookup } from \"./lookup\";\nimport { roundNumber } from \"./roundNumber\";\nimport { inferType } from \"./inferType\";\nimport { parseBigNumber } from \"./parseBigNumber\";\n\n/**\n * Set decimal units used to calculate number to human formatting.\n */\nconst DECIMAL_UNITS = {\n  \"0\": \"unit\",\n  \"1\": \"ten\",\n  \"2\": \"hundred\",\n  \"3\": \"thousand\",\n  \"6\": \"million\",\n  \"9\": \"billion\",\n  \"12\": \"trillion\",\n  \"15\": \"quadrillion\",\n  \"-1\": \"deci\",\n  \"-2\": \"centi\",\n  \"-3\": \"mili\",\n  \"-6\": \"micro\",\n  \"-9\": \"nano\",\n  \"-12\": \"pico\",\n  \"-15\": \"femto\",\n};\n\nconst INVERTED_DECIMAL_UNITS = zipObject(\n  Object.values(DECIMAL_UNITS),\n  Object.keys(DECIMAL_UNITS).map((key) => parseInt(key, 10)),\n);\n\n/**\n * Pretty prints (formats and approximates) a number in a way it is more\n * readable by humans.\n *\n * @private\n *\n * @param {I18n} i18n The `I18n` instance.\n *\n * @param {Numeric} input The numeric value that will be represented.\n *\n * @param {NumberToHumanOptions} options The formatting options.\n *\n * @return {string} The formatted number.\n */\nexport function numberToHuman(\n  i18n: I18n,\n  input: Numeric,\n  options: NumberToHumanOptions,\n): string {\n  const roundOptions = {\n    roundMode: options.roundMode,\n    precision: options.precision,\n    significant: options.significant,\n  };\n\n  let units: NumberToHumanUnits;\n\n  if (inferType(options.units) === \"string\") {\n    const scope = options.units as string;\n    units = lookup(i18n, scope);\n\n    if (!units) {\n      throw new Error(\n        `The scope \"${i18n.locale}${i18n.defaultSeparator}${getFullScope(\n          i18n,\n          scope,\n          {},\n        )}\" couldn't be found`,\n      );\n    }\n  } else {\n    units = options.units as NumberToHumanUnits;\n  }\n\n  let formattedNumber = roundNumber(\n    parseBigNumber(input, options.raise),\n    roundOptions,\n  );\n\n  const unitExponents = (units: NumberToHumanUnits) =>\n    sortBy(\n      Object.keys(units).map((name) => INVERTED_DECIMAL_UNITS[name]),\n      (numeric) => numeric * -1,\n    );\n\n  const calculateExponent = (num: BigNumber, units: NumberToHumanUnits) => {\n    const exponent = num.isZero()\n      ? 0\n      : Math.floor(Math.log10(num.abs().toNumber()));\n\n    return unitExponents(units).find((exp) => exponent >= exp) || 0;\n  };\n\n  const determineUnit = (units: NumberToHumanUnits, exponent: number) => {\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    const expName = DECIMAL_UNITS[exponent.toString()];\n\n    return units[expName] || \"\";\n  };\n\n  const exponent = calculateExponent(new BigNumber(formattedNumber), units);\n  let unit = determineUnit(units, exponent);\n\n  formattedNumber = roundNumber(\n    new BigNumber(formattedNumber).div(10 ** exponent),\n    roundOptions,\n  );\n\n  let [whole, significand] = formattedNumber.split(\".\");\n\n  if (options.stripInsignificantZeros) {\n    significand = (significand || \"\").replace(/0+$/, \"\");\n  }\n\n  formattedNumber = whole;\n\n  if (significand) {\n    formattedNumber += `${options.separator}${significand}`;\n  }\n\n  // Handle pluralized units (e.g., {one: \"milh\u00E3o\", other: \"milh\u00F5es\"})\n  if (unit && typeof unit === \"object\") {\n    const count = parseFloat(formattedNumber.replace(options.separator, \".\"));\n    const pluralizer = i18n.pluralization.get(i18n.locale);\n    const keys = pluralizer(i18n, count);\n\n    for (const key of keys) {\n      if (unit[key] !== undefined) {\n        unit = unit[key];\n        break;\n      }\n    }\n  }\n\n  return options.format\n    .replace(\"%n\", formattedNumber || \"0\")\n    .replace(\"%u\", unit)\n    .trim();\n}\n", "import BigNumber from \"bignumber.js\";\n\nimport { I18n } from \"../I18n\";\nimport { Numeric, NumberToHumanSizeOptions } from \"../typing\";\nimport { roundNumber } from \"./roundNumber\";\nimport { expandRoundMode } from \"./expandRoundMode\";\nimport { parseBigNumber } from \"./parseBigNumber\";\n\n/**\n * Set default size units.\n */\nconst STORAGE_UNITS = [\"byte\", \"kb\", \"mb\", \"gb\", \"tb\", \"pb\", \"eb\"];\n\n/**\n * Formats the bytes in number into a more understandable representation.\n *\n * @param {I18n} i18n The `I18n` instance.\n *\n * @param {Numeric} input The number that will be represented.\n\n * @param {NumberToHumanSizeOptions} options The formatting options.\n\n * @return {string} The formatted number.\n */\nexport function numberToHumanSize(\n  i18n: I18n,\n  input: Numeric,\n  options: NumberToHumanSizeOptions,\n): string {\n  const roundMode = expandRoundMode(options.roundMode);\n  const base = 1024;\n  const num = parseBigNumber(input, options.raise).abs();\n  const smallerThanBase = num.lt(base);\n  let numberToBeFormatted;\n\n  const computeExponent = (numeric: BigNumber, units: string[]) => {\n    const max = units.length - 1;\n    const exp = new BigNumber(Math.log(numeric.toNumber()))\n      .div(Math.log(base))\n      .integerValue(BigNumber.ROUND_DOWN)\n      .toNumber();\n\n    return Math.min(max, exp);\n  };\n\n  const storageUnitKey = (units: string[]) => {\n    const keyEnd = smallerThanBase ? \"byte\" : units[exponent];\n    return `number.human.storage_units.units.${keyEnd}`;\n  };\n\n  const exponent = computeExponent(num, STORAGE_UNITS);\n\n  if (smallerThanBase) {\n    numberToBeFormatted = num.integerValue();\n  } else {\n    numberToBeFormatted = new BigNumber(\n      roundNumber(num.div(base ** exponent), {\n        significant: options.significant,\n        precision: options.precision,\n        roundMode: options.roundMode,\n      }),\n    );\n  }\n\n  const format = i18n.translate(\"number.human.storage_units.format\", {\n    defaultValue: \"%n %u\",\n  });\n\n  const unit = i18n.translate(storageUnitKey(STORAGE_UNITS), {\n    count: num.integerValue().toNumber(),\n  });\n\n  let formattedNumber = numberToBeFormatted.toFixed(\n    options.precision as number,\n    roundMode,\n  );\n\n  if (options.stripInsignificantZeros) {\n    formattedNumber = formattedNumber\n      .replace(/(\\..*?)0+$/, \"$1\")\n      .replace(/\\.$/, \"\");\n  }\n\n  return format.replace(\"%n\", formattedNumber).replace(\"%u\", unit);\n}\n", "import { DateTime } from \"../typing\";\n\n/**\n * Parse a given `input` string into a JavaScript Date object.\n * This function is time zone aware.\n *\n * The following string formats are recognized:\n *\n * ```\n * yyyy-mm-dd\n * yyyy-mm-dd[ T]hh:mm::ss\n * yyyy-mm-dd[ T]hh:mm::ss\n * yyyy-mm-dd[ T]hh:mm::ssZ\n * yyyy-mm-dd[ T]hh:mm::ss+0000\n * yyyy-mm-dd[ T]hh:mm::ss+00:00\n * yyyy-mm-dd[ T]hh:mm::ss.123Z\n * ```\n *\n * If any other pattern is provided, then it'll be parsed by `Date.parse`, which\n * may or may not bring the expected result.\n *\n * @private\n *\n * @example\n * ```js\n * parseDate(\"2019-12-09\");\n * ```\n *\n * @param {DateTime} input The date string or number timestamp that must be\n * parsed into a Date object. If a Date object is provided, then that's what\n * it'll be returned.\n *\n * @returns {Date} The parsed date.\n */\nexport function parseDate(input: DateTime): Date {\n  // we have a date, so just return it.\n  if (input instanceof Date) {\n    return input;\n  }\n\n  if (typeof input === \"number\") {\n    // UNIX timestamp\n    const date = new Date();\n    date.setTime(input as unknown as number);\n    return date;\n  }\n\n  const matches = new String(input).match(\n    /(\\d{4})-(\\d{2})-(\\d{2})(?:[ T](\\d{2}):(\\d{2}):(\\d{2})(?:[.,](\\d{1,3}))?)?(Z|\\+00:?00)?/,\n  );\n\n  if (matches) {\n    const parts = matches.slice(1, 8).map((match) => parseInt(match, 10) || 0);\n\n    // month starts on 0\n    parts[1] -= 1;\n\n    const [year, month, day, hour, minute, second, milliseconds] = parts;\n    const timezone = matches[8];\n\n    if (timezone) {\n      return new Date(\n        Date.UTC(year, month, day, hour, minute, second, milliseconds),\n      );\n    } else {\n      return new Date(year, month, day, hour, minute, second, milliseconds);\n    }\n  }\n\n  if (\n    input.match(\n      /([A-Z][a-z]{2}) ([A-Z][a-z]{2}) (\\d+) (\\d+:\\d+:\\d+) ([+-]\\d+) (\\d+)/,\n    )\n  ) {\n    // This format `Wed Jul 20 13:03:39 +0000 2011` is parsed by\n    // webkit/firefox, but not by IE, so we must parse it manually.\n    const date = new Date();\n    date.setTime(\n      Date.parse(\n        [RegExp.$1, RegExp.$2, RegExp.$3, RegExp.$6, RegExp.$4, RegExp.$5].join(\n          \" \",\n        ),\n      ),\n    );\n  }\n\n  // an arbitrary javascript string\n  const date = new Date();\n  date.setTime(Date.parse(input));\n\n  return date;\n}\n", "import { Scope, TranslateOptions } from \"../typing\";\nimport { I18n } from \"../I18n\";\n\nimport { isSet } from \"./isSet\";\nimport { lookup } from \"./lookup\";\n\n/**\n * Pluralize the given scope using the `count` value.\n * The pluralized translation may have other placeholders,\n * which will be retrieved from `options`.\n *\n * @private\n *\n * @param {I18n} i18n The I18n instance.\n *\n * @param {number} count The counting number.\n *\n * @param {Scope} scope The translation scope.\n *\n * @param {object} options The translation options.\n *\n * @returns {string} The translated string.\n */\nexport function pluralize({\n  i18n,\n  count,\n  scope,\n  options,\n  baseScope,\n}: {\n  i18n: I18n;\n  count: number;\n  scope: Scope;\n  options: TranslateOptions;\n  baseScope: string;\n}): string {\n  options = { ...options };\n  let translations;\n  let message;\n\n  if (typeof scope === \"object\" && scope) {\n    translations = scope;\n  } else {\n    translations = lookup(i18n, scope, options);\n  }\n\n  if (!translations) {\n    return i18n.missingTranslation.get(scope, options);\n  }\n\n  const pluralizer = i18n.pluralization.get(options.locale);\n  const keys = pluralizer(i18n, count);\n  const missingKeys: typeof keys = [];\n\n  while (keys.length) {\n    const key = keys.shift() as string;\n\n    if (isSet(translations[key])) {\n      message = translations[key];\n      break;\n    }\n\n    missingKeys.push(key);\n  }\n\n  if (!isSet(message)) {\n    return i18n.missingTranslation.get(\n      baseScope.split(i18n.defaultSeparator).concat([missingKeys[0]]),\n      options,\n    );\n  }\n\n  options.count = count;\n\n  return i18n.interpolate(i18n, message, options);\n}\n", "import { StrftimeOptions } from \"../typing\";\n\nconst DEFAULT_OPTIONS: StrftimeOptions = {\n  meridian: { am: \"AM\", pm: \"PM\" },\n  dayNames: [\n    \"Sunday\",\n    \"Monday\",\n    \"Tuesday\",\n    \"Wednesday\",\n    \"Thursday\",\n    \"Friday\",\n    \"Saturday\",\n  ],\n  abbrDayNames: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  monthNames: [\n    null,\n    \"January\",\n    \"February\",\n    \"March\",\n    \"April\",\n    \"May\",\n    \"June\",\n    \"July\",\n    \"August\",\n    \"September\",\n    \"October\",\n    \"November\",\n    \"December\",\n  ],\n  abbrMonthNames: [\n    null,\n    \"Jan\",\n    \"Feb\",\n    \"Mar\",\n    \"Apr\",\n    \"May\",\n    \"Jun\",\n    \"Jul\",\n    \"Aug\",\n    \"Sep\",\n    \"Oct\",\n    \"Nov\",\n    \"Dec\",\n  ],\n};\n\n/**\n * Formats time according to the directives in the given format string.\n * The directives begins with a percent (`%`) character. Any text not listed\n * as a directive will be passed through to the output string.\n *\n * The accepted formats are:\n *\n * ```\n * %a  - The abbreviated weekday name (Sun)\n * %A  - The full weekday name (Sunday)\n * %b  - The abbreviated month name (Jan)\n * %B  - The full month name (January)\n * %c  - The preferred local date and time representation\n * %d  - Day of the month (01..31)\n * %-d - Day of the month (1..31)\n * %H  - Hour of the day, 24-hour clock (00..23)\n * %-H - Hour of the day, 24-hour clock (0..23)\n * %k  - Hour of the day, 24-hour clock (0..23)\n * %I  - Hour of the day, 12-hour clock (01..12)\n * %-I - Hour of the day, 12-hour clock (1..12)\n * %l  - Hour of the day, 12-hour clock (1..12)\n * %m  - Month of the year (01..12)\n * %-m - Month of the year (1..12)\n * %M  - Minute of the hour (00..59)\n * %-M - Minute of the hour (0..59)\n * %p  - Meridian indicator (AM  or  PM)\n * %P  - Meridian indicator (am  or  pm)\n * %S  - Second of the minute (00..60)\n * %-S - Second of the minute (0..60)\n * %w  - Day of the week (Sunday is 0, 0..6)\n * %y  - Year without a century (00..99)\n * %-y - Year without a century (0..99)\n * %Y  - Year with century\n * %z  - Timezone offset (+0545)\n * %Z  - Timezone offset (+0545)\n * ```\n *\n * @private\n *\n * @param {date} date  The date that must be formatted.\n *\n * @param {string} format The formatting string.\n *\n * @param {StrftimeOptions} options The options that will be used to generate a\n * formatted date string.\n *\n * @returns {string} The formatted date string.\n */\nexport function strftime(\n  date: Date,\n  format: string,\n  options: Partial<StrftimeOptions> = {},\n): string {\n  const {\n    abbrDayNames,\n    dayNames,\n    abbrMonthNames,\n    monthNames,\n    meridian: AM_PM,\n    utc,\n  } = { ...DEFAULT_OPTIONS, ...options };\n\n  if (isNaN(date.getTime())) {\n    throw new Error(\n      \"strftime() requires a valid date object, but received an invalid date.\",\n    );\n  }\n\n  const weekDay = utc ? date.getUTCDay() : date.getDay();\n  const day = utc ? date.getUTCDate() : date.getDate();\n  const year = utc ? date.getUTCFullYear() : date.getFullYear();\n  const month = (utc ? date.getUTCMonth() : date.getMonth()) + 1;\n  const hour = utc ? date.getUTCHours() : date.getHours();\n  let hour12 = hour;\n  const meridian = hour > 11 ? \"pm\" : \"am\";\n  const secs = utc ? date.getUTCSeconds() : date.getSeconds();\n  const mins = utc ? date.getUTCMinutes() : date.getMinutes();\n  const offset = utc ? 0 : date.getTimezoneOffset();\n  const absOffsetHours = Math.floor(Math.abs(offset / 60));\n  const absOffsetMinutes = Math.abs(offset) - absOffsetHours * 60;\n  const timezoneoffset =\n    (offset > 0 ? \"-\" : \"+\") +\n    (absOffsetHours.toString().length < 2\n      ? \"0\" + absOffsetHours\n      : absOffsetHours) +\n    (absOffsetMinutes.toString().length < 2\n      ? \"0\" + absOffsetMinutes\n      : absOffsetMinutes);\n\n  if (hour12 > 12) {\n    hour12 = hour12 - 12;\n  } else if (hour12 === 0) {\n    hour12 = 12;\n  }\n\n  format = format.replace(\"%a\", abbrDayNames[weekDay]);\n  format = format.replace(\"%A\", dayNames[weekDay]);\n  format = format.replace(\"%b\", abbrMonthNames[month] as string);\n  format = format.replace(\"%B\", monthNames[month] as string);\n  format = format.replace(\"%d\", day.toString().padStart(2, \"0\"));\n  format = format.replace(\"%e\", day.toString());\n  format = format.replace(\"%-d\", day.toString());\n  format = format.replace(\"%H\", hour.toString().padStart(2, \"0\"));\n  format = format.replace(\"%-H\", hour.toString());\n  format = format.replace(\"%k\", hour.toString());\n  format = format.replace(\"%I\", hour12.toString().padStart(2, \"0\"));\n  format = format.replace(\"%-I\", hour12.toString());\n  format = format.replace(\"%l\", hour12.toString());\n  format = format.replace(\"%m\", month.toString().padStart(2, \"0\"));\n  format = format.replace(\"%-m\", month.toString());\n  format = format.replace(\"%M\", mins.toString().padStart(2, \"0\"));\n  format = format.replace(\"%-M\", mins.toString());\n  format = format.replace(\"%p\", AM_PM[meridian]);\n  format = format.replace(\"%P\", AM_PM[meridian].toLowerCase());\n  format = format.replace(\"%S\", secs.toString().padStart(2, \"0\"));\n  format = format.replace(\"%-S\", secs.toString());\n  format = format.replace(\"%w\", weekDay.toString());\n  format = format.replace(\"%y\", year.toString().padStart(2, \"0\").substr(-2));\n  format = format.replace(\n    \"%-y\",\n    year.toString().padStart(2, \"0\").substr(-2).replace(/^0+/, \"\"),\n  );\n  format = format.replace(\"%Y\", year.toString());\n  format = format.replace(/%z/i, timezoneoffset);\n\n  return format;\n}\n", "import range from \"lodash/range\";\n\nimport { I18n } from \"../I18n\";\nimport { DateTime, TimeAgoInWordsOptions } from \"../typing\";\nimport { parseDate } from \"./parseDate\";\n\nconst within = (start: number, end: number, actual: number): boolean =>\n  actual >= start && actual <= end;\n\n/**\n * Reports the approximate distance in time between two dates.\n *\n * @private\n *\n * @param {I18n} i18n The `I18n` instance.\n *\n * @param {DateTime} fromTime The initial date.\n *\n * @param {DateTime} toTime The end date.\n\n * @param {TimeAgoInWordsOptions} options Options.\n\n * @return {string} The approximate distance between the dates.\n */\nexport function timeAgoInWords(\n  i18n: I18n,\n  fromTime: DateTime,\n  toTime: DateTime,\n  options: TimeAgoInWordsOptions = {},\n): string {\n  const scope = options.scope || \"datetime.distance_in_words\";\n  const t = (name: string, count = 0): string => i18n.t(name, { count, scope });\n\n  fromTime = parseDate(fromTime);\n  toTime = parseDate(toTime);\n\n  let fromInSeconds = fromTime.getTime() / 1000;\n  let toInSeconds = toTime.getTime() / 1000;\n\n  if (fromInSeconds > toInSeconds) {\n    [fromTime, toTime, fromInSeconds, toInSeconds] = [\n      toTime,\n      fromTime,\n      toInSeconds,\n      fromInSeconds,\n    ];\n  }\n\n  const distanceInSeconds = Math.round(toInSeconds - fromInSeconds);\n  const distanceInMinutes = Math.round((toInSeconds - fromInSeconds) / 60);\n  const distanceInHours = distanceInMinutes / 60;\n  const distanceInDays = distanceInHours / 24;\n\n  const distanceInHoursRounded = Math.round(distanceInMinutes / 60);\n  const distanceInDaysRounded = Math.round(distanceInDays);\n  const distanceInMonthsRounded = Math.round(distanceInDaysRounded / 30);\n\n  if (within(0, 1, distanceInMinutes)) {\n    if (!options.includeSeconds) {\n      return distanceInMinutes === 0\n        ? t(\"less_than_x_minutes\", 1)\n        : t(\"x_minutes\", distanceInMinutes);\n    }\n\n    if (within(0, 4, distanceInSeconds)) {\n      return t(\"less_than_x_seconds\", 5);\n    }\n\n    if (within(5, 9, distanceInSeconds)) {\n      return t(\"less_than_x_seconds\", 10);\n    }\n\n    if (within(10, 19, distanceInSeconds)) {\n      return t(\"less_than_x_seconds\", 20);\n    }\n\n    if (within(20, 39, distanceInSeconds)) {\n      return t(\"half_a_minute\");\n    }\n\n    if (within(40, 59, distanceInSeconds)) {\n      return t(\"less_than_x_minutes\", 1);\n    }\n\n    return t(\"x_minutes\", 1);\n  }\n\n  if (within(2, 44, distanceInMinutes)) {\n    return t(\"x_minutes\", distanceInMinutes);\n  }\n\n  if (within(45, 89, distanceInMinutes)) {\n    return t(\"about_x_hours\", 1);\n  }\n\n  if (within(90, 1439, distanceInMinutes)) {\n    return t(\"about_x_hours\", distanceInHoursRounded);\n  }\n\n  if (within(1440, 2519, distanceInMinutes)) {\n    return t(\"x_days\", 1);\n  }\n\n  if (within(2520, 43_199, distanceInMinutes)) {\n    return t(\"x_days\", distanceInDaysRounded);\n  }\n\n  if (within(43_200, 86_399, distanceInMinutes)) {\n    return t(\"about_x_months\", Math.round(distanceInMinutes / 43200));\n  }\n\n  if (within(86_400, 525_599, distanceInMinutes)) {\n    return t(\"x_months\", distanceInMonthsRounded);\n  }\n\n  let fromYear = fromTime.getFullYear();\n\n  if (fromTime.getMonth() + 1 >= 3) {\n    fromYear += 1;\n  }\n\n  let toYear = toTime.getFullYear();\n\n  if (toTime.getMonth() + 1 < 3) {\n    toYear -= 1;\n  }\n\n  const leapYears =\n    fromYear > toYear\n      ? 0\n      : range(fromYear, toYear).filter(\n          (year) => new Date(year, 1, 29).getMonth() == 1,\n        ).length;\n\n  const minutesInYear = 525_600;\n  const minuteOffsetForLeapYear = leapYears * 1440;\n  const minutesWithOffset = distanceInMinutes - minuteOffsetForLeapYear;\n  const distanceInYears = Math.trunc(minutesWithOffset / minutesInYear);\n\n  const diff = parseFloat(\n    (minutesWithOffset / minutesInYear - distanceInYears).toPrecision(3),\n  );\n\n  if (diff < 0.25) {\n    return t(\"about_x_years\", distanceInYears);\n  }\n\n  if (diff < 0.75) {\n    return t(\"over_x_years\", distanceInYears);\n  }\n\n  return t(\"almost_x_years\", distanceInYears + 1);\n}\n", "import { Dict, MissingTranslationStrategy, Scope } from \"./typing\";\nimport { getFullScope, inferType } from \"./helpers\";\nimport { I18n } from \"./I18n\";\n\n/**\n * Generate a human readable version of the scope as the missing translation.\n * To use it, you have to set `i18n.missingBehavior` to `\"guess\"`.\n *\n * @type {MissingTranslationStrategy}\n *\n * @param {I18n} i18n The I18n instance.\n *\n * @param {Scope} scope The translation scope.\n *\n * @returns {string} The missing translation string.\n */\nexport const guessStrategy: MissingTranslationStrategy = function (\n  i18n,\n  scope,\n) {\n  if (scope instanceof Array) {\n    scope = scope.join(i18n.defaultSeparator);\n  }\n\n  // Get only the last portion of the scope.\n  const message = scope.split(i18n.defaultSeparator).slice(-1)[0];\n\n  // Replace underscore with space and camelcase with space and\n  // lowercase letter.\n  return (\n    i18n.missingTranslationPrefix +\n    message\n      .replace(\"_\", \" \")\n      .replace(\n        /([a-z])([A-Z])/g,\n        (_match: string, p1: string, p2: string) => `${p1} ${p2.toLowerCase()}`,\n      )\n  );\n};\n\n/**\n * Generate the missing translation message, which includes the full scope.\n * To use it, you have to set `i18n.missingBehavior` to `\"message\"`.\n * This is the default behavior.\n *\n * @type {MissingTranslationStrategy}\n *\n * @param {I18n} i18n The I18n instance.\n *\n * @param {Scope} scope The translation scope.\n *\n * @param {Dict} options The translations' options.\n *\n * @returns {string} The missing translation string.\n */\nexport const messageStrategy: MissingTranslationStrategy = (\n  i18n,\n  scope,\n  options,\n) => {\n  const fullScope = getFullScope(i18n, scope, options);\n  const locale = \"locale\" in options ? options.locale : i18n.locale;\n  const localeType = inferType(locale);\n\n  const fullScopeWithLocale = [\n    localeType == \"string\" ? locale : localeType,\n    fullScope,\n  ].join(i18n.defaultSeparator);\n\n  return `[missing \"${fullScopeWithLocale}\" translation]`;\n};\n\n/**\n * Throw an error whenever a translation cannot be found. The message will\n * includes the full scope.\n * To use it, you have to set `i18n.missingBehavior` to `\"error\"`.\n *\n * @type {MissingTranslationStrategy}\n *\n * @param {I18n} i18n The I18n instance.\n *\n * @param {Scope} scope The translation scope.\n *\n * @param {Dict} options The translations' options.\n *\n * @returns {void}\n */\nexport const errorStrategy: MissingTranslationStrategy = (\n  i18n,\n  scope,\n  options,\n) => {\n  const fullScope = getFullScope(i18n, scope, options);\n  const fullScopeWithLocale = [i18n.locale, fullScope].join(\n    i18n.defaultSeparator,\n  );\n\n  throw new Error(`Missing translation: ${fullScopeWithLocale}`);\n};\n\nexport class MissingTranslation {\n  private i18n: I18n;\n  private registry: Dict;\n\n  constructor(i18n: I18n) {\n    this.i18n = i18n;\n    this.registry = {};\n\n    this.register(\"guess\", guessStrategy);\n    this.register(\"message\", messageStrategy);\n    this.register(\"error\", errorStrategy);\n  }\n\n  /**\n   * Registers a new missing translation strategy. This is how messages are\n   * defined when a translation cannot be found.\n   *\n   * The follow example registers a strategy that always return the phrase\n   * \"Oops! Missing translation.\".\n   *\n   * @example\n   * ```js\n   * i18n.missingTranslation.register(\n   *   \"oops\",\n   *   (i18n, scope, options) => \"Oops! Missing translation.\"\n   * );\n   *\n   * i18n.missingBehavior = \"oops\";\n   * ```\n   *\n   * @param {string} name The strategy name.\n   *\n   * @param {MissingTranslationStrategy} strategy A function that returns a\n   * string the result of a missing translation scope.\n   *\n   * @returns {void}\n   */\n  public register(name: string, strategy: MissingTranslationStrategy): void {\n    this.registry[name] = strategy;\n  }\n\n  /**\n   * Return a missing translation message for the given parameters.\n   *\n   * @param {Scope} scope The translations' scope.\n   *\n   * @param {Dict} options The translations' options.\n   *\n   * @returns {string} The missing translation.\n   */\n  public get(scope: Scope, options: Dict): string {\n    return this.registry[options.missingBehavior ?? this.i18n.missingBehavior](\n      this.i18n,\n      scope,\n      options,\n    );\n  }\n}\n", "const t={config:{},run(){this.getController().processElements()},process(...t){for(const e of t)this.getController().processElement(e);return t.length},getController(){return this.controller?this.controller:this.controller=new t.Controller}};t.config.useFormat24=!1,t.config.i18n={en:{date:{dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],abbrDayNames:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],abbrMonthNames:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],yesterday:\"yesterday\",today:\"today\",tomorrow:\"tomorrow\",on:\"on {date}\",formats:{default:\"%b %e, %Y\",thisYear:\"%b %e\"}},time:{am:\"am\",pm:\"pm\",singular:\"a {time}\",singularAn:\"an {time}\",elapsed:\"{time} ago\",second:\"second\",seconds:\"seconds\",minute:\"minute\",minutes:\"minutes\",hour:\"hour\",hours:\"hours\",formats:{default:\"%l:%M%P\",default_24h:\"%H:%M\"}},datetime:{at:\"{date} at {time}\",formats:{default:\"%B %e, %Y at %l:%M%P %Z\",default_24h:\"%B %e, %Y at %H:%M %Z\"}}}},t.config.locale=\"en\",t.config.defaultLocale=\"en\",t.config.timerInterval=6e4;const e=!isNaN(Date.parse(\"2011-01-01T12:00:00-05:00\"));t.parseDate=t=>(t=t.toString(),e||(t=function(t){const e=t.match(r);if(e){let t;const[r,a,s,n,i,o,c,u]=e;return\"Z\"!==u&&(t=u.replace(\":\",\"\")),`${a}/${s}/${n} ${i}:${o}:${c} GMT${[t]}`}}(t)),new Date(Date.parse(t)));const r=/^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(Z|[-+]?[\\d:]+)$/;t.elementMatchesSelector=(()=>{const t=document.documentElement,e=t.matches||t.matchesSelector||t.webkitMatchesSelector||t.mozMatchesSelector||t.msMatchesSelector;return(t,r)=>{if(t?.nodeType===Node.ELEMENT_NODE)return e.call(t,r)}})();const{config:a}=t,{i18n:s}=a;t.getI18nValue=(e=\"\",r={locale:a.locale})=>{const{locale:n}=r,i=function(t,e){let r=t;for(var a of Array.from(e.split(\".\"))){if(!r[a])return null;r=r[a]}return r}(s[n],e);return i||(n!==a.defaultLocale?t.getI18nValue(e,{locale:a.defaultLocale}):void 0)},t.translate=(e,r={},a)=>{let s=t.getI18nValue(e,a);for(const t in r){const e=r[t];s=s.replace(`{${t}}`,e)}return s};const{getI18nValue:n,translate:i}=t,o=\"function\"==typeof Intl?.DateTimeFormat,c={\"Central European Standard Time\":\"CET\",\"Central European Summer Time\":\"CEST\",\"China Standard Time\":\"CST\",\"Israel Daylight Time\":\"IDT\",\"Israel Standard Time\":\"IST\",\"Moscow Standard Time\":\"MSK\",\"Peru Standard Time\":\"PET\",\"Philippine Standard Time\":\"PHT\",\"Singapore Standard Time\":\"SGT\",\"Western Indonesia Time\":\"WIB\"};t.knownEdgeCaseTimeZones=c,t.strftime=(()=>{const t=(a,s)=>{const u=a.getDay(),l=a.getDate(),d=a.getMonth(),m=a.getFullYear(),h=a.getHours(),f=a.getMinutes(),g=a.getSeconds();return s.replace(/%(-?)([%aAbBcdeHIlmMpPSwyYZ])/g,((s,p,y)=>{switch(y){case\"%\":return\"%\";case\"a\":return n(\"date.abbrDayNames\")[u];case\"A\":return n(\"date.dayNames\")[u];case\"b\":return n(\"date.abbrMonthNames\")[d];case\"B\":return n(\"date.monthNames\")[d];case\"c\":return a.toString();case\"d\":return e(l,p);case\"e\":return l;case\"H\":return e(h,p);case\"I\":return e(t(a,\"%l\"),p);case\"l\":return 0===h||12===h?12:(h+12)%12;case\"m\":return e(d+1,p);case\"M\":return e(f,p);case\"p\":return i(\"time.\"+(h>11?\"pm\":\"am\")).toUpperCase();case\"P\":return i(\"time.\"+(h>11?\"pm\":\"am\"));case\"S\":return e(g,p);case\"w\":return u;case\"y\":return e(m%100,p);case\"Y\":return m;case\"Z\":return function(t){let e,a,s;return(a=function(t){return Object.keys(c).find((e=>o?new Date(t).toLocaleString(\"en-US\",{timeZoneName:\"long\"}).includes(e):t.toString().includes(e)))}(t))?c[a]:(s=r(t,{allowGMT:!1}))||(s=function(t){const e=t.toString();let r;if(null!=(r=e.match(/\\(([\\w\\s]+)\\)$/))){const t=r[1];return/\\s/.test(t)?t.match(/\\b(\\w)/g).join(\"\"):t}if(null!=(r=e.match(/(\\w{3,4})\\s\\d{4}$/)))return r[1];if(null!=(r=e.match(/(UTC[\\+\\-]\\d+)/)))return r[1]}(t))?s:(e=r(t,{allowGMT:!0}))?e:\"\"}(a)}}))};function e(t,e){return\"-\"===e?t:`0${t}`.slice(-2)}function r(t,{allowGMT:e}){if(o){const r=new Date(t).toLocaleString(\"en-US\",{timeZoneName:\"short\"}).split(\" \").pop();if(e||!r.includes(\"GMT\"))return r}}return t})(),t.CalendarDate=class{static fromDate(t){return new this(t.getFullYear(),t.getMonth()+1,t.getDate())}static today(){return this.fromDate(new Date)}constructor(t,e,r){this.date=new Date(Date.UTC(t,e-1)),this.date.setUTCDate(r),this.year=this.date.getUTCFullYear(),this.month=this.date.getUTCMonth()+1,this.day=this.date.getUTCDate(),this.value=this.date.getTime()}equals(t){return t?.value===this.value}is(t){return this.equals(t)}isToday(){return this.is(this.constructor.today())}occursOnSameYearAs(t){return this.year===t?.year}occursThisYear(){return this.occursOnSameYearAs(this.constructor.today())}daysSince(t){if(t)return(this.date-t.date)/864e5}daysPassed(){return this.constructor.today().daysSince(this)}};const{strftime:u,translate:l,getI18nValue:d,config:m}=t;t.RelativeTime=class{constructor(e){this.date=e,this.calendarDate=t.CalendarDate.fromDate(this.date)}toString(){let t,e;return(e=this.toTimeElapsedString())?l(\"time.elapsed\",{time:e}):(t=this.toWeekdayString())?(e=this.toTimeString(),l(\"datetime.at\",{date:t,time:e})):l(\"date.on\",{date:this.toDateString()})}toTimeOrDateString(){return this.calendarDate.isToday()?this.toTimeString():this.toDateString()}toTimeElapsedString(){let t;const e=(new Date).getTime()-this.date.getTime(),r=Math.round(e/1e3),a=Math.round(r/60),s=Math.round(a/60);return e<0?null:r<10?(t=l(\"time.second\"),l(\"time.singular\",{time:t})):r<45?`${r} ${l(\"time.seconds\")}`:r<90?(t=l(\"time.minute\"),l(\"time.singular\",{time:t})):a<45?`${a} ${l(\"time.minutes\")}`:a<90?(t=l(\"time.hour\"),l(\"time.singularAn\",{time:t})):s<24?`${s} ${l(\"time.hours\")}`:\"\"}toWeekdayString(){switch(this.calendarDate.daysPassed()){case 0:return l(\"date.today\");case 1:return l(\"date.yesterday\");case-1:return l(\"date.tomorrow\");case 2:case 3:case 4:case 5:case 6:return u(this.date,\"%A\");default:return\"\"}}toDateString(){const t=this.calendarDate.occursThisYear()?d(\"date.formats.thisYear\"):d(\"date.formats.default\");return u(this.date,t)}toTimeString(){const t=m.useFormat24?\"default_24h\":\"default\";return u(this.date,d(`time.formats.${t}`))}};const{elementMatchesSelector:h}=t;t.PageObserver=class{constructor(t,e){this.selector=t,this.callback=e,this.processMutations=this.processMutations.bind(this),this.processInsertion=this.processInsertion.bind(this)}start(){this.started||(this.observeWithMutationObserver()||this.observeWithMutationEvent(),this.started=!0)}observeWithMutationObserver(){if(\"undefined\"!=typeof MutationObserver&&null!==MutationObserver){return new MutationObserver(this.processMutations).observe(document.documentElement,{childList:!0,subtree:!0}),!0}return!1}observeWithMutationEvent(){return addEventListener(\"DOMNodeInserted\",this.processInsertion,!1),!0}findSignificantElements(t){const e=[];return t?.nodeType===Node.ELEMENT_NODE&&(h(t,this.selector)&&e.push(t),e.push(...Array.from(t.querySelectorAll(this.selector)||[]))),e}processMutations(t){const e=[];for(const r of t)if(\"childList\"===r.type)for(const t of r.addedNodes)e.push(...this.findSignificantElements(t)||[]);this.notify(e)}processInsertion(t){const e=this.findSignificantElements(t.target);this.notify(e)}notify(t){t?.length>0&&\"function\"==typeof this.callback&&this.callback(t)}};const{parseDate:f,strftime:g,getI18nValue:p,config:y}=t,S=\"time[data-local]:not([data-localized])\",T=t=>t.setAttribute(\"data-localized\",\"\"),b=e=>new t.RelativeTime(e);t.Controller=class{constructor(){this.processElements=this.processElements.bind(this),this.pageObserver=new t.PageObserver(S,this.processElements)}start(){this.started||(this.processElements(),this.startTimer(),this.pageObserver.start(),this.started=!0)}startTimer(){let t;(t=y.timerInterval)&&(this.timer||(this.timer=setInterval(this.processElements,t)))}processElements(t){t||(t=document.querySelectorAll(S));for(const e of Array.from(t))this.processElement(e);return t.length}processElement(t){const e=t.getAttribute(\"datetime\"),r=t.getAttribute(\"data-local\"),a=y.useFormat24&&t.getAttribute(\"data-format24\")||t.getAttribute(\"data-format\"),s=f(e);if(!isNaN(s)){if(!t.hasAttribute(\"title\")){const e=y.useFormat24?\"default_24h\":\"default\",r=g(s,p(`datetime.formats.${e}`));t.setAttribute(\"title\",r)}(t=>{t.setAttribute(\"data-processed-at\",(new Date).toISOString())})(t),t.textContent=(()=>{switch(r){case\"time\":return T(t),g(s,a);case\"date\":return T(t),b(s).toDateString();case\"time-ago\":return b(s).toString();case\"time-or-date\":return b(s).toTimeOrDateString();case\"weekday\":return b(s).toWeekdayString();case\"weekday-or-date\":return b(s).toWeekdayString()||b(s).toDateString()}})()}}};let M=!1;function D(){t.getController().start()}t.start=()=>{var e;M?t.run():(M=!0,\"undefined\"!=typeof MutationObserver&&null!==MutationObserver||(document.attachEvent?\"complete\"===document.readyState:\"loading\"!==document.readyState)?D():(e=D,\"function\"==typeof requestAnimationFrame?requestAnimationFrame(e):setTimeout(e,17)))},t.processing=()=>t.getController().started,window.LocalTime===t&&t.start();export{t as default};\n", "import { Application } from '@hotwired/stimulus';\nimport { I18n } from 'i18n-js';\nimport LocalTime from 'local-time';\nimport jquery from 'jquery';\nimport * as bootstrap from 'bootstrap';\n\nconst application = Application.start();\n\n// Fetch user locale from html#lang.\n// This value is being set on `app/views/layouts/application.html.erb` and\n// is inferred from `ACCEPT-LANGUAGE` header.\nconst userLocale = document.documentElement.lang;\nexport const i18n = new I18n();\n//i18n.store(translations);\ni18n.defaultLocale = \"en\";\ni18n.enableFallback = true;\ni18n.locale = userLocale;\n\n// Configure Stimulus development experience\napplication.debug = false;\nwindow.Stimulus   = application;\nwindow.i18n = i18n;\nwindow.LocalTime = LocalTime;\nwindow.jQuery = jquery;\nwindow.$ = jquery;\nLocalTime.start();\n\nexport { application }\n", "export * from \"./enums.js\";\nexport * from \"./modifiers/index.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { popperGenerator, detectOverflow, createPopper as createPopperBase } from \"./createPopper.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper } from \"./popper.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\";", "export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];", "export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}", "export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}", "import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };", "import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};", "import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}", "export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;", "export default function getUAString() {\n  var uaData = navigator.userAgentData;\n\n  if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n    return uaData.brands.map(function (item) {\n      return item.brand + \"/\" + item.version;\n    }).join(' ');\n  }\n\n  return navigator.userAgent;\n}", "import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}", "import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n\n  var clientRect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n    scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n  }\n\n  var _ref = isElement(element) ? getWindow(element) : window,\n      visualViewport = _ref.visualViewport;\n\n  var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n  var width = clientRect.width / scaleX;\n  var height = clientRect.height / scaleY;\n  return {\n    width: width,\n    height: height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x: x,\n    y: y\n  };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}", "import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}", "import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}", "import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}", "import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}", "import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}", "import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = /firefox/i.test(getUAString());\n  var isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}", "export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}", "import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n  var v = within(min, value, max);\n  return v > max ? max : v;\n}", "export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}", "import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}", "export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};", "export default function getVariation(placement) {\n  return placement.split('-')[1];\n}", "import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n  var x = _ref.x,\n      y = _ref.y;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets,\n      isFixed = _ref2.isFixed;\n  var _offsets$x = offsets.x,\n      x = _offsets$x === void 0 ? 0 : _offsets$x,\n      _offsets$y = offsets.y,\n      y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref3.x;\n  y = _ref3.y;\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom;\n      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n      offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right;\n      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n      offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n    x: x,\n    y: y\n  }, getWindow(popper)) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref4.x;\n  y = _ref4.y;\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n  var state = _ref5.state,\n      options = _ref5.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed'\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};", "import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};", "var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}", "var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}", "import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}", "import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    var layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}", "import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}", "import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}", "import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}", "import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}", "export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}", "import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n  var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}", "import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}", "import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$strategy = _options.strategy,\n      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}", "import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}", "import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases \u2013 research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};", "import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};", "import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};", "export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}", "import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n    mainAxis: tetherOffsetValue,\n    altAxis: tetherOffsetValue\n  } : Object.assign({\n    mainAxis: 0,\n    altAxis: 0\n  }, tetherOffsetValue);\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    var _offsetModifierState$;\n\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = offset + overflow[mainSide];\n    var max = offset - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = offset + maxOffset - offsetModifierValue;\n    var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    var _offsetModifierState$2;\n\n    var _mainSide = mainAxis === 'x' ? top : left;\n\n    var _altSide = mainAxis === 'x' ? bottom : right;\n\n    var _offset = popperOffsets[altAxis];\n\n    var _len = altAxis === 'y' ? 'height' : 'width';\n\n    var _min = _offset + overflow[_mainSide];\n\n    var _max = _offset - overflow[_altSide];\n\n    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n    popperOffsets[altAxis] = _preventedOffset;\n    data[altAxis] = _preventedOffset - _offset;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};", "export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}", "import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = round(rect.width) / element.offsetWidth || 1;\n  var scaleY = round(rect.height) / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}", "import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}", "export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}", "export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}", "import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        });\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update \u2013 it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update \u2013 it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref) {\n        var name = _ref.name,\n            _ref$options = _ref.options,\n            options = _ref$options === void 0 ? {} : _ref$options,\n            effect = _ref.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };", "import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };", "import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map())\n    }\n\n    const instanceMap = elementMap.get(element)\n\n    // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n      return\n    }\n\n    instanceMap.set(key, instance)\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null\n    }\n\n    return null\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return\n    }\n\n    const instanceMap = elementMap.get(element)\n\n    instanceMap.delete(key)\n\n    // free up element references if there are no instances left for an element\n    if (instanceMap.size === 0) {\n      elementMap.delete(element)\n    }\n  }\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n  if (selector && window.CSS && window.CSS.escape) {\n    // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n    selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`)\n  }\n\n  return selector\n}\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n  if (object === null || object === undefined) {\n    return `${object}`\n  }\n\n  return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID)\n  } while (document.getElementById(prefix))\n\n  return prefix\n}\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0\n  }\n\n  // Get transition-duration of the element\n  let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n  const floatTransitionDuration = Number.parseFloat(transitionDuration)\n  const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n  // Return 0 if element or transition duration is not found\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0\n  }\n\n  // If multiple durations are defined, take the first\n  transitionDuration = transitionDuration.split(',')[0]\n  transitionDelay = transitionDelay.split(',')[0]\n\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n  if (!object || typeof object !== 'object') {\n    return false\n  }\n\n  if (typeof object.jquery !== 'undefined') {\n    object = object[0]\n  }\n\n  return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n  // it's a jQuery object or a node element\n  if (isElement(object)) {\n    return object.jquery ? object[0] : object\n  }\n\n  if (typeof object === 'string' && object.length > 0) {\n    return document.querySelector(parseSelector(object))\n  }\n\n  return null\n}\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false\n  }\n\n  const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n  // Handle `details` element as its content may falsie appear visible when it is closed\n  const closedDetails = element.closest('details:not([open])')\n\n  if (!closedDetails) {\n    return elementIsVisible\n  }\n\n  if (closedDetails !== element) {\n    const summary = element.closest('summary')\n    if (summary && summary.parentNode !== closedDetails) {\n      return false\n    }\n\n    if (summary === null) {\n      return false\n    }\n  }\n\n  return elementIsVisible\n}\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null\n  }\n\n  // Can find the shadow root otherwise it'll return the document\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode()\n    return root instanceof ShadowRoot ? root : null\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element\n  }\n\n  // when we don't find a shadow root\n  if (!element.parentNode) {\n    return null\n  }\n\n  return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.harrytheo.com/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n  element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n  if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return window.jQuery\n  }\n\n  return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        for (const callback of DOMContentLoadedCallbacks) {\n          callback()\n        }\n      })\n    }\n\n    DOMContentLoadedCallbacks.push(callback)\n  } else {\n    callback()\n  }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery()\n    /* istanbul ignore if */\n    if ($) {\n      const name = plugin.NAME\n      const JQUERY_NO_CONFLICT = $.fn[name]\n      $.fn[name] = plugin.jQueryInterface\n      $.fn[name].Constructor = plugin\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT\n        return plugin.jQueryInterface\n      }\n    }\n  })\n}\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n  return typeof possibleCallback === 'function' ? possibleCallback.call(...args) : defaultValue\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback)\n    return\n  }\n\n  const durationPadding = 5\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n  let called = false\n\n  const handler = ({ target }) => {\n    if (target !== transitionElement) {\n      return\n    }\n\n    called = true\n    transitionElement.removeEventListener(TRANSITION_END, handler)\n    execute(callback)\n  }\n\n  transitionElement.addEventListener(TRANSITION_END, handler)\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement)\n    }\n  }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  const listLength = list.length\n  let index = list.indexOf(activeElement)\n\n  // if the element does not exist in the list return an element\n  // depending on the direction and if cycle is allowed\n  if (index === -1) {\n    return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n  }\n\n  index += shouldGetNext ? 1 : -1\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n  defineJQueryPlugin,\n  execute,\n  executeAfterTransition,\n  findShadowRoot,\n  getElement,\n  getjQuery,\n  getNextActiveElement,\n  getTransitionDurationFromElement,\n  getUID,\n  isDisabled,\n  isElement,\n  isRTL,\n  isVisible,\n  noop,\n  onDOMContentLoaded,\n  parseSelector,\n  reflow,\n  triggerTransitionEnd,\n  toType\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n  'click',\n  'dblclick',\n  'mouseup',\n  'mousedown',\n  'contextmenu',\n  'mousewheel',\n  'DOMMouseScroll',\n  'mouseover',\n  'mouseout',\n  'mousemove',\n  'selectstart',\n  'selectend',\n  'keydown',\n  'keypress',\n  'keyup',\n  'orientationchange',\n  'touchstart',\n  'touchmove',\n  'touchend',\n  'touchcancel',\n  'pointerdown',\n  'pointermove',\n  'pointerup',\n  'pointerleave',\n  'pointercancel',\n  'gesturestart',\n  'gesturechange',\n  'gestureend',\n  'focus',\n  'blur',\n  'change',\n  'reset',\n  'select',\n  'submit',\n  'focusin',\n  'focusout',\n  'load',\n  'unload',\n  'beforeunload',\n  'resize',\n  'move',\n  'DOMContentLoaded',\n  'readystatechange',\n  'error',\n  'abort',\n  'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n  return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n  const uid = makeEventUid(element)\n\n  element.uidEvent = uid\n  eventRegistry[uid] = eventRegistry[uid] || {}\n\n  return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    hydrateObj(event, { delegateTarget: element })\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn)\n    }\n\n    return fn.apply(element, [event])\n  }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector)\n\n    for (let { target } = event; target && target !== this; target = target.parentNode) {\n      for (const domElement of domElements) {\n        if (domElement !== target) {\n          continue\n        }\n\n        hydrateObj(event, { delegateTarget: target })\n\n        if (handler.oneOff) {\n          EventHandler.off(element, event.type, selector, fn)\n        }\n\n        return fn.apply(target, [event])\n      }\n    }\n  }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n  return Object.values(events)\n    .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n  const isDelegated = typeof handler === 'string'\n  // TODO: tooltip passes `false` instead of selector, so we need to check\n  const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n  let typeEvent = getTypeEvent(originalTypeEvent)\n\n  if (!nativeEvents.has(typeEvent)) {\n    typeEvent = originalTypeEvent\n  }\n\n  return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return\n  }\n\n  let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n  // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n  if (originalTypeEvent in customEvents) {\n    const wrapFunction = fn => {\n      return function (event) {\n        if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n          return fn.call(this, event)\n        }\n      }\n    }\n\n    callable = wrapFunction(callable)\n  }\n\n  const events = getElementEvents(element)\n  const handlers = events[typeEvent] || (events[typeEvent] = {})\n  const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n  if (previousFunction) {\n    previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n    return\n  }\n\n  const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n  const fn = isDelegated ?\n    bootstrapDelegationHandler(element, handler, callable) :\n    bootstrapHandler(element, callable)\n\n  fn.delegationSelector = isDelegated ? handler : null\n  fn.callable = callable\n  fn.oneOff = oneOff\n  fn.uidEvent = uid\n  handlers[uid] = fn\n\n  element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n  if (!fn) {\n    return\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n  delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {}\n\n  for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n    if (handlerKey.includes(namespace)) {\n      removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n    }\n  }\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '')\n  return customEvents[event] || event\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFunction) {\n    addHandler(element, event, handler, delegationFunction, false)\n  },\n\n  one(element, event, handler, delegationFunction) {\n    addHandler(element, event, handler, delegationFunction, true)\n  },\n\n  off(element, originalTypeEvent, handler, delegationFunction) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return\n    }\n\n    const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n    const inNamespace = typeEvent !== originalTypeEvent\n    const events = getElementEvents(element)\n    const storeElementEvent = events[typeEvent] || {}\n    const isNamespace = originalTypeEvent.startsWith('.')\n\n    if (typeof callable !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!Object.keys(storeElementEvent).length) {\n        return\n      }\n\n      removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n      return\n    }\n\n    if (isNamespace) {\n      for (const elementEvent of Object.keys(events)) {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n      }\n    }\n\n    for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n      }\n    }\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null\n    }\n\n    const $ = getjQuery()\n    const typeEvent = getTypeEvent(event)\n    const inNamespace = event !== typeEvent\n\n    let jQueryEvent = null\n    let bubbles = true\n    let nativeDispatch = true\n    let defaultPrevented = false\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args)\n\n      $(element).trigger(jQueryEvent)\n      bubbles = !jQueryEvent.isPropagationStopped()\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n      defaultPrevented = jQueryEvent.isDefaultPrevented()\n    }\n\n    const evt = hydrateObj(new Event(event, { bubbles, cancelable: true }), args)\n\n    if (defaultPrevented) {\n      evt.preventDefault()\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt)\n    }\n\n    if (evt.defaultPrevented && jQueryEvent) {\n      jQueryEvent.preventDefault()\n    }\n\n    return evt\n  }\n}\n\nfunction hydrateObj(obj, meta = {}) {\n  for (const [key, value] of Object.entries(meta)) {\n    try {\n      obj[key] = value\n    } catch {\n      Object.defineProperty(obj, key, {\n        configurable: true,\n        get() {\n          return value\n        }\n      })\n    }\n  }\n\n  return obj\n}\n\nexport default EventHandler\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n  if (value === 'true') {\n    return true\n  }\n\n  if (value === 'false') {\n    return false\n  }\n\n  if (value === Number(value).toString()) {\n    return Number(value)\n  }\n\n  if (value === '' || value === 'null') {\n    return null\n  }\n\n  if (typeof value !== 'string') {\n    return value\n  }\n\n  try {\n    return JSON.parse(decodeURIComponent(value))\n  } catch {\n    return value\n  }\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {}\n    }\n\n    const attributes = {}\n    const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n    for (const key of bsKeys) {\n      let pureKey = key.replace(/^bs/, '')\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1)\n      attributes[pureKey] = normalizeData(element.dataset[key])\n    }\n\n    return attributes\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n  }\n}\n\nexport default Manipulator\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport { isElement, toType } from './index.js'\n\n/**\n * Class definition\n */\n\nclass Config {\n  // Getters\n  static get Default() {\n    return {}\n  }\n\n  static get DefaultType() {\n    return {}\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!')\n  }\n\n  _getConfig(config) {\n    config = this._mergeConfigObj(config)\n    config = this._configAfterMerge(config)\n    this._typeCheckConfig(config)\n    return config\n  }\n\n  _configAfterMerge(config) {\n    return config\n  }\n\n  _mergeConfigObj(config, element) {\n    const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n    return {\n      ...this.constructor.Default,\n      ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n      ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n      ...(typeof config === 'object' ? config : {})\n    }\n  }\n\n  _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n    for (const [property, expectedTypes] of Object.entries(configTypes)) {\n      const value = config[property]\n      const valueType = isElement(value) ? 'element' : toType(value)\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(\n          `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n        )\n      }\n    }\n  }\n}\n\nexport default Config\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js'\nimport EventHandler from './dom/event-handler.js'\nimport Config from './util/config.js'\nimport { executeAfterTransition, getElement } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.8'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n  constructor(element, config) {\n    super()\n\n    element = getElement(element)\n    if (!element) {\n      return\n    }\n\n    this._element = element\n    this._config = this._getConfig(config)\n\n    Data.set(this._element, this.constructor.DATA_KEY, this)\n  }\n\n  // Public\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY)\n    EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n    for (const propertyName of Object.getOwnPropertyNames(this)) {\n      this[propertyName] = null\n    }\n  }\n\n  // Private\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated)\n  }\n\n  _getConfig(config) {\n    config = this._mergeConfigObj(config, this._element)\n    config = this._configAfterMerge(config)\n    this._typeCheckConfig(config)\n    return config\n  }\n\n  // Static\n  static getInstance(element) {\n    return Data.get(getElement(element), this.DATA_KEY)\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n  }\n\n  static get VERSION() {\n    return VERSION\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`\n  }\n\n  static eventName(name) {\n    return `${name}${this.EVENT_KEY}`\n  }\n}\n\nexport default BaseComponent\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js'\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target')\n\n  if (!selector || selector === '#') {\n    let hrefAttribute = element.getAttribute('href')\n\n    // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n    if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n      return null\n    }\n\n    // Just in case some CMS puts out a full URL with the anchor appended\n    if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n      hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n    }\n\n    selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n  }\n\n  return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null\n}\n\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector)\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector))\n  },\n\n  parents(element, selector) {\n    const parents = []\n    let ancestor = element.parentNode.closest(selector)\n\n    while (ancestor) {\n      parents.push(ancestor)\n      ancestor = ancestor.parentNode.closest(selector)\n    }\n\n    return parents\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous]\n      }\n\n      previous = previous.previousElementSibling\n    }\n\n    return []\n  },\n  // TODO: this is now unused; remove later along with prev()\n  next(element, selector) {\n    let next = element.nextElementSibling\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next]\n      }\n\n      next = next.nextElementSibling\n    }\n\n    return []\n  },\n\n  focusableChildren(element) {\n    const focusables = [\n      'a',\n      'button',\n      'input',\n      'textarea',\n      'select',\n      'details',\n      '[tabindex]',\n      '[contenteditable=\"true\"]'\n    ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n    return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n  },\n\n  getSelectorFromElement(element) {\n    const selector = getSelector(element)\n\n    if (selector) {\n      return SelectorEngine.findOne(selector) ? selector : null\n    }\n\n    return null\n  },\n\n  getElementFromSelector(element) {\n    const selector = getSelector(element)\n\n    return selector ? SelectorEngine.findOne(selector) : null\n  },\n\n  getMultipleElementsFromSelector(element) {\n    const selector = getSelector(element)\n\n    return selector ? SelectorEngine.find(selector) : []\n  }\n}\n\nexport default SelectorEngine\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isDisabled } from './index.js'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n  const clickEvent = `click.dismiss${component.EVENT_KEY}`\n  const name = component.NAME\n\n  EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault()\n    }\n\n    if (isDisabled(this)) {\n      return\n    }\n\n    const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`)\n    const instance = component.getOrCreateInstance(target)\n\n    // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n    instance[method]()\n  })\n}\n\nexport {\n  enableDismissTrigger\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  close() {\n    const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n    if (closeEvent.defaultPrevented) {\n      return\n    }\n\n    this._element.classList.remove(CLASS_NAME_SHOW)\n\n    const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n    this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n  }\n\n  // Private\n  _destroyElement() {\n    this._element.remove()\n    EventHandler.trigger(this._element, EVENT_CLOSED)\n    this.dispose()\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config](this)\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this)\n\n      if (config === 'toggle') {\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n  event.preventDefault()\n\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n  const data = Button.getOrCreateInstance(button)\n\n  data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport { execute } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n  endCallback: null,\n  leftCallback: null,\n  rightCallback: null\n}\n\nconst DefaultType = {\n  endCallback: '(function|null)',\n  leftCallback: '(function|null)',\n  rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n  constructor(element, config) {\n    super()\n    this._element = element\n\n    if (!element || !Swipe.isSupported()) {\n      return\n    }\n\n    this._config = this._getConfig(config)\n    this._deltaX = 0\n    this._supportPointerEvents = Boolean(window.PointerEvent)\n    this._initEvents()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  dispose() {\n    EventHandler.off(this._element, EVENT_KEY)\n  }\n\n  // Private\n  _start(event) {\n    if (!this._supportPointerEvents) {\n      this._deltaX = event.touches[0].clientX\n\n      return\n    }\n\n    if (this._eventIsPointerPenTouch(event)) {\n      this._deltaX = event.clientX\n    }\n  }\n\n  _end(event) {\n    if (this._eventIsPointerPenTouch(event)) {\n      this._deltaX = event.clientX - this._deltaX\n    }\n\n    this._handleSwipe()\n    execute(this._config.endCallback)\n  }\n\n  _move(event) {\n    this._deltaX = event.touches && event.touches.length > 1 ?\n      0 :\n      event.touches[0].clientX - this._deltaX\n  }\n\n  _handleSwipe() {\n    const absDeltaX = Math.abs(this._deltaX)\n\n    if (absDeltaX <= SWIPE_THRESHOLD) {\n      return\n    }\n\n    const direction = absDeltaX / this._deltaX\n\n    this._deltaX = 0\n\n    if (!direction) {\n      return\n    }\n\n    execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n  }\n\n  _initEvents() {\n    if (this._supportPointerEvents) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n      EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n    }\n  }\n\n  _eventIsPointerPenTouch(event) {\n    return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n  }\n\n  // Static\n  static isSupported() {\n    return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n  }\n}\n\nexport default Swipe\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n  defineJQueryPlugin,\n  getNextActiveElement,\n  isRTL,\n  isVisible,\n  reflow,\n  triggerTransitionEnd\n} from './util/index.js'\nimport Swipe from './util/swipe.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n  interval: 5000,\n  keyboard: true,\n  pause: 'hover',\n  ride: false,\n  touch: true,\n  wrap: true\n}\n\nconst DefaultType = {\n  interval: '(number|boolean)', // TODO:v6 remove boolean support\n  keyboard: 'boolean',\n  pause: '(string|boolean)',\n  ride: '(boolean|string)',\n  touch: 'boolean',\n  wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._interval = null\n    this._activeElement = null\n    this._isSliding = false\n    this.touchTimeout = null\n    this._swipeHelper = null\n\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n    this._addEventListeners()\n\n    if (this._config.ride === CLASS_NAME_CAROUSEL) {\n      this.cycle()\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  next() {\n    this._slide(ORDER_NEXT)\n  }\n\n  nextWhenVisible() {\n    // FIXME TODO use `document.visibilityState`\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next()\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV)\n  }\n\n  pause() {\n    if (this._isSliding) {\n      triggerTransitionEnd(this._element)\n    }\n\n    this._clearInterval()\n  }\n\n  cycle() {\n    this._clearInterval()\n    this._updateInterval()\n\n    this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n  }\n\n  _maybeEnableCycle() {\n    if (!this._config.ride) {\n      return\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n      return\n    }\n\n    this.cycle()\n  }\n\n  to(index) {\n    const items = this._getItems()\n    if (index > items.length - 1 || index < 0) {\n      return\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n      return\n    }\n\n    const activeIndex = this._getItemIndex(this._getActive())\n    if (activeIndex === index) {\n      return\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n    this._slide(order, items[index])\n  }\n\n  dispose() {\n    if (this._swipeHelper) {\n      this._swipeHelper.dispose()\n    }\n\n    super.dispose()\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    config.defaultInterval = config.interval\n    return config\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n    }\n\n    if (this._config.touch && Swipe.isSupported()) {\n      this._addTouchEventListeners()\n    }\n  }\n\n  _addTouchEventListeners() {\n    for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n      EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n    }\n\n    const endCallBack = () => {\n      if (this._config.pause !== 'hover') {\n        return\n      }\n\n      // If it's a touch-enabled device, mouseenter/leave are fired as\n      // part of the mouse compatibility events on first tap - the carousel\n      // would stop cycling until user tapped out of it;\n      // here, we listen for touchend, explicitly pause the carousel\n      // (as if it's the second time we tap on it, mouseenter compat event\n      // is NOT fired) and after a timeout (to allow for mouse compatibility\n      // events to fire) we explicitly restart cycling\n\n      this.pause()\n      if (this.touchTimeout) {\n        clearTimeout(this.touchTimeout)\n      }\n\n      this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n    }\n\n    const swipeConfig = {\n      leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n      rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n      endCallback: endCallBack\n    }\n\n    this._swipeHelper = new Swipe(this._element, swipeConfig)\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key]\n    if (direction) {\n      event.preventDefault()\n      this._slide(this._directionToOrder(direction))\n    }\n  }\n\n  _getItemIndex(element) {\n    return this._getItems().indexOf(element)\n  }\n\n  _setActiveIndicatorElement(index) {\n    if (!this._indicatorsElement) {\n      return\n    }\n\n    const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n    activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n    activeIndicator.removeAttribute('aria-current')\n\n    const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n    if (newActiveIndicator) {\n      newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n      newActiveIndicator.setAttribute('aria-current', 'true')\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || this._getActive()\n\n    if (!element) {\n      return\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n    this._config.interval = elementInterval || this._config.defaultInterval\n  }\n\n  _slide(order, element = null) {\n    if (this._isSliding) {\n      return\n    }\n\n    const activeElement = this._getActive()\n    const isNext = order === ORDER_NEXT\n    const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n    if (nextElement === activeElement) {\n      return\n    }\n\n    const nextElementIndex = this._getItemIndex(nextElement)\n\n    const triggerEvent = eventName => {\n      return EventHandler.trigger(this._element, eventName, {\n        relatedTarget: nextElement,\n        direction: this._orderToDirection(order),\n        from: this._getItemIndex(activeElement),\n        to: nextElementIndex\n      })\n    }\n\n    const slideEvent = triggerEvent(EVENT_SLIDE)\n\n    if (slideEvent.defaultPrevented) {\n      return\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      // TODO: change tests that use empty divs to avoid this check\n      return\n    }\n\n    const isCycling = Boolean(this._interval)\n    this.pause()\n\n    this._isSliding = true\n\n    this._setActiveIndicatorElement(nextElementIndex)\n    this._activeElement = nextElement\n\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n    nextElement.classList.add(orderClassName)\n\n    reflow(nextElement)\n\n    activeElement.classList.add(directionalClassName)\n    nextElement.classList.add(directionalClassName)\n\n    const completeCallBack = () => {\n      nextElement.classList.remove(directionalClassName, orderClassName)\n      nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n      activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n      this._isSliding = false\n\n      triggerEvent(EVENT_SLID)\n    }\n\n    this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n    if (isCycling) {\n      this.cycle()\n    }\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_SLIDE)\n  }\n\n  _getActive() {\n    return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n  }\n\n  _getItems() {\n    return SelectorEngine.find(SELECTOR_ITEM, this._element)\n  }\n\n  _clearInterval() {\n    if (this._interval) {\n      clearInterval(this._interval)\n      this._interval = null\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n  }\n\n  _orderToDirection(order) {\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Carousel.getOrCreateInstance(this, config)\n\n      if (typeof config === 'number') {\n        data.to(config)\n        return\n      }\n\n      if (typeof config === 'string') {\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this)\n\n  if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n    return\n  }\n\n  event.preventDefault()\n\n  const carousel = Carousel.getOrCreateInstance(target)\n  const slideIndex = this.getAttribute('data-bs-slide-to')\n\n  if (slideIndex) {\n    carousel.to(slideIndex)\n    carousel._maybeEnableCycle()\n    return\n  }\n\n  if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n    carousel.next()\n    carousel._maybeEnableCycle()\n    return\n  }\n\n  carousel.prev()\n  carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n  for (const carousel of carousels) {\n    Carousel.getOrCreateInstance(carousel)\n  }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n  defineJQueryPlugin,\n  getElement,\n  reflow\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n  parent: null,\n  toggle: true\n}\n\nconst DefaultType = {\n  parent: '(null|element)',\n  toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._isTransitioning = false\n    this._triggerArray = []\n\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n    for (const elem of toggleList) {\n      const selector = SelectorEngine.getSelectorFromElement(elem)\n      const filterElement = SelectorEngine.find(selector)\n        .filter(foundElement => foundElement === this._element)\n\n      if (selector !== null && filterElement.length) {\n        this._triggerArray.push(elem)\n      }\n    }\n\n    this._initializeChildren()\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n    }\n\n    if (this._config.toggle) {\n      this.toggle()\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle() {\n    if (this._isShown()) {\n      this.hide()\n    } else {\n      this.show()\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._isShown()) {\n      return\n    }\n\n    let activeChildren = []\n\n    // find active children\n    if (this._config.parent) {\n      activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n        .filter(element => element !== this._element)\n        .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n    }\n\n    if (activeChildren.length && activeChildren[0]._isTransitioning) {\n      return\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n    if (startEvent.defaultPrevented) {\n      return\n    }\n\n    for (const activeInstance of activeChildren) {\n      activeInstance.hide()\n    }\n\n    const dimension = this._getDimension()\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE)\n    this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n    this._element.style[dimension] = 0\n\n    this._addAriaAndCollapsedClass(this._triggerArray, true)\n    this._isTransitioning = true\n\n    const complete = () => {\n      this._isTransitioning = false\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING)\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n      this._element.style[dimension] = ''\n\n      EventHandler.trigger(this._element, EVENT_SHOWN)\n    }\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n    const scrollSize = `scroll${capitalizedDimension}`\n\n    this._queueCallback(complete, this._element, true)\n    this._element.style[dimension] = `${this._element[scrollSize]}px`\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._isShown()) {\n      return\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n    if (startEvent.defaultPrevented) {\n      return\n    }\n\n    const dimension = this._getDimension()\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n    reflow(this._element)\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING)\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n    for (const trigger of this._triggerArray) {\n      const element = SelectorEngine.getElementFromSelector(trigger)\n\n      if (element && !this._isShown(element)) {\n        this._addAriaAndCollapsedClass([trigger], false)\n      }\n    }\n\n    this._isTransitioning = true\n\n    const complete = () => {\n      this._isTransitioning = false\n      this._element.classList.remove(CLASS_NAME_COLLAPSING)\n      this._element.classList.add(CLASS_NAME_COLLAPSE)\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    }\n\n    this._element.style[dimension] = ''\n\n    this._queueCallback(complete, this._element, true)\n  }\n\n  // Private\n  _isShown(element = this._element) {\n    return element.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  _configAfterMerge(config) {\n    config.toggle = Boolean(config.toggle) // Coerce string values\n    config.parent = getElement(config.parent)\n    return config\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n  }\n\n  _initializeChildren() {\n    if (!this._config.parent) {\n      return\n    }\n\n    const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n    for (const element of children) {\n      const selected = SelectorEngine.getElementFromSelector(element)\n\n      if (selected) {\n        this._addAriaAndCollapsedClass([element], this._isShown(selected))\n      }\n    }\n  }\n\n  _getFirstLevelChildren(selector) {\n    const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n    // remove children if greater depth\n    return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n  }\n\n  _addAriaAndCollapsedClass(triggerArray, isOpen) {\n    if (!triggerArray.length) {\n      return\n    }\n\n    for (const element of triggerArray) {\n      element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n      element.setAttribute('aria-expanded', isOpen)\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    const _config = {}\n    if (typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false\n    }\n\n    return this.each(function () {\n      const data = Collapse.getOrCreateInstance(this, _config)\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n    event.preventDefault()\n  }\n\n  for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n    Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n  }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n  defineJQueryPlugin,\n  execute,\n  getElement,\n  getNextActiveElement,\n  isDisabled,\n  isElement,\n  isRTL,\n  isVisible,\n  noop\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n  autoClose: true,\n  boundary: 'clippingParents',\n  display: 'dynamic',\n  offset: [0, 2],\n  popperConfig: null,\n  reference: 'toggle'\n}\n\nconst DefaultType = {\n  autoClose: '(boolean|string)',\n  boundary: '(string|element)',\n  display: 'string',\n  offset: '(array|string|function)',\n  popperConfig: '(null|object|function)',\n  reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._popper = null\n    this._parent = this._element.parentNode // dropdown wrapper\n    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n    this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n      SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n      SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n    this._inNavbar = this._detectNavbar()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle() {\n    return this._isShown() ? this.hide() : this.show()\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._isShown()) {\n      return\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._createPopper()\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.on(element, 'mouseover', noop)\n      }\n    }\n\n    this._element.focus()\n    this._element.setAttribute('aria-expanded', true)\n\n    this._menu.classList.add(CLASS_NAME_SHOW)\n    this._element.classList.add(CLASS_NAME_SHOW)\n    EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._isShown()) {\n      return\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    }\n\n    this._completeHide(relatedTarget)\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy()\n    }\n\n    super.dispose()\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar()\n    if (this._popper) {\n      this._popper.update()\n    }\n  }\n\n  // Private\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.off(element, 'mouseover', noop)\n      }\n    }\n\n    if (this._popper) {\n      this._popper.destroy()\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW)\n    this._element.classList.remove(CLASS_NAME_SHOW)\n    this._element.setAttribute('aria-expanded', 'false')\n    Manipulator.removeDataAttribute(this._menu, 'popper')\n    EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n  }\n\n  _getConfig(config) {\n    config = super._getConfig(config)\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) &&\n      typeof config.reference.getBoundingClientRect !== 'function'\n    ) {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n    }\n\n    return config\n  }\n\n  _createPopper() {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org/docs/v2/)')\n    }\n\n    let referenceElement = this._element\n\n    if (this._config.reference === 'parent') {\n      referenceElement = this._parent\n    } else if (isElement(this._config.reference)) {\n      referenceElement = getElement(this._config.reference)\n    } else if (typeof this._config.reference === 'object') {\n      referenceElement = this._config.reference\n    }\n\n    const popperConfig = this._getPopperConfig()\n    this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n  }\n\n  _isShown() {\n    return this._menu.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._parent\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n      return PLACEMENT_TOPCENTER\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n      return PLACEMENT_BOTTOMCENTER\n    }\n\n    // We need to trim the value because custom properties can also include spaces\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n  }\n\n  _detectNavbar() {\n    return this._element.closest(SELECTOR_NAVBAR) !== null\n  }\n\n  _getOffset() {\n    const { offset } = this._config\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(value => Number.parseInt(value, 10))\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element)\n    }\n\n    return offset\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      },\n      {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }\n\n    // Disable Popper if we have a static display or Dropdown is in Navbar\n    if (this._inNavbar || this._config.display === 'static') {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'static') // TODO: v6 remove\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }]\n    }\n\n    return {\n      ...defaultBsPopperConfig,\n      ...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig])\n    }\n  }\n\n  _selectMenuItem({ key, target }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n    if (!items.length) {\n      return\n    }\n\n    // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Dropdown.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n\n  static clearMenus(event) {\n    if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return\n    }\n\n    const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n    for (const toggle of openToggles) {\n      const context = Dropdown.getInstance(toggle)\n      if (!context || context._config.autoClose === false) {\n        continue\n      }\n\n      const composedPath = event.composedPath()\n      const isMenuTarget = composedPath.includes(context._menu)\n      if (\n        composedPath.includes(context._element) ||\n        (context._config.autoClose === 'inside' && !isMenuTarget) ||\n        (context._config.autoClose === 'outside' && isMenuTarget)\n      ) {\n        continue\n      }\n\n      // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n      if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n        continue\n      }\n\n      const relatedTarget = { relatedTarget: context._element }\n\n      if (event.type === 'click') {\n        relatedTarget.clickEvent = event\n      }\n\n      context._completeHide(relatedTarget)\n    }\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not an UP | DOWN | ESCAPE key => not a dropdown command\n    // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n    const isInput = /input|textarea/i.test(event.target.tagName)\n    const isEscapeEvent = event.key === ESCAPE_KEY\n    const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n    if (!isUpOrDownEvent && !isEscapeEvent) {\n      return\n    }\n\n    if (isInput && !isEscapeEvent) {\n      return\n    }\n\n    event.preventDefault()\n\n    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n    const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n      this :\n      (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n        SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n        SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n    const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n    if (isUpOrDownEvent) {\n      event.stopPropagation()\n      instance.show()\n      instance._selectMenuItem(event)\n      return\n    }\n\n    if (instance._isShown()) { // else is escape and we check if it is shown\n      event.stopPropagation()\n      instance.hide()\n      getToggleButton.focus()\n    }\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  event.preventDefault()\n  Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport {\n  execute, executeAfterTransition, getElement, reflow\n} from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n  className: 'modal-backdrop',\n  clickCallback: null,\n  isAnimated: false,\n  isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n  rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n  className: 'string',\n  clickCallback: '(function|null)',\n  isAnimated: 'boolean',\n  isVisible: 'boolean',\n  rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n  constructor(config) {\n    super()\n    this._config = this._getConfig(config)\n    this._isAppended = false\n    this._element = null\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback)\n      return\n    }\n\n    this._append()\n\n    const element = this._getElement()\n    if (this._config.isAnimated) {\n      reflow(element)\n    }\n\n    element.classList.add(CLASS_NAME_SHOW)\n\n    this._emulateAnimation(() => {\n      execute(callback)\n    })\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback)\n      return\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n    this._emulateAnimation(() => {\n      this.dispose()\n      execute(callback)\n    })\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n    this._element.remove()\n    this._isAppended = false\n  }\n\n  // Private\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div')\n      backdrop.className = this._config.className\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE)\n      }\n\n      this._element = backdrop\n    }\n\n    return this._element\n  }\n\n  _configAfterMerge(config) {\n    // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n    config.rootElement = getElement(config.rootElement)\n    return config\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return\n    }\n\n    const element = this._getElement()\n    this._config.rootElement.append(element)\n\n    EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback)\n    })\n\n    this._isAppended = true\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n  }\n}\n\nexport default Backdrop\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n  autofocus: true,\n  trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n  autofocus: 'boolean',\n  trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n  constructor(config) {\n    super()\n    this._config = this._getConfig(config)\n    this._isActive = false\n    this._lastTabNavDirection = null\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  activate() {\n    if (this._isActive) {\n      return\n    }\n\n    if (this._config.autofocus) {\n      this._config.trapElement.focus()\n    }\n\n    EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n    EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n    EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n    this._isActive = true\n  }\n\n  deactivate() {\n    if (!this._isActive) {\n      return\n    }\n\n    this._isActive = false\n    EventHandler.off(document, EVENT_KEY)\n  }\n\n  // Private\n  _handleFocusin(event) {\n    const { trapElement } = this._config\n\n    if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n      return\n    }\n\n    const elements = SelectorEngine.focusableChildren(trapElement)\n\n    if (elements.length === 0) {\n      trapElement.focus()\n    } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n      elements[elements.length - 1].focus()\n    } else {\n      elements[0].focus()\n    }\n  }\n\n  _handleKeydown(event) {\n    if (event.key !== TAB_KEY) {\n      return\n    }\n\n    this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n  }\n}\n\nexport default FocusTrap\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body\n  }\n\n  // Public\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth\n    return Math.abs(window.innerWidth - documentWidth)\n  }\n\n  hide() {\n    const width = this.getWidth()\n    this._disableOverFlow()\n    // give padding to element to balance the hidden scrollbar width\n    this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n    // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow')\n    this._resetElementAttributes(this._element, PROPERTY_PADDING)\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0\n  }\n\n  // Private\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow')\n    this._element.style.overflow = 'hidden'\n  }\n\n  _setElementAttributes(selector, styleProperty, callback) {\n    const scrollbarWidth = this.getWidth()\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return\n      }\n\n      this._saveInitialAttribute(element, styleProperty)\n      const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n      element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n    }\n\n    this._applyManipulationCallback(selector, manipulationCallBack)\n  }\n\n  _saveInitialAttribute(element, styleProperty) {\n    const actualValue = element.style.getPropertyValue(styleProperty)\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProperty, actualValue)\n    }\n  }\n\n  _resetElementAttributes(selector, styleProperty) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProperty)\n      // We only want to remove the property if the value is `null`; the value can also be zero\n      if (value === null) {\n        element.style.removeProperty(styleProperty)\n        return\n      }\n\n      Manipulator.removeDataAttribute(element, styleProperty)\n      element.style.setProperty(styleProperty, value)\n    }\n\n    this._applyManipulationCallback(selector, manipulationCallBack)\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector)\n      return\n    }\n\n    for (const sel of SelectorEngine.find(selector, this._element)) {\n      callBack(sel)\n    }\n  }\n}\n\nexport default ScrollBarHelper\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport {\n  defineJQueryPlugin, isRTL, isVisible, reflow\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n  backdrop: true,\n  focus: true,\n  keyboard: true\n}\n\nconst DefaultType = {\n  backdrop: '(boolean|string)',\n  focus: 'boolean',\n  keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n    this._backdrop = this._initializeBackDrop()\n    this._focustrap = this._initializeFocusTrap()\n    this._isShown = false\n    this._isTransitioning = false\n    this._scrollBar = new ScrollBarHelper()\n\n    this._addEventListeners()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget)\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n      relatedTarget\n    })\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._isShown = true\n    this._isTransitioning = true\n\n    this._scrollBar.hide()\n\n    document.body.classList.add(CLASS_NAME_OPEN)\n\n    this._adjustDialog()\n\n    this._backdrop.show(() => this._showElement(relatedTarget))\n  }\n\n  hide() {\n    if (!this._isShown || this._isTransitioning) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    this._isShown = false\n    this._isTransitioning = true\n    this._focustrap.deactivate()\n\n    this._element.classList.remove(CLASS_NAME_SHOW)\n\n    this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n  }\n\n  dispose() {\n    EventHandler.off(window, EVENT_KEY)\n    EventHandler.off(this._dialog, EVENT_KEY)\n\n    this._backdrop.dispose()\n    this._focustrap.deactivate()\n\n    super.dispose()\n  }\n\n  handleUpdate() {\n    this._adjustDialog()\n  }\n\n  // Private\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n      isAnimated: this._isAnimated()\n    })\n  }\n\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element\n    })\n  }\n\n  _showElement(relatedTarget) {\n    // try to append dynamic modal\n    if (!document.body.contains(this._element)) {\n      document.body.append(this._element)\n    }\n\n    this._element.style.display = 'block'\n    this._element.removeAttribute('aria-hidden')\n    this._element.setAttribute('aria-modal', true)\n    this._element.setAttribute('role', 'dialog')\n    this._element.scrollTop = 0\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n    if (modalBody) {\n      modalBody.scrollTop = 0\n    }\n\n    reflow(this._element)\n\n    this._element.classList.add(CLASS_NAME_SHOW)\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._focustrap.activate()\n      }\n\n      this._isTransitioning = false\n      EventHandler.trigger(this._element, EVENT_SHOWN, {\n        relatedTarget\n      })\n    }\n\n    this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (event.key !== ESCAPE_KEY) {\n        return\n      }\n\n      if (this._config.keyboard) {\n        this.hide()\n        return\n      }\n\n      this._triggerBackdropTransition()\n    })\n\n    EventHandler.on(window, EVENT_RESIZE, () => {\n      if (this._isShown && !this._isTransitioning) {\n        this._adjustDialog()\n      }\n    })\n\n    EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n      // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n      EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n        if (this._element !== event.target || this._element !== event2.target) {\n          return\n        }\n\n        if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition()\n          return\n        }\n\n        if (this._config.backdrop) {\n          this.hide()\n        }\n      })\n    })\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none'\n    this._element.setAttribute('aria-hidden', true)\n    this._element.removeAttribute('aria-modal')\n    this._element.removeAttribute('role')\n    this._isTransitioning = false\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN)\n      this._resetAdjustments()\n      this._scrollBar.reset()\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    })\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE)\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n    const initialOverflowY = this._element.style.overflowY\n    // return if the following background transition hasn't yet completed\n    if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n      return\n    }\n\n    if (!isModalOverflowing) {\n      this._element.style.overflowY = 'hidden'\n    }\n\n    this._element.classList.add(CLASS_NAME_STATIC)\n    this._queueCallback(() => {\n      this._element.classList.remove(CLASS_NAME_STATIC)\n      this._queueCallback(() => {\n        this._element.style.overflowY = initialOverflowY\n      }, this._dialog)\n    }, this._dialog)\n\n    this._element.focus()\n  }\n\n  /**\n   * The following methods are used to handle overflowing modals\n   */\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n    const scrollbarWidth = this._scrollBar.getWidth()\n    const isBodyOverflowing = scrollbarWidth > 0\n\n    if (isBodyOverflowing && !isModalOverflowing) {\n      const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n      this._element.style[property] = `${scrollbarWidth}px`\n    }\n\n    if (!isBodyOverflowing && isModalOverflowing) {\n      const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n      this._element.style[property] = `${scrollbarWidth}px`\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = ''\n    this._element.style.paddingRight = ''\n  }\n\n  // Static\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config](relatedTarget)\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this)\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault()\n  }\n\n  EventHandler.one(target, EVENT_SHOW, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN, () => {\n      if (isVisible(this)) {\n        this.focus()\n      }\n    })\n  })\n\n  // avoid conflict when clicking modal toggler while another one is open\n  const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n  if (alreadyOpen) {\n    Modal.getInstance(alreadyOpen).hide()\n  }\n\n  const data = Modal.getOrCreateInstance(target)\n\n  data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport {\n  defineJQueryPlugin,\n  isDisabled,\n  isVisible\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n}\n\nconst DefaultType = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._isShown = false\n    this._backdrop = this._initializeBackDrop()\n    this._focustrap = this._initializeFocusTrap()\n    this._addEventListeners()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget)\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._isShown = true\n    this._backdrop.show()\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide()\n    }\n\n    this._element.setAttribute('aria-modal', true)\n    this._element.setAttribute('role', 'dialog')\n    this._element.classList.add(CLASS_NAME_SHOWING)\n\n    const completeCallBack = () => {\n      if (!this._config.scroll || this._config.backdrop) {\n        this._focustrap.activate()\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW)\n      this._element.classList.remove(CLASS_NAME_SHOWING)\n      EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n    }\n\n    this._queueCallback(completeCallBack, this._element, true)\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    this._focustrap.deactivate()\n    this._element.blur()\n    this._isShown = false\n    this._element.classList.add(CLASS_NAME_HIDING)\n    this._backdrop.hide()\n\n    const completeCallback = () => {\n      this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n      this._element.removeAttribute('aria-modal')\n      this._element.removeAttribute('role')\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset()\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    }\n\n    this._queueCallback(completeCallback, this._element, true)\n  }\n\n  dispose() {\n    this._backdrop.dispose()\n    this._focustrap.deactivate()\n    super.dispose()\n  }\n\n  // Private\n  _initializeBackDrop() {\n    const clickCallback = () => {\n      if (this._config.backdrop === 'static') {\n        EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n        return\n      }\n\n      this.hide()\n    }\n\n    // 'static' option will be translated to true, and booleans will keep their value\n    const isVisible = Boolean(this._config.backdrop)\n\n    return new Backdrop({\n      className: CLASS_NAME_BACKDROP,\n      isVisible,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: isVisible ? clickCallback : null\n    })\n  }\n\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element\n    })\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (event.key !== ESCAPE_KEY) {\n        return\n      }\n\n      if (this._config.keyboard) {\n        this.hide()\n        return\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n    })\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config](this)\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this)\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault()\n  }\n\n  if (isDisabled(this)) {\n    return\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus()\n    }\n  })\n\n  // avoid conflict when clicking a toggler of an offcanvas, while another is open\n  const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n  if (alreadyOpen && alreadyOpen !== target) {\n    Offcanvas.getInstance(alreadyOpen).hide()\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target)\n  data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n    Offcanvas.getOrCreateInstance(selector).show()\n  }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n  for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n    if (getComputedStyle(element).position !== 'fixed') {\n      Offcanvas.getOrCreateInstance(element).hide()\n    }\n  }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  dd: [],\n  div: [],\n  dl: [],\n  dt: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n}\n// js-docs-end allow-list\n\nconst uriAttributes = new Set([\n  'background',\n  'cite',\n  'href',\n  'itemtype',\n  'longdesc',\n  'poster',\n  'src',\n  'xlink:href'\n])\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n  const attributeName = attribute.nodeName.toLowerCase()\n\n  if (allowedAttributeList.includes(attributeName)) {\n    if (uriAttributes.has(attributeName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue))\n    }\n\n    return true\n  }\n\n  // Check if a regular expression validates the attribute.\n  return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n    .some(regex => regex.test(attributeName))\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml\n  }\n\n  if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n    return sanitizeFunction(unsafeHtml)\n  }\n\n  const domParser = new window.DOMParser()\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n  for (const element of elements) {\n    const elementName = element.nodeName.toLowerCase()\n\n    if (!Object.keys(allowList).includes(elementName)) {\n      element.remove()\n      continue\n    }\n\n    const attributeList = [].concat(...element.attributes)\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n    for (const attribute of attributeList) {\n      if (!allowedAttribute(attribute, allowedAttributes)) {\n        element.removeAttribute(attribute.nodeName)\n      }\n    }\n  }\n\n  return createdDocument.body.innerHTML\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer.js'\nimport { execute, getElement, isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n  allowList: DefaultAllowlist,\n  content: {}, // { selector : text ,  selector2 : text2 , }\n  extraClass: '',\n  html: false,\n  sanitize: true,\n  sanitizeFn: null,\n  template: '<div></div>'\n}\n\nconst DefaultType = {\n  allowList: 'object',\n  content: 'object',\n  extraClass: '(string|function)',\n  html: 'boolean',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  template: 'string'\n}\n\nconst DefaultContentType = {\n  entry: '(string|element|function|null)',\n  selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n  constructor(config) {\n    super()\n    this._config = this._getConfig(config)\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  getContent() {\n    return Object.values(this._config.content)\n      .map(config => this._resolvePossibleFunction(config))\n      .filter(Boolean)\n  }\n\n  hasContent() {\n    return this.getContent().length > 0\n  }\n\n  changeContent(content) {\n    this._checkContent(content)\n    this._config.content = { ...this._config.content, ...content }\n    return this\n  }\n\n  toHtml() {\n    const templateWrapper = document.createElement('div')\n    templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n    for (const [selector, text] of Object.entries(this._config.content)) {\n      this._setContent(templateWrapper, text, selector)\n    }\n\n    const template = templateWrapper.children[0]\n    const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n    if (extraClass) {\n      template.classList.add(...extraClass.split(' '))\n    }\n\n    return template\n  }\n\n  // Private\n  _typeCheckConfig(config) {\n    super._typeCheckConfig(config)\n    this._checkContent(config.content)\n  }\n\n  _checkContent(arg) {\n    for (const [selector, content] of Object.entries(arg)) {\n      super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n    }\n  }\n\n  _setContent(template, content, selector) {\n    const templateElement = SelectorEngine.findOne(selector, template)\n\n    if (!templateElement) {\n      return\n    }\n\n    content = this._resolvePossibleFunction(content)\n\n    if (!content) {\n      templateElement.remove()\n      return\n    }\n\n    if (isElement(content)) {\n      this._putElementInTemplate(getElement(content), templateElement)\n      return\n    }\n\n    if (this._config.html) {\n      templateElement.innerHTML = this._maybeSanitize(content)\n      return\n    }\n\n    templateElement.textContent = content\n  }\n\n  _maybeSanitize(arg) {\n    return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n  }\n\n  _resolvePossibleFunction(arg) {\n    return execute(arg, [undefined, this])\n  }\n\n  _putElementInTemplate(element, templateElement) {\n    if (this._config.html) {\n      templateElement.innerHTML = ''\n      templateElement.append(element)\n      return\n    }\n\n    templateElement.textContent = element.textContent\n  }\n}\n\nexport default TemplateFactory\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport {\n  defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop\n} from './util/index.js'\nimport { DefaultAllowlist } from './util/sanitizer.js'\nimport TemplateFactory from './util/template-factory.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n  allowList: DefaultAllowlist,\n  animation: true,\n  boundary: 'clippingParents',\n  container: false,\n  customClass: '',\n  delay: 0,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  html: false,\n  offset: [0, 6],\n  placement: 'top',\n  popperConfig: null,\n  sanitize: true,\n  sanitizeFn: null,\n  selector: false,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' +\n            '<div class=\"tooltip-arrow\"></div>' +\n            '<div class=\"tooltip-inner\"></div>' +\n            '</div>',\n  title: '',\n  trigger: 'hover focus'\n}\n\nconst DefaultType = {\n  allowList: 'object',\n  animation: 'boolean',\n  boundary: '(string|element)',\n  container: '(string|element|boolean)',\n  customClass: '(string|function)',\n  delay: '(number|object)',\n  fallbackPlacements: 'array',\n  html: 'boolean',\n  offset: '(array|string|function)',\n  placement: '(string|function)',\n  popperConfig: '(null|object|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  selector: '(string|boolean)',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org/docs/v2/)')\n    }\n\n    super(element, config)\n\n    // Private\n    this._isEnabled = true\n    this._timeout = 0\n    this._isHovered = null\n    this._activeTrigger = {}\n    this._popper = null\n    this._templateFactory = null\n    this._newContent = null\n\n    // Protected\n    this.tip = null\n\n    this._setListeners()\n\n    if (!this._config.selector) {\n      this._fixTitle()\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  enable() {\n    this._isEnabled = true\n  }\n\n  disable() {\n    this._isEnabled = false\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled\n  }\n\n  toggle() {\n    if (!this._isEnabled) {\n      return\n    }\n\n    if (this._isShown()) {\n      this._leave()\n      return\n    }\n\n    this._enter()\n  }\n\n  dispose() {\n    clearTimeout(this._timeout)\n\n    EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n    if (this._element.getAttribute('data-bs-original-title')) {\n      this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n    }\n\n    this._disposePopper()\n    super.dispose()\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements')\n    }\n\n    if (!(this._isWithContent() && this._isEnabled)) {\n      return\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n    const shadowRoot = findShadowRoot(this._element)\n    const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return\n    }\n\n    // TODO: v6 remove this or make it optional\n    this._disposePopper()\n\n    const tip = this._getTipElement()\n\n    this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n    const { container } = this._config\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.append(tip)\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n    }\n\n    this._popper = this._createPopper(tip)\n\n    tip.classList.add(CLASS_NAME_SHOW)\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.on(element, 'mouseover', noop)\n      }\n    }\n\n    const complete = () => {\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n      if (this._isHovered === false) {\n        this._leave()\n      }\n\n      this._isHovered = false\n    }\n\n    this._queueCallback(complete, this.tip, this._isAnimated())\n  }\n\n  hide() {\n    if (!this._isShown()) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    const tip = this._getTipElement()\n    tip.classList.remove(CLASS_NAME_SHOW)\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.off(element, 'mouseover', noop)\n      }\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false\n    this._activeTrigger[TRIGGER_FOCUS] = false\n    this._activeTrigger[TRIGGER_HOVER] = false\n    this._isHovered = null // it is a trick to support manual triggering\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return\n      }\n\n      if (!this._isHovered) {\n        this._disposePopper()\n      }\n\n      this._element.removeAttribute('aria-describedby')\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n    }\n\n    this._queueCallback(complete, this.tip, this._isAnimated())\n  }\n\n  update() {\n    if (this._popper) {\n      this._popper.update()\n    }\n  }\n\n  // Protected\n  _isWithContent() {\n    return Boolean(this._getTitle())\n  }\n\n  _getTipElement() {\n    if (!this.tip) {\n      this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n    }\n\n    return this.tip\n  }\n\n  _createTipElement(content) {\n    const tip = this._getTemplateFactory(content).toHtml()\n\n    // TODO: remove this check in v6\n    if (!tip) {\n      return null\n    }\n\n    tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n    // TODO: v6 the following can be achieved with CSS only\n    tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n    const tipId = getUID(this.constructor.NAME).toString()\n\n    tip.setAttribute('id', tipId)\n\n    if (this._isAnimated()) {\n      tip.classList.add(CLASS_NAME_FADE)\n    }\n\n    return tip\n  }\n\n  setContent(content) {\n    this._newContent = content\n    if (this._isShown()) {\n      this._disposePopper()\n      this.show()\n    }\n  }\n\n  _getTemplateFactory(content) {\n    if (this._templateFactory) {\n      this._templateFactory.changeContent(content)\n    } else {\n      this._templateFactory = new TemplateFactory({\n        ...this._config,\n        // the `content` var has to be after `this._config`\n        // to override config.content in case of popover\n        content,\n        extraClass: this._resolvePossibleFunction(this._config.customClass)\n      })\n    }\n\n    return this._templateFactory\n  }\n\n  _getContentForTemplate() {\n    return {\n      [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n    }\n  }\n\n  _getTitle() {\n    return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n  }\n\n  // Private\n  _initializeOnDelegatedTarget(event) {\n    return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n  }\n\n  _isAnimated() {\n    return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n  }\n\n  _isShown() {\n    return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  _createPopper(tip) {\n    const placement = execute(this._config.placement, [this, tip, this._element])\n    const attachment = AttachmentMap[placement.toUpperCase()]\n    return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n  }\n\n  _getOffset() {\n    const { offset } = this._config\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(value => Number.parseInt(value, 10))\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element)\n    }\n\n    return offset\n  }\n\n  _resolvePossibleFunction(arg) {\n    return execute(arg, [this._element, this._element])\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [\n        {\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        },\n        {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        },\n        {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        },\n        {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        },\n        {\n          name: 'preSetPlacement',\n          enabled: true,\n          phase: 'beforeMain',\n          fn: data => {\n            // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n            // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n            this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n          }\n        }\n      ]\n    }\n\n    return {\n      ...defaultBsPopperConfig,\n      ...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig])\n    }\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ')\n\n    for (const trigger of triggers) {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n          const context = this._initializeOnDelegatedTarget(event)\n          context._activeTrigger[TRIGGER_CLICK] = !(context._isShown() && context._activeTrigger[TRIGGER_CLICK])\n          context.toggle()\n        })\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ?\n          this.constructor.eventName(EVENT_MOUSEENTER) :\n          this.constructor.eventName(EVENT_FOCUSIN)\n        const eventOut = trigger === TRIGGER_HOVER ?\n          this.constructor.eventName(EVENT_MOUSELEAVE) :\n          this.constructor.eventName(EVENT_FOCUSOUT)\n\n        EventHandler.on(this._element, eventIn, this._config.selector, event => {\n          const context = this._initializeOnDelegatedTarget(event)\n          context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n          context._enter()\n        })\n        EventHandler.on(this._element, eventOut, this._config.selector, event => {\n          const context = this._initializeOnDelegatedTarget(event)\n          context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n            context._element.contains(event.relatedTarget)\n\n          context._leave()\n        })\n      }\n    }\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide()\n      }\n    }\n\n    EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title')\n\n    if (!title) {\n      return\n    }\n\n    if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n      this._element.setAttribute('aria-label', title)\n    }\n\n    this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n    this._element.removeAttribute('title')\n  }\n\n  _enter() {\n    if (this._isShown() || this._isHovered) {\n      this._isHovered = true\n      return\n    }\n\n    this._isHovered = true\n\n    this._setTimeout(() => {\n      if (this._isHovered) {\n        this.show()\n      }\n    }, this._config.delay.show)\n  }\n\n  _leave() {\n    if (this._isWithActiveTrigger()) {\n      return\n    }\n\n    this._isHovered = false\n\n    this._setTimeout(() => {\n      if (!this._isHovered) {\n        this.hide()\n      }\n    }, this._config.delay.hide)\n  }\n\n  _setTimeout(handler, timeout) {\n    clearTimeout(this._timeout)\n    this._timeout = setTimeout(handler, timeout)\n  }\n\n  _isWithActiveTrigger() {\n    return Object.values(this._activeTrigger).includes(true)\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n    for (const dataAttribute of Object.keys(dataAttributes)) {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n        delete dataAttributes[dataAttribute]\n      }\n    }\n\n    config = {\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    }\n    config = this._mergeConfigObj(config)\n    config = this._configAfterMerge(config)\n    this._typeCheckConfig(config)\n    return config\n  }\n\n  _configAfterMerge(config) {\n    config.container = config.container === false ? document.body : getElement(config.container)\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      }\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString()\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString()\n    }\n\n    return config\n  }\n\n  _getDelegateConfig() {\n    const config = {}\n\n    for (const [key, value] of Object.entries(this._config)) {\n      if (this.constructor.Default[key] !== value) {\n        config[key] = value\n      }\n    }\n\n    config.selector = false\n    config.trigger = 'manual'\n\n    // In the future can be replaced with:\n    // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n    // `Object.fromEntries(keysWithDifferentValues)`\n    return config\n  }\n\n  _disposePopper() {\n    if (this._popper) {\n      this._popper.destroy()\n      this._popper = null\n    }\n\n    if (this.tip) {\n      this.tip.remove()\n      this.tip = null\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Tooltip from './tooltip.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n  ...Tooltip.Default,\n  content: '',\n  offset: [0, 8],\n  placement: 'right',\n  template: '<div class=\"popover\" role=\"tooltip\">' +\n    '<div class=\"popover-arrow\"></div>' +\n    '<h3 class=\"popover-header\"></h3>' +\n    '<div class=\"popover-body\"></div>' +\n    '</div>',\n  trigger: 'click'\n}\n\nconst DefaultType = {\n  ...Tooltip.DefaultType,\n  content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Overrides\n  _isWithContent() {\n    return this._getTitle() || this._getContent()\n  }\n\n  // Private\n  _getContentForTemplate() {\n    return {\n      [SELECTOR_TITLE]: this._getTitle(),\n      [SELECTOR_CONTENT]: this._getContent()\n    }\n  }\n\n  _getContent() {\n    return this._resolvePossibleFunction(this._config.content)\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n  defineJQueryPlugin, getElement, isDisabled, isVisible\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n  offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n  rootMargin: '0px 0px -25%',\n  smoothScroll: false,\n  target: null,\n  threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n  offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n  rootMargin: 'string',\n  smoothScroll: 'boolean',\n  target: 'element',\n  threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    // this._element is the observablesContainer and config.target the menu links wrapper\n    this._targetLinks = new Map()\n    this._observableSections = new Map()\n    this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n    this._activeTarget = null\n    this._observer = null\n    this._previousScrollData = {\n      visibleEntryTop: 0,\n      parentScrollTop: 0\n    }\n    this.refresh() // initialize\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  refresh() {\n    this._initializeTargetsAndObservables()\n    this._maybeEnableSmoothScroll()\n\n    if (this._observer) {\n      this._observer.disconnect()\n    } else {\n      this._observer = this._getNewObserver()\n    }\n\n    for (const section of this._observableSections.values()) {\n      this._observer.observe(section)\n    }\n  }\n\n  dispose() {\n    this._observer.disconnect()\n    super.dispose()\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n    config.target = getElement(config.target) || document.body\n\n    // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n    config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n    if (typeof config.threshold === 'string') {\n      config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n    }\n\n    return config\n  }\n\n  _maybeEnableSmoothScroll() {\n    if (!this._config.smoothScroll) {\n      return\n    }\n\n    // unregister any previous listeners\n    EventHandler.off(this._config.target, EVENT_CLICK)\n\n    EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n      const observableSection = this._observableSections.get(event.target.hash)\n      if (observableSection) {\n        event.preventDefault()\n        const root = this._rootElement || window\n        const height = observableSection.offsetTop - this._element.offsetTop\n        if (root.scrollTo) {\n          root.scrollTo({ top: height, behavior: 'smooth' })\n          return\n        }\n\n        // Chrome 60 doesn't support `scrollTo`\n        root.scrollTop = height\n      }\n    })\n  }\n\n  _getNewObserver() {\n    const options = {\n      root: this._rootElement,\n      threshold: this._config.threshold,\n      rootMargin: this._config.rootMargin\n    }\n\n    return new IntersectionObserver(entries => this._observerCallback(entries), options)\n  }\n\n  // The logic of selection\n  _observerCallback(entries) {\n    const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n    const activate = entry => {\n      this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n      this._process(targetElement(entry))\n    }\n\n    const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n    const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n    this._previousScrollData.parentScrollTop = parentScrollTop\n\n    for (const entry of entries) {\n      if (!entry.isIntersecting) {\n        this._activeTarget = null\n        this._clearActiveClass(targetElement(entry))\n\n        continue\n      }\n\n      const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n      // if we are scrolling down, pick the bigger offsetTop\n      if (userScrollsDown && entryIsLowerThanPrevious) {\n        activate(entry)\n        // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n        if (!parentScrollTop) {\n          return\n        }\n\n        continue\n      }\n\n      // if we are scrolling up, pick the smallest offsetTop\n      if (!userScrollsDown && !entryIsLowerThanPrevious) {\n        activate(entry)\n      }\n    }\n  }\n\n  _initializeTargetsAndObservables() {\n    this._targetLinks = new Map()\n    this._observableSections = new Map()\n\n    const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n    for (const anchor of targetLinks) {\n      // ensure that the anchor has an id and is not disabled\n      if (!anchor.hash || isDisabled(anchor)) {\n        continue\n      }\n\n      const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element)\n\n      // ensure that the observableSection exists & is visible\n      if (isVisible(observableSection)) {\n        this._targetLinks.set(decodeURI(anchor.hash), anchor)\n        this._observableSections.set(anchor.hash, observableSection)\n      }\n    }\n  }\n\n  _process(target) {\n    if (this._activeTarget === target) {\n      return\n    }\n\n    this._clearActiveClass(this._config.target)\n    this._activeTarget = target\n    target.classList.add(CLASS_NAME_ACTIVE)\n    this._activateParents(target)\n\n    EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n  }\n\n  _activateParents(target) {\n    // Activate dropdown parents\n    if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n        .classList.add(CLASS_NAME_ACTIVE)\n      return\n    }\n\n    for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n      // Set triggered links parents as active\n      // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n      for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n        item.classList.add(CLASS_NAME_ACTIVE)\n      }\n    }\n  }\n\n  _clearActiveClass(parent) {\n    parent.classList.remove(CLASS_NAME_ACTIVE)\n\n    const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n    for (const node of activeNodes) {\n      node.classList.remove(CLASS_NAME_ACTIVE)\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n    ScrollSpy.getOrCreateInstance(spy)\n  }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport { defineJQueryPlugin, getNextActiveElement, isDisabled } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst HOME_KEY = 'Home'\nconst END_KEY = 'End'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_DROPDOWN = 'dropdown'\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu'\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]'\nconst SELECTOR_OUTER = '.nav-item, .list-group-item'\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]' // TODO: could only be `tab` in v6\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n  constructor(element) {\n    super(element)\n    this._parent = this._element.closest(SELECTOR_TAB_PANEL)\n\n    if (!this._parent) {\n      return\n      // TODO: should throw exception in v6\n      // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n    }\n\n    // Set up initial aria attributes\n    this._setInitialAttributes(this._parent, this._getChildren())\n\n    EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  show() { // Shows this elem and deactivate the active sibling if exists\n    const innerElem = this._element\n    if (this._elemIsActive(innerElem)) {\n      return\n    }\n\n    // Search for active tab on same parent to deactivate it\n    const active = this._getActiveElem()\n\n    const hideEvent = active ?\n      EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem }) :\n      null\n\n    const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active })\n\n    if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n      return\n    }\n\n    this._deactivate(active, innerElem)\n    this._activate(innerElem, active)\n  }\n\n  // Private\n  _activate(element, relatedElem) {\n    if (!element) {\n      return\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE)\n\n    this._activate(SelectorEngine.getElementFromSelector(element)) // Search and activate/show the proper section\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.add(CLASS_NAME_SHOW)\n        return\n      }\n\n      element.removeAttribute('tabindex')\n      element.setAttribute('aria-selected', true)\n      this._toggleDropDown(element, true)\n      EventHandler.trigger(element, EVENT_SHOWN, {\n        relatedTarget: relatedElem\n      })\n    }\n\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n  }\n\n  _deactivate(element, relatedElem) {\n    if (!element) {\n      return\n    }\n\n    element.classList.remove(CLASS_NAME_ACTIVE)\n    element.blur()\n\n    this._deactivate(SelectorEngine.getElementFromSelector(element)) // Search and deactivate the shown section too\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.remove(CLASS_NAME_SHOW)\n        return\n      }\n\n      element.setAttribute('aria-selected', false)\n      element.setAttribute('tabindex', '-1')\n      this._toggleDropDown(element, false)\n      EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem })\n    }\n\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n  }\n\n  _keydown(event) {\n    if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key))) {\n      return\n    }\n\n    event.stopPropagation()// stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n    event.preventDefault()\n\n    const children = this._getChildren().filter(element => !isDisabled(element))\n    let nextActiveElement\n\n    if ([HOME_KEY, END_KEY].includes(event.key)) {\n      nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1]\n    } else {\n      const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key)\n      nextActiveElement = getNextActiveElement(children, event.target, isNext, true)\n    }\n\n    if (nextActiveElement) {\n      nextActiveElement.focus({ preventScroll: true })\n      Tab.getOrCreateInstance(nextActiveElement).show()\n    }\n  }\n\n  _getChildren() { // collection of inner elements\n    return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent)\n  }\n\n  _getActiveElem() {\n    return this._getChildren().find(child => this._elemIsActive(child)) || null\n  }\n\n  _setInitialAttributes(parent, children) {\n    this._setAttributeIfNotExists(parent, 'role', 'tablist')\n\n    for (const child of children) {\n      this._setInitialAttributesOnChild(child)\n    }\n  }\n\n  _setInitialAttributesOnChild(child) {\n    child = this._getInnerElement(child)\n    const isActive = this._elemIsActive(child)\n    const outerElem = this._getOuterElement(child)\n    child.setAttribute('aria-selected', isActive)\n\n    if (outerElem !== child) {\n      this._setAttributeIfNotExists(outerElem, 'role', 'presentation')\n    }\n\n    if (!isActive) {\n      child.setAttribute('tabindex', '-1')\n    }\n\n    this._setAttributeIfNotExists(child, 'role', 'tab')\n\n    // set attributes to the related panel too\n    this._setInitialAttributesOnTargetPanel(child)\n  }\n\n  _setInitialAttributesOnTargetPanel(child) {\n    const target = SelectorEngine.getElementFromSelector(child)\n\n    if (!target) {\n      return\n    }\n\n    this._setAttributeIfNotExists(target, 'role', 'tabpanel')\n\n    if (child.id) {\n      this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`)\n    }\n  }\n\n  _toggleDropDown(element, open) {\n    const outerElem = this._getOuterElement(element)\n    if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n      return\n    }\n\n    const toggle = (selector, className) => {\n      const element = SelectorEngine.findOne(selector, outerElem)\n      if (element) {\n        element.classList.toggle(className, open)\n      }\n    }\n\n    toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE)\n    toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW)\n    outerElem.setAttribute('aria-expanded', open)\n  }\n\n  _setAttributeIfNotExists(element, attribute, value) {\n    if (!element.hasAttribute(attribute)) {\n      element.setAttribute(attribute, value)\n    }\n  }\n\n  _elemIsActive(elem) {\n    return elem.classList.contains(CLASS_NAME_ACTIVE)\n  }\n\n  // Try to get the inner element (usually the .nav-link)\n  _getInnerElement(elem) {\n    return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem)\n  }\n\n  // Try to get the outer element (usually the .nav-item)\n  _getOuterElement(elem) {\n    return elem.closest(SELECTOR_OUTER) || elem\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault()\n  }\n\n  if (isDisabled(this)) {\n    return\n  }\n\n  Tab.getOrCreateInstance(this).show()\n})\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n    Tab.getOrCreateInstance(element)\n  }\n})\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab)\n\nexport default Tab\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport { defineJQueryPlugin, reflow } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide' // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n}\n\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n}\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._timeout = null\n    this._hasMouseInteraction = false\n    this._hasKeyboardInteraction = false\n    this._setListeners()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._clearTimeout()\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE)\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING)\n      EventHandler.trigger(this._element, EVENT_SHOWN)\n\n      this._maybeScheduleHide()\n    }\n\n    this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated\n    reflow(this._element)\n    this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING)\n\n    this._queueCallback(complete, this._element, this._config.animation)\n  }\n\n  hide() {\n    if (!this.isShown()) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE) // @deprecated\n      this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW)\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOWING)\n    this._queueCallback(complete, this._element, this._config.animation)\n  }\n\n  dispose() {\n    this._clearTimeout()\n\n    if (this.isShown()) {\n      this._element.classList.remove(CLASS_NAME_SHOW)\n    }\n\n    super.dispose()\n  }\n\n  isShown() {\n    return this._element.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  // Private\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide()\n    }, this._config.delay)\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout': {\n        this._hasMouseInteraction = isInteracting\n        break\n      }\n\n      case 'focusin':\n      case 'focusout': {\n        this._hasKeyboardInteraction = isInteracting\n        break\n      }\n\n      default: {\n        break\n      }\n    }\n\n    if (isInteracting) {\n      this._clearTimeout()\n      return\n    }\n\n    const nextElement = event.relatedTarget\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return\n    }\n\n    this._maybeScheduleHide()\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout)\n    this._timeout = null\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config)\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config](this)\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast)\n\nexport default Toast\n", "import { Controller } from '@hotwired/stimulus'\n\n// Connects to data-controller='admin--bank-feed-allocation'\nexport default class extends Controller {\n  static targets = ['form', 'sections', 'section', 'noSections', 'invoiceCheckbox', 'carrierInput', 'carrierRow',\n                    'carrierNumber', 'carrierAmount', 'oldestUnpaidWarning', 'creditRadio', 'leaveRadio', 'leaveAcknowledgement',\n                    'leaveCheckbox', 'remainderOptions', 'allocatedTotal', 'remainingTotal', 'overCapAlert',\n                    'submitButton', 'searchFields', 'searchResults']\n  static values = { amount: Number, currencyUnit: String, searchUrl: String, sectionUrl: String }\n\n  connect() {\n    this.recalculate()\n  }\n\n  recalculate() {\n    const allocated = this.invoiceCheckboxTargets\n      .filter(checkbox => checkbox.checked)\n      .reduce((total, checkbox) => total + Number(checkbox.value), 0)\n    const remaining = this.amountValue - allocated\n    this.remaining = remaining\n\n    // A ticked box is always left enabled and on screen, so unticking it stays\n    // possible however far over the payment the figures have moved\n    this.invoiceCheckboxTargets.forEach(checkbox => {\n      checkbox.disabled = !checkbox.checked && Number(checkbox.value) > remaining\n      checkbox.classList.toggle('d-none', checkbox.disabled)\n    })\n\n    this.sectionTargets.forEach(section => this.refreshSection(section))\n\n    this.allocatedTotalTarget.textContent = this.formatCurrency(allocated)\n    this.remainingTotalTarget.textContent = this.formatCurrency(remaining)\n    this.overCapAlertTarget.classList.toggle('d-none', remaining >= 0)\n    this.remainderOptionsTarget.classList.toggle('d-none', remaining <= 0)\n    this.noSectionsTarget.classList.toggle('d-none', this.sectionTargets.length > 0)\n\n    const leaving = this.leaveRadioTarget.checked\n    this.leaveAcknowledgementTarget.classList.toggle('d-none', !leaving)\n    if (!leaving) this.leaveCheckboxTarget.checked = false\n\n    this.submitButtonTarget.disabled = !this.submittable()\n  }\n\n  // A credit to an Installer's balance needs an invoice of theirs to ride on -\n  // one ticked, or a paid one added from the search.\n  refreshSection(section) {\n    const ticked = this.ticked(section)\n    const hasCarrier = this.carrierInput(section).value !== ''\n    const radio = section.querySelector('[data-admin--bank-feed-allocation-target=\"creditRadio\"]')\n    radio.disabled = ticked.length === 0 && !hasCarrier\n    if (radio.disabled) radio.checked = false\n\n    // The Additional Payment takes whatever remains, but only when this\n    // Installer is credited and nothing of theirs is ticked to carry it instead\n    const carrierAmount = section.querySelector('[data-admin--bank-feed-allocation-target=\"carrierAmount\"]')\n    const carrying = hasCarrier && radio.checked && ticked.length === 0 && this.remaining > 0\n    carrierAmount.textContent = carrying ? this.formatCurrency(this.remaining) : '-'\n\n    const warning = section.querySelector('[data-admin--bank-feed-allocation-target=\"oldestUnpaidWarning\"]')\n    if (warning) {\n      const oldest = section.querySelector(`[data-invoice-id=\"${warning.dataset.oldestUnpaidId}\"]`)\n      warning.classList.toggle('d-none', !oldest || oldest.checked)\n    }\n  }\n\n  submittable() {\n    if (this.sectionTargets.length === 0 || this.remaining < 0) return false\n    if (this.remaining === 0) return this.invoiceCheckboxTargets.some(checkbox => checkbox.checked)\n    if (this.creditRadioTargets.some(radio => radio.checked)) return true\n    return this.leaveRadioTarget.checked && this.leaveCheckboxTarget.checked &&\n      this.invoiceCheckboxTargets.some(checkbox => checkbox.checked)\n  }\n\n  // A second submit of the same builder would stage it over itself\n  submit() {\n    this.submitButtonTarget.disabled = true\n  }\n\n  async search() {\n    const query = new URLSearchParams()\n    this.searchFieldsTarget.querySelectorAll('input').forEach(input => query.append(input.name, input.value))\n    const response = await fetch(`${this.searchUrlValue}?${query}`, { headers: { Accept: 'text/html' } })\n    this.searchResultsTarget.innerHTML = await response.text()\n  }\n\n  // Adding an invoice of an Installer already in the builder ticks it, or for\n  // a paid invoice makes it the one a credit rides on. Otherwise the\n  // Installer's section is fetched and added with it.\n  async addInvoice({ params: { installersId, invoiceId, paid, number, url } }) {\n    const existing = this.sectionTargets.find(section => section.dataset.installersId === String(installersId))\n    if (existing) {\n      if (paid) {\n        this.carrierInput(existing).value = invoiceId\n        const link = existing.querySelector('[data-admin--bank-feed-allocation-target=\"carrierNumber\"]')\n        link.textContent = number\n        link.href = url\n        existing.querySelector('[data-admin--bank-feed-allocation-target=\"carrierRow\"]').classList.remove('d-none')\n        this.creditRadio(existing).checked = true\n      } else {\n        const checkbox = existing.querySelector(`[data-invoice-id=\"${invoiceId}\"]`)\n        if (checkbox && !checkbox.disabled) checkbox.checked = true\n      }\n      this.recalculate()\n      existing.scrollIntoView({ behavior: 'smooth', block: 'center' })\n      return\n    }\n    const query = new URLSearchParams({ installers_id: installersId, invoices_id: invoiceId })\n    const response = await fetch(`${this.sectionUrlValue}?${query}`, { headers: { Accept: 'text/html' } })\n    if (!response.ok) return\n    this.sectionsTarget.insertAdjacentHTML('beforeend', await response.text())\n    const added = this.sectionTargets[this.sectionTargets.length - 1]\n    // A paid invoice is only added to credit the remaining amount to its Installer\n    if (paid) this.creditRadio(added).checked = true\n    this.recalculate()\n    added.scrollIntoView({ behavior: 'smooth', block: 'center' })\n  }\n\n  removeCarrier(event) {\n    const section = event.target.closest('[data-admin--bank-feed-allocation-target=\"section\"]')\n    this.carrierInput(section).value = ''\n    section.querySelector('[data-admin--bank-feed-allocation-target=\"carrierRow\"]').classList.add('d-none')\n    this.recalculate()\n  }\n\n  removeSection(event) {\n    event.target.closest('[data-admin--bank-feed-allocation-target=\"section\"]').remove()\n    this.recalculate()\n  }\n\n  ticked(section) {\n    return Array.from(section.querySelectorAll('[data-admin--bank-feed-allocation-target=\"invoiceCheckbox\"]'))\n      .filter(checkbox => checkbox.checked)\n  }\n\n  creditRadio(section) {\n    return section.querySelector('[data-admin--bank-feed-allocation-target=\"creditRadio\"]')\n  }\n\n  carrierInput(section) {\n    return section.querySelector('[data-admin--bank-feed-allocation-target=\"carrierInput\"]')\n  }\n\n  formatCurrency(cents) {\n    const negative = cents < 0\n    const formatted = (Math.abs(cents) / 100).toLocaleString('en-AU', {\n      minimumFractionDigits: 2,\n      maximumFractionDigits: 2\n    })\n    return `${negative ? '-' : ''}${this.currencyUnitValue}${formatted}`\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\n// Connects to data-controller='admin--bank-feed-group-candidates'\n// Searches the transactions that could join a group, filling in the results\n// with the HTML fragment the server renders.\nexport default class extends Controller {\n  static targets = ['search', 'results']\n  static values = { url: String }\n\n  async search() {\n    // The url may already carry parameters, such as the import the operator came from\n    const url = new URL(this.urlValue, window.location.origin)\n    url.searchParams.set('search', this.searchTarget.value)\n    const response = await fetch(url, { headers: { Accept: 'text/html' } })\n    this.resultsTarget.innerHTML = await response.text()\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"admin--contact-id\"\nexport default class extends Controller {\n  playCallAudio(event) {\n    var audioPlayer = document.getElementById(event.params['audioPlayer']);\n    var audioDestination = event.params['audioDestination'];\n    if (audioPlayer && audioDestination) {\n      audioPlayer.src = audioDestination;\n      audioPlayer.load();\n      audioPlayer.play();\n      event.target.classList.add('d-none');\n      audioPlayer.classList.remove('d-none');\n    }\n  }\n}\n", "// packages/core/src/js/data.ts\nvar rawCountryData = [\n  [\n    \"af\",\n    // Afghanistan\n    \"93\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ax\",\n    // \u00C5land Islands (AKA Aland Islands)\n    \"358\",\n    1,\n    [\"18\", \"4\", \"50\"],\n    // (4 and 50 are mobile ranges shared with FI)\n    // NOTE: https://en.wikipedia.org/wiki/Telephone%20numbers%20in%20%C3%85land says some 4XXX ranges (e.g. 4570) are specific to AX, but LPN doesn't respect this (https://libphonenumber.appspot.com/phonenumberparser?number=%2B3584570123456 says region=FI) so we won't either. Also it's too much of a maintenance burden to keep track of. Keep the 4 area code range here so that if the user selects AX and types this kind of number, we wont change the flag to FI. Whereas if they type a FI-only range then we will.\n    \"0\"\n  ],\n  [\n    \"al\",\n    // Albania\n    \"355\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"dz\",\n    // Algeria\n    \"213\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"as\",\n    // American Samoa\n    \"1\",\n    5,\n    [\"684\"],\n    \"1\"\n  ],\n  [\n    \"ad\",\n    // Andorra\n    \"376\"\n  ],\n  [\n    \"ao\",\n    // Angola\n    \"244\"\n  ],\n  [\n    \"ai\",\n    // Anguilla\n    \"1\",\n    6,\n    [\"264\"],\n    \"1\"\n  ],\n  [\n    \"ag\",\n    // Antigua and Barbuda\n    \"1\",\n    7,\n    [\"268\"],\n    \"1\"\n  ],\n  [\n    \"ar\",\n    // Argentina\n    \"54\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"am\",\n    // Armenia\n    \"374\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"aw\",\n    // Aruba\n    \"297\"\n  ],\n  [\n    \"ac\",\n    // Ascension Island\n    \"247\"\n  ],\n  [\n    \"au\",\n    // Australia\n    \"61\",\n    0,\n    [\"4\"],\n    // (mobile range shared with CX and CC)\n    \"0\"\n  ],\n  [\n    \"at\",\n    // Austria\n    \"43\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"az\",\n    // Azerbaijan\n    \"994\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"bs\",\n    // Bahamas\n    \"1\",\n    8,\n    [\"242\"],\n    \"1\"\n  ],\n  [\n    \"bh\",\n    // Bahrain\n    \"973\"\n  ],\n  [\n    \"bd\",\n    // Bangladesh\n    \"880\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"bb\",\n    // Barbados\n    \"1\",\n    9,\n    [\"246\"],\n    \"1\"\n  ],\n  [\n    \"by\",\n    // Belarus\n    \"375\",\n    0,\n    null,\n    \"8\"\n  ],\n  [\n    \"be\",\n    // Belgium\n    \"32\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"bz\",\n    // Belize\n    \"501\"\n  ],\n  [\n    \"bj\",\n    // Benin\n    \"229\"\n  ],\n  [\n    \"bm\",\n    // Bermuda\n    \"1\",\n    10,\n    [\"441\"],\n    \"1\"\n  ],\n  [\n    \"bt\",\n    // Bhutan\n    \"975\"\n  ],\n  [\n    \"bo\",\n    // Bolivia\n    \"591\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ba\",\n    // Bosnia and Herzegovina\n    \"387\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"bw\",\n    // Botswana\n    \"267\"\n  ],\n  [\n    \"br\",\n    // Brazil\n    \"55\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"io\",\n    // British Indian Ocean Territory\n    \"246\"\n  ],\n  [\n    \"vg\",\n    // British Virgin Islands\n    \"1\",\n    11,\n    [\"284\"],\n    \"1\"\n  ],\n  [\n    \"bn\",\n    // Brunei\n    \"673\"\n  ],\n  [\n    \"bg\",\n    // Bulgaria\n    \"359\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"bf\",\n    // Burkina Faso\n    \"226\"\n  ],\n  [\n    \"bi\",\n    // Burundi\n    \"257\"\n  ],\n  [\n    \"kh\",\n    // Cambodia\n    \"855\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"cm\",\n    // Cameroon\n    \"237\"\n  ],\n  [\n    \"ca\",\n    // Canada\n    \"1\",\n    1,\n    [\n      \"204\",\n      \"226\",\n      \"236\",\n      \"249\",\n      \"250\",\n      \"257\",\n      \"263\",\n      \"289\",\n      \"306\",\n      \"343\",\n      \"354\",\n      \"365\",\n      \"367\",\n      \"368\",\n      \"382\",\n      \"403\",\n      \"416\",\n      \"418\",\n      \"428\",\n      \"431\",\n      \"437\",\n      \"438\",\n      \"450\",\n      \"468\",\n      \"474\",\n      \"506\",\n      \"514\",\n      \"519\",\n      \"548\",\n      \"579\",\n      \"581\",\n      \"584\",\n      \"587\",\n      \"604\",\n      \"613\",\n      \"639\",\n      \"647\",\n      \"672\",\n      \"683\",\n      \"705\",\n      \"709\",\n      \"742\",\n      \"753\",\n      \"778\",\n      \"780\",\n      \"782\",\n      \"807\",\n      \"819\",\n      \"825\",\n      \"867\",\n      \"873\",\n      \"879\",\n      \"902\",\n      \"905\",\n      \"942\"\n    ],\n    \"1\"\n  ],\n  [\n    \"cv\",\n    // Cape Verde\n    \"238\"\n  ],\n  [\n    \"bq\",\n    // Caribbean Netherlands\n    \"599\",\n    1,\n    [\"3\", \"4\", \"7\"]\n  ],\n  [\n    \"ky\",\n    // Cayman Islands\n    \"1\",\n    12,\n    [\"345\"],\n    \"1\"\n  ],\n  [\n    \"cf\",\n    // Central African Republic\n    \"236\"\n  ],\n  [\n    \"td\",\n    // Chad\n    \"235\"\n  ],\n  [\n    \"cl\",\n    // Chile\n    \"56\"\n  ],\n  [\n    \"cn\",\n    // China\n    \"86\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"cx\",\n    // Christmas Island\n    \"61\",\n    2,\n    [\"4\", \"89164\"],\n    // (4 is a mobile range shared with AU and CC)\n    \"0\"\n  ],\n  [\n    \"cc\",\n    // Cocos (Keeling) Islands\n    \"61\",\n    1,\n    [\"4\", \"89162\"],\n    // (4 is a mobile range shared with AU and CX)\n    \"0\"\n  ],\n  [\n    \"co\",\n    // Colombia\n    \"57\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"km\",\n    // Comoros\n    \"269\"\n  ],\n  [\n    \"cg\",\n    // Congo (Brazzaville)\n    \"242\"\n  ],\n  [\n    \"cd\",\n    // Congo (Kinshasa)\n    \"243\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ck\",\n    // Cook Islands\n    \"682\"\n  ],\n  [\n    \"cr\",\n    // Costa Rica\n    \"506\"\n  ],\n  [\n    \"ci\",\n    // C\u00F4te d'Ivoire\n    \"225\"\n  ],\n  [\n    \"hr\",\n    // Croatia\n    \"385\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"cu\",\n    // Cuba\n    \"53\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"cw\",\n    // Cura\u00E7ao\n    \"599\",\n    0\n  ],\n  [\n    \"cy\",\n    // Cyprus\n    \"357\"\n  ],\n  [\n    \"cz\",\n    // Czech Republic\n    \"420\"\n  ],\n  [\n    \"dk\",\n    // Denmark\n    \"45\"\n  ],\n  [\n    \"dj\",\n    // Djibouti\n    \"253\"\n  ],\n  [\n    \"dm\",\n    // Dominica\n    \"1\",\n    13,\n    [\"767\"],\n    \"1\"\n  ],\n  [\n    \"do\",\n    // Dominican Republic\n    \"1\",\n    2,\n    [\"809\", \"829\", \"849\"],\n    \"1\"\n  ],\n  [\n    \"ec\",\n    // Ecuador\n    \"593\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"eg\",\n    // Egypt\n    \"20\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"sv\",\n    // El Salvador\n    \"503\"\n  ],\n  [\n    \"gq\",\n    // Equatorial Guinea\n    \"240\"\n  ],\n  [\n    \"er\",\n    // Eritrea\n    \"291\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ee\",\n    // Estonia\n    \"372\"\n  ],\n  [\n    \"sz\",\n    // Eswatini\n    \"268\"\n  ],\n  [\n    \"et\",\n    // Ethiopia\n    \"251\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"fk\",\n    // Falkland Islands (Malvinas)\n    \"500\"\n  ],\n  [\n    \"fo\",\n    // Faroe Islands\n    \"298\"\n  ],\n  [\n    \"fj\",\n    // Fiji\n    \"679\"\n  ],\n  [\n    \"fi\",\n    // Finland\n    \"358\",\n    0,\n    [\"4\", \"50\"],\n    // (mobile ranges shared with AX)\n    \"0\"\n  ],\n  [\n    \"fr\",\n    // France\n    \"33\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"gf\",\n    // French Guiana\n    \"594\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"pf\",\n    // French Polynesia\n    \"689\"\n  ],\n  [\n    \"ga\",\n    // Gabon\n    \"241\"\n  ],\n  [\n    \"gm\",\n    // Gambia\n    \"220\"\n  ],\n  [\n    \"ge\",\n    // Georgia\n    \"995\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"de\",\n    // Germany\n    \"49\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"gh\",\n    // Ghana\n    \"233\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"gi\",\n    // Gibraltar\n    \"350\"\n  ],\n  [\n    \"gr\",\n    // Greece\n    \"30\"\n  ],\n  [\n    \"gl\",\n    // Greenland\n    \"299\"\n  ],\n  [\n    \"gd\",\n    // Grenada\n    \"1\",\n    14,\n    [\"473\"],\n    \"1\"\n  ],\n  [\n    \"gp\",\n    // Guadeloupe\n    \"590\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"gu\",\n    // Guam\n    \"1\",\n    15,\n    [\"671\"],\n    \"1\"\n  ],\n  [\n    \"gt\",\n    // Guatemala\n    \"502\"\n  ],\n  [\n    \"gg\",\n    // Guernsey\n    \"44\",\n    1,\n    //* Only 79111 and 79117 belong to GG - the rest of 7911 is GB (e.g. 79110).\n    [\"1481\", \"7781\", \"7839\", \"79111\", \"79117\"],\n    \"0\"\n  ],\n  [\n    \"gn\",\n    // Guinea\n    \"224\"\n  ],\n  [\n    \"gw\",\n    // Guinea-Bissau\n    \"245\"\n  ],\n  [\n    \"gy\",\n    // Guyana\n    \"592\"\n  ],\n  [\n    \"ht\",\n    // Haiti\n    \"509\"\n  ],\n  [\n    \"hn\",\n    // Honduras\n    \"504\"\n  ],\n  [\n    \"hk\",\n    // Hong Kong SAR China\n    \"852\"\n  ],\n  [\n    \"hu\",\n    // Hungary\n    \"36\",\n    0,\n    null,\n    \"06\"\n  ],\n  [\n    \"is\",\n    // Iceland\n    \"354\"\n  ],\n  [\n    \"in\",\n    // India\n    \"91\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"id\",\n    // Indonesia\n    \"62\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ir\",\n    // Iran\n    \"98\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"iq\",\n    // Iraq\n    \"964\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ie\",\n    // Ireland\n    \"353\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"im\",\n    // Isle of Man\n    \"44\",\n    2,\n    [\"1624\", \"74576\", \"7524\", \"7624\", \"7924\"],\n    \"0\"\n  ],\n  [\n    \"il\",\n    // Israel\n    \"972\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"it\",\n    // Italy\n    \"39\",\n    0,\n    [\"3\"]\n    // (mobile range shared with VA)\n  ],\n  [\n    \"jm\",\n    // Jamaica\n    \"1\",\n    4,\n    [\"658\", \"876\"],\n    \"1\"\n  ],\n  [\n    \"jp\",\n    // Japan\n    \"81\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"je\",\n    // Jersey\n    \"44\",\n    3,\n    //* Only 77003/77007/77008 belong to JE - the rest of 7700 is GB (e.g. 77001).\n    [\"1534\", \"7509\", \"77003\", \"77007\", \"77008\", \"7797\", \"7829\", \"7937\"],\n    \"0\"\n  ],\n  [\n    \"jo\",\n    // Jordan\n    \"962\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"kz\",\n    // Kazakhstan\n    \"7\",\n    1,\n    [\"33\", \"7\"],\n    // (33 is shared with RU)\n    \"8\"\n  ],\n  [\n    \"ke\",\n    // Kenya\n    \"254\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ki\",\n    // Kiribati\n    \"686\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"xk\",\n    // Kosovo\n    \"383\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"kw\",\n    // Kuwait\n    \"965\"\n  ],\n  [\n    \"kg\",\n    // Kyrgyzstan\n    \"996\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"la\",\n    // Laos\n    \"856\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"lv\",\n    // Latvia\n    \"371\"\n  ],\n  [\n    \"lb\",\n    // Lebanon\n    \"961\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ls\",\n    // Lesotho\n    \"266\"\n  ],\n  [\n    \"lr\",\n    // Liberia\n    \"231\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ly\",\n    // Libya\n    \"218\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"li\",\n    // Liechtenstein\n    \"423\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"lt\",\n    // Lithuania\n    \"370\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"lu\",\n    // Luxembourg\n    \"352\"\n  ],\n  [\n    \"mo\",\n    // Macao SAR China\n    \"853\"\n  ],\n  [\n    \"mg\",\n    // Madagascar\n    \"261\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"mw\",\n    // Malawi\n    \"265\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"my\",\n    // Malaysia\n    \"60\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"mv\",\n    // Maldives\n    \"960\"\n  ],\n  [\n    \"ml\",\n    // Mali\n    \"223\"\n  ],\n  [\n    \"mt\",\n    // Malta\n    \"356\"\n  ],\n  [\n    \"mh\",\n    // Marshall Islands\n    \"692\",\n    0,\n    null,\n    \"1\"\n  ],\n  [\n    \"mq\",\n    // Martinique\n    \"596\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"mr\",\n    // Mauritania\n    \"222\"\n  ],\n  [\n    \"mu\",\n    // Mauritius\n    \"230\"\n  ],\n  [\n    \"yt\",\n    // Mayotte\n    \"262\",\n    1,\n    [\"2689\", \"269\", \"639\", \"7093\"],\n    \"0\"\n  ],\n  [\n    \"mx\",\n    // Mexico\n    \"52\"\n  ],\n  [\n    \"fm\",\n    // Micronesia\n    \"691\"\n  ],\n  [\n    \"md\",\n    // Moldova\n    \"373\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"mc\",\n    // Monaco\n    \"377\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"mn\",\n    // Mongolia\n    \"976\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"me\",\n    // Montenegro\n    \"382\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ms\",\n    // Montserrat\n    \"1\",\n    16,\n    [\"664\"],\n    \"1\"\n  ],\n  [\n    \"ma\",\n    // Morocco\n    \"212\",\n    0,\n    [\"6\", \"7\"],\n    // (mobile ranges shared with EH)\n    \"0\"\n  ],\n  [\n    \"mz\",\n    // Mozambique\n    \"258\"\n  ],\n  [\n    \"mm\",\n    // Myanmar (Burma)\n    \"95\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"na\",\n    // Namibia\n    \"264\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"nr\",\n    // Nauru\n    \"674\"\n  ],\n  [\n    \"np\",\n    // Nepal\n    \"977\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"nl\",\n    // Netherlands\n    \"31\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"nc\",\n    // New Caledonia\n    \"687\"\n  ],\n  [\n    \"nz\",\n    // New Zealand\n    \"64\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ni\",\n    // Nicaragua\n    \"505\"\n  ],\n  [\n    \"ne\",\n    // Niger\n    \"227\"\n  ],\n  [\n    \"ng\",\n    // Nigeria\n    \"234\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"nu\",\n    // Niue\n    \"683\"\n  ],\n  [\n    \"nf\",\n    // Norfolk Island\n    \"672\"\n  ],\n  [\n    \"kp\",\n    // North Korea\n    \"850\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"mk\",\n    // North Macedonia\n    \"389\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"mp\",\n    // Northern Mariana Islands\n    \"1\",\n    17,\n    [\"670\"],\n    \"1\"\n  ],\n  [\n    \"no\",\n    // Norway\n    \"47\",\n    0,\n    [\"4\", \"9\"]\n    // (mobile ranges shared with SJ)\n  ],\n  [\n    \"om\",\n    // Oman\n    \"968\"\n  ],\n  [\n    \"pk\",\n    // Pakistan\n    \"92\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"pw\",\n    // Palau\n    \"680\"\n  ],\n  [\n    \"ps\",\n    // Palestinian Territories\n    \"970\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"pa\",\n    // Panama\n    \"507\"\n  ],\n  [\n    \"pg\",\n    // Papua New Guinea\n    \"675\"\n  ],\n  [\n    \"py\",\n    // Paraguay\n    \"595\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"pe\",\n    // Peru\n    \"51\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ph\",\n    // Philippines\n    \"63\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"pl\",\n    // Poland\n    \"48\"\n  ],\n  [\n    \"pt\",\n    // Portugal\n    \"351\"\n  ],\n  [\n    \"pr\",\n    // Puerto Rico\n    \"1\",\n    3,\n    [\"787\", \"939\"],\n    \"1\"\n  ],\n  [\n    \"qa\",\n    // Qatar\n    \"974\"\n  ],\n  [\n    \"re\",\n    // R\u00E9union\n    \"262\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ro\",\n    // Romania\n    \"40\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ru\",\n    // Russia\n    \"7\",\n    0,\n    [\"33\"],\n    // (shared with KZ)\n    \"8\"\n  ],\n  [\n    \"rw\",\n    // Rwanda\n    \"250\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ws\",\n    // Samoa\n    \"685\"\n  ],\n  [\n    \"sm\",\n    // San Marino\n    \"378\"\n  ],\n  [\n    \"st\",\n    // S\u00E3o Tom\u00E9 & Pr\u00EDncipe\n    \"239\"\n  ],\n  [\n    \"sa\",\n    // Saudi Arabia\n    \"966\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"sn\",\n    // Senegal\n    \"221\"\n  ],\n  [\n    \"rs\",\n    // Serbia\n    \"381\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"sc\",\n    // Seychelles\n    \"248\"\n  ],\n  [\n    \"sl\",\n    // Sierra Leone\n    \"232\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"sg\",\n    // Singapore\n    \"65\"\n  ],\n  [\n    \"sx\",\n    // Sint Maarten\n    \"1\",\n    21,\n    [\"721\"],\n    \"1\"\n  ],\n  [\n    \"sk\",\n    // Slovakia\n    \"421\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"si\",\n    // Slovenia\n    \"386\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"sb\",\n    // Solomon Islands\n    \"677\"\n  ],\n  [\n    \"so\",\n    // Somalia\n    \"252\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"za\",\n    // South Africa\n    \"27\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"kr\",\n    // South Korea\n    \"82\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ss\",\n    // South Sudan\n    \"211\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"es\",\n    // Spain\n    \"34\"\n  ],\n  [\n    \"lk\",\n    // Sri Lanka\n    \"94\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"bl\",\n    // St. Barth\u00E9lemy\n    \"590\",\n    1,\n    null,\n    \"0\"\n  ],\n  [\n    \"sh\",\n    // St. Helena\n    \"290\"\n  ],\n  [\n    \"kn\",\n    // St. Kitts & Nevis\n    \"1\",\n    18,\n    [\"869\"],\n    \"1\"\n  ],\n  [\n    \"lc\",\n    // St. Lucia\n    \"1\",\n    19,\n    [\"758\"],\n    \"1\"\n  ],\n  [\n    \"mf\",\n    // St. Martin\n    \"590\",\n    2,\n    null,\n    \"0\"\n  ],\n  [\n    \"pm\",\n    // St. Pierre & Miquelon\n    \"508\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"vc\",\n    // St. Vincent & Grenadines\n    \"1\",\n    20,\n    [\"784\"],\n    \"1\"\n  ],\n  [\n    \"sd\",\n    // Sudan\n    \"249\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"sr\",\n    // Suriname\n    \"597\"\n  ],\n  [\n    \"sj\",\n    // Svalbard & Jan Mayen\n    \"47\",\n    1,\n    [\"4\", \"79\", \"9\"]\n    // (4 and 9 are mobile ranges shared with NO)\n  ],\n  [\n    \"se\",\n    // Sweden\n    \"46\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ch\",\n    // Switzerland\n    \"41\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"sy\",\n    // Syria\n    \"963\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"tw\",\n    // Taiwan\n    \"886\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"tj\",\n    // Tajikistan\n    \"992\"\n  ],\n  [\n    \"tz\",\n    // Tanzania\n    \"255\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"th\",\n    // Thailand\n    \"66\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"tl\",\n    // Timor-Leste\n    \"670\"\n  ],\n  [\n    \"tg\",\n    // Togo\n    \"228\"\n  ],\n  [\n    \"tk\",\n    // Tokelau\n    \"690\"\n  ],\n  [\n    \"to\",\n    // Tonga\n    \"676\"\n  ],\n  [\n    \"tt\",\n    // Trinidad & Tobago\n    \"1\",\n    22,\n    [\"868\"],\n    \"1\"\n  ],\n  [\n    \"tn\",\n    // Tunisia\n    \"216\"\n  ],\n  [\n    \"tr\",\n    // Turkey\n    \"90\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"tm\",\n    // Turkmenistan\n    \"993\",\n    0,\n    null,\n    \"8\"\n  ],\n  [\n    \"tc\",\n    // Turks & Caicos Islands\n    \"1\",\n    23,\n    [\"649\"],\n    \"1\"\n  ],\n  [\n    \"tv\",\n    // Tuvalu\n    \"688\"\n  ],\n  [\n    \"vi\",\n    // U.S. Virgin Islands\n    \"1\",\n    24,\n    [\"340\"],\n    \"1\"\n  ],\n  [\n    \"ug\",\n    // Uganda\n    \"256\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ua\",\n    // Ukraine\n    \"380\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ae\",\n    // United Arab Emirates\n    \"971\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"gb\",\n    // United Kingdom\n    \"44\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"us\",\n    // United States\n    \"1\",\n    0,\n    null,\n    \"1\"\n  ],\n  [\n    \"uy\",\n    // Uruguay\n    \"598\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"uz\",\n    // Uzbekistan\n    \"998\"\n  ],\n  [\n    \"vu\",\n    // Vanuatu\n    \"678\"\n  ],\n  [\n    \"va\",\n    // Vatican City\n    \"39\",\n    1,\n    [\"06698\", \"3\"]\n    // (3 is a mobile range shared with IT)\n  ],\n  [\n    \"ve\",\n    // Venezuela\n    \"58\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"vn\",\n    // Vietnam\n    \"84\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"wf\",\n    // Wallis & Futuna\n    \"681\"\n  ],\n  [\n    \"eh\",\n    // Western Sahara\n    \"212\",\n    1,\n    [\"5288\", \"5289\", \"6\", \"7\"],\n    // (6 and 7 are mobile ranges shared with MA)\n    \"0\"\n  ],\n  [\n    \"ye\",\n    // Yemen\n    \"967\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"zm\",\n    // Zambia\n    \"260\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"zw\",\n    // Zimbabwe\n    \"263\",\n    0,\n    null,\n    \"0\"\n  ]\n];\nvar allCountries = [];\nfor (const c of rawCountryData) {\n  allCountries.push({\n    name: \"\",\n    // populated in the core library\n    iso2: c[0],\n    dialCode: c[1],\n    priority: c[2] || 0,\n    areaCodes: c[3] || null,\n    nationalPrefix: c[4] || null\n  });\n}\nvar iso2Set = new Set(allCountries.map((c) => c.iso2));\nvar isIso2 = (val) => iso2Set.has(val);\nvar data_default = allCountries;\n\n// packages/core/src/js/constants.ts\nvar EVENTS = {\n  OPEN_COUNTRY_SELECTOR: \"open:countryselector\",\n  CLOSE_COUNTRY_SELECTOR: \"close:countryselector\",\n  COUNTRY_CHANGE: \"countrychange\",\n  INPUT: \"input\",\n  // used for synthetic input trigger\n  STRICT_REJECT: \"strict:reject\"\n};\nvar ITI_SLOTS = [\n  \"container\",\n  \"input\",\n  \"countryContainer\",\n  \"selectedCountry\",\n  \"selectedCountryPrimary\",\n  \"selectedFlag\",\n  \"arrow\",\n  \"selectedDialCode\",\n  \"countrySelector\",\n  \"countrySelectorContainer\",\n  \"searchWrapper\",\n  \"searchIcon\",\n  \"searchInput\",\n  \"searchClear\",\n  \"countryList\",\n  \"countryListItem\",\n  \"countryListItemFlag\",\n  \"countryName\",\n  \"dialCode\",\n  \"countryCheck\",\n  \"noResults\"\n];\nvar CLASSES = {\n  HIDE: \"iti__hide\",\n  V_HIDE: \"iti__v-hide\",\n  ARROW_UP: \"iti__arrow--up\",\n  GLOBE: \"iti__globe\",\n  FLAG: \"iti__flag\",\n  LOADING: \"iti__loading\",\n  COUNTRY_ITEM: \"iti__country\",\n  HIGHLIGHT: \"iti__highlight\",\n  STRICT_REJECT_ANIMATION: \"iti__strict-reject-animation\"\n};\nvar KEYS = {\n  ARROW_UP: \"ArrowUp\",\n  ARROW_DOWN: \"ArrowDown\",\n  SPACE: \" \",\n  ENTER: \"Enter\",\n  ESC: \"Escape\",\n  TAB: \"Tab\"\n};\nvar INPUT_TYPES = {\n  PASTE: \"insertFromPaste\",\n  DELETE_FORWARD: \"deleteContentForward\"\n};\nvar REGEX = {\n  ALPHA_UNICODE: /\\p{L}/u,\n  // any kind of letter from any language\n  NON_PLUS_NUMERIC: /[^+0-9]/,\n  // chars that are NOT + or digit\n  NON_PLUS_NUMERIC_GLOBAL: /[^+0-9]/g,\n  // chars that are NOT + or digit (global)\n  HIDDEN_SEARCH_CHAR: /^[a-zA-Z\u00C0-\u00FF\u0430-\u044F\u0410-\u042F ]$/\n  // single acceptable hidden-search char\n};\nvar TIMINGS = {\n  SEARCH_DEBOUNCE_MS: 100,\n  HIDDEN_SEARCH_RESET_MS: 1e3,\n  NEXT_TICK: 0\n};\nvar LAYOUT = {\n  NARROW_VIEWPORT_WIDTH: 500,\n  // keep in sync with .iti__country-list CSS media query\n  FALLBACK_SELECTED_COUNTRY_WITH_DIAL_WIDTH: 78,\n  // px width fallback when separateDialCode enabled\n  FALLBACK_SELECTED_COUNTRY_NO_DIAL_WIDTH: 42,\n  // px width fallback when no separate dial code\n  INPUT_PADDING_EXTRA_LEFT: 6,\n  // px gap between selected country container and input text\n  DROPDOWN_MARGIN: 3,\n  // px margin between dropdown and tel input\n  FALLBACK_DROPDOWN_HEIGHT: 200\n  // px height fallback for dropdown\n};\nvar DIAL_CODE = {\n  PLUS: \"+\",\n  NANP: \"1\"\n  // North American Numbering Plan\n};\nvar E164_MAX_DIGITS = 15;\nvar UK = {\n  ISO2: \"gb\",\n  DIAL_CODE: \"44\",\n  // +44 United Kingdom\n  MOBILE_PREFIX: \"7\",\n  // UK mobile numbers start with 7 after national trunk (0) or core section\n  MOBILE_CORE_LENGTH: 10\n  // core number length (excluding dial code / national prefix) for mobiles\n};\nvar US = {\n  ISO2: \"us\",\n  DIAL_CODE: \"1\"\n  // +1 United States\n};\nvar PLACEHOLDER_POLICY = {\n  AGGRESSIVE: \"AGGRESSIVE\",\n  POLITE: \"POLITE\",\n  OFF: \"OFF\"\n};\nvar COUNTRY_SELECTOR_MODES = [\n  \"OFF\",\n  \"DROPDOWN\",\n  \"FULLSCREEN\",\n  \"AUTO\"\n];\nvar NUMBER_FORMATS = [\n  \"E164\",\n  \"INTERNATIONAL\",\n  \"NATIONAL\",\n  \"RFC3966\"\n];\nvar NUMBER_TYPES = [\n  \"FIXED_LINE\",\n  \"MOBILE\",\n  \"FIXED_LINE_OR_MOBILE\",\n  \"TOLL_FREE\",\n  \"PREMIUM_RATE\",\n  \"SHARED_COST\",\n  \"VOIP\",\n  \"PERSONAL_NUMBER\",\n  \"PAGER\",\n  \"UAN\",\n  \"VOICEMAIL\",\n  \"UNKNOWN\"\n];\nvar VALIDATION_ERRORS = [\n  \"IS_POSSIBLE\",\n  \"INVALID_COUNTRY_CODE\",\n  \"TOO_SHORT\",\n  \"TOO_LONG\",\n  \"IS_POSSIBLE_LOCAL_ONLY\",\n  \"INVALID_LENGTH\"\n];\nvar toEnumObject = (arr) => Object.fromEntries(arr.map((v) => [v, v]));\nvar NUMBER_FORMAT = toEnumObject(NUMBER_FORMATS);\nvar NUMBER_TYPE = toEnumObject(NUMBER_TYPES);\nvar VALIDATION_ERROR = toEnumObject(VALIDATION_ERRORS);\nvar COUNTRY_SELECTOR_MODE = toEnumObject(COUNTRY_SELECTOR_MODES);\nvar DATA_KEYS = {\n  // e.g. <li data-iso2=\"us\"> for country items in the country list\n  ISO2: \"iso2\",\n  DIAL_CODE: \"dialCode\",\n  // e.g. <input data-intl-tel-input-id=\"0\"> on the input element\n  INSTANCE_ID: \"intlTelInputId\"\n};\nvar ARIA = {\n  EXPANDED: \"aria-expanded\",\n  LABEL: \"aria-label\",\n  SELECTED: \"aria-selected\",\n  ACTIVE_DESCENDANT: \"aria-activedescendant\",\n  HASPOPUP: \"aria-haspopup\",\n  CONTROLS: \"aria-controls\",\n  HIDDEN: \"aria-hidden\",\n  AUTOCOMPLETE: \"aria-autocomplete\",\n  MODAL: \"aria-modal\"\n};\n\n// packages/core/src/js/locale/en.ts\nvar interfaceTranslations = {\n  selectedCountryAriaLabel: \"Change country for phone number, currently selected ${countryName} (${dialCode})\",\n  noCountrySelected: \"Select country for phone number\",\n  countryListAriaLabel: \"List of countries\",\n  searchPlaceholder: \"Search\",\n  clearSearchAriaLabel: \"Clear search\",\n  searchEmptyState: \"No results found\",\n  searchSummaryAria(count) {\n    if (count === 0) {\n      return \"No results found\";\n    }\n    if (count === 1) {\n      return \"1 result found\";\n    }\n    return `${count} results found`;\n  }\n};\nvar en_default = interfaceTranslations;\n\n// packages/core/src/js/core/options.ts\nvar mediaQuery = (q) => typeof window !== \"undefined\" && typeof window.matchMedia === \"function\" && window.matchMedia(q).matches;\nvar isNarrowViewport = () => mediaQuery(`(max-width: ${LAYOUT.NARROW_VIEWPORT_WIDTH}px)`);\nvar resolveAutoCountrySelectorMode = () => {\n  if (typeof navigator !== \"undefined\" && typeof window !== \"undefined\") {\n    const isShortViewport = mediaQuery(\"(max-height: 600px)\");\n    const isCoarsePointer = mediaQuery(\"(pointer: coarse)\");\n    if (isNarrowViewport() || isCoarsePointer && isShortViewport) {\n      return COUNTRY_SELECTOR_MODE.FULLSCREEN;\n    }\n  }\n  return COUNTRY_SELECTOR_MODE.DROPDOWN;\n};\nvar defaults = {\n  //* How the country selector is displayed. \"DROPDOWN\" vs \"FULLSCREEN\", or \"AUTO\" to decide itself, or \"OFF\".\n  countrySelectorMode: COUNTRY_SELECTOR_MODE.AUTO,\n  //* The number type to enforce during validation.\n  allowedNumberTypes: [NUMBER_TYPE.MOBILE, NUMBER_TYPE.FIXED_LINE],\n  //* Whether or not to allow extensions after the main number.\n  allowNumberExtensions: false,\n  // Allow alphanumeric \"phonewords\" (e.g. +1 800 FLOWERS) as valid numbers\n  allowPhonewords: false,\n  //* Add custom classes to the elements we generate, keyed by slot name e.g. { selectedCountry: \"rounded-l-lg\" }.\n  classNames: {},\n  //* Add a custom class to the (injected) container element.\n  containerClass: \"\",\n  //* Locale for localising country names via Intl.DisplayNames.\n  countryNameLocale: \"en\",\n  //* Override individual country names by iso2 code.\n  countryNameOverrides: {},\n  //* The order of the countries in the country list. Defaults to alphabetical.\n  countryOrder: null,\n  //* Add a country search input at the top of the country selector.\n  countrySearch: true,\n  //* Modify the auto placeholder.\n  customPlaceholder: null,\n  //* Always show the dropdown\n  dropdownAlwaysOpen: false,\n  //* Optional DOM element to append the dropdown to (used to escape ancestors with overflow:hidden, or to mount in a custom container). Only consulted in dropdown rendering; ignored when the country selector renders as a fullscreen popup.\n  dropdownParent: null,\n  //* Don't display these countries.\n  excludeCountries: null,\n  //* Fix the dropdown width to the input width (rather than being as wide as the longest country name).\n  matchDropdownWidth: true,\n  //* Format the number as the user types\n  formatAsYouType: true,\n  //* Inject hidden inputs with the names returned from this function, and on submit, populate them with the full number and selected country iso2.\n  hiddenInputs: null,\n  //* Translations for the core library UI strings e.g. search input placeholder, country names.\n  uiTranslations: {},\n  //* Initial country.\n  initialCountry: \"\",\n  //* Async lookup function used to determine the initial country (e.g. via IP). Ignored if initialCountry is set.\n  initialCountryLookup: null,\n  //* A function to load the utils script.\n  loadUtils: null,\n  //* Format used when displaying numbers (placeholder examples and stored values). One of \"E164\", \"INTERNATIONAL\", \"NATIONAL\".\n  numberDisplayFormat: NUMBER_FORMAT.INTERNATIONAL,\n  //* Display only these countries.\n  onlyCountries: null,\n  //* When to set the placeholder to an example number for the selected country: \"POLITE\" only when the input has no manually-set placeholder, \"AGGRESSIVE\" always, \"OFF\" never.\n  placeholderNumberPolicy: PLACEHOLDER_POLICY.POLITE,\n  //* Number type to use for placeholders.\n  placeholderNumberType: NUMBER_TYPE.MOBILE,\n  //* Add custom classes to the search input element.\n  searchInputClass: \"\",\n  //* Display the international dial code next to the selected flag.\n  separateDialCode: true,\n  //* When strictMode rejects a key (etc), play a short feedback animation\n  strictRejectAnimation: true,\n  //* Show flags - for both the selected country, and in the country list\n  showFlags: true,\n  //* Only allow certain chars e.g. a plus followed by numeric digits, and cap at max valid length.\n  strictMode: true\n};\nvar toString = (val) => JSON.stringify(val);\nvar isPlainObject = (val) => Boolean(val) && typeof val === \"object\" && !Array.isArray(val);\nvar isFunction = (val) => typeof val === \"function\";\nvar isElLike = (val) => {\n  if (!val || typeof val !== \"object\") {\n    return false;\n  }\n  const v = val;\n  return v.nodeType === 1 && typeof v.tagName === \"string\" && typeof v.appendChild === \"function\";\n};\nvar placeholderPolicySet = new Set(Object.values(PLACEHOLDER_POLICY));\nvar slotSet = new Set(ITI_SLOTS);\nvar warn = (message) => {\n  console.warn(`[intl-tel-input] ${message}`);\n};\nvar warnOption = (optionName, expectedType, actualValue) => {\n  warn(\n    `Option '${optionName}' must be ${expectedType}; got ${toString(actualValue)}. Ignoring.`\n  );\n};\nvar validateIso2Array = (key, value) => {\n  const expectedType = \"an array of iso2 country code strings\";\n  if (!Array.isArray(value)) {\n    warnOption(key, expectedType, value);\n    return false;\n  }\n  const valid = [];\n  for (const v of value) {\n    if (typeof v !== \"string\") {\n      warnOption(key, expectedType, value);\n      return false;\n    }\n    const lower = v.toLowerCase();\n    if (!isIso2(lower)) {\n      warn(`Invalid iso2 code in '${key}': '${v}'. Skipping.`);\n    } else {\n      valid.push(v);\n    }\n  }\n  return valid;\n};\nvar validateOptions = (customOptions) => {\n  if (customOptions === void 0) {\n    return {};\n  }\n  if (!isPlainObject(customOptions)) {\n    const error = `The second argument must be an options object; got ${toString(customOptions)}. Using defaults.`;\n    warn(error);\n    return {};\n  }\n  const validatedOptions = {};\n  for (const [key, value] of Object.entries(customOptions)) {\n    if (!Object.hasOwn(defaults, key)) {\n      warn(`Unknown option '${key}'. Ignoring.`);\n      continue;\n    }\n    switch (key) {\n      case \"allowNumberExtensions\":\n      case \"allowPhonewords\":\n      case \"countrySearch\":\n      case \"dropdownAlwaysOpen\":\n      case \"matchDropdownWidth\":\n      case \"formatAsYouType\":\n      case \"showFlags\":\n      case \"separateDialCode\":\n      case \"strictMode\":\n      case \"strictRejectAnimation\":\n        if (typeof value !== \"boolean\") {\n          warnOption(key, \"a boolean\", value);\n          break;\n        }\n        validatedOptions[key] = value;\n        break;\n      case \"countrySelectorMode\":\n        if (typeof value !== \"string\" || !COUNTRY_SELECTOR_MODES.includes(value)) {\n          warnOption(\n            \"countrySelectorMode\",\n            `one of ${COUNTRY_SELECTOR_MODES.map((m) => `\"${m}\"`).join(\", \")}`,\n            value\n          );\n          break;\n        }\n        validatedOptions[key] = value;\n        break;\n      case \"numberDisplayFormat\":\n        if (typeof value !== \"string\" || value === NUMBER_FORMAT.RFC3966 || !(value === NUMBER_FORMAT.E164 || value === NUMBER_FORMAT.INTERNATIONAL || value === NUMBER_FORMAT.NATIONAL)) {\n          warnOption(\n            \"numberDisplayFormat\",\n            'one of \"E164\", \"INTERNATIONAL\", \"NATIONAL\"',\n            value\n          );\n          break;\n        }\n        validatedOptions[key] = value;\n        break;\n      case \"placeholderNumberPolicy\":\n        if (typeof value !== \"string\" || !placeholderPolicySet.has(value)) {\n          const validPolicies = Array.from(placeholderPolicySet).join(\", \");\n          warnOption(\"placeholderNumberPolicy\", `one of ${validPolicies}`, value);\n          break;\n        }\n        validatedOptions[key] = value;\n        break;\n      case \"containerClass\":\n      case \"searchInputClass\":\n      case \"countryNameLocale\":\n        if (typeof value !== \"string\") {\n          warnOption(key, \"a string\", value);\n          break;\n        }\n        validatedOptions[key] = value;\n        break;\n      case \"classNames\": {\n        if (!isPlainObject(value)) {\n          warnOption(\"classNames\", \"an object\", value);\n          break;\n        }\n        const validSlots = {};\n        for (const [slot, slotValue] of Object.entries(value)) {\n          if (!slotSet.has(slot)) {\n            warn(\n              `Unknown slot '${slot}' in 'classNames'. Valid slots: ${ITI_SLOTS.join(\", \")}. Skipping.`\n            );\n          } else if (typeof slotValue !== \"string\") {\n            warnOption(`classNames.${slot}`, \"a string\", slotValue);\n          } else {\n            validSlots[slot] = slotValue.trim().replace(/\\s+/g, \" \");\n          }\n        }\n        validatedOptions[key] = validSlots;\n        break;\n      }\n      case \"countryOrder\": {\n        if (value === null) {\n          validatedOptions[key] = value;\n        } else {\n          const filtered = validateIso2Array(key, value);\n          if (filtered !== false) {\n            validatedOptions[key] = filtered;\n          }\n        }\n        break;\n      }\n      case \"customPlaceholder\":\n      case \"hiddenInputs\":\n      case \"initialCountryLookup\":\n      case \"loadUtils\":\n        if (value !== null && !isFunction(value)) {\n          warnOption(key, \"a function or null\", value);\n          break;\n        }\n        validatedOptions[key] = value;\n        break;\n      case \"dropdownParent\":\n        if (value !== null && !isElLike(value)) {\n          warnOption(\"dropdownParent\", \"an HTMLElement or null\", value);\n          break;\n        }\n        validatedOptions[key] = value;\n        break;\n      case \"excludeCountries\":\n      case \"onlyCountries\": {\n        if (value === null) {\n          validatedOptions[key] = value;\n        } else {\n          const filtered = validateIso2Array(key, value);\n          if (filtered !== false) {\n            validatedOptions[key] = filtered;\n          }\n        }\n        break;\n      }\n      case \"uiTranslations\":\n        if (value && !isPlainObject(value)) {\n          warnOption(\"uiTranslations\", \"an object\", value);\n          break;\n        }\n        validatedOptions[key] = value;\n        break;\n      case \"countryNameOverrides\":\n        if (value && !isPlainObject(value)) {\n          warnOption(\"countryNameOverrides\", \"an object\", value);\n          break;\n        }\n        validatedOptions[key] = value;\n        break;\n      case \"initialCountry\": {\n        if (typeof value !== \"string\") {\n          warnOption(\"initialCountry\", \"a string\", value);\n          break;\n        }\n        const lower = value.toLowerCase();\n        if (lower && !isIso2(lower)) {\n          warnOption(\"initialCountry\", \"a valid iso2 country code\", value);\n          break;\n        }\n        validatedOptions[key] = value;\n        break;\n      }\n      case \"placeholderNumberType\":\n        if (typeof value !== \"string\" || !NUMBER_TYPES.includes(value)) {\n          const validTypes = NUMBER_TYPES.join(\", \");\n          warnOption(\"placeholderNumberType\", `one of ${validTypes}`, value);\n          break;\n        }\n        validatedOptions[key] = value;\n        break;\n      case \"allowedNumberTypes\":\n        if (value !== null) {\n          if (!Array.isArray(value)) {\n            warnOption(\n              \"allowedNumberTypes\",\n              \"an array of number types or null\",\n              value\n            );\n            break;\n          }\n          let allValid = true;\n          for (const v of value) {\n            if (typeof v !== \"string\" || !NUMBER_TYPES.includes(v)) {\n              const validTypes = NUMBER_TYPES.join(\", \");\n              warnOption(\n                \"allowedNumberTypes\",\n                `an array of valid number types (${validTypes})`,\n                v\n              );\n              allValid = false;\n              break;\n            }\n          }\n          if (allValid) {\n            validatedOptions[key] = value;\n          }\n        } else {\n          validatedOptions[key] = null;\n        }\n        break;\n    }\n  }\n  return validatedOptions;\n};\nvar normaliseOptions = (o) => {\n  if (o.initialCountry) {\n    o.initialCountry = o.initialCountry.toLowerCase();\n  }\n  if (o.onlyCountries?.length) {\n    o.onlyCountries = o.onlyCountries.map((c) => c.toLowerCase());\n  }\n  if (o.excludeCountries?.length) {\n    o.excludeCountries = o.excludeCountries.map((c) => c.toLowerCase());\n  }\n  if (o.countryOrder) {\n    o.countryOrder = o.countryOrder.map((c) => c.toLowerCase());\n  }\n};\nvar applyOptionSideEffects = (o) => {\n  if (o.countrySelectorMode === COUNTRY_SELECTOR_MODE.AUTO) {\n    o.countrySelectorMode = resolveAutoCountrySelectorMode();\n  }\n  if (o.dropdownAlwaysOpen) {\n    o.countrySelectorMode = COUNTRY_SELECTOR_MODE.DROPDOWN;\n  }\n  if (o.countrySelectorMode === COUNTRY_SELECTOR_MODE.FULLSCREEN) {\n    o.matchDropdownWidth = false;\n  } else {\n    if (isNarrowViewport()) {\n      o.matchDropdownWidth = true;\n    }\n  }\n  if (o.onlyCountries?.length === 1) {\n    o.initialCountry = o.onlyCountries[0];\n  }\n  if (o.separateDialCode && o.numberDisplayFormat === NUMBER_FORMAT.NATIONAL) {\n    o.numberDisplayFormat = NUMBER_FORMAT.INTERNATIONAL;\n  }\n  if (o.countrySelectorMode !== COUNTRY_SELECTOR_MODE.OFF && !o.showFlags && !o.separateDialCode && o.numberDisplayFormat === NUMBER_FORMAT.NATIONAL) {\n    o.numberDisplayFormat = NUMBER_FORMAT.INTERNATIONAL;\n  }\n  o.uiTranslations = { ...en_default, ...o.uiTranslations };\n};\n\n// packages/core/src/js/helpers/string.ts\nvar getNumeric = (s) => s.replace(/\\D/g, \"\");\nvar normaliseString = (s = \"\") => s.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\").toLowerCase();\n\n// packages/core/src/js/helpers/dom.ts\nvar buildClassNames = (flags) => Object.keys(flags).filter((k) => Boolean(flags[k])).join(\" \");\nvar createEl = (tagName, attrs, container) => {\n  const el = document.createElement(tagName);\n  if (attrs) {\n    Object.entries(attrs).forEach(\n      ([key, value]) => el.setAttribute(key, value)\n    );\n  }\n  if (container) {\n    container.appendChild(el);\n  }\n  return el;\n};\n\n// packages/core/src/js/core/icons.ts\nvar SVG_NS = \"http://www.w3.org/2000/svg\";\nvar buildSvg = ([tag, attrs, children]) => {\n  const el = document.createElementNS(SVG_NS, tag);\n  if (attrs) {\n    for (const k in attrs) {\n      el.setAttribute(k, String(attrs[k]));\n    }\n  }\n  if (children) {\n    for (const c of children) {\n      el.appendChild(buildSvg(c));\n    }\n  }\n  return el;\n};\nvar buildSearchIcon = () => buildSvg(\n  [\"svg\", { class: \"iti__search-icon-svg\", width: 14, height: 14, viewBox: \"0 0 24 24\", focusable: \"false\", [ARIA.HIDDEN]: \"true\" }, [\n    [\"circle\", { cx: 11, cy: 11, r: 7 }],\n    [\"line\", { x1: 21, y1: 21, x2: 16.65, y2: 16.65 }]\n  ]]\n);\nvar buildClearIcon = (id) => {\n  const maskId = `iti-${id}-clear-mask`;\n  return buildSvg(\n    [\"svg\", { class: \"iti__search-clear-svg\", width: 12, height: 12, viewBox: \"0 0 16 16\", [ARIA.HIDDEN]: \"true\", focusable: \"false\" }, [\n      [\"mask\", { id: maskId, maskUnits: \"userSpaceOnUse\" }, [\n        [\"rect\", { width: 16, height: 16, fill: \"white\" }],\n        [\"path\", { d: \"M5.2 5.2 L10.8 10.8 M10.8 5.2 L5.2 10.8\", stroke: \"black\", \"stroke-linecap\": \"round\", class: \"iti__search-clear-x\" }]\n      ]],\n      [\"circle\", { cx: 8, cy: 8, r: 8, class: \"iti__search-clear-bg\", mask: `url(#${maskId})` }]\n    ]]\n  );\n};\nvar buildCheckIcon = () => buildSvg(\n  [\"svg\", { class: \"iti__country-check-svg\", width: 14, height: 14, viewBox: \"0 0 16 16\", fill: \"currentColor\", focusable: \"false\", [ARIA.HIDDEN]: \"true\" }, [\n    [\"path\", { d: \"M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-3.97-3.03a.75.75 0 0 0-1.08.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-.01-1.05z\" }]\n  ]]\n);\nvar buildGlobeIcon = () => buildSvg(\n  [\"svg\", { width: 256, height: 256, viewBox: \"0 0 512 512\", class: \"iti__globe-svg\" }, [\n    [\"path\", { d: \"M508 213a240 240 0 0 0-449-87l-2 5-2 5c-8 14-13 30-17 46a65 65 0 0 1 56 4c16-10 35-19 56-27l9-3c-6 23-10 48-10 74h-16l4 6c3 4 5 8 6 13h6c0 22 3 44 8 65l2 10-25-10-4 5 12 18 9 3 6 2 8 3 9 26 1 2 16-7h1l-5-13-1-2c24 6 49 9 75 10v26l11 10 7 7v-30l1-13c22 0 44-3 65-8l10-2-21 48-1 1a317 317 0 0 1-14 23l-21 5h-2c6 16 7 33 1 50a240 240 0 0 0 211-265m-401-56-11 6c19-44 54-79 98-98-11 20-21 44-29 69-21 6-40 15-58 23m154 182v4c-29-1-57-6-81-13-7-25-12-52-13-81h94zm0-109h-94c1-29 6-56 13-81 24-7 52-12 81-13zm0-112c-22 1-44 4-65 8l-10 2 12-30 9-17 1-2a332 332 0 0 1 13-23c13-4 26-6 40-7zm187 69 6 4c4 12 6 25 6 38v1h-68c-1-26-4-51-10-74l48 20 1 1 14 8zm-14-44 10 20c-20-11-43-21-68-29-8-25-18-49-29-69 37 16 67 44 87 78M279 49h1c13 1 27 3 39 7l14 23 1 2a343 343 0 0 1 12 26l2 5 6 16c-23-6-48-9-74-10h-1zm0 87h1c29 1 56 6 81 13 7 24 12 51 12 80v1h-94zm2 207h-2v-94h95c-1 29-6 56-13 81-24 7-51 12-80 13m86 60-20 10c11-20 21-43 29-68 25-8 48-18 68-29-16 37-43 67-77 87m87-115-7 5-16 9-2 1a337 337 0 0 1-47 21c6-24 9-49 10-75h68c0 13-2 27-6 39\" }],\n    [\"path\", { d: \"m261 428-2-2-22-21a40 40 0 0 0-32-11h-1a37 37 0 0 0-18 8l-1 1-4 2-2 2-5 4c-9-3-36-31-47-44s-32-45-34-55l3-2a151 151 0 0 0 11-9v-1a39 39 0 0 0 5-48l-3-3-11-19-3-4-5-7h-1l-3-3-4-3-5-2a35 35 0 0 0-16-3h-5c-4 1-14 5-24 11l-4 2-4 3-4 2c-9 8-17 17-18 27a380 380 0 0 0 212 259h3c12 0 25-10 36-21l10-12 6-11a39 39 0 0 0-8-40\" }]\n  ]]\n);\n\n// packages/core/src/js/core/countrySearch.ts\nvar normaliseName = (s) => normaliseString(s).replace(/[^\\p{L}]+/gu, \" \").trim();\nvar buildSearchTokens = (countries) => {\n  const tokens = /* @__PURE__ */ new Map();\n  for (const c of countries) {\n    const normalisedName = normaliseName(c.name);\n    const words = normalisedName.split(\" \").filter(Boolean);\n    const initials = words.map((w) => w[0] || \"\").join(\"\");\n    tokens.set(c.iso2, {\n      normalisedName,\n      words,\n      initials,\n      dialCodePlus: `+${c.dialCode}`\n    });\n  }\n  return tokens;\n};\nvar getMatchedCountries = (countries, searchTokens, query) => {\n  const lowerQuery = normaliseString(query);\n  const nameQuery = normaliseName(query);\n  const skipNameBuckets = lowerQuery !== \"\" && nameQuery === \"\";\n  const iso2Matches = [];\n  const nameStartsWith = [];\n  const nameContains = [];\n  const dialCodeMatches = [];\n  const dialCodeContains = [];\n  const initialsMatches = [];\n  const wordMatches = [];\n  for (const c of countries) {\n    const t = searchTokens.get(c.iso2);\n    if (c.iso2 === lowerQuery) {\n      iso2Matches.push(c);\n    } else if (!skipNameBuckets && t.normalisedName.startsWith(nameQuery)) {\n      nameStartsWith.push(c);\n    } else if (!skipNameBuckets && t.normalisedName.includes(nameQuery)) {\n      nameContains.push(c);\n    } else if (lowerQuery === c.dialCode || lowerQuery === t.dialCodePlus) {\n      dialCodeMatches.push(c);\n    } else if (t.dialCodePlus.includes(lowerQuery)) {\n      dialCodeContains.push(c);\n    } else if (t.initials.includes(lowerQuery)) {\n      initialsMatches.push(c);\n    }\n  }\n  const queryWords = nameQuery.split(\" \").filter(Boolean);\n  if (queryWords.length > 1 && iso2Matches.length === 0 && nameStartsWith.length === 0 && nameContains.length === 0) {\n    const claimed = /* @__PURE__ */ new Set([\n      ...dialCodeMatches.map((c) => c.iso2),\n      ...dialCodeContains.map((c) => c.iso2),\n      ...initialsMatches.map((c) => c.iso2)\n    ]);\n    for (const c of countries) {\n      if (claimed.has(c.iso2)) {\n        continue;\n      }\n      const t = searchTokens.get(c.iso2);\n      if (queryWords.some((qw) => t.words.some((sw) => sw.startsWith(qw)))) {\n        wordMatches.push(c);\n      }\n    }\n  }\n  const sortByPriority = (a, b) => a.priority - b.priority;\n  return [\n    ...iso2Matches,\n    ...nameStartsWith,\n    ...nameContains,\n    // priority sort is only relevant when showing multiple countries with the same dial code (that's what the priority field is used to distinguish between)\n    ...dialCodeMatches.sort(sortByPriority),\n    ...dialCodeContains.sort(sortByPriority),\n    ...initialsMatches,\n    ...wordMatches\n  ];\n};\nvar findFirstCountryStartingWith = (countries, searchTokens, query) => {\n  const nameQuery = normaliseName(query);\n  for (const c of countries) {\n    const { normalisedName } = searchTokens.get(c.iso2);\n    if (normalisedName.startsWith(nameQuery)) {\n      return c;\n    }\n  }\n  return null;\n};\n\n// packages/core/src/js/core/numerals.ts\nvar Numerals = class _Numerals {\n  #userNumeralSet;\n  //* Stateless conversion of any Arabic-Indic / Persian digits to ASCII 0-9.\n  //* Use this when you need to normalise digits without affecting any instance's tracked numeral set (e.g. for the country-search query).\n  static toAscii(str) {\n    if (!str) {\n      return \"\";\n    }\n    return str.replace(\n      /[\u0660-\u0669]/g,\n      (ch) => String.fromCharCode(48 + (ch.charCodeAt(0) - 1632))\n    ).replace(\n      /[\u06F0-\u06F9]/g,\n      (ch) => String.fromCharCode(48 + (ch.charCodeAt(0) - 1776))\n    );\n  }\n  constructor(initialValue) {\n    if (initialValue) {\n      this.#updateNumeralSet(initialValue);\n    }\n  }\n  // If any Arabic-Indic digits, then label it as that set. Same for Persian. Otherwise assume ASCII.\n  #updateNumeralSet(str) {\n    if (/[\u0660-\u0669]/.test(str)) {\n      this.#userNumeralSet = \"arabic-indic\";\n    } else if (/[\u06F0-\u06F9]/.test(str)) {\n      this.#userNumeralSet = \"persian\";\n    } else {\n      this.#userNumeralSet = \"ascii\";\n    }\n  }\n  // Denormalise ASCII 0-9 to the user's numeral set. If not yet known, return as-is.\n  // NOTE: normalise is always called before this, so it should be impossible for the numeral set to be unknown at this point.\n  denormalise(str) {\n    if (!this.#userNumeralSet || this.#userNumeralSet === \"ascii\") {\n      return str;\n    }\n    const base = this.#userNumeralSet === \"arabic-indic\" ? 1632 : 1776;\n    return str.replace(/[0-9]/g, (d) => String.fromCharCode(base + Number(d)));\n  }\n  // Normalize Eastern Arabic (U+0660-0669) and Persian/Extended Arabic-Indic (U+06F0-06F9) numerals to ASCII 0-9.\n  // Tracks the user's numeral set as a side effect so denormalise can mirror it back.\n  normalise(str) {\n    if (!str) {\n      return \"\";\n    }\n    this.#updateNumeralSet(str);\n    if (this.#userNumeralSet === \"ascii\") {\n      return str;\n    }\n    return _Numerals.toAscii(str);\n  }\n  isAscii() {\n    return !this.#userNumeralSet || this.#userNumeralSet === \"ascii\";\n  }\n};\n\n// packages/core/src/js/core/ui.ts\nvar supportsCssAnchor = typeof CSS !== \"undefined\" && typeof CSS.supports === \"function\" && CSS.supports(\"anchor-name: --x\");\nvar UI = class {\n  // private\n  #options;\n  #id;\n  #isRTL;\n  #originalPaddingLeft = \"\";\n  #countries;\n  #searchTokens;\n  #searchDebounceTimer = null;\n  #inlineDropdownHeight;\n  #cssAnchorPositioningDone = false;\n  #countryContainerEl;\n  #selectedCountryEl;\n  #selectedFlagEl;\n  #selectedDialCodeEl;\n  #arrowEl;\n  #countrySelectorEl;\n  #searchIconEl;\n  #searchInputEl;\n  #searchClearButtonEl;\n  #countryListEl;\n  #hiddenInputPhoneEl;\n  #hiddenInputCountryEl;\n  #noResultsMessageEl;\n  #searchResultsLiveRegionEl;\n  #detachedCountrySelectorEl;\n  #selectedListItemEl = null;\n  #highlightedListItemEl = null;\n  #listItemByIso2 = /* @__PURE__ */ new Map();\n  #countrySelectorAbortController = null;\n  #resizeObserver;\n  // public\n  telInputEl;\n  hadInitialPlaceholder;\n  constructor(input, options, id) {\n    input.dataset[DATA_KEYS.INSTANCE_ID] = id.toString();\n    this.telInputEl = input;\n    this.#options = options;\n    this.#id = id;\n    this.hadInitialPlaceholder = Boolean(input.getAttribute(\"placeholder\"));\n    this.#isRTL = !!this.telInputEl.closest(\"[dir=rtl]\");\n    this.#originalPaddingLeft = this.telInputEl.style.paddingLeft;\n  }\n  // Validate that the provided element is an HTMLInputElement.\n  static validateInput(input) {\n    const tagName = input?.tagName;\n    const isInputEl = Boolean(input) && typeof input === \"object\" && tagName === \"INPUT\" && typeof input.setAttribute === \"function\";\n    if (!isInputEl) {\n      const type = Object.prototype.toString.call(input);\n      throw new TypeError(\n        `The first argument must be an HTMLInputElement, not ${type}`\n      );\n    }\n  }\n  //* Append any consumer-supplied classes (via the classNames option) for the given slot to our own classes for that element.\n  #withSlotClass(slot, ourClasses) {\n    const custom = this.#options.classNames[slot];\n    return custom ? `${ourClasses} ${custom}` : ourClasses;\n  }\n  //* Generate all of the markup for the core library: the selected country overlay, and the country selector.\n  buildMarkup(countries, searchTokens) {\n    this.#countries = countries;\n    this.#searchTokens = searchTokens;\n    this.telInputEl.classList.add(\n      ...this.#withSlotClass(\"input\", \"iti__tel-input\").split(\" \")\n    );\n    if (!this.telInputEl.hasAttribute(\"type\")) {\n      this.telInputEl.setAttribute(\"type\", \"tel\");\n    }\n    if (!this.telInputEl.hasAttribute(\"autocomplete\")) {\n      this.telInputEl.setAttribute(\"autocomplete\", \"tel\");\n    }\n    if (!this.telInputEl.hasAttribute(\"inputmode\")) {\n      this.telInputEl.setAttribute(\"inputmode\", \"tel\");\n    }\n    const wrapper = this.#createWrapperAndInsert();\n    this.#buildCountryContainer(wrapper);\n    wrapper.appendChild(this.telInputEl);\n    this.#updateInputPaddingAndReveal();\n    this.#observeSelectedCountryResize();\n    this.#buildHiddenInputs(wrapper);\n    this.ensureDropdownWidthSet();\n  }\n  #createWrapperAndInsert() {\n    const { countrySelectorMode, showFlags, containerClass } = this.#options;\n    const parentClasses = buildClassNames({\n      iti: true,\n      \"iti--input-container\": true,\n      \"iti--has-country-selector\": countrySelectorMode !== COUNTRY_SELECTOR_MODE.OFF,\n      \"iti--show-flags\": showFlags,\n      \"iti--inline-country-selector\": countrySelectorMode !== COUNTRY_SELECTOR_MODE.FULLSCREEN,\n      [containerClass]: Boolean(containerClass)\n    });\n    const wrapper = createEl(\"div\", {\n      class: this.#withSlotClass(\"container\", parentClasses)\n    });\n    if (this.#isRTL) {\n      wrapper.setAttribute(\"dir\", \"ltr\");\n    }\n    this.telInputEl.before(wrapper);\n    return wrapper;\n  }\n  #buildCountryContainer(wrapper) {\n    const { countrySelectorMode, separateDialCode, showFlags } = this.#options;\n    const enableCountrySelector = countrySelectorMode !== COUNTRY_SELECTOR_MODE.OFF;\n    if (!enableCountrySelector && !showFlags && !separateDialCode) {\n      return;\n    }\n    this.#countryContainerEl = createEl(\n      \"div\",\n      // visibly hidden until we measure its width to set the input padding correctly\n      {\n        class: this.#withSlotClass(\n          \"countryContainer\",\n          `iti__country-container ${CLASSES.V_HIDE}`\n        )\n      },\n      wrapper\n    );\n    if (enableCountrySelector) {\n      this.#selectedCountryEl = createEl(\n        \"button\",\n        {\n          type: \"button\",\n          class: this.#withSlotClass(\"selectedCountry\", \"iti__selected-country\"),\n          [ARIA.EXPANDED]: \"false\",\n          [ARIA.LABEL]: this.#options.uiTranslations.noCountrySelected,\n          [ARIA.HASPOPUP]: \"dialog\",\n          [ARIA.CONTROLS]: `iti-${this.#id}__country-selector`\n        },\n        this.#countryContainerEl\n      );\n      if (this.telInputEl.disabled) {\n        this.#selectedCountryEl.setAttribute(\"disabled\", \"true\");\n      }\n    } else {\n      this.#selectedCountryEl = createEl(\n        \"div\",\n        { class: this.#withSlotClass(\"selectedCountry\", \"iti__selected-country\") },\n        this.#countryContainerEl\n      );\n    }\n    const selectedCountryPrimary = createEl(\n      \"div\",\n      {\n        class: this.#withSlotClass(\n          \"selectedCountryPrimary\",\n          \"iti__selected-country-primary\"\n        )\n      },\n      this.#selectedCountryEl\n    );\n    this.#selectedFlagEl = createEl(\n      \"div\",\n      { class: this.#withSlotClass(\"selectedFlag\", CLASSES.FLAG) },\n      selectedCountryPrimary\n    );\n    if (enableCountrySelector) {\n      this.#arrowEl = createEl(\n        \"div\",\n        {\n          class: this.#withSlotClass(\"arrow\", \"iti__arrow\"),\n          [ARIA.HIDDEN]: \"true\"\n        },\n        selectedCountryPrimary\n      );\n    }\n    if (separateDialCode) {\n      this.#selectedDialCodeEl = createEl(\n        \"div\",\n        {\n          class: this.#withSlotClass(\n            \"selectedDialCode\",\n            \"iti__selected-dial-code\"\n          )\n        },\n        this.#selectedCountryEl\n      );\n    }\n    if (enableCountrySelector) {\n      this.#buildCountrySelector();\n    }\n  }\n  ensureDropdownWidthSet() {\n    const { matchDropdownWidth, countrySelectorMode } = this.#options;\n    if (countrySelectorMode === COUNTRY_SELECTOR_MODE.OFF || !matchDropdownWidth || this.#countrySelectorEl.style.width) {\n      return;\n    }\n    const inputWidth = this.telInputEl.offsetWidth;\n    if (inputWidth > 0) {\n      this.#countrySelectorEl.style.width = `${inputWidth}px`;\n    }\n  }\n  #buildCountrySelector() {\n    const {\n      matchDropdownWidth,\n      countrySelectorMode,\n      countrySearch,\n      uiTranslations,\n      containerClass\n    } = this.#options;\n    const isFullscreen = countrySelectorMode === COUNTRY_SELECTOR_MODE.FULLSCREEN;\n    const detachedParent = this.#getDetachedParent();\n    const extraClasses = matchDropdownWidth ? \"\" : \"iti--flexible-dropdown-width\";\n    this.#countrySelectorEl = createEl(\"div\", {\n      id: `iti-${this.#id}__country-selector`,\n      class: this.#withSlotClass(\n        \"countrySelector\",\n        `iti__country-selector ${CLASSES.HIDE} ${extraClasses}`\n      ),\n      role: \"dialog\",\n      [ARIA.MODAL]: \"true\"\n    });\n    if (this.#isRTL) {\n      this.#countrySelectorEl.setAttribute(\"dir\", \"rtl\");\n    }\n    if (countrySearch) {\n      this.#buildSearchUI();\n    }\n    this.#countryListEl = createEl(\n      \"ul\",\n      {\n        class: this.#withSlotClass(\"countryList\", \"iti__country-list\"),\n        id: `iti-${this.#id}__country-listbox`,\n        role: \"listbox\",\n        [ARIA.LABEL]: uiTranslations.countryListAriaLabel\n      },\n      this.#countrySelectorEl\n    );\n    this.#appendListItems();\n    if (countrySearch) {\n      this.#updateSearchResultsA11yText();\n    }\n    if (detachedParent) {\n      const wrapperClasses = buildClassNames({\n        iti: true,\n        \"iti--detached-country-selector\": true,\n        \"iti--fullscreen-popup\": isFullscreen,\n        \"iti--inline-country-selector\": !isFullscreen,\n        [containerClass]: Boolean(containerClass)\n      });\n      this.#detachedCountrySelectorEl = createEl(\"div\", {\n        class: this.#withSlotClass(\"countrySelectorContainer\", wrapperClasses)\n      });\n      this.#detachedCountrySelectorEl.appendChild(this.#countrySelectorEl);\n    } else {\n      this.#countryContainerEl.appendChild(this.#countrySelectorEl);\n    }\n  }\n  //* Resolve the DOM element to attach the country selector to. Fullscreen always uses document.body; dropdown uses the consumer-supplied dropdownParent (if any); otherwise the country selector renders inline within the input wrapper (no detached element).\n  #getDetachedParent() {\n    const { countrySelectorMode, dropdownParent } = this.#options;\n    if (countrySelectorMode === COUNTRY_SELECTOR_MODE.FULLSCREEN) {\n      return document.body;\n    }\n    if (countrySelectorMode === COUNTRY_SELECTOR_MODE.DROPDOWN) {\n      return dropdownParent;\n    }\n    return null;\n  }\n  #buildSearchUI() {\n    const { uiTranslations, searchInputClass } = this.#options;\n    const searchWrapper = createEl(\n      \"div\",\n      { class: this.#withSlotClass(\"searchWrapper\", \"iti__search-input-wrapper\") },\n      this.#countrySelectorEl\n    );\n    this.#searchIconEl = createEl(\n      \"span\",\n      {\n        class: this.#withSlotClass(\"searchIcon\", \"iti__search-icon\"),\n        [ARIA.HIDDEN]: \"true\"\n      },\n      searchWrapper\n    );\n    this.#searchIconEl.appendChild(buildSearchIcon());\n    this.#searchInputEl = createEl(\n      \"input\",\n      {\n        id: `iti-${this.#id}__search-input`,\n        // Chrome says inputs need either a name or an id\n        type: \"search\",\n        class: this.#withSlotClass(\n          \"searchInput\",\n          `iti__search-input ${searchInputClass}`\n        ),\n        placeholder: uiTranslations.searchPlaceholder,\n        // role=combobox + aria-autocomplete=list + aria-activedescendant allows maintaining focus on the search input while allowing users to navigate search results with up/down keyboard keys\n        role: \"combobox\",\n        [ARIA.EXPANDED]: \"true\",\n        [ARIA.LABEL]: uiTranslations.searchPlaceholder,\n        [ARIA.CONTROLS]: `iti-${this.#id}__country-listbox`,\n        [ARIA.AUTOCOMPLETE]: \"list\",\n        autocomplete: \"off\"\n      },\n      searchWrapper\n    );\n    this.#searchClearButtonEl = createEl(\n      \"button\",\n      {\n        type: \"button\",\n        class: this.#withSlotClass(\n          \"searchClear\",\n          `iti__search-clear ${CLASSES.HIDE}`\n        ),\n        [ARIA.LABEL]: uiTranslations.clearSearchAriaLabel,\n        tabindex: \"-1\"\n      },\n      searchWrapper\n    );\n    this.#searchClearButtonEl.appendChild(buildClearIcon(this.#id));\n    this.#searchResultsLiveRegionEl = createEl(\n      \"span\",\n      { class: \"iti__a11y-text\" },\n      this.#countrySelectorEl\n    );\n    this.#noResultsMessageEl = createEl(\n      \"div\",\n      {\n        class: this.#withSlotClass(\"noResults\", `iti__no-results ${CLASSES.HIDE}`),\n        [ARIA.HIDDEN]: \"true\"\n        // all a11y messaging happens in this.#searchResultsLiveRegionEl\n      },\n      this.#countrySelectorEl\n    );\n    this.#noResultsMessageEl.textContent = uiTranslations.searchEmptyState ?? null;\n  }\n  #updateInputPaddingAndReveal() {\n    if (!this.#countryContainerEl) {\n      return;\n    }\n    this.#updateInputPadding();\n    this.#countryContainerEl.classList.remove(CLASSES.V_HIDE);\n  }\n  #buildHiddenInputs(wrapper) {\n    const { hiddenInputs } = this.#options;\n    if (!hiddenInputs) {\n      return;\n    }\n    const telInputName = this.telInputEl.getAttribute(\"name\") || \"\";\n    const names = hiddenInputs(telInputName);\n    if (names.phone) {\n      const existingInput = this.telInputEl.form?.querySelector(\n        `input[name=\"${names.phone}\"]`\n      );\n      if (existingInput) {\n        this.#hiddenInputPhoneEl = existingInput;\n      } else {\n        this.#hiddenInputPhoneEl = createEl(\"input\", {\n          type: \"hidden\",\n          name: names.phone\n        });\n        wrapper.appendChild(this.#hiddenInputPhoneEl);\n      }\n    }\n    if (names.country) {\n      const existingInput = this.telInputEl.form?.querySelector(\n        `input[name=\"${names.country}\"]`\n      );\n      if (existingInput) {\n        this.#hiddenInputCountryEl = existingInput;\n      } else {\n        this.#hiddenInputCountryEl = createEl(\"input\", {\n          type: \"hidden\",\n          name: names.country\n        });\n        wrapper.appendChild(this.#hiddenInputCountryEl);\n      }\n    }\n  }\n  //* For each country: add a country list item <li> to the countryList <ul> container.\n  #appendListItems() {\n    const frag = document.createDocumentFragment();\n    const liClass = this.#withSlotClass(\"countryListItem\", CLASSES.COUNTRY_ITEM);\n    for (let i = 0; i < this.#countries.length; i++) {\n      const c = this.#countries[i];\n      const listItem = createEl(\"li\", {\n        id: `iti-${this.#id}__item-${c.iso2}`,\n        class: liClass,\n        tabindex: \"-1\",\n        role: \"option\",\n        [ARIA.SELECTED]: \"false\"\n      });\n      listItem.dataset[DATA_KEYS.DIAL_CODE] = c.dialCode;\n      listItem.dataset[DATA_KEYS.ISO2] = c.iso2;\n      this.#listItemByIso2.set(c.iso2, listItem);\n      if (this.#options.showFlags) {\n        createEl(\n          \"div\",\n          {\n            class: this.#withSlotClass(\n              \"countryListItemFlag\",\n              `${CLASSES.FLAG} iti__${c.iso2}`\n            )\n          },\n          listItem\n        );\n      }\n      const nameEl = createEl(\n        \"span\",\n        { class: this.#withSlotClass(\"countryName\", \"iti__country-name\") },\n        listItem\n      );\n      nameEl.textContent = `${c.name} `;\n      const dialEl = createEl(\n        \"span\",\n        { class: this.#withSlotClass(\"dialCode\", \"iti__dial-code\") },\n        nameEl\n      );\n      if (this.#isRTL) {\n        dialEl.setAttribute(\"dir\", \"ltr\");\n      }\n      dialEl.textContent = `(+${c.dialCode})`;\n      frag.appendChild(listItem);\n    }\n    this.#countryListEl.appendChild(frag);\n  }\n  //* Update the input padding to make space for (1) the selected country/globe, (2) the arrow, and (3) the separate dial code, all of which are optional, hence handling this in the JS rather than CSS.\n  #updateInputPadding() {\n    if (this.#selectedCountryEl) {\n      const fallbackWidth = this.#options.separateDialCode ? LAYOUT.FALLBACK_SELECTED_COUNTRY_WITH_DIAL_WIDTH : LAYOUT.FALLBACK_SELECTED_COUNTRY_NO_DIAL_WIDTH;\n      const selectedCountryWidth = this.#selectedCountryEl.offsetWidth || this.#getHiddenSelectedCountryWidth() || fallbackWidth;\n      const inputPadding = selectedCountryWidth + LAYOUT.INPUT_PADDING_EXTRA_LEFT;\n      this.telInputEl.style.paddingLeft = `${inputPadding}px`;\n    }\n  }\n  //* Keep the input padding in sync when the selected country's rendered width changes \u2014 e.g. responsive font-size shifts that change the dial code text width. Skip while hidden (offsetWidth === 0) so we don't waste work or clobber the padding using a fallback constant.\n  #observeSelectedCountryResize() {\n    if (!this.#selectedCountryEl || typeof ResizeObserver === \"undefined\") {\n      return;\n    }\n    this.#resizeObserver = new ResizeObserver(() => {\n      if (this.#selectedCountryEl?.offsetWidth) {\n        this.#updateInputPadding();\n      }\n    });\n    this.#resizeObserver.observe(this.#selectedCountryEl);\n  }\n  //* When input is in a hidden container during init, we cannot calculate the selected country width.\n  //* Fix: clone the markup, make it invisible, add it to the end of the DOM, and then measure it's width.\n  //* To get the right styling to apply, all we need is a shallow clone of the container,\n  //* and then to inject a deep clone of the selectedCountryEl element.\n  //* Measures in the LOCAL document.body: appending to the local body escapes any hidden ancestor container, and the input's own frame is where intl-tel-input's styles live (so the clone lays out correctly). We deliberately do NOT escape to window.top: that only measures correctly in the rare case where the top frame also loads the library's styles, and measures wrong when it doesn't (e.g. a same-origin iframe whose outer frame lacks the styles \u2014 cf. #2178). If the local frame itself isn't laid out yet (e.g. an iframe hidden during init), this returns 0 and the caller falls back to a sane constant; the ResizeObserver in #observeSelectedCountryResize then corrects the padding once the input becomes visible.\n  #getHiddenSelectedCountryWidth() {\n    if (!this.telInputEl.parentNode) {\n      return 0;\n    }\n    const body = document.body;\n    const containerClone = this.telInputEl.parentNode.cloneNode(\n      false\n    );\n    containerClone.style.visibility = \"hidden\";\n    body.appendChild(containerClone);\n    const countryContainerClone = this.#countryContainerEl.cloneNode();\n    containerClone.appendChild(countryContainerClone);\n    const selectedCountryClone = this.#selectedCountryEl.cloneNode(\n      true\n    );\n    countryContainerClone.appendChild(selectedCountryClone);\n    const width = selectedCountryClone.offsetWidth;\n    body.removeChild(containerClone);\n    return width;\n  }\n  //* Measure the inline dropdown size once, lazily, on first open \u2014 see #getHiddenInlineDropdownSize for why measuring forces a reflow. Memoised via #inlineDropdownHeight so subsequent opens are free.\n  //* Captured for two uses: (1) on open, decide whether to position the dropdown above or below the input; (2) when countrySearch is enabled, pin the dropdown height (and, when matchDropdownWidth is disabled, width) so it doesn't jump around as the country list is filtered.\n  #ensureInlineDropdownSizeMeasured() {\n    if (this.#inlineDropdownHeight !== void 0) {\n      return;\n    }\n    const { countrySearch, matchDropdownWidth } = this.#options;\n    const { height, width } = this.#getHiddenInlineDropdownSize();\n    this.#inlineDropdownHeight = height;\n    if (countrySearch) {\n      this.#countrySelectorEl.style.height = `${height}px`;\n      if (!matchDropdownWidth && width > 0) {\n        this.#countrySelectorEl.style.width = `${width}px`;\n      }\n    }\n  }\n  // Measure the dropdown by moving it into a temporary hidden container on the body (it needs the right ancestor classes to lay out correctly). Restores it to its original position afterwards \u2014 a no-op during init (when it is still detached) but required when called lazily on first open (when it is already inserted).\n  //* Deliberately measures in the LOCAL document.body (not window.top): this runs on first open, when the input's own frame is visibly rendered and styled. Escaping to the top frame breaks when the input is inside a same-origin iframe whose outer frame lacks intl-tel-input's styles (e.g. Storybook), as the dropdown would then be measured unstyled and come out far too tall (issue #2178).\n  #getHiddenInlineDropdownSize() {\n    const body = document.body;\n    const selectorEl = this.#countrySelectorEl;\n    const originalParent = selectorEl.parentNode;\n    const originalNextSibling = selectorEl.nextSibling;\n    selectorEl.classList.remove(CLASSES.HIDE);\n    const tempContainer = createEl(\"div\", {\n      class: \"iti iti--inline-country-selector\"\n    });\n    tempContainer.appendChild(selectorEl);\n    tempContainer.style.visibility = \"hidden\";\n    body.appendChild(tempContainer);\n    const height = selectorEl.offsetHeight;\n    const width = selectorEl.offsetWidth;\n    body.removeChild(tempContainer);\n    selectorEl.classList.add(CLASSES.HIDE);\n    if (originalParent) {\n      originalParent.insertBefore(selectorEl, originalNextSibling);\n    }\n    return {\n      height: height > 0 ? height : LAYOUT.FALLBACK_DROPDOWN_HEIGHT,\n      width\n    };\n  }\n  //* Update search results text (for a11y).\n  #updateSearchResultsA11yText() {\n    const { uiTranslations } = this.#options;\n    const count = this.#countryListEl.childElementCount;\n    this.#searchResultsLiveRegionEl.textContent = uiTranslations.searchSummaryAria(count);\n  }\n  //* Country search: Filter the countries according to the search query.\n  #filterCountriesByQuery(query) {\n    let matchedCountries;\n    if (query === \"\") {\n      matchedCountries = this.#countries;\n    } else {\n      const normalisedQuery = Numerals.toAscii(query);\n      matchedCountries = getMatchedCountries(\n        this.#countries,\n        this.#searchTokens,\n        normalisedQuery\n      );\n    }\n    this.#showFilteredCountries(matchedCountries);\n  }\n  //* Pre-fill the search input with \"+\" and show all countries\n  //* (used when user types \"+\" in the phone input to open the country selector).\n  //* Explicitly focus the search input (openCountrySelector skips this when\n  //* dropdownAlwaysOpen, but here we need focus to redirect subsequent keystrokes).\n  prefillSearchWithPlus() {\n    this.#searchInputEl.value = \"+\";\n    this.#searchInputEl.focus();\n    this.#filterCountriesByQuery(\"\");\n  }\n  // Search input handlers\n  #applySearchFilter() {\n    const inputQuery = this.#searchInputEl.value.trim();\n    this.#filterCountriesByQuery(inputQuery);\n    if (this.#searchInputEl.value) {\n      this.#searchClearButtonEl.classList.remove(CLASSES.HIDE);\n    } else {\n      this.#searchClearButtonEl.classList.add(CLASSES.HIDE);\n    }\n  }\n  #handleSearchChange() {\n    if (this.#searchDebounceTimer) {\n      clearTimeout(this.#searchDebounceTimer);\n    }\n    this.#searchDebounceTimer = setTimeout(() => {\n      this.#applySearchFilter();\n      this.#searchDebounceTimer = null;\n    }, TIMINGS.SEARCH_DEBOUNCE_MS);\n  }\n  #handleSearchClear() {\n    this.#searchInputEl.value = \"\";\n    this.#searchInputEl.focus();\n    this.#applySearchFilter();\n  }\n  //* Check if a country list item element is visible within it's container (the country list), else scroll until it is.\n  #scrollCountryListToItem(element) {\n    const container = this.#countryListEl;\n    const containerRect = container.getBoundingClientRect();\n    const elementRect = element.getBoundingClientRect();\n    const offsetTop = elementRect.top - containerRect.top + container.scrollTop;\n    if (elementRect.top < containerRect.top) {\n      container.scrollTop = offsetTop;\n    } else if (elementRect.bottom > containerRect.bottom) {\n      container.scrollTop = offsetTop - containerRect.height + elementRect.height;\n    }\n  }\n  //* Remove highlighting from the previous list item and highlight the new one.\n  #highlightListItem(listItem, doScroll = true) {\n    this.#highlightedListItemEl?.classList.remove(CLASSES.HIGHLIGHT);\n    if (listItem) {\n      listItem.classList.add(CLASSES.HIGHLIGHT);\n      if (this.#options.countrySearch) {\n        const activeDescendant = listItem.getAttribute(\"id\") || \"\";\n        this.#searchInputEl.setAttribute(\n          ARIA.ACTIVE_DESCENDANT,\n          activeDescendant\n        );\n      }\n      if (doScroll) {\n        this.#scrollCountryListToItem(listItem);\n      }\n      this.#highlightedListItemEl = listItem;\n    } else {\n      this.#highlightedListItemEl = null;\n    }\n  }\n  //* Bind a form-submit listener that syncs the hidden inputs with the current phone number\n  //* and country iso2. No-op if there are no hidden inputs or the input is not in a form.\n  bindHiddenInputSubmitListener(signal, getPhone, getCountryIso2) {\n    const form = this.telInputEl.form;\n    if (!form || !this.#hiddenInputPhoneEl && !this.#hiddenInputCountryEl) {\n      return;\n    }\n    form.addEventListener(\n      \"submit\",\n      () => {\n        if (this.#hiddenInputPhoneEl) {\n          this.#hiddenInputPhoneEl.value = getPhone();\n        }\n        if (this.#hiddenInputCountryEl) {\n          this.#hiddenInputCountryEl.value = getCountryIso2();\n        }\n      },\n      { signal }\n    );\n  }\n  //* Wire up triggers that open/close the country selector: label click (focus input or swallow repeat click),\n  //* selected-country click (open), and keydown on countryContainer (open on arrow/space/enter, close on tab).\n  bindAllInitialCountrySelectorListeners(signal, onOpen, onClose) {\n    const label = this.telInputEl.closest(\"label\");\n    if (label) {\n      label.addEventListener(\n        \"click\",\n        (e) => {\n          if (!this.isCountrySelectorOpen()) {\n            this.telInputEl.focus();\n          } else {\n            e.preventDefault();\n          }\n        },\n        { signal }\n      );\n    }\n    this.#selectedCountryEl.addEventListener(\n      \"click\",\n      () => {\n        if (!this.isCountrySelectorOpen() && !this.telInputEl.disabled && !this.telInputEl.readOnly) {\n          onOpen();\n        }\n      },\n      { signal }\n    );\n    this.#countryContainerEl.addEventListener(\n      \"keydown\",\n      (e) => {\n        const openKeys = [\n          KEYS.ARROW_UP,\n          KEYS.ARROW_DOWN,\n          KEYS.SPACE,\n          KEYS.ENTER\n        ];\n        if (!this.isCountrySelectorOpen() && openKeys.includes(e.key)) {\n          e.preventDefault();\n          e.stopPropagation();\n          onOpen();\n        }\n        if (e.key === KEYS.TAB) {\n          onClose();\n        }\n      },\n      { signal }\n    );\n  }\n  //* Open the country selector: create a fresh AbortController, do the DOM work, and wire up all\n  //* open-state listeners (which invoke the caller's onSelect / onClose callbacks).\n  openCountrySelector(onSelect, onClose) {\n    const { countrySearch, dropdownAlwaysOpen } = this.#options;\n    this.#countrySelectorAbortController = new AbortController();\n    if (this.#options.countrySelectorMode !== COUNTRY_SELECTOR_MODE.FULLSCREEN) {\n      this.#ensureInlineDropdownSizeMeasured();\n    }\n    this.ensureDropdownWidthSet();\n    if (this.#detachedCountrySelectorEl) {\n      this.#injectAndPositionDetachedCountrySelector();\n    } else {\n      const positionBelow = this.#shouldPositionDropdownBelowInput();\n      const distance = this.telInputEl.offsetHeight + LAYOUT.DROPDOWN_MARGIN;\n      if (positionBelow) {\n        this.#countrySelectorEl.style.top = `${distance}px`;\n      } else {\n        this.#countrySelectorEl.style.bottom = `${distance}px`;\n      }\n    }\n    this.#countrySelectorEl.classList.remove(CLASSES.HIDE);\n    this.#selectedCountryEl.setAttribute(ARIA.EXPANDED, \"true\");\n    const itemToHighlight = this.#selectedListItemEl ?? this.#countryListEl.firstElementChild;\n    if (itemToHighlight) {\n      this.#highlightListItem(itemToHighlight);\n    }\n    if (countrySearch && !dropdownAlwaysOpen) {\n      this.#searchInputEl.focus();\n    }\n    if (this.#options.countrySelectorMode === COUNTRY_SELECTOR_MODE.FULLSCREEN && this.#detachedCountrySelectorEl && window.visualViewport) {\n      window.visualViewport.addEventListener(\n        \"resize\",\n        () => {\n          this.#adjustFullscreenPopupToViewport();\n          if (this.#highlightedListItemEl) {\n            this.#scrollCountryListToItem(this.#highlightedListItemEl);\n          }\n        },\n        { signal: this.#countrySelectorAbortController.signal }\n      );\n    }\n    this.#arrowEl.classList.add(CLASSES.ARROW_UP);\n    this.#bindCountrySelectorOpenListeners(onSelect, onClose);\n  }\n  //* Wire up all listeners needed while the country selector is open: list-item hover (highlight),\n  //* list-item click & enter key (select), click-off & escape (close), search input (filter),\n  //* (when countrySearch disabled) typed-char hidden search, and (when the country selector is in an\n  //* external container) update (fixed) position on scroll/resize.\n  #bindCountrySelectorOpenListeners(onSelect, onClose) {\n    const signal = this.#countrySelectorAbortController.signal;\n    this.#bindListItemHover(signal);\n    this.#bindListItemClick(signal, onSelect);\n    if (!this.#options.dropdownAlwaysOpen) {\n      this.#bindOutsideClickToClose(signal, onClose);\n    }\n    this.#bindCountrySelectorKeydownListener(signal, onSelect, onClose);\n    if (this.#options.countrySearch) {\n      this.#bindSearchInputListener(signal);\n    }\n    if (this.#options.countrySelectorMode === COUNTRY_SELECTOR_MODE.DROPDOWN && this.#options.dropdownParent && !supportsCssAnchor) {\n      document.addEventListener(\"scroll\", onClose, { signal, capture: true, passive: true });\n    }\n  }\n  //* When mouse over a list item, just highlight that one (so if they hit \"enter\" we know which to select).\n  #bindListItemHover(signal) {\n    this.#countryListEl.addEventListener(\n      \"mouseover\",\n      (e) => {\n        const listItem = e.target?.closest(\n          `.${CLASSES.COUNTRY_ITEM}`\n        );\n        if (listItem) {\n          this.#highlightListItem(listItem, false);\n        }\n      },\n      { signal }\n    );\n  }\n  //* Delegate clicks on the country list to the caller's onSelect callback, passing the clicked list item.\n  #bindListItemClick(signal, onSelect) {\n    this.#countryListEl.addEventListener(\n      \"click\",\n      (e) => {\n        const listItem = e.target?.closest(\n          `.${CLASSES.COUNTRY_ITEM}`\n        );\n        if (listItem) {\n          onSelect(listItem);\n        }\n      },\n      { signal }\n    );\n  }\n  //* Invoke onClickOff when the user clicks anywhere outside the country selector.\n  #bindOutsideClickToClose(signal, onClickOff) {\n    setTimeout(() => {\n      document.documentElement.addEventListener(\n        \"click\",\n        (e) => {\n          if (!this.#countrySelectorEl.contains(e.target)) {\n            onClickOff();\n          }\n        },\n        { signal }\n      );\n    }, 0);\n  }\n  //* Keyboard navigation while the country selector is open: arrow keys navigate, hidden-search keys filter,\n  //* and enter/escape invoke the caller's callbacks (which handle country selection / close).\n  //* Uses keydown rather than keypress so non-char keys (arrow, esc) fire and so holding a key repeats.\n  #bindCountrySelectorKeydownListener(signal, onEnter, onEscape) {\n    let query = \"\";\n    let queryTimer = null;\n    const handleKeydown = (e) => {\n      const allowedKeys = [\n        KEYS.ARROW_UP,\n        KEYS.ARROW_DOWN,\n        KEYS.ENTER,\n        KEYS.ESC\n      ];\n      if (allowedKeys.includes(e.key)) {\n        e.preventDefault();\n        e.stopPropagation();\n        if (e.key === KEYS.ARROW_UP || e.key === KEYS.ARROW_DOWN) {\n          this.#handleUpDownKey(e.key);\n        } else if (e.key === KEYS.ENTER && !e.isComposing) {\n          onEnter(this.#highlightedListItemEl);\n        } else if (e.key === KEYS.ESC) {\n          onEscape();\n          this.#selectedCountryEl.focus();\n        }\n      }\n      if (!this.#options.countrySearch && REGEX.HIDDEN_SEARCH_CHAR.test(e.key)) {\n        e.stopPropagation();\n        if (queryTimer) {\n          clearTimeout(queryTimer);\n        }\n        query += e.key.toLowerCase();\n        this.#searchForCountry(query);\n        queryTimer = setTimeout(() => {\n          query = \"\";\n        }, TIMINGS.HIDDEN_SEARCH_RESET_MS);\n      }\n    };\n    this.#selectedCountryEl?.addEventListener(\"keydown\", handleKeydown, { signal });\n    this.#countrySelectorEl?.addEventListener(\"keydown\", handleKeydown, { signal });\n  }\n  //* Wire up country search input listener: typing filters the list, the clear button resets it.\n  #bindSearchInputListener(signal) {\n    this.#searchInputEl.addEventListener(\n      \"input\",\n      () => this.#handleSearchChange(),\n      { signal }\n    );\n    this.#searchClearButtonEl.addEventListener(\n      \"click\",\n      () => this.#handleSearchClear(),\n      { signal }\n    );\n  }\n  //* Hidden search (countrySearch disabled): jump to the first list item whose name starts with the query.\n  #searchForCountry(query) {\n    const match = findFirstCountryStartingWith(\n      this.#countries,\n      this.#searchTokens,\n      query\n    );\n    if (match) {\n      const listItem = this.#listItemByIso2.get(match.iso2);\n      this.#highlightListItem(listItem);\n    }\n  }\n  //* Highlight the next/prev item in the list (and ensure it is visible).\n  #handleUpDownKey(key) {\n    let next = key === KEYS.ARROW_UP ? this.#highlightedListItemEl?.previousElementSibling : this.#highlightedListItemEl?.nextElementSibling;\n    if (!next && this.#countryListEl.childElementCount > 1) {\n      next = key === KEYS.ARROW_UP ? this.#countryListEl.lastElementChild : this.#countryListEl.firstElementChild;\n    }\n    if (next) {\n      this.#highlightListItem(next);\n    }\n  }\n  // Update the selected list item in the country list\n  #updateSelectedListItem(iso2) {\n    if (this.#selectedListItemEl && this.#selectedListItemEl.dataset[DATA_KEYS.ISO2] !== iso2) {\n      this.#selectedListItemEl.setAttribute(ARIA.SELECTED, \"false\");\n      this.#selectedListItemEl.querySelector(\".iti__country-check\")?.remove();\n      this.#selectedListItemEl = null;\n    }\n    if (iso2 && !this.#selectedListItemEl) {\n      const newListItem = this.#countryListEl.querySelector(\n        `[data-iso2=\"${iso2}\"]`\n      );\n      if (newListItem) {\n        newListItem.setAttribute(ARIA.SELECTED, \"true\");\n        const checkIcon = createEl(\n          \"span\",\n          {\n            class: this.#withSlotClass(\"countryCheck\", \"iti__country-check\"),\n            [ARIA.HIDDEN]: \"true\"\n          },\n          newListItem\n        );\n        checkIcon.appendChild(buildCheckIcon());\n        this.#selectedListItemEl = newListItem;\n        if (this.#options.dropdownAlwaysOpen) {\n          this.#highlightListItem(newListItem);\n        }\n      }\n    }\n  }\n  //* Country search: Filter the country list to the given array of countries.\n  #showFilteredCountries(matchedCountries) {\n    this.#countryListEl.replaceChildren();\n    let noCountriesAddedYet = true;\n    for (const c of matchedCountries) {\n      const listItem = this.#listItemByIso2.get(c.iso2);\n      if (listItem) {\n        this.#countryListEl.appendChild(listItem);\n        if (noCountriesAddedYet) {\n          this.#highlightListItem(listItem, false);\n          noCountriesAddedYet = false;\n        }\n      }\n    }\n    if (noCountriesAddedYet) {\n      this.#highlightListItem(null);\n      if (this.#noResultsMessageEl) {\n        this.#noResultsMessageEl.classList.remove(CLASSES.HIDE);\n      }\n    } else if (this.#noResultsMessageEl) {\n      this.#noResultsMessageEl.classList.add(CLASSES.HIDE);\n    }\n    this.#countryListEl.scrollTop = 0;\n    this.#updateSearchResultsA11yText();\n  }\n  // UI: Close the country selector (DOM + abort scoped listeners).\n  closeCountrySelector() {\n    const { countrySearch } = this.#options;\n    this.#countrySelectorAbortController.abort();\n    this.#countrySelectorAbortController = null;\n    this.#countrySelectorEl.classList.add(CLASSES.HIDE);\n    this.#selectedCountryEl.setAttribute(ARIA.EXPANDED, \"false\");\n    if (countrySearch) {\n      this.#searchInputEl.removeAttribute(ARIA.ACTIVE_DESCENDANT);\n      this.#searchInputEl.value = \"\";\n      this.#applySearchFilter();\n      if (this.#highlightedListItemEl) {\n        this.#highlightedListItemEl.classList.remove(CLASSES.HIGHLIGHT);\n        this.#highlightedListItemEl = null;\n      }\n    }\n    this.#arrowEl.classList.remove(CLASSES.ARROW_UP);\n    if (this.#detachedCountrySelectorEl) {\n      this.#detachedCountrySelectorEl.remove();\n      this.#detachedCountrySelectorEl.style.top = \"\";\n      this.#detachedCountrySelectorEl.style.bottom = \"\";\n      this.#detachedCountrySelectorEl.style.paddingLeft = \"\";\n      this.#detachedCountrySelectorEl.style.paddingRight = \"\";\n    } else {\n      this.#countrySelectorEl.style.top = \"\";\n      this.#countrySelectorEl.style.bottom = \"\";\n    }\n  }\n  #shouldPositionDropdownBelowInput() {\n    if (this.#options.dropdownAlwaysOpen) {\n      return true;\n    }\n    const inputPos = this.telInputEl.getBoundingClientRect();\n    const spaceAbove = inputPos.top;\n    const spaceBelow = window.innerHeight - inputPos.bottom;\n    return spaceBelow >= this.#inlineDropdownHeight || spaceBelow >= spaceAbove;\n  }\n  // inject the country selector into its detached wrapper and apply positioning styles\n  #injectAndPositionDetachedCountrySelector() {\n    const isFullscreen = this.#options.countrySelectorMode === COUNTRY_SELECTOR_MODE.FULLSCREEN;\n    const detachedParent = this.#getDetachedParent();\n    if (isFullscreen) {\n      if (window.innerWidth >= LAYOUT.NARROW_VIEWPORT_WIDTH) {\n        const inputPos = this.telInputEl.getBoundingClientRect();\n        this.#detachedCountrySelectorEl.style.paddingLeft = `${inputPos.left}px`;\n        this.#detachedCountrySelectorEl.style.paddingRight = `${window.innerWidth - inputPos.right}px`;\n      }\n    } else {\n      this.#setupCssAnchorPositioning();\n    }\n    if (!isFullscreen && !supportsCssAnchor) {\n      const inputPos = this.telInputEl.getBoundingClientRect();\n      this.#detachedCountrySelectorEl.style.left = `${inputPos.left}px`;\n      if (this.#shouldPositionDropdownBelowInput()) {\n        this.#detachedCountrySelectorEl.style.top = `${inputPos.bottom + LAYOUT.DROPDOWN_MARGIN}px`;\n      } else {\n        this.#detachedCountrySelectorEl.style.top = \"unset\";\n        this.#detachedCountrySelectorEl.style.bottom = `${window.innerHeight - inputPos.top + LAYOUT.DROPDOWN_MARGIN}px`;\n      }\n    }\n    detachedParent.appendChild(this.#detachedCountrySelectorEl);\n  }\n  //* Wire up CSS Anchor Positioning between the input and the detached country selector using a\n  //* unique anchor name per instance. Called lazily on first open (memoised) \u2014 the matching styles in\n  //* intlTelInput.css only take effect in browsers that support anchor(); elsewhere these\n  //* properties are inert. We append our name to any existing anchor-name (read via\n  //* getComputedStyle so we pick up CSS-defined values), so consumer-set anchors on the input\n  //* are preserved. Caveat: this snapshots the consumer's value once \u2014 if they later change\n  //* anchor-name via CSS (e.g. a class swap), our inline write will shadow the change.\n  #setupCssAnchorPositioning() {\n    if (this.#cssAnchorPositioningDone) {\n      return;\n    }\n    this.#cssAnchorPositioningDone = true;\n    const anchorName = `--iti-anchor-${this.#id}`;\n    const existing = getComputedStyle(this.telInputEl).anchorName;\n    this.telInputEl.style.anchorName = existing && existing !== \"none\" ? `${existing}, ${anchorName}` : anchorName;\n    this.#detachedCountrySelectorEl.style.positionAnchor = anchorName;\n  }\n  // Adjust the fullscreen popup dimensions to match the visual viewport,\n  // so it stays above the virtual keyboard on mobile devices.\n  #adjustFullscreenPopupToViewport() {\n    const vv = window.visualViewport;\n    if (!vv || !this.#detachedCountrySelectorEl) {\n      return;\n    }\n    const virtualKeyboardHeight = window.innerHeight - vv.height;\n    this.#detachedCountrySelectorEl.style.bottom = `${virtualKeyboardHeight}px`;\n  }\n  // UI: Whether the country selector is currently open (visible).\n  isCountrySelectorOpen() {\n    return !this.#countrySelectorEl.classList.contains(CLASSES.HIDE);\n  }\n  // Toggle the loading spinner on the selected flag (used during auto-country geoIP lookup).\n  setLoading(isLoading) {\n    this.#selectedFlagEl.classList.toggle(CLASSES.LOADING, isLoading);\n  }\n  //* Play the strict-reject animation (shake, or background-colour flash under prefers-reduced-motion) on the wrapper.\n  //* Called when strictMode rejects the whole input (keystroke, or whole paste).\n  //* Uses the wrapper (not the input) so any separateDialCode / country button move together with the input.\n  playStrictRejectAnimation() {\n    if (!this.#options.strictRejectAnimation) {\n      return;\n    }\n    const wrapperEl = this.telInputEl.parentElement;\n    if (!wrapperEl) {\n      return;\n    }\n    wrapperEl.classList.remove(CLASSES.STRICT_REJECT_ANIMATION);\n    void wrapperEl.offsetWidth;\n    wrapperEl.classList.add(CLASSES.STRICT_REJECT_ANIMATION);\n    wrapperEl.addEventListener(\n      \"animationend\",\n      () => wrapperEl.classList.remove(CLASSES.STRICT_REJECT_ANIMATION),\n      { once: true }\n    );\n  }\n  isLoading() {\n    return this.#selectedFlagEl.classList.contains(CLASSES.LOADING);\n  }\n  // Set the disabled state of the input and country selector.\n  setDisabled(disabled) {\n    this.telInputEl.disabled = disabled;\n    if (this.#selectedCountryEl) {\n      if (disabled) {\n        this.#selectedCountryEl.setAttribute(\"disabled\", \"true\");\n      } else {\n        this.#selectedCountryEl.removeAttribute(\"disabled\");\n      }\n    }\n  }\n  // Set the readonly state of the input and country selector.\n  setReadonly(readonly) {\n    this.telInputEl.readOnly = readonly;\n    if (this.#selectedCountryEl) {\n      if (readonly) {\n        this.#selectedCountryEl.setAttribute(\"disabled\", \"true\");\n      } else {\n        this.#selectedCountryEl.removeAttribute(\"disabled\");\n      }\n    }\n  }\n  setSelectedCountry(selectedCountry) {\n    const { countrySelectorMode, showFlags, separateDialCode, uiTranslations } = this.#options;\n    const name = selectedCountry?.name;\n    const dialCode = selectedCountry?.dialCode;\n    const iso2 = selectedCountry?.iso2 ?? \"\";\n    if (countrySelectorMode !== COUNTRY_SELECTOR_MODE.OFF) {\n      this.#updateSelectedListItem(iso2);\n    }\n    if (this.#selectedCountryEl) {\n      const flagClass = this.#withSlotClass(\n        \"selectedFlag\",\n        iso2 && showFlags ? `${CLASSES.FLAG} iti__${iso2}` : `${CLASSES.FLAG} ${CLASSES.GLOBE}`\n      );\n      let ariaLabel, title;\n      let flagContent = null;\n      if (iso2) {\n        title = name;\n        ariaLabel = uiTranslations.selectedCountryAriaLabel.replace(\"${countryName}\", name).replace(\"${dialCode}\", `+${dialCode}`);\n        if (!showFlags) {\n          flagContent = buildGlobeIcon();\n        }\n      } else {\n        title = uiTranslations.noCountrySelected;\n        ariaLabel = uiTranslations.noCountrySelected;\n        flagContent = buildGlobeIcon();\n      }\n      this.#selectedFlagEl.className = flagClass;\n      this.#selectedCountryEl.setAttribute(\"title\", title);\n      this.#selectedCountryEl.setAttribute(ARIA.LABEL, ariaLabel);\n      if (flagContent) {\n        this.#selectedFlagEl.replaceChildren(flagContent);\n      } else {\n        this.#selectedFlagEl.replaceChildren();\n      }\n    }\n    if (separateDialCode) {\n      const fullDialCode = dialCode ? `+${dialCode}` : \"\";\n      this.#selectedDialCodeEl.textContent = fullDialCode;\n      this.#updateInputPadding();\n    }\n  }\n  destroy() {\n    this.telInputEl.iti = void 0;\n    delete this.telInputEl.dataset[DATA_KEYS.INSTANCE_ID];\n    this.#resizeObserver?.disconnect();\n    this.telInputEl.style.paddingLeft = this.#originalPaddingLeft;\n    const wrapper = this.telInputEl.parentNode;\n    if (wrapper) {\n      wrapper.before(this.telInputEl);\n      wrapper.remove();\n    }\n    this.#listItemByIso2.clear();\n  }\n};\n\n// packages/core/src/js/data/country-data.ts\nvar processAllCountries = (options) => {\n  const { onlyCountries, excludeCountries } = options;\n  if (onlyCountries?.length) {\n    return data_default.filter(\n      (country) => onlyCountries.includes(country.iso2)\n    );\n  } else if (excludeCountries?.length) {\n    return data_default.filter(\n      (country) => !excludeCountries.includes(country.iso2)\n    );\n  }\n  return [...data_default];\n};\nvar generateCountryNames = (countries, options) => {\n  const { countryNameLocale, countryNameOverrides, uiTranslations } = options;\n  const bundledCountryNames = uiTranslations?.countryNames;\n  let displayNames;\n  try {\n    const hasDisplayNames = typeof Intl !== \"undefined\" && typeof Intl.DisplayNames === \"function\";\n    if (hasDisplayNames) {\n      displayNames = new Intl.DisplayNames(countryNameLocale, {\n        type: \"region\"\n      });\n    } else {\n      displayNames = null;\n    }\n  } catch (e) {\n    console.error(e);\n    displayNames = null;\n  }\n  for (const c of countries) {\n    c.name = countryNameOverrides[c.iso2] || bundledCountryNames?.[c.iso2] || displayNames?.of(c.iso2.toUpperCase()) || \"\";\n  }\n};\nvar processDialCodes = (countries) => {\n  const dialCodes = /* @__PURE__ */ new Set();\n  let dialCodeMaxLength = 0;\n  const dialCodeToIso2Map = {};\n  const addToDialCodeMap = (iso2, dialCode) => {\n    if (!iso2 || !dialCode) {\n      return;\n    }\n    if (dialCode.length > dialCodeMaxLength) {\n      dialCodeMaxLength = dialCode.length;\n    }\n    if (!Object.hasOwn(dialCodeToIso2Map, dialCode)) {\n      dialCodeToIso2Map[dialCode] = [];\n    }\n    const iso2List = dialCodeToIso2Map[dialCode];\n    if (iso2List.includes(iso2)) {\n      return;\n    }\n    iso2List.push(iso2);\n  };\n  const countriesSortedByPriority = [...countries].sort(\n    (a, b) => a.priority - b.priority\n  );\n  for (const c of countriesSortedByPriority) {\n    if (!dialCodes.has(c.dialCode)) {\n      dialCodes.add(c.dialCode);\n    }\n    for (let k = 1; k < c.dialCode.length; k++) {\n      const partialDialCode = c.dialCode.substring(0, k);\n      addToDialCodeMap(c.iso2, partialDialCode);\n    }\n    addToDialCodeMap(c.iso2, c.dialCode);\n    if (c.areaCodes) {\n      const rootIso2Code = dialCodeToIso2Map[c.dialCode][0];\n      for (const areaCode of c.areaCodes) {\n        for (let k = 1; k < areaCode.length; k++) {\n          const partialAreaCode = areaCode.substring(0, k);\n          const partialDialCode = c.dialCode + partialAreaCode;\n          addToDialCodeMap(rootIso2Code, partialDialCode);\n          addToDialCodeMap(c.iso2, partialDialCode);\n        }\n        addToDialCodeMap(c.iso2, c.dialCode + areaCode);\n      }\n    }\n  }\n  return { dialCodes, dialCodeMaxLength, dialCodeToIso2Map };\n};\nvar sortCountries = (countries, options) => {\n  const { countryOrder } = options;\n  countries.sort((a, b) => {\n    if (countryOrder) {\n      const aIndex = countryOrder.indexOf(a.iso2);\n      const bIndex = countryOrder.indexOf(b.iso2);\n      const aIndexExists = aIndex > -1;\n      const bIndexExists = bIndex > -1;\n      if (aIndexExists || bIndexExists) {\n        if (aIndexExists && bIndexExists) {\n          return aIndex - bIndex;\n        }\n        return aIndexExists ? -1 : 1;\n      }\n    }\n    return a.name.localeCompare(b.name);\n  });\n};\n\n// packages/core/src/js/data/intl-regionless.ts\nvar regionlessDialCodes = /* @__PURE__ */ new Set([\n  \"800\",\n  \"808\",\n  \"870\",\n  \"881\",\n  \"882\",\n  \"883\",\n  \"888\",\n  \"979\"\n]);\nvar hasRegionlessDialCode = (number) => {\n  const dialCode = getNumeric(number).slice(0, 3);\n  return number.startsWith(\"+\") && regionlessDialCodes.has(dialCode);\n};\n\n// packages/core/src/js/format/formatting.ts\nvar stripSeparateDialCode = (fullNumber, hasValidDialCode, separateDialCode, selectedCountry) => {\n  if (!separateDialCode || !hasValidDialCode) {\n    return fullNumber;\n  }\n  const dialCode = `+${selectedCountry.dialCode}`;\n  const start = fullNumber[dialCode.length] === \" \" || fullNumber[dialCode.length] === \"-\" ? dialCode.length + 1 : dialCode.length;\n  return fullNumber.substring(start);\n};\nvar formatNumberAsYouType = (fullNumber, telInputValue, utils, selectedCountry, separateDialCode) => {\n  const result = utils ? utils.formatNumberAsYouType(fullNumber, selectedCountry?.iso2) : fullNumber;\n  const dialCode = selectedCountry?.dialCode;\n  if (separateDialCode && telInputValue.charAt(0) !== \"+\" && result.includes(`+${dialCode}`)) {\n    const afterDialCode = result.split(`+${dialCode}`)[1] || \"\";\n    return afterDialCode.trim();\n  }\n  return result;\n};\n\n// packages/core/src/js/format/caret.ts\nvar computeNewCaretPosition = (relevantChars, formattedValue, prevCaretPos, isDeleteForwards) => {\n  if (prevCaretPos === 0 && !isDeleteForwards) {\n    return 0;\n  }\n  let relevantCharCount = 0;\n  for (let i = 0; i < formattedValue.length; i++) {\n    if (/[+0-9]/.test(formattedValue[i])) {\n      relevantCharCount++;\n    }\n    if (relevantCharCount === relevantChars && !isDeleteForwards) {\n      return i + 1;\n    }\n    if (isDeleteForwards && relevantCharCount === relevantChars + 1) {\n      return i;\n    }\n  }\n  return formattedValue.length;\n};\n\n// packages/core/src/js/data/nanp-regionless.ts\nvar regionlessNanpAreaCodes = /* @__PURE__ */ new Set([\n  \"800\",\n  \"822\",\n  \"833\",\n  \"844\",\n  \"855\",\n  \"866\",\n  \"877\",\n  \"880\",\n  \"881\",\n  \"882\",\n  \"883\",\n  \"884\",\n  \"885\",\n  \"886\",\n  \"887\",\n  \"888\",\n  \"889\"\n]);\nvar isRegionlessNanp = (number) => {\n  const numeric = getNumeric(number);\n  if (numeric.startsWith(DIAL_CODE.NANP) && numeric.length >= 4) {\n    const areaCode = numeric.substring(1, 4);\n    return regionlessNanpAreaCodes.has(areaCode);\n  }\n  return false;\n};\n\n// packages/core/src/js/intlTelInput.ts\nvar nextId = 0;\nvar ensureUtils = (methodName) => {\n  if (!intlTelInput.utils) {\n    throw new Error(\n      `intlTelInput.utils is required for ${methodName}(). See: https://intl-tel-input.com/docs/utils`\n    );\n  }\n};\nvar createDeferred = () => {\n  let resolve;\n  let reject;\n  const promise = new Promise((res, rej) => {\n    resolve = res;\n    reject = rej;\n  });\n  return { promise, resolve, reject };\n};\nvar Iti = class _Iti {\n  //* PUBLIC FIELDS - READONLY\n  //* Can't be private as it's called from intlTelInput convenience wrapper.\n  id;\n  // accessed externally via iti.promise.then(...)\n  promise;\n  //* PRIVATE FIELDS\n  #ui;\n  #options;\n  #isAndroid;\n  // country data\n  #countries;\n  #dialCodeMaxLength;\n  #dialCodeToIso2Map;\n  #dialCodes;\n  #countryByIso2;\n  #searchTokens;\n  #selectedCountry = null;\n  #maxCoreNumberLength = null;\n  #fallbackCountryIso2;\n  // is this instance still active (not destroyed)\n  #isActive = true;\n  #abortController;\n  #numerals;\n  //* Tracks whether the user has typed/pasted their own formatting chars, so AYT-formatting should back off.\n  #userOverrideFormatting = false;\n  #strictPasteSnapshot = null;\n  #autoCountryDeferred;\n  #utilsDeferred;\n  constructor(input, customOptions = {}) {\n    this.id = nextId++;\n    UI.validateInput(input);\n    const validatedOptions = validateOptions(customOptions);\n    this.#options = { ...defaults, ...validatedOptions };\n    normaliseOptions(this.#options);\n    applyOptionSideEffects(this.#options);\n    this.#ui = new UI(input, this.#options, this.id);\n    this.#isAndroid = typeof navigator !== \"undefined\" && /Android/i.test(navigator.userAgent);\n    this.#numerals = new Numerals(input.value);\n    this.promise = this.#createInitPromise(this.#options);\n    this.#countries = processAllCountries(this.#options);\n    const { dialCodes, dialCodeMaxLength, dialCodeToIso2Map } = processDialCodes(this.#countries);\n    this.#dialCodes = dialCodes;\n    this.#dialCodeMaxLength = dialCodeMaxLength;\n    this.#dialCodeToIso2Map = dialCodeToIso2Map;\n    this.#countryByIso2 = new Map(this.#countries.map((c) => [c.iso2, c]));\n    this.#init();\n  }\n  #getTelInputValue() {\n    const inputValue = this.#ui.telInputEl.value.trim();\n    return this.#numerals.normalise(inputValue);\n  }\n  #setTelInputValue(asciiValue) {\n    this.#ui.telInputEl.value = this.#numerals.denormalise(asciiValue);\n  }\n  #createInitPromise(options) {\n    const { initialCountry, initialCountryLookup, loadUtils } = options;\n    const needsAutoCountryDeferred = !initialCountry && Boolean(initialCountryLookup);\n    const needsUtilsDeferred = Boolean(loadUtils) && !intlTelInput.utils;\n    if (needsAutoCountryDeferred) {\n      this.#autoCountryDeferred = createDeferred();\n    }\n    if (needsUtilsDeferred) {\n      this.#utilsDeferred = createDeferred();\n    }\n    return Promise.all([\n      this.#autoCountryDeferred?.promise,\n      this.#utilsDeferred?.promise\n    ]).then(() => {\n    });\n  }\n  #init() {\n    this.#abortController = new AbortController();\n    this.#processCountryData();\n    this.#ui.buildMarkup(this.#countries, this.#searchTokens);\n    this.#setInitialState();\n    this.#initListeners();\n    this.#startAsyncLoads();\n    if (this.#options.dropdownAlwaysOpen) {\n      this.openCountrySelector();\n    }\n  }\n  //********************\n  //*  PRIVATE METHODS\n  //********************\n  //* Prepare all of the country data, including onlyCountries, excludeCountries, countryOrder options.\n  #processCountryData() {\n    generateCountryNames(this.#countries, this.#options);\n    sortCountries(this.#countries, this.#options);\n    this.#searchTokens = buildSearchTokens(this.#countries);\n  }\n  //* Set the initial state of the input value and the selected country by:\n  //* 1. Extracting a dial code from the given number\n  //* 2. Using explicit initialCountry\n  #setInitialState(overrideAutoCountry = false) {\n    const attributeValueRaw = this.#ui.telInputEl.getAttribute(\"value\");\n    const attributeValue = this.#numerals.normalise(attributeValueRaw ?? \"\");\n    const inputValue = this.#getTelInputValue();\n    const useAttribute = attributeValue && attributeValue.startsWith(\"+\") && (!inputValue || !inputValue.startsWith(\"+\"));\n    const value = useAttribute ? attributeValue : inputValue;\n    const dialCode = this.#getDialCode(value);\n    const isRegionlessNanpNumber = isRegionlessNanp(value);\n    const { initialCountry, initialCountryLookup } = this.#options;\n    const isAutoCountry = !initialCountry && Boolean(initialCountryLookup);\n    const resolvedInitialCountry = isAutoCountry && intlTelInput.autoCountry ? intlTelInput.autoCountry : initialCountry;\n    const doingAutoCountryLookup = isAutoCountry && !overrideAutoCountry && !intlTelInput.autoCountry;\n    const isValidInitialCountry = isIso2(resolvedInitialCountry);\n    if (dialCode) {\n      if (isRegionlessNanpNumber) {\n        if (isValidInitialCountry) {\n          this.#updateSelectedCountry(resolvedInitialCountry);\n        } else if (!doingAutoCountryLookup) {\n          this.#updateSelectedCountry(US.ISO2);\n        }\n      } else {\n        if (isValidInitialCountry) {\n          this.#updateSelectedCountry(resolvedInitialCountry);\n        }\n        this.#updateCountryFromNumber(value);\n      }\n    } else if (isValidInitialCountry) {\n      this.#updateSelectedCountry(resolvedInitialCountry);\n    } else if (!doingAutoCountryLookup) {\n      this.#updateSelectedCountry(\"\");\n    }\n    if (value) {\n      this.#updateValueFromNumber(value);\n    }\n  }\n  //* Initialise the main event listeners: input keyup, and click selected country.\n  #initListeners() {\n    this.#bindAllTelInputListeners();\n    if (this.#options.countrySelectorMode !== COUNTRY_SELECTOR_MODE.OFF) {\n      this.#ui.bindAllInitialCountrySelectorListeners(\n        this.#abortController.signal,\n        () => this.openCountrySelector(),\n        () => this.#closeCountrySelectorInternal()\n      );\n    }\n    this.#ui.bindHiddenInputSubmitListener(\n      this.#abortController.signal,\n      () => this.getNumber(),\n      () => this.#selectedCountry?.iso2 || \"\"\n    );\n  }\n  //* Init requests: utils script / initial country lookup.\n  #startAsyncLoads() {\n    if (this.#utilsDeferred) {\n      const { loadUtils } = this.#options;\n      const doAttachUtils = () => {\n        intlTelInput.attachUtils(loadUtils).catch(() => {\n        });\n      };\n      if (intlTelInput.documentReady()) {\n        doAttachUtils();\n      } else {\n        window.addEventListener(\"load\", doAttachUtils, {\n          signal: this.#abortController.signal\n        });\n      }\n    }\n    if (this.#autoCountryDeferred) {\n      if (this.#selectedCountry) {\n        this.#autoCountryDeferred.resolve();\n      } else {\n        this.#loadAutoCountry();\n      }\n    }\n  }\n  //* Perform the initial country lookup.\n  async #loadAutoCountry() {\n    if (intlTelInput.autoCountry) {\n      this.#handleAutoCountryLoaded();\n      return;\n    }\n    this.#ui.setLoading(true);\n    if (intlTelInput.startedLoadingAutoCountry) {\n      return;\n    }\n    intlTelInput.startedLoadingAutoCountry = true;\n    if (typeof this.#options.initialCountryLookup === \"function\") {\n      let timeoutId;\n      try {\n        const iso2 = await Promise.race([\n          this.#options.initialCountryLookup(),\n          new Promise((_, reject) => {\n            timeoutId = setTimeout(\n              () => reject(new Error(\"intl-tel-input: initialCountryLookup timed out after 10s\")),\n              1e4\n            );\n          })\n        ]);\n        const iso2Lower = typeof iso2 === \"string\" ? iso2.toLowerCase() : \"\";\n        if (!isIso2(iso2Lower)) {\n          intlTelInput.startedLoadingAutoCountry = false;\n          _Iti.forEachInstance(\"handleAutoCountryFailure\");\n          return;\n        }\n        intlTelInput.autoCountry = iso2Lower;\n        setTimeout(() => _Iti.forEachInstance(\"handleAutoCountryLoaded\"));\n      } catch {\n        intlTelInput.startedLoadingAutoCountry = false;\n        _Iti.forEachInstance(\"handleAutoCountryFailure\");\n      } finally {\n        if (timeoutId !== void 0) {\n          clearTimeout(timeoutId);\n        }\n      }\n    }\n  }\n  #openCountrySelectorWithPlus() {\n    this.openCountrySelector();\n    this.#ui.prefillSearchWithPlus();\n  }\n  //* Delete the character just typed (the one immediately before the caret). Used by Android workarounds where we can't preventDefault on keydown.\n  #removeJustTypedChar(inputValue) {\n    const currentCaretPos = this.#ui.telInputEl.selectionStart || 0;\n    const valueBeforeCaret = inputValue.substring(0, currentCaretPos - 1);\n    const valueAfterCaret = inputValue.substring(currentCaretPos);\n    this.#setTelInputValue(valueBeforeCaret + valueAfterCaret);\n    return currentCaretPos - 1;\n  }\n  //* Initialize the tel input listeners.\n  #bindAllTelInputListeners() {\n    this.#bindInputListener();\n    this.#bindKeydownListener();\n    this.#bindStrictPasteListener();\n  }\n  //* Android workaround for handling plus when separateDialCode enabled (as impossible to handle with keydown/keyup, for which e.key always returns \"Unidentified\", see https://stackoverflow.com/q/59584061/217866)\n  #handleAndroidPlusKey(inputValue) {\n    this.#removeJustTypedChar(inputValue);\n    this.#openCountrySelectorWithPlus();\n  }\n  //* Android strictMode workaround: the keydown-based filter can't block these because e.key is \"Unidentified\" on Android virtual keyboards, so strip them here on input.\n  #handleAndroidStrictReject(inputValue, rejectedInput) {\n    const newCaretPos = this.#removeJustTypedChar(inputValue);\n    this.#ui.telInputEl.setSelectionRange(newCaretPos, newCaretPos);\n    this.#ui.playStrictRejectAnimation();\n    this.#dispatchEvent(EVENTS.STRICT_REJECT, {\n      source: \"key\",\n      rejectedInput,\n      reason: \"invalid\"\n    });\n  }\n  //* Format the input value using libphonenumber's AYT formatter, preserving caret position (called after an input event).\n  #formatAsYouType(inputValue, isDeleteForwards) {\n    const currentCaretPos = this.#ui.telInputEl.selectionStart || 0;\n    const valueBeforeCaret = inputValue.substring(0, currentCaretPos);\n    const relevantCharsBeforeCaret = valueBeforeCaret.replace(\n      REGEX.NON_PLUS_NUMERIC_GLOBAL,\n      \"\"\n    ).length;\n    const fullNumber = this.#getFullNumber();\n    const formattedValue = formatNumberAsYouType(\n      fullNumber,\n      inputValue,\n      intlTelInput.utils,\n      this.#selectedCountry,\n      this.#options.separateDialCode\n    );\n    const newCaretPos = computeNewCaretPosition(\n      relevantCharsBeforeCaret,\n      formattedValue,\n      currentCaretPos,\n      isDeleteForwards\n    );\n    this.#setTelInputValue(formattedValue);\n    this.#ui.telInputEl.setSelectionRange(newCaretPos, newCaretPos);\n  }\n  //* If separateDialCode AND typed dial code (e.g. from paste or autofill, or from typing a dial code when countrySearch disabled), then remove the typed dial code.\n  //* Only strip when a full dial code is actually present \u2014 otherwise a lone typed \"+\" (or partial prefix) would get erased.\n  #stripTypedDialCode(inputValue) {\n    if (inputValue.startsWith(\"+\") && this.#selectedCountry && this.#getDialCode(inputValue)) {\n      const cleanNumber = stripSeparateDialCode(\n        inputValue,\n        true,\n        true,\n        this.#selectedCountry\n      );\n      this.#setTelInputValue(cleanNumber);\n    }\n  }\n  #bindInputListener() {\n    this.#userOverrideFormatting = REGEX.ALPHA_UNICODE.test(\n      this.#getTelInputValue()\n    );\n    this.#ui.telInputEl.addEventListener(\n      \"input\",\n      this.#handleInputEvent,\n      {\n        signal: this.#abortController.signal\n      }\n    );\n  }\n  //* On input event: (1) Update selected country, (2) Format-as-you-type.\n  //* Note that this fires AFTER the input is updated.\n  #handleInputEvent = (e) => {\n    const {\n      strictMode,\n      formatAsYouType,\n      separateDialCode,\n      countrySelectorMode,\n      countrySearch\n    } = this.#options;\n    const detail = e?.detail;\n    if (detail?.[\"isCountryChange\"]) {\n      return;\n    }\n    let inputValue = this.#getTelInputValue();\n    const isPaste = e?.inputType === INPUT_TYPES.PASTE;\n    const isStrictPaste = strictMode && isPaste;\n    if (this.#isAndroid && !isPaste && e?.data === \"+\" && separateDialCode && countrySelectorMode !== COUNTRY_SELECTOR_MODE.OFF && countrySearch) {\n      this.#handleAndroidPlusKey(inputValue);\n      return;\n    }\n    if (this.#isAndroid && !isPaste && strictMode && (e?.data === \" \" || e?.data === \"-\" || e?.data === \".\")) {\n      this.#handleAndroidStrictReject(inputValue, e.data);\n      return;\n    }\n    if (isStrictPaste) {\n      const didRejectPaste = this.#handleStrictPasteInputEvent();\n      if (didRejectPaste) {\n        return;\n      }\n      inputValue = this.#getTelInputValue();\n    }\n    if (this.#updateCountryFromNumber(inputValue)) {\n      this.#dispatchCountryChangeEvent();\n      this.#dispatchEvent(EVENTS.INPUT, { isCountryChange: true });\n    }\n    const isFormattingChar = !isStrictPaste && e?.data && REGEX.NON_PLUS_NUMERIC.test(e.data);\n    const isNonStrictPaste = isPaste && inputValue && !strictMode;\n    if (isFormattingChar || isNonStrictPaste) {\n      this.#userOverrideFormatting = true;\n    } else if (!REGEX.NON_PLUS_NUMERIC.test(inputValue)) {\n      this.#userOverrideFormatting = false;\n    }\n    if (formatAsYouType && !this.#userOverrideFormatting && !detail?.[\"isSetNumber\"] && this.#numerals.isAscii()) {\n      this.#formatAsYouType(\n        inputValue,\n        e?.inputType === INPUT_TYPES.DELETE_FORWARD\n      );\n    }\n    if (separateDialCode) {\n      this.#stripTypedDialCode(inputValue);\n    }\n  };\n  #bindKeydownListener() {\n    const { strictMode, separateDialCode } = this.#options;\n    if (!strictMode && !separateDialCode) {\n      return;\n    }\n    this.#ui.telInputEl.addEventListener(\"keydown\", this.#handleKeydownEvent, {\n      signal: this.#abortController.signal\n    });\n  }\n  //* On keydown event: (1) if strictMode then prevent invalid characters, (2) if separateDialCode then handle plus key\n  //* Note that this fires BEFORE the input is updated.\n  #handleKeydownEvent = (e) => {\n    const { strictMode, separateDialCode, countrySelectorMode, countrySearch } = this.#options;\n    if (!e.key || e.key.length !== 1 || e.altKey || e.ctrlKey || e.metaKey) {\n      return;\n    }\n    if (separateDialCode && countrySelectorMode !== COUNTRY_SELECTOR_MODE.OFF && countrySearch && e.key === \"+\") {\n      e.preventDefault();\n      this.#openCountrySelectorWithPlus();\n      return;\n    }\n    if (!strictMode) {\n      return;\n    }\n    const inputValue = this.#getTelInputValue();\n    const alreadyHasPlus = inputValue.startsWith(\"+\");\n    const isInitialPlus = !alreadyHasPlus && this.#ui.telInputEl.selectionStart === 0 && e.key === \"+\";\n    const normalisedKey = this.#numerals.normalise(e.key);\n    const isNumeric = /^[0-9]$/.test(normalisedKey);\n    const isAllowedChar = separateDialCode ? isNumeric : isInitialPlus || isNumeric;\n    const input = this.#ui.telInputEl;\n    const selStart = input.selectionStart;\n    const selEnd = input.selectionEnd;\n    const before = inputValue.slice(0, selStart ?? void 0);\n    const after = inputValue.slice(selEnd ?? void 0);\n    const newValue = before + normalisedKey + after;\n    const newFullNumber = this.#buildFullNumber(newValue);\n    let hasExceededMaxLength = getNumeric(newFullNumber).length > E164_MAX_DIGITS;\n    if (!hasExceededMaxLength && intlTelInput.utils && this.#maxCoreNumberLength) {\n      const coreNumber = intlTelInput.utils.getCoreNumber(\n        newFullNumber,\n        this.#selectedCountry?.iso2\n      );\n      hasExceededMaxLength = coreNumber.length > this.#maxCoreNumberLength;\n    }\n    const newCountry = this.#resolveCountryChangeFromNumber(newFullNumber);\n    const isChangingDialCode = newCountry !== null;\n    if (!isAllowedChar || hasExceededMaxLength && !isChangingDialCode && !isInitialPlus) {\n      this.#ui.playStrictRejectAnimation();\n      this.#dispatchEvent(EVENTS.STRICT_REJECT, {\n        source: \"key\",\n        rejectedInput: e.key,\n        reason: !isAllowedChar ? \"invalid\" : \"max-length\"\n      });\n      e.preventDefault();\n    }\n  };\n  #bindStrictPasteListener() {\n    if (!this.#options.strictMode) {\n      return;\n    }\n    this.#ui.telInputEl.addEventListener(\"paste\", this.#handleStrictPasteEvent, {\n      signal: this.#abortController.signal\n    });\n  }\n  // In strict mode, remember paste details before the browser inserts the pasted text.\n  // The actual sanitisation runs on the following input event so native paste stays enabled.\n  #handleStrictPasteEvent = (e) => {\n    const input = this.#ui.telInputEl;\n    const inputValue = this.#getTelInputValue();\n    this.#strictPasteSnapshot = {\n      pastedRaw: e.clipboardData?.getData(\"text\") ?? \"\",\n      value: inputValue,\n      selectionStart: input.selectionStart ?? inputValue.length,\n      selectionEnd: input.selectionEnd ?? inputValue.length\n    };\n  };\n  // Handle paste input events when strictMode is enabled by sanitising the pasted content after\n  // the browser inserts it, and rejecting it entirely if it would result in an invalid number.\n  #handleStrictPasteInputEvent() {\n    const input = this.#ui.telInputEl;\n    const pasteSnapshot = this.#strictPasteSnapshot;\n    this.#strictPasteSnapshot = null;\n    if (!pasteSnapshot) {\n      return false;\n    }\n    const pastedRaw = pasteSnapshot.pastedRaw;\n    const originalValue = pasteSnapshot.value;\n    const selStart = pasteSnapshot.selectionStart;\n    const selEnd = pasteSnapshot.selectionEnd;\n    const before = originalValue.slice(0, selStart);\n    const after = originalValue.slice(selEnd);\n    const iso2 = this.#selectedCountry?.iso2;\n    const pasted = this.#numerals.normalise(pastedRaw);\n    const initialCharSelected = selStart === 0 && selEnd > 0;\n    const allowLeadingPlus = !originalValue.startsWith(\"+\") || initialCharSelected;\n    const allowedChars = pasted.replace(REGEX.NON_PLUS_NUMERIC_GLOBAL, \"\");\n    const hasLeadingPlus = allowedChars.startsWith(\"+\");\n    const numerics = allowedChars.replace(/\\+/g, \"\");\n    const sanitised = hasLeadingPlus && allowLeadingPlus ? `+${numerics}` : numerics;\n    let newValue = before + sanitised + after;\n    let rejectReason = sanitised !== pasted ? \"invalid\" : null;\n    if (newValue.length > 30) {\n      this.#rejectStrictPasteAsTooLong(pasteSnapshot);\n      return true;\n    }\n    const excessDigits = getNumeric(this.#buildFullNumber(newValue)).length - E164_MAX_DIGITS;\n    if (excessDigits > 0) {\n      if (selEnd !== originalValue.length) {\n        this.#rejectStrictPasteAsTooLong(pasteSnapshot);\n        return true;\n      }\n      newValue = newValue.slice(0, newValue.length - excessDigits);\n      rejectReason = \"max-length\";\n    }\n    if (this.#maxCoreNumberLength && newValue.length > 5 && intlTelInput.utils) {\n      let coreNumber = intlTelInput.utils.getCoreNumber(newValue, iso2);\n      while (coreNumber.length === 0 && newValue.length > 0) {\n        newValue = newValue.slice(0, -1);\n        coreNumber = intlTelInput.utils.getCoreNumber(newValue, iso2);\n      }\n      if (!coreNumber) {\n        this.#rejectStrictPasteAsTooLong(pasteSnapshot);\n        return true;\n      }\n      if (coreNumber.length > this.#maxCoreNumberLength) {\n        if (selEnd === originalValue.length) {\n          const trimLength = coreNumber.length - this.#maxCoreNumberLength;\n          newValue = newValue.slice(0, newValue.length - trimLength);\n          rejectReason = \"max-length\";\n        } else {\n          this.#rejectStrictPasteAsTooLong(pasteSnapshot);\n          return true;\n        }\n      }\n    }\n    this.#setTelInputValue(newValue);\n    const caretPos = selStart + sanitised.length;\n    input.setSelectionRange(caretPos, caretPos);\n    if (rejectReason) {\n      if (pasted.length > 0 && sanitised.length === 0) {\n        this.#ui.playStrictRejectAnimation();\n      }\n      this.#dispatchEvent(EVENTS.STRICT_REJECT, {\n        source: \"paste\",\n        rejectedInput: pastedRaw,\n        reason: rejectReason\n      });\n    }\n    return false;\n  }\n  // Reject a paste entirely because it would exceed the max length, restoring the previous value.\n  #rejectStrictPasteAsTooLong(pasteSnapshot) {\n    this.#ui.playStrictRejectAnimation();\n    this.#dispatchEvent(EVENTS.STRICT_REJECT, {\n      source: \"paste\",\n      rejectedInput: pasteSnapshot.pastedRaw,\n      reason: \"max-length\"\n    });\n    this.#restoreValueBeforeStrictPaste(pasteSnapshot);\n  }\n  #restoreValueBeforeStrictPaste(pasteSnapshot) {\n    this.#setTelInputValue(pasteSnapshot.value);\n    this.#ui.telInputEl.setSelectionRange(\n      pasteSnapshot.selectionStart,\n      pasteSnapshot.selectionEnd\n    );\n  }\n  //* Adhere to the input's maxlength attr.\n  #truncateToMaxLength(number) {\n    const max = Number(this.#ui.telInputEl.getAttribute(\"maxlength\"));\n    return max && number.length > max ? number.substring(0, max) : number;\n  }\n  //* Trigger a custom event on the input (typed via ItiEventMap).\n  #dispatchEvent(name, detailProps = {}) {\n    const e = new CustomEvent(name, {\n      bubbles: true,\n      cancelable: true,\n      detail: detailProps\n    });\n    this.#ui.telInputEl.dispatchEvent(e);\n  }\n  //* Open the country selector. Bail if already open \u2014 otherwise the existing AbortController gets overwritten\n  //* and its listeners leak. Reachable via openCountrySelectorWithPlus when dropdownAlwaysOpen is set.\n  //* Public so consumers can programmatically open the country selector.\n  openCountrySelector() {\n    if (this.#ui.isCountrySelectorOpen()) {\n      return;\n    }\n    this.#ui.openCountrySelector(\n      (li) => this.#selectListItem(li),\n      () => this.#closeCountrySelectorInternal()\n    );\n    this.#dispatchEvent(EVENTS.OPEN_COUNTRY_SELECTOR);\n  }\n  //* Update the input's value to the given number (format first if possible)\n  //* NOTE: this is called from setInitialState, handleUtilsLoaded and setNumber.\n  #updateValueFromNumber(fullNumber) {\n    const { numberDisplayFormat, separateDialCode } = this.#options;\n    let number = fullNumber;\n    if (intlTelInput.utils && this.#selectedCountry) {\n      const isRegionless = hasRegionlessDialCode(fullNumber);\n      const preserveUserNational = !number.startsWith(\"+\") && !separateDialCode;\n      const useNational = numberDisplayFormat === NUMBER_FORMAT.NATIONAL && !isRegionless || preserveUserNational;\n      let format;\n      if (useNational) {\n        format = NUMBER_FORMAT.NATIONAL;\n      } else if (numberDisplayFormat === NUMBER_FORMAT.E164 && !isRegionless) {\n        format = NUMBER_FORMAT.E164;\n      } else {\n        format = NUMBER_FORMAT.INTERNATIONAL;\n      }\n      number = intlTelInput.utils.formatNumber(\n        number,\n        this.#selectedCountry?.iso2,\n        format\n      );\n    }\n    number = this.#prepareNumberForInput(number);\n    this.#setTelInputValue(number);\n  }\n  //* Check if need to select a new country based on the given number\n  //* Note: called from setInitialState, keyup handler, setNumber.\n  #updateCountryFromNumber(fullNumber) {\n    const iso2 = this.#resolveCountryChangeFromNumber(fullNumber);\n    if (iso2 !== null) {\n      return this.#updateSelectedCountry(iso2);\n    }\n    return false;\n  }\n  // if there is a selected country, and the number doesn't start with a dial code, then add it\n  #withDialCodePrefix(number) {\n    const dialCode = this.#selectedCountry?.dialCode;\n    const nationalPrefix = this.#selectedCountry?.nationalPrefix;\n    const alreadyHasPlus = number.startsWith(\"+\");\n    if (alreadyHasPlus || !dialCode) {\n      return number;\n    }\n    const hasPrefix = nationalPrefix && number.startsWith(nationalPrefix) && !this.#options.separateDialCode;\n    const cleanNumber = hasPrefix ? number.substring(1) : number;\n    return `+${dialCode}${cleanNumber}`;\n  }\n  //* Get the new country iso2 (or \"\" for empty/globe state) based on the input number, or return null if no change.\n  #resolveCountryChangeFromNumber(fullNumber) {\n    const plusIndex = fullNumber.indexOf(\"+\");\n    let number = plusIndex > 0 ? fullNumber.substring(plusIndex) : fullNumber;\n    const selectedIso2 = this.#selectedCountry?.iso2;\n    number = this.#withDialCodePrefix(number);\n    const dialCodeMatch = this.#getDialCode(number, true);\n    const numeric = getNumeric(number);\n    if (dialCodeMatch) {\n      const dialCodeMatchNumeric = getNumeric(dialCodeMatch);\n      const iso2Codes = this.#dialCodeToIso2Map[dialCodeMatchNumeric];\n      if (iso2Codes.length === 1) {\n        if (iso2Codes[0] === selectedIso2) {\n          return null;\n        }\n        return iso2Codes[0];\n      }\n      return this.#resolveCountryChangeFromMultiMatch(\n        iso2Codes,\n        dialCodeMatchNumeric,\n        numeric\n      );\n    } else if (number.startsWith(\"+\") && numeric.length) {\n      const currentDial = this.#selectedCountry?.dialCode || \"\";\n      if (currentDial && currentDial.startsWith(numeric)) {\n        return null;\n      }\n      if (!selectedIso2) {\n        return null;\n      }\n      return \"\";\n    } else if ((!number || number === \"+\") && !selectedIso2 && this.#fallbackCountryIso2) {\n      return this.#fallbackCountryIso2;\n    }\n    return null;\n  }\n  //* Resolve the country when multiple countries share the matched dial code.\n  #resolveCountryChangeFromMultiMatch(iso2Codes, dialCodeMatchNumeric, numeric) {\n    const selectedIso2 = this.#selectedCountry?.iso2;\n    const selectedDialCode = this.#selectedCountry?.dialCode;\n    if (!selectedIso2 && this.#fallbackCountryIso2 && iso2Codes.includes(this.#fallbackCountryIso2)) {\n      return this.#fallbackCountryIso2;\n    }\n    const isRegionlessNanpNumber = selectedDialCode === DIAL_CODE.NANP && isRegionlessNanp(numeric);\n    if (isRegionlessNanpNumber) {\n      return null;\n    }\n    const areaCodes = this.#selectedCountry?.areaCodes;\n    const priority = this.#selectedCountry?.priority;\n    if (areaCodes) {\n      const dialCodeAreaCodes = areaCodes.map(\n        (areaCode) => `${selectedDialCode}${areaCode}`\n      );\n      for (const dialCodeAreaCode of dialCodeAreaCodes) {\n        if (numeric.startsWith(dialCodeAreaCode)) {\n          return null;\n        }\n      }\n    }\n    const isMainCountry = priority === 0;\n    const hasAreaCodesButNoneMatched = areaCodes && !isMainCountry && numeric.length > dialCodeMatchNumeric.length;\n    const isValidSelection = selectedIso2 && iso2Codes.includes(selectedIso2) && !hasAreaCodesButNoneMatched;\n    const alreadySelected = selectedIso2 === iso2Codes[0];\n    if (!isValidSelection && !alreadySelected) {\n      return iso2Codes[0];\n    }\n    return null;\n  }\n  //* Update the selected country, dial code (if separateDialCode), placeholder, title, and selected list item.\n  //* Note: called from setInitialState, updateCountryFromNumber, selectListItem, setSelectedCountry.\n  #updateSelectedCountry(iso2) {\n    const prevIso2 = this.#selectedCountry?.iso2 || \"\";\n    this.#selectedCountry = iso2 ? this.#countryByIso2.get(iso2) : null;\n    if (this.#selectedCountry) {\n      this.#fallbackCountryIso2 = this.#selectedCountry.iso2;\n    }\n    this.#ui.setSelectedCountry(this.#selectedCountry);\n    this.#updatePlaceholder();\n    this.#updateMaxCoreNumberLength();\n    return prevIso2 !== iso2;\n  }\n  //* Update the maximum valid number length for the currently selected country.\n  #updateMaxCoreNumberLength() {\n    const { strictMode, placeholderNumberType, allowedNumberTypes } = this.#options;\n    if (!strictMode || !intlTelInput.utils) {\n      return;\n    }\n    const iso2 = this.#selectedCountry?.iso2;\n    if (!iso2) {\n      this.#maxCoreNumberLength = null;\n      return;\n    }\n    let exampleNumber = intlTelInput.utils.getExampleNumber(\n      iso2,\n      placeholderNumberType,\n      NUMBER_FORMAT.E164\n    );\n    let validNumber = exampleNumber;\n    while (intlTelInput.utils.isValidNumber(\n      exampleNumber,\n      iso2,\n      allowedNumberTypes\n    )) {\n      validNumber = exampleNumber;\n      exampleNumber += \"0\";\n    }\n    const coreNumber = intlTelInput.utils.getCoreNumber(validNumber, iso2);\n    this.#maxCoreNumberLength = coreNumber.length;\n    if (iso2 === \"by\") {\n      this.#maxCoreNumberLength = coreNumber.length + 1;\n    }\n  }\n  //* Update the input placeholder to an example number from the currently selected country.\n  #updatePlaceholder() {\n    const {\n      placeholderNumberPolicy,\n      placeholderNumberType,\n      numberDisplayFormat,\n      customPlaceholder\n    } = this.#options;\n    const shouldSetPlaceholder = placeholderNumberPolicy === PLACEHOLDER_POLICY.AGGRESSIVE || !this.#ui.hadInitialPlaceholder && placeholderNumberPolicy === PLACEHOLDER_POLICY.POLITE;\n    if (!intlTelInput.utils || !shouldSetPlaceholder) {\n      return;\n    }\n    let placeholder = this.#selectedCountry ? intlTelInput.utils.getExampleNumber(\n      this.#selectedCountry.iso2,\n      placeholderNumberType,\n      numberDisplayFormat\n    ) : \"\";\n    placeholder = this.#prepareNumberForInput(placeholder);\n    if (typeof customPlaceholder === \"function\") {\n      placeholder = customPlaceholder(placeholder, this.#selectedCountry);\n    }\n    this.#ui.telInputEl.setAttribute(\"placeholder\", placeholder);\n  }\n  //* Called when the user selects a list item from the country list (no-op if listItem is null).\n  #selectListItem(listItem) {\n    if (!listItem) {\n      return;\n    }\n    const iso2 = listItem.dataset[DATA_KEYS.ISO2];\n    const countryChanged = this.#updateSelectedCountry(iso2);\n    this.#closeCountrySelectorInternal();\n    const dialCode = listItem.dataset[DATA_KEYS.DIAL_CODE];\n    this.#updateDialCode(dialCode);\n    const inputValue = this.#getTelInputValue();\n    this.#updateValueFromNumber(inputValue);\n    this.#ui.telInputEl.focus();\n    if (countryChanged) {\n      this.#dispatchCountryChangeEvent();\n      this.#dispatchEvent(EVENTS.INPUT, { isCountryChange: true });\n    }\n  }\n  //* Public: close the country selector (consumer-callable; delegates to the internal helper\n  //* without the destroy-specific path).\n  closeCountrySelector() {\n    this.#closeCountrySelectorInternal();\n  }\n  //* Close the country selector and unbind any listeners. The isDestroy flag forces close even\n  //* when dropdownAlwaysOpen is set, so destroy() can fully tear down.\n  #closeCountrySelectorInternal(isDestroy) {\n    if (!this.#ui.isCountrySelectorOpen() || this.#options.dropdownAlwaysOpen && !isDestroy) {\n      return;\n    }\n    this.#ui.closeCountrySelector();\n    this.#dispatchEvent(EVENTS.CLOSE_COUNTRY_SELECTOR);\n  }\n  //* Replace any existing dial code with the new one\n  //* Note: called from selectListItem and setSelectedCountry\n  #updateDialCode(newDialCodeDigits) {\n    const inputValue = this.#getTelInputValue();\n    if (!inputValue.startsWith(\"+\")) {\n      return;\n    }\n    const newDialCode = `+${newDialCodeDigits}`;\n    const prevDialCode = this.#getDialCode(inputValue);\n    let newNumber;\n    if (prevDialCode) {\n      newNumber = inputValue.replace(prevDialCode, newDialCode);\n    } else {\n      newNumber = newDialCode;\n    }\n    this.#setTelInputValue(newNumber);\n  }\n  //* Try and extract a valid international dial code from a full telephone number.\n  //* Note: returns the raw string inc plus character and any whitespace/dots etc.\n  #getDialCode(number, includeAreaCode) {\n    if (!number.startsWith(\"+\")) {\n      return \"\";\n    }\n    let dialCode = \"\";\n    let numericChars = \"\";\n    let foundBaseDialCode = false;\n    for (let i = 0; i < number.length; i++) {\n      const c = number.charAt(i);\n      if (!/[0-9]/.test(c)) {\n        continue;\n      }\n      numericChars += c;\n      const hasMapEntry = Boolean(this.#dialCodeToIso2Map[numericChars]);\n      if (!hasMapEntry) {\n        break;\n      }\n      if (this.#dialCodes.has(numericChars)) {\n        dialCode = number.substring(0, i + 1);\n        foundBaseDialCode = true;\n        if (!includeAreaCode) {\n          break;\n        }\n      } else if (includeAreaCode && foundBaseDialCode) {\n        dialCode = number.substring(0, i + 1);\n      }\n      if (numericChars.length === this.#dialCodeMaxLength) {\n        break;\n      }\n    }\n    return dialCode;\n  }\n  //* Build a full number from an already-normalised value, adding the dial code if separateDialCode is enabled.\n  #buildFullNumber(value) {\n    const dialCode = this.#selectedCountry?.dialCode;\n    const numericValue = getNumeric(value);\n    const usePrefix = this.#options.separateDialCode && !value.startsWith(\"+\") && dialCode && numericValue;\n    return (usePrefix ? `+${dialCode}` : \"\") + value;\n  }\n  //* Get the input value as a full number, adding the dial code if separateDialCode is enabled.\n  #getFullNumber() {\n    const value = this.#getTelInputValue();\n    return this.#buildFullNumber(value);\n  }\n  //* Remove the dial code if separateDialCode is enabled also cap the length if the input has a maxlength attribute\n  #prepareNumberForInput(fullNumber) {\n    const hasValidDialCode = Boolean(this.#getDialCode(fullNumber));\n    const number = stripSeparateDialCode(\n      fullNumber,\n      hasValidDialCode,\n      this.#options.separateDialCode,\n      this.#selectedCountry\n    );\n    return this.#truncateToMaxLength(number);\n  }\n  //* Dispatch the 'countrychange' event.\n  #dispatchCountryChangeEvent() {\n    this.#dispatchEvent(EVENTS.COUNTRY_CHANGE, this.#selectedCountry ?? null);\n  }\n  //**************************\n  //*  INTERNAL METHODS\n  //**************************\n  //* Called when the initial country lookup returns.\n  #handleAutoCountryLoaded() {\n    if (!this.#autoCountryDeferred || !intlTelInput.autoCountry) {\n      return;\n    }\n    if (!this.#isActive) {\n      this.#autoCountryDeferred.resolve();\n      return;\n    }\n    const isFocused = document.activeElement === this.#ui.telInputEl;\n    const hasTypedValue = Boolean(this.#getTelInputValue());\n    if (this.#ui.isLoading() && !(isFocused && hasTypedValue)) {\n      this.setSelectedCountry(intlTelInput.autoCountry);\n    } else {\n      this.#fallbackCountryIso2 = intlTelInput.autoCountry;\n    }\n    this.#ui.setLoading(false);\n    this.#autoCountryDeferred.resolve();\n  }\n  //* Called when the initial country lookup fails or times out.\n  #handleAutoCountryFailure() {\n    if (!this.#isActive) {\n      this.#autoCountryDeferred?.reject();\n      return;\n    }\n    if (this.#ui.isLoading()) {\n      this.#setInitialState(true);\n    }\n    this.#ui.setLoading(false);\n    this.#autoCountryDeferred?.reject();\n  }\n  //* Called when the utils request completes.\n  #handleUtilsLoaded() {\n    if (!this.#isActive) {\n      this.#utilsDeferred?.resolve();\n      return;\n    }\n    if (!intlTelInput.utils) {\n      this.#utilsDeferred?.resolve();\n      return;\n    }\n    const inputValue = this.#getTelInputValue();\n    const isFocused = document.activeElement === this.#ui.telInputEl;\n    if (inputValue && !isFocused) {\n      this.#updateValueFromNumber(inputValue);\n    }\n    if (this.#selectedCountry) {\n      this.#updatePlaceholder();\n      this.#updateMaxCoreNumberLength();\n    }\n    this.#utilsDeferred?.resolve();\n  }\n  //* Called when the utils request fails or times out.\n  #handleUtilsFailure(error) {\n    if (!this.#isActive) {\n      this.#utilsDeferred?.reject(error);\n      return;\n    }\n    this.#utilsDeferred?.reject(error);\n  }\n  //********************\n  //*  PUBLIC METHODS\n  //********************\n  //* Remove core library.\n  destroy() {\n    if (!this.#isActive) {\n      return;\n    }\n    this.#isActive = false;\n    if (this.#options.countrySelectorMode !== COUNTRY_SELECTOR_MODE.OFF) {\n      this.#closeCountrySelectorInternal(true);\n    }\n    this.#abortController.abort();\n    this.#ui.destroy();\n    intlTelInput.instances.delete(String(this.id));\n  }\n  // check if the instance is still valid (not destroyed)\n  isActive() {\n    return this.#isActive;\n  }\n  //* Get the extension from the current number.\n  getExtension() {\n    if (!this.#isActive) {\n      return \"\";\n    }\n    ensureUtils(\"getExtension\");\n    return intlTelInput.utils.getExtension(\n      this.#getFullNumber(),\n      this.#selectedCountry?.iso2\n    );\n  }\n  //* Format the number to the given format (defaults to \"E164\").\n  getNumber(format) {\n    if (!this.#isActive) {\n      return \"\";\n    }\n    ensureUtils(\"getNumber\");\n    const iso2 = this.#selectedCountry?.iso2;\n    const fullNumber = this.#getFullNumber();\n    const formattedNumber = intlTelInput.utils.formatNumber(\n      fullNumber,\n      iso2,\n      format\n    );\n    return this.#numerals.denormalise(formattedNumber);\n  }\n  //* Get the type of the entered number e.g. \"FIXED_LINE\" / \"MOBILE\", or null if it can't be determined / instance is destroyed.\n  getNumberType() {\n    if (!this.#isActive) {\n      return null;\n    }\n    ensureUtils(\"getNumberType\");\n    return intlTelInput.utils.getNumberType(\n      this.#getFullNumber(),\n      this.#selectedCountry?.iso2\n    );\n  }\n  //* Get the country data for the currently selected country.\n  getSelectedCountry() {\n    return this.#selectedCountry ?? null;\n  }\n  //* Get the validation error e.g. \"TOO_SHORT\" / \"TOO_LONG\", or null if it can't be determined / instance is destroyed.\n  getValidationError() {\n    if (!this.#isActive) {\n      return null;\n    }\n    ensureUtils(\"getValidationError\");\n    const iso2 = this.#selectedCountry?.iso2;\n    return intlTelInput.utils.getValidationError(this.#getFullNumber(), iso2);\n  }\n  //* Validate the input value using number length only\n  isValidNumber() {\n    if (!this.#isActive) {\n      return null;\n    }\n    ensureUtils(\"isValidNumber\");\n    const dialCode = this.#selectedCountry?.dialCode;\n    const iso2 = this.#selectedCountry?.iso2;\n    const number = this.#getFullNumber();\n    const coreNumber = intlTelInput.utils.getCoreNumber(number, iso2);\n    if (coreNumber) {\n      if (dialCode === UK.DIAL_CODE) {\n        if (coreNumber[0] === UK.MOBILE_PREFIX && coreNumber.length !== UK.MOBILE_CORE_LENGTH) {\n          return false;\n        }\n      }\n      const hasAlphaChar = REGEX.ALPHA_UNICODE.test(number);\n      if (!hasAlphaChar && dialCode) {\n        const nationalPortion = number.startsWith(\"+\") ? number.slice(1 + dialCode.length) : number;\n        const nationalDigitCount = getNumeric(nationalPortion).length;\n        if (coreNumber.length > nationalDigitCount) {\n          return false;\n        }\n      }\n    }\n    return this.#validateNumber(\"possible\");\n  }\n  //* Validate the input value with precise validation\n  isValidNumberPrecise() {\n    if (!this.#isActive) {\n      return null;\n    }\n    ensureUtils(\"isValidNumberPrecise\");\n    return this.#validateNumber(\"precise\");\n  }\n  //* Shared internal validation logic to handle alpha character extension rules.\n  #validateNumber(mode) {\n    const { allowNumberExtensions, allowPhonewords, allowedNumberTypes } = this.#options;\n    const iso2 = this.#selectedCountry?.iso2;\n    const value = this.#getFullNumber();\n    if (!this.#selectedCountry && !hasRegionlessDialCode(value)) {\n      return false;\n    }\n    const check = mode === \"precise\" ? intlTelInput.utils.isValidNumberPrecise : intlTelInput.utils.isValidNumber;\n    if (!check(value, iso2, allowedNumberTypes)) {\n      return false;\n    }\n    if (REGEX.ALPHA_UNICODE.test(value)) {\n      const hasExtension = Boolean(\n        intlTelInput.utils.getExtension(value, iso2)\n      );\n      return hasExtension ? allowNumberExtensions : allowPhonewords;\n    }\n    return true;\n  }\n  //* Update the selected country, and update the input value accordingly.\n  setSelectedCountry(iso2) {\n    if (!this.#isActive) {\n      return;\n    }\n    const iso2Lower = iso2?.toLowerCase();\n    if (!isIso2(iso2Lower)) {\n      throw new Error(`Invalid iso2 code: '${iso2Lower}'`);\n    }\n    const currentCountry = this.#selectedCountry?.iso2;\n    const isCountryChange = iso2 && iso2Lower !== currentCountry || !iso2 && currentCountry;\n    if (!isCountryChange) {\n      return;\n    }\n    this.#updateSelectedCountry(iso2Lower);\n    this.#updateDialCode(this.#selectedCountry?.dialCode || \"\");\n    const inputValue = this.#getTelInputValue();\n    this.#updateValueFromNumber(inputValue);\n    this.#dispatchCountryChangeEvent();\n    this.#dispatchEvent(EVENTS.INPUT, { isCountryChange: true });\n  }\n  //* Set the input value and update the country.\n  setNumber(number) {\n    if (!this.#isActive) {\n      return;\n    }\n    const normalisedNumber = this.#numerals.normalise(number);\n    const countryChanged = this.#updateCountryFromNumber(normalisedNumber);\n    this.#updateValueFromNumber(normalisedNumber);\n    if (countryChanged) {\n      this.#dispatchCountryChangeEvent();\n    }\n    this.#dispatchEvent(EVENTS.INPUT, { isSetNumber: true });\n  }\n  //* Set the placeholder number type\n  setPlaceholderNumberType(type) {\n    if (!this.#isActive) {\n      return;\n    }\n    this.#options.placeholderNumberType = type;\n    this.#updatePlaceholder();\n  }\n  // Set the disabled state of the input and country selector.\n  setDisabled(disabled) {\n    if (!this.#isActive) {\n      return;\n    }\n    this.#ui.setDisabled(disabled);\n  }\n  // Set the readonly state of the input and country selector.\n  setReadonly(readonly) {\n    if (!this.#isActive) {\n      return;\n    }\n    this.#ui.setReadonly(readonly);\n  }\n  //********************\n  //*  STATIC METHODS\n  //********************\n  // Internal instance notification used by utils/initial-country loaders.\n  // Kept public so module-level helpers (e.g. attachUtils) can call it, while still allowing\n  // access to private instance methods.\n  static forEachInstance(method, ...args) {\n    const values = [...intlTelInput.instances.values()];\n    const arg = args[0];\n    values.forEach((instance) => {\n      if (!(instance instanceof _Iti)) {\n        return;\n      }\n      switch (method) {\n        case \"handleUtilsLoaded\":\n          instance.#handleUtilsLoaded();\n          break;\n        case \"handleUtilsFailure\":\n          instance.#handleUtilsFailure(arg);\n          break;\n        case \"handleAutoCountryLoaded\":\n          instance.#handleAutoCountryLoaded();\n          break;\n        case \"handleAutoCountryFailure\":\n          instance.#handleAutoCountryFailure();\n          break;\n      }\n    });\n  }\n};\nvar attachUtils = async (source) => {\n  if (intlTelInput.utils || intlTelInput.startedLoadingUtils) {\n    return null;\n  }\n  if (typeof source !== \"function\") {\n    throw new TypeError(\n      `The argument passed to attachUtils must be a function that returns a promise for the utils module, not ${typeof source}`\n    );\n  }\n  intlTelInput.startedLoadingUtils = true;\n  try {\n    const module = await source();\n    const utils = module?.default;\n    if (!utils || typeof utils !== \"object\") {\n      throw new TypeError(\n        \"The loader function passed to attachUtils did not resolve to a module object with utils as its default export.\"\n      );\n    }\n    intlTelInput.utils = utils;\n    Iti.forEachInstance(\"handleUtilsLoaded\");\n    return true;\n  } catch (error) {\n    Iti.forEachInstance(\"handleUtilsFailure\", error);\n    throw error;\n  }\n};\nvar intlTelInput = Object.assign(\n  (input, options) => {\n    const iti = new Iti(input, options);\n    intlTelInput.instances.set(String(iti.id), iti);\n    input.iti = iti;\n    return iti;\n  },\n  {\n    defaults,\n    //* Using a static var like this allows us to mock it in the tests.\n    documentReady: () => document.readyState === \"complete\",\n    //* Get the full list of all countries the library knows about.\n    getAllCountries: () => data_default,\n    //* A getter for the core library instance.\n    getInstance: (input) => {\n      const id = input.dataset[DATA_KEYS.INSTANCE_ID];\n      return id ? intlTelInput.instances.get(id) ?? null : null;\n    },\n    //* A map from instance ID to instance object.\n    instances: /* @__PURE__ */ new Map(),\n    attachUtils,\n    startedLoadingUtils: false,\n    startedLoadingAutoCountry: false,\n    version: \"29.2.3\",\n    NUMBER_FORMAT,\n    NUMBER_TYPE,\n    VALIDATION_ERROR,\n    PLACEHOLDER_POLICY,\n    COUNTRY_SELECTOR_MODE\n  }\n);\nvar intlTelInput_default = intlTelInput;\n\n// packages/core/dist/js/utils.js\nvar _scope = {};\n(function() {\n  var k = this || self;\n  function m(a, b) {\n    a = a.split(\".\");\n    var c = k;\n    a[0] in c || typeof c.execScript == \"undefined\" || c.execScript(\"var \" + a[0]);\n    for (var d; a.length && (d = a.shift()); ) a.length || b === void 0 ? c[d] && c[d] !== Object.prototype[d] ? c = c[d] : c = c[d] = {} : c[d] = b;\n  }\n  function n(a, b) {\n    function c() {\n    }\n    c.prototype = b.prototype;\n    a.na = b.prototype;\n    a.prototype = new c();\n    a.prototype.constructor = a;\n    a.ta = function(d, e, f) {\n      for (var g = Array(arguments.length - 2), h = 2; h < arguments.length; h++) g[h - 2] = arguments[h];\n      return b.prototype[e].apply(d, g);\n    };\n  }\n  ;\n  function aa(a) {\n    const b = [];\n    let c = 0;\n    for (const d in a) b[c++] = a[d];\n    return b;\n  }\n  ;\n  var ca = class {\n    constructor(a) {\n      if (ba !== ba) throw Error(\"SafeUrl is not meant to be built directly\");\n      this.g = a;\n    }\n    toString() {\n      return this.g.toString();\n    }\n  }, ba = {};\n  new ca(\"about:invalid#zClosurez\");\n  new ca(\"about:blank\");\n  const da = {};\n  class fa {\n    constructor() {\n      if (da !== da) throw Error(\"SafeStyle is not meant to be built directly\");\n    }\n    toString() {\n      return \"\".toString();\n    }\n  }\n  new fa();\n  const ha = {};\n  class ia {\n    constructor() {\n      if (ha !== ha) throw Error(\"SafeStyleSheet is not meant to be built directly\");\n    }\n    toString() {\n      return \"\".toString();\n    }\n  }\n  new ia();\n  const ja = {};\n  class ka {\n    constructor() {\n      var a = k.trustedTypes && k.trustedTypes.emptyHTML || \"\";\n      if (ja !== ja) throw Error(\"SafeHtml is not meant to be built directly\");\n      this.g = a;\n    }\n    toString() {\n      return this.g.toString();\n    }\n  }\n  new ka();\n  function la(a, b) {\n    this.g = a;\n    this.l = !!b.ca;\n    this.h = b.i;\n    this.u = b.type;\n    this.o = false;\n    switch (this.h) {\n      case ma:\n      case na:\n      case oa:\n      case pa:\n      case qa:\n      case ra:\n      case sa:\n        this.o = true;\n    }\n    this.j = b.defaultValue;\n  }\n  var sa = 1, ra = 2, ma = 3, na = 4, oa = 6, pa = 16, qa = 18;\n  function ta(a, b) {\n    this.h = a;\n    this.g = {};\n    for (a = 0; a < b.length; a++) {\n      var c = b[a];\n      this.g[c.g] = c;\n    }\n  }\n  function ua(a) {\n    a = aa(a.g);\n    a.sort(function(b, c) {\n      return b.g - c.g;\n    });\n    return a;\n  }\n  ;\n  function p() {\n    this.h = {};\n    this.j = this.m().g;\n    this.g = this.l = null;\n  }\n  p.prototype.has = function(a) {\n    return q(this, a.g);\n  };\n  p.prototype.get = function(a, b) {\n    return r(this, a.g, b);\n  };\n  p.prototype.set = function(a, b) {\n    t(this, a.g, b);\n  };\n  p.prototype.add = function(a, b) {\n    va(this, a.g, b);\n  };\n  p.prototype.equals = function(a) {\n    if (!a || this.constructor != a.constructor) return false;\n    for (var b = ua(this.m()), c = 0; c < b.length; c++) {\n      var d = b[c], e = d.g;\n      if (q(this, e) != q(a, e)) return false;\n      if (q(this, e)) {\n        var f = d.h == 11 || d.h == 10, g = u(this, e);\n        e = u(a, e);\n        if (d.l) {\n          if (g.length != e.length) return false;\n          for (d = 0; d < g.length; d++) {\n            var h = g[d], l = e[d];\n            if (f ? !h.equals(l) : h != l) return false;\n          }\n        } else if (f ? !g.equals(e) : g != e) return false;\n      }\n    }\n    return true;\n  };\n  function wa(a, b) {\n    for (var c = ua(a.m()), d = 0; d < c.length; d++) {\n      var e = c[d], f = e.g;\n      if (q(b, f)) {\n        a.g && delete a.g[e.g];\n        var g = e.h == 11 || e.h == 10;\n        if (e.l) {\n          e = u(b, f) || [];\n          for (var h = 0; h < e.length; h++) va(a, f, g ? e[h].clone() : e[h]);\n        } else e = u(b, f), g ? (g = u(a, f)) ? wa(g, e) : t(a, f, e.clone()) : t(a, f, e);\n      }\n    }\n  }\n  p.prototype.clone = function() {\n    var a = new this.constructor();\n    a != this && (a.h = {}, a.g && (a.g = {}), wa(a, this));\n    return a;\n  };\n  function q(a, b) {\n    return a.h[b] != null;\n  }\n  function u(a, b) {\n    var c = a.h[b];\n    if (c == null) return null;\n    if (a.l) {\n      if (!(b in a.g)) {\n        var d = a.l, e = a.j[b];\n        if (c != null) if (e.l) {\n          for (var f = [], g = 0; g < c.length; g++) f[g] = d.h(e, c[g]);\n          c = f;\n        } else c = d.h(e, c);\n        return a.g[b] = c;\n      }\n      return a.g[b];\n    }\n    return c;\n  }\n  function r(a, b, c) {\n    var d = u(a, b);\n    return a.j[b].l ? d[c || 0] : d;\n  }\n  function v(a, b) {\n    if (q(a, b)) a = r(a, b);\n    else a: {\n      a = a.j[b];\n      if (a.j === void 0) if (b = a.u, b === Boolean) a.j = false;\n      else if (b === Number) a.j = 0;\n      else if (b === String) a.j = a.o ? \"0\" : \"\";\n      else {\n        a = new b();\n        break a;\n      }\n      a = a.j;\n    }\n    return a;\n  }\n  function w(a, b) {\n    return a.j[b].l ? q(a, b) ? a.h[b].length : 0 : q(a, b) ? 1 : 0;\n  }\n  function t(a, b, c) {\n    a.h[b] = c;\n    a.g && (a.g[b] = c);\n  }\n  function va(a, b, c) {\n    a.h[b] || (a.h[b] = []);\n    a.h[b].push(c);\n    a.g && delete a.g[b];\n  }\n  function x(a, b) {\n    var c = [], d;\n    for (d in b) d != 0 && c.push(new la(d, b[d]));\n    return new ta(a, c);\n  }\n  ;\n  function y() {\n  }\n  y.prototype.g = function(a) {\n    new a.h();\n    throw Error(\"Unimplemented\");\n  };\n  y.prototype.h = function(a, b) {\n    if (a.h == 11 || a.h == 10) return b instanceof p ? b : this.g(a.u.prototype.m(), b);\n    if (a.h == 14) return typeof b === \"string\" && xa.test(b) && (a = Number(b), a > 0) ? a : b;\n    if (!a.o) return b;\n    a = a.u;\n    if (a === String) {\n      if (typeof b === \"number\") return String(b);\n    } else if (a === Number && typeof b === \"string\" && (b === \"Infinity\" || b === \"-Infinity\" || b === \"NaN\" || xa.test(b))) return Number(b);\n    return b;\n  };\n  var xa = /^-?[0-9]+$/;\n  function ya() {\n  }\n  n(ya, y);\n  ya.prototype.g = function(a, b) {\n    a = new a.h();\n    a.l = this;\n    a.h = b;\n    a.g = {};\n    return a;\n  };\n  function z() {\n  }\n  n(z, ya);\n  z.prototype.h = function(a, b) {\n    return a.h == 8 ? !!b : y.prototype.h.apply(this, arguments);\n  };\n  z.prototype.g = function(a, b) {\n    return z.na.g.call(this, a, b);\n  };\n  function B(a, b) {\n    a != null && this.g.apply(this, arguments);\n  }\n  B.prototype.h = \"\";\n  B.prototype.set = function(a) {\n    this.h = \"\" + a;\n  };\n  B.prototype.g = function(a, b, c) {\n    this.h += String(a);\n    if (b != null) for (let d = 1; d < arguments.length; d++) this.h += arguments[d];\n    return this;\n  };\n  function C(a) {\n    a.h = \"\";\n  }\n  B.prototype.toString = function() {\n    return this.h;\n  };\n  function D() {\n    p.call(this);\n  }\n  n(D, p);\n  var za = null;\n  function E() {\n    p.call(this);\n  }\n  n(E, p);\n  var Aa = null;\n  function F(a) {\n    return u(a, 9) || [];\n  }\n  function G() {\n    p.call(this);\n  }\n  n(G, p);\n  var Ba = null;\n  D.prototype.m = function() {\n    var a = za;\n    a || (za = a = x(D, { 0: { name: \"NumberFormat\", ja: \"i18n.phonenumbers.NumberFormat\" }, 1: { name: \"pattern\", required: true, i: 9, type: String }, 2: { name: \"format\", required: true, i: 9, type: String }, 3: { name: \"leading_digits_pattern\", ca: true, i: 9, type: String }, 4: { name: \"national_prefix_formatting_rule\", i: 9, type: String }, 6: { name: \"national_prefix_optional_when_formatting\", i: 8, defaultValue: false, type: Boolean }, 5: { name: \"domestic_carrier_code_formatting_rule\", i: 9, type: String } }));\n    return a;\n  };\n  D.m = D.prototype.m;\n  E.prototype.m = function() {\n    var a = Aa;\n    a || (Aa = a = x(E, { 0: { name: \"PhoneNumberDesc\", ja: \"i18n.phonenumbers.PhoneNumberDesc\" }, 2: { name: \"national_number_pattern\", i: 9, type: String }, 9: { name: \"possible_length\", ca: true, i: 5, type: Number }, 10: { name: \"possible_length_local_only\", ca: true, i: 5, type: Number }, 6: { name: \"example_number\", i: 9, type: String } }));\n    return a;\n  };\n  E.m = E.prototype.m;\n  G.prototype.m = function() {\n    var a = Ba;\n    a || (Ba = a = x(G, {\n      0: { name: \"PhoneMetadata\", ja: \"i18n.phonenumbers.PhoneMetadata\" },\n      1: { name: \"general_desc\", i: 11, type: E },\n      2: { name: \"fixed_line\", i: 11, type: E },\n      3: { name: \"mobile\", i: 11, type: E },\n      4: { name: \"toll_free\", i: 11, type: E },\n      5: { name: \"premium_rate\", i: 11, type: E },\n      6: { name: \"shared_cost\", i: 11, type: E },\n      7: { name: \"personal_number\", i: 11, type: E },\n      8: { name: \"voip\", i: 11, type: E },\n      21: { name: \"pager\", i: 11, type: E },\n      25: { name: \"uan\", i: 11, type: E },\n      27: { name: \"emergency\", i: 11, type: E },\n      28: { name: \"voicemail\", i: 11, type: E },\n      29: { name: \"short_code\", i: 11, type: E },\n      30: { name: \"standard_rate\", i: 11, type: E },\n      31: { name: \"carrier_specific\", i: 11, type: E },\n      33: { name: \"sms_services\", i: 11, type: E },\n      24: { name: \"no_international_dialling\", i: 11, type: E },\n      9: { name: \"id\", required: true, i: 9, type: String },\n      10: { name: \"country_code\", i: 5, type: Number },\n      11: { name: \"international_prefix\", i: 9, type: String },\n      17: { name: \"preferred_international_prefix\", i: 9, type: String },\n      12: { name: \"national_prefix\", i: 9, type: String },\n      13: { name: \"preferred_extn_prefix\", i: 9, type: String },\n      15: {\n        name: \"national_prefix_for_parsing\",\n        i: 9,\n        type: String\n      },\n      16: { name: \"national_prefix_transform_rule\", i: 9, type: String },\n      18: { name: \"same_mobile_and_fixed_line_pattern\", i: 8, defaultValue: false, type: Boolean },\n      19: { name: \"number_format\", ca: true, i: 11, type: D },\n      20: { name: \"intl_number_format\", ca: true, i: 11, type: D },\n      22: { name: \"main_country_for_code\", i: 8, defaultValue: false, type: Boolean },\n      23: { name: \"leading_digits\", i: 9, type: String }\n    }));\n    return a;\n  };\n  G.m = G.prototype.m;\n  function H() {\n    p.call(this);\n  }\n  n(H, p);\n  var Ca = null, Da = { sa: 0, ra: 1, qa: 5, pa: 10, oa: 20 };\n  H.prototype.m = function() {\n    var a = Ca;\n    a || (Ca = a = x(H, { 0: { name: \"PhoneNumber\", ja: \"i18n.phonenumbers.PhoneNumber\" }, 1: { name: \"country_code\", required: true, i: 5, type: Number }, 2: { name: \"national_number\", required: true, i: 4, type: Number }, 3: { name: \"extension\", i: 9, type: String }, 4: { name: \"italian_leading_zero\", i: 8, type: Boolean }, 8: { name: \"number_of_leading_zeros\", i: 5, defaultValue: 1, type: Number }, 5: { name: \"raw_input\", i: 9, type: String }, 6: { name: \"country_code_source\", i: 14, defaultValue: 0, type: Da }, 7: {\n      name: \"preferred_domestic_carrier_code\",\n      i: 9,\n      type: String\n    } }));\n    return a;\n  };\n  H.ctor = H;\n  H.ctor.m = H.prototype.m;\n  var I = {\n    1: \"US AG AI AS BB BM BS CA DM DO GD GU JM KN KY LC MP MS PR SX TC TT VC VG VI\".split(\" \"),\n    7: [\"RU\", \"KZ\"],\n    20: [\"EG\"],\n    27: [\"ZA\"],\n    30: [\"GR\"],\n    31: [\"NL\"],\n    32: [\"BE\"],\n    33: [\"FR\"],\n    34: [\"ES\"],\n    36: [\"HU\"],\n    39: [\"IT\", \"VA\"],\n    40: [\"RO\"],\n    41: [\"CH\"],\n    43: [\"AT\"],\n    44: [\"GB\", \"GG\", \"IM\", \"JE\"],\n    45: [\"DK\"],\n    46: [\"SE\"],\n    47: [\"NO\", \"SJ\"],\n    48: [\"PL\"],\n    49: [\"DE\"],\n    51: [\"PE\"],\n    52: [\"MX\"],\n    53: [\"CU\"],\n    54: [\"AR\"],\n    55: [\"BR\"],\n    56: [\"CL\"],\n    57: [\"CO\"],\n    58: [\"VE\"],\n    60: [\"MY\"],\n    61: [\"AU\", \"CC\", \"CX\"],\n    62: [\"ID\"],\n    63: [\"PH\"],\n    64: [\"NZ\"],\n    65: [\"SG\"],\n    66: [\"TH\"],\n    81: [\"JP\"],\n    82: [\"KR\"],\n    84: [\"VN\"],\n    86: [\"CN\"],\n    90: [\"TR\"],\n    91: [\"IN\"],\n    92: [\"PK\"],\n    93: [\"AF\"],\n    94: [\"LK\"],\n    95: [\"MM\"],\n    98: [\"IR\"],\n    211: [\"SS\"],\n    212: [\"MA\", \"EH\"],\n    213: [\"DZ\"],\n    216: [\"TN\"],\n    218: [\"LY\"],\n    220: [\"GM\"],\n    221: [\"SN\"],\n    222: [\"MR\"],\n    223: [\"ML\"],\n    224: [\"GN\"],\n    225: [\"CI\"],\n    226: [\"BF\"],\n    227: [\"NE\"],\n    228: [\"TG\"],\n    229: [\"BJ\"],\n    230: [\"MU\"],\n    231: [\"LR\"],\n    232: [\"SL\"],\n    233: [\"GH\"],\n    234: [\"NG\"],\n    235: [\"TD\"],\n    236: [\"CF\"],\n    237: [\"CM\"],\n    238: [\"CV\"],\n    239: [\"ST\"],\n    240: [\"GQ\"],\n    241: [\"GA\"],\n    242: [\"CG\"],\n    243: [\"CD\"],\n    244: [\"AO\"],\n    245: [\"GW\"],\n    246: [\"IO\"],\n    247: [\"AC\"],\n    248: [\"SC\"],\n    249: [\"SD\"],\n    250: [\"RW\"],\n    251: [\"ET\"],\n    252: [\"SO\"],\n    253: [\"DJ\"],\n    254: [\"KE\"],\n    255: [\"TZ\"],\n    256: [\"UG\"],\n    257: [\"BI\"],\n    258: [\"MZ\"],\n    260: [\"ZM\"],\n    261: [\"MG\"],\n    262: [\"RE\", \"YT\"],\n    263: [\"ZW\"],\n    264: [\"NA\"],\n    265: [\"MW\"],\n    266: [\"LS\"],\n    267: [\"BW\"],\n    268: [\"SZ\"],\n    269: [\"KM\"],\n    290: [\"SH\", \"TA\"],\n    291: [\"ER\"],\n    297: [\"AW\"],\n    298: [\"FO\"],\n    299: [\"GL\"],\n    350: [\"GI\"],\n    351: [\"PT\"],\n    352: [\"LU\"],\n    353: [\"IE\"],\n    354: [\"IS\"],\n    355: [\"AL\"],\n    356: [\"MT\"],\n    357: [\"CY\"],\n    358: [\"FI\", \"AX\"],\n    359: [\"BG\"],\n    370: [\"LT\"],\n    371: [\"LV\"],\n    372: [\"EE\"],\n    373: [\"MD\"],\n    374: [\"AM\"],\n    375: [\"BY\"],\n    376: [\"AD\"],\n    377: [\"MC\"],\n    378: [\"SM\"],\n    380: [\"UA\"],\n    381: [\"RS\"],\n    382: [\"ME\"],\n    383: [\"XK\"],\n    385: [\"HR\"],\n    386: [\"SI\"],\n    387: [\"BA\"],\n    389: [\"MK\"],\n    420: [\"CZ\"],\n    421: [\"SK\"],\n    423: [\"LI\"],\n    500: [\"FK\"],\n    501: [\"BZ\"],\n    502: [\"GT\"],\n    503: [\"SV\"],\n    504: [\"HN\"],\n    505: [\"NI\"],\n    506: [\"CR\"],\n    507: [\"PA\"],\n    508: [\"PM\"],\n    509: [\"HT\"],\n    590: [\"GP\", \"BL\", \"MF\"],\n    591: [\"BO\"],\n    592: [\"GY\"],\n    593: [\"EC\"],\n    594: [\"GF\"],\n    595: [\"PY\"],\n    596: [\"MQ\"],\n    597: [\"SR\"],\n    598: [\"UY\"],\n    599: [\"CW\", \"BQ\"],\n    670: [\"TL\"],\n    672: [\"NF\"],\n    673: [\"BN\"],\n    674: [\"NR\"],\n    675: [\"PG\"],\n    676: [\"TO\"],\n    677: [\"SB\"],\n    678: [\"VU\"],\n    679: [\"FJ\"],\n    680: [\"PW\"],\n    681: [\"WF\"],\n    682: [\"CK\"],\n    683: [\"NU\"],\n    685: [\"WS\"],\n    686: [\"KI\"],\n    687: [\"NC\"],\n    688: [\"TV\"],\n    689: [\"PF\"],\n    690: [\"TK\"],\n    691: [\"FM\"],\n    692: [\"MH\"],\n    800: [\"001\"],\n    808: [\"001\"],\n    850: [\"KP\"],\n    852: [\"HK\"],\n    853: [\"MO\"],\n    855: [\"KH\"],\n    856: [\"LA\"],\n    870: [\"001\"],\n    878: [\"001\"],\n    880: [\"BD\"],\n    881: [\"001\"],\n    882: [\"001\"],\n    883: [\"001\"],\n    886: [\"TW\"],\n    888: [\"001\"],\n    960: [\"MV\"],\n    961: [\"LB\"],\n    962: [\"JO\"],\n    963: [\"SY\"],\n    964: [\"IQ\"],\n    965: [\"KW\"],\n    966: [\"SA\"],\n    967: [\"YE\"],\n    968: [\"OM\"],\n    970: [\"PS\"],\n    971: [\"AE\"],\n    972: [\"IL\"],\n    973: [\"BH\"],\n    974: [\"QA\"],\n    975: [\"BT\"],\n    976: [\"MN\"],\n    977: [\"NP\"],\n    979: [\"001\"],\n    992: [\"TJ\"],\n    993: [\"TM\"],\n    994: [\"AZ\"],\n    995: [\"GE\"],\n    996: [\"KG\"],\n    998: [\"UZ\"]\n  }, Ea = {\n    AC: [, [\n      ,\n      ,\n      \"(?:[01589]\\\\d|[2-467])\\\\d{4}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [5, 6]\n    ], [, , \"6\\\\d{4}\", , , , \"62889\", , , [5]], [, , \"[2-47]\\\\d{4}\", , , , \"40123\", , , [5]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"AC\", 247, \"00\", , , , , , , , , , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"(?:0[1-9]|[1589]\\\\d)\\\\d{4}\", , , , \"542011\", , , [6]], , , [, , , , , , , , , [-1]]],\n    AD: [\n      ,\n      [, , \"(?:1|6\\\\d)\\\\d{7}|[135-9]\\\\d{5}\", , , , , , , [6, 8, 9]],\n      [, , \"[78]\\\\d{5}\", , , , \"712345\", , , [6]],\n      [, , \"690\\\\d{6}|[356]\\\\d{5}\", , , , \"312345\", , , [6, 9]],\n      [, , \"180[02]\\\\d{4}\", , , , \"18001234\", , , [8]],\n      [, , \"[19]\\\\d{5}\", , , , \"912345\", , , [6]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"AD\",\n      376,\n      \"00\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{3})(\\\\d{3})\", \"$1 $2\", [\"[135-9]\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"1\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"6\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , \"1800\\\\d{4}\", , , , , , , [8]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    AE: [\n      ,\n      [, , \"(?:[4-7]\\\\d|9[0-689])\\\\d{7}|800\\\\d{2,9}|[2-4679]\\\\d{7}\", , , , , , , [5, 6, 7, 8, 9, 10, 11, 12]],\n      [, , \"[2-4679][2-8]\\\\d{6}\", , , , \"22345678\", , , [8], [7]],\n      [, , \"5[02-68]\\\\d{7}\", , , , \"501234567\", , , [9]],\n      [, , \"400\\\\d{6}|800\\\\d{2,9}\", , , , \"800123456\"],\n      [, , \"900[02]\\\\d{5}\", , , , \"900234567\", , , [9]],\n      [, , \"700[05]\\\\d{5}\", , , , \"700012345\", , , [9]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"AE\",\n      971,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{3})(\\\\d{2,9})\", \"$1 $2\", [\"60|8\"]], [, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[236]|[479][2-8]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d)(\\\\d{5})\", \"$1 $2 $3\", [\"[479]\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"5\"], \"0$1\"]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , \"600[25]\\\\d{5}\", , , , \"600212345\", , , [9]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    AF: [, [, , \"[2-7]\\\\d{8}\", , , , , , , [9], [7]], [\n      ,\n      ,\n      \"(?:[25][0-8]|[34][0-4]|6[0-5])[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"234567890\",\n      ,\n      ,\n      ,\n      [7]\n    ], [, , \"7\\\\d{8}\", , , , \"701234567\", , , , [7]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"AF\", 93, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[1-9]\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[2-7]\"], \"0$1\"]], [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[2-7]\"], \"0$1\"]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    AG: [, [, , \"(?:268|[58]\\\\d\\\\d|900)\\\\d{7}\", , , , , , , [10], [7]], [\n      ,\n      ,\n      \"268(?:4(?:6[0-38]|84)|56[0-2])\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"2684601234\",\n      ,\n      ,\n      ,\n      [7]\n    ], [, , \"268(?:464|7(?:1[3-9]|[28]\\\\d|3[0246]|64|7[0-689]))\\\\d{4}\", , , , \"2684641234\", , , , [7]], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\"], [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"], [, , , , , , , , , [-1]], [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"], [\n      ,\n      ,\n      \"26848[01]\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"2684801234\",\n      ,\n      ,\n      ,\n      [7]\n    ], \"AG\", 1, \"011\", \"1\", , , \"([457]\\\\d{6})$|1\", \"268$1\", , , , , [, , \"26840[69]\\\\d{4}\", , , , \"2684061234\", , , , [7]], , \"268\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    AI: [, [, , \"(?:264|[58]\\\\d\\\\d|900)\\\\d{7}\", , , , , , , [10], [7]], [, , \"264(?:292|4(?:6[12]|9[78]))\\\\d{4}\", , , , \"2644612345\", , , , [7]], [, , \"264(?:235|4(?:69|7[67])|5(?:3[6-9]|8[1-4])|7(?:29|72))\\\\d{4}\", , , , \"2642351234\", , , , [7]], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\"], [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"5002345678\"\n    ], [, , , , , , , , , [-1]], \"AI\", 1, \"011\", \"1\", , , \"([2457]\\\\d{6})$|1\", \"264$1\", , , , , [, , \"264724\\\\d{4}\", , , , \"2647241234\", , , , [7]], , \"264\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    AL: [, [, , \"(?:700\\\\d\\\\d|900)\\\\d{3}|8\\\\d{5,7}|(?:[2-5]|6\\\\d)\\\\d{7}\", , , , , , , [6, 7, 8, 9], [5]], [, , \"4505[0-2]\\\\d{3}|(?:[2358][16-9]\\\\d[2-9]|4410)\\\\d{4}|(?:[2358][2-5][2-9]|4(?:[2-57-9][2-9]|6\\\\d))\\\\d{5}\", , , , \"22345678\", , , [8], [5, 6, 7]], [, , \"6(?:[78][2-9]|9\\\\d)\\\\d{6}\", , , , \"672123456\", , , [9]], [, , \"800\\\\d{4}\", , , , \"8001234\", , , [7]], [\n      ,\n      ,\n      \"900[1-9]\\\\d\\\\d\",\n      ,\n      ,\n      ,\n      \"900123\",\n      ,\n      ,\n      [6]\n    ], [, , \"808[1-9]\\\\d\\\\d\", , , , \"808123\", , , [6]], [, , \"700[2-9]\\\\d{4}\", , , , \"70021234\", , , [8]], [, , , , , , , , , [-1]], \"AL\", 355, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{3,4})\", \"$1 $2\", [\"80|9\"], \"0$1\"], [, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"4[2-6]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[2358][2-5]|4\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{5})\", \"$1 $2\", [\"[23578]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"6\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    AM: [, [\n      ,\n      ,\n      \"(?:[1-489]\\\\d|55|60|77)\\\\d{6}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [8],\n      [5, 6]\n    ], [, , \"(?:(?:1[0-25]|47)\\\\d|2(?:2[2-46]|3[1-8]|4[2-69]|5[2-7]|6[1-9]|8[1-7])|3[12]2)\\\\d{5}\", , , , \"10123456\", , , , [5, 6]], [, , \"(?:33|4[1349]|55|77|88|9[13-9])\\\\d{6}\", , , , \"77123456\"], [, , \"800\\\\d{5}\", , , , \"80012345\"], [, , \"90[016]\\\\d{5}\", , , , \"90012345\"], [, , \"80[1-4]\\\\d{5}\", , , , \"80112345\"], [, , , , , , , , , [-1]], [, , \"60(?:2[78]|3[5-9]|4[02-9]|5[0-46-9]|[6-8]\\\\d|9[0-2])\\\\d{4}\", , , , \"60271234\"], \"AM\", 374, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"[89]0\"], \"0 $1\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{5})\",\n      \"$1 $2\",\n      [\"2|3[12]\"],\n      \"(0$1)\"\n    ], [, \"(\\\\d{2})(\\\\d{6})\", \"$1 $2\", [\"1|47\"], \"(0$1)\"], [, \"(\\\\d{2})(\\\\d{6})\", \"$1 $2\", [\"[3-9]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    AO: [\n      ,\n      [, , \"[29]\\\\d{8}\", , , , , , , [9]],\n      [, , \"2\\\\d(?:[0134][25-9]|[25-9]\\\\d)\\\\d{5}\", , , , \"222123456\"],\n      [, , \"9[1-79]\\\\d{7}\", , , , \"923123456\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"AO\",\n      244,\n      \"00\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[29]\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    AR: [\n      ,\n      [, , \"(?:11|[89]\\\\d\\\\d)\\\\d{8}|[2368]\\\\d{9}\", , , , , , , [10, 11], [6, 7, 8]],\n      [\n        ,\n        ,\n        \"3(?:7(?:1[15]|81)|8(?:21|4[16]|69|9[12]))[46]\\\\d{5}|(?:2(?:2(?:2[59]|44|52)|3(?:26|44)|47[35]|9(?:[07]2|2[26]|34|46))|3327)[45]\\\\d{5}|(?:2(?:657|9(?:54|66))|3(?:48[27]|7(?:55|77)|8(?:65|78)))[2-8]\\\\d{5}|(?:2(?:284|3(?:02|23)|477|622|920)|3(?:4(?:46|89|92)|541))[2-7]\\\\d{5}|(?:(?:11[0-8]|670)\\\\d|2(?:2(?:0[45]|1[2-6]|3[3-6])|3(?:[06]4|7[45])|494|6(?:04|1[2-8]|[36][45]|4[3-6])|80[45]|9(?:[17][4-6]|[48][45]|9[3-6]))|3(?:364|4(?:1[2-8]|[25][4-6]|3[3-6]|84)|5(?:1[2-9]|[38][4-6])|6(?:2[45]|44)|7[069][45]|8(?:0[45]|1[2-7]|3[4-6]|5[3-6]|7[2-6]|8[3-68])))\\\\d{6}|(?:2(?:2(?:62|81)|320|9(?:42|83))|3(?:329|4(?:62|7[16])|5(?:43|64)|7(?:18|5[17])))[2-6]\\\\d{5}|2(?:2(?:21|4[23]|6[145]|7[1-4]|8[356]|9[267])|3(?:16|3[13-8]|43|5[346-8]|9[3-5])|6(?:2[46]|4[78]|5[1568])|9(?:03|2[1457-9]|3[1356]|4[08]|[56][23]|82))4\\\\d{5}|(?:2(?:257|3(?:24|46|92)|9(?:01|23|64))|3(?:4(?:42|64)|5(?:25|37|4[47]|71)|7(?:35|72)|825))[3-6]\\\\d{5}|(?:2(?:2(?:02|2[3467]|4[156]|5[45]|6[6-8]|91)|3(?:1[47]|25|[45][25]|96)|47[48]|625|932)|3(?:38[2578]|4(?:0[0-24-9]|3[78]|4[457]|58|6[035-9]|72|83|9[136-8])|5(?:2[124]|[368][23]|4[2689]|7[2-6])|7(?:16|2[15]|3[14]|4[13]|5[468]|7[3-5]|8[26])|8(?:2[67]|3[278]|4[3-5]|5[78]|6[1-378]|[78]7|94)))[4-6]\\\\d{5}\",\n        ,\n        ,\n        ,\n        \"1123456789\",\n        ,\n        ,\n        [10],\n        [6, 7, 8]\n      ],\n      [\n        ,\n        ,\n        \"93(?:7(?:1[15]|81)|8(?:21|4[16]|69|9[12]))[46]\\\\d{5}|9(?:2(?:2(?:2[59]|44|52)|3(?:26|44)|47[35]|9(?:[07]2|2[26]|34|46))|3327)[45]\\\\d{5}|9(?:2(?:657|9(?:54|66))|3(?:48[27]|7(?:55|77)|8(?:65|78)))[2-8]\\\\d{5}|9(?:2(?:284|3(?:02|23)|477|622|920)|3(?:4(?:46|89|92)|541))[2-7]\\\\d{5}|(?:675\\\\d|9(?:11[0-8]\\\\d|2(?:2(?:0[45]|1[2-6]|3[3-6])|3(?:[06]4|7[45])|494|6(?:04|1[2-8]|[36][45]|4[3-6])|80[45]|9(?:[17][4-6]|[48][45]|9[3-6]))|3(?:364|4(?:1[2-8]|[25][4-6]|3[3-6]|84)|5(?:1[2-9]|[38][4-6])|6(?:2[45]|44)|7[069][45]|8(?:0[45]|1[2-7]|3[4-6]|5[3-6]|7[2-6]|8[3-68]))))\\\\d{6}|9(?:2(?:2(?:62|81)|320|9(?:42|83))|3(?:329|4(?:62|7[16])|5(?:43|64)|7(?:18|5[17])))[2-6]\\\\d{5}|92(?:2(?:21|4[23]|6[145]|7[1-4]|8[356]|9[267])|3(?:16|3[13-8]|43|5[346-8]|9[3-5])|6(?:2[46]|4[78]|5[1568])|9(?:03|2[1457-9]|3[1356]|4[08]|[56][23]|82))4\\\\d{5}|9(?:2(?:257|3(?:24|46|92)|9(?:01|23|64))|3(?:4(?:42|64)|5(?:25|37|4[47]|71)|7(?:35|72)|825))[3-6]\\\\d{5}|9(?:2(?:2(?:02|2[3467]|4[156]|5[45]|6[6-8]|91)|3(?:1[47]|25|[45][25]|96)|47[48]|625|932)|3(?:38[2578]|4(?:0[0-24-9]|3[78]|4[457]|58|6[035-9]|72|83|9[136-8])|5(?:2[124]|[368][23]|4[2689]|7[2-6])|7(?:16|2[15]|3[14]|4[13]|5[468]|7[3-5]|8[26])|8(?:2[67]|3[278]|4[3-5]|5[78]|6[1-378]|[78]7|94)))[4-6]\\\\d{5}\",\n        ,\n        ,\n        ,\n        \"91123456789\",\n        ,\n        ,\n        ,\n        [6, 7, 8]\n      ],\n      [, , \"800\\\\d{7,8}\", , , , \"8001234567\"],\n      [, , \"60[04579]\\\\d{7}\", , , , \"6001234567\", , , [10]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"AR\",\n      54,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0?(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:02?|1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[67])|4(?:7[3-578]|9)|6(?:[0136]|2[24-6]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\\\d|3[1-6]|4[02568]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|6|8[2578])|4(?:0[0-24-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6[02-9]|7[126]|8[2379]?|9[1-36-8])|5(?:1|2[1245]|3[237]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:[069]|1[1568]|2[15]|3[145]|4[13]|5[14-8]|7[2-57]|8[126])|8(?:[01]|2[15-7]|3[2578]?|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))15)?\",\n      \"9$1\",\n      ,\n      ,\n      [[, \"(\\\\d{3})\", \"$1\", [\"0|1(?:0[0-35-7]|1[02-5]|2[015]|3[47]|4[478])|911\"]], [, \"(\\\\d{2})(\\\\d{4})\", \"$1-$2\", [\"[1-9]\"]], [, \"(\\\\d{3})(\\\\d{4})\", \"$1-$2\", [\"[2-9]\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1-$2\", [\"[1-8]\"]], [\n        ,\n        \"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\n        \"$1 $2-$3\",\n        [\n          \"2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9])\",\n          \"2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8]))|2(?:2[24-9]|3[1-59]|47)\",\n          \"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5[56][46]|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\n          \"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|58|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|54(?:4|5[13-7]|6[89])|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:454|85[56])[46]|3(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"\n        ],\n        \"0$1\",\n        ,\n        1\n      ], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2-$3\", [\"1\"], \"0$1\", , 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1-$2-$3\", [\"[68]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2-$3\", [\"[23]\"], \"0$1\", , 1], [\n        ,\n        \"(\\\\d)(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\n        \"$2 15-$3-$4\",\n        [\n          \"9(?:2[2-469]|3[3-578])\",\n          \"9(?:2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9]))\",\n          \"9(?:2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8])))|92(?:2[24-9]|3[1-59]|47)\",\n          \"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5(?:[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\n          \"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|5(?:4(?:4|5[13-7]|6[89])|[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"\n        ],\n        \"0$1\"\n      ], [, \"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$2 15-$3-$4\", [\"91\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{5})\", \"$1-$2-$3\", [\"8\"], \"0$1\"], [, \"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$2 15-$3-$4\", [\"9\"], \"0$1\"]],\n      [\n        [\n          ,\n          \"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\n          \"$1 $2-$3\",\n          [\n            \"2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9])\",\n            \"2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8]))|2(?:2[24-9]|3[1-59]|47)\",\n            \"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5[56][46]|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\n            \"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|58|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|54(?:4|5[13-7]|6[89])|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:454|85[56])[46]|3(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"\n          ],\n          \"0$1\",\n          ,\n          1\n        ],\n        [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2-$3\", [\"1\"], \"0$1\", , 1],\n        [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1-$2-$3\", [\"[68]\"], \"0$1\"],\n        [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2-$3\", [\"[23]\"], \"0$1\", , 1],\n        [, \"(\\\\d)(\\\\d{4})(\\\\d{2})(\\\\d{4})\", \"$1 $2 $3-$4\", [\n          \"9(?:2[2-469]|3[3-578])\",\n          \"9(?:2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9]))\",\n          \"9(?:2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8])))|92(?:2[24-9]|3[1-59]|47)\",\n          \"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5(?:[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\n          \"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|5(?:4(?:4|5[13-7]|6[89])|[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"\n        ]],\n        [, \"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3-$4\", [\"91\"]],\n        [, \"(\\\\d{3})(\\\\d{3})(\\\\d{5})\", \"$1-$2-$3\", [\"8\"], \"0$1\"],\n        [, \"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3-$4\", [\"9\"]]\n      ],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , \"810\\\\d{7}\", , , , , , , [10]],\n      [, , \"810\\\\d{7}\", , , , \"8101234567\", , , [10]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    AS: [, [, , \"(?:[58]\\\\d\\\\d|684|900)\\\\d{7}\", , , , , , , [10], [7]], [, , \"684(?:274|6(?:22|33|44|55|77|88|9[19]))\\\\d{4}\", , , , \"6846221234\", , , , [7]], [, , \"684(?:2(?:48|5[2468]|7[246])|7(?:3[13]|70|82))\\\\d{4}\", , , , \"6847331234\", , , , [7]], [\n      ,\n      ,\n      \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"8002123456\"\n    ], [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"], [, , , , , , , , , [-1]], [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"], [, , , , , , , , , [-1]], \"AS\", 1, \"011\", \"1\", , , \"([267]\\\\d{6})$|1\", \"684$1\", , , , , [, , , , , , , , , [-1]], , \"684\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    AT: [, [\n      ,\n      ,\n      \"1\\\\d{3,12}|2\\\\d{6,12}|43(?:(?:0\\\\d|5[02-9])\\\\d{3,9}|2\\\\d{4,5}|[3467]\\\\d{4}|8\\\\d{4,6}|9\\\\d{4,7})|5\\\\d{4,12}|8\\\\d{7,12}|9\\\\d{8,12}|(?:[367]\\\\d|4[0-24-9])\\\\d{4,11}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [4, 5, 6, 7, 8, 9, 10, 11, 12, 13],\n      [3]\n    ], [, , \"1(?:11\\\\d|[2-9]\\\\d{3,11})|(?:316|463)\\\\d{3,10}|648[34]\\\\d{3,9}|(?:51|66|73)2\\\\d{3,10}|(?:2(?:1[467]|2[13-8]|5[2357]|6[1-46-8]|7[1-8]|8[124-7]|9[1458])|3(?:1[1-578]|3[23568]|4[5-7]|5[1378]|6[1-38]|8[3-68])|4(?:2[1-8]|35|7[1368]|8[2457])|5(?:2[1-8]|3[357]|4[147]|5[12578]|6[37])|6(?:13|2[1-47]|4[135-7]|5[468])|7(?:2[1-8]|35|4[13478]|5[68]|6[16-8]|7[1-6]|9[45]))\\\\d{4,10}\", , , , \"1234567890\", , , , [3]], [\n      ,\n      ,\n      \"6(?:485|(?:5[0-3579]|6[013-9]|[7-9]\\\\d)\\\\d)\\\\d{3,9}\",\n      ,\n      ,\n      ,\n      \"664123456\",\n      ,\n      ,\n      [7, 8, 9, 10, 11, 12, 13]\n    ], [, , \"800\\\\d{6,10}\", , , , \"800123456\", , , [9, 10, 11, 12, 13]], [, , \"(?:8[69][2-68]|9(?:0[01]|3[019]))\\\\d{6,10}\", , , , \"900123456\", , , [9, 10, 11, 12, 13]], [, , \"8(?:10|2[018])\\\\d{6,10}|828\\\\d{5}\", , , , \"810123456\", , , [8, 9, 10, 11, 12, 13]], [, , , , , , , , , [-1]], [, , \"5(?:0[1-9]|17|[79]\\\\d)\\\\d{2,10}|7[28]0\\\\d{6,10}\", , , , \"780123456\", , , [5, 6, 7, 8, 9, 10, 11, 12, 13]], \"AT\", 43, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{4})\", \"$1\", [\"14\"]], [, \"(\\\\d)(\\\\d{3,12})\", \"$1 $2\", [\"1(?:11|[2-9])\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})\", \"$1 $2\", [\"517\"], \"0$1\"], [\n      ,\n      \"(\\\\d{2})(\\\\d{3,5})\",\n      \"$1 $2\",\n      [\"5[079]\"],\n      \"0$1\"\n    ], [, \"(\\\\d{6})\", \"$1\", [\"[18]\"]], [, \"(\\\\d{3})(\\\\d{3,10})\", \"$1 $2\", [\"(?:31|4)6|51|6(?:48|5[0-3579]|[6-9])|7(?:20|32|8)|[89]\", \"(?:31|4)6|51|6(?:485|5[0-3579]|[6-9])|7(?:20|32|8)|[89]\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{3,9})\", \"$1 $2\", [\"[2-467]|5[2-6]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"5\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4,7})\", \"$1 $2 $3\", [\"5\"], \"0$1\"]], [[, \"(\\\\d)(\\\\d{3,12})\", \"$1 $2\", [\"1(?:11|[2-9])\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})\", \"$1 $2\", [\"517\"], \"0$1\"], [\n      ,\n      \"(\\\\d{2})(\\\\d{3,5})\",\n      \"$1 $2\",\n      [\"5[079]\"],\n      \"0$1\"\n    ], [, \"(\\\\d{3})(\\\\d{3,10})\", \"$1 $2\", [\"(?:31|4)6|51|6(?:48|5[0-3579]|[6-9])|7(?:20|32|8)|[89]\", \"(?:31|4)6|51|6(?:485|5[0-3579]|[6-9])|7(?:20|32|8)|[89]\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{3,9})\", \"$1 $2\", [\"[2-467]|5[2-6]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"5\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4,7})\", \"$1 $2 $3\", [\"5\"], \"0$1\"]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    AU: [, [\n      ,\n      ,\n      \"1(?:[0-79]\\\\d{7}(?:\\\\d(?:\\\\d{2})?)?|8[0-24-9]\\\\d{7})|[2-478]\\\\d{8}|1\\\\d{4,7}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [5, 6, 7, 8, 9, 10, 12]\n    ], [, , \"(?:(?:241|349)0\\\\d\\\\d|8(?:51(?:0(?:0[03-9]|[12479]\\\\d|3[2-9]|5[0-8]|6[1-9]|8[0-7])|1(?:[0235689]\\\\d|1[0-69]|4[0-589]|7[0-47-9])|2(?:0[0-79]|[18][13579]|2[14-9]|3[0-46-9]|[4-6]\\\\d|7[89]|9[0-4])|[34]\\\\d\\\\d)|91(?:(?:[0-58]\\\\d|6[0135-9])\\\\d|7(?:0[0-24-9]|[1-9]\\\\d)|9(?:[0-46-9]\\\\d|5[0-79]))))\\\\d{3}|(?:2(?:[0-26-9]\\\\d|3[0-8]|4[02-9]|5[0135-9])|3(?:[0-3589]\\\\d|4[0-578]|6[1-9]|7[0-35-9])|7(?:[013-57-9]\\\\d|2[0-8])|8(?:55|6[0-8]|[78]\\\\d|9[02-9]))\\\\d{6}\", , , , \"212345678\", , , [9], [8]], [\n      ,\n      ,\n      \"4(?:79[01]|83[0-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"412345678\",\n      ,\n      ,\n      [9]\n    ], [, , \"180(?:0\\\\d{3}|2)\\\\d{3}\", , , , \"1800123456\", , , [7, 10]], [, , \"190[0-26]\\\\d{6}\", , , , \"1900123456\", , , [10]], [, , \"13(?:00\\\\d{6}(?:\\\\d{2})?|45[0-4]\\\\d{3})|13\\\\d{4}\", , , , \"1300123456\", , , [6, 8, 10, 12]], [, , , , , , , , , [-1]], [, , \"14(?:5(?:1[0458]|[23][458])|71\\\\d)\\\\d{4}\", , , , \"147101234\", , , [9]], \"AU\", 61, \"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\", \"0\", , , \"(183[12])|0\", , \"0011\", , [[\n      ,\n      \"(\\\\d{2})(\\\\d{3,4})\",\n      \"$1 $2\",\n      [\"16\"],\n      \"0$1\"\n    ], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3\", [\"13\"]], [, \"(\\\\d{3})(\\\\d{3})\", \"$1 $2\", [\"19\"]], [, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"180\", \"1802\"]], [, \"(\\\\d{4})(\\\\d{3,4})\", \"$1 $2\", [\"19\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2,4})\", \"$1 $2 $3\", [\"16\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"14|4\"], \"0$1\"], [, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"[2378]\"], \"(0$1)\", \"$CC ($1)\"], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"1(?:30|[89])\"]], [, \"(\\\\d{4})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"130\"]]], [[\n      ,\n      \"(\\\\d{2})(\\\\d{3,4})\",\n      \"$1 $2\",\n      [\"16\"],\n      \"0$1\"\n    ], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2,4})\", \"$1 $2 $3\", [\"16\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"14|4\"], \"0$1\"], [, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"[2378]\"], \"(0$1)\", \"$CC ($1)\"], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"1(?:30|[89])\"]]], [, , \"163\\\\d{2,6}\", , , , \"1631234\", , , [5, 6, 7, 8, 9]], 1, , [, , \"1(?:3(?:00\\\\d{5}|45[0-4])|802)\\\\d{3}|1[38]00\\\\d{6}|13\\\\d{4}\", , , , , , , [6, 7, 8, 10, 12]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    AW: [, [, , \"(?:[25-79]\\\\d\\\\d|800)\\\\d{4}\", , , , , , , [7]], [\n      ,\n      ,\n      \"5(?:2\\\\d|8[1-9])\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"5212345\"\n    ], [, , \"(?:290|5[69]\\\\d|6(?:[03]0|22|4[0-2]|[69]\\\\d)|7(?:[34]\\\\d|7[07])|9(?:6[45]|9[4-8]))\\\\d{4}\", , , , \"5601234\"], [, , \"800\\\\d{4}\", , , , \"8001234\"], [, , \"900\\\\d{4}\", , , , \"9001234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"(?:28\\\\d|501)\\\\d{4}\", , , , \"5011234\"], \"AW\", 297, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[25-9]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    AX: [, [, , \"2\\\\d{4,9}|35\\\\d{4,5}|(?:60\\\\d\\\\d|800)\\\\d{4,6}|7\\\\d{5,11}|(?:[14]\\\\d|3[0-46-9]|50)\\\\d{4,8}\", , , , , , , [\n      5,\n      6,\n      7,\n      8,\n      9,\n      10,\n      11,\n      12\n    ]], [, , \"18[1-8]\\\\d{3,6}\", , , , \"181234567\", , , [6, 7, 8, 9]], [, , \"4946\\\\d{2,6}|(?:4[0-8]|50)\\\\d{4,8}\", , , , \"412345678\", , , [6, 7, 8, 9, 10]], [, , \"800\\\\d{4,6}\", , , , \"800123456\", , , [7, 8, 9]], [, , \"[67]00\\\\d{5,6}\", , , , \"600123456\", , , [8, 9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"AX\", 358, \"00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))\", \"0\", , , \"0\", , \"00\", , , , [, , , , , , , , , [-1]], , \"18\", [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"20\\\\d{4,8}|60[12]\\\\d{5,6}|7(?:099\\\\d{4,5}|5[03-9]\\\\d{3,7})|20[2-59]\\\\d\\\\d|(?:606|7(?:0[78]|1|3\\\\d))\\\\d{7}|(?:10|29|3[09]|70[1-5]\\\\d)\\\\d{4,8}\",\n      ,\n      ,\n      ,\n      \"10112345\"\n    ], , , [, , , , , , , , , [-1]]],\n    AZ: [, [, , \"365\\\\d{6}|(?:[124579]\\\\d|60|88)\\\\d{7}\", , , , , , , [9], [7]], [, , \"(?:2[12]428|3655[02])\\\\d{4}|(?:2(?:22[0-79]|63[0-28])|3654)\\\\d{5}|(?:(?:1[28]|46)\\\\d|2(?:[014-6]2|[23]3))\\\\d{6}\", , , , \"123123456\", , , , [7]], [, , \"36554\\\\d{4}|(?:[16]0|4[04]|5[015]|7[07]|99)\\\\d{7}\", , , , \"401234567\"], [, , \"88\\\\d{7}\", , , , \"881234567\"], [, , \"900200\\\\d{3}\", , , , \"900200123\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"AZ\", 994, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3\", [\"[1-9]\"]], [\n      ,\n      \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\n      \"$1 $2 $3 $4\",\n      [\"90\"],\n      \"0$1\"\n    ], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"1[28]|2|365|46\", \"1[28]|2|365[45]|46\", \"1[28]|2|365(?:4|5[02])|46\"], \"(0$1)\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[13-9]\"], \"0$1\"]], [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"90\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"1[28]|2|365|46\", \"1[28]|2|365[45]|46\", \"1[28]|2|365(?:4|5[02])|46\"], \"(0$1)\"], [\n      ,\n      \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\n      \"$1 $2 $3 $4\",\n      [\"[13-9]\"],\n      \"0$1\"\n    ]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    BA: [\n      ,\n      [, , \"6\\\\d{8}|(?:[35689]\\\\d|49|70)\\\\d{6}\", , , , , , , [8, 9], [6]],\n      [, , \"(?:3(?:[05-79][2-9]|1[4579]|[23][24-9]|4[2-4689]|8[2457-9])|49[2-579]|5(?:0[2-49]|[13][2-9]|[268][2-4679]|4[4689]|5[2-79]|7[2-69]|9[2-4689]))\\\\d{5}\", , , , \"30212345\", , , [8], [6]],\n      [, , \"6040\\\\d{5}|6(?:03|[1-356]|44|7\\\\d)\\\\d{6}\", , , , \"61123456\"],\n      [, , \"8[08]\\\\d{6}\", , , , \"80123456\", , , [8]],\n      [, , \"9[0246]\\\\d{6}\", , , , \"90123456\", , , [8]],\n      [, , \"8[12]\\\\d{6}\", , , , \"82123456\", , , [8]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"BA\",\n      387,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{3})(\\\\d{3})\", \"$1-$2\", [\"[2-9]\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"6[1-3]|[7-9]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2-$3\", [\"[3-5]|6[56]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"6\"], \"0$1\"]],\n      [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"6[1-3]|[7-9]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2-$3\", [\"[3-5]|6[56]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"6\"], \"0$1\"]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , \"703[235]0\\\\d{3}|70(?:2[0-5]|3[0146]|[56]0)\\\\d{4}\", , , , \"70341234\", , , [8]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    BB: [, [, , \"(?:246|[58]\\\\d\\\\d|900)\\\\d{7}\", , , , , , , [10], [7]], [, , \"246521[0369]\\\\d{3}|246(?:2(?:2[78]|7[0-4])|4(?:1[024-6]|2\\\\d|3[2-9])|5(?:20|[34]\\\\d|54|7[1-3])|6(?:2\\\\d|38)|7[35]7|9(?:1[89]|63))\\\\d{4}\", , , , \"2464123456\", , , , [7]], [, , \"246(?:(?:2(?:[3568]\\\\d|4[0-57-9])|3(?:5[2-9]|6[0-6])|4(?:46|5\\\\d)|69[5-7]|8(?:[2-5]\\\\d|83))\\\\d|52(?:1[147]|20))\\\\d{3}\", , , , \"2462501234\", , , , [7]], [\n      ,\n      ,\n      \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"8002123456\"\n    ], [, , \"(?:246976|900[2-9]\\\\d\\\\d)\\\\d{4}\", , , , \"9002123456\", , , , [7]], [, , , , , , , , , [-1]], [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"], [, , \"24631\\\\d{5}\", , , , \"2463101234\", , , , [7]], \"BB\", 1, \"011\", \"1\", , , \"([2-9]\\\\d{6})$|1\", \"246$1\", , , , , [, , , , , , , , , [-1]], , \"246\", [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"246(?:292|367|4(?:1[7-9]|3[01]|4[47-9]|67)|7(?:1[2-9]|2\\\\d|3[016]|53))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"2464301234\",\n      ,\n      ,\n      ,\n      [7]\n    ], , , [, , , , , , , , , [-1]]],\n    BD: [, [, , \"[1-469]\\\\d{9}|8[0-79]\\\\d{7,8}|[2-79]\\\\d{8}|[2-9]\\\\d{7}|[3-9]\\\\d{6}|[57-9]\\\\d{5}\", , , , , , , [6, 7, 8, 9, 10]], [\n      ,\n      ,\n      \"(?:4(?:31\\\\d\\\\d|423)|5222)\\\\d{3}(?:\\\\d{2})?|8332[6-9]\\\\d\\\\d|(?:3(?:03[56]|224)|4(?:22[25]|653))\\\\d{3,4}|(?:3(?:42[47]|529|823)|4(?:027|525|65(?:28|8))|562|6257|7(?:1(?:5[3-5]|6[12]|7[156]|89)|22[589]56|32|42675|52(?:[25689](?:56|8)|[347]8)|71(?:6[1267]|75|89)|92374)|82(?:2[59]|32)56|9(?:03[23]56|23(?:256|373)|31|5(?:1|2[4589]56)))\\\\d{3}|(?:3(?:02[348]|22[35]|324|422)|4(?:22[67]|32[236-9]|6(?:2[46]|5[57])|953)|5526|6(?:024|6655)|81)\\\\d{4,5}|(?:2(?:7(?:1[0-267]|2[0-289]|3[0-29]|4[01]|5[1-3]|6[013]|7[0178]|91)|8(?:0[125]|1[1-6]|2[0157-9]|3[1-69]|41|6[1-35]|7[1-5]|8[1-8]|9[0-6])|9(?:0[0-2]|1[0-4]|2[568]|3[3-6]|5[5-7]|6[0136-9]|7[0-7]|8[014-9]))|3(?:0(?:2[025-79]|3[2-4])|181|22[12]|32[2356]|824)|4(?:02[09]|22[348]|32[045]|523|6(?:27|54))|666(?:22|53)|7(?:22[57-9]|42[56]|82[35])8|8(?:0[124-9]|2(?:181|2[02-4679]8)|4[12]|[5-7]2)|9(?:[04]2|2(?:2|328)|81))\\\\d{4}|(?:2(?:[23]\\\\d|[45])\\\\d\\\\d|3(?:1(?:2[5-7]|[5-7])|425|822)|4(?:033|1\\\\d|[257]1|332|4(?:2[246]|5[25])|6(?:2[35]|56|62)|8(?:23|54)|92[2-5])|5(?:02[03489]|22[457]|32[35-79]|42[46]|6(?:[18]|53)|724|826)|6(?:023|2(?:2[2-5]|5[3-5]|8)|32[3478]|42[34]|52[47]|6(?:[18]|6(?:2[34]|5[24]))|[78]2[2-5]|92[2-6])|7(?:02|21\\\\d|[3-589]1|6[12]|72[24])|8(?:217|3[12]|[5-7]1)|9[24]1)\\\\d{5}|(?:(?:3[2-8]|5[2-57-9]|6[03-589])1|4[4689][18])\\\\d{5}|[59]1\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"27111234\"\n    ], [, , \"(?:1[13-9]\\\\d|644)\\\\d{7}|(?:3[78]|44|66)[02-9]\\\\d{7}\", , , , \"1812345678\", , , [10]], [, , \"80[03]\\\\d{7}\", , , , \"8001234567\", , , [10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"96(?:0[1-69]|1[0-479]|2[278]|3[13-9]|4[0134]|54|6[69]|7[78]|88)\\\\d{6}\", , , , \"9604123456\", , , [10]], \"BD\", 880, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{4,6})\", \"$1-$2\", [\"31[5-8]|[459]1\"], \"0$1\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{3,7})\",\n      \"$1-$2\",\n      [\"3(?:[67]|8[013-9])|4(?:6[168]|7|[89][18])|5(?:6[128]|9)|6(?:[15]|28|4[14])|7[2-589]|8(?:0[014-9]|[12])|9[358]|(?:3[2-5]|4[235]|5[2-578]|6[0389]|76|8[3-7]|9[24])1|(?:44|66)[01346-9]\"],\n      \"0$1\"\n    ], [, \"(\\\\d{4})(\\\\d{3,6})\", \"$1-$2\", [\"[13-9]|2[23]\"], \"0$1\"], [, \"(\\\\d)(\\\\d{7,8})\", \"$1-$2\", [\"2\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    BE: [, [, , \"4\\\\d{8}|[1-9]\\\\d{7}\", , , , , , , [8, 9]], [, , \"80[2-8]\\\\d{5}|(?:1[0-69]|[23][2-8]|4[23]|5\\\\d|6[013-57-9]|71|8[1-79]|9[2-4])\\\\d{6}\", , , , \"12345678\", , , [8]], [, , \"4[5-9]\\\\d{7}\", , , , \"450001234\", , , [9]], [, , \"800[1-9]\\\\d{4}\", , , , \"80012345\", , , [8]], [, , \"(?:70(?:2[0-57]|3[04-7]|44|6[04-69]|7[0579])|90\\\\d\\\\d)\\\\d{4}\", , , , \"90012345\", , , [8]], [\n      ,\n      ,\n      \"7879\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"78791234\",\n      ,\n      ,\n      [8]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"BE\", 32, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"(?:80|9)0\"], \"0$1\"], [, \"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[239]|4[23]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[15-8]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"4\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"78(?:0[578]|1[014-8]|2[25]|3[15-8]|48|5[05]|60|7[06-8]|9\\\\d)\\\\d{4}\", , , , \"78102345\", , , [8]], , , [, , , , , , , , , [-1]]],\n    BF: [, [\n      ,\n      ,\n      \"[024-7]\\\\d{7}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [8]\n    ], [, , \"2(?:0(?:49|5[23]|6[5-7]|9[016-9])|4(?:4[569]|5[4-6]|6[5-7]|7[0179])|5(?:[34]\\\\d|50|6[5-8]))\\\\d{4}\", , , , \"20491234\"], [, , \"(?:0[1-7]|4[4-6]|5[0-8]|[67]\\\\d)\\\\d{6}\", , , , \"70123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"BF\", 226, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[024-7]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    BG: [, [\n      ,\n      ,\n      \"00800\\\\d{7}|[2-7]\\\\d{6,7}|[89]\\\\d{6,8}|2\\\\d{5}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [6, 7, 8, 9, 12],\n      [4, 5]\n    ], [, , \"2\\\\d{5,7}|(?:43[1-6]|70[1-9])\\\\d{4,5}|(?:[36]\\\\d|4[124-7]|[57][1-9]|8[1-6]|9[1-7])\\\\d{5,6}\", , , , \"2123456\", , , [6, 7, 8], [4, 5]], [, , \"(?:43[07-9]|99[69]\\\\d)\\\\d{5}|(?:8[7-9]|98)\\\\d{7}\", , , , \"43012345\", , , [8, 9]], [, , \"(?:00800\\\\d\\\\d|800)\\\\d{5}\", , , , \"80012345\", , , [8, 12]], [, , \"90\\\\d{6}\", , , , \"90123456\", , , [8]], [, , \"700\\\\d{5}\", , , , \"70012345\", , , [8]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"BG\", 359, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{6})\", \"$1\", [\"1\"]], [, \"(\\\\d)(\\\\d)(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"2\"], \"0$1\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{4})\",\n      \"$1 $2\",\n      [\"43[1-6]|70[1-9]\"],\n      \"0$1\"\n    ], [, \"(\\\\d)(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"2\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\", \"$1 $2 $3\", [\"[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"(?:70|8)0\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{2})\", \"$1 $2 $3\", [\"43[1-7]|7\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[48]|9[08]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"9\"], \"0$1\"]], [[, \"(\\\\d)(\\\\d)(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"2\"], \"0$1\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{4})\",\n      \"$1 $2\",\n      [\"43[1-6]|70[1-9]\"],\n      \"0$1\"\n    ], [, \"(\\\\d)(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"2\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\", \"$1 $2 $3\", [\"[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"(?:70|8)0\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{2})\", \"$1 $2 $3\", [\"43[1-7]|7\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[48]|9[08]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"9\"], \"0$1\"]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    BH: [\n      ,\n      [\n        ,\n        ,\n        \"[136-9]\\\\d{7}\",\n        ,\n        ,\n        ,\n        ,\n        ,\n        ,\n        [8]\n      ],\n      [, , \"(?:1(?:3[1356]|6[0156]|7\\\\d)\\\\d|6(?:1[16]\\\\d|500|6(?:0\\\\d|3[12]|44|55|7[7-9]|88)|9[69][69])|7(?:[07]\\\\d\\\\d|1(?:11|78)))\\\\d{4}\", , , , \"17001234\"],\n      [, , \"(?:3(?:[0-79]\\\\d|8[0-57-9])\\\\d|6(?:3(?:00|33|6[16])|441|6(?:3[03-9]|[69]\\\\d|7[0-689])))\\\\d{4}\", , , , \"36001234\"],\n      [, , \"8[02369]\\\\d{6}\", , , , \"80123456\"],\n      [, , \"(?:87|9[0-8])\\\\d{6}\", , , , \"90123456\"],\n      [, , \"84\\\\d{6}\", , , , \"84123456\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"BH\",\n      973,\n      \"00\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[13679]|8[02-4679]\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    BI: [, [, , \"(?:[267]\\\\d|31)\\\\d{6}\", , , , , , , [8]], [, , \"(?:22|31)\\\\d{6}\", , , , \"22201234\"], [, , \"(?:29|6[1-9]|7[125-9])\\\\d{6}\", , , , \"79561234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"BI\", 257, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[2367]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    BJ: [, [, , \"(?:01\\\\d|8)\\\\d{7}\", , , , , , , [8, 10]], [, , \"012\\\\d{7}\", , , , \"0120211234\", , , [10]], [\n      ,\n      ,\n      \"01(?:2[5-9]|[4-69]\\\\d)\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"0195123456\",\n      ,\n      ,\n      [10]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"857[58]\\\\d{4}\", , , , \"85751234\", , , [8]], \"BJ\", 229, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"8\"]], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4 $5\", [\"0\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"81\\\\d{6}\", , , , \"81123456\", , , [8]], , , [, , , , , , , , , [-1]]],\n    BL: [\n      ,\n      [, , \"7090\\\\d{5}|(?:[56]9|[89]\\\\d)\\\\d{7}\", , , , , , , [9]],\n      [, , \"(?:59(?:0(?:2[7-9]|3[3-7]|5[12]|87)|87\\\\d)|80[6-9]\\\\d\\\\d)\\\\d{4}\", , , , \"590271234\"],\n      [, , \"(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5]))|7090[0-4])\\\\d{4}\", , , , \"690001234\"],\n      [, , \"80[0-5]\\\\d{6}\", , , , \"800012345\"],\n      [, , \"8[129]\\\\d{7}\", , , , \"810123456\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , \"9(?:(?:39[5-7]|76[018])\\\\d|475[0-6])\\\\d{4}\", , , , \"976012345\"],\n      \"BL\",\n      590,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    BM: [, [, , \"(?:441|[58]\\\\d\\\\d|900)\\\\d{7}\", , , , , , , [10], [7]], [, , \"441(?:[46]\\\\d\\\\d|5(?:4\\\\d|60|89))\\\\d{4}\", , , , \"4414123456\", , , , [7]], [\n      ,\n      ,\n      \"441(?:[2378]\\\\d|5[0-39]|9[02])\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"4413701234\",\n      ,\n      ,\n      ,\n      [7]\n    ], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\"], [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"], [, , , , , , , , , [-1]], [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"], [, , , , , , , , , [-1]], \"BM\", 1, \"011\", \"1\", , , \"([2-9]\\\\d{6})$|1\", \"441$1\", , , , , [, , , , , , , , , [-1]], , \"441\", [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], , , [, , , , , , , , , [-1]]],\n    BN: [, [, , \"[2-578]\\\\d{6}\", , , , , , , [7]], [, , \"22[0-7]\\\\d{4}|(?:2[013-9]|[34]\\\\d|5[0-25-9])\\\\d{5}\", , , , \"2345678\"], [, , \"(?:22[89]|[78]\\\\d\\\\d)\\\\d{4}\", , , , \"7123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"5[34]\\\\d{5}\", , , , \"5345678\"], \"BN\", 673, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[2-578]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    BO: [, [, , \"(?:[2-7]\\\\d\\\\d|8001)\\\\d{5}\", , , , , , , [8, 9], [7]], [\n      ,\n      ,\n      \"(?:2(?:2\\\\d\\\\d|5(?:11|[258]\\\\d|9[67])|6(?:12|2\\\\d|9[34])|8(?:2[34]|39|62))|3(?:3\\\\d\\\\d|4(?:6\\\\d|8[24])|8(?:25|42|5[257]|86|9[25])|9(?:[27]\\\\d|3[2-4]|4[248]|5[24]|6[2-6]))|4(?:4\\\\d\\\\d|6(?:11|[24689]\\\\d|72)))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"22123456\",\n      ,\n      ,\n      [8],\n      [7]\n    ], [, , \"(?:57|[67]\\\\d)\\\\d{6}\", , , , \"71234567\", , , [8]], [, , \"8001[07]\\\\d{4}\", , , , \"800171234\", , , [9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"50\\\\d{6}\", , , , \"50123456\", , , [8], [7]], \"BO\", 591, \"00(?:1\\\\d)?\", \"0\", , , \"0(1\\\\d)?\", , , , [[, \"(\\\\d)(\\\\d{7})\", \"$1 $2\", [\"[23]|4[46]|50\"], , \"0$CC $1\"], [, \"(\\\\d{8})\", \"$1\", [\"[5-7]\"], , \"0$CC $1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{4})\", \"$1 $2 $3\", [\"8\"], , \"0$CC $1\"]], , [, , , , , , , , , [-1]], , , [, , \"8001[07]\\\\d{4}\", , , , , , , [9]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    BQ: [, [\n      ,\n      ,\n      \"(?:[34]1|7\\\\d)\\\\d{5}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [7]\n    ], [, , \"(?:318[023]|41(?:6[023]|70)|7(?:1[578]|2[05]|50)\\\\d)\\\\d{3}\", , , , \"7151234\"], [, , \"(?:31(?:8[14-8]|9[14578])|416[14-9]|7(?:0[01]|7[07]|8\\\\d|9[056])\\\\d)\\\\d{3}\", , , , \"3181234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"BQ\", 599, \"00\", , , , , , , , , , [, , , , , , , , , [-1]], , \"[347]\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    BR: [, [, , \"[1-467]\\\\d{9,10}|55[0-46-9]\\\\d{8}|[34]\\\\d{7}|55\\\\d{7,8}|(?:5[0-46-9]|[89]\\\\d)\\\\d{7,9}\", , , , , , , [8, 9, 10, 11]], [\n      ,\n      ,\n      \"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-5]\\\\d{7}\",\n      ,\n      ,\n      ,\n      \"1123456789\",\n      ,\n      ,\n      [10],\n      [8]\n    ], [, , \"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])(?:7|9\\\\d)\\\\d{7}\", , , , \"11961234567\", , , [10, 11], [8, 9]], [, , \"800\\\\d{6,7}\", , , , \"800123456\", , , [9, 10]], [, , \"[59]00\\\\d{6,7}\", , , , \"500123456\", , , [9, 10]], [, , \"(?:30[03]\\\\d{3}|4(?:0(?:0\\\\d|20)|370|864))\\\\d{4}|300\\\\d{5}\", , , , \"40041234\", , , [8, 10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"BR\", 55, \"00(?:1[245]|2[1-35]|31|4[13]|[56]5|99)\", \"0\", , , \"(?:0|90)(?:(1[245]|2[1-35]|31|4[13]|[56]5|99)(\\\\d{10,11}))?\", \"$2\", , , [\n      [, \"(\\\\d{3,6})\", \"$1\", [\"1(?:1[25-8]|2[357-9]|3[02-68]|4[12568]|5|6[0-8]|8[015]|9[0-47-9])|321|610\"]],\n      [, \"(\\\\d{4})(\\\\d{4})\", \"$1-$2\", [\"300|4(?:0[02]|37|86)\", \"300|4(?:0(?:0|20)|370|864)\"]],\n      [, \"(\\\\d{4})(\\\\d{4})\", \"$1-$2\", [\"[2-57]\", \"[2357]|4(?:[0-24-9]|3(?:[0-689]|7[1-9]))\"]],\n      [, \"(\\\\d{3})(\\\\d{2,3})(\\\\d{4})\", \"$1 $2 $3\", [\"(?:[358]|90)0\"], \"0$1\"],\n      [, \"(\\\\d{5})(\\\\d{4})\", \"$1-$2\", [\"9\"]],\n      [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2-$3\", [\"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-57]\"], \"($1)\", \"0 $CC ($1)\"],\n      [, \"(\\\\d{2})(\\\\d{5})(\\\\d{4})\", \"$1 $2-$3\", [\"[16][1-9]|[2-57-9]\"], \"($1)\", \"0 $CC ($1)\"]\n    ], [[\n      ,\n      \"(\\\\d{4})(\\\\d{4})\",\n      \"$1-$2\",\n      [\"300|4(?:0[02]|37|86)\", \"300|4(?:0(?:0|20)|370|864)\"]\n    ], [, \"(\\\\d{3})(\\\\d{2,3})(\\\\d{4})\", \"$1 $2 $3\", [\"(?:[358]|90)0\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2-$3\", [\"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-57]\"], \"($1)\", \"0 $CC ($1)\"], [, \"(\\\\d{2})(\\\\d{5})(\\\\d{4})\", \"$1 $2-$3\", [\"[16][1-9]|[2-57-9]\"], \"($1)\", \"0 $CC ($1)\"]], [, , , , , , , , , [-1]], , , [, , \"(?:30[03]\\\\d{3}|4(?:0(?:0\\\\d|20)|864))\\\\d{4}|800\\\\d{6,7}|300\\\\d{5}\", , , , , , , [8, 9, 10]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    BS: [, [\n      ,\n      ,\n      \"(?:242|[58]\\\\d\\\\d|900)\\\\d{7}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [10],\n      [7]\n    ], [, , \"242(?:3(?:02|[236][1-9]|4[0-24-9]|5[0-68]|7[347]|8[0-4]|9[2-467])|461|502|6(?:0[1-5]|12|2[013]|[45]0|7[67]|8[78]|9[89])|7(?:02|88))\\\\d{4}\", , , , \"2423456789\", , , , [7]], [, , \"242(?:3(?:5[79]|7[56]|95)|4(?:[23][1-9]|4[1-35-9]|5[1-8]|6[2-8]|7\\\\d|81)|5(?:2[45]|3[35]|44|5[1-46-9]|65|77)|6[34]6|7(?:27|38)|8(?:0[1-9]|1[02-9]|2\\\\d|3[0-4]|[89]9))\\\\d{4}\", , , , \"2423591234\", , , , [7]], [, , \"242300\\\\d{4}|8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\", , , , [7]], [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"], [, , , , , , , , , [-1]], \"BS\", 1, \"011\", \"1\", , , \"([3-8]\\\\d{6})$|1\", \"242$1\", , , , , [, , , , , , , , , [-1]], , \"242\", [, , , , , , , , , [-1]], [, , \"242225\\\\d{4}\", , , , \"2422250123\"], , , [, , , , , , , , , [-1]]],\n    BT: [, [, , \"[178]\\\\d{7}|[2-8]\\\\d{6}\", , , , , , , [7, 8], [6]], [\n      ,\n      ,\n      \"(?:2[3-6]|[34][5-7]|5[236]|6[2-46]|7[246]|8[2-4])\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"2345678\",\n      ,\n      ,\n      [7],\n      [6]\n    ], [, , \"(?:1[67]|[78]7)\\\\d{6}\", , , , \"17123456\", , , [8]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"BT\", 975, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{3})\", \"$1 $2\", [\"[2-7]\"]], [, \"(\\\\d)(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[2-6]|7[246]|8[2-4]\"]], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"1[67]|[78]\"]]], [[, \"(\\\\d)(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[2-6]|7[246]|8[2-4]\"]], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"1[67]|[78]\"]]], [, , , , , , , , , [-1]], , , [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    BW: [, [, , \"(?:0800|(?:[37]|800)\\\\d)\\\\d{6}|(?:[2-6]\\\\d|90)\\\\d{5}\", , , , , , , [7, 8, 10]], [, , \"(?:2(?:4[0-48]|6[0-24]|9[0578])|3(?:1[0-35-9]|55|[69]\\\\d|7[013]|81)|4(?:6[03]|7[1267]|9[0-5])|5(?:3[03489]|4[0489]|7[1-47]|88|9[0-49])|6(?:2[1-35]|5[149]|8[013467]))\\\\d{4}\", , , , \"2401234\", , , [7]], [, , \"(?:321|7(?:[1-8]\\\\d|9[03]))\\\\d{5}\", , , , \"71123456\", , , [8]], [, , \"(?:0800|800\\\\d)\\\\d{6}\", , , , \"0800012345\", , , [10]], [, , \"90\\\\d{5}\", , , , \"9012345\", , , [7]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"79(?:1(?:[0-2]\\\\d|3[0-8])|2[0-7]\\\\d)\\\\d{3}\",\n      ,\n      ,\n      ,\n      \"79101234\",\n      ,\n      ,\n      [8]\n    ], \"BW\", 267, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{5})\", \"$1 $2\", [\"90\"]], [, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[24-6]|3[15-9]\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[37]\"]], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"0\"]], [, \"(\\\\d{3})(\\\\d{4})(\\\\d{3})\", \"$1 $2 $3\", [\"8\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    BY: [, [, , \"(?:[12]\\\\d|33|44|902)\\\\d{7}|8(?:0[0-79]\\\\d{5,7}|[1-7]\\\\d{9})|8(?:1[0-489]|[5-79]\\\\d)\\\\d{7}|8[1-79]\\\\d{6,7}|8[0-79]\\\\d{5}|8\\\\d{5}\", , , , , , , [\n      6,\n      7,\n      8,\n      9,\n      10,\n      11\n    ], [5]], [, , \"(?:1(?:5(?:1[1-5]|[24]\\\\d|6[2-4]|9[1-7])|6(?:[235]\\\\d|4[1-7])|7\\\\d\\\\d)|2(?:1(?:[246]\\\\d|3[0-35-9]|5[1-9])|2(?:[235]\\\\d|4[0-8])|3(?:[26]\\\\d|3[02-79]|4[024-7]|5[03-7])))\\\\d{5}\", , , , \"152450911\", , , [9], [5, 6, 7]], [, , \"(?:2(?:5[5-79]|9[1-9])|(?:33|44)\\\\d)\\\\d{6}\", , , , \"294911911\", , , [9]], [, , \"800\\\\d{3,7}|8(?:0[13]|20\\\\d)\\\\d{7}\", , , , \"8011234567\"], [, , \"(?:810|902)\\\\d{7}\", , , , \"9021234567\", , , [10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"249\\\\d{6}\", , , , \"249123456\", , , [9]], \"BY\", 375, \"810\", \"8\", , , \"0|80?\", , \"8~10\", , [[\n      ,\n      \"(\\\\d{3})(\\\\d{3})\",\n      \"$1 $2\",\n      [\"800\"],\n      \"8 $1\"\n    ], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2,4})\", \"$1 $2 $3\", [\"800\"], \"8 $1\"], [, \"(\\\\d{4})(\\\\d{2})(\\\\d{3})\", \"$1 $2-$3\", [\"1(?:5[169]|6[3-5]|7[179])|2(?:1[35]|2[34]|3[3-5])\", \"1(?:5[169]|6(?:3[1-3]|4|5[125])|7(?:1[3-9]|7[0-24-6]|9[2-7]))|2(?:1[35]|2[34]|3[3-5])\"], \"8 0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2-$3-$4\", [\"1(?:[56]|7[467])|2[1-3]\"], \"8 0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2-$3-$4\", [\"[1-4]\"], \"8 0$1\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\"[89]\"],\n      \"8 $1\"\n    ]], , [, , , , , , , , , [-1]], , , [, , \"800\\\\d{3,7}|(?:8(?:0[13]|10|20\\\\d)|902)\\\\d{7}\"], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    BZ: [, [, , \"(?:0800\\\\d|[2-8])\\\\d{6}\", , , , , , , [7, 11]], [, , \"(?:2(?:[02]\\\\d|36|[68]0)|[3-58](?:[02]\\\\d|[68]0)|7(?:[02]\\\\d|32|[68]0))\\\\d{4}\", , , , \"2221234\", , , [7]], [, , \"6[0-35-7]\\\\d{5}\", , , , \"6221234\", , , [7]], [, , \"0800\\\\d{7}\", , , , \"08001234123\", , , [11]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"BZ\", 501, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1-$2\", [\"[2-8]\"]], [\n      ,\n      \"(\\\\d)(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\n      \"$1-$2-$3-$4\",\n      [\"0\"]\n    ]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CA: [\n      ,\n      [, , \"[2-9]\\\\d{9}|3\\\\d{6}\", , , , , , , [7, 10]],\n      [, , \"(?:2(?:04|[23]6|[48]9|5[07]|63)|3(?:06|43|54|6[578]|82)|4(?:03|1[68]|[26]8|3[178]|50|74)|5(?:06|1[49]|48|79|8[147])|6(?:04|[18]3|39|47|72)|7(?:0[59]|42|53|78|8[02])|8(?:[06]7|19|25|7[39])|9(?:0[25]|42))[2-9]\\\\d{6}\", , , , \"5062345678\", , , [10], [7]],\n      [\n        ,\n        ,\n        \"(?:2(?:04|[23]6|[48]9|5[07]|63)|3(?:06|43|54|6[578]|82)|4(?:03|1[68]|[26]8|3[178]|50|74)|5(?:06|1[49]|48|79|8[147])|6(?:04|[18]3|39|47|72)|7(?:0[59]|42|53|78|8[02])|8(?:[06]7|19|25|7[39])|9(?:0[25]|42))[2-9]\\\\d{6}\",\n        ,\n        ,\n        ,\n        \"5062345678\",\n        ,\n        ,\n        [10],\n        [7]\n      ],\n      [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\", , , [10]],\n      [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\", , , [10]],\n      [, , , , , , , , , [-1]],\n      [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|(?:5(?:2[125-9]|3[23]|44|66|77|88)|6(?:22|33))[2-9]\\\\d{6}\", , , , \"5219023456\", , , [10]],\n      [, , \"600[2-9]\\\\d{6}\", , , , \"6002012345\", , , [10]],\n      \"CA\",\n      1,\n      \"011\",\n      \"1\",\n      ,\n      ,\n      \"1\",\n      ,\n      ,\n      1,\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , \"310\\\\d{4}\", , , , \"3101234\", , , [7]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    CC: [, [, , \"1(?:[0-79]\\\\d{8}(?:\\\\d{2})?|8[0-24-9]\\\\d{7})|[148]\\\\d{8}|1\\\\d{5,7}\", , , , , , , [6, 7, 8, 9, 10, 12]], [, , \"8(?:51(?:0(?:02|31|60|89)|1(?:18|76)|223)|91(?:0(?:1[0-2]|29)|1(?:[28]2|50|79)|2(?:10|64)|3(?:[06]8|22)|4[29]8|62\\\\d|70[23]|959))\\\\d{3}\", , , , \"891621234\", , , [9], [8]], [, , \"4(?:79[01]|83[0-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}\", , , , \"412345678\", , , [9]], [\n      ,\n      ,\n      \"180(?:0\\\\d{3}|2)\\\\d{3}\",\n      ,\n      ,\n      ,\n      \"1800123456\",\n      ,\n      ,\n      [7, 10]\n    ], [, , \"190[0-26]\\\\d{6}\", , , , \"1900123456\", , , [10]], [, , \"13(?:00\\\\d{6}(?:\\\\d{2})?|45[0-4]\\\\d{3})|13\\\\d{4}\", , , , \"1300123456\", , , [6, 8, 10, 12]], [, , , , , , , , , [-1]], [, , \"14(?:5(?:1[0458]|[23][458])|71\\\\d)\\\\d{4}\", , , , \"147101234\", , , [9]], \"CC\", 61, \"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\", \"0\", , , \"([59]\\\\d{7})$|0\", \"8$1\", \"0011\", , , , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CD: [, [, , \"(?:(?:[189]|5\\\\d)\\\\d|2)\\\\d{7}|[1-68]\\\\d{6}\", , , , , , , [7, 8, 9, 10]], [\n      ,\n      ,\n      \"(?:(?:12|573)\\\\d\\\\d|276)\\\\d{5}|[1-6]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"1234567\"\n    ], [, , \"88\\\\d{5}|(?:8[0-69]|9[016-9])\\\\d{7}\", , , , \"991234567\", , , [7, 9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"CD\", 243, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"88\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{5})\", \"$1 $2\", [\"[1-6]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{4})\", \"$1 $2 $3\", [\"2\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"1\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[89]\"], \"0$1\"], [\n      ,\n      \"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\n      \"$1 $2 $3 $4\",\n      [\"5\"],\n      \"0$1\"\n    ]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CF: [, [, , \"8776\\\\d{4}|(?:[27]\\\\d|61)\\\\d{6}\", , , , , , , [8]], [, , \"(?:2[12]|61)\\\\d{6}\", , , , \"21612345\"], [, , \"7[02-7]\\\\d{6}\", , , , \"70012345\"], [, , , , , , , , , [-1]], [, , \"8776\\\\d{4}\", , , , \"87761234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"CF\", 236, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[26-8]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CG: [\n      ,\n      [, , \"222\\\\d{6}|(?:0\\\\d|80)\\\\d{7}\", , , , , , , [9]],\n      [, , \"222[1-589]\\\\d{5}\", , , , \"222123456\"],\n      [, , \"026(?:1[0-5]|6[6-9])\\\\d{4}|0(?:[14-6]\\\\d\\\\d|2(?:40|5[5-8]|6[07-9]))\\\\d{5}\", , , , \"061234567\"],\n      [, , , , , , , , , [-1]],\n      [, , \"80[0-2]\\\\d{6}\", , , , \"800123456\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"CG\",\n      242,\n      \"00\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"8\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[02]\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    CH: [, [, , \"8\\\\d{11}|[2-9]\\\\d{8}\", , , , , , , [9, 12]], [\n      ,\n      ,\n      \"(?:2[12467]|3[1-4]|4[134]|5[256]|6[12]|[7-9]1)\\\\d{7}\",\n      ,\n      ,\n      ,\n      \"212345678\",\n      ,\n      ,\n      [9]\n    ], [, , \"(?:6[89]|7[235-9])\\\\d{7}\", , , , \"781234567\", , , [9]], [, , \"800\\\\d{6}\", , , , \"800123456\", , , [9]], [, , \"90[016]\\\\d{6}\", , , , \"900123456\", , , [9]], [, , \"84[0248]\\\\d{6}\", , , , \"840123456\", , , [9]], [, , \"878\\\\d{6}\", , , , \"878123456\", , , [9]], [, , , , , , , , , [-1]], \"CH\", 41, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"8[047]|90\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[2-79]|81\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4 $5\", [\"8\"], \"0$1\"]], , [\n      ,\n      ,\n      \"74[0248]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"740123456\",\n      ,\n      ,\n      [9]\n    ], , , [, , , , , , , , , [-1]], [, , \"5[18]\\\\d{7}\", , , , \"581234567\", , , [9]], , , [, , \"860\\\\d{9}\", , , , \"860123456789\", , , [12]]],\n    CI: [, [, , \"[02]\\\\d{9}\", , , , , , , [10]], [, , \"2(?:[15]\\\\d{3}|7(?:2(?:0[23]|1[2357]|2[245]|3[45]|4[3-5])|3(?:06|1[69]|[2-6]7)))\\\\d{5}\", , , , \"2123456789\"], [, , \"0[157]\\\\d{8}\", , , , \"0123456789\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"CI\", 225, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d)(\\\\d{5})\", \"$1 $2 $3 $4\", [\"2\"]], [\n      ,\n      \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\n      \"$1 $2 $3 $4\",\n      [\"0\"]\n    ]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CK: [, [, , \"[2-578]\\\\d{4}\", , , , , , , [5]], [, , \"(?:2\\\\d|3[13-7]|4[1-5])\\\\d{3}\", , , , \"21234\"], [, , \"[578]\\\\d{4}\", , , , \"71234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"CK\", 682, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{3})\", \"$1 $2\", [\"[2-578]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CL: [, [, , \"12300\\\\d{6}|6\\\\d{9,10}|[2-9]\\\\d{8}\", , , , , , , [9, 10, 11]], [\n      ,\n      ,\n      \"2(?:1982[0-6]|3314[05-9])\\\\d{3}|(?:2(?:1(?:160|962)|3(?:(?:[24]\\\\d|50)\\\\d|3(?:[0346-9]\\\\d|1[0-35-9]|2[1-9]|5[0-24-9])|600)|646[59])|(?:600|80[1-9])\\\\d\\\\d|9(?:(?:10[0-2]|7[1-9]\\\\d)\\\\d|3(?:[0-57-9]\\\\d\\\\d|6(?:0[02-9]|[1-9]\\\\d))|6(?:[0-8]\\\\d\\\\d|9(?:[02-79]\\\\d|1[05-9]))|9(?:[03-9]\\\\d\\\\d|1(?:[0235-9]\\\\d|4[0-24-9])|2(?:[0-79]\\\\d|8[0-46-9]))))\\\\d{4}|(?:22|3[2-5]|[47][1-35]|5[1-3578]|6[13-57]|8[1-9]|9[2458])\\\\d{7}\",\n      ,\n      ,\n      ,\n      \"600123456\",\n      ,\n      ,\n      [9]\n    ], [, , \"2(?:1982[0-6]|3314[05-9])\\\\d{3}|(?:2(?:1(?:160|962)|3(?:(?:[24]\\\\d|50)\\\\d|3(?:[0346-9]\\\\d|1[0-35-9]|2[1-9]|5[0-24-9])|600)|646[59])|80[1-8]\\\\d\\\\d|9(?:(?:10[0-2]|7[1-9]\\\\d)\\\\d|3(?:[0-57-9]\\\\d\\\\d|6(?:0[02-9]|[1-9]\\\\d))|6(?:[0-8]\\\\d\\\\d|9(?:[02-79]\\\\d|1[05-9]))|9(?:[03-9]\\\\d\\\\d|1(?:[0235-9]\\\\d|4[0-24-9])|2(?:[0-79]\\\\d|8[0-46-9]))))\\\\d{4}|(?:22|3[2-5]|[47][1-35]|5[1-3578]|6[13-57]|8[1-9]|9[2458])\\\\d{7}\", , , , \"221234567\", , , [9]], [, , \"(?:123|8)00\\\\d{6}\", , , , \"800123456\", , , [9, 11]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , \"600\\\\d{7,8}\", , , , \"6001234567\", , , [10, 11]], [, , , , , , , , , [-1]], [, , \"44\\\\d{7}\", , , , \"441234567\", , , [9]], \"CL\", 56, \"(?:0|1(?:1[0-69]|2[02-5]|5[13-58]|69|7[0167]|8[018]))0\", , , , , , , , [[, \"(\\\\d{4})\", \"$1\", [\"1(?:[03-589]|21)|[29]0|78\"]], [, \"(\\\\d{5})(\\\\d{4})\", \"$1 $2\", [\"219\", \"2196\"], \"($1)\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"60|809\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"44\"]], [, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"2[1-36]\"], \"($1)\"], [, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"9(?:10|[2-9])\"]], [\n      ,\n      \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\"3[2-5]|[47]|5[1-3578]|6[13-57]|8(?:0[1-8]|[1-9])\"],\n      \"($1)\"\n    ], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"60|8\"]], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"1\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"60\"]]], [[, \"(\\\\d{5})(\\\\d{4})\", \"$1 $2\", [\"219\", \"2196\"], \"($1)\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"60|809\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"44\"]], [, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"2[1-36]\"], \"($1)\"], [, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"9(?:10|[2-9])\"]], [\n      ,\n      \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\"3[2-5]|[47]|5[1-3578]|6[13-57]|8(?:0[1-8]|[1-9])\"],\n      \"($1)\"\n    ], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"60|8\"]], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"1\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"60\"]]], [, , , , , , , , , [-1]], , , [, , \"600\\\\d{7,8}\", , , , , , , [10, 11]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CM: [\n      ,\n      [, , \"[26]\\\\d{8}|88\\\\d{6,7}\", , , , , , , [8, 9]],\n      [, , \"2(?:22|33)\\\\d{6}\", , , , \"222123456\", , , [9]],\n      [, , \"(?:24[23]|6(?:[25-9]\\\\d|4[0-2]))\\\\d{6}\", , , , \"671234567\", , , [9]],\n      [, , \"88\\\\d{6,7}\", , , , \"88012345\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"CM\",\n      237,\n      \"00\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"88\"]], [, \"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4 $5\", [\"[26]|88\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    CN: [, [, , \"(?:(?:1[03-689]|2\\\\d)\\\\d\\\\d|6)\\\\d{8}|1\\\\d{10}|[126]\\\\d{6}(?:\\\\d(?:\\\\d{2})?)?|86\\\\d{5,6}|(?:[3-579]\\\\d|8[0-57-9])\\\\d{5,9}\", , , , , , , [7, 8, 9, 10, 11, 12], [5, 6]], [\n      ,\n      ,\n      \"(?:10(?:[02-79]\\\\d\\\\d|[18](?:0[1-9]|[1-9]\\\\d))|2(?:[02-57-9]\\\\d{3}|1(?:[18](?:0[1-9]|[1-9]\\\\d)|[2-79]\\\\d\\\\d))|(?:41[03]|8078|9(?:78|94))\\\\d\\\\d)\\\\d{5}|(?:10|2[0-57-9])(?:1(?:00|23)\\\\d\\\\d|95\\\\d{3,4})|(?:41[03]|9(?:78|94))(?:100\\\\d\\\\d|95\\\\d{3,4})|8078123|(?:43[35]|754|851)\\\\d{7,8}|(?:43[35]|754|851)(?:1(?:00\\\\d|23)\\\\d|95\\\\d{3,4})|(?:3(?:11|7[179])|4(?:[15]1|3[12])|5(?:1\\\\d|2[37]|3[12]|51|7[13-79]|9[15])|7(?:[39]1|5[57]|6[09])|8(?:71|98))(?:[02-8]\\\\d{7}|1(?:0(?:0\\\\d\\\\d(?:\\\\d{3})?|[1-9]\\\\d{5})|[13-9]\\\\d{6}|2(?:[0-24-9]\\\\d{5}|3\\\\d(?:\\\\d{4})?))|9(?:[0-46-9]\\\\d{6}|5\\\\d{3}(?:\\\\d(?:\\\\d{2})?)?))|(?:3(?:1[02-9]|35|49|5\\\\d|7[02-68]|9[1-68])|4(?:1[24-9]|2[179]|3[46-9]|5[2-9]|6[47-9]|7\\\\d|8[23])|5(?:3[03-9]|4[36]|5[02-9]|6[1-46]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[17]\\\\d|2[248]|3[04-9]|4[3-6]|5[0-3689]|6[2368]|9[02-9])|8(?:1[236-8]|2[5-7]|3\\\\d|5[2-9]|7[02-9]|8[36-8]|9[1-7])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))(?:[02-8]\\\\d{6}|1(?:0(?:0\\\\d\\\\d(?:\\\\d{2})?|[1-9]\\\\d{4})|[13-9]\\\\d{5}|2(?:[0-24-9]\\\\d{4}|3\\\\d(?:\\\\d{3})?))|9(?:[0-46-9]\\\\d{5}|5\\\\d{3,5}))\",\n      ,\n      ,\n      ,\n      \"1012345678\",\n      ,\n      ,\n      [7, 8, 9, 10, 11],\n      [5, 6]\n    ], [, , \"1(?:610\\\\d|740[0-5])\\\\d{6}|1(?:[38]\\\\d|4[57]|[59][0-35-9]|6[25-7]|7[0-35-8])\\\\d{8}\", , , , \"13123456789\", , , [11]], [, , \"(?:(?:10|21)8|8)00\\\\d{7}\", , , , \"8001234567\", , , [10, 12]], [, , \"16[08]\\\\d{5}\", , , , \"16812345\", , , [8]], [\n      ,\n      ,\n      \"10(?:10\\\\d{4}|96\\\\d{3,4})|400\\\\d{7}|950\\\\d{7,8}|(?:2[0-57-9]|3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))96\\\\d{3,4}\",\n      ,\n      ,\n      ,\n      \"4001234567\",\n      ,\n      ,\n      [7, 8, 9, 10, 11],\n      [5, 6]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"CN\", 86, \"00|1(?:[12]\\\\d|79)\\\\d\\\\d00\", \"0\", , , \"(1(?:[12]\\\\d|79)\\\\d\\\\d)|0\", , \"00\", , [\n      [, \"(\\\\d{5,6})\", \"$1\", [\"1(?:00|2[13])|9[56]\", \"1(?:00|2(?:1|39))|9[56]\", \"1(?:00|2(?:1|395))|9[56]\"]],\n      [, \"(\\\\d{5,6})\", \"$1\", [\"1(?:0|23)|781|[1-9]12\", \"1(?:0|23)|7812|[1-9]123\", \"1(?:0|23(?:[0-8]|9[0-46-9]))|78123|[1-9]123\"]],\n      [\n        ,\n        \"(\\\\d{2})(\\\\d{5,6})\",\n        \"$1 $2\",\n        [\n          \"(?:10|2[0-57-9])[19]|3(?:[157]|35|49|9[1-68])|4(?:1[124-9]|2[179]|6[47-9]|7|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:07|1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3|4[13]|5[1-5]|7[0-79]|9[0-35-9])|(?:4[35]|59|85)[1-9]\",\n          \"(?:10|2[0-57-9])(?:1[02]|9[56])|8078|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))1\",\n          \"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|80781|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))12\",\n          \"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|807812|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\",\n          \"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:078|1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\"\n        ],\n        \"0$1\",\n        \"$CC $1\"\n      ],\n      [, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\n        \"[1-9]\",\n        \"1[1-9]|26|[3-9]|(?:10|2[0-57-9])(?:[0-8]|9[0-47-9])\",\n        \"1(?:0(?:[02-8]|1(?:[013-9]|2[0-24-9])|9[0-47-9])|[1-9])|2(?:[0-57-9](?:[02-8]|1(?:0[1-9]|[13-9]|2[0-24-9])|9[0-47-9])|6)|[3-9]\",\n        \"1(?:0(?:[02-8]|1(?:[013-9]|2[0-24-9])|9[0-47-9])|[1-9])|2(?:[0-57-9](?:[02-8]|1(?:0[1-9]|[13-9]|2[0-24-9])|9[0-47-9])|6)|3(?:[0268]|3[0-46-9]|4[0-8]|9[079])|4(?:[049]|1[03]|2[02-68]|[35]0|6[0-356]|8[014-9])|5(?:0|2[0-24-689]|4[0-2457-9]|6[057-9]|8[1-9]|90)|6(?:[0-24578]|3[06-9]|6[14-79]|9[03-9])|7(?:0[02-9]|2[0135-79]|3[23]|4[0-27-9]|6[1457]|8)|8(?:[046]|1[01459]|2[0-489]|50|8[0-2459]|9[09])|9(?:0[0457]|1[08]|[268]|4[024-9]|5[06-9]|78|94)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))(?:[02-9]|1(?:[013-9]|2[0-24-9]))\",\n        \"1(?:0(?:[02-8]|1(?:[013-9]|2[0-24-9])|9[0-47-9])|[1-9])|2(?:[0-57-9](?:[02-8]|1(?:0[1-9]|[13-9]|2[0-24-9])|9[0-47-9])|6)|3(?:[0268]|3[0-46-9]|4[0-8]|9[079])|4(?:[049]|1[03]|2[02-68]|[35]0|6[0-356]|8[014-9])|5(?:0|2[0-24-689]|4[0-2457-9]|6[057-9]|8[1-9]|90)|6(?:[0-24578]|3[06-9]|6[14-79]|9[03-9])|7(?:0[02-9]|2[0135-79]|3[23]|4[0-27-9]|6[1457]|8)|8(?:0(?:[0-689]|7[0-79])|1[01459]|2[0-489]|[46]|50|8[0-2459]|9[09])|9(?:0[0457]|1[08]|[268]|4[024-9]|5[06-9]|78|94)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:078|1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))(?:[02-9]|1(?:[013-9]|2[0-24-9]))\"\n      ]],\n      [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"16[08]\"]],\n      [\n        ,\n        \"(\\\\d{3})(\\\\d{5,6})\",\n        \"$1 $2\",\n        [\n          \"3(?:[157]|35|49|9[1-68])|4(?:[17]|2[179]|6[47-9]|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])|(?:4[35]|59|85)[1-9]\",\n          \"(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))[19]\",\n          \"85[23](?:10|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:10|9[56])\",\n          \"85[23](?:100|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:100|9[56])\"\n        ],\n        \"0$1\",\n        \"$CC $1\"\n      ],\n      [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\n        \"[1-9]\",\n        \"1(?:0(?:[02-8]|1[1-9]|9[0-47-9])|[1-9])|2(?:[0-57-9](?:[0-8]|9[0-47-9])|6)|[3-9]\",\n        \"1(?:0(?:[02-8]|1[1-9]|9[0-47-9])|[1-9])|26|3(?:[0268]|4[0-8]|9[079])|4(?:[049]|2[02-68]|[35]0|6[0-356]|8[014-9])|5(?:0|2[0-24-689]|4[0-2457-9]|6[057-9]|8[1-9]|90)|6(?:[0-24578]|3[06-9]|6[14-79]|9[03-9])|7(?:0[02-9]|2[0135-79]|3[23]|4[0-27-9]|6[1457]|8)|8(?:[046]|1[01459]|2[0-489]|5(?:0|[23][0-8])|8[0-2459]|9[09])|9(?:0[0457]|1[08]|[268]|4[024-9]|5[06-9])|(?:33|85[23]9)[0-46-9]|(?:2[0-57-9]|3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:[0-8]|9[0-47-9])\",\n        \"1(?:0[02-8]|[1-9])|2(?:[0-57-9][0-8]|6)|3(?:[0268]|3[0-46-9]|4[0-8]|9[079])|4(?:[049]|2[02-68]|[35]0|6[0-356]|8[014-9])|5(?:0|2[0-24-689]|4[0-2457-9]|6[057-9]|90)|6(?:[0-24578]|3[06-9]|6[14-79]|9[03-9])|7(?:0[02-9]|2[0135-79]|3[23]|4[0-27-9]|6[1457]|8)|8(?:[046]|1[01459]|2[0-489]|5(?:0|[23](?:[02-8]|1[1-9]|9[0-46-9]))|8[0-2459]|9[09])|9(?:0[0457]|1[08]|[268]|4[024-9]|5[06-9])|(?:10|2[0-57-9])9[0-47-9]|(?:101|58|85[23]10)[1-9]|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:[02-8]|1(?:0[1-9]|[1-9])|9[0-47-9])\"\n      ]],\n      [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"(?:4|80)0\"]],\n      [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"10|2(?:[02-57-9]|1[1-9])\", \"10|2(?:[02-57-9]|1[1-9])\", \"10[0-79]|2(?:[02-57-9]|1[1-79])|(?:10|21)8(?:0[1-9]|[1-9])\"], \"0$1\", \"$CC $1\", 1],\n      [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"3(?:[3-59]|7[02-68])|4(?:[26-8]|3[3-9]|5[2-9])|5(?:3[03-9]|[468]|7[028]|9[2-46-9])|6|7(?:[0-247]|3[04-9]|5[0-4689]|6[2368])|8(?:[1-358]|9[1-7])|9(?:[013479]|5[1-5])|(?:[34]1|55|79|87)[02-9]\"], \"0$1\", \"$CC $1\", 1],\n      [\n        ,\n        \"(\\\\d{3})(\\\\d{7,8})\",\n        \"$1 $2\",\n        [\"9\"]\n      ],\n      [, \"(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"80\"], \"0$1\", \"$CC $1\", 1],\n      [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"[3-578]\"], \"0$1\", \"$CC $1\", 1],\n      [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"1[3-9]\"], , \"$CC $1\"],\n      [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3 $4\", [\"[12]\"], \"0$1\", , 1]\n    ], [[\n      ,\n      \"(\\\\d{2})(\\\\d{5,6})\",\n      \"$1 $2\",\n      [\n        \"(?:10|2[0-57-9])[19]|3(?:[157]|35|49|9[1-68])|4(?:1[124-9]|2[179]|6[47-9]|7|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:07|1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3|4[13]|5[1-5]|7[0-79]|9[0-35-9])|(?:4[35]|59|85)[1-9]\",\n        \"(?:10|2[0-57-9])(?:1[02]|9[56])|8078|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))1\",\n        \"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|80781|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))12\",\n        \"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|807812|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\",\n        \"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:078|1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\"\n      ],\n      \"0$1\",\n      \"$CC $1\"\n    ], [\n      ,\n      \"(\\\\d{3})(\\\\d{5,6})\",\n      \"$1 $2\",\n      [\n        \"3(?:[157]|35|49|9[1-68])|4(?:[17]|2[179]|6[47-9]|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])|(?:4[35]|59|85)[1-9]\",\n        \"(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))[19]\",\n        \"85[23](?:10|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:10|9[56])\",\n        \"85[23](?:100|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:100|9[56])\"\n      ],\n      \"0$1\",\n      \"$CC $1\"\n    ], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"(?:4|80)0\"]], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"10|2(?:[02-57-9]|1[1-9])\", \"10|2(?:[02-57-9]|1[1-9])\", \"10[0-79]|2(?:[02-57-9]|1[1-79])|(?:10|21)8(?:0[1-9]|[1-9])\"], \"0$1\", \"$CC $1\", 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"3(?:[3-59]|7[02-68])|4(?:[26-8]|3[3-9]|5[2-9])|5(?:3[03-9]|[468]|7[028]|9[2-46-9])|6|7(?:[0-247]|3[04-9]|5[0-4689]|6[2368])|8(?:[1-358]|9[1-7])|9(?:[013479]|5[1-5])|(?:[34]1|55|79|87)[02-9]\"], \"0$1\", \"$CC $1\", 1], [\n      ,\n      \"(\\\\d{3})(\\\\d{7,8})\",\n      \"$1 $2\",\n      [\"9\"]\n    ], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"80\"], \"0$1\", \"$CC $1\", 1], [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"[3-578]\"], \"0$1\", \"$CC $1\", 1], [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"1[3-9]\"], , \"$CC $1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3 $4\", [\"[12]\"], \"0$1\", , 1]], [, , , , , , , , , [-1]], , , [, , \"(?:(?:10|21)8|[48])00\\\\d{7}|950\\\\d{7,8}\", , , , , , , [10, 11, 12]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CO: [, [, , \"(?:46|60\\\\d\\\\d)\\\\d{6}|(?:1\\\\d|[39])\\\\d{9}\", , , , , , , [8, 10, 11], [4, 7]], [\n      ,\n      ,\n      \"601055(?:[0-4]\\\\d|50)\\\\d\\\\d|6010(?:[0-4]\\\\d|5[0-4])\\\\d{4}|(?:46|60(?:[18][1-9]|[24-7][2-9]))\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"6012345678\",\n      ,\n      ,\n      [8, 10],\n      [4, 7]\n    ], [, , \"333301[0-5]\\\\d{3}|3333(?:00|2[5-9]|[3-9]\\\\d)\\\\d{4}|(?:3(?:(?:0[0-5]|1\\\\d|5[01]|70)\\\\d|2(?:[0-3]\\\\d|4[1-9])|3(?:00|3[0-24-9]))|9(?:101|408))\\\\d{6}\", , , , \"3211234567\", , , [10]], [, , \"1800\\\\d{7}\", , , , \"18001234567\", , , [11]], [, , \"(?:19(?:0[01]|4[78])|901)\\\\d{7}\", , , , \"19001234567\", , , [10, 11]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"CO\", 57, \"00(?:4(?:[14]4|56)|[579])\", \"0\", , , \"0([3579]|4(?:[14]4|56))?\", , , , [[, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"46\"]], [\n      ,\n      \"(\\\\d{3})(\\\\d{7})\",\n      \"$1 $2\",\n      [\"6|90\"],\n      \"($1)\",\n      \"0$CC $1\"\n    ], [, \"(\\\\d{3})(\\\\d{7})\", \"$1 $2\", [\"3[0-357]|9[14]\"], , \"0$CC $1\"], [, \"(\\\\d)(\\\\d{3})(\\\\d{7})\", \"$1-$2-$3\", [\"1\"], \"0$1\"]], [[, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"46\"]], [, \"(\\\\d{3})(\\\\d{7})\", \"$1 $2\", [\"6|90\"], \"($1)\", \"0$CC $1\"], [, \"(\\\\d{3})(\\\\d{7})\", \"$1 $2\", [\"3[0-357]|9[14]\"], , \"0$CC $1\"], [, \"(\\\\d)(\\\\d{3})(\\\\d{7})\", \"$1 $2 $3\", [\"1\"]]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CR: [, [, , \"(?:8\\\\d|90)\\\\d{8}|(?:[24-8]\\\\d{3}|3005)\\\\d{4}\", , , , , , , [8, 10]], [\n      ,\n      ,\n      \"210[7-9]\\\\d{4}|2(?:[024-7]\\\\d|1[1-9])\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"22123456\",\n      ,\n      ,\n      [8]\n    ], [, , \"(?:3005\\\\d|6500[01])\\\\d{3}|(?:5[07]|6[0-4]|7[0-3]|8[3-9])\\\\d{6}\", , , , \"83123456\", , , [8]], [, , \"800\\\\d{7}\", , , , \"8001234567\", , , [10]], [, , \"90[059]\\\\d{7}\", , , , \"9001234567\", , , [10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"(?:210[0-6]|4\\\\d{3}|5100)\\\\d{4}\", , , , \"40001234\", , , [8]], \"CR\", 506, \"00\", , , , \"(19(?:0[0-2468]|1[09]|20|66|77|99))\", , , , [[, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[2-7]|8[3-9]\"], , \"$CC $1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1-$2-$3\", [\"[89]\"], , \"$CC $1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], , , [, , , , , , , , , [-1]]],\n    CU: [, [, , \"(?:[2-7]|8\\\\d\\\\d)\\\\d{7}|[2-47]\\\\d{6}|[34]\\\\d{5}\", , , , , , , [6, 7, 8, 10], [4, 5]], [, , \"(?:3[23]|4[89])\\\\d{4,6}|(?:31|4[36]|8(?:0[25]|78)\\\\d)\\\\d{6}|(?:2[1-4]|4[1257]|7\\\\d)\\\\d{5,6}\", , , , \"71234567\", , , , [4, 5]], [, , \"(?:5\\\\d|6[2-4])\\\\d{6}\", , , , \"51234567\", , , [8]], [, , \"800\\\\d{7}\", , , , \"8001234567\", , , [10]], [, , , , , , , , , [-1]], [, , \"807\\\\d{7}\", , , , \"8071234567\", , , [10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"CU\", 53, \"119\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{4,6})\", \"$1 $2\", [\"2[1-4]|[34]\"], \"(0$1)\"], [\n      ,\n      \"(\\\\d)(\\\\d{6,7})\",\n      \"$1 $2\",\n      [\"7\"],\n      \"(0$1)\"\n    ], [, \"(\\\\d)(\\\\d{7})\", \"$1 $2\", [\"[56]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{7})\", \"$1 $2\", [\"8\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CV: [, [, , \"(?:[2-59]\\\\d\\\\d|800)\\\\d{4}\", , , , , , , [7]], [, , \"2(?:2[1-7]|3[0-8]|4[12]|5[1256]|6\\\\d|7[1-3]|8[1-5])\\\\d{4}\", , , , \"2211234\"], [, , \"(?:36|5[1-389]|9\\\\d)\\\\d{5}\", , , , \"9911234\"], [, , \"800\\\\d{4}\", , , , \"8001234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"(?:3[3-5]|4[356])\\\\d{5}\", , , , \"3401234\"], \"CV\", 238, \"0\", , , , , , , , [[\n      ,\n      \"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\n      \"$1 $2 $3\",\n      [\"[2-589]\"]\n    ]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CW: [, [, , \"(?:[34]1|60|(?:7|9\\\\d)\\\\d)\\\\d{5}\", , , , , , , [7, 8]], [, , \"9(?:4(?:3[0-5]|4[14]|6\\\\d)|50\\\\d|7(?:2[014]|3[02-9]|4[4-9]|6[357]|77|8[7-9])|8(?:3[39]|[46]\\\\d|7[01]|8[57-9]))\\\\d{4}\", , , , \"94351234\"], [, , \"953[01]\\\\d{4}|9(?:5[12467]|6[5-9])\\\\d{5}\", , , , \"95181234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"60[0-2]\\\\d{4}\", , , , \"6001234\", , , [7]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"CW\", 599, \"00\", , , , , , , , [[\n      ,\n      \"(\\\\d{3})(\\\\d{4})\",\n      \"$1 $2\",\n      [\"[3467]\"]\n    ], [, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"9[4-8]\"]]], , [, , \"955\\\\d{5}\", , , , \"95581234\", , , [8]], 1, \"[69]\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CX: [, [, , \"1(?:[0-79]\\\\d{8}(?:\\\\d{2})?|8[0-24-9]\\\\d{7})|[148]\\\\d{8}|1\\\\d{5,7}\", , , , , , , [6, 7, 8, 9, 10, 12]], [, , \"8(?:51(?:0(?:01|30|59|88)|1(?:17|46|75)|2(?:22|35))|91(?:00[6-9]|1(?:[28]1|49|78)|2(?:09|63)|3(?:12|26|75)|4(?:56|97)|64\\\\d|7(?:0[01]|1[0-2])|958))\\\\d{3}\", , , , \"891641234\", , , [9], [8]], [\n      ,\n      ,\n      \"4(?:79[01]|83[0-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"412345678\",\n      ,\n      ,\n      [9]\n    ], [, , \"180(?:0\\\\d{3}|2)\\\\d{3}\", , , , \"1800123456\", , , [7, 10]], [, , \"190[0-26]\\\\d{6}\", , , , \"1900123456\", , , [10]], [, , \"13(?:00\\\\d{6}(?:\\\\d{2})?|45[0-4]\\\\d{3})|13\\\\d{4}\", , , , \"1300123456\", , , [6, 8, 10, 12]], [, , , , , , , , , [-1]], [, , \"14(?:5(?:1[0458]|[23][458])|71\\\\d)\\\\d{4}\", , , , \"147101234\", , , [9]], \"CX\", 61, \"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\", \"0\", , , \"([59]\\\\d{7})$|0\", \"8$1\", \"0011\", , , , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CY: [, [\n      ,\n      ,\n      \"(?:[279]\\\\d|[58]0)\\\\d{6}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [8]\n    ], [, , \"2[2-6]\\\\d{6}\", , , , \"22345678\"], [, , \"9(?:10|[4-79]\\\\d)\\\\d{5}\", , , , \"96123456\"], [, , \"800\\\\d{5}\", , , , \"80001234\"], [, , \"90[09]\\\\d{5}\", , , , \"90012345\"], [, , \"80[1-9]\\\\d{5}\", , , , \"80112345\"], [, , \"700\\\\d{5}\", , , , \"70012345\"], [, , , , , , , , , [-1]], \"CY\", 357, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{6})\", \"$1 $2\", [\"[257-9]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"(?:50|77)\\\\d{6}\", , , , \"77123456\"], , , [, , , , , , , , , [-1]]],\n    CZ: [, [, , \"(?:[2-578]\\\\d|60)\\\\d{7}|9\\\\d{8,11}\", , , , , , , [9, 10, 11, 12]], [\n      ,\n      ,\n      \"(?:2\\\\d|3[1257-9]|4[16-9]|5[13-9])\\\\d{7}\",\n      ,\n      ,\n      ,\n      \"212345678\",\n      ,\n      ,\n      [9]\n    ], [, , \"7060\\\\d{5}|(?:60[1-8]|7(?:0[2-5]|19|[2379]\\\\d))\\\\d{6}\", , , , \"601123456\", , , [9]], [, , \"800\\\\d{6}\", , , , \"800123456\", , , [9]], [, , \"9(?:0[05689]|76)\\\\d{6}\", , , , \"900123456\", , , [9]], [, , \"8[134]\\\\d{7}\", , , , \"811234567\", , , [9]], [, , \"70[01]\\\\d{6}\", , , , \"700123456\", , , [9]], [, , \"9[17]0\\\\d{6}\", , , , \"910123456\", , , [9]], \"CZ\", 420, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[2-8]|9[015-7]\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"96\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"9\"]], [\n      ,\n      \"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\n      \"$1 $2 $3 $4\",\n      [\"9\"]\n    ]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"9(?:5\\\\d|7[2-4])\\\\d{6}\", , , , \"972123456\", , , [9]], , , [, , \"9(?:3\\\\d{9}|6\\\\d{7,10})\", , , , \"93123456789\"]],\n    DE: [, [, , \"[2579]\\\\d{5,14}|49(?:[34]0|69|8\\\\d)\\\\d\\\\d?|49(?:37|49|60|7[089]|9\\\\d)\\\\d{1,3}|49(?:2[024-9]|3[2-689]|7[1-7])\\\\d{1,8}|(?:1|[368]\\\\d|4[0-8])\\\\d{3,13}|49(?:[015]\\\\d|2[13]|31|[46][1-8])\\\\d{1,9}\", , , , , , , [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], [2, 3]], [\n      ,\n      ,\n      \"32\\\\d{9,11}|49[1-6]\\\\d{10}|322\\\\d{6}|49[0-7]\\\\d{3,9}|(?:[34]0|[68]9)\\\\d{3,13}|(?:2(?:0[1-689]|[1-3569]\\\\d|4[0-8]|7[1-7]|8[0-7])|3(?:[3569]\\\\d|4[0-79]|7[1-7]|8[1-8])|4(?:1[02-9]|[2-48]\\\\d|5[0-6]|6[0-8]|7[0-79])|5(?:0[2-8]|[124-6]\\\\d|[38][0-8]|[79][0-7])|6(?:0[02-9]|[1-358]\\\\d|[47][0-8]|6[1-9])|7(?:0[2-8]|1[1-9]|[27][0-7]|3\\\\d|[4-6][0-8]|8[0-5]|9[013-7])|8(?:0[2-9]|1[0-79]|2\\\\d|3[0-46-9]|4[0-6]|5[013-9]|6[1-8]|7[0-8]|8[0-24-6])|9(?:0[6-9]|[1-4]\\\\d|[589][0-7]|6[0-8]|7[0-467]))\\\\d{3,12}\",\n      ,\n      ,\n      ,\n      \"30123456\",\n      ,\n      ,\n      [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],\n      [2, 3, 4]\n    ], [, , \"1(?:6[023]|7\\\\d)\\\\d{7,8}|15(?:[0-25-9]\\\\d\\\\d|3(?:10|33))\\\\d{6}\", , , , \"15123456789\", , , [10, 11]], [, , \"800\\\\d{7,12}\", , , , \"8001234567890\", , , [10, 11, 12, 13, 14, 15]], [, , \"(?:137[7-9]|900(?:[135]|9\\\\d))\\\\d{6}\", , , , \"9001234567\", , , [10, 11]], [, , \"180\\\\d{5,11}|13(?:7[1-6]\\\\d\\\\d|8)\\\\d{4}\", , , , \"18012345\", , , [7, 8, 9, 10, 11, 12, 13, 14]], [, , \"700\\\\d{8}\", , , , \"70012345678\", , , [11]], [, , , , , , , , , [-1]], \"DE\", 49, \"00\", \"0\", , , \"0\", , , , [\n      [, \"(\\\\d{2})(\\\\d{3,13})\", \"$1 $2\", [\"3[02]|40|[68]9\"], \"0$1\"],\n      [, \"(\\\\d{6})\", \"$1\", [\"227\", \"2277\"]],\n      [, \"(\\\\d{3})(\\\\d{3,12})\", \"$1 $2\", [\"2(?:0[1-389]|1[124]|2[18]|3[14])|3(?:[35-9][15]|4[015])|906|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\", \"2(?:0[1-389]|12[0-8])|3(?:[35-9][15]|4[015])|906|2(?:[13][14]|2[18])|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\"], \"0$1\"],\n      [\n        ,\n        \"(\\\\d{4})(\\\\d{2,11})\",\n        \"$1 $2\",\n        [\"[24-6]|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]\", \"[24-6]|3(?:3(?:0[1-467]|2[127-9]|3[124578]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|4[13578]|9[1346])|5(?:0[14]|2[1-3589]|6[1-4]|7[13468]|8[13568])|6(?:2[1-489]|3[124-6]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|6|7[1467]|8[136])|9(?:0[12479]|2[1358]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]|3[68]4[1347]|3(?:47|60)[1356]|3(?:3[46]|46|5[49])[1246]|3[4579]3[1357]\"],\n        \"0$1\"\n      ],\n      [, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"138\"], \"0$1\"],\n      [, \"(\\\\d{5})(\\\\d{2,10})\", \"$1 $2\", [\"3\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d{5,11})\", \"$1 $2\", [\"181\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d)(\\\\d{4,10})\", \"$1 $2 $3\", [\"1(?:3|80)|9\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d{7,8})\", \"$1 $2\", [\"1[67]\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d{7,12})\", \"$1 $2\", [\"8\"], \"0$1\"],\n      [, \"(\\\\d{5})(\\\\d{6})\", \"$1 $2\", [\"185\", \"1850\", \"18500\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"7\"], \"0$1\"],\n      [, \"(\\\\d{4})(\\\\d{7})\", \"$1 $2\", [\"18[68]\"], \"0$1\"],\n      [, \"(\\\\d{4})(\\\\d{7})\", \"$1 $2\", [\"15[1279]\"], \"0$1\"],\n      [, \"(\\\\d{5})(\\\\d{6})\", \"$1 $2\", [\"15[03568]\", \"15(?:[0568]|3[13])\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d{8})\", \"$1 $2\", [\"18\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d{2})(\\\\d{7,8})\", \"$1 $2 $3\", [\"1(?:6[023]|7)\"], \"0$1\"],\n      [, \"(\\\\d{4})(\\\\d{2})(\\\\d{7})\", \"$1 $2 $3\", [\"15[279]\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d{2})(\\\\d{8})\", \"$1 $2 $3\", [\"15\"], \"0$1\"]\n    ], [\n      [, \"(\\\\d{2})(\\\\d{3,13})\", \"$1 $2\", [\"3[02]|40|[68]9\"], \"0$1\"],\n      [\n        ,\n        \"(\\\\d{3})(\\\\d{3,12})\",\n        \"$1 $2\",\n        [\"2(?:0[1-389]|1[124]|2[18]|3[14])|3(?:[35-9][15]|4[015])|906|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\", \"2(?:0[1-389]|12[0-8])|3(?:[35-9][15]|4[015])|906|2(?:[13][14]|2[18])|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\"],\n        \"0$1\"\n      ],\n      [\n        ,\n        \"(\\\\d{4})(\\\\d{2,11})\",\n        \"$1 $2\",\n        [\"[24-6]|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]\", \"[24-6]|3(?:3(?:0[1-467]|2[127-9]|3[124578]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|4[13578]|9[1346])|5(?:0[14]|2[1-3589]|6[1-4]|7[13468]|8[13568])|6(?:2[1-489]|3[124-6]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|6|7[1467]|8[136])|9(?:0[12479]|2[1358]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]|3[68]4[1347]|3(?:47|60)[1356]|3(?:3[46]|46|5[49])[1246]|3[4579]3[1357]\"],\n        \"0$1\"\n      ],\n      [, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"138\"], \"0$1\"],\n      [, \"(\\\\d{5})(\\\\d{2,10})\", \"$1 $2\", [\"3\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d{5,11})\", \"$1 $2\", [\"181\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d)(\\\\d{4,10})\", \"$1 $2 $3\", [\"1(?:3|80)|9\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d{7,8})\", \"$1 $2\", [\"1[67]\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d{7,12})\", \"$1 $2\", [\"8\"], \"0$1\"],\n      [, \"(\\\\d{5})(\\\\d{6})\", \"$1 $2\", [\"185\", \"1850\", \"18500\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"7\"], \"0$1\"],\n      [, \"(\\\\d{4})(\\\\d{7})\", \"$1 $2\", [\"18[68]\"], \"0$1\"],\n      [, \"(\\\\d{4})(\\\\d{7})\", \"$1 $2\", [\"15[1279]\"], \"0$1\"],\n      [, \"(\\\\d{5})(\\\\d{6})\", \"$1 $2\", [\"15[03568]\", \"15(?:[0568]|3[13])\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d{8})\", \"$1 $2\", [\"18\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d{2})(\\\\d{7,8})\", \"$1 $2 $3\", [\"1(?:6[023]|7)\"], \"0$1\"],\n      [, \"(\\\\d{4})(\\\\d{2})(\\\\d{7})\", \"$1 $2 $3\", [\"15[279]\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d{2})(\\\\d{8})\", \"$1 $2 $3\", [\"15\"], \"0$1\"]\n    ], [, , \"16(?:4\\\\d{1,10}|[89]\\\\d{1,11})\", , , , \"16412345\", , , [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]], , , [, , , , , , , , , [-1]], [, , \"18(?:1\\\\d{5,11}|[2-9]\\\\d{8})\", , , , \"18500123456\", , , [8, 9, 10, 11, 12, 13, 14]], , , [\n      ,\n      ,\n      \"1(?:6(?:013|255|399)|7(?:(?:[015]1|[69]3)3|[2-4]55|[78]99))\\\\d{7,8}|15(?:(?:[03-68]00|113)\\\\d|2\\\\d55|7\\\\d99|9\\\\d33)\\\\d{7}\",\n      ,\n      ,\n      ,\n      \"177991234567\",\n      ,\n      ,\n      [12, 13]\n    ]],\n    DJ: [, [, , \"(?:2\\\\d|77)\\\\d{6}\", , , , , , , [8]], [, , \"2(?:1[2-5]|7[45])\\\\d{5}\", , , , \"21360003\"], [, , \"77\\\\d{6}\", , , , \"77831001\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"DJ\", 253, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[27]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    DK: [, [, , \"[2-9]\\\\d{7}\", , , , , , , [8]], [\n      ,\n      ,\n      \"(?:2(?:[0-59][1-9]|[6-8]\\\\d)|3(?:[0-3][1-9]|4[13]|5[1-58]|6[1347-9]|7\\\\d|8[1-8]|9[1-79])|4(?:[0-25][1-9]|[34][2-9]|6[13-579]|7[13579]|8[1-47]|9[127])|5(?:[0-36][1-9]|4[146-9]|5[3-57-9]|7[568]|8[1-358]|9[1-69])|6(?:[0135][1-9]|2[1-68]|4[2-8]|6[1689]|[78]\\\\d|9[15689])|7(?:[0-69][1-9]|7[3-9]|8[147])|8(?:[16-9][1-9]|2[1-58])|9(?:[1-47-9][1-9]|6\\\\d))\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"32123456\"\n    ], [, , \"(?:2[6-8]|37|6[78]|96)\\\\d{6}|(?:2[0-59]|3[0-689]|[457]\\\\d|6[0-69]|8[126-9]|9[1-47-9])[1-9]\\\\d{5}\", , , , \"34412345\"], [, , \"80\\\\d{6}\", , , , \"80123456\"], [, , \"90\\\\d{6}\", , , , \"90123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"DK\", 45, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[2-9]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    DM: [\n      ,\n      [, , \"(?:[58]\\\\d\\\\d|767|900)\\\\d{7}\", , , , , , , [10], [7]],\n      [\n        ,\n        ,\n        \"767(?:2(?:55|66)|4(?:2[01]|4[0-25-9])|50[0-4])\\\\d{4}\",\n        ,\n        ,\n        ,\n        \"7674201234\",\n        ,\n        ,\n        ,\n        [7]\n      ],\n      [, , \"767(?:2(?:[2-4689]5|7[5-7])|31[5-7]|61[1-8]|70[1-6])\\\\d{4}\", , , , \"7672251234\", , , , [7]],\n      [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\"],\n      [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"],\n      [, , , , , , , , , [-1]],\n      [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"],\n      [, , , , , , , , , [-1]],\n      \"DM\",\n      1,\n      \"011\",\n      \"1\",\n      ,\n      ,\n      \"([2-7]\\\\d{6})$|1\",\n      \"767$1\",\n      ,\n      ,\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      \"767\",\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    DO: [\n      ,\n      [, , \"(?:[58]\\\\d\\\\d|900)\\\\d{7}\", , , , , , , [10], [7]],\n      [\n        ,\n        ,\n        \"8(?:[04]9[2-9]\\\\d\\\\d|29(?:2(?:[0-59]\\\\d|6[04-9]|7[0-27]|8[0237-9])|3(?:[0-35-9]\\\\d|4[7-9])|[45]\\\\d\\\\d|6(?:[0-27-9]\\\\d|[3-5][1-9]|6[0135-8])|7(?:0[013-9]|[1-37]\\\\d|4[1-35689]|5[1-4689]|6[1-57-9]|8[1-79]|9[1-8])|8(?:0[146-9]|1[0-48]|[248]\\\\d|3[1-79]|5[01589]|6[013-68]|7[124-8]|9[0-8])|9(?:[0-24]\\\\d|3[02-46-9]|5[0-79]|60|7[0169]|8[57-9]|9[02-9])))\\\\d{4}\",\n        ,\n        ,\n        ,\n        \"8092345678\",\n        ,\n        ,\n        ,\n        [7]\n      ],\n      [, , \"8[024]9[2-9]\\\\d{6}\", , , , \"8092345678\", , , , [7]],\n      [, , \"800(?:14|[2-9]\\\\d)\\\\d{5}|8[024]9[01]\\\\d{6}|8(?:33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\"],\n      [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"],\n      [, , , , , , , , , [-1]],\n      [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"],\n      [, , , , , , , , , [-1]],\n      \"DO\",\n      1,\n      \"011\",\n      \"1\",\n      ,\n      ,\n      \"1\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      \"8001|8[024]9\",\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    DZ: [\n      ,\n      [, , \"(?:[1-4]|[5-79]\\\\d|80)\\\\d{7}\", , , , , , , [8, 9]],\n      [, , \"9619\\\\d{5}|(?:[1-3]\\\\d|4[013-689])\\\\d{6}\", , , , \"12345678\"],\n      [, , \"5(?:4[0-29]|6[0-4])\\\\d{6}|(?:55|6\\\\d|7[7-9])\\\\d{7}\", , , , \"551234567\", , , [9]],\n      [, , \"800\\\\d{6}\", , , , \"800123456\", , , [9]],\n      [, , \"80[3-689]1\\\\d{5}\", , , , \"808123456\", , , [9]],\n      [, , \"80[12]1\\\\d{5}\", , , , \"801123456\", , , [9]],\n      [, , , , , , , , , [-1]],\n      [, , \"98[23]\\\\d{6}\", , , , \"983123456\", , , [9]],\n      \"DZ\",\n      213,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[1-4]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"9\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[5-8]\"], \"0$1\"]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    EC: [, [, , \"1\\\\d{9,10}|(?:[2-7]|9\\\\d)\\\\d{7}\", , , , , , , [8, 9, 10, 11], [7]], [, , \"[2-7][2-7]\\\\d{6}\", , , , \"22123456\", , , [8], [7]], [, , \"964[0-2]\\\\d{5}|9(?:39|[57][89]|6[0-36-9]|[89]\\\\d)\\\\d{6}\", , , , \"991234567\", , , [9]], [\n      ,\n      ,\n      \"1800\\\\d{7}|1[78]00\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"18001234567\",\n      ,\n      ,\n      [10, 11]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"[2-7]890\\\\d{4}\", , , , \"28901234\", , , [8]], \"EC\", 593, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1-$2\", [\"[2-7]\"]], [, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2-$3\", [\"[2-7]\"], \"(0$1)\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"9\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"1\"]]], [[, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1-$2-$3\", [\"[2-7]\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"9\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"1\"]]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    EE: [, [, , \"8\\\\d{9}|[4578]\\\\d{7}|(?:[3-8]\\\\d|90)\\\\d{5}\", , , , , , , [7, 8, 10]], [, , \"(?:3[23589]|4[3-8]|6\\\\d|7[1-9]|88)\\\\d{5}\", , , , \"3212345\", , , [7]], [\n      ,\n      ,\n      \"(?:5\\\\d{5}|8(?:1(?:0(?:0(?:00|[178]\\\\d)|[3-9]\\\\d\\\\d)|(?:1(?:0[2-6]|1\\\\d)|[2-79]\\\\d\\\\d)\\\\d)|2(?:0(?:0(?:00|4\\\\d)|(?:19|[2-7]\\\\d)\\\\d)|(?:(?:[124-69]\\\\d|3[5-9])\\\\d|7(?:[0-79]\\\\d|8[013-9])|8(?:[2-6]\\\\d|7[01]))\\\\d)|[349]\\\\d{4}))\\\\d\\\\d|5(?:(?:[02]\\\\d|5[0-478])\\\\d|1(?:[0-8]\\\\d|95)|6(?:4[0-4]|5[1-589]))\\\\d{3}\",\n      ,\n      ,\n      ,\n      \"51234567\",\n      ,\n      ,\n      [7, 8]\n    ], [, , \"800(?:(?:0\\\\d\\\\d|1)\\\\d|[2-9])\\\\d{3}\", , , , \"80012345\"], [, , \"(?:40\\\\d\\\\d|900)\\\\d{4}\", , , , \"9001234\", , , [7, 8]], [, , , , , , , , , [-1]], [, , \"70[0-2]\\\\d{5}\", , , , \"70012345\", , , [8]], [, , , , , , , , , [-1]], \"EE\", 372, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[369]|4[3-8]|5(?:[0-2]|5[0-478]|6[45])|7[1-9]|88\", \"[369]|4[3-8]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))|7[1-9]|88\"]], [, \"(\\\\d{4})(\\\\d{3,4})\", \"$1 $2\", [\"[45]|8(?:00|[1-49])\", \"[45]|8(?:00[1-9]|[1-49])\"]], [\n      ,\n      \"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\"7\"]\n    ], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"8\"]]], , [, , , , , , , , , [-1]], , , [, , \"800[2-9]\\\\d{3}\", , , , , , , [7]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    EG: [\n      ,\n      [, , \"[189]\\\\d{8,9}|[24-6]\\\\d{8}|[135]\\\\d{7}\", , , , , , , [8, 9, 10], [6, 7]],\n      [, , \"13[23]\\\\d{6}|(?:15|57)\\\\d{6,7}|(?:2\\\\d|3|4[05-8]|5[05]|6[24-689]|8[2468]|9[235-7])\\\\d{7}\", , , , \"234567890\", , , [8, 9], [6, 7]],\n      [, , \"1[0-25]\\\\d{8}\", , , , \"1001234567\", , , [10]],\n      [, , \"800\\\\d{7}\", , , , \"8001234567\", , , [10]],\n      [, , \"900\\\\d{7}\", , , , \"9001234567\", , , [10]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"EG\",\n      20,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d)(\\\\d{7,8})\", \"$1 $2\", [\"[23]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{6,7})\", \"$1 $2\", [\"1[35]|[4-6]|8[2468]|9[235-7]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[89]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{8})\", \"$1 $2\", [\"1\"], \"0$1\"]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    EH: [\n      ,\n      [, , \"[5-8]\\\\d{8}\", , , , , , , [9]],\n      [, , \"528[89]\\\\d{5}\", , , , \"528812345\"],\n      [, , \"(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:[016-8]\\\\d|2[0-8]|3[01]|5[0-5]))\\\\d{6}\", , , , \"650123456\"],\n      [, , \"80[0-7]\\\\d{6}\", , , , \"801234567\"],\n      [, , \"89\\\\d{7}\", , , , \"891234567\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , \"(?:592(?:4[0-2]|93)|80[89]\\\\d\\\\d)\\\\d{4}\", , , , \"592401234\"],\n      \"EH\",\n      212,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    ER: [, [, , \"[178]\\\\d{6}\", , , , , , , [7], [6]], [, , \"(?:1(?:1[12568]|[24]0|55|6[146])|8\\\\d\\\\d)\\\\d{4}\", , , , \"8370362\", , , , [6]], [, , \"(?:17[1-3]|7\\\\d\\\\d)\\\\d{4}\", , , , \"7123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"ER\", 291, \"00\", \"0\", , , \"0\", , , , [[\n      ,\n      \"(\\\\d)(\\\\d{3})(\\\\d{3})\",\n      \"$1 $2 $3\",\n      [\"[178]\"],\n      \"0$1\"\n    ]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    ES: [, [, , \"(?:400|[5-9]\\\\d\\\\d)\\\\d{6}\", , , , , , , [9]], [, , \"96906(?:0[0-8]|1[1-9]|[2-9]\\\\d)\\\\d\\\\d|9(?:69(?:0[0-57-9]|[1-9]\\\\d)|73(?:[0-8]\\\\d|9[1-9]))\\\\d{4}|(?:400|8(?:[1356]\\\\d|[28][0-8]|[47][1-9])|9(?:[135]\\\\d|[268][0-8]|4[1-9]|7[124-9]))\\\\d{6}\", , , , \"810123456\"], [, , \"96906(?:09|10)\\\\d\\\\d|(?:590(?:10[0-2]|600)|97390\\\\d)\\\\d{3}|(?:6\\\\d|7[1-48])\\\\d{7}\", , , , \"612345678\"], [, , \"[89]00\\\\d{6}\", , , , \"800123456\"], [\n      ,\n      ,\n      \"80[367]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"803123456\"\n    ], [, , \"90[12]\\\\d{6}\", , , , \"901123456\"], [, , \"70\\\\d{7}\", , , , \"701234567\"], [, , , , , , , , , [-1]], \"ES\", 34, \"00\", , , , , , , , [[, \"(\\\\d{4})\", \"$1\", [\"905\", \"905[124578]\"]], [, \"(\\\\d{6})\", \"$1\", [\"[79]9\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[89]00\"]], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[4-9]\"]]], [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[89]00\"]], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[4-9]\"]]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"51\\\\d{7}\", , , , \"511234567\"], , , [, , , , , , , , , [-1]]],\n    ET: [, [, , \"(?:11|[2-57-9]\\\\d)\\\\d{7}\", , , , , , , [9], [7]], [\n      ,\n      ,\n      \"(?:11(?:[124]\\\\d\\\\d|3(?:[0-79]\\\\d|8[0-7])|5(?:[02-9]\\\\d|1[0-57-9])|6(?:[02-79]\\\\d|1[0-57-9]|8[0-8]))|2(?:2(?:11[1-9]|22[0-7]|33\\\\d|44[1467]|66[1-68])|5(?:11[124-6]|33[2-8]|44[1467]|55[14]|66[1-3679]|77[124-79]|880))|3(?:3(?:11[0-46-8]|(?:22|55)[0-6]|33[0134689]|44[04]|66[01467])|4(?:44[0-8]|55[0-69]|66[0-3]|77[1-5]))|4(?:6(?:119|22[0-24-7]|33[1-5]|44[13-69]|55[14-689]|660|88[1-4])|7(?:(?:11|22)[1-9]|33[13-7]|44[13-6]|55[1-689]))|5(?:7(?:227|55[05]|(?:66|77)[14-8])|8(?:11[149]|22[013-79]|33[0-68]|44[013-8]|550|66[1-5]|77\\\\d)))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"111112345\",\n      ,\n      ,\n      ,\n      [7]\n    ], [, , \"700[1-9]\\\\d{5}|(?:7(?:0[1-9]|1[0-8]|2[1-35-79]|3\\\\d|77|86|99)|(?:8[01]|9\\\\d)\\\\d)\\\\d{6}\", , , , \"911234567\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"ET\", 251, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[1-57-9]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    FI: [\n      ,\n      [, , \"[1-35689]\\\\d{4}|7\\\\d{10,11}|(?:[124-7]\\\\d|3[0-46-9])\\\\d{8}|[1-9]\\\\d{5,8}\", , , , , , , [5, 6, 7, 8, 9, 10, 11, 12]],\n      [\n        ,\n        ,\n        \"1[3-7][1-8]\\\\d{3,6}|(?:19[1-8]|[23568][1-8]\\\\d|9(?:00|[1-8]\\\\d))\\\\d{2,6}\",\n        ,\n        ,\n        ,\n        \"131234567\",\n        ,\n        ,\n        [5, 6, 7, 8, 9]\n      ],\n      [, , \"4946\\\\d{2,6}|(?:4[0-8]|50)\\\\d{4,8}\", , , , \"412345678\", , , [6, 7, 8, 9, 10]],\n      [, , \"800\\\\d{4,6}\", , , , \"800123456\", , , [7, 8, 9]],\n      [, , \"[67]00\\\\d{5,6}\", , , , \"600123456\", , , [8, 9]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"FI\",\n      358,\n      \"00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      \"00\",\n      ,\n      [[, \"(\\\\d{5})\", \"$1\", [\"75[12]\"], \"0$1\"], [, \"(\\\\d{5})\", \"$1\", [\"20[2-59]\"], \"0$1\"], [, \"(\\\\d{6})\", \"$1\", [\"11\"]], [, \"(\\\\d{3})(\\\\d{3,7})\", \"$1 $2\", [\"(?:[1-3]0|[68])0|70[07-9]\"], \"0$1\"], [\n        ,\n        \"(\\\\d{2})(\\\\d{4,8})\",\n        \"$1 $2\",\n        [\"[14]|2[09]|50|7[135]\"],\n        \"0$1\"\n      ], [, \"(\\\\d{2})(\\\\d{6,10})\", \"$1 $2\", [\"7\"], \"0$1\"], [, \"(\\\\d)(\\\\d{4,9})\", \"$1 $2\", [\"(?:19|[2568])[1-8]|3(?:0[1-9]|[1-9])|9\"], \"0$1\"]],\n      [[, \"(\\\\d{5})\", \"$1\", [\"20[2-59]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3,7})\", \"$1 $2\", [\"(?:[1-3]0|[68])0|70[07-9]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{4,8})\", \"$1 $2\", [\"[14]|2[09]|50|7[135]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{6,10})\", \"$1 $2\", [\"7\"], \"0$1\"], [, \"(\\\\d)(\\\\d{4,9})\", \"$1 $2\", [\"(?:19|[2568])[1-8]|3(?:0[1-9]|[1-9])|9\"], \"0$1\"]],\n      [, , , , , , , , , [-1]],\n      1,\n      \"1[03-79]|[2-9]\",\n      [, , \"20(?:2[023]|9[89])\\\\d{1,6}|(?:60[12]\\\\d|7099)\\\\d{4,5}|(?:606|7(?:0[78]|1|3\\\\d))\\\\d{7}|(?:[1-3]00|7(?:0[1-5]\\\\d\\\\d|5[03-9]))\\\\d{3,7}\"],\n      [, , \"20\\\\d{4,8}|60[12]\\\\d{5,6}|7(?:099\\\\d{4,5}|5[03-9]\\\\d{3,7})|20[2-59]\\\\d\\\\d|(?:606|7(?:0[78]|1|3\\\\d))\\\\d{7}|(?:10|29|3[09]|70[1-5]\\\\d)\\\\d{4,8}\", , , , \"10112345\"],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    FJ: [\n      ,\n      [, , \"45\\\\d{5}|(?:0800\\\\d|[235-9])\\\\d{6}\", , , , , , , [7, 11]],\n      [, , \"603\\\\d{4}|(?:3[0-6]|6[25-7]|8[58])\\\\d{5}\", , , , \"3212345\", , , [7]],\n      [, , \"(?:[279]\\\\d|45|5[01568]|8[034679])\\\\d{5}\", , , , \"7012345\", , , [7]],\n      [, , \"0800\\\\d{7}\", , , , \"08001234567\", , , [11]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"FJ\",\n      679,\n      \"0(?:0|52)\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      \"00\",\n      ,\n      [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[235-9]|45\"]], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"0\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    FK: [, [, , \"[2-7]\\\\d{4}\", , , , , , , [5]], [, , \"[2-47]\\\\d{4}\", , , , \"31234\"], [, , \"[56]\\\\d{4}\", , , , \"51234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"FK\", 500, \"00\", , , , , , , , , , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    FM: [, [, , \"(?:[39]\\\\d\\\\d|820)\\\\d{4}\", , , , , , , [7]], [\n      ,\n      ,\n      \"31(?:00[67]|208|309)\\\\d\\\\d|(?:3(?:[2357]0[1-9]|602|804|905)|(?:820|9[2-6]\\\\d)\\\\d)\\\\d{3}\",\n      ,\n      ,\n      ,\n      \"3201234\"\n    ], [, , \"31(?:00[67]|208|309)\\\\d\\\\d|(?:3(?:[2357]0[1-9]|602|804|905)|(?:820|9[2-7]\\\\d)\\\\d)\\\\d{3}\", , , , \"3501234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"FM\", 691, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[389]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    FO: [, [, , \"[2-9]\\\\d{5}\", , , , , , , [6]], [, , \"(?:20|[34]\\\\d|8[19])\\\\d{4}\", , , , \"201234\"], [, , \"(?:[27][1-9]|5\\\\d|9[16])\\\\d{4}\", , , , \"211234\"], [, , \"80[257-9]\\\\d{3}\", , , , \"802123\"], [\n      ,\n      ,\n      \"90(?:[13-5][15-7]|2[125-7]|9\\\\d)\\\\d\\\\d\",\n      ,\n      ,\n      ,\n      \"901123\"\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"6[0-36]\\\\d{4}\", , , , \"601234\"], \"FO\", 298, \"00\", , , , \"(10(?:01|[12]0|88))\", , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3\", [\"[2-9]\"], , \"$CC $1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    FR: [, [, , \"[1-9]\\\\d{8}\", , , , , , , [9]], [, , \"(?:26[013-9]|59[1-35-9])\\\\d{6}|(?:[13]\\\\d|2[0-57-9]|4[1-9]|5[0-8])\\\\d{7}\", , , , \"123456789\"], [, , \"(?:6(?:[0-24-8]\\\\d|3[0-8]|9[589])|7[3-9]\\\\d)\\\\d{6}\", , , , \"612345678\"], [, , \"80[0-5]\\\\d{6}\", , , , \"801234567\"], [\n      ,\n      ,\n      \"836(?:0[0-36-9]|[1-9]\\\\d)\\\\d{4}|8(?:1[2-9]|2[2-47-9]|3[0-57-9]|[569]\\\\d|8[0-35-9])\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"891123456\"\n    ], [, , \"8(?:1[01]|2[0156]|4[024]|84)\\\\d{6}\", , , , \"884012345\"], [, , , , , , , , , [-1]], [, , \"9\\\\d{8}\", , , , \"912345678\"], \"FR\", 33, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{4})\", \"$1\", [\"10\"]], [, \"(\\\\d{3})(\\\\d{3})\", \"$1 $2\", [\"1\"]], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"8\"], \"0 $1\"], [, \"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4 $5\", [\"[1-79]\"], \"0$1\"]], [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"8\"], \"0 $1\"], [, \"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4 $5\", [\"[1-79]\"], \"0$1\"]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], , , [, , , , , , , , , [-1]], [, , \"80[6-9]\\\\d{6}\", , , , \"806123456\"], , , [, , , , , , , , , [-1]]],\n    GA: [, [, , \"(?:[067]\\\\d|11)\\\\d{6}|[2-7]\\\\d{6}\", , , , , , , [7, 8]], [, , \"[01]1\\\\d{6}\", , , , \"01441234\", , , [8]], [, , \"(?:(?:0[2-7]|7[467])\\\\d|6(?:0[0-4]|10|[256]\\\\d))\\\\d{5}|[2-7]\\\\d{6}\", , , , \"06031234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"GA\", 241, \"00\", , , , \"0(11\\\\d{6}|60\\\\d{6}|61\\\\d{6}|6[256]\\\\d{6}|7[467]\\\\d{6})\", \"$1\", , , [[, \"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[2-7]\"], \"0$1\"], [\n      ,\n      \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\n      \"$1 $2 $3 $4\",\n      [\"0\"]\n    ], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"11|[67]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    GB: [, [, , \"[1-357-9]\\\\d{9}|[18]\\\\d{8}|8\\\\d{6}\", , , , , , , [7, 9, 10], [4, 5, 6, 8]], [\n      ,\n      ,\n      \"(?:1(?:1(?:3(?:[0-58]\\\\d\\\\d|73[0-5])|4(?:(?:[0-5]\\\\d|70)\\\\d|69[7-9])|(?:(?:5[0-26-9]|[78][0-49])\\\\d|6(?:[0-4]\\\\d|5[01]))\\\\d)|(?:2(?:(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-47-9]|7[013-9]|9\\\\d)\\\\d|1(?:[0-7]\\\\d|8[0-3]))|(?:3(?:0\\\\d|1[0-8]|[25][02-9]|3[02-579]|[468][0-46-9]|7[1-35-79]|9[2-578])|4(?:0[03-9]|[137]\\\\d|[28][02-57-9]|4[02-69]|5[0-8]|[69][0-79])|5(?:0[1-35-9]|[16]\\\\d|2[024-9]|3[015689]|4[02-9]|5[03-9]|7[0-35-9]|8[0-468]|9[0-57-9])|6(?:0[034689]|1\\\\d|2[0-35689]|[38][013-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|9[0-24578])|7(?:0[0246-9]|2\\\\d|3[0236-8]|4[03-9]|5[0-46-9]|6[013-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-57-9]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\\\\d|8[02-9]|9[02569])|9(?:0[02-589]|[18]\\\\d|2[02-689]|3[1-57-9]|4[2-9]|5[0-579]|6[2-47-9]|7[0-24578]|9[2-57]))\\\\d)\\\\d)|2(?:0[013478]|3[0189]|4[017]|8[0-46-9]|9[0-2])\\\\d{3})\\\\d{4}|1(?:2(?:0(?:46[1-4]|87[2-9])|545[1-79]|76(?:2\\\\d|3[1-8]|6[1-6])|9(?:7(?:2[0-4]|3[2-5])|8(?:2[2-8]|7[0-47-9]|8[3-5])))|3(?:6(?:38[2-5]|47[23])|8(?:47[04-9]|64[0157-9]))|4(?:044[1-7]|20(?:2[23]|8\\\\d)|6(?:0(?:30|5[2-57]|6[1-8]|7[2-8])|140)|8(?:052|87[1-3]))|5(?:2(?:4(?:3[2-79]|6\\\\d)|76\\\\d)|6(?:26[06-9]|686))|6(?:06(?:4\\\\d|7[4-79])|295[5-7]|35[34]\\\\d|47(?:24|61)|59(?:5[08]|6[67]|74)|9(?:55[0-4]|77[23]))|7(?:26(?:6[13-9]|7[0-7])|(?:442|688)\\\\d|50(?:2[0-3]|[3-68]2|76))|8(?:27[56]\\\\d|37(?:5[2-5]|8[239])|843[2-58])|9(?:0(?:0(?:6[1-8]|85)|52\\\\d)|3583|4(?:66[1-8]|9(?:2[01]|81))|63(?:23|3[1-4])|9561))\\\\d{3}\",\n      ,\n      ,\n      ,\n      \"1212345678\",\n      ,\n      ,\n      [9, 10],\n      [4, 5, 6, 7, 8]\n    ], [, , \"7(?:457[0-57-9]|700[01]|911[028])\\\\d{5}|7(?:[1-3]\\\\d\\\\d|4(?:[0-46-9]\\\\d|5[0-689])|5(?:0[0-8]|[13-9]\\\\d|2[0-35-9])|7(?:0[1-9]|[1-7]\\\\d|8[02-9]|9[0-689])|8(?:[014-9]\\\\d|[23][0-8])|9(?:[024-9]\\\\d|1[02-9]|3[0-689]))\\\\d{6}\", , , , \"7400123456\", , , [10]], [, , \"80[08]\\\\d{7}|800\\\\d{6}|8001111\", , , , \"8001234567\"], [, , \"(?:8(?:4[2-5]|7[0-3])|9(?:[01]\\\\d|8[2-49]))\\\\d{7}|845464\\\\d\", , , , \"9012345678\", , , [7, 10]], [, , , , , , , , , [-1]], [, , \"70\\\\d{8}\", , , , \"7012345678\", , , [10]], [\n      ,\n      ,\n      \"56\\\\d{8}\",\n      ,\n      ,\n      ,\n      \"5612345678\",\n      ,\n      ,\n      [10]\n    ], \"GB\", 44, \"00\", \"0\", \" x\", , \"0|180020\", , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"800\", \"8001\", \"80011\", \"800111\", \"8001111\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3\", [\"845\", \"8454\", \"84546\", \"845464\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{6})\", \"$1 $2\", [\"800\"], \"0$1\"], [, \"(\\\\d{5})(\\\\d{4,5})\", \"$1 $2\", [\"1(?:38|5[23]|69|76|94)\", \"1(?:(?:38|69)7|5(?:24|39)|768|946)\", \"1(?:3873|5(?:242|39[4-6])|(?:697|768)[347]|9467)\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{5,6})\", \"$1 $2\", [\"1(?:[2-69][02-9]|[78])\"], \"0$1\"], [\n      ,\n      \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\"[25]|7(?:0|6[02-9])\", \"[25]|7(?:0|6(?:[03-9]|2[356]))\"],\n      \"0$1\"\n    ], [, \"(\\\\d{4})(\\\\d{6})\", \"$1 $2\", [\"7\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[1389]\"], \"0$1\"]], , [, , \"76(?:464|652)\\\\d{5}|76(?:0[0-28]|2[356]|34|4[01347]|5[49]|6[0-369]|77|8[14]|9[139])\\\\d{6}\", , , , \"7640123456\", , , [10]], 1, , [, , , , , , , , , [-1]], [, , \"(?:3[0347]|55)\\\\d{8}\", , , , \"5512345678\", , , [10]], , , [, , , , , , , , , [-1]]],\n    GD: [, [, , \"(?:473|[58]\\\\d\\\\d|900)\\\\d{7}\", , , , , , , [10], [7]], [\n      ,\n      ,\n      \"473(?:2(?:3[0-2]|69)|3(?:2[89]|86)|4(?:[06]8|3[5-9]|4[0-4]|5[59]|73|90)|63[68]|7(?:58|84)|800|938)\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"4732691234\",\n      ,\n      ,\n      ,\n      [7]\n    ], [, , \"473(?:4(?:0[2-79]|1[04-9]|2[0-5]|49|5[6-8])|5(?:2[01]|3[3-8])|901)\\\\d{4}\", , , , \"4734031234\", , , , [7]], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\"], [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"], [, , , , , , , , , [-1]], [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], \"GD\", 1, \"011\", \"1\", , , \"([2-9]\\\\d{6})$|1\", \"473$1\", , , , , [, , , , , , , , , [-1]], , \"473\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    GE: [, [, , \"(?:[3-57]\\\\d\\\\d|800)\\\\d{6}\", , , , , , , [9], [6, 7]], [, , \"(?:3(?:[256]\\\\d|4[124-9]|7[0-4])|4(?:1\\\\d|2[2-7]|3[1-79]|4[2-8]|7[239]|9[1-7]))\\\\d{6}\", , , , \"322123456\", , , , [6, 7]], [\n      ,\n      ,\n      \"5(?:(?:(?:0555|1(?:[17]77|555))[5-9]|757(?:7[7-9]|8[01]))\\\\d|22252[0-4])\\\\d\\\\d|5(?:0(?:0(?:1[09]|70)|505)|1(?:0[01]0|1(?:07|33|51))|2(?:0[02]0|2[25]2)|3(?:0[03]0|3[35]3)|4(?:0[04]0|411)|5222|9000)[0-4]\\\\d{3}|(?:5(?:0(?:0(?:0\\\\d|1[12]|2[02]|3[0-6]|4[04]|5[05]|77|88|9[09])|(?:[14]\\\\d|77)\\\\d|22[02])|1(?:1(?:[03][01]|[124]\\\\d|5[02-6]|7[0-6])|4\\\\d\\\\d)|2(?:228|555)|3555|4(?:4(?:[02-9]\\\\d|14)|555)|5(?:[0157-9]\\\\d\\\\d|200|333|4(?:44|55))|6[89]\\\\d\\\\d|7(?:(?:[0147-9]\\\\d|22)\\\\d|5(?:00|[57]5))|8(?:0(?:[018]\\\\d|2[0-4])|5(?:55|8[89])|8(?:55|88))|9(?:090|[1-35-9]\\\\d\\\\d))|790\\\\d\\\\d)\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"555123456\"\n    ], [, , \"800\\\\d{6}\", , , , \"800123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"70[67]\\\\d{6}\", , , , \"706123456\"], \"GE\", 995, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"70\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"32\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[57]\"]], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[348]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , \"70[67]\\\\d{6}\"], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    GF: [, [\n      ,\n      ,\n      \"(?:694\\\\d|7093)\\\\d{5}|(?:59|[89]\\\\d)\\\\d{7}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [9]\n    ], [, , \"(?:59(?:4(?:[02-49]\\\\d|1[0-5]|5[6-9]|6[0-3]|80)|88\\\\d)|80[6-9]\\\\d\\\\d)\\\\d{4}\", , , , \"594101234\"], [, , \"(?:694(?:[0-249]\\\\d|3[0-8])|7093[0-3])\\\\d{4}\", , , , \"694201234\"], [, , \"80[0-5]\\\\d{6}\", , , , \"800012345\"], [, , \"8[129]\\\\d{7}\", , , , \"890123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"9(?:(?:396|76\\\\d)\\\\d|476[0-6])\\\\d{4}\", , , , \"976012345\"], \"GF\", 594, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[5-7]|80[6-9]|9[47]\"], \"0$1\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\n      \"$1 $2 $3 $4\",\n      [\"[89]\"],\n      \"0$1\"\n    ]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    GG: [\n      ,\n      [, , \"(?:1481|[357-9]\\\\d{3})\\\\d{6}|8\\\\d{6}(?:\\\\d{2})?\", , , , , , , [7, 9, 10], [6]],\n      [, , \"1481[25-9]\\\\d{5}\", , , , \"1481256789\", , , [10], [6]],\n      [, , \"7(?:(?:781|839)\\\\d|911[17])\\\\d{5}\", , , , \"7781123456\", , , [10]],\n      [, , \"80[08]\\\\d{7}|800\\\\d{6}|8001111\", , , , \"8001234567\"],\n      [, , \"(?:8(?:4[2-5]|7[0-3])|9(?:[01]\\\\d|8[0-3]))\\\\d{7}|845464\\\\d\", , , , \"9012345678\", , , [7, 10]],\n      [, , , , , , , , , [-1]],\n      [, , \"70\\\\d{8}\", , , , \"7012345678\", , , [10]],\n      [, , \"56\\\\d{8}\", , , , \"5612345678\", , , [10]],\n      \"GG\",\n      44,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"([25-9]\\\\d{5})$|0|180020\",\n      \"1481$1\",\n      ,\n      ,\n      ,\n      ,\n      [, , \"76(?:464|652)\\\\d{5}|76(?:0[0-28]|2[356]|34|4[01347]|5[49]|6[0-369]|77|8[14]|9[139])\\\\d{6}\", , , , \"7640123456\", , , [10]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , \"(?:3[0347]|55)\\\\d{8}\", , , , \"5512345678\", , , [10]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    GH: [, [, , \"[235]\\\\d{8}|800\\\\d{5,6}\", , , , , , , [8, 9], [7]], [\n      ,\n      ,\n      \"3082[0-5]\\\\d{4}|3(?:0(?:[237]\\\\d|8[01])|[167](?:2[0-6]|7\\\\d|80)|2(?:2[0-5]|7\\\\d|80)|3(?:2[0-3]|7\\\\d|80)|4(?:2[013-9]|3[01]|7\\\\d|80)|5(?:2[0-7]|7\\\\d|80)|8(?:2[0-2]|7\\\\d|80)|9(?:[28]0|7\\\\d))\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"302345678\",\n      ,\n      ,\n      [9],\n      [7]\n    ], [, , \"(?:2(?:[0346-9]\\\\d|5[67])|5(?:[03-7]\\\\d|9[1-9]))\\\\d{6}\", , , , \"231234567\", , , [9]], [, , \"800\\\\d{5,6}\", , , , \"80012345\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"GH\", 233, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[237]|8[0-2]\"]], [, \"(\\\\d{3})(\\\\d{5})\", \"$1 $2\", [\"8\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[2358]\"], \"0$1\"]], [[, \"(\\\\d{3})(\\\\d{5})\", \"$1 $2\", [\"8\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[2358]\"], \"0$1\"]], [, , , , , , , , , [-1]], , , [\n      ,\n      ,\n      \"800\\\\d{5,6}\"\n    ], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    GI: [, [, , \"(?:[25]\\\\d|60)\\\\d{6}\", , , , , , , [8]], [, , \"2190[0-2]\\\\d{3}|2(?:0(?:[02]\\\\d|3[01])|16[24-9]|2[2-5]\\\\d)\\\\d{4}\", , , , \"20012345\"], [, , \"5251[0-4]\\\\d{3}|(?:5(?:[146-8]\\\\d\\\\d|250)|60(?:1[01]|6\\\\d))\\\\d{4}\", , , , \"57123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"GI\", 350, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{5})\", \"$1 $2\", [\"2\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    GL: [, [\n      ,\n      ,\n      \"(?:19|[2-689]\\\\d|70)\\\\d{4}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [6]\n    ], [, , \"(?:19|3[1-7]|[68][1-9]|70|9\\\\d)\\\\d{4}\", , , , \"321000\"], [, , \"[245]\\\\d{5}\", , , , \"221234\"], [, , \"80\\\\d{4}\", , , , \"801234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"3[89]\\\\d{4}\", , , , \"381234\"], \"GL\", 299, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3\", [\"19|[2-9]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    GM: [, [, , \"[48]\\\\d{8}|[2-9]\\\\d{6}\", , , , , , , [7, 9]], [\n      ,\n      ,\n      \"44(?:44[6-9]|8[0-389]\\\\d)\\\\d{4}|44[6-9]\\\\d{4}|(?:4(?:[23]|44[23])|8[0-389])\\\\d{5}|44(?:1|441)[024679]\\\\d{3}|(?:445|5)(?:5(?:3\\\\d|4[0-7])|6[67]\\\\d|7(?:1[04]|2[035]|3[58]|48))\\\\d{3}\",\n      ,\n      ,\n      ,\n      \"5661234\"\n    ], [, , \"(?:(?:[23679]\\\\d|4[015]|8(?:(?:3[35]|6[68]|99)\\\\d|7(?:[27]\\\\d|4[015])))\\\\d|5(?:[0-489]\\\\d|56))\\\\d{4}|8[4-7]\\\\d{5}\", , , , \"3012345\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"GM\", 220, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[235-9]|4(?:[0-35]|4[16-9])\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[48]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    GN: [, [, , \"722\\\\d{6}|(?:3|6\\\\d)\\\\d{7}\", , , , , , , [8, 9]], [\n      ,\n      ,\n      \"3(?:0(?:24|3[12]|4[1-35-7]|5[13]|6[189]|[78]1|9[1478])|1\\\\d\\\\d)\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"30241234\",\n      ,\n      ,\n      [8]\n    ], [, , \"6[0-356]\\\\d{7}\", , , , \"601123456\", , , [9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"722\\\\d{6}\", , , , \"722123456\", , , [9]], \"GN\", 224, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"3\"]], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[67]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    GP: [, [, , \"7090\\\\d{5}|(?:[56]9|[89]\\\\d)\\\\d{7}\", , , , , , , [9]], [\n      ,\n      ,\n      \"(?:59(?:0(?:0[1-68]|[14][0-24-9]|2[0-68]|3[1-9]|5[3-579]|[68][0-689]|7[08]|9\\\\d)|87\\\\d)|80[6-9]\\\\d\\\\d)\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"590201234\"\n    ], [, , \"(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5]))|7090[0-4])\\\\d{4}\", , , , \"690001234\"], [, , \"80[0-5]\\\\d{6}\", , , , \"800012345\"], [, , \"8[129]\\\\d{7}\", , , , \"810123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"9(?:(?:39[5-7]|76[018])\\\\d|475[0-6])\\\\d{4}\", , , , \"976012345\"], \"GP\", 590, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[5-79]|80[6-9]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"8\"], \"0$1\"]], , [, , , , , , , , , [-1]], 1, , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    GQ: [\n      ,\n      [, , \"222\\\\d{6}|(?:3\\\\d|55|[89]0)\\\\d{7}\", , , , , , , [9]],\n      [, , \"33[0-24-9]\\\\d[46]\\\\d{4}|3(?:33|5\\\\d)\\\\d[7-9]\\\\d{4}\", , , , \"333091234\"],\n      [, , \"(?:222|55\\\\d)\\\\d{6}\", , , , \"222123456\"],\n      [, , \"80\\\\d[1-9]\\\\d{5}\", , , , \"800123456\"],\n      [, , \"90\\\\d[1-9]\\\\d{5}\", , , , \"900123456\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"GQ\",\n      240,\n      \"00\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[235]\"]], [, \"(\\\\d{3})(\\\\d{6})\", \"$1 $2\", [\"[89]\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    GR: [\n      ,\n      [\n        ,\n        ,\n        \"5005000\\\\d{3}|8\\\\d{9,11}|(?:[269]\\\\d|70)\\\\d{8}\",\n        ,\n        ,\n        ,\n        ,\n        ,\n        ,\n        [10, 11, 12]\n      ],\n      [, , \"2(?:1\\\\d\\\\d|2(?:2[1-46-9]|[36][1-8]|4[1-7]|5[1-4]|7[1-5]|[89][1-9])|3(?:1\\\\d|2[1-57]|[35][1-3]|4[13]|7[1-7]|8[124-6]|9[1-79])|4(?:1\\\\d|2[1-8]|3[1-4]|4[13-5]|6[1-578]|9[1-5])|5(?:1\\\\d|[29][1-4]|3[1-5]|4[124]|5[1-6])|6(?:1\\\\d|[269][1-6]|3[1245]|4[1-7]|5[13-9]|7[14]|8[1-5])|7(?:1\\\\d|2[1-5]|3[1-6]|4[1-7]|5[1-57]|6[135]|9[125-7])|8(?:1\\\\d|2[1-5]|[34][1-4]|9[1-57]))\\\\d{6}\", , , , \"2123456789\", , , [10]],\n      [, , \"68[57-9]\\\\d{7}|(?:69|94)\\\\d{8}\", , , , \"6912345678\", , , [10]],\n      [, , \"800\\\\d{7,9}\", , , , \"8001234567\"],\n      [, , \"90[19]\\\\d{7}\", , , , \"9091234567\", , , [10]],\n      [, , \"8(?:0[16]|12|[27]5|50)\\\\d{7}\", , , , \"8011234567\", , , [10]],\n      [, , \"70\\\\d{8}\", , , , \"7012345678\", , , [10]],\n      [, , , , , , , , , [-1]],\n      \"GR\",\n      30,\n      \"00\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"21|7\"]], [, \"(\\\\d{4})(\\\\d{6})\", \"$1 $2\", [\"2(?:2|3[2-57-9]|4[2-469]|5[2-59]|6[2-9]|7[2-69]|8[2-49])|5\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[2689]\"]], [, \"(\\\\d{3})(\\\\d{3,4})(\\\\d{5})\", \"$1 $2 $3\", [\"8\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , \"5005000\\\\d{3}\", , , , \"5005000123\", , , [10]],\n      ,\n      ,\n      [\n        ,\n        ,\n        ,\n        ,\n        ,\n        ,\n        ,\n        ,\n        ,\n        [-1]\n      ]\n    ],\n    GT: [, [, , \"80\\\\d{6}|(?:1\\\\d{3}|[2-7])\\\\d{7}\", , , , , , , [8, 11]], [, , \"[267][2-9]\\\\d{6}\", , , , \"22456789\", , , [8]], [, , \"(?:[3-5]\\\\d\\\\d|80[0-4])\\\\d{5}\", , , , \"51234567\", , , [8]], [, , \"18[01]\\\\d{8}\", , , , \"18001112222\", , , [11]], [, , \"19\\\\d{9}\", , , , \"19001112222\", , , [11]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"GT\", 502, \"00\", , , , , , , , [[, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[2-8]\"]], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"1\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    GU: [, [\n      ,\n      ,\n      \"(?:[58]\\\\d\\\\d|671|900)\\\\d{7}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [10],\n      [7]\n    ], [, , \"671(?:2\\\\d\\\\d|3(?:00|3[39]|4[349]|55|6[26])|4(?:00|56|7[1-9]|8[02-9])|5(?:55|6[2-5]|88)|6(?:3[2-578]|4[24-9]|5[34]|78|8[235-9])|7(?:[0479]7|2[0167]|3[45]|8[7-9])|8(?:[2-57-9]8|6[478])|9(?:2[29]|6[79]|7[1279]|8[7-9]|9[16-9]))\\\\d{4}\", , , , \"6713001234\", , , , [7]], [\n      ,\n      ,\n      \"671(?:2\\\\d\\\\d|3(?:00|3[39]|4[349]|55|6[26])|4(?:00|56|7[1-9]|8[02-9])|5(?:55|6[2-5]|88)|6(?:3[2-578]|4[24-9]|5[34]|78|8[235-9])|7(?:[0479]7|2[0167]|3[45]|8[7-9])|8(?:[2-57-9]8|6[478])|9(?:2[29]|6[79]|7[1279]|8[7-9]|9[16-9]))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"6713001234\",\n      ,\n      ,\n      ,\n      [7]\n    ], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\"], [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"], [, , , , , , , , , [-1]], [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"], [, , , , , , , , , [-1]], \"GU\", 1, \"011\", \"1\", , , \"([2-9]\\\\d{6})$|1\", \"671$1\", , 1, , , [, , , , , , , , , [-1]], , \"671\", [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], , , [, , , , , , , , , [-1]]],\n    GW: [, [, , \"[49]\\\\d{8}|4\\\\d{6}\", , , , , , , [7, 9]], [, , \"443\\\\d{6}\", , , , \"443201234\", , , [9]], [, , \"9(?:5\\\\d|6[569]|77)\\\\d{6}\", , , , \"955012345\", , , [9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"40\\\\d{5}\", , , , \"4012345\", , , [7]], \"GW\", 245, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"40\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[49]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    GY: [, [, , \"(?:[2-8]\\\\d{3}|9008)\\\\d{3}\", , , , , , , [7]], [\n      ,\n      ,\n      \"(?:2(?:1[6-9]|2[0-35-9]|3[1-4]|5[3-9]|6\\\\d|7[0-79])|3(?:2[25-9]|3\\\\d)|4(?:4[0-24]|5[56])|50[0-6]|77[1-57])\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"2201234\"\n    ], [, , \"(?:51[01]|6\\\\d\\\\d|7(?:[0-5]\\\\d|6[0-79]|70|8[067]))\\\\d{4}\", , , , \"6091234\"], [, , \"(?:289|8(?:00|6[28]|88|99))\\\\d{4}\", , , , \"2891234\"], [, , \"9008\\\\d{3}\", , , , \"9008123\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"515\\\\d{4}\", , , , \"5151234\"], \"GY\", 592, \"001\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[2-9]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    HK: [\n      ,\n      [, , \"8[0-46-9]\\\\d{6,7}|9\\\\d{4,7}|(?:[2-7]|9\\\\d{3})\\\\d{7}\", , , , , , , [5, 6, 7, 8, 9, 11]],\n      [\n        ,\n        ,\n        \"(?:2(?:[13-9]\\\\d|2[013-9])\\\\d|3(?:(?:[1569][0-24-9]|4[0-246-9]|7[0-24-69])\\\\d|8(?:4[0-8]|[579]\\\\d|6[0-5]))|58(?:0[1-9]|1[2-9]))\\\\d{4}\",\n        ,\n        ,\n        ,\n        \"21234567\",\n        ,\n        ,\n        [8]\n      ],\n      [, , \"(?:4(?:(?:09|24)[3-6]|44[0-35-9]|6(?:4[0-57-9]|6[0-6])|7(?:4[0-48]|6[0-5]))|5(?:25[3-7]|35[4-8]|73[0-6]|95[0-8])|6(?:26[013-8]|(?:66|78)[0-5])|70(?:7[1-8]|8[0-8])|84(?:4[0-2]|8[0-35-9])|9(?:29[013-9]|39[014-9]|59[0-467]|899))\\\\d{4}|(?:4(?:4[0-35-9]|6[0-357-9]|7[0-35])|5(?:[1-59][0-46-9]|6[0-4689]|7[0-246-9])|6(?:0[1-9]|[13-59]\\\\d|[268][0-57-9]|7[0-79])|70[1-59]|84[0-39]|9(?:0[1-9]|1[02-9]|[2358][0-8]|[467]\\\\d))\\\\d{5}\", , , , \"51234567\", , , [8]],\n      [, , \"800\\\\d{6}\", , , , \"800123456\", , , [9]],\n      [, , \"900(?:[0-24-9]\\\\d{7}|3\\\\d{1,4})\", , , , \"90012345678\", , , [5, 6, 7, 8, 11]],\n      [, , , , , , , , , [-1]],\n      [, , \"8(?:1[0-4679]\\\\d|2(?:[0-36]\\\\d|7[0-4])|3(?:[034]\\\\d|2[09]|70))\\\\d{4}\", , , , \"81123456\", , , [8]],\n      [, , , , , , , , , [-1]],\n      \"HK\",\n      852,\n      \"00(?:30|5[09]|[126-9]?)\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      \"00\",\n      ,\n      [[, \"(\\\\d{3})(\\\\d{2,5})\", \"$1 $2\", [\"900\", \"9003\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[2-7]|8[1-4]|9(?:0[1-9]|[1-8])\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"8\"]], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"9\"]]],\n      ,\n      [\n        ,\n        ,\n        \"7(?:1(?:0[0-38]|1[0-3679]|3[013]|69|9[0136])|2(?:[02389]\\\\d|1[18]|7[27-9])|3(?:[0-38]\\\\d|7[0-369]|9[2357-9])|47\\\\d|5(?:[178]\\\\d|5[0-5])|6(?:0[0-7]|2[236-9]|[35]\\\\d)|7(?:[27]\\\\d|8[7-9])|8(?:[23689]\\\\d|7[1-9])|9(?:[025]\\\\d|6[0-246-8]|7[0-36-9]|8[238]))\\\\d{4}\",\n        ,\n        ,\n        ,\n        \"71123456\",\n        ,\n        ,\n        [8]\n      ],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , \"30(?:0[1-9]|[15-7]\\\\d|2[047]|89)\\\\d{4}\", , , , \"30161234\", , , [8]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    HN: [, [, , \"8\\\\d{10}|[237-9]\\\\d{7}\", , , , , , , [8, 11]], [\n      ,\n      ,\n      \"2(?:2(?:0[0-59]|1[1-9]|[23]\\\\d|4[02-8]|5[57]|6[2458]|7[0135689]|8[01346-9]|9[0-2])|4(?:0[578]|2[3-59]|3[13-9]|4[0-68]|5[1-3589]|80)|5(?:0[2357-9]|1[1-6]|4[03-58]|5\\\\d|6[014-69]|7[04]|80)|6(?:[056]\\\\d|17|2[067]|3[047]|4[0-378]|[78][0-8]|9[01])|7(?:0[5-79]|2[01]|6[46-9]|7[02-9]|8[034]|91)|8(?:79|8[0-357-9]|9[1-57-9]))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"22123456\",\n      ,\n      ,\n      [8]\n    ], [, , \"[37-9]\\\\d{7}\", , , , \"91234567\", , , [8]], [, , \"8002\\\\d{7}\", , , , \"80021234567\", , , [11]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"HN\", 504, \"00\", , , , , , , , [[, \"(\\\\d{4})(\\\\d{4})\", \"$1-$2\", [\"[237-9]\"]], [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"8\"]]], [[, \"(\\\\d{4})(\\\\d{4})\", \"$1-$2\", [\"[237-9]\"]]], [, , , , , , , , , [-1]], , , [, , \"8002\\\\d{7}\", , , , , , , [11]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    HR: [, [, , \"[2-69]\\\\d{8}|80\\\\d{5,7}|[1-79]\\\\d{7}|6\\\\d{6}\", , , , , , , [7, 8, 9], [6]], [\n      ,\n      ,\n      \"1\\\\d{7}|(?:2[0-3]|3[1-5]|4[02-47-9]|5[1-3])\\\\d{6,7}\",\n      ,\n      ,\n      ,\n      \"12345678\",\n      ,\n      ,\n      [8, 9],\n      [6, 7]\n    ], [, , \"9(?:(?:0[1-9]|[12589]\\\\d)\\\\d\\\\d|7(?:[0679]\\\\d\\\\d|5(?:[01]\\\\d|44|55|77|9[5-79])))\\\\d{4}|98\\\\d{6}\", , , , \"921234567\", , , [8, 9]], [, , \"80\\\\d{5,7}\", , , , \"800123456\"], [, , \"6[01459]\\\\d{6}|6[01]\\\\d{5}\", , , , \"6001234\", , , [7, 8]], [, , , , , , , , , [-1]], [, , \"7[45]\\\\d{6}\", , , , \"74123456\", , , [8]], [, , , , , , , , , [-1]], \"HR\", 385, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"6[01]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\", \"$1 $2 $3\", [\"8\"], \"0$1\"], [, \"(\\\\d)(\\\\d{4})(\\\\d{3})\", \"$1 $2 $3\", [\"1\"], \"0$1\"], [\n      ,\n      \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\n      \"$1 $2 $3\",\n      [\"6|7[245]\"],\n      \"0$1\"\n    ], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"9\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[2-57]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"8\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"62\\\\d{6,7}|72\\\\d{6}\", , , , \"62123456\", , , [8, 9]], , , [, , , , , , , , , [-1]]],\n    HT: [, [, , \"[2-589]\\\\d{7}\", , , , , , , [8]], [, , \"2(?:2\\\\d|5[1-5]|81|9[149])\\\\d{5}\", , , , \"22453300\"], [, , \"(?:[34]\\\\d|5[568])\\\\d{6}\", , , , \"34101234\"], [, , \"8\\\\d{7}\", , , , \"80012345\"], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"9(?:[67][0-4]|8[0-3589]|9\\\\d)\\\\d{5}\", , , , \"98901234\"], \"HT\", 509, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{4})\", \"$1 $2 $3\", [\"[2-589]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    HU: [, [, , \"[235-7]\\\\d{8}|[1-9]\\\\d{7}\", , , , , , , [8, 9], [6, 7]], [, , \"(?:1\\\\d|[27][2-9]|3[2-7]|4[24-9]|5[2-79]|6[23689]|8[2-57-9]|9[2-69])\\\\d{6}\", , , , \"12345678\", , , [8], [6, 7]], [, , \"(?:[257]0|3[01])\\\\d{7}\", , , , \"201234567\", , , [9]], [, , \"(?:[48]0\\\\d|680[29])\\\\d{5}\", , , , \"80123456\"], [\n      ,\n      ,\n      \"9[01]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"90123456\",\n      ,\n      ,\n      [8]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"21\\\\d{7}\", , , , \"211234567\", , , [9]], \"HU\", 36, \"00\", \"06\", , , \"06\", , , , [[, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"1\"], \"(06 $1)\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[27][2-9]|3[2-7]|4[24-9]|5[2-79]|6|8[2-57-9]|9[2-69]\"], \"(06 $1)\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[2-9]\"], \"06 $1\"]], , [, , , , , , , , , [-1]], , , [, , \"(?:[48]0\\\\d|680[29])\\\\d{5}\"], [, , \"38\\\\d{7}\", , , , \"381234567\", , , [9]], , , [, , , , , , , , , [-1]]],\n    ID: [, [\n      ,\n      ,\n      \"00[1-9]\\\\d{9,14}|(?:[1-36]|8\\\\d{5})\\\\d{6}|00\\\\d{9}|[1-9]\\\\d{8,10}|[2-9]\\\\d{7}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17],\n      [5, 6]\n    ], [\n      ,\n      ,\n      \"2[124]\\\\d{7,8}|619\\\\d{8}|2(?:1(?:14|500)|2\\\\d{3})\\\\d{3}|61\\\\d{5,8}|(?:2(?:[35][1-4]|6[0-8]|7[1-6]|8\\\\d|9[1-8])|3(?:1|[25][1-8]|3[1-68]|4[1-3]|6[1-3568]|7[0-469]|8\\\\d)|4(?:0[1-589]|1[01347-9]|2[0-36-8]|3[0-24-68]|43|5[1-378]|6[1-5]|7[134]|8[1245])|5(?:1[1-35-9]|2[25-8]|3[124-9]|4[1-3589]|5[1-46]|6[1-8])|6(?:[25]\\\\d|3[1-69]|4[1-6])|7(?:02|[125][1-9]|[36]\\\\d|4[1-8]|7[0-36-9])|9(?:0[12]|1[013-8]|2[0-479]|5[125-8]|6[23679]|7[159]|8[01346]))\\\\d{5,8}\",\n      ,\n      ,\n      ,\n      \"218350123\",\n      ,\n      ,\n      [7, 8, 9, 10, 11],\n      [5, 6]\n    ], [, , \"8[1-35-9]\\\\d{7,10}\", , , , \"812345678\", , , [9, 10, 11, 12]], [, , \"00(?:1803\\\\d{5,11}|7803\\\\d{7})|(?:177\\\\d|800)\\\\d{5,7}\", , , , \"8001234567\", , , [8, 9, 10, 11, 12, 13, 14, 15, 16, 17]], [, , \"809\\\\d{7}\", , , , \"8091234567\", , , [10]], [, , \"804\\\\d{7}\", , , , \"8041234567\", , , [10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"ID\", 62, \"00[89]\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"15\"]], [, \"(\\\\d{2})(\\\\d{5,9})\", \"$1 $2\", [\"2[124]|[36]1\"], \"(0$1)\"], [, \"(\\\\d{3})(\\\\d{5,7})\", \"$1 $2\", [\"800\"], \"0$1\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{5,8})\",\n      \"$1 $2\",\n      [\"[2-79]\"],\n      \"(0$1)\"\n    ], [, \"(\\\\d{3})(\\\\d{3,4})(\\\\d{3})\", \"$1-$2-$3\", [\"8[1-35-9]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{6,8})\", \"$1 $2\", [\"1\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"804\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d)(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"80\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\", \"$1-$2-$3\", [\"8\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{2,8})\", \"$1 $2 $3 $4\", [\"001\"]], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3 $4\", [\"0\"]]], [[, \"(\\\\d)(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"15\"]], [\n      ,\n      \"(\\\\d{2})(\\\\d{5,9})\",\n      \"$1 $2\",\n      [\"2[124]|[36]1\"],\n      \"(0$1)\"\n    ], [, \"(\\\\d{3})(\\\\d{5,7})\", \"$1 $2\", [\"800\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{5,8})\", \"$1 $2\", [\"[2-79]\"], \"(0$1)\"], [, \"(\\\\d{3})(\\\\d{3,4})(\\\\d{3})\", \"$1-$2-$3\", [\"8[1-35-9]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{6,8})\", \"$1 $2\", [\"1\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"804\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d)(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"80\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\", \"$1-$2-$3\", [\"8\"], \"0$1\"]], [, , , , , , , , , [-1]], , , [, , \"001803\\\\d{5,11}|(?:007803\\\\d|8071)\\\\d{6}\", , , , , , , [10, 11, 12, 13, 14, 15, 16, 17]], [\n      ,\n      ,\n      \"(?:1500|8071\\\\d{3})\\\\d{3}\",\n      ,\n      ,\n      ,\n      \"8071123456\",\n      ,\n      ,\n      [7, 10]\n    ], , , [, , , , , , , , , [-1]]],\n    IE: [, [, , \"(?:1\\\\d|[2569])\\\\d{6,8}|4\\\\d{6,9}|7\\\\d{8}|8\\\\d{8,9}\", , , , , , , [7, 8, 9, 10], [5, 6]], [, , \"(?:1\\\\d|21)\\\\d{6,7}|(?:2[24-9]|4(?:0[24]|5\\\\d|7)|5(?:0[45]|1\\\\d|8)|6(?:1\\\\d|[237-9])|9(?:1\\\\d|[35-9]))\\\\d{5}|(?:23|4(?:[1-469]|8\\\\d)|5[23679]|6[4-6]|7[14]|9[04])\\\\d{7}\", , , , \"2212345\", , , , [5, 6]], [, , \"8(?:22|[35-9]\\\\d)\\\\d{6}\", , , , \"850123456\", , , [9]], [, , \"1800\\\\d{6}\", , , , \"1800123456\", , , [10]], [\n      ,\n      ,\n      \"15(?:1[2-8]|[2-8]0|9[089])\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"1520123456\",\n      ,\n      ,\n      [10]\n    ], [, , \"18[59]0\\\\d{6}\", , , , \"1850123456\", , , [10]], [, , \"700\\\\d{6}\", , , , \"700123456\", , , [9]], [, , \"76\\\\d{7}\", , , , \"761234567\", , , [9]], \"IE\", 353, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{5})\", \"$1 $2\", [\"2[24-9]|47|58|6[237-9]|9[35-9]\"], \"(0$1)\"], [, \"(\\\\d{3})(\\\\d{5})\", \"$1 $2\", [\"[45]0\"], \"(0$1)\"], [, \"(\\\\d)(\\\\d{3,4})(\\\\d{4})\", \"$1 $2 $3\", [\"1\"], \"(0$1)\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[2569]|4[1-69]|7[14]\"], \"(0$1)\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"70\"], \"0$1\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\n      \"$1 $2 $3\",\n      [\"81\"],\n      \"(0$1)\"\n    ], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[78]\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"1\"]], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"4\"], \"(0$1)\"], [, \"(\\\\d{2})(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3 $4\", [\"8\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , \"18[59]0\\\\d{6}\", , , , , , , [10]], [, , \"818\\\\d{6}\", , , , \"818123456\", , , [9]], , , [, , \"88210[1-9]\\\\d{4}|8(?:[35-79]5\\\\d\\\\d|8(?:[013-9]\\\\d\\\\d|2(?:[01][1-9]|[2-9]\\\\d)))\\\\d{5}\", , , , \"8551234567\", , , [10]]],\n    IL: [\n      ,\n      [, , \"1\\\\d{6}(?:\\\\d{3,5})?|[57]\\\\d{8}|[1-489]\\\\d{7}\", , , , , , , [\n        7,\n        8,\n        9,\n        10,\n        11,\n        12\n      ]],\n      [, , \"153\\\\d{8,9}|29[1-9]\\\\d{5}|(?:2[0-8]|[3489]\\\\d)\\\\d{6}\", , , , \"21234567\", , , [8, 11, 12], [7]],\n      [, , \"55(?:4(?:0[0-3]|10|6[015-9])|57[0-289]|8[06][0-2])\\\\d{4}|5(?:(?:[0-2][02-9]|[36]\\\\d|[49][2-9]|8[3-7])\\\\d|5(?:01|2\\\\d|3[0-3]|4[3-5]|5[0-25689]|6[6-8]|7[0-267]|8[7-9]|9[1-9]))\\\\d{5}\", , , , \"502345678\", , , [9]],\n      [, , \"1(?:255|80[019]\\\\d{3})\\\\d{3}\", , , , \"1800123456\", , , [7, 10]],\n      [, , \"1212\\\\d{4}|1(?:200|9(?:0[0-2]|19|9\\\\d))\\\\d{6}\", , , , \"1919123456\", , , [8, 10]],\n      [, , \"1700\\\\d{6}\", , , , \"1700123456\", , , [10]],\n      [, , , , , , , , , [-1]],\n      [, , \"7(?:280[01]|38(?:[05]\\\\d|8[01358])|8(?:33|55|77|81)\\\\d)\\\\d{4}|7(?:18|2[23]|3[237]|47|6[258]|7\\\\d|82|9[2-9])\\\\d{6}\", , , , \"771234567\", , , [9]],\n      \"IL\",\n      972,\n      \"0(?:0|1(?:05|[2-9]))\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{4})(\\\\d{3})\", \"$1-$2\", [\"125\"]], [, \"(\\\\d{4})(\\\\d{2})(\\\\d{2})\", \"$1-$2-$3\", [\"121\"]], [, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1-$2-$3\", [\"[2-489]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1-$2-$3\", [\"[57]\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3})\", \"$1-$2-$3\", [\"12\"]], [, \"(\\\\d{4})(\\\\d{6})\", \"$1-$2\", [\"159\"]], [\n        ,\n        \"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\n        \"$1-$2-$3-$4\",\n        [\"1[7-9]\"]\n      ], [, \"(\\\\d{3})(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\", \"$1-$2 $3-$4\", [\"15\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , \"1700\\\\d{6}\", , , , , , , [10]],\n      [, , \"1599\\\\d{6}\", , , , \"1599123456\", , , [10]],\n      ,\n      ,\n      [, , \"151\\\\d{8,9}\", , , , \"15112340000\", , , [11, 12]]\n    ],\n    IM: [, [, , \"1624\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\", , , , , , , [10], [6]], [, , \"1624(?:230|[5-8]\\\\d\\\\d)\\\\d{3}\", , , , \"1624756789\", , , , [6]], [, , \"76245[06]\\\\d{4}|7(?:4576|[59]24\\\\d|624[0-4689])\\\\d{5}\", , , , \"7924123456\"], [, , \"808162\\\\d{4}\", , , , \"8081624567\"], [\n      ,\n      ,\n      \"8(?:440[49]06|72299\\\\d)\\\\d{3}|(?:8(?:45|70)|90[0167])624\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"9016247890\"\n    ], [, , , , , , , , , [-1]], [, , \"70\\\\d{8}\", , , , \"7012345678\"], [, , \"56\\\\d{8}\", , , , \"5612345678\"], \"IM\", 44, \"00\", \"0\", , , \"([25-8]\\\\d{5})$|0|180020\", \"1624$1\", , , , , [, , , , , , , , , [-1]], , \"74576|(?:16|7[56])24\", [, , , , , , , , , [-1]], [, , \"3440[49]06\\\\d{3}|(?:3(?:08162|3\\\\d{4}|45624|7(?:0624|2299))|55\\\\d{4})\\\\d{4}\", , , , \"5512345678\"], , , [, , , , , , , , , [-1]]],\n    IN: [, [, , \"(?:000800|[2-9]\\\\d\\\\d)\\\\d{7}|1\\\\d{7,12}\", , , , , , , [8, 9, 10, 11, 12, 13], [6, 7]], [\n      ,\n      ,\n      \"(?:2717(?:[2-7]\\\\d|95)|6828[235-7]\\\\d)\\\\d{4}|(?:170[24]|280[13468]|4(?:20[24]|72[2-8])|552[1-7])\\\\d{6}|(?:271[0-689]|682[0-79]|782[0-6])[2-7]\\\\d{5}|(?:2(?:[02][2-79]|90)|3(?:23|80)|683|79[1-7])\\\\d{7}|(?:11|33|4[04]|80)[2-7]\\\\d{7}|(?:342|674|788)(?:[0189][2-7]|[2-7]\\\\d)\\\\d{5}|(?:1(?:2[0-249]|3[0-25]|4[145]|[59][14]|6[014]|7[1257]|8[01346])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568]|9[14])|3(?:26|4[13]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[014-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|6(?:12|[2-47]1|5[17]|6[13]|80)|7(?:12|2[14]|3[134]|4[47]|5[15]|[67]1)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91))[2-7]\\\\d{6}|(?:1(?:2[35-8]|3[346-9]|4[236-9]|[59][0235-9]|6[235-9]|7[34689]|8[257-9])|2(?:1[134689]|3[24-8]|4[2-8]|5[25689]|6[2-4679]|7[3-79]|8[2-479]|9[235-9])|3(?:01|1[79]|2[1245]|4[5-8]|5[125689]|6[235-7]|7[157-9]|8[2-46-8])|4(?:1[14578]|2[5689]|3[2-467]|5[4-7]|6[35]|73|8[2689]|9[2389])|5(?:[16][146-9]|2[14-8]|3[1346]|4[14-69]|5[46]|7[2-4]|8[2-8]|9[246])|6(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[14-6])|7(?:1[013-9]|2[0235-9]|3[2679]|4[1-35689]|5[2-46-9]|[67][02-9]|8[013-7]|9[089])|8(?:1[1357-9]|2[235-8]|3[03-57-9]|4[0-24-9]|5\\\\d|6[2457-9]|7[1-6]|8[1256]|9[2-4]))\\\\d[2-7]\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"7410410123\",\n      ,\n      ,\n      [10],\n      [6, 7, 8]\n    ], [\n      ,\n      ,\n      \"(?:6(?:1279|828[01489])|7(?:887[02-9]|9(?:313|79[07-9]))|8(?:079[04-9]|(?:84|91)7[02-8]))\\\\d{5}|(?:160[01]|6(?:(?:12|[2-4]1|5[17]|6[13]|80)[0189]|7(?:1[0189]|86))|7(?:1(?:2[0189]|9[0-5])|3(?:2[5-8]|[34][017-9]|9[016-9])|5(?:[15][017-9]|2[04-9]|9[7-9])|6(?:0[0-47]|1[0-257-9]|2[0-4]|3[19]|5[4589])|70[0289]|88[089]|97[02-8])|8(?:0(?:6[67]|7[02-8])|70[017-9]|84[01489]|91[0-289]))\\\\d{6}|(?:731|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[0189]\\\\d|7[02-8])\\\\d{5}|(?:6(?:(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578])\\\\d|7(?:[23569]\\\\d|4[0189]|8[0-57-9])|8(?:[14-6]\\\\d|2[0-79]))|7(?:1(?:[013-8]\\\\d|9[6-9])|3(?:2[0-49]|9[2-5])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\\\d|5[0-367])|70[13-7]|881))[0189]\\\\d{5}|(?:6(?:[09]\\\\d|1[04679]|2[03689]|3[05-9]|4[0489]|50|6[069]|7[07]|8[7-9])|7(?:[024]\\\\d|3[05-8]|5[0346-8]|6[6-9]|7[1-9]|8[0-79]|9[089])|8(?:0[01589]|1[0-57-9]|2[235-9]|3[03-57-9]|[45]\\\\d|6[02457-9]|7[1-69]|8[0-25-9]|9[02-9])|9\\\\d\\\\d)\\\\d{7}\",\n      ,\n      ,\n      ,\n      \"8123456789\",\n      ,\n      ,\n      [10]\n    ], [, , \"000800\\\\d{7}|180(?:0\\\\d{4,9}|3\\\\d{9})\", , , , \"1800123456\"], [, , \"186[12]\\\\d{9}\", , , , \"1861123456789\", , , [13]], [, , \"1860\\\\d{7}\", , , , \"18603451234\", , , [11]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"IN\", 91, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{7})\", \"$1\", [\"575\"]], [, \"(\\\\d{8})\", \"$1\", [\"5(?:0|2[23]|3[03]|[67]1|88)\", \"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|888)\", \"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|8888)\"], , , 1], [, \"(\\\\d{4})(\\\\d{4,5})\", \"$1 $2\", [\"180\", \"1800\"], , , 1], [\n      ,\n      \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\"140\"],\n      ,\n      ,\n      1\n    ], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"11|2[02]|33|4[04]|79[1-7]|80[2-46]\", \"11|2[02]|33|4[04]|79(?:[1-6]|7[19])|80(?:[2-4]|6[0-589])\", \"11|2[02]|33|4[04]|79(?:[124-6]|3(?:[02-9]|1[0-24-9])|7(?:1|9[1-6]))|80(?:[2-4]|6[0-589])\"], \"0$1\", , 1], [\n      ,\n      \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\n        \"1(?:2[0-249]|3[0-25]|4[145]|[68]|7[1257])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|5[12]|[78]1)|6(?:12|[2-4]1|5[17]|6[13]|80)|7(?:12|3[134]|61|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)|(?:43|59|75)[15]|(?:1[59]|29|67)[14]\",\n        \"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|674|7(?:(?:3[34]|5[15])[2-6]|61[346]|88[0-8])|8(?:70[2-6]|84[235-7]|91[3-7])|(?:1(?:29|60|8[06])|261|552|6(?:12|[2-47]1|5[17]|6[13]|80)|7(?:12|31)|8(?:16|2[014]|3[126]|6[136]|7[78]|83))[2-7]\",\n        \"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|6(?:12(?:[2-6]|7[0-8])|74[2-7])|7(?:3171|5[15][2-6]|61[346]|88(?:[2-7]|82))|8(?:70[2-6]|84(?:[2356]|7[19])|91(?:[3-6]|7[19]))|73[134][2-6]|8(?:16|2[014]|3[126]|6[136]|7[78]|83)(?:[2-6]|7[19])|(?:1(?:29|60|8[06])|261|552|6(?:[2-4]1|5[17]|6[13]|7(?:1|4[0189])|80)|7(?:12|88[01]))[2-7]\"\n      ],\n      \"0$1\",\n      ,\n      1\n    ], [\n      ,\n      \"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\n      \"$1 $2 $3\",\n      [\"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2[2457-9]|3[2-5]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1[013-9]|3[129]|5[29]|6[02-5]|70)|807\", \"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2(?:[2457]|84|95)|3(?:[2-4]|55)|4[235-7]|5[2-689]|6[24578]|7(?:[23569]|8[0-57-9])|8[1-6])|7(?:1(?:[013-8]|9[6-9])|3(?:17|2[0-49]|9[2-57])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4|5[0-367])|70[13-7])|807[19]\", \"1(?:[2-479]|5(?:[0236-9]|5[013-9]))|[2-5]|6(?:2(?:84|95)|355|8(?:28[235-7]|3))|73179|807(?:1|9[1-3])|(?:1552|6(?:(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578])\\\\d|7(?:[23569]\\\\d|8[0-57-9])|8(?:[14-6]\\\\d|2[0-79]))|7(?:1(?:[013-8]\\\\d|9[6-9])|3(?:2[0-49]|9[2-57])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\\\d|5[0-367])|70[13-7]))[2-7]\"],\n      \"0$1\",\n      ,\n      1\n    ], [, \"(\\\\d{5})(\\\\d{5})\", \"$1 $2\", [\"16|[6-9]\"], \"0$1\", , 1], [, \"(\\\\d{4})(\\\\d{2,4})(\\\\d{4})\", \"$1 $2 $3\", [\"18[06]\", \"18[06]0\"], , , 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3 $4\", [\"0\"]], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"18\"], , , 1]], [\n      [, \"(\\\\d{8})\", \"$1\", [\"5(?:0|2[23]|3[03]|[67]1|88)\", \"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|888)\", \"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|8888)\"], , , 1],\n      [, \"(\\\\d{4})(\\\\d{4,5})\", \"$1 $2\", [\"180\", \"1800\"], , , 1],\n      [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"140\"], , , 1],\n      [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"11|2[02]|33|4[04]|79[1-7]|80[2-46]\", \"11|2[02]|33|4[04]|79(?:[1-6]|7[19])|80(?:[2-4]|6[0-589])\", \"11|2[02]|33|4[04]|79(?:[124-6]|3(?:[02-9]|1[0-24-9])|7(?:1|9[1-6]))|80(?:[2-4]|6[0-589])\"], \"0$1\", , 1],\n      [\n        ,\n        \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\n        \"$1 $2 $3\",\n        [\n          \"1(?:2[0-249]|3[0-25]|4[145]|[68]|7[1257])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|5[12]|[78]1)|6(?:12|[2-4]1|5[17]|6[13]|80)|7(?:12|3[134]|61|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)|(?:43|59|75)[15]|(?:1[59]|29|67)[14]\",\n          \"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|674|7(?:(?:3[34]|5[15])[2-6]|61[346]|88[0-8])|8(?:70[2-6]|84[235-7]|91[3-7])|(?:1(?:29|60|8[06])|261|552|6(?:12|[2-47]1|5[17]|6[13]|80)|7(?:12|31)|8(?:16|2[014]|3[126]|6[136]|7[78]|83))[2-7]\",\n          \"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|6(?:12(?:[2-6]|7[0-8])|74[2-7])|7(?:3171|5[15][2-6]|61[346]|88(?:[2-7]|82))|8(?:70[2-6]|84(?:[2356]|7[19])|91(?:[3-6]|7[19]))|73[134][2-6]|8(?:16|2[014]|3[126]|6[136]|7[78]|83)(?:[2-6]|7[19])|(?:1(?:29|60|8[06])|261|552|6(?:[2-4]1|5[17]|6[13]|7(?:1|4[0189])|80)|7(?:12|88[01]))[2-7]\"\n        ],\n        \"0$1\",\n        ,\n        1\n      ],\n      [\n        ,\n        \"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\n        \"$1 $2 $3\",\n        [\"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2[2457-9]|3[2-5]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1[013-9]|3[129]|5[29]|6[02-5]|70)|807\", \"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2(?:[2457]|84|95)|3(?:[2-4]|55)|4[235-7]|5[2-689]|6[24578]|7(?:[23569]|8[0-57-9])|8[1-6])|7(?:1(?:[013-8]|9[6-9])|3(?:17|2[0-49]|9[2-57])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4|5[0-367])|70[13-7])|807[19]\", \"1(?:[2-479]|5(?:[0236-9]|5[013-9]))|[2-5]|6(?:2(?:84|95)|355|8(?:28[235-7]|3))|73179|807(?:1|9[1-3])|(?:1552|6(?:(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578])\\\\d|7(?:[23569]\\\\d|8[0-57-9])|8(?:[14-6]\\\\d|2[0-79]))|7(?:1(?:[013-8]\\\\d|9[6-9])|3(?:2[0-49]|9[2-57])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\\\d|5[0-367])|70[13-7]))[2-7]\"],\n        \"0$1\",\n        ,\n        1\n      ],\n      [, \"(\\\\d{5})(\\\\d{5})\", \"$1 $2\", [\"16|[6-9]\"], \"0$1\", , 1],\n      [, \"(\\\\d{4})(\\\\d{2,4})(\\\\d{4})\", \"$1 $2 $3\", [\"18[06]\", \"18[06]0\"], , , 1],\n      [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"18\"], , , 1]\n    ], [, , , , , , , , , [-1]], , , [, , \"1800\\\\d{4,9}|(?:000800|18(?:03\\\\d\\\\d|6(?:0|[12]\\\\d\\\\d)))\\\\d{7}\"], [, , \"140\\\\d{7}\", , , , \"1409305260\", , , [10]], , , [, , , , , , , , , [-1]]],\n    IO: [\n      ,\n      [, , \"3\\\\d{6}\", , , , , , , [7]],\n      [, , \"37\\\\d{5}\", , , , \"3709100\"],\n      [, , \"38\\\\d{5}\", , , , \"3801234\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"IO\",\n      246,\n      \"00\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"3\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    IQ: [, [, , \"(?:1|7\\\\d\\\\d)\\\\d{7}|[2-6]\\\\d{7,8}\", , , , , , , [8, 9, 10], [6, 7]], [, , \"1\\\\d{7}|(?:2[13-5]|3[02367]|4[023]|5[03]|6[026])\\\\d{6,7}\", , , , \"12345678\", , , [8, 9], [6, 7]], [, , \"7[3-9]\\\\d{8}\", , , , \"7912345678\", , , [10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"IQ\", 964, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"1\"], \"0$1\"], [\n      ,\n      \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\n      \"$1 $2 $3\",\n      [\"[2-6]\"],\n      \"0$1\"\n    ], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"7\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    IR: [, [, , \"[1-9]\\\\d{9}|(?:[1-8]\\\\d\\\\d|9)\\\\d{3,4}\", , , , , , , [4, 5, 6, 7, 10], [8]], [, , \"(?:1[137]|2[13-68]|3[1458]|4[145]|5[1468]|6[16]|7[1467]|8[13467])(?:[03-57]\\\\d{7}|[16]\\\\d{3}(?:\\\\d{4})?|[289]\\\\d{3}(?:\\\\d(?:\\\\d{3})?)?)|94(?:000[09]|(?:12\\\\d|30[0-2])\\\\d|2(?:[02689]0\\\\d|121)|4(?:111|40\\\\d))\\\\d{4}\", , , , \"2123456789\", , , [6, 7, 10], [4, 5, 8]], [\n      ,\n      ,\n      \"9(?:(?:0[0-5]|[13]\\\\d|2[0-3])\\\\d\\\\d|9(?:[0-46]\\\\d\\\\d|5(?:10|5\\\\d)|8(?:[12]\\\\d|3[0-2]|88)|9(?:[01359]\\\\d|21|69|77|8[7-9])))\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"9123456789\",\n      ,\n      ,\n      [10]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"IR\", 98, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{4,5})\", \"$1\", [\"96\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{4,5})\", \"$1 $2\", [\"(?:1[137]|2[13-68]|3[1458]|4[145]|5[1468]|6[16]|7[1467]|8[13467])[12689]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"9\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"[1-8]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [\n      ,\n      ,\n      \"9(?:4440\\\\d{5}|6(?:0[12]|2[16-8]|3(?:08|[14]5|[23]|66)|4(?:0|80)|5[01]|6[89]|86|9[19]))\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [4, 5, 10]\n    ], [, , \"96(?:0[12]|2[16-8]|3(?:08|[14]5|[23]|66)|4(?:0|80)|5[01]|6[89]|86|9[19])\", , , , \"9601\", , , [4, 5]], , , [, , , , , , , , , [-1]]],\n    IS: [, [, , \"(?:38\\\\d|[4-9])\\\\d{6}\", , , , , , , [7, 9]], [, , \"(?:4(?:1[0-24-69]|2[0-7]|[37][0-8]|4[0-24589]|5[0-68]|6\\\\d|8[0-36-8])|5(?:05|[156]\\\\d|2[02578]|3[0-579]|4[03-7]|7[0-2578]|8[0-35-9]|9[013-689])|872)\\\\d{4}\", , , , \"4101234\", , , [7]], [\n      ,\n      ,\n      \"(?:38[589]\\\\d\\\\d|6(?:1[1-8]|2[0-6]|3[026-9]|4[014679]|5[0159]|6[0-69]|70|8[06-8]|9\\\\d)|7(?:5[057]|[6-9]\\\\d)|8(?:2[0-59]|[3-69]\\\\d|8[238]))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"6111234\"\n    ], [, , \"80[0-8]\\\\d{4}\", , , , \"8001234\", , , [7]], [, , \"90(?:0\\\\d|1[5-79]|2[015-79]|3[135-79]|4[125-7]|5[25-79]|7[1-37]|8[0-35-7])\\\\d{3}\", , , , \"9001234\", , , [7]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"49[0-24-79]\\\\d{4}\", , , , \"4921234\", , , [7]], \"IS\", 354, \"00|1(?:0(?:01|[12]0)|100)\", , , , , , \"00\", , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[4-9]\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"3\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"809\\\\d{4}\", , , , \"8091234\", , , [7]], , , [, , \"(?:689|8(?:7[18]|80)|95[48])\\\\d{4}\", , , , \"6891234\", , , [7]]],\n    IT: [, [, , \"0\\\\d{5,11}|1\\\\d{8,10}|3(?:[0-8]\\\\d{7,10}|9\\\\d{7,8})|(?:43|55|70)\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?\", , , , , , , [6, 7, 8, 9, 10, 11, 12]], [\n      ,\n      ,\n      \"0(?:669[0-79]\\\\d{1,6}|831\\\\d{2,8})|0(?:1(?:[0159]\\\\d|[27][1-5]|31|4[1-4]|6[1356]|8[2-57])|2\\\\d\\\\d|3(?:[0159]\\\\d|2[1-4]|3[12]|[48][1-6]|6[2-59]|7[1-7])|4(?:[0159]\\\\d|[23][1-9]|4[245]|6[1-5]|7[1-4]|81)|5(?:[0159]\\\\d|2[1-5]|3[2-6]|4[1-79]|6[4-6]|7[1-578]|8[3-8])|6(?:[0-57-9]\\\\d|6[0-8])|7(?:[0159]\\\\d|2[12]|3[1-7]|4[2-46]|6[13569]|7[13-6]|8[1-59])|8(?:[0159]\\\\d|2[3-578]|3[2356]|[6-8][1-5])|9(?:[0159]\\\\d|[238][1-5]|4[12]|6[1-8]|7[1-6]))\\\\d{2,7}\",\n      ,\n      ,\n      ,\n      \"0212345678\"\n    ], [, , \"3[2-9]\\\\d{7,8}|(?:31|43)\\\\d{8}\", , , , \"3123456789\", , , [9, 10]], [, , \"80(?:0\\\\d{3}|3)\\\\d{3}\", , , , \"800123456\", , , [6, 9]], [, , \"(?:0878\\\\d{3}|89(?:2\\\\d|3[04]|4(?:[0-4]|[5-9]\\\\d\\\\d)|5[0-4]))\\\\d\\\\d|(?:1(?:44|6[346])|89(?:38|5[5-9]|9))\\\\d{6}\", , , , \"899123456\", , , [6, 8, 9, 10]], [, , \"84(?:[08]\\\\d{3}|[17])\\\\d{3}\", , , , \"848123456\", , , [6, 9]], [, , \"1(?:78\\\\d|99)\\\\d{6}\", , , , \"1781234567\", , , [9, 10]], [, , \"55\\\\d{8}\", , , , \"5512345678\", , , [10]], \"IT\", 39, \"00\", , , , , , , , [\n      [, \"(\\\\d{4,5})\", \"$1\", [\"1(?:0|9[246])\", \"1(?:0|9(?:2[2-9]|[46]))\"]],\n      [, \"(\\\\d{6})\", \"$1\", [\"1(?:1|92)\"]],\n      [, \"(\\\\d{2})(\\\\d{4,6})\", \"$1 $2\", [\"0[26]\"]],\n      [, \"(\\\\d{3})(\\\\d{3,6})\", \"$1 $2\", [\"0[13-57-9][0159]|8(?:03|4[17]|9[2-5])\", \"0[13-57-9][0159]|8(?:03|4[17]|9(?:2|3[04]|[45][0-4]))\"]],\n      [, \"(\\\\d{4})(\\\\d{2,6})\", \"$1 $2\", [\"0(?:[13-579][2-46-8]|8[236-8])\"]],\n      [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"894\"]],\n      [, \"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\", \"$1 $2 $3\", [\"0[26]|5\"]],\n      [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"1(?:44|[679])|[378]|43\"]],\n      [, \"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\", \"$1 $2 $3\", [\"0[13-57-9][0159]|14\"]],\n      [, \"(\\\\d{2})(\\\\d{4})(\\\\d{5})\", \"$1 $2 $3\", [\"0[26]\"]],\n      [, \"(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"0\"]],\n      [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\", \"$1 $2 $3\", [\"[03]\"]]\n    ], [[, \"(\\\\d{2})(\\\\d{4,6})\", \"$1 $2\", [\"0[26]\"]], [, \"(\\\\d{3})(\\\\d{3,6})\", \"$1 $2\", [\"0[13-57-9][0159]|8(?:03|4[17]|9[2-5])\", \"0[13-57-9][0159]|8(?:03|4[17]|9(?:2|3[04]|[45][0-4]))\"]], [, \"(\\\\d{4})(\\\\d{2,6})\", \"$1 $2\", [\"0(?:[13-579][2-46-8]|8[236-8])\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"894\"]], [, \"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\", \"$1 $2 $3\", [\"0[26]|5\"]], [\n      ,\n      \"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\n      \"$1 $2 $3\",\n      [\"1(?:44|[679])|[378]|43\"]\n    ], [, \"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\", \"$1 $2 $3\", [\"0[13-57-9][0159]|14\"]], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{5})\", \"$1 $2 $3\", [\"0[26]\"]], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"0\"]], [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\", \"$1 $2 $3\", [\"[03]\"]]], [, , , , , , , , , [-1]], 1, , [, , \"848\\\\d{6}\", , , , , , , [9]], [, , , , , , , , , [-1]], , , [, , \"3[2-8]\\\\d{9,10}\", , , , \"33101234501\", , , [11, 12]]],\n    JE: [, [, , \"1534\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\", , , , , , , [10], [6]], [, , \"1534[0-24-8]\\\\d{5}\", , , , \"1534456789\", , , , [6]], [\n      ,\n      ,\n      \"7(?:(?:(?:50|82)9|937)\\\\d|7(?:00[378]|97\\\\d))\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"7797712345\"\n    ], [, , \"80(?:07(?:35|81)|8901)\\\\d{4}\", , , , \"8007354567\"], [, , \"(?:8(?:4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))|90(?:066[59]|1810|71(?:07|55)))\\\\d{4}\", , , , \"9018105678\"], [, , , , , , , , , [-1]], [, , \"701511\\\\d{4}\", , , , \"7015115678\"], [, , \"56\\\\d{8}\", , , , \"5612345678\"], \"JE\", 44, \"00\", \"0\", , , \"([0-24-8]\\\\d{5})$|0|180020\", \"1534$1\", , , , , [, , \"76(?:464|652)\\\\d{5}|76(?:0[0-28]|2[356]|34|4[01347]|5[49]|6[0-369]|77|8[14]|9[139])\\\\d{6}\", , , , \"7640123456\"], , , [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"(?:3(?:0(?:07(?:35|81)|8901)|3\\\\d{4}|4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))|55\\\\d{4})\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"5512345678\"\n    ], , , [, , , , , , , , , [-1]]],\n    JM: [, [, , \"(?:[58]\\\\d\\\\d|658|900)\\\\d{7}\", , , , , , , [10], [7]], [, , \"8766060\\\\d{3}|(?:658(?:2(?:[5-8]\\\\d|9[0-46-9])|[3-9]\\\\d\\\\d)|876(?:52[35]|6(?:0[1-3579]|1[0235-9]|[23]\\\\d|40|5[06]|6[2-589]|7[0-25-9]|8[04]|9[4-9])|7(?:0[2-689]|[1-6]\\\\d|8[056]|9[45])|9(?:0[1-8]|1[02378]|[2-8]\\\\d|9[2-468])))\\\\d{4}\", , , , \"8765230123\", , , , [7]], [\n      ,\n      ,\n      \"(?:6582(?:[0-4]\\\\d|95)|876(?:2(?:0[1-9]|[13-9]\\\\d|2[013-9])|[348]\\\\d\\\\d|5(?:0[1-9]|[1-9]\\\\d)|6(?:4[89]|6[67])|7(?:0[07]|7\\\\d|8[1-47-9]|9[0-36-9])|9(?:[01]9|9[0579])))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"8762101234\",\n      ,\n      ,\n      ,\n      [7]\n    ], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\"], [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"], [, , , , , , , , , [-1]], [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"], [, , , , , , , , , [-1]], \"JM\", 1, \"011\", \"1\", , , \"1\", , , , , , [, , , , , , , , , [-1]], , \"658|876\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ]],\n    JO: [, [, , \"(?:(?:[2689]|7\\\\d)\\\\d|32|427|53)\\\\d{6}\", , , , , , , [8, 9]], [\n      ,\n      ,\n      \"87(?:000|90[01])\\\\d{3}|(?:2(?:6(?:2[0-35-9]|3[0-578]|4[24-7]|5[0-24-8]|[6-8][023]|9[0-3])|7(?:0[1-79]|10|2[014-7]|3[0-689]|4[019]|5[0-3578]))|32(?:0[1-69]|1[1-35-7]|2[024-7]|3\\\\d|4[0-3]|[5-7][023])|53(?:0[0-3]|[13][023]|2[0-59]|49|5[0-35-9]|6[15]|7[45]|8[1-6]|9[0-36-9])|6(?:2(?:[05]0|22)|3(?:00|33)|4(?:0[0-25]|1[2-7]|2[0569]|[38][07-9]|4[025689]|6[0-589]|7\\\\d|9[0-2])|5(?:[01][056]|2[034]|3[0-57-9]|4[178]|5[0-69]|6[0-35-9]|7[1-379]|8[0-68]|9[0239]))|87(?:20|7[078]|99))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"62001234\",\n      ,\n      ,\n      [8]\n    ], [, , \"(?:427|7(?:[78][0-25-9]|9\\\\d))\\\\d{6}\", , , , \"790123456\", , , [9]], [, , \"80\\\\d{6}\", , , , \"80012345\", , , [8]], [, , \"9\\\\d{7}\", , , , \"90012345\", , , [8]], [, , \"85\\\\d{6}\", , , , \"85012345\", , , [8]], [, , \"70\\\\d{7}\", , , , \"700123456\", , , [9]], [, , , , , , , , , [-1]], \"JO\", 962, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[2356]|87\"], \"(0$1)\"], [, \"(\\\\d{3})(\\\\d{5,6})\", \"$1 $2\", [\"[89]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{7})\", \"$1 $2\", [\"70\"], \"0$1\"], [, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"[47]\"], \"0$1\"]], , [\n      ,\n      ,\n      \"74(?:66|77)\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"746612345\",\n      ,\n      ,\n      [9]\n    ], , , [, , , , , , , , , [-1]], [, , \"8(?:10|8\\\\d)\\\\d{5}\", , , , \"88101234\", , , [8]], , , [, , , , , , , , , [-1]]],\n    JP: [\n      ,\n      [, , \"00[1-9]\\\\d{6,14}|[25-9]\\\\d{9}|(?:00|[1-9]\\\\d\\\\d)\\\\d{6}\", , , , , , , [8, 9, 10, 11, 12, 13, 14, 15, 16, 17]],\n      [, , \"(?:1(?:1[235-8]|2[3-6]|3[3-9]|4[2-6]|[58][2-8]|6[2-7]|7[2-9]|9[1-9])|(?:2[2-9]|[36][1-9])\\\\d|4(?:[2-578]\\\\d|6[02-8]|9[2-59])|5(?:[2-589]\\\\d|6[1-9]|7[2-8])|7(?:[25-9]\\\\d|3[4-9]|4[02-9])|8(?:[2679]\\\\d|3[2-9]|4[5-9]|5[1-9]|8[03-9])|9(?:[2-58]\\\\d|[679][1-9]))\\\\d{6}\", , , , \"312345678\", , , [9]],\n      [\n        ,\n        ,\n        \"[6-9]0[1-9]\\\\d{7}\",\n        ,\n        ,\n        ,\n        \"9012345678\",\n        ,\n        ,\n        [10]\n      ],\n      [, , \"00777(?:[01]|5\\\\d)\\\\d\\\\d|(?:00(?:7778|882[1245])|(?:120|800\\\\d)\\\\d\\\\d)\\\\d{4}|00(?:37|66|78)\\\\d{6,13}\", , , , \"120123456\"],\n      [, , \"990\\\\d{6}\", , , , \"990123456\", , , [9]],\n      [, , , , , , , , , [-1]],\n      [, , \"60\\\\d{7}\", , , , \"601234567\", , , [9]],\n      [, , \"50[1-9]\\\\d{7}\", , , , \"5012345678\", , , [10]],\n      \"JP\",\n      81,\n      \"010\",\n      \"0\",\n      ,\n      ,\n      \"(000[2569]\\\\d{4,6})$|(?:(?:003768)0?)|0\",\n      \"$1\",\n      ,\n      ,\n      [[, \"(\\\\d{4})(\\\\d{4})\", \"$1-$2\", [\"007\", \"0077\", \"00777\", \"00777[01]\"]], [, \"(\\\\d{8,10})\", \"$1\", [\"000\"]], [\n        ,\n        \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\n        \"$1-$2-$3\",\n        [\"(?:12|57|99)0\"],\n        \"0$1\"\n      ], [, \"(\\\\d{4})(\\\\d)(\\\\d{4})\", \"$1-$2-$3\", [\"1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|499|5(?:76|97)|746|8(?:3[89]|47|51)|9(?:80|9[16])\", \"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:76|97)9|7468|8(?:3(?:8[7-9]|96)|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\", \"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:769|979[2-69])|7468|8(?:3(?:8[7-9]|96[2457-9])|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\"], \"0$1\"], [\n        ,\n        \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\n        \"$1-$2-$3\",\n        [\"60\"],\n        \"0$1\"\n      ], [, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1-$2-$3\", [\"3|4(?:2[09]|7[01])|6[1-9]\", \"3|4(?:2(?:0|9[02-69])|7(?:0[019]|1))|6[1-9]\"], \"0$1\"], [\n        ,\n        \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\n        \"$1-$2-$3\",\n        [\n          \"1(?:1|5[45]|77|88|9[69])|2(?:2[1-37]|3[0-269]|4[59]|5|6[24]|7[1-358]|8[1369]|9[0-38])|4(?:[28][1-9]|3[0-57]|[45]|6[248]|7[2-579]|9[29])|5(?:2|3[0459]|4[0-369]|5[29]|8[02389]|9[0-389])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9[2-6])|8(?:2[124589]|3[26-9]|49|51|6|7[0-468]|8[68]|9[019])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9[1-489])\",\n          \"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2(?:[127]|3[014-9])|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9[19])|62|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|8[1-9]|9[29])|5(?:2|3(?:[045]|9[0-8])|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0-2469])|3(?:[29]|60)|49|51|6(?:[0-24]|36|5[0-3589]|7[23]|9[01459])|7[0-468]|8[68])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3[34]|4[0178]))|(?:264|837)[016-9]|2(?:57|93)[015-9]|(?:25[0468]|422|838)[01]|(?:47[59]|59[89]|8(?:6[68]|9))[019]\",\n          \"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3(?:[045]|9(?:[0-58]|6[4-9]|7[0-35689]))|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0169])|3(?:[29]|60|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[2-57-9]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|7(?:2[2-468]|3[78])|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:8294|96)[1-3]|2(?:57|93)[015-9]|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|8292|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]\"\n        ],\n        \"0$1\"\n      ], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{4})\", \"$1-$2-$3\", [\"[14]|[289][2-9]|5[3-9]|7[2-4679]\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{2})(\\\\d{3,4})\", \"$1-$2-$3\", [\"007\", \"0077\"]], [, \"(\\\\d{4})(\\\\d{2})(\\\\d{4})\", \"$1-$2-$3\", [\"008\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1-$2-$3\", [\"800\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1-$2-$3\", [\"[25-9]\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3,4})\", \"$1-$2-$3\", [\"0\"]], [, \"(\\\\d{4})(\\\\d{4})(\\\\d{4,5})\", \"$1-$2-$3\", [\"0\"]], [, \"(\\\\d{4})(\\\\d{5})(\\\\d{5,6})\", \"$1-$2-$3\", [\"0\"]], [, \"(\\\\d{4})(\\\\d{6})(\\\\d{6,7})\", \"$1-$2-$3\", [\"0\"]]],\n      [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1-$2-$3\", [\"(?:12|57|99)0\"], \"0$1\"], [\n        ,\n        \"(\\\\d{4})(\\\\d)(\\\\d{4})\",\n        \"$1-$2-$3\",\n        [\"1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|499|5(?:76|97)|746|8(?:3[89]|47|51)|9(?:80|9[16])\", \"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:76|97)9|7468|8(?:3(?:8[7-9]|96)|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\", \"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:769|979[2-69])|7468|8(?:3(?:8[7-9]|96[2457-9])|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\"],\n        \"0$1\"\n      ], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1-$2-$3\", [\"60\"], \"0$1\"], [, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1-$2-$3\", [\"3|4(?:2[09]|7[01])|6[1-9]\", \"3|4(?:2(?:0|9[02-69])|7(?:0[019]|1))|6[1-9]\"], \"0$1\"], [\n        ,\n        \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\n        \"$1-$2-$3\",\n        [\n          \"1(?:1|5[45]|77|88|9[69])|2(?:2[1-37]|3[0-269]|4[59]|5|6[24]|7[1-358]|8[1369]|9[0-38])|4(?:[28][1-9]|3[0-57]|[45]|6[248]|7[2-579]|9[29])|5(?:2|3[0459]|4[0-369]|5[29]|8[02389]|9[0-389])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9[2-6])|8(?:2[124589]|3[26-9]|49|51|6|7[0-468]|8[68]|9[019])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9[1-489])\",\n          \"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2(?:[127]|3[014-9])|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9[19])|62|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|8[1-9]|9[29])|5(?:2|3(?:[045]|9[0-8])|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0-2469])|3(?:[29]|60)|49|51|6(?:[0-24]|36|5[0-3589]|7[23]|9[01459])|7[0-468]|8[68])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3[34]|4[0178]))|(?:264|837)[016-9]|2(?:57|93)[015-9]|(?:25[0468]|422|838)[01]|(?:47[59]|59[89]|8(?:6[68]|9))[019]\",\n          \"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3(?:[045]|9(?:[0-58]|6[4-9]|7[0-35689]))|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0169])|3(?:[29]|60|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[2-57-9]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|7(?:2[2-468]|3[78])|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:8294|96)[1-3]|2(?:57|93)[015-9]|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|8292|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]\"\n        ],\n        \"0$1\"\n      ], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{4})\", \"$1-$2-$3\", [\"[14]|[289][2-9]|5[3-9]|7[2-4679]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1-$2-$3\", [\"800\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1-$2-$3\", [\"[25-9]\"], \"0$1\"]],\n      [, , \"20\\\\d{8}\", , , , \"2012345678\", , , [10]],\n      ,\n      ,\n      [, , \"00(?:777(?:[01]|(?:5|8\\\\d)\\\\d)|882[1245]\\\\d\\\\d)\\\\d\\\\d|00(?:37|66|78)\\\\d{6,13}\"],\n      [, , \"570\\\\d{6}\", , , , \"570123456\", , , [9]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    KE: [, [, , \"(?:[17]\\\\d\\\\d|900)\\\\d{6}|(?:2|80)0\\\\d{6,7}|[4-6]\\\\d{6,8}\", , , , , , , [7, 8, 9, 10]], [\n      ,\n      ,\n      \"(?:4[245]|5[1-79]|6[01457-9])\\\\d{5,7}|(?:4[136]|5[08]|62)\\\\d{7}|(?:[24]0|66)\\\\d{6,7}\",\n      ,\n      ,\n      ,\n      \"202012345\",\n      ,\n      ,\n      [7, 8, 9]\n    ], [, , \"(?:1(?:0[0-8]|[18]\\\\d|2[014]|30|4[0-5])|7\\\\d\\\\d)\\\\d{6}\", , , , \"712123456\", , , [9]], [, , \"800[02-8]\\\\d{5,6}\", , , , \"800223456\", , , [9, 10]], [, , \"900[02-9]\\\\d{5}\", , , , \"900223456\", , , [9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"KE\", 254, \"000\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{5,7})\", \"$1 $2\", [\"[24-6]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{6})\", \"$1 $2\", [\"[17]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[89]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    KG: [\n      ,\n      [, , \"8\\\\d{9}|[235-9]\\\\d{8}\", , , , , , , [9, 10], [5, 6]],\n      [, , \"312(?:5[0-79]\\\\d|9(?:[0-689]\\\\d|7[0-24-9]))\\\\d{3}|(?:3(?:1(?:2[0-46-8]|3[1-9]|47|[56]\\\\d)|2(?:22|3[0-479]|6[0-7])|4(?:22|5[6-9]|6\\\\d)|5(?:22|3[4-7]|59|6\\\\d)|6(?:22|5[35-7]|6\\\\d)|7(?:22|3[468]|4[1-9]|59|[67]\\\\d)|9(?:22|4[1-8]|6\\\\d))|6(?:09|12|2[2-4])\\\\d)\\\\d{5}\", , , , \"312123456\", , , [9], [5, 6]],\n      [, , \"312(?:58\\\\d|973)\\\\d{3}|(?:2(?:0[0-35]|2\\\\d)|5[0-24-7]\\\\d|600|7(?:[07]\\\\d|55)|88[08]|9(?:12|9[05-9]))\\\\d{6}\", , , , \"700123456\", , , [9]],\n      [, , \"800\\\\d{6,7}\", , , , \"800123456\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"KG\",\n      996,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{4})(\\\\d{5})\", \"$1 $2\", [\"3(?:1[346]|[24-79])\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[235-79]|88\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d)(\\\\d{2,3})\", \"$1 $2 $3 $4\", [\"8\"], \"0$1\"]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    KH: [\n      ,\n      [, , \"1\\\\d{9}|[1-9]\\\\d{7,8}\", , , , , , , [8, 9, 10], [6, 7]],\n      [\n        ,\n        ,\n        \"23(?:4(?:[2-4]|[56]\\\\d)|[568]\\\\d\\\\d)\\\\d{4}|23[236-9]\\\\d{5}|(?:2[4-6]|3[2-6]|4[2-4]|[5-7][2-5])(?:(?:[237-9]|4[56]|5\\\\d)\\\\d{5}|6\\\\d{5,6})\",\n        ,\n        ,\n        ,\n        \"23756789\",\n        ,\n        ,\n        [8, 9],\n        [6, 7]\n      ],\n      [, , \"(?:(?:1[28]|3[18]|9[67])\\\\d|6[016-9]|7(?:[07-9]|[16]\\\\d)|8(?:[013-79]|8\\\\d))\\\\d{6}|(?:1\\\\d|9[0-57-9])\\\\d{6}|(?:2[3-6]|3[2-6]|4[2-4]|[5-7][2-5])48\\\\d{5}\", , , , \"91234567\", , , [8, 9]],\n      [, , \"1800(?:1\\\\d|2[019])\\\\d{4}\", , , , \"1800123456\", , , [10]],\n      [, , \"1900(?:1\\\\d|2[09])\\\\d{4}\", , , , \"1900123456\", , , [10]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"KH\",\n      855,\n      \"00[14-9]\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[1-9]\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"1\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    KI: [, [, , \"(?:[37]\\\\d|6[0-79])\\\\d{6}|(?:[2-48]\\\\d|50)\\\\d{3}\", , , , , , , [5, 8]], [, , \"(?:[24]\\\\d|3[1-9]|50|65(?:02[12]|12[56]|22[89]|[3-5]00)|7(?:27\\\\d\\\\d|3100|5(?:02[12]|12[56]|22[89]|[34](?:00|81)|500))|8[0-5])\\\\d{3}\", , , , \"31234\"], [\n      ,\n      ,\n      \"(?:6200[01]|7(?:310[1-9]|5(?:02[03-9]|12[0-47-9]|22[0-7]|[34](?:0[1-9]|8[02-9])|50[1-9])))\\\\d{3}|(?:63\\\\d\\\\d|7(?:(?:[0146-9]\\\\d|2[0-689])\\\\d|3(?:[02-9]\\\\d|1[1-9])|5(?:[0-2][013-9]|[34][1-79]|5[1-9]|[6-9]\\\\d)))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"72001234\",\n      ,\n      ,\n      [8]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"30(?:0[01]\\\\d\\\\d|12(?:11|20))\\\\d\\\\d\", , , , \"30010000\", , , [8]], \"KI\", 686, \"00\", \"0\", , , \"0\", , , , , , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    KM: [, [, , \"[3478]\\\\d{6}\", , , , , , , [7], [4]], [, , \"7[4-7]\\\\d{5}\", , , , \"7712345\", , , , [4]], [, , \"[34]\\\\d{6}\", , , , \"3212345\"], [, , , , , , , , , [-1]], [, , \"8\\\\d{6}\", , , , \"8001234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"KM\", 269, \"00\", , , , , , , , [[\n      ,\n      \"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\n      \"$1 $2 $3\",\n      [\"[3478]\"]\n    ]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    KN: [, [, , \"(?:[58]\\\\d\\\\d|900)\\\\d{7}\", , , , , , , [10], [7]], [, , \"869(?:2(?:29|36)|302|4(?:6[015-9]|70)|56[5-7])\\\\d{4}\", , , , \"8692361234\", , , , [7]], [, , \"869(?:48[89]|55[6-8]|66\\\\d|76[02-7])\\\\d{4}\", , , , \"8697652917\", , , , [7]], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\"], [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"5002345678\"\n    ], [, , , , , , , , , [-1]], \"KN\", 1, \"011\", \"1\", , , \"([2-7]\\\\d{6})$|1\", \"869$1\", , , , , [, , , , , , , , , [-1]], , \"869\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    KP: [, [, , \"85\\\\d{6}|(?:19\\\\d|[2-7])\\\\d{7}\", , , , , , , [8, 10], [6, 7]], [, , \"(?:(?:195|2)\\\\d|3[19]|4[159]|5[37]|6[17]|7[39]|85)\\\\d{6}\", , , , \"21234567\", , , , [6, 7]], [, , \"19[1-3]\\\\d{7}\", , , , \"1921234567\", , , [10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"KP\", 850, \"00|99\", \"0\", , , \"0\", , , , [[\n      ,\n      \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\n      \"$1 $2 $3\",\n      [\"8\"],\n      \"0$1\"\n    ], [, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[2-7]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"1\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , \"238[02-9]\\\\d{4}|2(?:[0-24-9]\\\\d|3[0-79])\\\\d{5}\", , , , , , , [8]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    KR: [, [, , \"00[1-9]\\\\d{8,11}|(?:[12]|5\\\\d{3})\\\\d{7}|[13-6]\\\\d{9}|(?:[1-6]\\\\d|80)\\\\d{7}|[3-6]\\\\d{4,5}|(?:00|7)0\\\\d{8}\", , , , , , , [5, 6, 8, 9, 10, 11, 12, 13, 14], [3, 4, 7]], [\n      ,\n      ,\n      \"(?:2|3[1-3]|[46][1-4]|5[1-5])[1-9]\\\\d{6,7}|(?:3[1-3]|[46][1-4]|5[1-5])1\\\\d{2,3}\",\n      ,\n      ,\n      ,\n      \"22123456\",\n      ,\n      ,\n      [5, 6, 8, 9, 10],\n      [3, 4, 7]\n    ], [, , \"1(?:05(?:[0-8]\\\\d|9[0-6])|22[13]\\\\d)\\\\d{4,5}|1(?:0[0-46-9]|[16-9]\\\\d|2[013-9])\\\\d{6,7}\", , , , \"1020000000\", , , [9, 10]], [, , \"00(?:308\\\\d{6,7}|798\\\\d{7,9})|(?:00368|[38]0)\\\\d{7}\", , , , \"801234567\", , , [9, 11, 12, 13, 14]], [, , \"60[2-9]\\\\d{6}\", , , , \"602345678\", , , [9]], [, , , , , , , , , [-1]], [, , \"50\\\\d{8,9}\", , , , \"5012345678\", , , [10, 11]], [, , \"70\\\\d{8}\", , , , \"7012345678\", , , [10]], \"KR\", 82, \"00(?:[125689]|3(?:[46]5|91)|7(?:00|27|3|55|6[126]))\", \"0\", , , \"0(8(?:[1-46-8]|5\\\\d\\\\d))?\", , , , [[\n      ,\n      \"(\\\\d{5})\",\n      \"$1\",\n      [\"1[016-9]1\", \"1[016-9]11\", \"1[016-9]114\"],\n      \"0$1\"\n    ], [, \"(\\\\d{2})(\\\\d{3,4})\", \"$1-$2\", [\"(?:3[1-3]|[46][1-4]|5[1-5])1\"], \"0$1\", \"0$CC-$1\"], [, \"(\\\\d{4})(\\\\d{4})\", \"$1-$2\", [\"1\"]], [, \"(\\\\d)(\\\\d{3,4})(\\\\d{4})\", \"$1-$2-$3\", [\"2\"], \"0$1\", \"0$CC-$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1-$2-$3\", [\"[36]0|8\"], \"0$1\", \"0$CC-$1\"], [, \"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\", \"$1-$2-$3\", [\"[1346]|5[1-5]\"], \"0$1\", \"0$CC-$1\"], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1-$2-$3\", [\"[57]\"], \"0$1\", \"0$CC-$1\"], [, \"(\\\\d{5})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"003\", \"0030\"]], [\n      ,\n      \"(\\\\d{2})(\\\\d{5})(\\\\d{4})\",\n      \"$1-$2-$3\",\n      [\"5\"],\n      \"0$1\",\n      \"0$CC-$1\"\n    ], [, \"(\\\\d{5})(\\\\d{3,4})(\\\\d{4})\", \"$1 $2 $3\", [\"0\"]], [, \"(\\\\d{5})(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3 $4\", [\"0\"]]], [\n      [, \"(\\\\d{2})(\\\\d{3,4})\", \"$1-$2\", [\"(?:3[1-3]|[46][1-4]|5[1-5])1\"], \"0$1\", \"0$CC-$1\"],\n      [, \"(\\\\d{4})(\\\\d{4})\", \"$1-$2\", [\"1\"]],\n      [, \"(\\\\d)(\\\\d{3,4})(\\\\d{4})\", \"$1-$2-$3\", [\"2\"], \"0$1\", \"0$CC-$1\"],\n      [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1-$2-$3\", [\"[36]0|8\"], \"0$1\", \"0$CC-$1\"],\n      [, \"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\", \"$1-$2-$3\", [\"[1346]|5[1-5]\"], \"0$1\", \"0$CC-$1\"],\n      [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1-$2-$3\", [\"[57]\"], \"0$1\", \"0$CC-$1\"],\n      [, \"(\\\\d{2})(\\\\d{5})(\\\\d{4})\", \"$1-$2-$3\", [\"5\"], \"0$1\", \"0$CC-$1\"]\n    ], [, , \"15\\\\d{7,8}\", , , , \"1523456789\", , , [9, 10]], , , [, , \"00(?:3(?:08\\\\d{6,7}|68\\\\d{7})|798\\\\d{7,9})\", , , , , , , [11, 12, 13, 14]], [, , \"1(?:5(?:22|33|44|66|77|88|99)|6(?:[07]0|44|6[0168]|88)|8(?:00|33|55|77|99))\\\\d{4}\", , , , \"15441234\", , , [8]], , , [, , , , , , , , , [-1]]],\n    KW: [, [, , \"18\\\\d{5}|(?:[2569]\\\\d|41)\\\\d{6}\", , , , , , , [7, 8]], [, , \"2(?:[23]\\\\d\\\\d|4(?:[1-35-9]\\\\d|44)|5(?:0[034]|[2-46]\\\\d|5[1-3]|7[1-7]))\\\\d{4}\", , , , \"22345678\", , , [8]], [\n      ,\n      ,\n      \"(?:41\\\\d\\\\d|5(?:(?:[05]\\\\d|1[0-7]|6[56])\\\\d|2(?:22|5[25])|7(?:55|77)|88[58])|6(?:(?:0[034679]|5[015-9]|6\\\\d)\\\\d|1(?:00|11|6[16])|2[26]2|3[36]3|4[46]4|7(?:0[013-9]|[67]\\\\d)|8[68]8|9(?:[069]\\\\d|3[039]))|9(?:(?:[04679]\\\\d|8[057-9])\\\\d|1(?:00|1[01]|99)|2(?:00|2\\\\d)|3(?:00|3[03])|5(?:00|5\\\\d)))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"50012345\",\n      ,\n      ,\n      [8]\n    ], [, , \"18\\\\d{5}\", , , , \"1801234\", , , [7]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"KW\", 965, \"00\", , , , , , , , [[, \"(\\\\d{4})(\\\\d{3,4})\", \"$1 $2\", [\"[169]|2(?:[235]|4[1-35-9])|52\"]], [, \"(\\\\d{3})(\\\\d{5})\", \"$1 $2\", [\"[245]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    KY: [, [, , \"(?:345|[58]\\\\d\\\\d|900)\\\\d{7}\", , , , , , , [10], [7]], [\n      ,\n      ,\n      \"345(?:2(?:22|3[23]|44|66)|333|444|6(?:23|38|40)|7(?:30|4[35-79]|6[6-9]|77)|8(?:00|1[45]|4[89]|88)|9(?:14|4[035-9]))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"3452221234\",\n      ,\n      ,\n      ,\n      [7]\n    ], [, , \"345(?:32[1-9]|4(?:1[2-6]|2[0-4])|5(?:1[67]|2[5-79]|4[6-9]|50|76)|649|82[56]|9(?:1[679]|2[2-9]|3[06-9]|90))\\\\d{4}\", , , , \"3453231234\", , , , [7]], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002345678\"], [, , \"(?:345976|900[2-9]\\\\d\\\\d)\\\\d{4}\", , , , \"9002345678\"], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"5002345678\"\n    ], [, , , , , , , , , [-1]], \"KY\", 1, \"011\", \"1\", , , \"([2-9]\\\\d{6})$|1\", \"345$1\", , , , , [, , , , , , , , , [-1]], , \"345\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    KZ: [, [, , \"8\\\\d{13}|[78]\\\\d{9}\", , , , , , , [10, 14], [5, 6, 7]], [\n      ,\n      ,\n      \"7(?:1(?:0(?:[23]\\\\d|4[0-3]|59|63)|1(?:[23]\\\\d|4[0-79]|59)|2(?:[23]\\\\d|59)|3(?:2\\\\d|3[0-79]|4[0-35-9]|59)|4(?:[24]\\\\d|3[013-9]|5[1-9]|97)|5(?:2\\\\d|3[1-9]|4[0-7]|59)|6(?:[2-4]\\\\d|5[19]|61)|72\\\\d|8(?:[27]\\\\d|3[1-46-9]|4[0-5]|59))|2(?:1(?:[23]\\\\d|4[46-9]|5[3469])|2(?:2\\\\d|3[0679]|46|5[12679])|3(?:[2-4]\\\\d|5[139])|4(?:2\\\\d|3[1-35-9]|59)|5(?:[23]\\\\d|4[0-8]|59|61)|6(?:2\\\\d|3[1-9]|4[0-4]|59)|7(?:[2379]\\\\d|40|5[279])|8(?:[23]\\\\d|4[0-3]|59)|9(?:2\\\\d|3[124578]|59)))\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"7123456789\",\n      ,\n      ,\n      [10],\n      [5, 6, 7]\n    ], [, , \"7(?:0[0-25-8]|47|6[0-4]|7[15-8]|85)\\\\d{7}\", , , , \"7710009998\", , , [10]], [, , \"8(?:00|108\\\\d{3})\\\\d{7}\", , , , \"8001234567\"], [, , \"809\\\\d{7}\", , , , \"8091234567\", , , [10]], [, , , , , , , , , [-1]], [, , \"808\\\\d{7}\", , , , \"8081234567\", , , [10]], [, , \"751\\\\d{7}\", , , , \"7511234567\", , , [10]], \"KZ\", 7, \"810\", \"8\", , , \"8\", , \"8~10\", , , , [, , , , , , , , , [-1]], , \"7\", [, , \"751\\\\d{7}\", , , , , , , [10]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    LA: [, [, , \"[23]\\\\d{9}|3\\\\d{8}|(?:[235-8]\\\\d|41)\\\\d{6}\", , , , , , , [8, 9, 10], [6]], [\n      ,\n      ,\n      \"(?:2[13]|[35-7][14]|41|8[1468])\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"21212862\",\n      ,\n      ,\n      [8],\n      [6]\n    ], [, , \"(?:20(?:[23579]\\\\d|8[78])|30[24]\\\\d)\\\\d{6}|30\\\\d{7}\", , , , \"2023123456\", , , [9, 10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"LA\", 856, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"2[13]|3[14]|[4-8]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"3\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"[23]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    LB: [, [\n      ,\n      ,\n      \"[27-9]\\\\d{7}|[13-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [7, 8]\n    ], [, , \"7(?:62|8[0-6]|9[04-9])\\\\d{4}|(?:[14-69]\\\\d|2(?:[14-69]\\\\d|[78][1-9])|7[2-57]|8[02-9])\\\\d{5}\", , , , \"1123456\"], [, , \"(?:(?:3|81)\\\\d|7(?:[01]\\\\d|6[013-9]|8[7-9]|9[0-4]))\\\\d{5}\", , , , \"71123456\"], [, , , , , , , , , [-1]], [, , \"9[01]\\\\d{6}\", , , , \"90123456\", , , [8]], [, , \"80\\\\d{6}\", , , , \"80123456\", , , [8]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"LB\", 961, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[13-69]|7(?:[2-57]|62|8[0-6]|9[04-9])|8[02-9]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[27-9]\"]]], , [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    LC: [, [, , \"(?:[58]\\\\d\\\\d|758|900)\\\\d{7}\", , , , , , , [10], [7]], [, , \"758(?:234|4(?:30|5\\\\d|6[2-9]|8[0-2])|57[0-2]|(?:63|75)8)\\\\d{4}\", , , , \"7584305678\", , , , [7]], [, , \"758(?:28[4-7]|384|4(?:6[01]|8[4-9])|5(?:1[89]|20|84)|7(?:1[2-9]|2\\\\d|3[0-3])|812)\\\\d{4}\", , , , \"7582845678\", , , , [7]], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\"], [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"5002345678\"\n    ], [, , , , , , , , , [-1]], \"LC\", 1, \"011\", \"1\", , , \"([2-8]\\\\d{6})$|1\", \"758$1\", , , , , [, , , , , , , , , [-1]], , \"758\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    LI: [, [, , \"[68]\\\\d{8}|(?:[2378]\\\\d|90)\\\\d{5}\", , , , , , , [7, 9]], [, , \"(?:2(?:01|1[27]|2[024]|3\\\\d|6[02-578]|96)|3(?:[24]0|33|7[0135-7]|8[048]|9[0269]))\\\\d{4}\", , , , \"2345678\", , , [7]], [, , \"(?:6(?:(?:4[5-9]|5\\\\d)\\\\d|6(?:[024-68]\\\\d|1[01]|3[7-9]|7[02]))\\\\d|7(?:[37-9]\\\\d|42|56))\\\\d{4}\", , , , \"660234567\"], [, , \"8002[28]\\\\d\\\\d|80(?:05\\\\d|9)\\\\d{4}\", , , , \"8002222\"], [\n      ,\n      ,\n      \"90(?:02[258]|1(?:23|3[14])|66[136])\\\\d\\\\d\",\n      ,\n      ,\n      ,\n      \"9002222\",\n      ,\n      ,\n      [7]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"LI\", 423, \"00\", \"0\", , , \"(1001)|0\", , , , [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3\", [\"[2379]|8(?:0[09]|7)\", \"[2379]|8(?:0(?:02|9)|7)\"], , \"$CC $1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"8\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"69\"], , \"$CC $1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"6\"], , \"$CC $1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"870(?:28|87)\\\\d\\\\d\", , , , \"8702812\", , , [7]], , , [, , \"697(?:42|56|[78]\\\\d)\\\\d{4}\", , , , \"697861234\", , , [9]]],\n    LK: [\n      ,\n      [, , \"[1-9]\\\\d{8}\", , , , , , , [9], [7]],\n      [, , \"(?:12[2-9]|602|8[12]\\\\d|9(?:1\\\\d|22|9[245]))\\\\d{6}|(?:11|2[13-7]|3[1-8]|4[157]|5[12457]|6[35-7])[2-57]\\\\d{6}\", , , , \"112345678\", , , , [7]],\n      [, , \"7(?:[0-25-8]\\\\d|4[0-4])\\\\d{6}\", , , , \"712345678\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"LK\",\n      94,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"7\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[1-689]\"], \"0$1\"]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , \"1973\\\\d{5}\", , , , \"197312345\"],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    LR: [, [, , \"(?:[2457]\\\\d|33|88)\\\\d{7}|(?:2\\\\d|[4-6])\\\\d{6}\", , , , , , , [7, 8, 9]], [, , \"2\\\\d{7}\", , , , \"21234567\", , , [8]], [, , \"(?:(?:(?:22|33)0|555|7(?:6[01]|7\\\\d)|88\\\\d)\\\\d|4(?:240|[67]))\\\\d{5}|[56]\\\\d{6}\", , , , \"770123456\", , , [7, 9]], [, , , , , , , , , [-1]], [, , \"332(?:02|[34]\\\\d)\\\\d{4}\", , , , \"332021234\", , , [9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"LR\", 231, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"4[67]|[56]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"2\"], \"0$1\"], [\n      ,\n      \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\"[2-578]\"],\n      \"0$1\"\n    ]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    LS: [, [, , \"(?:[256]\\\\d\\\\d|800)\\\\d{5}\", , , , , , , [8]], [, , \"2\\\\d{7}\", , , , \"22123456\"], [, , \"[56]\\\\d{7}\", , , , \"50123456\"], [, , \"800[1256]\\\\d{4}\", , , , \"80021234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"LS\", 266, \"00\", , , , , , , , [[, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[2568]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    LT: [\n      ,\n      [, , \"(?:[3469]\\\\d|52|[78]0)\\\\d{6}\", , , , , , , [8]],\n      [\n        ,\n        ,\n        \"(?:3[1478]|4[124-6]|52)\\\\d{6}\",\n        ,\n        ,\n        ,\n        \"31234567\"\n      ],\n      [, , \"6\\\\d{7}\", , , , \"61234567\"],\n      [, , \"80[02]\\\\d{5}\", , , , \"80012345\"],\n      [, , \"9(?:0[0239]|10)\\\\d{5}\", , , , \"90012345\"],\n      [, , \"808\\\\d{5}\", , , , \"80812345\"],\n      [, , \"70[05]\\\\d{5}\", , , , \"70012345\"],\n      [, , \"[89]01\\\\d{5}\", , , , \"80123456\"],\n      \"LT\",\n      370,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"[08]\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"52[0-7]\"], \"(0-$1)\", , 1], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"[7-9]\"], \"0 $1\", , 1], [, \"(\\\\d{2})(\\\\d{6})\", \"$1 $2\", [\"37|4(?:[15]|6[1-8])\"], \"(0-$1)\", , 1], [, \"(\\\\d{3})(\\\\d{5})\", \"$1 $2\", [\"[3-6]\"], \"(0-$1)\", , 1]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , \"70[67]\\\\d{5}\", , , , \"70712345\"],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    LU: [, [, , \"35[013-9]\\\\d{4,8}|6\\\\d{8}|35\\\\d{2,4}|(?:[2457-9]\\\\d|3[0-46-9])\\\\d{2,9}\", , , , , , , [4, 5, 6, 7, 8, 9, 10, 11]], [, , \"(?:35[013-9]|80[2-9]|90[89])\\\\d{1,8}|(?:2[2-9]|3[0-46-9]|[457]\\\\d|8[13-9]|9[2-579])\\\\d{2,9}\", , , , \"27123456\"], [, , \"6(?:[26][18]|5[1568]|7[189]|81|9[128])\\\\d{6}\", , , , \"628123456\", , , [9]], [, , \"800\\\\d{5}\", , , , \"80012345\", , , [8]], [, , \"90[015]\\\\d{5}\", , , , \"90012345\", , , [8]], [, , \"801\\\\d{5}\", , , , \"80112345\", , , [8]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"20(?:1\\\\d{5}|[2-689]\\\\d{1,7})\",\n      ,\n      ,\n      ,\n      \"20201234\",\n      ,\n      ,\n      [4, 5, 6, 7, 8, 9, 10]\n    ], \"LU\", 352, \"00\", , , , \"(15(?:0[06]|1[12]|[35]5|4[04]|6[26]|77|88|99)\\\\d)\", , , , [[, \"(\\\\d{2})(\\\\d{3})\", \"$1 $2\", [\"2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])\"], , \"$CC $1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3\", [\"2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])\"], , \"$CC $1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"20[2-689]\"], , \"$CC $1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\", \"$1 $2 $3 $4\", [\"20\"], , \"$CC $1\"], [\n      ,\n      \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,5})\",\n      \"$1 $2 $3 $4\",\n      [\"[3-57]|8[13-9]|9(?:0[89]|[2-579])|(?:2|80)[2-9]\"],\n      ,\n      \"$CC $1\"\n    ], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"80[01]|90[015]\"], , \"$CC $1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"20\"], , \"$CC $1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"6\"], , \"$CC $1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\", \"$1 $2 $3 $4 $5\", [\"20\"], , \"$CC $1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    LV: [, [, , \"(?:[268]\\\\d|78|90)\\\\d{6}\", , , , , , , [8]], [, , \"6\\\\d{7}\", , , , \"63123456\"], [\n      ,\n      ,\n      \"2333[0-8]\\\\d{3}|2(?:[0-24-9]\\\\d\\\\d|3(?:0[07]|[14-9]\\\\d|2[02-9]|3[0-24-9]))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"21234567\"\n    ], [, , \"80\\\\d{6}\", , , , \"80123456\"], [, , \"90\\\\d{6}\", , , , \"90123456\"], [, , \"81\\\\d{6}\", , , , \"81123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"LV\", 371, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[2679]|8[01]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    LY: [, [, , \"[2-9]\\\\d{8}\", , , , , , , [9], [7]], [\n      ,\n      ,\n      \"(?:2(?:0[56]|[1-6]\\\\d|7[124579]|8[124])|3(?:1\\\\d|2[2356])|4(?:[17]\\\\d|2[1-357]|5[2-4]|8[124])|5(?:[1347]\\\\d|2[1-469]|5[13-5]|8[1-4])|6(?:[1-479]\\\\d|5[2-57]|8[1-5])|7(?:[13]\\\\d|2[13-79])|8(?:[124]\\\\d|5[124]|84))\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"212345678\",\n      ,\n      ,\n      ,\n      [7]\n    ], [, , \"9[1-6]\\\\d{7}\", , , , \"912345678\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"LY\", 218, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{7})\", \"$1-$2\", [\"[2-9]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    MA: [, [, , \"[5-8]\\\\d{8}\", , , , , , , [9]], [, , \"5(?:(?:18|4[0679]|5[03])\\\\d|2(?:[0-25-79]\\\\d|3[1-578]|4[02-46-8]|8[0235-9])|3(?:[0-47]\\\\d|5[02-9]|6[02-8]|8[014-9]|9[3-9]))\\\\d{5}\", , , , \"520123456\"], [\n      ,\n      ,\n      \"(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:[016-8]\\\\d|2[0-8]|3[01]|5[0-5]))\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"650123456\"\n    ], [, , \"80[0-7]\\\\d{6}\", , , , \"801234567\"], [, , \"89\\\\d{7}\", , , , \"891234567\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"(?:592(?:4[0-2]|93)|80[89]\\\\d\\\\d)\\\\d{4}\", , , , \"592401234\"], \"MA\", 212, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{4})(\\\\d{5})\", \"$1-$2\", [\"892\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{7})\", \"$1-$2\", [\"8(?:0[0-7]|9)\"], \"0$1\"], [, \"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4 $5\", [\"[5-8]\"], \"0$1\"]], , [, , , , , , , , , [-1]], 1, \"[5-8]\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    MC: [\n      ,\n      [, , \"(?:[3489]|[67]\\\\d)\\\\d{7}\", , , , , , , [8, 9]],\n      [, , \"(?:870|9[2-47-9]\\\\d)\\\\d{5}\", , , , \"99123456\", , , [8]],\n      [, , \"4(?:[46]\\\\d|5[1-9])\\\\d{5}|(?:3|[67]\\\\d)\\\\d{7}\", , , , \"612345678\"],\n      [, , \"(?:800|90\\\\d)\\\\d{5}\", , , , \"90123456\", , , [8]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"MC\",\n      377,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{2})\", \"$1 $2 $3\", [\"87\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"4\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[389]\"]], [, \"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4 $5\", [\"[67]\"], \"0$1\"]],\n      [[\n        ,\n        \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\n        \"$1 $2 $3\",\n        [\"4\"],\n        \"0$1\"\n      ], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[389]\"]], [, \"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4 $5\", [\"[67]\"], \"0$1\"]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , \"8[07]0\\\\d{5}\", , , , , , , [8]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    MD: [\n      ,\n      [, , \"(?:[235-7]\\\\d|[89]0)\\\\d{6}\", , , , , , , [8]],\n      [, , \"(?:(?:2[1-9]|3[1-79])\\\\d|5(?:33|5[257]))\\\\d{5}\", , , , \"22212345\"],\n      [, , \"562\\\\d{5}|(?:6\\\\d|7[16-9])\\\\d{6}\", , , , \"62112345\"],\n      [, , \"800\\\\d{5}\", , , , \"80012345\"],\n      [, , \"90[056]\\\\d{5}\", , , , \"90012345\"],\n      [, , \"808\\\\d{5}\", , , , \"80812345\"],\n      [, , , , , , , , , [-1]],\n      [, , \"3[08]\\\\d{6}\", , , , \"30123456\"],\n      \"MD\",\n      373,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{3})(\\\\d{5})\", \"$1 $2\", [\"[89]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"22|3\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"[25-7]\"], \"0$1\"]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , \"803\\\\d{5}\", , , , \"80312345\"],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    ME: [\n      ,\n      [, , \"(?:20|[3-79]\\\\d)\\\\d{6}|80\\\\d{6,7}\", , , , , , , [8, 9], [6]],\n      [, , \"(?:20[2-8]|3(?:[0-2][2-7]|3[24-7])|4(?:0[2-467]|1[2467])|5(?:0[2467]|1[24-7]|2[2-467]))\\\\d{5}\", , , , \"30234567\", , , [8], [6]],\n      [, , \"6(?:[07-9]\\\\d|3[024]|6[0-25])\\\\d{5}\", , , , \"60123456\", , , [8]],\n      [, , \"80(?:[0-2578]|9\\\\d)\\\\d{5}\", , , , \"80080002\"],\n      [, , \"9(?:4[1568]|5[178])\\\\d{5}\", , , , \"94515151\", , , [8]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , \"78[1-49]\\\\d{5}\", , , , \"78108780\", , , [8]],\n      \"ME\",\n      382,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[2-9]\"], \"0$1\"]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , \"77[1-9]\\\\d{5}\", , , , \"77273012\", , , [8]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    MF: [, [, , \"7090\\\\d{5}|(?:[56]9|[89]\\\\d)\\\\d{7}\", , , , , , , [9]], [\n      ,\n      ,\n      \"(?:59(?:0(?:0[079]|[14]3|[27][79]|3[03-7]|5[0-268]|87)|87\\\\d)|80[6-9]\\\\d\\\\d)\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"590271234\"\n    ], [, , \"(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5]))|7090[0-4])\\\\d{4}\", , , , \"690001234\"], [, , \"80[0-5]\\\\d{6}\", , , , \"800012345\"], [, , \"8[129]\\\\d{7}\", , , , \"810123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"9(?:(?:39[5-7]|76[018])\\\\d|475[0-6])\\\\d{4}\", , , , \"976012345\"], \"MF\", 590, \"00\", \"0\", , , \"0\", , , , , , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    MG: [, [, , \"[23]\\\\d{8}\", , , , , , , [9], [7]], [, , \"2072[29]\\\\d{4}|20(?:2\\\\d|4[47]|5[3467]|6[279]|7[356]|8[268]|9[2457])\\\\d{5}\", , , , \"202123456\", , , , [7]], [\n      ,\n      ,\n      \"3[2-9]\\\\d{7}\",\n      ,\n      ,\n      ,\n      \"321234567\"\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"22\\\\d{7}\", , , , \"221234567\"], \"MG\", 261, \"00\", \"0\", , , \"([24-9]\\\\d{6})$|0\", \"20$1\", , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[23]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    MH: [, [, , \"329\\\\d{4}|(?:[256]\\\\d|45)\\\\d{5}\", , , , , , , [7]], [, , \"(?:247|528|625)\\\\d{4}\", , , , \"2471234\"], [, , \"(?:(?:23|54)5|329|45[35-8])\\\\d{4}\", , , , \"2351234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , \"635\\\\d{4}\", , , , \"6351234\"], \"MH\", 692, \"011\", \"1\", , , \"1\", , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1-$2\", [\"[2-6]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    MK: [, [, , \"[2-578]\\\\d{7}\", , , , , , , [8], [6, 7]], [, , \"(?:(?:2(?:62|77)0|3444)\\\\d|4[56]440)\\\\d{3}|(?:34|4[357])700\\\\d{3}|(?:2(?:[0-3]\\\\d|5[0-578]|6[01]|82)|3(?:1[3-68]|[23][2-68]|4[23568])|4(?:[23][2-68]|4[3-68]|5[2568]|6[25-8]|7[24-68]|8[4-68]))\\\\d{5}\", , , , \"22012345\", , , , [6, 7]], [\n      ,\n      ,\n      \"7(?:3555|(?:474|9[019]7)7)\\\\d{3}|7(?:[0-25-8]\\\\d\\\\d|3(?:[1-478]\\\\d|6[01])|4(?:2\\\\d|60|7[01578])|9(?:[2-4]\\\\d|5[01]|7[015]))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"72345678\"\n    ], [, , \"800\\\\d{5}\", , , , \"80012345\"], [, , \"5\\\\d{7}\", , , , \"50012345\"], [, , \"8(?:0[1-9]|[1-9]\\\\d)\\\\d{5}\", , , , \"80123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"MK\", 389, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"2|34[47]|4(?:[37]7|5[47]|64)\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[347]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[58]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    ML: [, [, , \"[24-9]\\\\d{7}\", , , , , , , [8]], [\n      ,\n      ,\n      \"2(?:07[0-8]|12[67])\\\\d{4}|(?:2(?:02|1[4-689])|4(?:0[0-4]|4[1-69]))\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"20212345\"\n    ], [, , \"2(?:0(?:01|79)|17\\\\d)\\\\d{4}|(?:5[0-3]|[679]\\\\d|8[2-59])\\\\d{6}\", , , , \"65012345\"], [, , \"80\\\\d{6}\", , , , \"80012345\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"ML\", 223, \"00\", , , , , , , , [[, \"(\\\\d{4})\", \"$1\", [\"67[057-9]|74[045]\", \"67(?:0[09]|[59]9|77|8[89])|74(?:0[02]|44|55)\"]], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[24-9]\"]]], [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[24-9]\"]]], [, , , , , , , , , [-1]], , , [, , \"80\\\\d{6}\"], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    MM: [\n      ,\n      [, , \"1\\\\d{5,7}|95\\\\d{6}|(?:[4-7]|9[0-46-9])\\\\d{6,8}|(?:2|8\\\\d)\\\\d{5,8}\", , , , , , , [6, 7, 8, 9, 10], [5]],\n      [\n        ,\n        ,\n        \"(?:1(?:(?:12|[28]\\\\d|3[56]|7[3-6]|9[0-6])\\\\d|4(?:2[29]|7[0-2]|83)|6)|2(?:2(?:00|8[34])|4(?:0\\\\d|22|7[0-2]|83)|51\\\\d\\\\d)|4(?:2(?:2\\\\d\\\\d|48[013])|3(?:20\\\\d|4(?:70|83)|56)|420\\\\d|5(?:2\\\\d|470))|6(?:0(?:[23]|88\\\\d)|(?:124|[56]2\\\\d)\\\\d|2472|3(?:20\\\\d|470)|4(?:2[04]\\\\d|472)|7(?:3\\\\d\\\\d|4[67]0|8(?:[01459]\\\\d|8))))\\\\d{4}|5(?:2(?:2\\\\d{5,6}|47[02]\\\\d{4})|(?:3472|4(?:2(?:1|86)|470)|522\\\\d|6(?:20\\\\d|483)|7(?:20\\\\d|48[01])|8(?:20\\\\d|47[02])|9(?:20\\\\d|470))\\\\d{4})|7(?:(?:0470|4(?:25\\\\d|470)|5(?:202|470|96\\\\d))\\\\d{4}|1(?:20\\\\d{4,5}|4(?:70|83)\\\\d{4}))|8(?:1(?:2\\\\d{5,6}|4(?:10|7[01]\\\\d)\\\\d{3})|2(?:2\\\\d{5,6}|(?:320|490\\\\d)\\\\d{3})|(?:3(?:2\\\\d\\\\d|470)|4[24-7]|5(?:(?:2\\\\d|51)\\\\d|4(?:[1-35-9]\\\\d|4[0-57-9]))|6[23])\\\\d{4})|(?:1[2-6]\\\\d|4(?:2[24-8]|3[2-7]|[46][2-6]|5[3-5])|5(?:[27][2-8]|3[2-68]|4[24-8]|5[23]|6[2-4]|8[24-7]|9[2-7])|6(?:[19]20|42[03-6]|(?:52|7[45])\\\\d)|7(?:[04][24-8]|[15][2-7]|22|3[2-4])|8(?:1[2-689]|2[2-8]|(?:[35]2|64)\\\\d))\\\\d{4}|25\\\\d{5,6}|(?:2[2-9]|6(?:1[2356]|[24][2-6]|3[24-6]|5[2-4]|6[2-8]|7[235-7]|8[245]|9[24])|8(?:3[24]|5[245]))\\\\d{4}\",\n        ,\n        ,\n        ,\n        \"1234567\",\n        ,\n        ,\n        [6, 7, 8, 9],\n        [5]\n      ],\n      [, , \"(?:17[01]|9(?:2(?:[0-4]|[56]\\\\d\\\\d)|(?:3(?:[0-36]|4\\\\d)|(?:6\\\\d|8[89]|9[4-8])\\\\d|7(?:3|40|[5-9]\\\\d))\\\\d|4(?:(?:[0245]\\\\d|[1379])\\\\d|88)|5[0-6])\\\\d)\\\\d{4}|9[69]1\\\\d{6}|9(?:[68]\\\\d|9[089])\\\\d{5}\", , , , \"92123456\", , , [7, 8, 9, 10]],\n      [, , \"80080(?:0[1-9]|2\\\\d)\\\\d{3}\", , , , \"8008001234\", , , [10]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , \"1333\\\\d{4}\", , , , \"13331234\", , , [8]],\n      \"MM\",\n      95,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d)(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"16|2\"], \"0$1\"], [\n        ,\n        \"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\n        \"$1 $2 $3\",\n        [\"4(?:[2-46]|5[3-5])|5|6(?:[1-689]|7[235-7])|7(?:[0-4]|5[2-7])|8[1-5]|(?:60|86)[23]\"],\n        \"0$1\"\n      ], [, \"(\\\\d)(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[12]|452|678|86\", \"[12]|452|6788|86\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[4-7]|8[1-35]\"], \"0$1\"], [, \"(\\\\d)(\\\\d{3})(\\\\d{4,6})\", \"$1 $2 $3\", [\"9(?:2[0-4]|[35-9]|4[137-9])\"], \"0$1\"], [, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"2\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"8\"], \"0$1\"], [, \"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"92\"], \"0$1\"], [\n        ,\n        \"(\\\\d)(\\\\d{5})(\\\\d{4})\",\n        \"$1 $2 $3\",\n        [\"9\"],\n        \"0$1\"\n      ]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    MN: [, [, , \"[12]\\\\d{7,9}|[5-9]\\\\d{7}\", , , , , , , [8, 9, 10], [4, 5, 6]], [, , \"[12](?:2[1-3]|(?:3[2-8]|4[2-68]|5[1-4689])\\\\d)\\\\d{5,6}|7(?:0(?:[0-5]\\\\d|7[078]|80)|128)\\\\d{4}|[12]27\\\\d{6}|(?:11|2[16]|5[368])\\\\d{6}\", , , , \"53123456\", , , , [4, 5, 6]], [, , \"(?:87[01]|92[0139])\\\\d{5}|(?:5[05]|6[069]|7[28]|8[0135689]|9[013-9])\\\\d{6}\", , , , \"88123456\", , , [8]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , \"712[0-79]\\\\d{4}|7(?:1[013-9]|[5-79]\\\\d)\\\\d{5}\", , , , \"75123456\", , , [8]], \"MN\", 976, \"001\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{4})\", \"$1 $2 $3\", [\"11|2[16]\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[5-9]\"]], [, \"(\\\\d{3})(\\\\d{5,6})\", \"$1 $2\", [\"[12]2[1-3]\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{5,6})\", \"$1 $2\", [\"[12](?:27|3[2-8]|4[2-68]|5[1-4689])\", \"[12](?:27|3[2-8]|4[2-68]|5[1-4689])[0-3]\"], \"0$1\"], [, \"(\\\\d{5})(\\\\d{4,5})\", \"$1 $2\", [\"[12]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    MO: [\n      ,\n      [, , \"0800\\\\d{3}|(?:28|[68]\\\\d)\\\\d{6}\", , , , , , , [7, 8]],\n      [, , \"(?:28[2-9]|8(?:11|[2-57-9]\\\\d))\\\\d{5}\", , , , \"28212345\", , , [8]],\n      [, , \"6800[0-79]\\\\d{3}|6(?:[235]\\\\d\\\\d|6(?:0[0-5]|[1-9]\\\\d)|8(?:0[1-9]|[14-8]\\\\d|2[5-9]|[39][0-4]))\\\\d{4}\", , , , \"66123456\", , , [8]],\n      [, , \"0800\\\\d{3}\", , , , \"0800501\", , , [7]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"MO\",\n      853,\n      \"00\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{4})(\\\\d{3})\", \"$1 $2\", [\"0\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[268]\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [\n        ,\n        ,\n        ,\n        ,\n        ,\n        ,\n        ,\n        ,\n        ,\n        [-1]\n      ]\n    ],\n    MP: [, [, , \"[58]\\\\d{9}|(?:67|90)0\\\\d{7}\", , , , , , , [10], [7]], [, , \"670(?:2(?:3[3-7]|56|8[4-8])|32[1-38]|4(?:33|8[348])|5(?:32|55|88)|6(?:64|70|82)|78[3589]|8[3-9]8|989)\\\\d{4}\", , , , \"6702345678\", , , , [7]], [, , \"670(?:2(?:3[3-7]|56|8[4-8])|32[1-38]|4(?:33|8[348])|5(?:32|55|88)|6(?:64|70|82)|78[3589]|8[3-9]8|989)\\\\d{4}\", , , , \"6702345678\", , , , [7]], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\"], [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"5002345678\"\n    ], [, , , , , , , , , [-1]], \"MP\", 1, \"011\", \"1\", , , \"([2-9]\\\\d{6})$|1\", \"670$1\", , 1, , , [, , , , , , , , , [-1]], , \"670\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    MQ: [, [, , \"7091\\\\d{5}|(?:[56]9|[89]\\\\d)\\\\d{7}\", , , , , , , [9]], [, , \"(?:59(?:6(?:[03-7]\\\\d|1[05]|2[7-9]|8[0-39]|9[04-9])|89\\\\d)|80[6-9]\\\\d\\\\d|9(?:477[6-9]|767[4589]))\\\\d{4}\", , , , \"596301234\"], [, , \"(?:69[67]\\\\d\\\\d|7091[0-3])\\\\d{4}\", , , , \"696201234\"], [, , \"80[0-5]\\\\d{6}\", , , , \"800012345\"], [, , \"8[129]\\\\d{7}\", , , , \"810123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"9(?:397[0-3]|477[0-5]|76(?:6\\\\d|7[0-367]))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"976612345\"\n    ], \"MQ\", 596, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[5-79]|8(?:0[6-9]|[36])\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"8\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    MR: [\n      ,\n      [, , \"(?:[2-4]\\\\d\\\\d|800)\\\\d{5}\", , , , , , , [8]],\n      [, , \"(?:25[08]|35\\\\d|45[1-7])\\\\d{5}\", , , , \"35123456\"],\n      [, , \"[2-4][0-46-9]\\\\d{6}\", , , , \"22123456\"],\n      [, , \"800\\\\d{5}\", , , , \"80012345\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"MR\",\n      222,\n      \"00\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[2-48]\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    MS: [, [, , \"(?:[58]\\\\d\\\\d|664|900)\\\\d{7}\", , , , , , , [10], [7]], [, , \"6644(?:1[0-3]|91)\\\\d{4}\", , , , \"6644912345\", , , , [7]], [, , \"664(?:3(?:49|9[1-6])|49[2-6])\\\\d{4}\", , , , \"6644923456\", , , , [7]], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\"], [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"5002345678\"\n    ], [, , , , , , , , , [-1]], \"MS\", 1, \"011\", \"1\", , , \"([34]\\\\d{6})$|1\", \"664$1\", , , , , [, , , , , , , , , [-1]], , \"664\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    MT: [, [, , \"3550\\\\d{4}|(?:[2579]\\\\d\\\\d|800)\\\\d{5}\", , , , , , , [8]], [, , \"20(?:3[1-4]|6[059])\\\\d{4}|2(?:0[19]|[1-357]\\\\d|60)\\\\d{5}\", , , , \"21001234\"], [, , \"(?:7(?:210|[79]\\\\d\\\\d)|9(?:[29]\\\\d\\\\d|69[67]|8(?:1[1-3]|89|97)))\\\\d{4}\", , , , \"96961234\"], [, , \"800(?:02|[3467]\\\\d)\\\\d{3}\", , , , \"80071234\"], [\n      ,\n      ,\n      \"5(?:0(?:0(?:37|43)|(?:6\\\\d|70|9[0168])\\\\d)|[12]\\\\d0[1-5])\\\\d{3}\",\n      ,\n      ,\n      ,\n      \"50037123\"\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"3550\\\\d{4}\", , , , \"35501234\"], \"MT\", 356, \"00\", , , , , , , , [[, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[2357-9]\"]]], , [, , \"7117\\\\d{4}\", , , , \"71171234\"], , , [, , , , , , , , , [-1]], [, , \"501\\\\d{5}\", , , , \"50112345\"], , , [, , , , , , , , , [-1]]],\n    MU: [, [, , \"(?:[57]|8\\\\d\\\\d)\\\\d{7}|[2-468]\\\\d{6}\", , , , , , , [7, 8, 10]], [, , \"(?:2(?:[0346-8]\\\\d|1[0-8])|4(?:[013568]\\\\d|2[0-24-8]|71|90)|54(?:[3-5]\\\\d|71)|6\\\\d\\\\d|8(?:14|3[129]))\\\\d{4}\", , , , \"54480123\", , , [7, 8]], [\n      ,\n      ,\n      \"5(?:4(?:2[1-389]|7[1-9])|87[15-8])\\\\d{4}|(?:5(?:2[5-9]|4[3-689]|[57]\\\\d|8[0-689]|9[0-8])|7(?:0[0-7]|3[013]))\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"52512345\",\n      ,\n      ,\n      [8]\n    ], [, , \"802\\\\d{7}|80[0-2]\\\\d{4}\", , , , \"8001234\", , , [7, 10]], [, , \"30\\\\d{5}\", , , , \"3012345\", , , [7]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"3(?:20|9\\\\d)\\\\d{4}\", , , , \"3201234\", , , [7]], \"MU\", 230, \"0(?:0|[24-7]0|3[03])\", , , , , , \"020\", , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[2-46]|8[013]\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[57]\"]], [, \"(\\\\d{5})(\\\\d{5})\", \"$1 $2\", [\"8\"]]], , [, , \"219\\\\d{4}\", , , , \"2190123\", , , [7]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    MV: [, [, , \"(?:800|9[0-57-9]\\\\d)\\\\d{7}|[34679]\\\\d{6}\", , , , , , , [\n      7,\n      10\n    ]], [, , \"(?:3(?:0[0-4]|3[0-59])|6(?:[58][024689]|6[024-68]|7[02468]))\\\\d{4}\", , , , \"6701234\", , , [7]], [, , \"(?:46[46]|[79]\\\\d\\\\d)\\\\d{4}\", , , , \"7712345\", , , [7]], [, , \"800\\\\d{7}\", , , , \"8001234567\", , , [10]], [, , \"900\\\\d{7}\", , , , \"9001234567\", , , [10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"MV\", 960, \"0(?:0|19)\", , , , , , \"00\", , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1-$2\", [\"[34679]\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[89]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"4(?:0[01]|50)\\\\d{4}\", , , , \"4001234\", , , [7]], , , [, , , , , , , , , [-1]]],\n    MW: [, [, , \"(?:[1289]\\\\d|31|77)\\\\d{7}|1\\\\d{6}\", , , , , , , [7, 9]], [, , \"1[2-9]\\\\d{5}\", , , , \"1234567\", , , [7]], [, , \"111\\\\d{6}|(?:2[12]|31|77|[89][89])\\\\d{7}\", , , , \"991234567\", , , [9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"MW\", 265, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"1[2-9]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[1-37-9]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    MX: [\n      ,\n      [\n        ,\n        ,\n        \"[2-9]\\\\d{9}\",\n        ,\n        ,\n        ,\n        ,\n        ,\n        ,\n        [10],\n        [7, 8]\n      ],\n      [, , \"(?:2(?:0[01]|2\\\\d|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[267][1-9]|3[1-8]|[45]\\\\d|8[1-35-9]|9[2-689])|5(?:[56]\\\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-36-9]|6[0-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[1346][1-9]|[27]\\\\d|5[13-9]|8[1-69]|9[17])|8(?:1\\\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[0-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69]\\\\d|7[12]|8[1-8]))\\\\d{7}\", , , , \"2001234567\", , , , [7, 8]],\n      [\n        ,\n        ,\n        \"(?:2(?:2\\\\d|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[267][1-9]|3[1-8]|[45]\\\\d|8[1-35-9]|9[2-689])|5(?:[56]\\\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-36-9]|6[0-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[1346][1-9]|[27]\\\\d|5[13-9]|8[1-69]|9[17])|8(?:1\\\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[0-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69]\\\\d|7[12]|8[1-8]))\\\\d{7}\",\n        ,\n        ,\n        ,\n        \"2221234567\",\n        ,\n        ,\n        ,\n        [7, 8]\n      ],\n      [, , \"8(?:00|88)\\\\d{7}\", , , , \"8001234567\"],\n      [, , \"900\\\\d{7}\", , , , \"9001234567\"],\n      [, , \"300\\\\d{7}\", , , , \"3001234567\"],\n      [, , \"500\\\\d{7}\", , , , \"5001234567\"],\n      [, , , , , , , , , [-1]],\n      \"MX\",\n      52,\n      \"0[09]\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      \"00\",\n      ,\n      [[, \"(\\\\d{5})\", \"$1\", [\"53\"]], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"33|5[56]|81\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[2-9]\"]]],\n      [[, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"33|5[56]|81\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[2-9]\"]]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    MY: [, [, , \"1\\\\d{8,9}|(?:3\\\\d|[4-9])\\\\d{7}\", , , , , , , [8, 9, 10], [6, 7]], [, , \"427[01]\\\\d{4}|(?:3(?:2[0-36-9]|3[0-368]|4[0-278]|5[0-24-8]|6[0-467]|7[1246-9]|8\\\\d|9[0-57])\\\\d|4(?:2[0-689]|[3-79]\\\\d|8[1-35689])|5(?:2[0-589]|[3468]\\\\d|5[0-489]|7[1-9]|9[23])|6(?:2[2-9]|3[1357-9]|[46]\\\\d|5[0-6]|7[0-35-9]|85|9[015-8])|7(?:[2579]\\\\d|3[03-68]|4[0-8]|6[5-9]|8[0-35-9])|8(?:[24][2-8]|3[2-5]|5[2-7]|6[2-589]|7[2-578]|[89][2-9])|9(?:0[57]|13|[25-7]\\\\d|[3489][0-8]))\\\\d{5}\", , , , \"323856789\", , , [8, 9], [6, 7]], [\n      ,\n      ,\n      \"1(?:(?:1888[689]|4400|8(?:47|8[27])[0-4])\\\\d{4}|9\\\\d{7,8})|1(?:0(?:[23568]\\\\d|4[0-6]|7[016-9]|9[0-8])|1(?:[1-5]\\\\d\\\\d|6(?:0[5-9]|[1-9]\\\\d)|7(?:[0-4]\\\\d|5[0-79]|6[02-4]|8[02-5]))|(?:[26]\\\\d|[37][1-9]|4[235-9])\\\\d|5(?:31|9\\\\d\\\\d)|8(?:1[23]|[236]\\\\d|4[06]|5(?:46|[7-9])|7[016-9]|8[01]|9[0-8]))\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"123456789\",\n      ,\n      ,\n      [9, 10]\n    ], [, , \"1[378]00\\\\d{6}\", , , , \"1300123456\", , , [10]], [, , \"1600\\\\d{6}\", , , , \"1600123456\", , , [10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"15(?:4(?:6[0-4]\\\\d|8(?:0[125]|[17]\\\\d|21|3[01]|4[01589]|5[014]|6[02]))|6(?:32[0-6]|78\\\\d))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"1546012345\",\n      ,\n      ,\n      [10]\n    ], \"MY\", 60, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1-$2 $3\", [\"[4-79]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1-$2 $3\", [\"1(?:[02469]|[378][1-9]|53)|8\", \"1(?:[02469]|[37][1-9]|53|8(?:[1-46-9]|5[7-9]))|8\"], \"0$1\"], [, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1-$2 $3\", [\"3\"], \"0$1\"], [, \"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{4})\", \"$1-$2-$3-$4\", [\"1(?:[367]|80)\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1-$2 $3\", [\"15\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1-$2 $3\", [\"1\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], , , [, , , , , , , , , [-1]]],\n    MZ: [, [, , \"(?:2|8\\\\d)\\\\d{7}\", , , , , , , [8, 9]], [, , \"2(?:[1346]\\\\d|5[0-2]|[78][12]|93)\\\\d{5}\", , , , \"21123456\", , , [8]], [, , \"8[2-9]\\\\d{7}\", , , , \"821234567\", , , [9]], [, , \"800\\\\d{6}\", , , , \"800123456\", , , [9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"MZ\", 258, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"2|8[2-9]\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"8\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    NA: [, [\n      ,\n      ,\n      \"[68]\\\\d{7,8}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [8, 9]\n    ], [, , \"64426\\\\d{3}|6(?:1(?:2[2-7]|3[01378]|4[0-4])|254|32[0237]|4(?:27|41|5[25])|52[236-8]|626|7(?:2[2-4]|30))\\\\d{4,5}|6(?:1(?:(?:0\\\\d|2[0189]|3[24-69]|4[5-9])\\\\d|17|69|7[014])|2(?:17|5[0-36-8]|69|70)|3(?:17|2[14-689]|34|6[289]|7[01]|81)|4(?:17|2[0-2]|4[06]|5[0137]|69|7[01])|5(?:17|2[0459]|69|7[01])|6(?:17|25|38|42|69|7[01])|7(?:17|2[569]|3[13]|6[89]|7[01]))\\\\d{4}\", , , , \"61221234\"], [, , \"(?:60|8[1245])\\\\d{7}\", , , , \"811234567\", , , [9]], [, , \"80\\\\d{7}\", , , , \"800123456\", , , [9]], [\n      ,\n      ,\n      \"8701\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"870123456\",\n      ,\n      ,\n      [9]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"8(?:3\\\\d\\\\d|86)\\\\d{5}\", , , , \"88612345\"], \"NA\", 264, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"88\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"6\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"87\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"8\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    NC: [, [, , \"(?:050|[2-57-9]\\\\d\\\\d)\\\\d{3}\", , , , , , , [6]], [, , \"(?:2[03-9]|3[0-5]|4[1-7]|88)\\\\d{4}\", , , , \"201234\"], [\n      ,\n      ,\n      \"(?:[579]\\\\d|8[0-79])\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"751234\"\n    ], [, , \"050\\\\d{3}\", , , , \"050012\"], [, , \"36\\\\d{4}\", , , , \"366711\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"NC\", 687, \"00\", , , , , , , , [[, \"(\\\\d{3})\", \"$1\", [\"5[6-8]\"]], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1.$2.$3\", [\"[02-57-9]\"]]], [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1.$2.$3\", [\"[02-57-9]\"]]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    NE: [, [, , \"[027-9]\\\\d{7}\", , , , , , , [8]], [\n      ,\n      ,\n      \"2(?:0(?:20|3[1-8]|4[13-5]|5[14]|6[14578]|7[1-578])|1(?:4[145]|5[14]|6[14-68]|7[169]|88))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"20201234\"\n    ], [, , \"(?:23|7[0467]|[89]\\\\d)\\\\d{6}\", , , , \"93123456\"], [, , \"08\\\\d{6}\", , , , \"08123456\"], [, , \"09\\\\d{6}\", , , , \"09123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"NE\", 227, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"08\"]], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[089]|2[013]|7[0467]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    NF: [, [, , \"[13]\\\\d{5}\", , , , , , , [6], [5]], [, , \"(?:1(?:06|17|28|39)|3[0-2]\\\\d)\\\\d{3}\", , , , \"106609\", , , , [5]], [\n      ,\n      ,\n      \"(?:14|3[58])\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"381234\",\n      ,\n      ,\n      ,\n      [5]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"NF\", 672, \"00\", , , , \"([0-258]\\\\d{4})$\", \"3$1\", , , [[, \"(\\\\d{2})(\\\\d{4})\", \"$1 $2\", [\"1[0-3]\"]], [, \"(\\\\d)(\\\\d{5})\", \"$1 $2\", [\"[13]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    NG: [\n      ,\n      [, , \"(?:20|9\\\\d)\\\\d{8}|[78]\\\\d{9,13}\", , , , , , , [10, 11, 12, 13, 14], [6, 7]],\n      [, , \"20(?:[1259]\\\\d|3[013-9]|4[1-8]|6[024-689]|7[1-79]|8[2-9])\\\\d{6}\", , , , \"2033123456\", , , [10], [6, 7]],\n      [\n        ,\n        ,\n        \"(?:702[0-24-9]|819[01])\\\\d{6}|(?:7(?:0[13-9]|[12]\\\\d)|8(?:0[1-9]|1[0-8])|9(?:0[1-9]|1[1-6]))\\\\d{7}\",\n        ,\n        ,\n        ,\n        \"8021234567\",\n        ,\n        ,\n        [10]\n      ],\n      [, , \"800\\\\d{7,11}\", , , , \"80017591759\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"NG\",\n      234,\n      \"009\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[7-9]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"20[129]\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{2})(\\\\d{4})\", \"$1 $2 $3\", [\"2\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\", \"$1 $2 $3\", [\"[78]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{5})(\\\\d{5,6})\", \"$1 $2 $3\", [\"[78]\"], \"0$1\"]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , \"700\\\\d{7,11}\", , , , \"7001234567\"],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    NI: [, [, , \"(?:1800|[25-8]\\\\d{3})\\\\d{4}\", , , , , , , [8]], [, , \"2\\\\d{7}\", , , , \"21234567\"], [, , \"(?:5(?:5[0-7]|[78]\\\\d)|6(?:20|3[035]|4[045]|5[05]|77|8[1-9]|9[059])|(?:7[5-8]|8\\\\d)\\\\d)\\\\d{5}\", , , , \"81234567\"], [, , \"1800\\\\d{4}\", , , , \"18001234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"NI\", 505, \"00\", , , , , , , , [[, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[125-8]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    NL: [, [\n      ,\n      ,\n      \"(?:[124-7]\\\\d\\\\d|3(?:[02-9]\\\\d|1[0-8]))\\\\d{6}|8\\\\d{6,9}|9\\\\d{6,10}|1\\\\d{4,5}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [5, 6, 7, 8, 9, 10, 11]\n    ], [, , \"(?:1(?:[035]\\\\d|1[13-578]|6[124-8]|7[24]|8[0-467])|2(?:[0346]\\\\d|2[2-46-9]|5[125]|9[479])|3(?:[03568]\\\\d|1[3-8]|2[01]|4[1-8])|4(?:[0356]\\\\d|1[1-368]|7[58]|8[15-8]|9[23579])|5(?:[0358]\\\\d|[19][1-9]|2[1-57-9]|4[13-8]|6[126]|7[0-3578])|7\\\\d\\\\d)\\\\d{6}\", , , , \"101234567\", , , [9]], [, , \"(?:6[1-58]|970\\\\d)\\\\d{7}\", , , , \"612345678\", , , [9, 11]], [, , \"800\\\\d{4,7}\", , , , \"8001234\", , , [7, 8, 9, 10]], [, , \"90[069]\\\\d{4,7}\", , , , \"9061234\", , , [7, 8, 9, 10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"(?:85|91)\\\\d{7}\",\n      ,\n      ,\n      ,\n      \"851234567\",\n      ,\n      ,\n      [9]\n    ], \"NL\", 31, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{4})\", \"$1\", [\"1[238]|[34]\"]], [, \"(\\\\d{2})(\\\\d{3,4})\", \"$1 $2\", [\"14\"]], [, \"(\\\\d{6})\", \"$1\", [\"1\"]], [, \"(\\\\d{3})(\\\\d{4,7})\", \"$1 $2\", [\"[89]0\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{7})\", \"$1 $2\", [\"66\"], \"0$1\"], [, \"(\\\\d)(\\\\d{8})\", \"$1 $2\", [\"6\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"1[16-8]|2[259]|3[124]|4[17-9]|5[124679]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[1-578]|91\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{5})\", \"$1 $2 $3\", [\"9\"], \"0$1\"]], [[\n      ,\n      \"(\\\\d{3})(\\\\d{4,7})\",\n      \"$1 $2\",\n      [\"[89]0\"],\n      \"0$1\"\n    ], [, \"(\\\\d{2})(\\\\d{7})\", \"$1 $2\", [\"66\"], \"0$1\"], [, \"(\\\\d)(\\\\d{8})\", \"$1 $2\", [\"6\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"1[16-8]|2[259]|3[124]|4[17-9]|5[124679]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[1-578]|91\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{5})\", \"$1 $2 $3\", [\"9\"], \"0$1\"]], [, , \"66\\\\d{7}\", , , , \"662345678\", , , [9]], , , [, , \"140(?:1[035]|2[0346]|3[03568]|4[0356]|5[0358]|8[458])|140(?:1[16-8]|2[259]|3[124]|4[17-9]|5[124679]|7)\\\\d\", , , , , , , [5, 6]], [\n      ,\n      ,\n      \"140(?:1[035]|2[0346]|3[03568]|4[0356]|5[0358]|8[458])|(?:140(?:1[16-8]|2[259]|3[124]|4[17-9]|5[124679]|7)|8[478]\\\\d{6})\\\\d\",\n      ,\n      ,\n      ,\n      \"14020\",\n      ,\n      ,\n      [5, 6, 9]\n    ], , , [, , , , , , , , , [-1]]],\n    NO: [, [, , \"(?:0|[2-9]\\\\d{3})\\\\d{4}\", , , , , , , [5, 8]], [, , \"(?:2[1-4]|3[1-3578]|5[1-35-7]|6[1-46-9]|7[0-8])\\\\d{6}\", , , , \"21234567\", , , [8]], [, , \"45(?:[0-24-9]\\\\d|3[0-57-9])\\\\d{4}|(?:4[016-8]|9\\\\d)\\\\d{6}\", , , , \"40612345\", , , [8]], [, , \"80[01]\\\\d{5}\", , , , \"80012345\", , , [8]], [, , \"82[09]\\\\d{5}\", , , , \"82012345\", , , [8]], [, , \"810(?:0[0-6]|[2-8]\\\\d)\\\\d{3}\", , , , \"81021234\", , , [8]], [, , \"880\\\\d{5}\", , , , \"88012345\", , , [8]], [, , \"85[0-5]\\\\d{5}\", , , , \"85012345\", , , [8]], \"NO\", 47, \"00\", , , , , , , , [[\n      ,\n      \"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\n      \"$1 $2 $3\",\n      [\"8\"]\n    ], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[2-79]\"]]], , [, , , , , , , , , [-1]], 1, \"[02-689]|7[0-8]\", [, , , , , , , , , [-1]], [, , \"(?:0[235-9]|81(?:0(?:0[7-9]|1\\\\d)|5\\\\d\\\\d))\\\\d{3}\", , , , \"02000\"], , , [, , \"81[23]\\\\d{5}\", , , , \"81212345\", , , [8]]],\n    NP: [, [, , \"(?:1\\\\d|9)\\\\d{9}|[1-9]\\\\d{7}\", , , , , , , [8, 10, 11], [6, 7]], [, , \"(?:1[0-6]\\\\d|99[02-6])\\\\d{5}|(?:2[13-79]|3[135-8]|4[146-9]|5[135-7]|6[13-9]|7[15-9]|8[1-46-9]|9[1-7])[2-6]\\\\d{5}\", , , , \"14567890\", , , [8], [6, 7]], [\n      ,\n      ,\n      \"9(?:00|6[0-3]|7[0-24-6]|8[0-24-68])\\\\d{7}\",\n      ,\n      ,\n      ,\n      \"9841234567\",\n      ,\n      ,\n      [10]\n    ], [, , \"1(?:66001|800\\\\d\\\\d)\\\\d{5}\", , , , \"16600101234\", , , [11]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"NP\", 977, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{7})\", \"$1-$2\", [\"1[2-6]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{6})\", \"$1-$2\", [\"1[01]|[2-8]|9(?:[1-59]|[67][2-6])\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{7})\", \"$1-$2\", [\"9\"]], [, \"(\\\\d{4})(\\\\d{2})(\\\\d{5})\", \"$1-$2-$3\", [\"1\"]]], [[, \"(\\\\d)(\\\\d{7})\", \"$1-$2\", [\"1[2-6]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{6})\", \"$1-$2\", [\"1[01]|[2-8]|9(?:[1-59]|[67][2-6])\"], \"0$1\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{7})\",\n      \"$1-$2\",\n      [\"9\"]\n    ]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    NR: [, [, , \"(?:222|444|(?:55|8\\\\d)\\\\d|666|777|999)\\\\d{4}\", , , , , , , [7]], [, , \"444\\\\d{4}\", , , , \"4441234\"], [, , \"(?:222|55[3-9]|666|777|8\\\\d\\\\d|999)\\\\d{4}\", , , , \"5551234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"NR\", 674, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[24-9]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    NU: [\n      ,\n      [, , \"(?:[4-7]|888\\\\d)\\\\d{3}\", , , , , , , [4, 7]],\n      [, , \"[47]\\\\d{3}\", , , , \"7012\", , , [4]],\n      [, , \"(?:[56]|888[1-9])\\\\d{3}\", , , , \"8884012\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"NU\",\n      683,\n      \"00\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"8\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    NZ: [, [, , \"[1289]\\\\d{9}|50\\\\d{5}(?:\\\\d{2,3})?|[27-9]\\\\d{7,8}|(?:[34]\\\\d|6[0-35-9])\\\\d{6}|8\\\\d{4,6}\", , , , , , , [5, 6, 7, 8, 9, 10]], [, , \"240\\\\d{5}|(?:3[2-79]|[49][2-9]|6[235-9]|7[2-57-9])\\\\d{6}\", , , , \"32345678\", , , [8], [7]], [\n      ,\n      ,\n      \"2(?:[0-27-9]\\\\d|6)\\\\d{6,7}|2(?:1\\\\d|75)\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"211234567\",\n      ,\n      ,\n      [8, 9, 10]\n    ], [, , \"508\\\\d{6,7}|80\\\\d{6,8}\", , , , \"800123456\", , , [8, 9, 10]], [, , \"(?:1[13-57-9]\\\\d{5}|50(?:0[08]|30|66|77|88))\\\\d{3}|90\\\\d{6,8}\", , , , \"900123456\", , , [7, 8, 9, 10]], [, , , , , , , , , [-1]], [, , \"70\\\\d{7}\", , , , \"701234567\", , , [9]], [, , , , , , , , , [-1]], \"NZ\", 64, \"0(?:0|161)\", \"0\", , , \"0\", , \"00\", , [[, \"(\\\\d{2})(\\\\d{3,8})\", \"$1 $2\", [\"8[1-79]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\", \"$1 $2 $3\", [\"50[036-8]|8|90\", \"50(?:[0367]|88)|8|90\"], \"0$1\"], [, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"24|[346]|7[2-57-9]|9[2-9]\"], \"0$1\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\n      \"$1 $2 $3\",\n      [\"2(?:10|74)|[589]\"],\n      \"0$1\"\n    ], [, \"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\", \"$1 $2 $3\", [\"1|2[028]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,5})\", \"$1 $2 $3\", [\"2(?:[169]|7[0-35-9])|7\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"8(?:1[16-9]|22|3\\\\d|4[045]|5[459]|6[235-9]|7[0-3579]|90)\\\\d{2,7}\", , , , \"83012378\"], , , [, , , , , , , , , [-1]]],\n    OM: [, [, , \"(?:1505|[279]\\\\d{3}|500)\\\\d{4}|800\\\\d{5,6}\", , , , , , , [7, 8, 9]], [, , \"2[1-6]\\\\d{6}\", , , , \"23123456\", , , [8]], [\n      ,\n      ,\n      \"(?:1505|90[1-9]\\\\d)\\\\d{4}|(?:7[124-9]|9[1-9])\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"92123456\",\n      ,\n      ,\n      [8]\n    ], [, , \"8007\\\\d{4,5}|(?:500|800[05])\\\\d{4}\", , , , \"80071234\"], [, , \"900\\\\d{5}\", , , , \"90012345\", , , [8]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"OM\", 968, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4,6})\", \"$1 $2\", [\"[58]\"]], [, \"(\\\\d{2})(\\\\d{6})\", \"$1 $2\", [\"2\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[179]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    PA: [, [, , \"(?:00800|8\\\\d{3})\\\\d{6}|[68]\\\\d{7}|[1-57-9]\\\\d{6}\", , , , , , , [7, 8, 10, 11]], [\n      ,\n      ,\n      \"(?:1(?:0\\\\d|1[0479]|2[37]|3[0137]|4[147]|5[05]|6[058]|7[0167]|8[2358]|9[1389])|2(?:[0235-79]\\\\d|1[0-7]|4[013-9]|8[02-9])|3(?:[0147-9]\\\\d|[25][0-5]|33|6[068])|4(?:00|3[0-579]|4\\\\d|7[0-57-9])|5(?:[01]\\\\d|2[0-7]|[56]0|79)|7(?:0[09]|2[0-26-8]|3[03]|4[04]|5[05-9]|6[0156]|7[0-24-9]|8[4-9]|90)|8(?:09|2[89]|3\\\\d|4[0-24-689]|5[014]|8[02])|9(?:0[5-9]|1[0135-8]|2[036-9]|3[35-79]|40|5[0457-9]|6[05-9]|7[04-9]|8[35-8]|9\\\\d))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"2001234\",\n      ,\n      ,\n      [7]\n    ], [, , \"(?:1[16]1|21[89]|6\\\\d{3}|8(?:1[01]|7[23]))\\\\d{4}\", , , , \"61234567\", , , [7, 8]], [, , \"800\\\\d{4,5}|(?:00800|800\\\\d)\\\\d{6}\", , , , \"8001234\"], [, , \"(?:8(?:22|55|60|7[78]|86)|9(?:00|81))\\\\d{4}\", , , , \"8601234\", , , [7]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"PA\", 507, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1-$2\", [\"[1-57-9]\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1-$2\", [\"[68]\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"8\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    PE: [, [\n      ,\n      ,\n      \"(?:[14-8]|9\\\\d)\\\\d{7}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [8, 9],\n      [6, 7]\n    ], [, , \"(?:(?:19[02-68]|(?:4[34]|5[14])[0-8]|687)\\\\d|7(?:173|(?:3[0-8]|55)\\\\d)|8(?:10[05689]|6(?:0[06-9]|1[6-9]|29)|7(?:0[0569]|[56]0)))\\\\d{4}|(?:1[0-8]|4[12]|5[236]|6[1-7]|7[246]|8[2-4])\\\\d{6}\", , , , \"11234567\", , , [8], [6, 7]], [, , \"9\\\\d{8}\", , , , \"912345678\", , , [9]], [, , \"800\\\\d{5}\", , , , \"80012345\", , , [8]], [, , \"805\\\\d{5}\", , , , \"80512345\", , , [8]], [, , \"801\\\\d{5}\", , , , \"80112345\", , , [8]], [, , \"80[24]\\\\d{5}\", , , , \"80212345\", , , [8]], [, , , , , , , , , [-1]], \"PE\", 51, \"00|19(?:1[124]|77|90)00\", \"0\", \" Anexo \", , \"0\", , \"00\", , [[\n      ,\n      \"(\\\\d{3})(\\\\d{5})\",\n      \"$1 $2\",\n      [\"80\"],\n      \"(0$1)\"\n    ], [, \"(\\\\d)(\\\\d{7})\", \"$1 $2\", [\"1\"], \"(0$1)\"], [, \"(\\\\d{2})(\\\\d{6})\", \"$1 $2\", [\"[4-8]\"], \"(0$1)\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"9\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    PF: [\n      ,\n      [, , \"4\\\\d{5}(?:\\\\d{2})?|8\\\\d{7,8}\", , , , , , , [6, 8, 9]],\n      [, , \"4(?:0[4-689]|9[4-68])\\\\d{5}\", , , , \"40412345\", , , [8]],\n      [, , \"8[7-9]\\\\d{6}\", , , , \"87123456\", , , [8]],\n      [, , \"80[0-5]\\\\d{6}\", , , , \"800012345\", , , [9]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , \"499\\\\d{5}\", , , , \"49901234\", , , [8]],\n      \"PF\",\n      689,\n      \"00\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3\", [\"44\"]], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"4|8[7-9]\"]], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"8\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , \"44\\\\d{4}\", , , , , , , [6]],\n      [, , \"44\\\\d{4}\", , , , \"440123\", , , [6]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    PG: [, [, , \"(?:180|[78]\\\\d{3})\\\\d{4}|(?:[2-589]\\\\d|64)\\\\d{5}\", , , , , , , [7, 8]], [, , \"(?:(?:3[0-2]|4[257]|5[34]|9[78])\\\\d|64[1-9]|85[02-46-9])\\\\d{4}\", , , , \"3123456\", , , [7]], [, , \"(?:7\\\\d|8[1-48])\\\\d{6}\", , , , \"70123456\", , , [8]], [\n      ,\n      ,\n      \"180\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"1801234\",\n      ,\n      ,\n      [7]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"2(?:0[0-57]|7[568])\\\\d{4}\", , , , \"2751234\", , , [7]], \"PG\", 675, \"00|140[1-3]\", , , , , , \"00\", , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"18|[2-69]|85\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[78]\"]]], , [, , \"27[01]\\\\d{4}\", , , , \"2700123\", , , [7]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    PH: [, [, , \"(?:[2-7]|9\\\\d)\\\\d{8}|2\\\\d{5}|(?:1800|8)\\\\d{7,9}\", , , , , , , [6, 8, 9, 10, 11, 12, 13], [4, 5, 7]], [\n      ,\n      ,\n      \"(?:(?:2[3-8]|3[2-68]|4[2-9]|5[2-6]|6[2-58]|7[24578])\\\\d{3}|88(?:22\\\\d\\\\d|42))\\\\d{4}|(?:2|8[2-8]\\\\d\\\\d)\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"232345678\",\n      ,\n      ,\n      [6, 8, 9, 10],\n      [4, 5, 7]\n    ], [, , \"(?:8(?:1[37]|9[5-8])|9(?:0[5-9]|1[0-24-9]|[235-7]\\\\d|4[2-9]|8[135-9]|9[1-9]))\\\\d{7}\", , , , \"9051234567\", , , [10]], [, , \"1800\\\\d{7,9}\", , , , \"180012345678\", , , [11, 12, 13]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"PH\", 63, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{5})\", \"$1 $2\", [\"2\"], \"(0$1)\"], [\n      ,\n      \"(\\\\d{4})(\\\\d{4,6})\",\n      \"$1 $2\",\n      [\"3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|544|88[245]|(?:52|64|86)2\", \"3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))\"],\n      \"(0$1)\"\n    ], [, \"(\\\\d{5})(\\\\d{4})\", \"$1 $2\", [\"346|4(?:27|9[35])|883\", \"3469|4(?:279|9(?:30|56))|8834\"], \"(0$1)\"], [, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"2\"], \"(0$1)\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[3-7]|8[2-8]\"], \"(0$1)\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[89]\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"1\"]], [, \"(\\\\d{4})(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3 $4\", [\"1\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    PK: [, [\n      ,\n      ,\n      \"122\\\\d{6}|[24-8]\\\\d{10,11}|9(?:[013-9]\\\\d{8,10}|2(?:[01]\\\\d\\\\d|2(?:[06-8]\\\\d|1[01]))\\\\d{7})|(?:[2-8]\\\\d{3}|92(?:[0-7]\\\\d|8[1-9]))\\\\d{6}|[24-9]\\\\d{8}|[89]\\\\d{7}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [8, 9, 10, 11, 12],\n      [5, 6, 7]\n    ], [, , \"(?:(?:21|42)[2-9]|58[126])\\\\d{7}|(?:2[25]|4[0146-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\\\\d{6,7}|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8]))[2-9]\\\\d{5,6}\", , , , \"2123456789\", , , [9, 10], [5, 6, 7, 8]], [, , \"3(?:[0-247]\\\\d|3[0-79]|55|64)\\\\d{7}\", , , , \"3012345678\", , , [10]], [, , \"800\\\\d{5}(?:\\\\d{3})?\", , , , \"80012345\", , , [8, 11]], [, , \"900\\\\d{5}\", , , , \"90012345\", , , [8]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"122\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"122044444\",\n      ,\n      ,\n      [9]\n    ], [, , , , , , , , , [-1]], \"PK\", 92, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{2,7})\", \"$1 $2 $3\", [\"[89]0\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{5})\", \"$1 $2\", [\"1\"]], [\n      ,\n      \"(\\\\d{3})(\\\\d{6,7})\",\n      \"$1 $2\",\n      [\"2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8])\", \"9(?:2[3-8]|98)|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:22|3[27-9]|4[2-6]|6[3569]|9[25-7]))[2-9]\"],\n      \"(0$1)\"\n    ], [, \"(\\\\d{2})(\\\\d{7,8})\", \"$1 $2\", [\"(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\"], \"(0$1)\"], [, \"(\\\\d{5})(\\\\d{5})\", \"$1 $2\", [\"58\"], \"(0$1)\"], [, \"(\\\\d{3})(\\\\d{7})\", \"$1 $2\", [\"3\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91\"], \"(0$1)\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"[24-9]\"], \"(0$1)\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"(?:2(?:[125]|3[2358]|4[2-4]|9[2-8])|4(?:[0-246-9]|5[3479])|5(?:[1-35-7]|4[2-467])|6(?:0[468]|[1-8])|7(?:[14]|2[236])|8(?:[16]|2[2-689]|3[23578]|4[3478]|5[2356])|9(?:1|22|3[27-9]|4[2-6]|6[3569]|9[2-7]))111\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"21111825888\",\n      ,\n      ,\n      [11, 12]\n    ], , , [, , , , , , , , , [-1]]],\n    PL: [, [, , \"(?:6|8\\\\d\\\\d)\\\\d{7}|[1-9]\\\\d{6}(?:\\\\d{2})?|[26]\\\\d{5}\", , , , , , , [6, 7, 8, 9, 10]], [, , \"(?:30|47\\\\d\\\\d)\\\\d{5}|(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])(?:[02-9]\\\\d{6}|1(?:[0-8]\\\\d{5}|9\\\\d{3}(?:\\\\d{2})?))\", , , , \"123456789\", , , [7, 9]], [, , \"21(?:1[013-5]|2\\\\d|3[1-9])\\\\d{5}|(?:45|5[0137]|6[069]|7[2389]|88)\\\\d{7}\", , , , \"512345678\", , , [9]], [, , \"800\\\\d{6,7}\", , , , \"800123456\", , , [9, 10]], [, , \"70[01346-8]\\\\d{6}\", , , , \"701234567\", , , [9]], [\n      ,\n      ,\n      \"801\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"801234567\",\n      ,\n      ,\n      [9]\n    ], [, , , , , , , , , [-1]], [, , \"39\\\\d{7}\", , , , \"391234567\", , , [9]], \"PL\", 48, \"00\", , , , , , , , [\n      [, \"(\\\\d{5})\", \"$1\", [\"19\"]],\n      [, \"(\\\\d{3})(\\\\d{3})\", \"$1 $2\", [\"11|20|64\"]],\n      [, \"(\\\\d{2})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"30|(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])1\", \"30|(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])19\"]],\n      [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\", \"$1 $2 $3\", [\"64\"]],\n      [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"21|39|45|5[0137]|6[0469]|7[02389]|8(?:0[14]|8)\"]],\n      [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"1[2-8]|[2-7]|8[1-79]|9[145]\"]],\n      [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"8\"]]\n    ], , [, , \"64\\\\d{4,7}\", , , , \"641234567\", , , [6, 7, 8, 9]], , , [, , , , , , , , , [-1]], [, , \"804\\\\d{6}\", , , , \"804123456\", , , [9]], , , [, , , , , , , , , [-1]]],\n    PM: [, [, , \"[78]\\\\d{8}|[2-9]\\\\d{5}\", , , , , , , [6, 9]], [, , \"80[6-9]\\\\d{6}|(?:[236-9]\\\\d|4[1-35-9]|5[0-47-9])\\\\d{4}\", , , , \"430123\"], [, , \"708(?:4[0-5]|5[0-6])\\\\d{4}|(?:[236-9]\\\\d|4[02-489]|5[02-9])\\\\d{4}\", , , , \"551234\"], [, , \"80[0-5]\\\\d{6}\", , , , \"800012345\", , , [9]], [\n      ,\n      ,\n      \"8[129]\\\\d{7}\",\n      ,\n      ,\n      ,\n      \"810123456\",\n      ,\n      ,\n      [9]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"PM\", 508, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3\", [\"[2-9]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"7\"]], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"8\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    PR: [, [, , \"(?:[589]\\\\d\\\\d|787)\\\\d{7}\", , , , , , , [10], [7]], [, , \"(?:787|939)[2-9]\\\\d{6}\", , , , \"7872345678\", , , , [7]], [, , \"(?:787|939)[2-9]\\\\d{6}\", , , , \"7872345678\", , , , [7]], [\n      ,\n      ,\n      \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"8002345678\"\n    ], [, , \"900[2-9]\\\\d{6}\", , , , \"9002345678\"], [, , , , , , , , , [-1]], [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"], [, , , , , , , , , [-1]], \"PR\", 1, \"011\", \"1\", , , \"1\", , , 1, , , [, , , , , , , , , [-1]], , \"787|939\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    PS: [, [, , \"[2489]2\\\\d{6}|(?:1\\\\d|5)\\\\d{8}\", , , , , , , [\n      8,\n      9,\n      10\n    ], [7]], [, , \"(?:22[2-47-9]|42[45]|82[014-68]|92[3569])\\\\d{5}\", , , , \"22234567\", , , [8], [7]], [, , \"5[69]\\\\d{7}\", , , , \"599123456\", , , [9]], [, , \"1800\\\\d{6}\", , , , \"1800123456\", , , [10]], [, , , , , , , , , [-1]], [, , \"1700\\\\d{6}\", , , , \"1700123456\", , , [10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"PS\", 970, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[2489]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"5\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"1\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ]],\n    PT: [\n      ,\n      [, , \"1693\\\\d{5}|(?:[26-9]\\\\d|30)\\\\d{7}\", , , , , , , [9]],\n      [, , \"2(?:[12]\\\\d|3[1-689]|4[1-59]|[57][1-9]|6[1-35689]|8[1-69]|9[1256])\\\\d{6}\", , , , \"212345678\"],\n      [, , \"6(?:[06]92(?:30|9\\\\d)|[35]92(?:[049]\\\\d|3[034]))\\\\d{3}|(?:(?:16|6[0356])93|9(?:[1-36]\\\\d\\\\d|480))\\\\d{5}\", , , , \"912345678\"],\n      [, , \"80[02]\\\\d{6}\", , , , \"800123456\"],\n      [, , \"(?:6(?:0[178]|4[68])\\\\d|76(?:0[1-57]|1[2-47]|2[237]))\\\\d{5}\", , , , \"760123456\"],\n      [, , \"80(?:8\\\\d|9[1579])\\\\d{5}\", , , , \"808123456\"],\n      [, , \"884[0-4689]\\\\d{5}\", , , , \"884123456\"],\n      [, , \"30\\\\d{7}\", , , , \"301234567\"],\n      \"PT\",\n      351,\n      \"00\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"2[12]\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"16|[236-9]\"]]],\n      ,\n      [, , \"6(?:222\\\\d|89(?:00|88|99))\\\\d{4}\", , , , \"622212345\"],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , \"70(?:38[01]|596|(?:7\\\\d|8[17])\\\\d)\\\\d{4}\", , , , \"707123456\"],\n      ,\n      ,\n      [, , \"600\\\\d{6}|6[06]92(?:0\\\\d|3[349]|49)\\\\d{3}\", , , , \"600110000\"]\n    ],\n    PW: [, [, , \"(?:[24-8]\\\\d\\\\d|345|900)\\\\d{4}\", , , , , , , [7]], [, , \"(?:2(?:55|77)|345|488|5(?:35|44|87)|6(?:22|54|79)|7(?:33|47)|8(?:24|55|76)|900)\\\\d{4}\", , , , \"2771234\"], [\n      ,\n      ,\n      \"(?:(?:46|83)[0-5]|(?:6[2-4689]|78)0)\\\\d{4}|(?:45|77|88)\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"6201234\"\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"PW\", 680, \"01[12]\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[2-9]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    PY: [, [, , \"[36-8]\\\\d{5,8}|4\\\\d{6,8}|59\\\\d{6}|9\\\\d{5,10}|(?:2\\\\d|5[0-8])\\\\d{6,7}\", , , , , , , [6, 7, 8, 9, 10, 11], [5]], [\n      ,\n      ,\n      \"(?:3[289]|4[246-8]|61|7[1-3]|8[1-36])\\\\d{5,7}|(?:2(?:[14-68]\\\\d|2[4-68]|7[15]|9[1-5])|3(?:18|3[167]|4[2357]|51|[67]\\\\d)|4(?:1\\\\d|3[12]|5[13]|9[1-47])|5(?:[1-4]\\\\d|5[02-4])|6(?:3[1-3]|44|7[1-8])|7(?:4[0-4]|5\\\\d|6[1-578]|75|8[0-8])|858)\\\\d{5,6}\",\n      ,\n      ,\n      ,\n      \"212345678\",\n      ,\n      ,\n      [7, 8, 9],\n      [5, 6]\n    ], [, , \"9(?:51|6[129]|7[1-6]|8[1-7]|9[1-5])\\\\d{6}\", , , , \"961456789\", , , [9]], [, , \"9800\\\\d{5,7}\", , , , \"98000123456\", , , [9, 10, 11]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"8700[0-4]\\\\d{4}\", , , , \"870012345\", , , [9]], \"PY\", 595, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{6,7})\", \"$1\", [\"[125]|4[01]\"]], [, \"(\\\\d{3})(\\\\d{3,6})\", \"$1 $2\", [\"[2-9]0\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{5})\", \"$1 $2\", [\"3[289]|4[246-8]|61|7[1-3]|8[1-36]\"], \"(0$1)\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{4,5})\",\n      \"$1 $2\",\n      [\"2[279]|3[13-5]|4[359]|5|6(?:[34]|7[1-46-8])|7[46-8]|85\"],\n      \"(0$1)\"\n    ], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"2[14-68]|3[26-9]|4[1246-8]|6(?:1|75)|7[1-35]|8[1-36]\"], \"(0$1)\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"87\"]], [, \"(\\\\d{3})(\\\\d{6})\", \"$1 $2\", [\"9(?:[5-79]|8[1-7])\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[2-8]\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"9\"]]], [[, \"(\\\\d{3})(\\\\d{3,6})\", \"$1 $2\", [\"[2-9]0\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{5})\", \"$1 $2\", [\"3[289]|4[246-8]|61|7[1-3]|8[1-36]\"], \"(0$1)\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{4,5})\",\n      \"$1 $2\",\n      [\"2[279]|3[13-5]|4[359]|5|6(?:[34]|7[1-46-8])|7[46-8]|85\"],\n      \"(0$1)\"\n    ], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"2[14-68]|3[26-9]|4[1246-8]|6(?:1|75)|7[1-35]|8[1-36]\"], \"(0$1)\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"87\"]], [, \"(\\\\d{3})(\\\\d{6})\", \"$1 $2\", [\"9(?:[5-79]|8[1-7])\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[2-8]\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"9\"]]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"[245]0\\\\d{6,7}|[36-9]0\\\\d{4,7}\", , , , \"201234567\", , , [6, 7, 8, 9]], , , [, , , , , , , , , [-1]]],\n    QA: [, [\n      ,\n      ,\n      \"800\\\\d{4}|(?:2|800)\\\\d{6}|(?:0080|[3-7])\\\\d{7}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [7, 8, 9, 11]\n    ], [, , \"4(?:(?:[014]\\\\d\\\\d|999)\\\\d|2022)\\\\d{3}\", , , , \"44123456\", , , [8]], [, , \"[35-7]\\\\d{7}\", , , , \"33123456\", , , [8]], [, , \"800\\\\d{4}|(?:0080[01]|800)\\\\d{6}\", , , , \"8001234\", , , [7, 9, 11]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"QA\", 974, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"2[136]|8\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[3-7]\"]]], , [, , \"2[136]\\\\d{5}\", , , , \"2123456\", , , [7]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    RE: [, [, , \"709\\\\d{6}|(?:26|[689]\\\\d)\\\\d{7}\", , , , , , , [9]], [\n      ,\n      ,\n      \"2631[0-6]\\\\d{4}|26(?:2\\\\d|30|88)\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"262161234\"\n    ], [, , \"(?:69(?:2\\\\d\\\\d|3(?:[06][0-6]|1[0-3]|2[0-2]|3[0-39]|4\\\\d|5[0-5]|7[0-37]|8[0-8]|9[0-479]))|7092[0-3])\\\\d{4}\", , , , \"692123456\"], [, , \"80\\\\d{7}\", , , , \"801234567\"], [, , \"89[1-37-9]\\\\d{6}\", , , , \"891123456\"], [, , \"8(?:1[019]|2[0156]|84|90)\\\\d{6}\", , , , \"810123456\"], [, , , , , , , , , [-1]], [, , \"9(?:399[0-3]|479[0-6]|76(?:2[278]|3[0-37]))\\\\d{4}\", , , , \"939901234\"], \"RE\", 262, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[26-9]\"], \"0$1\"]], , [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], 1, , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    RO: [, [, , \"(?:[236-8]\\\\d|90)\\\\d{7}|[23]\\\\d{5}\", , , , , , , [6, 9]], [, , \"[23][13-6]\\\\d{7}|(?:2(?:19\\\\d|[3-6]\\\\d9)|31\\\\d\\\\d)\\\\d\\\\d\", , , , \"211234567\"], [, , \"(?:630|702)0\\\\d{5}|(?:6(?:00|2\\\\d)|7(?:0[013-9]|1[0-3]|[2-7]\\\\d|8[03-8]|9[0-39]))\\\\d{6}\", , , , \"712034567\", , , [9]], [, , \"800\\\\d{6}\", , , , \"800123456\", , , [9]], [, , \"90[0136]\\\\d{6}\", , , , \"900123456\", , , [9]], [, , \"801\\\\d{6}\", , , , \"801123456\", , , [9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"RO\", 40, \"00\", \"0\", \" int \", , \"0\", , , , [[\n      ,\n      \"(\\\\d{3})(\\\\d{3})\",\n      \"$1 $2\",\n      [\"2[3-6]\", \"2[3-6]\\\\d9\"],\n      \"0$1\"\n    ], [, \"(\\\\d{2})(\\\\d{4})\", \"$1 $2\", [\"219|31\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[23]1\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[236-9]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"(?:37\\\\d|80[578])\\\\d{6}\", , , , \"372123456\", , , [9]], , , [, , , , , , , , , [-1]]],\n    RS: [, [, , \"38[02-9]\\\\d{6,9}|6\\\\d{7,9}|90\\\\d{4,8}|38\\\\d{5,6}|(?:7\\\\d\\\\d|800)\\\\d{3,9}|(?:[12]\\\\d|3[0-79])\\\\d{5,10}\", , , , , , , [6, 7, 8, 9, 10, 11, 12], [4, 5]], [\n      ,\n      ,\n      \"(?:11[1-9]\\\\d|(?:2[389]|39)(?:0[2-9]|[2-9]\\\\d))\\\\d{3,8}|(?:1[02-9]|2[0-24-7]|3[0-8])[2-9]\\\\d{4,9}\",\n      ,\n      ,\n      ,\n      \"10234567\",\n      ,\n      ,\n      [7, 8, 9, 10, 11, 12],\n      [4, 5, 6]\n    ], [, , \"6(?:[0-689]|7\\\\d)\\\\d{6,7}\", , , , \"601234567\", , , [8, 9, 10]], [, , \"800\\\\d{3,9}\", , , , \"80012345\"], [, , \"(?:78\\\\d|90[0169])\\\\d{3,7}\", , , , \"90012345\", , , [6, 7, 8, 9, 10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"RS\", 381, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{3,9})\", \"$1 $2\", [\"(?:2[389]|39)0|[7-9]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{5,10})\", \"$1 $2\", [\"[1-36]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"7[06]\\\\d{4,10}\", , , , \"700123456\"], , , [, , , , , , , , , [-1]]],\n    RU: [, [\n      ,\n      ,\n      \"8\\\\d{13}|[347-9]\\\\d{9}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [10, 14],\n      [7]\n    ], [, , \"(?:3(?:0[12]|36|4[1-35-79]|5[1-3]|65|8[1-58]|9[0145])|4(?:01|1[1356]|2[13467]|7[1-5]|8[1-7]|9[1-689])|8(?:1[1-8]|2[01]|3[13-6]|4[0-8]|5[15-7]|6[0-35-79]|7[1-37-9]))\\\\d{7}\", , , , \"3011234567\", , , [10], [7]], [, , \"9\\\\d{9}\", , , , \"9123456789\", , , [10]], [, , \"8(?:0[04]|108\\\\d{3})\\\\d{7}\", , , , \"8001234567\"], [, , \"80[39]\\\\d{7}\", , , , \"8091234567\", , , [10]], [, , , , , , , , , [-1]], [, , \"808\\\\d{7}\", , , , \"8081234567\", , , [10]], [, , , , , , , , , [-1]], \"RU\", 7, \"810\", \"8\", , , \"8\", , \"8~10\", , [\n      [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1-$2-$3\", [\"[0-79]\"]],\n      [, \"(\\\\d{4})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"7(?:1[0-8]|2[1-9])\", \"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:1[23]|[2-9]2))\", \"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:13[03-69]|62[013-9]))|72[1-57-9]2\"], \"8 ($1)\", , 1],\n      [\n        ,\n        \"(\\\\d{5})(\\\\d)(\\\\d{2})(\\\\d{2})\",\n        \"$1 $2 $3 $4\",\n        [\"7(?:1[0-68]|2[1-9])\", \"7(?:1(?:[06][3-6]|[18]|2[35]|[3-5][3-5])|2(?:[13][3-5]|[24-689]|7[457]))\", \"7(?:1(?:0(?:[356]|4[023])|[18]|2(?:3[013-9]|5)|3[45]|43[013-79]|5(?:3[1-8]|4[1-7]|5)|6(?:3[0-35-9]|[4-6]))|2(?:1(?:3[178]|[45])|[24-689]|3[35]|7[457]))|7(?:14|23)4[0-8]|71(?:33|45)[1-79]\"],\n        \"8 ($1)\",\n        ,\n        1\n      ],\n      [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"7\"], \"8 ($1)\", , 1],\n      [, \"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2-$3-$4\", [\"[349]|8(?:[02-7]|1[1-8])\"], \"8 ($1)\", , 1],\n      [, \"(\\\\d{4})(\\\\d{4})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"8\"], \"8 ($1)\"]\n    ], [[, \"(\\\\d{4})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"7(?:1[0-8]|2[1-9])\", \"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:1[23]|[2-9]2))\", \"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:13[03-69]|62[013-9]))|72[1-57-9]2\"], \"8 ($1)\", , 1], [, \"(\\\\d{5})(\\\\d)(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\n      \"7(?:1[0-68]|2[1-9])\",\n      \"7(?:1(?:[06][3-6]|[18]|2[35]|[3-5][3-5])|2(?:[13][3-5]|[24-689]|7[457]))\",\n      \"7(?:1(?:0(?:[356]|4[023])|[18]|2(?:3[013-9]|5)|3[45]|43[013-79]|5(?:3[1-8]|4[1-7]|5)|6(?:3[0-35-9]|[4-6]))|2(?:1(?:3[178]|[45])|[24-689]|3[35]|7[457]))|7(?:14|23)4[0-8]|71(?:33|45)[1-79]\"\n    ], \"8 ($1)\", , 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"7\"], \"8 ($1)\", , 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2-$3-$4\", [\"[349]|8(?:[02-7]|1[1-8])\"], \"8 ($1)\", , 1], [, \"(\\\\d{4})(\\\\d{4})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"8\"], \"8 ($1)\"]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], 1, \"[3489]\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    RW: [, [, , \"(?:06|[27]\\\\d\\\\d|[89]00)\\\\d{6}\", , , , , , , [8, 9]], [, , \"(?:06|2[23568]\\\\d)\\\\d{6}\", , , , \"250123456\"], [, , \"7[237-9]\\\\d{7}\", , , , \"720123456\", , , [9]], [, , \"800\\\\d{6}\", , , , \"800123456\", , , [9]], [, , \"900\\\\d{6}\", , , , \"900123456\", , , [9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"RW\", 250, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"0\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"2\"]], [\n      ,\n      \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\n      \"$1 $2 $3\",\n      [\"[7-9]\"],\n      \"0$1\"\n    ]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    SA: [, [, , \"(?:[15]\\\\d|800|92)\\\\d{7}\", , , , , , , [9, 10], [7]], [, , \"1(?:1\\\\d|2[24-8]|3[35-8]|4[3-68]|6[2-5]|7[235-7])\\\\d{6}\", , , , \"112345678\", , , [9], [7]], [, , \"579[0-8]\\\\d{5}|5(?:[013-689]\\\\d|7[0-8])\\\\d{6}\", , , , \"512345678\", , , [9]], [, , \"800\\\\d{7}\", , , , \"8001234567\", , , [10]], [, , \"925\\\\d{6}\", , , , \"925012345\", , , [9]], [, , \"920\\\\d{6}\", , , , \"920012345\", , , [9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"SA\", 966, \"00\", \"0\", , , \"0\", , , , [[\n      ,\n      \"(\\\\d{4})(\\\\d{5})\",\n      \"$1 $2\",\n      [\"9\"]\n    ], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"1\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"5\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"8\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    SB: [, [, , \"[6-9]\\\\d{6}|[1-6]\\\\d{4}\", , , , , , , [5, 7]], [, , \"(?:1[4-79]|[23]\\\\d|4[0-2]|5[03]|6[0-37])\\\\d{3}\", , , , \"40123\", , , [5]], [, , \"48\\\\d{3}|(?:(?:6[89]|7[1-9]|8[4-9])\\\\d|9(?:1[2-9]|2[013-9]|3[0-2]|[46]\\\\d|5[0-46-9]|7[0-689]|8[0-79]|9[0-8]))\\\\d{4}\", , , , \"7421234\"], [\n      ,\n      ,\n      \"1[38]\\\\d{3}\",\n      ,\n      ,\n      ,\n      \"18123\",\n      ,\n      ,\n      [5]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"5[12]\\\\d{3}\", , , , \"51123\", , , [5]], \"SB\", 677, \"0[01]\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{5})\", \"$1 $2\", [\"6[89]|7|8[4-9]|9(?:[1-8]|9[0-8])\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    SC: [, [, , \"(?:[2489]\\\\d|64)\\\\d{5}\", , , , , , , [7]], [, , \"4[2-46]\\\\d{5}\", , , , \"4217123\"], [, , \"2[125-8]\\\\d{5}\", , , , \"2510123\"], [, , \"800[08]\\\\d{3}\", , , , \"8000000\"], [, , \"85\\\\d{5}\", , , , \"8512345\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"971\\\\d{4}|(?:64|95)\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"6412345\"\n    ], \"SC\", 248, \"010|0[0-2]\", , , , , , \"00\", , [[, \"(\\\\d)(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[246]|9[57]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    SD: [, [, , \"[19]\\\\d{8}\", , , , , , , [9]], [, , \"1(?:5\\\\d|8[35-7])\\\\d{6}\", , , , \"153123456\"], [, , \"(?:1[0-2]|9[0-3569])\\\\d{7}\", , , , \"911231234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"SD\", 249, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[19]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], , , [, , , , , , , , , [-1]]],\n    SE: [, [, , \"(?:[26]\\\\d\\\\d|9)\\\\d{9}|[1-9]\\\\d{8}|[1-689]\\\\d{7}|[1-4689]\\\\d{6}|2\\\\d{5}\", , , , , , , [6, 7, 8, 9, 10, 12]], [\n      ,\n      ,\n      \"(?:(?:[12][136]|3[356]|4[0246]|6[03]|8\\\\d)\\\\d|90[1-9])\\\\d{4,6}|(?:1(?:2[0-35]|4[0-4]|5[0-25-9]|7[13-6]|[89]\\\\d)|2(?:2[0-7]|4[0136-8]|5[0138]|7[018]|8[01]|9[0-57])|3(?:0[0-4]|1\\\\d|2[0-25]|4[056]|7[0-2]|8[0-3]|9[023])|4(?:1[013-8]|3[0135]|5[14-79]|7[0-246-9]|8[0156]|9[0-689])|5(?:0[0-6]|[15][0-5]|2[0-68]|3[0-4]|4\\\\d|6[03-5]|7[013]|8[0-79]|9[01])|6(?:1[1-3]|2[0-4]|4[02-57]|5[0-37]|6[0-3]|7[0-2]|8[0247]|9[0-356])|9(?:1[0-68]|2\\\\d|3[02-5]|4[0-3]|5[0-4]|[68][01]|7[0135-8]))\\\\d{5,6}\",\n      ,\n      ,\n      ,\n      \"8123456\",\n      ,\n      ,\n      [7, 8, 9]\n    ], [, , \"7[023689]\\\\d{7}\", , , , \"701234567\", , , [9]], [, , \"20\\\\d{4,7}\", , , , \"20123456\", , , [6, 7, 8, 9]], [, , \"649\\\\d{6}|99[1-59]\\\\d{4}(?:\\\\d{3})?|9(?:00|39|44)[1-8]\\\\d{3,6}\", , , , \"9001234567\", , , [7, 8, 9, 10]], [, , \"77[0-7]\\\\d{6}\", , , , \"771234567\", , , [9]], [, , \"75[1-8]\\\\d{6}\", , , , \"751234567\", , , [9]], [, , , , , , , , , [-1]], \"SE\", 46, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})\", \"$1-$2 $3\", [\"20\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{4})\", \"$1-$2\", [\"9(?:00|39|44|9)\"], \"0$1\"], [\n      ,\n      \"(\\\\d{2})(\\\\d{3})(\\\\d{2})\",\n      \"$1-$2 $3\",\n      [\"[12][136]|3[356]|4[0246]|6[03]|90[1-9]\"],\n      \"0$1\"\n    ], [, \"(\\\\d)(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\", \"$1-$2 $3 $4\", [\"8\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2,3})(\\\\d{2})\", \"$1-$2 $3\", [\"1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[125689]|4[02-57]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2,3})(\\\\d{3})\", \"$1-$2 $3\", [\"9(?:00|39|44)\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\", \"$1-$2 $3 $4\", [\"1[13689]|2[0136]|3[1356]|4[0246]|54|6[03]|90[1-9]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1-$2 $3 $4\", [\"10|7\"], \"0$1\"], [\n      ,\n      \"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\n      \"$1-$2 $3 $4\",\n      [\"8\"],\n      \"0$1\"\n    ], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1-$2 $3 $4\", [\"[13-5]|2(?:[247-9]|5[0138])|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{3})\", \"$1-$2 $3 $4\", [\"9\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1-$2 $3 $4 $5\", [\"[26]\"], \"0$1\"]], [[, \"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})\", \"$1 $2 $3\", [\"20\"]], [, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"9(?:00|39|44|9)\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})\", \"$1 $2 $3\", [\"[12][136]|3[356]|4[0246]|6[03]|90[1-9]\"]], [\n      ,\n      \"(\\\\d)(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\",\n      \"$1 $2 $3 $4\",\n      [\"8\"]\n    ], [, \"(\\\\d{3})(\\\\d{2,3})(\\\\d{2})\", \"$1 $2 $3\", [\"1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[125689]|4[02-57]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"]], [, \"(\\\\d{3})(\\\\d{2,3})(\\\\d{3})\", \"$1 $2 $3\", [\"9(?:00|39|44)\"]], [, \"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"1[13689]|2[0136]|3[1356]|4[0246]|54|6[03]|90[1-9]\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"10|7\"]], [, \"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"8\"]], [\n      ,\n      \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\n      \"$1 $2 $3 $4\",\n      [\"[13-5]|2(?:[247-9]|5[0138])|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"]\n    ], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"9\"]], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4 $5\", [\"[26]\"]]], [, , \"74[02-9]\\\\d{6}\", , , , \"740123456\", , , [9]], , , [, , , , , , , , , [-1]], [, , \"10[1-8]\\\\d{6}\", , , , \"102345678\", , , [9]], , , [, , \"(?:25[245]|67[3-68])\\\\d{9}\", , , , \"254123456789\", , , [12]]],\n    SG: [, [, , \"(?:(?:1\\\\d|8)\\\\d\\\\d|7000)\\\\d{7}|[3689]\\\\d{7}\", , , , , , , [8, 10, 11]], [\n      ,\n      ,\n      \"662[0-24-9]\\\\d{4}|6(?:[0-578]\\\\d|6[013-57-9]|9[0-35-9])\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"61234567\",\n      ,\n      ,\n      [8]\n    ], [, , \"80[1-9]\\\\d{5}|(?:8[1-9]|9[0-8])\\\\d{6}\", , , , \"81234567\", , , [8]], [, , \"(?:18|8)00\\\\d{7}\", , , , \"18001234567\", , , [10, 11]], [, , \"1900\\\\d{7}\", , , , \"19001234567\", , , [11]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"(?:3[12]\\\\d|666)\\\\d{5}\", , , , \"31234567\", , , [8]], \"SG\", 65, \"0[0-3]\\\\d\", , , , , , , , [[, \"(\\\\d{4,5})\", \"$1\", [\"1[013-9]|77\", \"1(?:[013-8]|9(?:0[1-9]|[1-9]))|77\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[369]|8(?:0[1-9]|[1-9])\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"8\"]], [\n      ,\n      \"(\\\\d{4})(\\\\d{4})(\\\\d{3})\",\n      \"$1 $2 $3\",\n      [\"7\"]\n    ], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"1\"]]], [[, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[369]|8(?:0[1-9]|[1-9])\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"8\"]], [, \"(\\\\d{4})(\\\\d{4})(\\\\d{3})\", \"$1 $2 $3\", [\"7\"]], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"1\"]]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"7000\\\\d{7}\", , , , \"70001234567\", , , [11]], , , [, , , , , , , , , [-1]]],\n    SH: [, [, , \"(?:[256]\\\\d|8)\\\\d{3}\", , , , , , , [4, 5]], [, , \"2(?:[0-57-9]\\\\d|6[4-9])\\\\d\\\\d\", , , , \"22158\"], [, , \"[56]\\\\d{4}\", , , , \"51234\", , , [5]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"262\\\\d\\\\d\", , , , \"26212\", , , [5]], \"SH\", 290, \"00\", , , , , , , , , , [, , , , , , , , , [-1]], 1, \"[256]\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    SI: [, [, , \"[1-7]\\\\d{7}|8\\\\d{4,7}|90\\\\d{4,6}\", , , , , , , [5, 6, 7, 8]], [, , \"(?:[1-357][2-8]|4[24-8])\\\\d{6}\", , , , \"12345678\", , , [8], [7]], [, , \"65(?:[178]\\\\d|5[56]|6[01])\\\\d{4}|(?:[37][01]|4[013]|51|6[489])\\\\d{6}\", , , , \"31234567\", , , [8]], [, , \"80\\\\d{4,6}\", , , , \"80123456\", , , [6, 7, 8]], [, , \"89[1-3]\\\\d{2,5}|90\\\\d{4,6}\", , , , \"90123456\"], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , \"(?:59\\\\d\\\\d|8(?:1(?:[67]\\\\d|8[0-589])|2(?:0\\\\d|2[0-37-9]|8[0-2489])|3[389]\\\\d))\\\\d{4}\", , , , \"59012345\", , , [8]], \"SI\", 386, \"00|10(?:22|66|88|99)\", \"0\", , , \"0\", , \"00\", , [[, \"(\\\\d{2})(\\\\d{3,6})\", \"$1 $2\", [\"8[09]|9\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{5})\", \"$1 $2\", [\"59|8\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[37][01]|4[013]|51|6\"], \"0$1\"], [, \"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[1-57]\"], \"(0$1)\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    SJ: [, [\n      ,\n      ,\n      \"0\\\\d{4}|(?:[489]\\\\d|79)\\\\d{6}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [5, 8]\n    ], [, , \"79\\\\d{6}\", , , , \"79123456\", , , [8]], [, , \"45(?:[0-24-9]\\\\d|3[0-57-9])\\\\d{4}|(?:4[016-8]|9\\\\d)\\\\d{6}\", , , , \"41234567\", , , [8]], [, , \"80[01]\\\\d{5}\", , , , \"80012345\", , , [8]], [, , \"82[09]\\\\d{5}\", , , , \"82012345\", , , [8]], [, , \"810(?:0[0-6]|[2-8]\\\\d)\\\\d{3}\", , , , \"81021234\", , , [8]], [, , \"880\\\\d{5}\", , , , \"88012345\", , , [8]], [, , \"85[0-5]\\\\d{5}\", , , , \"85012345\", , , [8]], \"SJ\", 47, \"00\", , , , , , , , , , [, , , , , , , , , [-1]], , \"79\", [, , , , , , , , , [-1]], [, , \"(?:0[235-9]|81(?:0(?:0[7-9]|1\\\\d)|5\\\\d\\\\d))\\\\d{3}\", , , , \"02000\"], , , [\n      ,\n      ,\n      \"81[23]\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"81212345\",\n      ,\n      ,\n      [8]\n    ]],\n    SK: [\n      ,\n      [, , \"[2-689]\\\\d{8}|[2-59]\\\\d{6}|[2-5]\\\\d{5}\", , , , , , , [6, 7, 9]],\n      [, , \"(?:2(?:16|[2-9]\\\\d{3})|(?:(?:[3-5][1-8]\\\\d|819)\\\\d|601[1-5])\\\\d)\\\\d{4}|(?:2|[3-5][1-8])1[67]\\\\d{3}|[3-5][1-8]16\\\\d\\\\d\", , , , \"221234567\"],\n      [, , \"909[1-9]\\\\d{5}|9(?:0[1-8]|1[0-24-9]|4[03-57-9]|5\\\\d)\\\\d{6}\", , , , \"912123456\", , , [9]],\n      [, , \"800\\\\d{6}\", , , , \"800123456\", , , [9]],\n      [, , \"9(?:00|[78]\\\\d)\\\\d{6}\", , , , \"900123456\", , , [9]],\n      [, , \"8[5-9]\\\\d{7}\", , , , \"850123456\", , , [9]],\n      [, , , , , , , , , [-1]],\n      [, , \"6(?:02|5[0-4]|9[0-6])\\\\d{6}\", , , , \"690123456\", , , [9]],\n      \"SK\",\n      421,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d)(\\\\d{2})(\\\\d{3,4})\", \"$1 $2 $3\", [\"21\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2,3})\", \"$1 $2 $3\", [\"[3-5][1-8]1\", \"[3-5][1-8]1[67]\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{3})\", \"$1 $2\", [\"909\", \"9090\"], \"0$1\"], [, \"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"2\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[689]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[3-5]\"], \"0$1\"]],\n      [[, \"(\\\\d)(\\\\d{2})(\\\\d{3,4})\", \"$1 $2 $3\", [\"21\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2,3})\", \"$1 $2 $3\", [\n        \"[3-5][1-8]1\",\n        \"[3-5][1-8]1[67]\"\n      ], \"0$1\"], [, \"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"2\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[689]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[3-5]\"], \"0$1\"]],\n      [, , \"9090\\\\d{3}\", , , , \"9090123\", , , [7]],\n      ,\n      ,\n      [, , \"9090\\\\d{3}|(?:602|8(?:00|[5-9]\\\\d)|9(?:00|[78]\\\\d))\\\\d{6}\", , , , , , , [7, 9]],\n      [, , \"96\\\\d{7}\", , , , \"961234567\", , , [9]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    SL: [, [, , \"(?:[237-9]\\\\d|66)\\\\d{6}\", , , , , , , [8], [6]], [, , \"22[2-4][2-9]\\\\d{4}\", , , , \"22221234\", , , , [6]], [\n      ,\n      ,\n      \"(?:25|3[0-5]|66|7\\\\d|8[08]|9[09])\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"25123456\"\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"SL\", 232, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{6})\", \"$1 $2\", [\"[236-9]\"], \"(0$1)\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    SM: [, [, , \"(?:0549|[5-7]\\\\d)\\\\d{6}\", , , , , , , [8, 10], [6]], [, , \"0549(?:8[0157-9]|9\\\\d)\\\\d{4}\", , , , \"0549886377\", , , [10], [6]], [, , \"6[16]\\\\d{6}\", , , , \"66661212\", , , [8]], [, , , , , , , , , [-1]], [, , \"7[178]\\\\d{6}\", , , , \"71123456\", , , [8]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"5[158]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"58001110\",\n      ,\n      ,\n      [8]\n    ], \"SM\", 378, \"00\", , , , \"([89]\\\\d{5})$\", \"0549$1\", , , [[, \"(\\\\d{6})\", \"$1\", [\"[89]\"]], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[5-7]\"]], [, \"(\\\\d{4})(\\\\d{6})\", \"$1 $2\", [\"0\"]]], [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[5-7]\"]], [, \"(\\\\d{4})(\\\\d{6})\", \"$1 $2\", [\"0\"]]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    SN: [, [, , \"(?:[378]\\\\d|93)\\\\d{7}\", , , , , , , [9]], [, , \"3(?:0(?:1[0-2]|80)|282|3(?:8[1-9]|9[3-9])|611)\\\\d{5}\", , , , \"301012345\"], [\n      ,\n      ,\n      \"7(?:[015-8]\\\\d|21|90)\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"701234567\"\n    ], [, , \"800\\\\d{6}\", , , , \"800123456\"], [, , \"88[4689]\\\\d{6}\", , , , \"884123456\"], [, , \"81[02468]\\\\d{6}\", , , , \"810123456\"], [, , , , , , , , , [-1]], [, , \"(?:3(?:392|9[01]\\\\d)\\\\d|93(?:3[13]0|929))\\\\d{4}\", , , , \"933301234\"], \"SN\", 221, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"8\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[379]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    SO: [, [, , \"[346-9]\\\\d{8}|[12679]\\\\d{7}|[1-5]\\\\d{6}|[1348]\\\\d{5}\", , , , , , , [6, 7, 8, 9]], [\n      ,\n      ,\n      \"(?:1\\\\d|2[0-79]|3[0-46-8]|4[0-7]|5[57-9])\\\\d{5}|(?:[134]\\\\d|8[125])\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"4012345\",\n      ,\n      ,\n      [6, 7]\n    ], [, , \"(?:(?:15|(?:3[59]|4[89]|6\\\\d|7[0-35-9]|8[08])\\\\d|9(?:0\\\\d|[2-9]))\\\\d|2(?:4\\\\d|8))\\\\d{5}|(?:[67]\\\\d\\\\d|904)\\\\d{5}\", , , , \"71123456\", , , [7, 8, 9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"SO\", 252, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{4})\", \"$1 $2\", [\"8[125]\"]], [, \"(\\\\d{6})\", \"$1\", [\"[134]\"]], [, \"(\\\\d)(\\\\d{6})\", \"$1 $2\", [\"[15]|2[0-79]|3[0-46-8]|4[0-7]\"]], [\n      ,\n      \"(\\\\d{2})(\\\\d{5,7})\",\n      \"$1 $2\",\n      [\"1|28|9[2-9]\"]\n    ], [, \"(\\\\d)(\\\\d{7})\", \"$1 $2\", [\"[267]|904\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[346-9]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    SR: [\n      ,\n      [, , \"(?:[2-5]|[6-9]\\\\d)\\\\d{5}\", , , , , , , [6, 7]],\n      [, , \"(?:2[1-3]|3[0-7]|4\\\\d|5[2-578])\\\\d{4}\", , , , \"211234\", , , [6]],\n      [, , \"(?:6[08]|7[1-7]|8[1-9])\\\\d{5}\", , , , \"7412345\", , , [7]],\n      [, , \"80\\\\d{5}\", , , , \"8012345\", , , [7]],\n      [, , \"90\\\\d{5}\", , , , \"9012345\", , , [7]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , \"(?:56|91\\\\d)\\\\d{4}\", , , , \"561234\"],\n      \"SR\",\n      597,\n      \"00\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1-$2-$3\", [\"56\"]], [, \"(\\\\d{3})(\\\\d{3})\", \"$1-$2\", [\"[2-5]\"]], [, \"(\\\\d{3})(\\\\d{4})\", \"$1-$2\", [\"[6-9]\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    SS: [\n      ,\n      [, , \"[19]\\\\d{8}\", , , , , , , [9]],\n      [, , \"1[89]\\\\d{7}\", , , , \"181234567\"],\n      [, , \"(?:12|9[1257-9])\\\\d{7}\", , , , \"977123456\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"SS\",\n      211,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[19]\"], \"0$1\"]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    ST: [, [, , \"(?:22|9\\\\d)\\\\d{5}\", , , , , , , [7]], [, , \"22\\\\d{5}\", , , , \"2221234\"], [, , \"900[5-9]\\\\d{3}|9(?:0[1-9]|[89]\\\\d)\\\\d{4}\", , , , \"9812345\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"ST\", 239, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[29]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    SV: [, [, , \"[25-7]\\\\d{7}|(?:80\\\\d|900)\\\\d{4}(?:\\\\d{4})?\", , , , , , , [7, 8, 11]], [\n      ,\n      ,\n      \"2(?:79(?:0[0347-9]|[1-9]\\\\d)|89(?:0[024589]|[1-9]\\\\d))\\\\d{3}|2(?:[1-69]\\\\d|[78][0-8])\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"21234567\",\n      ,\n      ,\n      [8]\n    ], [, , \"[5-7]\\\\d{7}\", , , , \"70123456\", , , [8]], [, , \"800\\\\d{8}|80[01]\\\\d{4}\", , , , \"8001234\", , , [7, 11]], [, , \"900\\\\d{4}(?:\\\\d{4})?\", , , , \"9001234\", , , [7, 11]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"SV\", 503, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[89]\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[25-7]\"]], [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"[89]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    SX: [\n      ,\n      [, , \"7215\\\\d{6}|(?:[58]\\\\d\\\\d|900)\\\\d{7}\", , , , , , , [10], [7]],\n      [\n        ,\n        ,\n        \"7215(?:4[2-8]|8[39]|9[056])\\\\d{4}\",\n        ,\n        ,\n        ,\n        \"7215425678\",\n        ,\n        ,\n        ,\n        [7]\n      ],\n      [, , \"7215(?:1[02]|2\\\\d|5[034679]|8[0-24-8])\\\\d{4}\", , , , \"7215205678\", , , , [7]],\n      [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\"],\n      [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"],\n      [, , , , , , , , , [-1]],\n      [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"],\n      [, , , , , , , , , [-1]],\n      \"SX\",\n      1,\n      \"011\",\n      \"1\",\n      ,\n      ,\n      \"(5\\\\d{6})$|1\",\n      \"721$1\",\n      ,\n      ,\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      \"721\",\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    SY: [, [, , \"[1-359]\\\\d{8}|[1-5]\\\\d{7}\", , , , , , , [8, 9], [6, 7]], [, , \"(?:1(?:[1478]\\\\d|[2356])|21\\\\d|3(?:[13]\\\\d|4)|4[134]|5[1-3])\\\\d{6}|2[1-5]\\\\d{6}\", , , , \"112345678\", , , , [6, 7]], [, , \"(?:50|9[03-689])\\\\d{7}\", , , , \"944567890\", , , [9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"SY\", 963, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[1-4]|5[1-3]\"], \"0$1\", , 1], [\n      ,\n      \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\n      \"$1 $2 $3\",\n      [\"[59]\"],\n      \"0$1\",\n      ,\n      1\n    ]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    SZ: [, [, , \"0800\\\\d{4}|(?:[237]\\\\d|900)\\\\d{6}\", , , , , , , [8, 9]], [, , \"[23][2-5]\\\\d{6}\", , , , \"22171234\", , , [8]], [, , \"7[5-9]\\\\d{6}\", , , , \"76123456\", , , [8]], [, , \"0800\\\\d{4}\", , , , \"08001234\", , , [8]], [, , \"900\\\\d{6}\", , , , \"900012345\", , , [9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"70\\\\d{6}\", , , , \"70012345\", , , [8]], \"SZ\", 268, \"00\", , , , , , , , [[, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[0237]\"]], [, \"(\\\\d{5})(\\\\d{4})\", \"$1 $2\", [\"9\"]]], , [, , , , , , , , , [-1]], , , [\n      ,\n      ,\n      \"0800\\\\d{4}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [8]\n    ], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    TA: [, [, , \"8\\\\d{3}\", , , , , , , [4]], [, , \"8\\\\d{3}\", , , , \"8999\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"TA\", 290, \"00\", , , , , , , , , , [, , , , , , , , , [-1]], , \"8\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    TC: [\n      ,\n      [, , \"(?:[58]\\\\d\\\\d|649|900)\\\\d{7}\", , , , , , , [10], [7]],\n      [, , \"649(?:266|712|9(?:4\\\\d|50))\\\\d{4}\", , , , \"6497121234\", , , , [7]],\n      [, , \"649(?:2(?:3[129]|4[1-79])|3\\\\d\\\\d|4[34][1-3])\\\\d{4}\", , , , \"6492311234\", , , , [7]],\n      [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002345678\"],\n      [, , \"900[2-9]\\\\d{6}\", , , , \"9002345678\"],\n      [, , , , , , , , , [-1]],\n      [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"],\n      [, , \"649(?:71[01]|966)\\\\d{4}\", , , , \"6497101234\", , , , [7]],\n      \"TC\",\n      1,\n      \"011\",\n      \"1\",\n      ,\n      ,\n      \"([2-479]\\\\d{6})$|1\",\n      \"649$1\",\n      ,\n      ,\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      \"649\",\n      [\n        ,\n        ,\n        ,\n        ,\n        ,\n        ,\n        ,\n        ,\n        ,\n        [-1]\n      ],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    TD: [, [, , \"(?:22|[3689]\\\\d|77)\\\\d{6}\", , , , , , , [8]], [, , \"22(?:[37-9]0|5[0-5]|6[89])\\\\d{4}\", , , , \"22501234\"], [, , \"(?:3[01]|[69]\\\\d|77|8[5-7])\\\\d{6}\", , , , \"63012345\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"TD\", 235, \"00|16\", , , , , , \"00\", , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[236-9]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    TG: [, [, , \"[279]\\\\d{7}\", , , , , , , [8]], [\n      ,\n      ,\n      \"2(?:2[2-7]|3[23]|4[45]|55|6[67]|77)\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"22212345\"\n    ], [, , \"(?:7[0-389]|9[0-36-9])\\\\d{6}\", , , , \"90112345\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"TG\", 228, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[279]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    TH: [, [, , \"(?:001800|[2-57]|[689]\\\\d)\\\\d{7}|1\\\\d{7,9}\", , , , , , , [8, 9, 10, 13]], [, , \"(?:1[0689]|2\\\\d|3[2-9]|4[2-5]|5[2-6]|7[3-7])\\\\d{6}\", , , , \"21234567\", , , [8]], [\n      ,\n      ,\n      \"(?:(?:14|[89]\\\\d)\\\\d\\\\d|6(?:[1-6]\\\\d\\\\d|7(?:1[0-8]|2[4-7]|3[1-6])))\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"812345678\",\n      ,\n      ,\n      [9]\n    ], [, , \"(?:001800\\\\d|1800)\\\\d{6}\", , , , \"1800123456\", , , [10, 13]], [, , \"1900\\\\d{6}\", , , , \"1900123456\", , , [10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"6[08]\\\\d{7}\", , , , \"601234567\", , , [9]], \"TH\", 66, \"00[1-9]\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"2\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[13-9]\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"1\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    TJ: [, [, , \"(?:[0-57-9]\\\\d|66)\\\\d{7}\", , , , , , , [9], [\n      3,\n      5,\n      6,\n      7\n    ]], [, , \"(?:3(?:1[3-5]|2[245]|3[12]|4[24-7]|5[25]|72)|4(?:46|74|87))\\\\d{6}\", , , , \"372123456\", , , , [3, 5, 6, 7]], [, , \"(?:33[03-9]|4(?:1[18]|4[02-479])|81[1-9])\\\\d{6}|(?:[09]\\\\d|1[0-27-9]|2[0-27]|3[08]|40|5[05]|66|7[0157-9]|8[07-9])\\\\d{7}\", , , , \"917123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"TJ\", 992, \"810\", , , , , , \"8~10\", , [[, \"(\\\\d{6})(\\\\d)(\\\\d{2})\", \"$1 $2 $3\", [\"331\", \"3317\"]], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{4})\", \"$1 $2 $3\", [\"44[02-479]|[34]7\"]], [\n      ,\n      \"(\\\\d{4})(\\\\d)(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\"3(?:[1245]|3[12])\"]\n    ], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"\\\\d\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    TK: [, [, , \"[2-47]\\\\d{3,6}\", , , , , , , [4, 5, 6, 7]], [, , \"(?:2[2-4]|[34]\\\\d)\\\\d{2,5}\", , , , \"3101\"], [, , \"7[2-4]\\\\d{2,5}\", , , , \"7290\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"TK\", 690, \"00\", , , , , , , , , , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    TL: [, [, , \"7\\\\d{7}|(?:[2-47]\\\\d|[89]0)\\\\d{5}\", , , , , , , [7, 8]], [\n      ,\n      ,\n      \"(?:2[1-5]|3[1-9]|4[1-4])\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"2112345\",\n      ,\n      ,\n      [7]\n    ], [, , \"7[2-8]\\\\d{6}\", , , , \"77212345\", , , [8]], [, , \"80\\\\d{5}\", , , , \"8012345\", , , [7]], [, , \"90\\\\d{5}\", , , , \"9012345\", , , [7]], [, , , , , , , , , [-1]], [, , \"70\\\\d{5}\", , , , \"7012345\", , , [7]], [, , , , , , , , , [-1]], \"TL\", 670, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[2-489]|70\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"7\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    TM: [, [, , \"[1-7]\\\\d{7}\", , , , , , , [8]], [\n      ,\n      ,\n      \"(?:1(?:2\\\\d|3[1-9])|2(?:22|4[0-35-8])|3(?:22|4[03-9])|4(?:22|3[128]|4\\\\d|6[15])|5(?:22|5[7-9]|6[014-689]))\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"12345678\"\n    ], [, , \"(?:6\\\\d|7[12])\\\\d{6}\", , , , \"66123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"TM\", 993, \"810\", \"8\", , , \"8\", , \"8~10\", , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2-$3-$4\", [\"12\"], \"(8 $1)\"], [, \"(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\", \"$1 $2-$3-$4\", [\"[1-5]\"], \"(8 $1)\"], [, \"(\\\\d{2})(\\\\d{6})\", \"$1 $2\", [\"[67]\"], \"8 $1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    TN: [, [, , \"[2-57-9]\\\\d{7}\", , , , , , , [8]], [\n      ,\n      ,\n      \"81200\\\\d{3}|(?:3[0-2]|7\\\\d)\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"30010123\"\n    ], [, , \"3(?:001|[12]40)\\\\d{4}|(?:(?:[259]\\\\d|4[0-8])\\\\d|3(?:1[1-35]|6[0-4]|91))\\\\d{5}\", , , , \"20123456\"], [, , \"8010\\\\d{4}\", , , , \"80101234\"], [, , \"88\\\\d{6}\", , , , \"88123456\"], [, , \"8[12]10\\\\d{4}\", , , , \"81101234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"TN\", 216, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[2-57-9]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    TO: [, [, , \"(?:0800|(?:[5-8]\\\\d\\\\d|999)\\\\d)\\\\d{3}|[2-8]\\\\d{4}\", , , , , , , [5, 7]], [\n      ,\n      ,\n      \"(?:2\\\\d|3[0-8]|4[0-4]|50|6[09]|7[0-24-69]|8[05])\\\\d{3}\",\n      ,\n      ,\n      ,\n      \"20123\",\n      ,\n      ,\n      [5]\n    ], [, , \"(?:5(?:4[0-5]|5[4-6])|6(?:[09]\\\\d|3[02]|8[15-9])|(?:7\\\\d|8[46-9])\\\\d|999)\\\\d{4}\", , , , \"7715123\", , , [7]], [, , \"0800\\\\d{3}\", , , , \"0800222\", , , [7]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"55[0-37-9]\\\\d{4}\", , , , \"5510123\", , , [7]], \"TO\", 676, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{3})\", \"$1-$2\", [\"[2-4]|50|6[09]|7[0-24-69]|8[05]\"]], [, \"(\\\\d{4})(\\\\d{3})\", \"$1 $2\", [\"0\"]], [, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[5-9]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    TR: [, [\n      ,\n      ,\n      \"4\\\\d{6}|8\\\\d{11,12}|(?:[2-58]\\\\d\\\\d|900)\\\\d{7}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [7, 10, 12, 13]\n    ], [, , \"(?:2(?:1[26]|[28][2468]|[3-5][268]|[67][246])|3(?:[13][28]|[24-6][2468]|[78][02468]|92)|4(?:[16][246]|[23578][2468]|4[26]))\\\\d{7}\", , , , \"2123456789\", , , [10]], [, , \"5(?:61(?:011|61\\\\d)|82[2-4]\\\\d\\\\d)\\\\d{4}|5(?:[03-5]\\\\d|1[06]|24|6[24]|7[245]|9[46])\\\\d{7}\", , , , \"5012345678\", , , [10]], [, , \"8(?:00\\\\d{7}(?:\\\\d{2,3})?|11\\\\d{7})\", , , , \"8001234567\", , , [10, 12, 13]], [, , \"(?:8[89]8|900)\\\\d{7}\", , , , \"9001234567\", , , [10]], [, , , , , , , , , [-1]], [, , \"592(?:21[12]|461)\\\\d{4}\", , , , \"5922121234\", , , [10]], [\n      ,\n      ,\n      \"850\\\\d{7}\",\n      ,\n      ,\n      ,\n      \"8500123456\",\n      ,\n      ,\n      [10]\n    ], \"TR\", 90, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d)(\\\\d{3})\", \"$1 $2 $3\", [\"444\"], , , 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"512|8[01589]|90\"], \"0$1\", , 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"5\"], \"0$1\", , 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[24][1-8]|3[1-9]\"], \"(0$1)\", , 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{6,7})\", \"$1 $2 $3\", [\"80\"], \"0$1\", , 1]], [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"512|8[01589]|90\"], \"0$1\", , 1], [\n      ,\n      \"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\n      \"$1 $2 $3 $4\",\n      [\"5\"],\n      \"0$1\",\n      ,\n      1\n    ], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[24][1-8]|3[1-9]\"], \"(0$1)\", , 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{6,7})\", \"$1 $2 $3\", [\"80\"], \"0$1\", , 1]], [, , \"512\\\\d{7}\", , , , \"5123456789\", , , [10]], , , [, , \"(?:444|811\\\\d{3})\\\\d{4}\", , , , , , , [7, 10]], [, , \"444\\\\d{4}\", , , , \"4441444\", , , [7]], , , [, , , , , , , , , [-1]]],\n    TT: [, [, , \"(?:[58]\\\\d\\\\d|900)\\\\d{7}\", , , , , , , [10], [7]], [, , \"868(?:2(?:01|1[5-9]|[23]\\\\d|4[0-2])|6(?:0[7-9]|1[02-8]|2[1-9]|[3-69]\\\\d|7[0-79])|82[124])\\\\d{4}\", , , , \"8682211234\", , , , [7]], [\n      ,\n      ,\n      \"868(?:(?:2[5-9]|3\\\\d)\\\\d|4(?:3[0-6]|[6-9]\\\\d)|6(?:20|78|8\\\\d)|7(?:0[1-9]|1[02-9]|[2-9]\\\\d))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"8682911234\",\n      ,\n      ,\n      ,\n      [7]\n    ], [, , \"868800\\\\d{4}|8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002345678\"], [, , \"900[2-9]\\\\d{6}\", , , , \"9002345678\"], [, , , , , , , , , [-1]], [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"], [, , , , , , , , , [-1]], \"TT\", 1, \"011\", \"1\", , , \"([2-46-8]\\\\d{6})$|1\", \"868$1\", , , , , [, , , , , , , , , [-1]], , \"868\", [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , , , , , , , , [-1]], , , [, , \"868619\\\\d{4}\", , , , \"8686191234\", , , , [7]]],\n    TV: [, [, , \"(?:2|7\\\\d\\\\d|90)\\\\d{4}\", , , , , , , [5, 6, 7]], [, , \"2[02-9]\\\\d{3}\", , , , \"20123\", , , [5]], [, , \"(?:7[01]\\\\d|90)\\\\d{4}\", , , , \"901234\", , , [6, 7]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"TV\", 688, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{3})\", \"$1 $2\", [\"2\"]], [, \"(\\\\d{2})(\\\\d{4})\", \"$1 $2\", [\"90\"]], [, \"(\\\\d{2})(\\\\d{5})\", \"$1 $2\", [\"7\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    TW: [, [\n      ,\n      ,\n      \"[2-689]\\\\d{8}|7\\\\d{9,10}|[2-8]\\\\d{7}|2\\\\d{6}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [7, 8, 9, 10, 11]\n    ], [\n      ,\n      ,\n      \"(?:2[2-8]\\\\d|370|55[01]|7[1-9])\\\\d{6}|4(?:(?:0(?:0[1-9]|[2-48]\\\\d)|1[023]\\\\d)\\\\d{4,5}|(?:[239]\\\\d\\\\d|4(?:0[56]|12|49))\\\\d{5})|6(?:[01]\\\\d{7}|4(?:0[56]|12|24|4[09])\\\\d{4,5})|8(?:(?:2(?:3\\\\d|4[0-269]|[578]0|66)|36[24-9]|90\\\\d\\\\d)\\\\d{4}|4(?:0[56]|12|24|4[09])\\\\d{4,5})|(?:2(?:2(?:0\\\\d\\\\d|4(?:0[68]|[249]0|3[0-467]|5[0-25-9]|6[0235689]))|(?:3(?:[09]\\\\d|1[0-4])|(?:4\\\\d|5[0-49]|6[0-29]|7[0-5])\\\\d)\\\\d)|(?:(?:3[2-9]|5[2-8]|6[0-35-79]|8[7-9])\\\\d\\\\d|4(?:2(?:[089]\\\\d|7[1-9])|(?:3[0-4]|[78]\\\\d|9[01])\\\\d))\\\\d)\\\\d{3}\",\n      ,\n      ,\n      ,\n      \"221234567\",\n      ,\n      ,\n      [8, 9]\n    ], [, , \"(?:40001[0-2]|9[0-8]\\\\d{4})\\\\d{3}\", , , , \"912345678\", , , [9]], [, , \"80[0-79]\\\\d{6}|800\\\\d{5}\", , , , \"800123456\", , , [8, 9]], [, , \"20(?:[013-9]\\\\d\\\\d|2)\\\\d{4}\", , , , \"203123456\", , , [7, 9]], [, , , , , , , , , [-1]], [, , \"99\\\\d{7}\", , , , \"990123456\", , , [9]], [, , \"7010(?:[0-2679]\\\\d|3[0-7]|8[0-5])\\\\d{5}|70\\\\d{8}\", , , , \"7012345678\", , , [10, 11]], \"TW\", 886, \"0(?:0[25-79]|19)\", \"0\", \"#\", , \"0\", , , , [[, \"(\\\\d{2})(\\\\d)(\\\\d{4})\", \"$1 $2 $3\", [\"202\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{5})\", \"$1 $2\", [\"826\"], \"0$1\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\n      \"$1 $2 $3\",\n      [\"83\"],\n      \"0$1\"\n    ], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{4})\", \"$1 $2 $3\", [\"82\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[25]0|37|49|8[09]\"], \"0$1\"], [, \"(\\\\d)(\\\\d{3,4})(\\\\d{4})\", \"$1 $2 $3\", [\"[23568]|4(?:0[02-48]|[1-478])|7[1-9]\", \"[23568]|4(?:0[2-48]|[1-478])|(?:400|7)[1-9]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[49]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4,5})\", \"$1 $2 $3\", [\"7\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"50[0-46-9]\\\\d{6}\", , , , \"500123456\", , , [9]], , , [, , , , , , , , , [-1]]],\n    TZ: [, [\n      ,\n      ,\n      \"(?:[25-8]\\\\d|41|90)\\\\d{7}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [9]\n    ], [, , \"2[2-8]\\\\d{7}\", , , , \"222345678\"], [, , \"(?:6[1-35-9]|7\\\\d)\\\\d{7}\", , , , \"621234567\"], [, , \"80[08]\\\\d{6}\", , , , \"800123456\"], [, , \"90\\\\d{7}\", , , , \"900123456\"], [, , \"8(?:40|6[01])\\\\d{6}\", , , , \"840123456\"], [, , , , , , , , , [-1]], [, , \"41\\\\d{7}\", , , , \"412345678\"], \"TZ\", 255, \"00[056]\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{4})\", \"$1 $2 $3\", [\"[89]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[24]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{7})\", \"$1 $2\", [\"5\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[67]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [\n      ,\n      ,\n      \"(?:8(?:[04]0|6[01])|90\\\\d)\\\\d{6}\"\n    ], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    UA: [\n      ,\n      [, , \"[89]\\\\d{9}|[3-9]\\\\d{8}\", , , , , , , [9, 10], [5, 6, 7]],\n      [, , \"(?:3[1-8]|4[13-8]|5[1-7]|6[12459])\\\\d{7}\", , , , \"311234567\", , , [9], [5, 6, 7]],\n      [, , \"790\\\\d{6}|(?:39|50|6[36-8]|7[1-357]|9[1-9])\\\\d{7}\", , , , \"501234567\", , , [9]],\n      [, , \"800[1-8]\\\\d{5,6}\", , , , \"800123456\"],\n      [, , \"900[239]\\\\d{5,6}\", , , , \"900212345\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , \"89[1-579]\\\\d{6}\", , , , \"891234567\", , , [9]],\n      \"UA\",\n      380,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      \"0~0\",\n      ,\n      [[\n        ,\n        \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\n        \"$1 $2 $3\",\n        [\"6[12][29]|(?:3[1-8]|4[136-8]|5[12457]|6[49])2|(?:56|65)[24]\", \"6[12][29]|(?:35|4[1378]|5[12457]|6[49])2|(?:56|65)[24]|(?:3[1-46-8]|46)2[013-9]\"],\n        \"0$1\"\n      ], [, \"(\\\\d{4})(\\\\d{5})\", \"$1 $2\", [\"3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6[0135689]|7[4-6])|6(?:[12][3-7]|[459])\", \"3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6(?:[015689]|3[02389])|7[4-6])|6(?:[12][3-7]|[459])\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[3-7]|89|9[1-9]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[89]\"], \"0$1\"]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    UG: [\n      ,\n      [, , \"800\\\\d{6}|(?:[29]0|[347]\\\\d)\\\\d{7}\", , , , , , , [9], [5, 6, 7]],\n      [, , \"20(?:(?:24[09]|30[67])\\\\d|6(?:00[0-2]|30[0-4]))\\\\d{3}|(?:20(?:[017]\\\\d|2[5-9]|3[1-4]|5[0-4]|6[15-9])|[34]\\\\d{3})\\\\d{5}\", , , , \"312345678\", , , , [5, 6, 7]],\n      [, , \"7(?:28|34)0\\\\d{5}|7(?:[014-8]\\\\d|2[01467]|3[0167]|9[0-589])\\\\d{6}\", , , , \"712345678\"],\n      [, , \"800[1-3]\\\\d{5}\", , , , \"800123456\"],\n      [, , \"90[1-3]\\\\d{6}\", , , , \"901123456\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"UG\",\n      256,\n      \"00[057]\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{4})(\\\\d{5})\", \"$1 $2\", [\"202\", \"2024\", \"20240\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{6})\", \"$1 $2\", [\"20[0-35-7]|4(?:6[45]|[7-9])|[7-9]\", \"20(?:[0135-7]|2[5-9])|4(?:6[45]|[7-9])|[7-9]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{7})\", \"$1 $2\", [\"[2-4]\"], \"0$1\"]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    US: [, [, , \"[2-9]\\\\d{9}|3\\\\d{6}\", , , , , , , [10], [7]], [\n      ,\n      ,\n      \"(?:472[2-47-9]|983[2-57-9])\\\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-57-9]|3[1459]|4[08]|5[1-46]|6[0279]|7[02469]|8[13])|3(?:0[1-57-9]|1[02-9]|2[013-79]|3[0-24679]|4[167]|5[0-3]|6[01349]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[349]|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[179]|6[1-47]|7[0-5]|8[0256])|6(?:0[1-35-9]|1[024-9]|2[03689]|3[016]|4[0156]|5[01679]|6[0-279]|78|8[0-269])|7(?:0[1-46-8]|1[2-9]|2[04-8]|3[0-2478]|4[0378]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[0168]|3[0-2589]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01357-9]|5[12469]|7[0-3589]|8[04-69]))[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"2015550123\",\n      ,\n      ,\n      ,\n      [7]\n    ], [\n      ,\n      ,\n      \"(?:472[2-47-9]|983[2-57-9])\\\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-57-9]|3[1459]|4[08]|5[1-46]|6[0279]|7[02469]|8[13])|3(?:0[1-57-9]|1[02-9]|2[013-79]|3[0-24679]|4[167]|5[0-3]|6[01349]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[349]|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[179]|6[1-47]|7[0-5]|8[0256])|6(?:0[1-35-9]|1[024-9]|2[03689]|3[016]|4[0156]|5[01679]|6[0-279]|78|8[0-269])|7(?:0[1-46-8]|1[2-9]|2[04-8]|3[0-2478]|4[0378]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[0168]|3[0-2589]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01357-9]|5[12469]|7[0-3589]|8[04-69]))[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"2015550123\",\n      ,\n      ,\n      ,\n      [7]\n    ], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002345678\"], [, , \"900[2-9]\\\\d{6}\", , , , \"9002345678\"], [, , , , , , , , , [-1]], [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"], [, , , , , , , , , [-1]], \"US\", 1, \"011\", \"1\", , , \"1\", , , 1, [[, \"(\\\\d{3})(\\\\d{4})\", \"$1-$2\", [\"310\"], , , 1], [\n      ,\n      \"(\\\\d{3})(\\\\d{4})\",\n      \"$1-$2\",\n      [\"[24-9]|3(?:[02-9]|1[1-9])\"]\n    ], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"($1) $2-$3\", [\"[2-9]\"], , , 1]], [[, \"(\\\\d{3})(\\\\d{4})\", \"$1-$2\", [\"310\"], , , 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1-$2-$3\", [\"[2-9]\"]]], [, , , , , , , , , [-1]], 1, , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    UY: [, [, , \"0004\\\\d{2,9}|[1249]\\\\d{7}|2\\\\d{3,4}|(?:[49]\\\\d|80)\\\\d{5}\", , , , , , , [4, 5, 6, 7, 8, 9, 10, 11, 12, 13]], [, , \"(?:1(?:770|9(?:20|[89]7))|(?:2\\\\d|4[2-7])\\\\d\\\\d)\\\\d{4}\", , , , \"21231234\", , , [8], [7]], [, , \"9[1-9]\\\\d{6}\", , , , \"94231234\", , , [8]], [\n      ,\n      ,\n      \"0004\\\\d{2,9}|(?:405|80[05])\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"8001234\",\n      ,\n      ,\n      [6, 7, 8, 9, 10, 11, 12, 13]\n    ], [, , \"90[0-8]\\\\d{4}\", , , , \"9001234\", , , [7]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"UY\", 598, \"0(?:0|1[3-9]\\\\d)\", \"0\", \" int. \", , \"0\", , \"00\", , [[, \"(\\\\d{4,5})\", \"$1\", [\"21\"]], [, \"(\\\\d{3})(\\\\d{3,4})\", \"$1 $2\", [\"0\"]], [, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[49]0|8\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"9\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[124]\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{2,4})\", \"$1 $2 $3\", [\"0\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{2,4})\", \"$1 $2 $3 $4\", [\"0\"]]], , [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], , , [, , , , , , , , , [-1]], [, , \"21\\\\d{2,3}\", , , , \"21123\", , , [4, 5]], , , [, , , , , , , , , [-1]]],\n    UZ: [, [, , \"(?:20|33|[5-9]\\\\d)\\\\d{7}\", , , , , , , [9]], [, , \"(?:55\\\\d\\\\d|6(?:1(?:22|3[124]|4[1-4]|5[1-3578]|64)|2(?:22|3[0-57-9]|41)|5(?:22|3[3-7]|5[024-8])|[69]\\\\d\\\\d|7(?:[23]\\\\d|7[69]))|7(?:[168]\\\\d\\\\d|2(?:22|3[13-57-9]|4[1-3579]|5[14])|3(?:2\\\\d|3[1578]|4[1-35-7]|5[1-57]|61)|4(?:2\\\\d|3[1-579]|7[1-79])|5(?:22|5[1-9]|6[1457])|9(?:22|5[1-9])))\\\\d{5}\", , , , \"669050123\"], [\n      ,\n      ,\n      \"(?:(?:[25]0|33|8[078]|9[0-57-9])\\\\d{3}|6(?:1(?:2(?:2[01]|98)|35[0-4]|50\\\\d|61[23]|7(?:[01][017]|4\\\\d|55|9[5-9]))|2(?:(?:11|7\\\\d)\\\\d|2(?:[12]1|9[01379])|5(?:[126]\\\\d|3[0-4]))|5(?:19[01]|2(?:27|9[26])|(?:30|59|7\\\\d)\\\\d)|6(?:2(?:1[5-9]|2[0367]|38|41|52|60)|(?:3[79]|9[0-3])\\\\d|4(?:56|83)|7(?:[07]\\\\d|1[017]|3[07]|4[047]|5[057]|67|8[0178]|9[79]))|7(?:2(?:24|3[237]|4[5-9]|7[15-8])|5(?:7[12]|8[0589])|7(?:0\\\\d|[39][07])|9(?:0\\\\d|7[079])))|7(?:[07]\\\\d{3}|2(?:2(?:2[79]|95)|3(?:2[5-9]|6[0-6])|57\\\\d|7(?:0\\\\d|1[17]|2[27]|3[37]|44|5[057]|66|88))|3(?:2(?:1[0-6]|21|3[469]|7[159])|(?:33|9[4-6])\\\\d|5(?:0[0-4]|5[579]|9\\\\d)|7(?:[0-3579]\\\\d|4[0467]|6[67]|8[078]))|4(?:2(?:29|5[0257]|6[0-7]|7[1-57])|5(?:1[0-4]|8\\\\d|9[5-9])|7(?:0\\\\d|1[024589]|2[0-27]|3[0137]|[46][07]|5[01]|7[5-9]|9[079])|9(?:7[015-9]|[89]\\\\d))|5(?:112|2(?:0\\\\d|2[29]|[49]4)|3[1568]\\\\d|52[6-9]|7(?:0[01578]|1[017]|[23]7|4[047]|[5-7]\\\\d|8[78]|9[079]))|9(?:22[128]|3(?:2[0-4]|7\\\\d)|57[02569]|7(?:2[05-9]|3[37]|4\\\\d|60|7[2579]|87|9[07]))))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"912345678\"\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"UZ\", 998, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[235-9]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    VA: [, [, , \"0\\\\d{5,10}|3[0-8]\\\\d{7,10}|55\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?|(?:1\\\\d|39)\\\\d{7,8}\", , , , , , , [6, 7, 8, 9, 10, 11, 12]], [, , \"06698\\\\d{1,6}\", , , , \"0669812345\", , , [6, 7, 8, 9, 10, 11]], [, , \"3[1-9]\\\\d{8}|3[2-9]\\\\d{7}\", , , , \"3123456789\", , , [9, 10]], [\n      ,\n      ,\n      \"80(?:0\\\\d{3}|3)\\\\d{3}\",\n      ,\n      ,\n      ,\n      \"800123456\",\n      ,\n      ,\n      [6, 9]\n    ], [, , \"(?:0878\\\\d{3}|89(?:2\\\\d|3[04]|4(?:[0-4]|[5-9]\\\\d\\\\d)|5[0-4]))\\\\d\\\\d|(?:1(?:44|6[346])|89(?:38|5[5-9]|9))\\\\d{6}\", , , , \"899123456\", , , [6, 8, 9, 10]], [, , \"84(?:[08]\\\\d{3}|[17])\\\\d{3}\", , , , \"848123456\", , , [6, 9]], [, , \"1(?:78\\\\d|99)\\\\d{6}\", , , , \"1781234567\", , , [9, 10]], [, , \"55\\\\d{8}\", , , , \"5512345678\", , , [10]], \"VA\", 39, \"00\", , , , , , , , , , [, , , , , , , , , [-1]], , \"06698\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , \"3[2-8]\\\\d{9,10}\", , , , \"33101234501\", , , [11, 12]]],\n    VC: [\n      ,\n      [, , \"(?:[58]\\\\d\\\\d|784|900)\\\\d{7}\", , , , , , , [10], [7]],\n      [, , \"784(?:266|3(?:6[6-9]|7\\\\d|8[0-6])|4(?:38|5[0-36-8]|8[0-8])|5(?:55|7[0-2]|93)|638|784)\\\\d{4}\", , , , \"7842661234\", , , , [7]],\n      [, , \"784(?:4(?:3[0-5]|5[45]|89|9[0-8])|5(?:2[6-9]|3[0-4])|720)\\\\d{4}\", , , , \"7844301234\", , , , [7]],\n      [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002345678\"],\n      [, , \"900[2-9]\\\\d{6}\", , , , \"9002345678\"],\n      [, , , , , , , , , [-1]],\n      [\n        ,\n        ,\n        \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\",\n        ,\n        ,\n        ,\n        \"5002345678\"\n      ],\n      [, , \"78451[0-2]\\\\d{4}\", , , , \"7845101234\", , , , [7]],\n      \"VC\",\n      1,\n      \"011\",\n      \"1\",\n      ,\n      ,\n      \"([2-7]\\\\d{6})$|1\",\n      \"784$1\",\n      ,\n      ,\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      \"784\",\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    VE: [\n      ,\n      [, , \"[68]00\\\\d{7}|(?:[24]\\\\d|[59]0)\\\\d{8}\", , , , , , , [10], [7]],\n      [, , \"(?:2(?:12|3[457-9]|[467]\\\\d|[58][1-9]|9[1-6])|[4-6]00)\\\\d{7}\", , , , \"2121234567\", , , , [7]],\n      [, , \"4(?:1[24-8]|2[246])\\\\d{7}\", , , , \"4121234567\"],\n      [, , \"800\\\\d{7}\", , , , \"8001234567\"],\n      [, , \"90[01]\\\\d{7}\", , , , \"9001234567\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"VE\",\n      58,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{3})(\\\\d{7})\", \"$1-$2\", [\"[24-689]\"], \"0$1\", \"$CC $1\"]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , \"501\\\\d{7}\", , , , \"5010123456\", , , , [7]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    VG: [, [, , \"(?:284|[58]\\\\d\\\\d|900)\\\\d{7}\", , , , , , , [10], [7]], [, , \"284(?:229|4(?:22|9[45])|774|8(?:52|6[459]))\\\\d{4}\", , , , \"2842291234\", , , , [7]], [, , \"284(?:245|3(?:0[0-3]|4[0-7]|68|9[34])|4(?:4[0-6]|68|9[69])|5(?:4[0-7]|68|9[69]))\\\\d{4}\", , , , \"2843001234\", , , , [7]], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002345678\"], [\n      ,\n      ,\n      \"900[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"9002345678\"\n    ], [, , , , , , , , , [-1]], [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"], [, , , , , , , , , [-1]], \"VG\", 1, \"011\", \"1\", , , \"([2-578]\\\\d{6})$|1\", \"284$1\", , , , , [, , , , , , , , , [-1]], , \"284\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    VI: [, [, , \"[58]\\\\d{9}|(?:34|90)0\\\\d{7}\", , , , , , , [10], [7]], [\n      ,\n      ,\n      \"340(?:2(?:0\\\\d|10|2[06-8]|4[49]|77)|3(?:32|44)|4(?:2[23]|44|7[34]|89)|5(?:1[34]|55)|6(?:2[56]|4[23]|77|9[023])|7(?:1[2-57-9]|2[57]|7\\\\d)|884|998)\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"3406421234\",\n      ,\n      ,\n      ,\n      [7]\n    ], [, , \"340(?:2(?:0\\\\d|10|2[06-8]|4[49]|77)|3(?:32|44)|4(?:2[23]|44|7[34]|89)|5(?:1[34]|55)|6(?:2[56]|4[23]|77|9[023])|7(?:1[2-57-9]|2[57]|7\\\\d)|884|998)\\\\d{4}\", , , , \"3406421234\", , , , [7]], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002345678\"], [, , \"900[2-9]\\\\d{6}\", , , , \"9002345678\"], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"5002345678\"\n    ], [, , , , , , , , , [-1]], \"VI\", 1, \"011\", \"1\", , , \"([2-9]\\\\d{6})$|1\", \"340$1\", , 1, , , [, , , , , , , , , [-1]], , \"340\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    VN: [, [, , \"[12]\\\\d{9}|[135-9]\\\\d{8}|[16]\\\\d{6,7}|7\\\\d{6}\", , , , , , , [7, 8, 9, 10]], [, , \"2(?:0[3-9]|1[0-689]|2[0-25-9]|[38][2-9]|4[2-8]|5[124-9]|6[0-39]|7[0-7]|9[0-4679])\\\\d{7}\", , , , \"2101234567\", , , [10]], [, , \"121[0-3]\\\\d{5}|(?:160|(?:3\\\\d|7[06-9])\\\\d|5(?:[1689]\\\\d|2[238]|59)|8(?:[1-8]\\\\d|9[6-9])|9(?:[0-8]\\\\d|9[013-9]))\\\\d{6}\", , , , \"912345678\", , , [9]], [\n      ,\n      ,\n      \"1800\\\\d{4,6}|12(?:0[13]|28)\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"1800123456\",\n      ,\n      ,\n      [8, 9, 10]\n    ], [, , \"1900\\\\d{4,6}\", , , , \"1900123456\", , , [8, 9, 10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"672\\\\d{6}\", , , , \"672012345\", , , [9]], \"VN\", 84, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[17]99\"], \"0$1\", , 1], [, \"(\\\\d{3})(\\\\d{4,5})\", \"$1 $2\", [\"69\"], \"0$1\", , 1], [, \"(\\\\d{4})(\\\\d{4,6})\", \"$1 $2\", [\"1(?:2[02]|[89])\"], , , 1], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"1[26]|6\"], \"0$1\", , 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[357-9]\"], \"0$1\", , 1], [\n      ,\n      \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\"2[48]\"],\n      \"0$1\",\n      ,\n      1\n    ], [, \"(\\\\d{3})(\\\\d{4})(\\\\d{3})\", \"$1 $2 $3\", [\"2\"], \"0$1\", , 1]], [[, \"(\\\\d{4})(\\\\d{4,6})\", \"$1 $2\", [\"1(?:2[02]|[89])\"], , , 1], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"1[26]|6\"], \"0$1\", , 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[357-9]\"], \"0$1\", , 1], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"2[48]\"], \"0$1\", , 1], [, \"(\\\\d{3})(\\\\d{4})(\\\\d{3})\", \"$1 $2 $3\", [\"2\"], \"0$1\", , 1]], [, , , , , , , , , [-1]], , , [, , \"[17]99\\\\d{4}|69\\\\d{5,6}\", , , , , , , [7, 8]], [, , \"[17]99\\\\d{4}|69\\\\d{5,6}\", , , , \"1992000\", , , [7, 8]], , , [, , , , , , , , , [-1]]],\n    VU: [, [, , \"[57-9]\\\\d{6}|(?:[238]\\\\d|48)\\\\d{3}\", , , , , , , [5, 7]], [, , \"(?:38[0-8]|48[4-9])\\\\d\\\\d|(?:2[02-9]|3[4-7]|88)\\\\d{3}\", , , , \"22123\", , , [5]], [, , \"(?:[58]\\\\d|7[0-7])\\\\d{5}\", , , , \"5912345\", , , [7]], [, , \"81[18]\\\\d\\\\d\", , , , \"81123\", , , [5]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"9(?:0[1-9]|1[01])\\\\d{4}\", , , , \"9010123\", , , [7]], \"VU\", 678, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[57-9]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"(?:3[03]|900\\\\d)\\\\d{3}\", , , , \"30123\"], , , [, , , , , , , , , [-1]]],\n    WF: [, [\n      ,\n      ,\n      \"(?:40|72|8\\\\d{4})\\\\d{4}|[89]\\\\d{5}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [6, 9]\n    ], [, , \"72\\\\d{4}\", , , , \"721234\", , , [6]], [, , \"(?:72|8[23])\\\\d{4}\", , , , \"821234\", , , [6]], [, , \"80[0-5]\\\\d{6}\", , , , \"800012345\", , , [9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"9[23]\\\\d{4}\", , , , \"921234\", , , [6]], \"WF\", 681, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3\", [\"[47-9]\"]], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"8\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , \"[48]0\\\\d{4}\", , , , \"401234\", , , [6]]],\n    WS: [, [, , \"(?:[2-6]|8\\\\d{5})\\\\d{4}|[78]\\\\d{6}|[68]\\\\d{5}\", , , , , , , [\n      5,\n      6,\n      7,\n      10\n    ]], [, , \"6[1-9]\\\\d{3}|(?:[2-5]|60)\\\\d{4}\", , , , \"22123\", , , [5, 6]], [, , \"(?:7[1-35-8]|8(?:[3-7]|9\\\\d{3}))\\\\d{5}\", , , , \"7212345\", , , [7, 10]], [, , \"800\\\\d{3}\", , , , \"800123\", , , [6]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"WS\", 685, \"0\", , , , , , , , [[, \"(\\\\d{5})\", \"$1\", [\"[2-5]|6[1-9]\"]], [, \"(\\\\d{3})(\\\\d{3,7})\", \"$1 $2\", [\"[68]\"]], [, \"(\\\\d{2})(\\\\d{5})\", \"$1 $2\", [\"7\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    XK: [, [, , \"2\\\\d{7,8}|3\\\\d{7,11}|(?:4\\\\d\\\\d|[89]00)\\\\d{5}\", , , , , , , [\n      8,\n      9,\n      10,\n      11,\n      12\n    ]], [, , \"38\\\\d{6,10}|(?:2[89]|39)(?:0\\\\d{5,6}|[1-9]\\\\d{5})\", , , , \"28012345\"], [, , \"4[3-9]\\\\d{6}\", , , , \"43201234\", , , [8]], [, , \"800\\\\d{5}\", , , , \"80001234\", , , [8]], [, , \"900\\\\d{5}\", , , , \"90001234\", , , [8]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"XK\", 383, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{5})\", \"$1 $2\", [\"[89]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[2-4]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"2|39\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{7,10})\", \"$1 $2\", [\"3\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    YE: [, [, , \"(?:1|7\\\\d)\\\\d{7}|[1-7]\\\\d{6}\", , , , , , , [7, 8, 9], [6]], [, , \"78[0-7]\\\\d{4}|17\\\\d{6}|(?:[12][2-68]|3[2358]|4[2-58]|5[2-6]|6[3-58]|7[24-6])\\\\d{5}\", , , , \"1234567\", , , [7, 8], [6]], [, , \"7[01378]\\\\d{7}\", , , , \"712345678\", , , [9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"YE\", 967, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[1-6]|7(?:[24-6]|8[0-7])\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"7\"], \"0$1\"]], , [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    YT: [, [, , \"(?:639\\\\d|7093)\\\\d{5}|(?:26|80|9\\\\d)\\\\d{7}\", , , , , , , [9]], [, , \"26(?:89\\\\d|9(?:0[0-467]|15|5[0-4]|6\\\\d|[78]0))\\\\d{4}\", , , , \"269601234\"], [, , \"(?:639(?:0[0-79]|1[019]|[267]\\\\d|3[09]|40|5[05-9]|9[04-79])|7093[5-7])\\\\d{4}\", , , , \"639012345\"], [, , \"80\\\\d{7}\", , , , \"801234567\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"9(?:(?:39|47)8[01]|769\\\\d)\\\\d{4}\", , , , \"939801234\"], \"YT\", 262, \"00\", \"0\", , , \"0\", , , , , , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], , , [, , , , , , , , , [-1]]],\n    ZA: [, [, , \"[1-79]\\\\d{8}|8\\\\d{4,9}\", , , , , , , [5, 6, 7, 8, 9, 10]], [, , \"(?:2(?:0330|4302)|52087)0\\\\d{3}|(?:1[0-8]|2[1-378]|3[1-69]|4\\\\d|5[1346-8])\\\\d{7}\", , , , \"101234567\", , , [9]], [, , \"(?:1(?:3492[0-25]|4495[0235]|549(?:20|5[01]))|4[34]492[01])\\\\d{3}|8[1-4]\\\\d{3,7}|(?:2[27]|47|54)4950\\\\d{3}|(?:1(?:049[2-4]|9[12]\\\\d\\\\d)|(?:50[0-2]|[67]\\\\d\\\\d)\\\\d\\\\d|8(?:5\\\\d{3}|7(?:08[67]|158|28[5-9]|310)))\\\\d{4}|(?:1[6-8]|28|3[2-69]|4[025689]|5[36-8])4920\\\\d{3}|(?:12|[2-5]1)492\\\\d{4}\", , , , \"711234567\", , , [\n      5,\n      6,\n      7,\n      8,\n      9\n    ]], [, , \"80\\\\d{7}\", , , , \"801234567\", , , [9]], [, , \"(?:86[2-9]|9[0-2]\\\\d)\\\\d{6}\", , , , \"862345678\", , , [9]], [, , \"860\\\\d{6}\", , , , \"860123456\", , , [9]], [, , , , , , , , , [-1]], [, , \"87(?:08[0-589]|15[0-79]|28[0-4]|31[1-9])\\\\d{4}|87(?:[02][0-79]|1[0-46-9]|3[02-9]|[4-9]\\\\d)\\\\d{5}\", , , , \"871234567\", , , [9]], \"ZA\", 27, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{3,4})\", \"$1 $2\", [\"8[1-4]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\", \"$1 $2 $3\", [\"8[1-4]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"860\"], \"0$1\"], [\n      ,\n      \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\"[1-9]\"],\n      \"0$1\"\n    ], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"8\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"861\\\\d{6,7}\", , , , \"861123456\", , , [9, 10]], , , [, , , , , , , , , [-1]]],\n    ZM: [, [, , \"800\\\\d{6}|(?:21|[579]\\\\d|63)\\\\d{7}\", , , , , , , [9], [6]], [, , \"21[1-8]\\\\d{6}\", , , , \"211234567\", , , , [6]], [, , \"(?:[59][5-8]|7[5-9])\\\\d{7}\", , , , \"955123456\"], [, , \"800\\\\d{6}\", , , , \"800123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"63\\\\d{7}\", , , , \"630123456\"], \"ZM\", 260, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{3})\", \"$1 $2\", [\"[1-9]\"]], [\n      ,\n      \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\n      \"$1 $2 $3\",\n      [\"[28]\"],\n      \"0$1\"\n    ], [, \"(\\\\d{2})(\\\\d{7})\", \"$1 $2\", [\"[579]\"], \"0$1\"]], [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[28]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{7})\", \"$1 $2\", [\"[579]\"], \"0$1\"]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    ZW: [, [, , \"2(?:[0-57-9]\\\\d{6,8}|6[0-24-9]\\\\d{6,7})|[38]\\\\d{9}|[35-8]\\\\d{8}|[3-6]\\\\d{7}|[1-689]\\\\d{6}|[1-3569]\\\\d{5}|[1356]\\\\d{4}\", , , , , , , [5, 6, 7, 8, 9, 10], [3, 4]], [\n      ,\n      ,\n      \"(?:1(?:(?:3\\\\d|9)\\\\d|[4-8])|2(?:(?:(?:0(?:2[014]|5)|(?:2[0157]|31|84|9)\\\\d\\\\d|[56](?:[14]\\\\d\\\\d|20)|7(?:[089]|2[03]|[35]\\\\d\\\\d))\\\\d|4(?:2\\\\d\\\\d|8))\\\\d|1(?:2|[39]\\\\d{4}))|3(?:(?:123|(?:29\\\\d|92)\\\\d)\\\\d\\\\d|7(?:[19]|[56]\\\\d))|5(?:0|1[2-478]|26|[37]2|4(?:2\\\\d{3}|83)|5(?:25\\\\d\\\\d|[78])|[689]\\\\d)|6(?:(?:[16-8]21|28|52[013])\\\\d\\\\d|[39])|8(?:[1349]28|523)\\\\d\\\\d)\\\\d{3}|(?:4\\\\d\\\\d|9[2-9])\\\\d{4,5}|(?:(?:2(?:(?:(?:0|8[146])\\\\d|7[1-7])\\\\d|2(?:[278]\\\\d|92)|58(?:2\\\\d|3))|3(?:[26]|9\\\\d{3})|5(?:4\\\\d|5)\\\\d\\\\d)\\\\d|6(?:(?:(?:[0-246]|[78]\\\\d)\\\\d|37)\\\\d|5[2-8]))\\\\d\\\\d|(?:2(?:[569]\\\\d|8[2-57-9])|3(?:[013-59]\\\\d|8[37])|6[89]8)\\\\d{3}\",\n      ,\n      ,\n      ,\n      \"1312345\",\n      ,\n      ,\n      ,\n      [3, 4]\n    ], [, , \"7(?:[1278]\\\\d|3[1-9]|9[01])\\\\d{6}\", , , , \"712345678\", , , [9]], [, , \"80(?:[01]\\\\d|20|8[0-8])\\\\d{3}\", , , , \"8001234\", , , [7]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"86(?:1[12]|22|30|44|55|77|8[368])\\\\d{6}\", , , , \"8686123456\", , , [10]], \"ZW\", 263, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{3,5})\", \"$1 $2\", [\"2(?:0[45]|2[278]|[49]8)|3(?:[09]8|17)|6(?:[29]8|37|75)|[23][78]|(?:33|5[15]|6[68])[78]\"], \"0$1\"], [, \"(\\\\d)(\\\\d{3})(\\\\d{2,4})\", \"$1 $2 $3\", [\"[49]\"], \"0$1\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{4})\",\n      \"$1 $2\",\n      [\"80\"],\n      \"0$1\"\n    ], [, \"(\\\\d{2})(\\\\d{7})\", \"$1 $2\", [\"24|8[13-59]|(?:2[05-79]|39|5[45]|6[15-8])2\", \"2(?:02[014]|4|[56]20|[79]2)|392|5(?:42|525)|6(?:[16-8]21|52[013])|8[13-59]\"], \"(0$1)\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"7\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"2(?:1[39]|2[0157]|[378]|[56][14])|3(?:12|29)\", \"2(?:1[39]|2[0157]|[378]|[56][14])|3(?:123|29)\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{6})\", \"$1 $2\", [\"8\"], \"0$1\"], [\n      ,\n      \"(\\\\d{2})(\\\\d{3,5})\",\n      \"$1 $2\",\n      [\"1|2(?:0[0-36-9]|12|29|[56])|3(?:1[0-689]|[24-6])|5(?:[0236-9]|1[2-4])|6(?:[013-59]|7[0-46-9])|(?:33|55|6[68])[0-69]|(?:29|3[09]|62)[0-79]\"],\n      \"0$1\"\n    ], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"29[013-9]|39|54\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{3,5})\", \"$1 $2\", [\"(?:25|54)8\", \"258|5483\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    800: [\n      ,\n      [, , \"(?:00|[1-9]\\\\d)\\\\d{6}\", , , , , , , [8]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , \"(?:00|[1-9]\\\\d)\\\\d{6}\", , , , \"12345678\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"001\",\n      800,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      1,\n      [[, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"\\\\d\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    808: [, [, , \"[1-9]\\\\d{7}\", , , , , , , [8]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"[1-9]\\\\d{7}\", , , , \"12345678\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"001\", 808, , , , , , , , 1, [[, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[1-9]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    870: [, [, , \"7\\\\d{11}|[235-7]\\\\d{8}\", , , , , , , [9, 12]], [, , , , , , , , , [-1]], [, , \"(?:[356]|774[45])\\\\d{8}|7[6-8]\\\\d{7}\", , , , \"301234567\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"2\\\\d{8}\",\n      ,\n      ,\n      ,\n      \"201234567\",\n      ,\n      ,\n      [9]\n    ], \"001\", 870, , , , , , , , , [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[235-7]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    878: [, [, , \"10\\\\d{10}\", , , , , , , [12]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"10\\\\d{10}\", , , , \"101234567890\"], \"001\", 878, , , , , , , , 1, [[, \"(\\\\d{2})(\\\\d{5})(\\\\d{5})\", \"$1 $2 $3\", [\"1\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    881: [, [\n      ,\n      ,\n      \"6\\\\d{9}|[0-36-9]\\\\d{8}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [9, 10]\n    ], [, , , , , , , , , [-1]], [, , \"6\\\\d{9}|[0-36-9]\\\\d{8}\", , , , \"612345678\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"001\", 881, , , , , , , , , [[, \"(\\\\d)(\\\\d{3})(\\\\d{5})\", \"$1 $2 $3\", [\"[0-37-9]\"]], [, \"(\\\\d)(\\\\d{3})(\\\\d{5,6})\", \"$1 $2 $3\", [\"6\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    882: [, [, , \"[13]\\\\d{6}(?:\\\\d{2,5})?|[19]\\\\d{7}|(?:[25]\\\\d\\\\d|4)\\\\d{7}(?:\\\\d{2})?\", , , , , , , [7, 8, 9, 10, 11, 12]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"342\\\\d{4}|(?:337|49)\\\\d{6}|(?:3(?:2|47|7\\\\d{3})|5(?:0\\\\d{3}|2[0-2]))\\\\d{7}\",\n      ,\n      ,\n      ,\n      \"3421234\",\n      ,\n      ,\n      [7, 8, 9, 10, 12]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"1(?:3(?:0[0347]|[13][0139]|2[035]|4[013568]|6[0459]|7[06]|8[15-8]|9[0689])\\\\d{4}|6\\\\d{5,10})|(?:345\\\\d|9[89])\\\\d{6}|(?:10|2(?:3|85\\\\d)|3(?:[15]|[69]\\\\d\\\\d)|4[15-8]|51)\\\\d{8}\", , , , \"390123456789\"], \"001\", 882, , , , , , , , , [[, \"(\\\\d{2})(\\\\d{5})\", \"$1 $2\", [\"16|342\"]], [, \"(\\\\d{2})(\\\\d{6})\", \"$1 $2\", [\"49\"]], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{4})\", \"$1 $2 $3\", [\"1[36]|9\"]], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{3})\", \"$1 $2 $3\", [\"3[23]\"]], [\n      ,\n      \"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\"16\"]\n    ], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"10|23|3(?:[15]|4[57])|4|5[12]\"]], [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"34\"]], [, \"(\\\\d{2})(\\\\d{4,5})(\\\\d{5})\", \"$1 $2 $3\", [\"[1-35]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , \"348[57]\\\\d{7}\", , , , \"34851234567\", , , [11]]],\n    883: [, [, , \"(?:[1-4]\\\\d|51)\\\\d{6,10}\", , , , , , , [8, 9, 10, 11, 12]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"(?:2(?:00\\\\d\\\\d|10)|(?:370[1-9]|51\\\\d0)\\\\d)\\\\d{7}|51(?:00\\\\d{5}|[24-9]0\\\\d{4,7})|(?:1[0-79]|2[24-689]|3[02-689]|4[0-4])0\\\\d{5,9}\",\n      ,\n      ,\n      ,\n      \"510012345\"\n    ], \"001\", 883, , , , , , , , 1, [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{2,8})\", \"$1 $2 $3\", [\"[14]|2[24-689]|3[02-689]|51[24-9]\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"510\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"21\"]], [, \"(\\\\d{4})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"51[13]\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"[235]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    888: [, [, , \"\\\\d{11}\", , , , , , , [11]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"001\", 888, , , , , , , , 1, [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{5})\", \"$1 $2 $3\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"\\\\d{11}\", , , , \"12345678901\"], , , [, , , , , , , , , [-1]]],\n    979: [, [, , \"[1359]\\\\d{8}\", , , , , , , [9], [8]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"[1359]\\\\d{8}\", , , , \"123456789\", , , , [8]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"001\", 979, , , , , , , , 1, [[, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"[1359]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]]\n  };\n  function J() {\n    this.g = {};\n  }\n  J.h = void 0;\n  J.g = function() {\n    return J.h ? J.h : J.h = new J();\n  };\n  var Fa = { 0: \"0\", 1: \"1\", 2: \"2\", 3: \"3\", 4: \"4\", 5: \"5\", 6: \"6\", 7: \"7\", 8: \"8\", 9: \"9\", \"\\uFF10\": \"0\", \"\\uFF11\": \"1\", \"\\uFF12\": \"2\", \"\\uFF13\": \"3\", \"\\uFF14\": \"4\", \"\\uFF15\": \"5\", \"\\uFF16\": \"6\", \"\\uFF17\": \"7\", \"\\uFF18\": \"8\", \"\\uFF19\": \"9\", \"\\u0660\": \"0\", \"\\u0661\": \"1\", \"\\u0662\": \"2\", \"\\u0663\": \"3\", \"\\u0664\": \"4\", \"\\u0665\": \"5\", \"\\u0666\": \"6\", \"\\u0667\": \"7\", \"\\u0668\": \"8\", \"\\u0669\": \"9\", \"\\u06F0\": \"0\", \"\\u06F1\": \"1\", \"\\u06F2\": \"2\", \"\\u06F3\": \"3\", \"\\u06F4\": \"4\", \"\\u06F5\": \"5\", \"\\u06F6\": \"6\", \"\\u06F7\": \"7\", \"\\u06F8\": \"8\", \"\\u06F9\": \"9\" }, Ga = {\n    0: \"0\",\n    1: \"1\",\n    2: \"2\",\n    3: \"3\",\n    4: \"4\",\n    5: \"5\",\n    6: \"6\",\n    7: \"7\",\n    8: \"8\",\n    9: \"9\",\n    \"+\": \"+\",\n    \"*\": \"*\",\n    \"#\": \"#\"\n  }, Ha = {\n    0: \"0\",\n    1: \"1\",\n    2: \"2\",\n    3: \"3\",\n    4: \"4\",\n    5: \"5\",\n    6: \"6\",\n    7: \"7\",\n    8: \"8\",\n    9: \"9\",\n    \"\\uFF10\": \"0\",\n    \"\\uFF11\": \"1\",\n    \"\\uFF12\": \"2\",\n    \"\\uFF13\": \"3\",\n    \"\\uFF14\": \"4\",\n    \"\\uFF15\": \"5\",\n    \"\\uFF16\": \"6\",\n    \"\\uFF17\": \"7\",\n    \"\\uFF18\": \"8\",\n    \"\\uFF19\": \"9\",\n    \"\\u0660\": \"0\",\n    \"\\u0661\": \"1\",\n    \"\\u0662\": \"2\",\n    \"\\u0663\": \"3\",\n    \"\\u0664\": \"4\",\n    \"\\u0665\": \"5\",\n    \"\\u0666\": \"6\",\n    \"\\u0667\": \"7\",\n    \"\\u0668\": \"8\",\n    \"\\u0669\": \"9\",\n    \"\\u06F0\": \"0\",\n    \"\\u06F1\": \"1\",\n    \"\\u06F2\": \"2\",\n    \"\\u06F3\": \"3\",\n    \"\\u06F4\": \"4\",\n    \"\\u06F5\": \"5\",\n    \"\\u06F6\": \"6\",\n    \"\\u06F7\": \"7\",\n    \"\\u06F8\": \"8\",\n    \"\\u06F9\": \"9\",\n    A: \"2\",\n    B: \"2\",\n    C: \"2\",\n    D: \"3\",\n    E: \"3\",\n    F: \"3\",\n    G: \"4\",\n    H: \"4\",\n    I: \"4\",\n    J: \"5\",\n    K: \"5\",\n    L: \"5\",\n    M: \"6\",\n    N: \"6\",\n    O: \"6\",\n    P: \"7\",\n    Q: \"7\",\n    R: \"7\",\n    S: \"7\",\n    T: \"8\",\n    U: \"8\",\n    V: \"8\",\n    W: \"9\",\n    X: \"9\",\n    Y: \"9\",\n    Z: \"9\"\n  }, Ia = RegExp(\"[+\\uFF0B]+\"), K = RegExp(\"^[+\\uFF0B]+\"), Ja = RegExp(\"([0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9])\"), Ka = RegExp(\"[+\\uFF0B0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9]\"), La = /[\\\\\\/] *x/, Ma = RegExp(\"[^0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9A-Za-z#]+$\"), Na = /(?:.*?[A-Za-z]){3}.*/, Oa = RegExp(\"^\\\\+([0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9]|[\\\\-\\\\.\\\\(\\\\)]?)*[0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9]([0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9]|[\\\\-\\\\.\\\\(\\\\)]?)*$\"), Pa = RegExp(\"^([A-Za-z0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9]+((\\\\-)*[A-Za-z0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9])*\\\\.)*[A-Za-z]+((\\\\-)*[A-Za-z0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9])*\\\\.?$\");\n  function L(a) {\n    return \"([0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9]{1,\" + a + \"})\";\n  }\n  function Qa() {\n    return \";ext=\" + L(\"20\") + \"|[ \\xA0\\\\t,]*(?:e?xt(?:ensi(?:o\\u0301?|\\xF3))?n?|\\uFF45?\\uFF58\\uFF54\\uFF4E?|\\u0434\\u043E\\u0431|anexo)[:\\\\.\\uFF0E]?[ \\xA0\\\\t,-]*\" + (L(\"20\") + \"#?|[ \\xA0\\\\t,]*(?:[x\\uFF58#\\uFF03~\\uFF5E]|int|\\uFF49\\uFF4E\\uFF54)[:\\\\.\\uFF0E]?[ \\xA0\\\\t,-]*\") + (L(\"9\") + \"#?|[- ]+\") + (L(\"6\") + \"#|[ \\xA0\\\\t]*(?:,{2}|;)[:\\\\.\\uFF0E]?[ \\xA0\\\\t,-]*\") + (L(\"15\") + \"#?|[ \\xA0\\\\t]*(?:,)+[:\\\\.\\uFF0E]?[ \\xA0\\\\t,-]*\") + (L(\"9\") + \"#?\");\n  }\n  var Ra = new RegExp(\"(?:\" + Qa() + \")$\", \"i\"), Sa = new RegExp(\"^[0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9]{2}$|^[+\\uFF0B]*(?:[-x\\u2010-\\u2015\\u2212\\u30FC\\uFF0D-\\uFF0F \\xA0\\xAD\\u200B\\u2060\\u3000()\\uFF08\\uFF09\\uFF3B\\uFF3D.\\\\[\\\\]/~\\u2053\\u223C\\uFF5E*]*[0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9]){3,}[-x\\u2010-\\u2015\\u2212\\u30FC\\uFF0D-\\uFF0F \\xA0\\xAD\\u200B\\u2060\\u3000()\\uFF08\\uFF09\\uFF3B\\uFF3D.\\\\[\\\\]/~\\u2053\\u223C\\uFF5E*A-Za-z0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9]*(?:\" + Qa() + \")?$\", \"i\"), Ta = /(\\$\\d)/, Ua = /^\\(?\\$1\\)?$/;\n  function Va(a) {\n    return a.length < 2 ? false : M(Sa, a);\n  }\n  function Wa(a) {\n    return M(Na, a) ? N(a, Ha) : N(a, Fa);\n  }\n  function Xa(a) {\n    var b = Wa(a.toString());\n    C(a);\n    a.g(b);\n  }\n  function Ya(a) {\n    return a != null && (w(a, 9) != 1 || F(a)[0] != -1);\n  }\n  function N(a, b) {\n    for (var c = new B(), d, e = a.length, f = 0; f < e; ++f) d = a.charAt(f), d = b[d.toUpperCase()], d != null && c.g(d);\n    return c.toString();\n  }\n  function Za(a) {\n    return a.length == 0 || Ua.test(a);\n  }\n  function O(a) {\n    return a != null && isNaN(a) && a.toUpperCase() in Ea;\n  }\n  J.prototype.format = function(a, b) {\n    if (r(a, 2) == 0 && q(a, 5)) {\n      var c = v(a, 5);\n      if (c.length > 0 && q(a, 1) && r(a, 6) == 20 && b == 0) return a = v(a, 1), $a(a, b, c, \"\");\n      if (c.length > 0 || !q(a, 1)) return c;\n    }\n    c = v(a, 1);\n    var d = P(a);\n    if (b == 0) return $a(c, 0, d, \"\");\n    if (!(c in I)) return d;\n    var e = Q(this, c, R(c));\n    a = q(a, 3) && r(a, 3).length != 0 ? b == 3 ? \";ext=\" + r(a, 3) : q(e, 13) ? r(e, 13) + v(a, 3) : \" ext. \" + v(a, 3) : \"\";\n    a: {\n      e = (u(e, 20) || []).length == 0 || b == 2 ? u(e, 19) || [] : u(e, 20) || [];\n      for (var f, g = e.length, h = 0; h < g; ++h) {\n        f = e[h];\n        var l = w(f, 3);\n        if (l == 0 || d.search(r(f, 3, l - 1)) == 0) {\n          if (l = new RegExp(r(\n            f,\n            1\n          )), M(l, d)) {\n            e = f;\n            break a;\n          }\n        }\n      }\n      e = null;\n    }\n    e != null && (g = e, e = v(g, 2), f = new RegExp(r(g, 1)), v(g, 5), g = v(g, 4), d = b == 2 && g != null && g.length > 0 ? d.replace(f, e.replace(Ta, g)) : d.replace(f, e), b == 3 && (d = d.replace(RegExp(\"^[-x\\u2010-\\u2015\\u2212\\u30FC\\uFF0D-\\uFF0F \\xA0\\xAD\\u200B\\u2060\\u3000()\\uFF08\\uFF09\\uFF3B\\uFF3D.\\\\[\\\\]/~\\u2053\\u223C\\uFF5E]+\"), \"\"), d = d.replace(RegExp(\"[-x\\u2010-\\u2015\\u2212\\u30FC\\uFF0D-\\uFF0F \\xA0\\xAD\\u200B\\u2060\\u3000()\\uFF08\\uFF09\\uFF3B\\uFF3D.\\\\[\\\\]/~\\u2053\\u223C\\uFF5E]+\", \"g\"), \"-\")));\n    return $a(\n      c,\n      b,\n      d,\n      a\n    );\n  };\n  function Q(a, b, c) {\n    return \"001\" == c ? S(a, \"\" + b) : S(a, c);\n  }\n  function P(a) {\n    if (!q(a, 2)) return \"\";\n    var b = \"\" + r(a, 2);\n    return q(a, 4) && r(a, 4) && v(a, 8) > 0 ? Array(v(a, 8) + 1).join(\"0\") + b : b;\n  }\n  function $a(a, b, c, d) {\n    switch (b) {\n      case 0:\n        return \"+\" + a + c + d;\n      case 1:\n        return \"+\" + a + \" \" + c + d;\n      case 3:\n        return \"tel:+\" + a + \"-\" + c + d;\n      default:\n        return c + d;\n    }\n  }\n  function T(a, b) {\n    switch (b) {\n      case 4:\n        return r(a, 5);\n      case 3:\n        return r(a, 4);\n      case 1:\n        return r(a, 3);\n      case 0:\n      case 2:\n        return r(a, 2);\n      case 5:\n        return r(a, 6);\n      case 6:\n        return r(a, 8);\n      case 7:\n        return r(a, 7);\n      case 8:\n        return r(a, 21);\n      case 9:\n        return r(a, 25);\n      case 10:\n        return r(a, 28);\n      default:\n        return r(a, 1);\n    }\n  }\n  function ab(a, b) {\n    var c = bb(a, b);\n    a = Q(a, v(b, 1), c);\n    if (a == null) return -1;\n    b = P(b);\n    return cb(b, a);\n  }\n  function cb(a, b) {\n    return U(a, r(b, 1)) ? U(a, r(b, 5)) ? 4 : U(a, r(b, 4)) ? 3 : U(a, r(b, 6)) ? 5 : U(a, r(b, 8)) ? 6 : U(a, r(b, 7)) ? 7 : U(a, r(b, 21)) ? 8 : U(a, r(b, 25)) ? 9 : U(a, r(b, 28)) ? 10 : U(a, r(b, 2)) ? r(b, 18) || U(a, r(b, 3)) ? 2 : 0 : !r(b, 18) && U(a, r(b, 3)) ? 1 : -1 : -1;\n  }\n  function S(a, b) {\n    if (b == null) return null;\n    b = b.toUpperCase();\n    var c = a.g[b];\n    if (c == null) {\n      c = Ea[b];\n      if (c == null) return null;\n      c = new z().g(G.m(), c);\n      a.g[b] = c;\n    }\n    return c;\n  }\n  function U(a, b) {\n    var c = a.length;\n    return w(b, 9) > 0 && F(b).indexOf(c) == -1 ? false : M(v(b, 2), a);\n  }\n  function db(a, b) {\n    var c = bb(a, b);\n    var d = v(b, 1);\n    var e = Q(a, d, c);\n    e == null || \"001\" != c && d != eb(a, c) ? e = false : (a = P(b), e = cb(a, e) != -1);\n    return e;\n  }\n  function bb(a, b) {\n    if (b == null) return null;\n    var c = v(b, 1);\n    c = I[c];\n    if (c == null) a = null;\n    else if (c.length == 1) a = c[0];\n    else a: {\n      b = P(b);\n      for (var d, e = c.length, f = 0; f < e; f++) {\n        d = c[f];\n        var g = S(a, d);\n        if (q(g, 23)) {\n          if (b.search(r(g, 23)) == 0) {\n            a = d;\n            break a;\n          }\n        } else if (cb(b, g) != -1) {\n          a = d;\n          break a;\n        }\n      }\n      a = null;\n    }\n    return a;\n  }\n  function R(a) {\n    a = I[a];\n    return a == null ? \"ZZ\" : a[0];\n  }\n  function eb(a, b) {\n    a = S(a, b);\n    if (a == null) throw Error(\"Invalid region code: \" + b);\n    return v(a, 10);\n  }\n  function V(a, b, c, d) {\n    var e = T(c, d), f = w(e, 9) == 0 ? F(r(c, 1)) : F(e);\n    e = u(e, 10) || [];\n    if (d == 2) if (Ya(T(c, 0))) a = T(c, 1), Ya(a) && (f = f.concat(w(a, 9) == 0 ? F(r(c, 1)) : F(a)), f.sort(), e.length == 0 ? e = u(a, 10) || [] : (e = e.concat(u(a, 10) || []), e.sort()));\n    else return V(a, b, c, 1);\n    if (f[0] == -1) return 5;\n    b = b.length;\n    if (e.indexOf(b) > -1) return 4;\n    c = f[0];\n    return c == b ? 0 : c > b ? 2 : f[f.length - 1] < b ? 3 : f.indexOf(b, 1) > -1 ? 0 : 5;\n  }\n  function W(a, b, c) {\n    var d = P(b);\n    b = v(b, 1);\n    if (!(b in I)) return 1;\n    b = Q(a, b, R(b));\n    return V(a, d, b, c);\n  }\n  function fb(a, b) {\n    a = a.toString();\n    if (a.length == 0 || a.charAt(0) == \"0\") return 0;\n    for (var c, d = a.length, e = 1; e <= 3 && e <= d; ++e) if (c = parseInt(a.substring(0, e), 10), c in I) return b.g(a.substring(e)), c;\n    return 0;\n  }\n  function gb(a, b, c, d, e, f) {\n    if (b.length == 0) return 0;\n    b = new B(b);\n    var g;\n    c != null && (g = r(c, 11));\n    g == null && (g = \"NonMatch\");\n    var h = b.toString();\n    if (h.length == 0) g = 20;\n    else if (K.test(h)) h = h.replace(K, \"\"), C(b), b.g(Wa(h)), g = 1;\n    else {\n      h = new RegExp(g);\n      Xa(b);\n      g = b.toString();\n      if (g.search(h) == 0) {\n        h = g.match(h)[0].length;\n        var l = g.substring(h).match(Ja);\n        l && l[1] != null && l[1].length > 0 && N(l[1], Fa) == \"0\" ? g = false : (C(b), b.g(g.substring(h)), g = true);\n      } else g = false;\n      g = g ? 5 : 20;\n    }\n    e && t(f, 6, g);\n    if (g != 20) {\n      if (b.h.length <= 2) throw Error(\"Phone number too short after IDD\");\n      a = fb(b, d);\n      if (a != 0) return t(f, 1, a), a;\n      throw Error(\"Invalid country calling code\");\n    }\n    if (c != null && (g = v(c, 10), h = \"\" + g, l = b.toString(), l.lastIndexOf(h, 0) == 0 && (h = new B(l.substring(h.length)), l = r(c, 1), l = new RegExp(v(l, 2)), hb(h, c, null), h = h.toString(), !M(l, b.toString()) && M(l, h) || V(a, b.toString(), c, -1) == 3))) return d.g(h), e && t(f, 6, 10), t(f, 1, g), g;\n    t(f, 1, 0);\n    return 0;\n  }\n  function hb(a, b, c) {\n    var d = a.toString(), e = d.length, f = r(b, 15);\n    if (e != 0 && f != null && f.length != 0 && (f = new RegExp(\"^(?:\" + f + \")\"), e = f.exec(d))) {\n      var g = RegExp;\n      var h = r(b, 1);\n      h = v(h, 2);\n      g = new g(h);\n      h = M(g, d);\n      var l = e.length - 1;\n      b = r(b, 16);\n      if (b == null || b.length == 0 || e[l] == null || e[l].length == 0) {\n        if (!h || M(g, d.substring(e[0].length))) c != null && l > 0 && e[l] != null && c.g(e[1]), a.set(d.substring(e[0].length));\n      } else if (d = d.replace(f, b), !h || M(g, d)) c != null && l > 0 && c.g(e[1]), a.set(d);\n    }\n  }\n  function X(a, b, c) {\n    if (!O(c) && b.length > 0 && b.charAt(0) != \"+\") throw Error(\"Invalid country calling code\");\n    return ib(a, b, c, true);\n  }\n  function ib(a, b, c, d) {\n    if (b == null) throw Error(\"The string supplied did not seem to be a phone number\");\n    if (b.length > 250) throw Error(\"The string supplied is too long to be a phone number\");\n    var e = new B();\n    var f = b.indexOf(\";phone-context=\");\n    if (f === -1) f = null;\n    else if (f += 15, f >= b.length) f = \"\";\n    else {\n      var g = b.indexOf(\";\", f);\n      f = g !== -1 ? b.substring(f, g) : b.substring(f);\n    }\n    var h = f;\n    h == null ? g = true : h.length === 0 ? g = false : (g = Oa.exec(h), h = Pa.exec(h), g = g !== null || h !== null);\n    if (!g) throw Error(\"The string supplied did not seem to be a phone number\");\n    f != null ? (f.charAt(0) === \"+\" && e.g(f), f = b.indexOf(\"tel:\"), e.g(b.substring(f >= 0 ? f + 4 : 0, b.indexOf(\";phone-context=\")))) : (f = e.g, g = b ?? \"\", h = g.search(Ka), h >= 0 ? (g = g.substring(h), g = g.replace(Ma, \"\"), h = g.search(La), h >= 0 && (g = g.substring(0, h))) : g = \"\", f.call(e, g));\n    f = e.toString();\n    g = f.indexOf(\";isub=\");\n    g > 0 && (C(e), e.g(f.substring(0, g)));\n    if (!Va(e.toString())) throw Error(\"The string supplied did not seem to be a phone number\");\n    f = e.toString();\n    if (!(O(c) || f != null && f.length > 0 && K.test(f))) throw Error(\"Invalid country calling code\");\n    f = new H();\n    d && t(f, 5, b);\n    a: {\n      b = e.toString();\n      g = b.search(Ra);\n      if (g >= 0 && Va(b.substring(0, g))) {\n        h = b.match(Ra);\n        for (var l = h.length, A = 1; A < l; ++A) if (h[A] != null && h[A].length > 0) {\n          C(e);\n          e.g(b.substring(0, g));\n          b = h[A];\n          break a;\n        }\n      }\n      b = \"\";\n    }\n    b.length > 0 && t(f, 3, b);\n    g = S(a, c);\n    b = new B();\n    h = 0;\n    l = e.toString();\n    try {\n      h = gb(a, l, g, b, d, f);\n    } catch (ea) {\n      if (ea.message == \"Invalid country calling code\" && K.test(l)) {\n        if (l = l.replace(K, \"\"), h = gb(a, l, g, b, d, f), h == 0) throw ea;\n      } else throw ea;\n    }\n    h != 0 ? (e = R(h), e != c && (g = Q(a, h, e))) : (Xa(e), b.g(e.toString()), c != null ? (h = v(g, 10), t(\n      f,\n      1,\n      h\n    )) : d && (delete f.h[6], f.g && delete f.g[6]));\n    if (b.h.length < 2) throw Error(\"The string supplied is too short to be a phone number\");\n    g != null && (c = new B(), e = new B(b.toString()), hb(e, g, c), a = V(a, e.toString(), g, -1), a != 2 && a != 4 && a != 5 && (b = e, d && c.toString().length > 0 && t(f, 7, c.toString())));\n    d = b.toString();\n    a = d.length;\n    if (a < 2) throw Error(\"The string supplied is too short to be a phone number\");\n    if (a > 17) throw Error(\"The string supplied is too long to be a phone number\");\n    if (d.length > 1 && d.charAt(0) == \"0\") {\n      t(f, 4, true);\n      for (a = 1; a < d.length - 1 && d.charAt(a) == \"0\"; ) a++;\n      a != 1 && t(f, 8, a);\n    }\n    t(f, 2, parseInt(d, 10));\n    return f;\n  }\n  function M(a, b) {\n    return (a = b.match(new RegExp(\"^(?:\" + (typeof a == \"string\" ? a : a.source) + \")$\", \"i\"))) && a[0].length == b.length ? true : false;\n  }\n  ;\n  function jb(a) {\n    this.ga = RegExp(\"\\u2008\");\n    this.ka = \"\";\n    this.$ = new B();\n    this.ea = \"\";\n    this.u = new B();\n    this.da = new B();\n    this.v = true;\n    this.fa = this.aa = this.ma = false;\n    this.ha = J.g();\n    this.ba = 0;\n    this.h = new B();\n    this.ia = false;\n    this.o = \"\";\n    this.g = new B();\n    this.j = [];\n    this.la = a;\n    this.l = kb(this, this.la);\n  }\n  var lb = new G();\n  t(lb, 11, \"NA\");\n  var mb = RegExp(\"^[-x\\u2010-\\u2015\\u2212\\u30FC\\uFF0D-\\uFF0F \\xA0\\xAD\\u200B\\u2060\\u3000()\\uFF08\\uFF09\\uFF3B\\uFF3D.\\\\[\\\\]/~\\u2053\\u223C\\uFF5E]*\\\\$1[-x\\u2010-\\u2015\\u2212\\u30FC\\uFF0D-\\uFF0F \\xA0\\xAD\\u200B\\u2060\\u3000()\\uFF08\\uFF09\\uFF3B\\uFF3D.\\\\[\\\\]/~\\u2053\\u223C\\uFF5E]*(\\\\$\\\\d[-x\\u2010-\\u2015\\u2212\\u30FC\\uFF0D-\\uFF0F \\xA0\\xAD\\u200B\\u2060\\u3000()\\uFF08\\uFF09\\uFF3B\\uFF3D.\\\\[\\\\]/~\\u2053\\u223C\\uFF5E]*)*$\"), nb = /[- ]/;\n  function kb(a, b) {\n    var c = a.ha;\n    b = O(b) ? eb(c, b) : 0;\n    a = S(a.ha, R(b));\n    return a != null ? a : lb;\n  }\n  function ob(a) {\n    for (var b = a.j.length, c = 0; c < b; ++c) {\n      var d = a.j[c], e = v(d, 1);\n      if (a.ea == e) return false;\n      var f = a;\n      var g = d, h = v(g, 1);\n      C(f.$);\n      var l = f;\n      g = v(g, 2);\n      var A = \"999999999999999\".match(h)[0];\n      A.length < l.g.h.length ? l = \"\" : (l = A.replace(new RegExp(h, \"g\"), g), l = l.replace(RegExp(\"9\", \"g\"), \"\\u2008\"));\n      l.length > 0 ? (f.$.g(l), f = true) : f = false;\n      if (f) return a.ea = e, a.ia = nb.test(r(d, 4)), a.ba = 0, true;\n    }\n    return a.v = false;\n  }\n  function pb(a, b) {\n    for (var c = [], d = b.length - 3, e = a.j.length, f = 0; f < e; ++f) {\n      var g = a.j[f];\n      w(g, 3) == 0 ? c.push(a.j[f]) : (g = r(g, 3, Math.min(d, w(g, 3) - 1)), b.search(g) == 0 && c.push(a.j[f]));\n    }\n    a.j = c;\n  }\n  function qb(a, b) {\n    a.u.g(b);\n    var c = b;\n    Ja.test(c) || a.u.h.length == 1 && Ia.test(c) ? (b == \"+\" ? (c = b, a.da.g(b)) : (c = Fa[b], a.da.g(c), a.g.g(c)), b = c) : (a.v = false, a.ma = true);\n    if (!a.v) {\n      if (!a.ma) {\n        if (rb(a)) {\n          if (sb(a)) return tb(a);\n        } else if (a.o.length > 0 && (b = a.g.toString(), C(a.g), a.g.g(a.o), a.g.g(b), b = a.h.toString(), c = b.lastIndexOf(a.o), C(a.h), a.h.g(b.substring(0, c))), a.o != ub(a)) return a.h.g(\" \"), tb(a);\n      }\n      return a.u.toString();\n    }\n    switch (a.da.h.length) {\n      case 0:\n      case 1:\n      case 2:\n        return a.u.toString();\n      case 3:\n        if (rb(a)) a.fa = true;\n        else return a.o = ub(a), vb(a);\n      default:\n        if (a.fa) return sb(a) && (a.fa = false), a.h.toString() + a.g.toString();\n        if (a.j.length > 0) {\n          b = wb(a, b);\n          c = xb(a);\n          if (c.length > 0) return c;\n          pb(a, a.g.toString());\n          return ob(a) ? yb(a) : a.v ? Y(a, b) : a.u.toString();\n        }\n        return vb(a);\n    }\n  }\n  function tb(a) {\n    a.v = true;\n    a.fa = false;\n    a.j = [];\n    a.ba = 0;\n    C(a.$);\n    a.ea = \"\";\n    return vb(a);\n  }\n  function xb(a) {\n    for (var b = a.g.toString(), c = a.j.length, d = 0; d < c; ++d) {\n      var e = a.j[d], f = v(e, 1);\n      if (new RegExp(\"^(?:\" + f + \")$\").test(b) && (a.ia = nb.test(r(e, 4)), e = b.replace(new RegExp(f, \"g\"), r(e, 2)), e = Y(a, e), N(e, Ga) == a.da)) return e;\n    }\n    return \"\";\n  }\n  function Y(a, b) {\n    var c = a.h.h.length;\n    return a.ia && c > 0 && a.h.toString().charAt(c - 1) != \" \" ? a.h + \" \" + b : a.h + b;\n  }\n  function vb(a) {\n    var b = a.g.toString();\n    if (b.length >= 3) {\n      for (var c = a.aa && a.o.length == 0 && w(a.l, 20) > 0 ? u(a.l, 20) || [] : u(a.l, 19) || [], d = c.length, e = 0; e < d; ++e) {\n        var f = c[e];\n        a.o.length > 0 && Za(v(f, 4)) && !r(f, 6) && !q(f, 5) || (a.o.length != 0 || a.aa || Za(v(f, 4)) || r(f, 6)) && mb.test(v(f, 2)) && a.j.push(f);\n      }\n      pb(a, b);\n      b = xb(a);\n      return b.length > 0 ? b : ob(a) ? yb(a) : a.u.toString();\n    }\n    return Y(a, b);\n  }\n  function yb(a) {\n    var b = a.g.toString(), c = b.length;\n    if (c > 0) {\n      for (var d = \"\", e = 0; e < c; e++) d = wb(a, b.charAt(e));\n      return a.v ? Y(a, d) : a.u.toString();\n    }\n    return a.h.toString();\n  }\n  function ub(a) {\n    var b = a.g.toString(), c = 0;\n    if (r(a.l, 10) != 1) var d = false;\n    else d = a.g.toString(), d = d.charAt(0) == \"1\" && d.charAt(1) != \"0\" && d.charAt(1) != \"1\";\n    d ? (c = 1, a.h.g(\"1\").g(\" \"), a.aa = true) : q(a.l, 15) && (d = new RegExp(\"^(?:\" + r(a.l, 15) + \")\"), d = b.match(d), d != null && d[0] != null && d[0].length > 0 && (a.aa = true, c = d[0].length, a.h.g(b.substring(0, c))));\n    C(a.g);\n    a.g.g(b.substring(c));\n    return b.substring(0, c);\n  }\n  function rb(a) {\n    var b = a.da.toString(), c = new RegExp(\"^(?:\\\\+|\" + r(a.l, 11) + \")\");\n    c = b.match(c);\n    return c != null && c[0] != null && c[0].length > 0 ? (a.aa = true, c = c[0].length, C(a.g), a.g.g(b.substring(c)), C(a.h), a.h.g(b.substring(0, c)), b.charAt(0) != \"+\" && a.h.g(\" \"), true) : false;\n  }\n  function sb(a) {\n    if (a.g.h.length == 0) return false;\n    var b = new B(), c = fb(a.g, b);\n    if (c == 0) return false;\n    C(a.g);\n    a.g.g(b.toString());\n    b = R(c);\n    \"001\" == b ? a.l = S(a.ha, \"\" + c) : b != a.la && (a.l = kb(a, b));\n    a.h.g(\"\" + c).g(\" \");\n    a.o = \"\";\n    return true;\n  }\n  function wb(a, b) {\n    var c = a.$.toString();\n    if (c.substring(a.ba).search(a.ga) >= 0) {\n      var d = c.search(a.ga);\n      b = c.replace(a.ga, b);\n      C(a.$);\n      a.$.g(b);\n      a.ba = d;\n      return b.substring(0, a.ba + 1);\n    }\n    a.j.length == 1 && (a.v = false);\n    a.ea = \"\";\n    return a.u.toString();\n  }\n  ;\n  const zb = {};\n  [\"E164\", \"INTERNATIONAL\", \"NATIONAL\", \"RFC3966\"].forEach((a, b) => {\n    zb[a] = b;\n  });\n  const Z = {};\n  \"FIXED_LINE MOBILE FIXED_LINE_OR_MOBILE TOLL_FREE PREMIUM_RATE SHARED_COST VOIP PERSONAL_NUMBER PAGER UAN VOICEMAIL UNKNOWN\".split(\" \").forEach((a, b) => {\n    Z[a] = b;\n  });\n  Z.UNKNOWN = -1;\n  const Ab = {};\n  \"IS_POSSIBLE INVALID_COUNTRY_CODE TOO_SHORT TOO_LONG IS_POSSIBLE_LOCAL_ONLY INVALID_LENGTH\".split(\" \").forEach((a, b) => {\n    Ab[a] = b;\n  });\n  const Bb = {};\n  Object.keys(Z).forEach((a) => {\n    Bb[Z[a]] = a;\n  });\n  const Cb = {};\n  Object.keys(Ab).forEach((a) => {\n    Cb[Ab[a]] = a;\n  });\n  const Db = (a) => {\n    const b = [];\n    a.includes(\"FIXED_LINE_OR_MOBILE\") ? (a.includes(\"MOBILE\") || b.push(\"MOBILE\"), a.includes(\"FIXED_LINE\") || b.push(\"FIXED_LINE\")) : (a.includes(\"MOBILE\") || a.includes(\"FIXED_LINE\")) && b.push(\"FIXED_LINE_OR_MOBILE\");\n    return a.concat(b);\n  };\n  m(\"utils\", {});\n  m(\"utils.formatNumberAsYouType\", (a, b) => {\n    try {\n      const c = a.replace(/[^+0-9]/g, \"\"), d = new jb(b);\n      b = \"\";\n      for (let e = 0; e < c.length; e++) d.ka = qb(d, c.charAt(e)), b = d.ka;\n      return b;\n    } catch {\n      return a;\n    }\n  });\n  m(\"utils.formatNumber\", (a, b, c) => {\n    try {\n      const e = J.g(), f = X(e, a, b);\n      var d = W(e, f, -1);\n      return d == 0 || d == 4 ? e.format(f, typeof c === \"undefined\" ? 0 : zb[c]) : a;\n    } catch {\n      return a;\n    }\n  });\n  m(\"utils.getExampleNumber\", (a, b, c) => {\n    try {\n      const l = J.g();\n      a: {\n        var d = l, e = Z[b];\n        if (O(a)) {\n          var f = T(S(d, a), e);\n          try {\n            if (q(f, 6)) {\n              var g = r(f, 6);\n              var h = ib(d, g, a, false);\n              break a;\n            }\n          } catch (A) {\n          }\n        }\n        h = null;\n      }\n      return l.format(h, zb[c]);\n    } catch {\n      return \"\";\n    }\n  });\n  m(\"utils.getExtension\", (a, b) => {\n    try {\n      var c = X(J.g(), a, b);\n      return r(c, 3);\n    } catch {\n      return \"\";\n    }\n  });\n  m(\"utils.getNumberType\", (a, b) => {\n    try {\n      const c = J.g(), d = X(c, a, b), e = ab(c, d);\n      return Bb[e] || null;\n    } catch {\n      return null;\n    }\n  });\n  m(\"utils.getValidationError\", (a, b) => {\n    if (!b) return \"INVALID_COUNTRY_CODE\";\n    try {\n      const c = J.g(), d = X(c, a, b), e = W(c, d, -1);\n      return Cb[e] || null;\n    } catch (c) {\n      return c.message === \"Invalid country calling code\" ? \"INVALID_COUNTRY_CODE\" : a.length <= 3 || c.message === \"Phone number too short after IDD\" || c.message === \"The string supplied is too short to be a phone number\" ? \"TOO_SHORT\" : c.message === \"The string supplied is too long to be a phone number\" ? \"TOO_LONG\" : null;\n    }\n  });\n  m(\"utils.isValidNumber\", (a, b, c) => {\n    try {\n      const d = J.g(), e = X(d, a, b);\n      if (c) {\n        const f = Db(c);\n        for (let g of f) if (W(d, e, Z[g]) === 0) return true;\n        return false;\n      }\n      return W(d, e, -1) === 0;\n    } catch {\n      return false;\n    }\n  });\n  m(\"utils.isValidNumberPrecise\", (a, b, c) => {\n    try {\n      const d = J.g(), e = X(d, a, b), f = db(d, e);\n      if (c) {\n        const g = Db(c).map((h) => Z[h]);\n        return f && g.includes(ab(d, e));\n      }\n      return f;\n    } catch {\n      return false;\n    }\n  });\n  m(\"utils.getCoreNumber\", (a, b) => {\n    try {\n      var c = X(J.g(), a, b);\n      return r(c, 2).toString();\n    } catch {\n      return \"\";\n    }\n  });\n}).call(_scope);\nvar utils_default = _scope.utils;\n\n// packages/core/src/js/intlTelInputWithUtils.ts\nintlTelInput_default.utils = utils_default;\nvar intlTelInputWithUtils_default = intlTelInput_default;\nexport {\n  intlTelInputWithUtils_default as default\n};\n", "import { Controller } from \"@hotwired/stimulus\"\nimport intlTelInput from 'intl-tel-input/intlTelInputWithUtils'\n\n// Connects to data-controller=\"admin--contact-id-translations\"\nexport default class extends Controller {\n  static values = {\n    clientCountry: String,\n    webServType: String,\n  }\n  static targets = [\n    \"phone\", \"primaryAnswerPoint\", \"secondaryAnswerPoint\", \"controlRoomContactPhone\",\n    \"controlRoomAdminPhone\", \"contactOneOfficePhone\", \"contactOneMobilePhone\",\n    \"contactTwoOfficePhone\", \"contactTwoMobilePhone\",\n    \"contactThreeOfficePhone\", \"contactThreeMobilePhone\",\n    \"contactFourOfficePhone\", \"contactFourMobilePhone\",\n    \"phoneInput\", \"primaryAnswerPointInput\", \"secondaryAnswerPointInput\", \"controlRoomContactPhoneInput\",\n    \"controlRoomAdminPhoneInput\", \"contactOneOfficePhoneInput\", \"contactOneMobilePhoneInput\",\n    \"contactTwoOfficePhoneInput\", \"contactTwoMobilePhoneInput\",\n    \"contactThreeOfficePhoneInput\", \"contactThreeMobilePhoneInput\",\n    \"contactFourOfficePhoneInput\", \"contactFourMobilePhoneInput\"\n  ]\n  onlyCountries = [\n    \"au\", \"nz\", \"it\", \"gr\"\n  ]\n\n  connect() {\n    if (this.hasPhoneTarget) {\n      this.phoneTargetInput = intlTelInput(this.phoneTarget, {\n        initialCountry: this.clientCountryValue,\n        onlyCountries: this.onlyCountries,\n        placeholderNumberType: 'FIXED_LINE',\n        allowDropdown: true,\n      })\n    }\n    if (this.hasPrimaryAnswerPointTargetInputTarget) {\n      this.primaryAnswerPointTargetInput = intlTelInput(this.primaryAnswerPointTarget, {\n        initialCountry: this.clientCountryValue,\n        onlyCountries: this.onlyCountries,\n        placeholderNumberType: 'FIXED_LINE_OR_MOBILE',\n        allowDropdown: true,\n      })\n    }\n    if (this.hasSecondaryAnswerPointTargetInputTarget) {\n      this.secondaryAnswerPointTargetInput = intlTelInput(this.secondaryAnswerPointTarget, {\n        initialCountry: this.clientCountryValue,\n        onlyCountries: this.onlyCountries,\n        placeholderNumberType: 'FIXED_LINE_OR_MOBILE',\n        allowDropdown: true,\n      })\n    }\n    this.controlRoomContactPhoneTargetInput = intlTelInput(this.controlRoomContactPhoneTarget, {\n      initialCountry: this.clientCountryValue,\n      onlyCountries: this.onlyCountries,\n      placeholderNumberType: 'FIXED_LINE_OR_MOBILE',\n      allowDropdown: true,\n    })\n    this.controlRoomAdminPhoneTargetInput = intlTelInput(this.controlRoomAdminPhoneTarget, {\n      initialCountry: this.clientCountryValue,\n      onlyCountries: this.onlyCountries,\n      placeholderNumberType: 'FIXED_LINE_OR_MOBILE',\n      allowDropdown: true,\n    })\n    this.contactOneOfficePhoneTargetInput = intlTelInput(this.contactOneOfficePhoneTarget, {\n      initialCountry: this.clientCountryValue,\n      onlyCountries: this.onlyCountries,\n      placeholderNumberType: 'FIXED_LINE_OR_MOBILE',\n      allowDropdown: true,\n    })\n    this.contactOneMobilePhoneTargetInput = intlTelInput(this.contactOneMobilePhoneTarget, {\n      initialCountry: this.clientCountryValue,\n      onlyCountries: this.onlyCountries,\n      placeholderNumberType: 'FIXED_LINE_OR_MOBILE',\n      allowDropdown: true,\n    })\n    this.contactTwoOfficePhoneTargetInput = intlTelInput(this.contactTwoOfficePhoneTarget, {\n      initialCountry: this.clientCountryValue,\n      onlyCountries: this.onlyCountries,\n      placeholderNumberType: 'FIXED_LINE_OR_MOBILE',\n      allowDropdown: true,\n    })\n    this.contactTwoMobilePhoneTargetInput = intlTelInput(this.contactTwoMobilePhoneTarget, {\n      initialCountry: this.clientCountryValue,\n      onlyCountries: this.onlyCountries,\n      placeholderNumberType: 'FIXED_LINE_OR_MOBILE',\n      allowDropdown: true,\n    })\n    this.contactThreeOfficePhoneTargetInput = intlTelInput(this.contactThreeOfficePhoneTarget, {\n      initialCountry: this.clientCountryValue,\n      onlyCountries: this.onlyCountries,\n      placeholderNumberType: 'FIXED_LINE_OR_MOBILE',\n      allowDropdown: true,\n    })\n    this.contactThreeMobilePhoneTargetInput = intlTelInput(this.contactThreeMobilePhoneTarget, {\n      initialCountry: this.clientCountryValue,\n      onlyCountries: this.onlyCountries,\n      placeholderNumberType: 'FIXED_LINE_OR_MOBILE',\n      allowDropdown: true,\n    })\n    this.contactFourOfficePhoneTargetInput = intlTelInput(this.contactFourOfficePhoneTarget, {\n      initialCountry: this.clientCountryValue,\n      onlyCountries: this.onlyCountries,\n      placeholderNumberType: 'FIXED_LINE_OR_MOBILE',\n      allowDropdown: true,\n    })\n    this.contactFourMobilePhoneTargetInput = intlTelInput(this.contactFourMobilePhoneTarget, {\n      initialCountry: this.clientCountryValue,\n      onlyCountries: this.onlyCountries,\n      placeholderNumberType: 'FIXED_LINE_OR_MOBILE',\n      allowDropdown: true,\n    })\n  }\n\n  markAsGood(target) {\n    target.classList.remove('bg-unverified')\n    target.classList.add('bg-verified')\n  }\n\n  markAsBad(target) {\n    target.classList.remove('bg-verified')\n    target.classList.add('bg-unverified')\n  }\n\n  validatePhoneTarget(event) {\n    if (this.phoneTargetInput.isValidNumber() && this.validateBaseStationTranslationNumber(this.phoneTargetInput.getNumber())) {\n      this.markAsGood(this.phoneTarget)\n      this.phoneInputTarget.value = this.phoneTargetInput.getNumber()\n    } else {\n      this.markAsBad(this.phoneTarget)\n      this.phoneInputTarget.value = ''\n    }\n  }\n\n  validatePrimaryAnswerPointTarget(event) {\n    if (this.primaryAnswerPointTargetInput.isValidNumber() && this.validateBaseStationAnswerPointNumber(this.primaryAnswerPointTargetInput.getNumber())) {\n      this.markAsGood(this.primaryAnswerPointTarget)\n      this.primaryAnswerPointInputTarget.value = this.primaryAnswerPointTargetInput.getNumber()\n    } else {\n      this.markAsBad(this.primaryAnswerPointTarget)\n      this.primaryAnswerPointInputTarget.value = ''\n    }\n  }\n\n  validateSecondaryAnswerPointTarget(event) {\n    if (this.secondaryAnswerPointTargetInput.isValidNumber() && this.validateBaseStationAnswerPointNumber(this.secondaryAnswerPointTargetInput.getNumber())) {\n      this.markAsGood(this.secondaryAnswerPointTarget)\n      this.secondaryAnswerPointInputTarget.value = this.secondaryAnswerPointTargetInput.getNumber()\n    } else {\n      this.markAsBad(this.secondaryAnswerPointTarget)\n      this.secondaryAnswerPointInputTarget.value = ''\n    }\n  }\n\n  validateStandardPhoneOrMobile(input, target, outputTarget) {\n    if (input.isValidNumber()) {\n      this.markAsGood(target)\n      outputTarget.value = input.getNumber()\n    } else {\n      this.markAsBad(target)\n      outputTarget.value = ''\n    }\n  }\n\n  validateControlRoomContactPhoneTarget(event) {\n    this.validateStandardPhoneOrMobile(this.controlRoomContactPhoneTargetInput, this.controlRoomContactPhoneTarget, this.controlRoomContactPhoneInputTarget)\n  }\n\n  validateControlRoomAdminPhoneTarget(event) {\n    this.validateStandardPhoneOrMobile(this.controlRoomAdminPhoneTargetInput, this.controlRoomAdminPhoneTarget, this.controlRoomAdminPhoneInputTarget)\n  }\n\n  validateContactOneOfficePhoneTarget(event) {\n    this.validateStandardPhoneOrMobile(this.contactOneOfficePhoneTargetInput, this.contactOneOfficePhoneTarget, this.contactOneOfficePhoneInputTarget)\n  }\n\n  validateContactOneMobilePhoneTarget(event) {\n    this.validateStandardPhoneOrMobile(this.contactOneMobilePhoneTargetInput, this.contactOneMobilePhoneTarget, this.contactOneMobilePhoneInputTarget)\n  }\n\n  validateContactTwoOfficePhoneTarget(event) {\n    this.validateStandardPhoneOrMobile(this.contactTwoOfficePhoneTargetInput, this.contactTwoOfficePhoneTarget, this.contactTwoOfficePhoneInputTarget)\n  }\n\n  validateContactTwoMobilePhoneTarget(event) {\n    this.validateStandardPhoneOrMobile(this.contactTwoMobilePhoneTargetInput, this.contactTwoMobilePhoneTarget, this.contactTwoMobilePhoneInputTarget)\n  }\n\n  validateContactThreeOfficePhoneTarget(event) {\n    this.validateStandardPhoneOrMobile(this.contactThreeOfficePhoneTargetInput, this.contactThreeOfficePhoneTarget, this.contactThreeOfficePhoneInputTarget)\n  }\n\n  validateContactThreeMobilePhoneTarget(event) {\n    this.validateStandardPhoneOrMobile(this.contactThreeMobilePhoneTargetInput, this.contactThreeMobilePhoneTarget, this.contactThreeMobilePhoneInputTarget)\n  }\n\n  validateContactFourOfficePhoneTarget(event) {\n    this.validateStandardPhoneOrMobile(this.contactFourOfficePhoneTargetInput, this.contactFourOfficePhoneTarget, this.contactFourOfficePhoneInputTarget)\n  }\n\n  validateContactFourMobilePhoneTarget(event) {\n    this.validateStandardPhoneOrMobile(this.contactFourMobilePhoneTargetInput, this.contactFourMobilePhoneTarget, this.contactFourMobilePhoneInputTarget)\n  }\n\n  validateBaseStationTranslationNumber(numberEntry) {\n    var auAreaCodes = ['2', '3', '7', '8'];\n    var i = 0;\n    var len = numberEntry.length;\n    var countryCode = '';\n    var areaCode = '';\n    var phoneNumber = '';\n    var result = false;\n    while (i < len) {\n      if (i < 3 && countryCode.length < 2 && !(i == 0 && numberEntry[i] == '+')) {\n        countryCode = countryCode + numberEntry[i];\n      } else if (countryCode == '61') {\n        if (areaCode.length == 0) {\n          areaCode = areaCode + numberEntry[i];\n        } else {\n          phoneNumber = phoneNumber + numberEntry[i];\n          if (phoneNumber.length == 8 && $.inArray(areaCode, auAreaCodes) > -1) {\n            return true;\n          } else if (phoneNumber.length == 9 && numberEntry[3] == '1' && numberEntry[4] == '3') {\n            return true;\n          } else if (phoneNumber.length == 6 && numberEntry[3] == '1' && numberEntry[4] == '3' && numberEntry[5] == '4' && numberEntry[6] == '5') {\n            return true;\n          } else {\n            result = false;\n          }\n        }\n      }\n      i++;\n    }\n    return result;\n  }\n\n  validateBaseStationAnswerPointNumber(numberEntry) {\n    var auAreaCodes = ['2', '3', '7', '8'];\n    var nzAreaCodes = ['3', '4', '6', '7', '9'];\n    var elAreaCodes = ['21', '22', '23', '24', '25', '26', '27', '28'];\n    var i = 0;\n    var len = numberEntry.length;\n    var countryCode = '';\n    var areaCode = '';\n    var phoneNumber = '';\n    var result = false;\n    while (i < len) {\n      if (i < 3 && countryCode.length < 2 && !(i == 0 && numberEntry[i] == '+')) {\n        countryCode = countryCode + numberEntry[i];\n      } else if (countryCode == '61') {\n        if (areaCode.length == 0) {\n          areaCode = areaCode + numberEntry[i];\n        } else {\n          phoneNumber = phoneNumber + numberEntry[i];\n          if (phoneNumber.length == 8 && $.inArray(areaCode, auAreaCodes) > -1) {\n            if (phoneNumber[0] == '1' && phoneNumber[1] == '3') {\n              return false;\n            } else {\n              return true;\n            }\n          } else {\n            result = false;\n          }\n        }\n      } else if (countryCode == '64') {\n        if (areaCode.length == 0) {\n          areaCode = areaCode + numberEntry[i];\n        } else {\n          phoneNumber = phoneNumber + numberEntry[i];\n          if (phoneNumber.length == 7 && $.inArray(areaCode, nzAreaCodes) > -1) {\n            $('#base_station_number_phoneNumber_out').addClass('bg-verified').removeClass('bg-unverified');\n            return true;\n          } else {\n            result = false;\n          }\n        }\n      } else if (countryCode == '39') {\n        if (areaCode.length < 2) {\n          areaCode = areaCode + numberEntry[i];\n        } else {\n          phoneNumber = phoneNumber + numberEntry[i];\n          if (areaCode.length == 2 && phoneNumber.length >= 5 && phoneNumber.length <= 10) {\n            $('#base_station_number_phoneNumber_out').addClass('bg-verified').removeClass('bg-unverified');\n            result = true;\n          } else {\n            result = false;\n          }\n        }\n      } else if (countryCode == '30') {\n        if (areaCode.length < 2) {\n          areaCode = areaCode + numberEntry[i];\n        } else {\n          phoneNumber = phoneNumber + numberEntry[i];\n          if (areaCode.length == 2 && phoneNumber.length == 8 && $.inArray(areaCode, elAreaCodes) > -1) {\n            $('#base_station_number_phoneNumber_out').addClass('bg-verified').removeClass('bg-unverified');\n            result = true;\n          } else {\n            result = false;\n          }\n        }\n      }\n      i++;\n    }\n    return result;\n  }\n\n  validatePhoneNumber(event) {\n\n  }\n}\n", "/*!\n * @kurkle/color v0.3.2\n * https://github.com/kurkle/color#readme\n * (c) 2023 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n  return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n  return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n  return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n  return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n  return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n  return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n  var len = str.length;\n  var ret;\n  if (str[0] === '#') {\n    if (len === 4 || len === 5) {\n      ret = {\n        r: 255 & map$1[str[1]] * 17,\n        g: 255 & map$1[str[2]] * 17,\n        b: 255 & map$1[str[3]] * 17,\n        a: len === 5 ? map$1[str[4]] * 17 : 255\n      };\n    } else if (len === 7 || len === 9) {\n      ret = {\n        r: map$1[str[1]] << 4 | map$1[str[2]],\n        g: map$1[str[3]] << 4 | map$1[str[4]],\n        b: map$1[str[5]] << 4 | map$1[str[6]],\n        a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n      };\n    }\n  }\n  return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n  var f = isShort(v) ? h1 : h2;\n  return v\n    ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n    : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n  const a = s * Math.min(l, 1 - l);\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n  const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n  return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n  const rgb = hsl2rgbn(h, 1, 0.5);\n  let i;\n  if (w + b > 1) {\n    i = 1 / (w + b);\n    w *= i;\n    b *= i;\n  }\n  for (i = 0; i < 3; i++) {\n    rgb[i] *= 1 - w - b;\n    rgb[i] += w;\n  }\n  return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n  if (r === max) {\n    return ((g - b) / d) + (g < b ? 6 : 0);\n  }\n  if (g === max) {\n    return (b - r) / d + 2;\n  }\n  return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n  const range = 255;\n  const r = v.r / range;\n  const g = v.g / range;\n  const b = v.b / range;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n  let h, s, d;\n  if (max !== min) {\n    d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n    h = hueValue(r, g, b, d, max);\n    h = h * 60 + 0.5;\n  }\n  return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n  return (\n    Array.isArray(a)\n      ? f(a[0], a[1], a[2])\n      : f(a, b, c)\n  ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n  return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n  return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n  return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n  return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n  const m = HUE_RE.exec(str);\n  let a = 255;\n  let v;\n  if (!m) {\n    return;\n  }\n  if (m[5] !== v) {\n    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n  }\n  const h = hue(+m[2]);\n  const p1 = +m[3] / 100;\n  const p2 = +m[4] / 100;\n  if (m[1] === 'hwb') {\n    v = hwb2rgb(h, p1, p2);\n  } else if (m[1] === 'hsv') {\n    v = hsv2rgb(h, p1, p2);\n  } else {\n    v = hsl2rgb(h, p1, p2);\n  }\n  return {\n    r: v[0],\n    g: v[1],\n    b: v[2],\n    a: a\n  };\n}\nfunction rotate(v, deg) {\n  var h = rgb2hsl(v);\n  h[0] = hue(h[0] + deg);\n  h = hsl2rgb(h);\n  v.r = h[0];\n  v.g = h[1];\n  v.b = h[2];\n}\nfunction hslString(v) {\n  if (!v) {\n    return;\n  }\n  const a = rgb2hsl(v);\n  const h = a[0];\n  const s = n2p(a[1]);\n  const l = n2p(a[2]);\n  return v.a < 255\n    ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n    : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n  x: 'dark',\n  Z: 'light',\n  Y: 're',\n  X: 'blu',\n  W: 'gr',\n  V: 'medium',\n  U: 'slate',\n  A: 'ee',\n  T: 'ol',\n  S: 'or',\n  B: 'ra',\n  C: 'lateg',\n  D: 'ights',\n  R: 'in',\n  Q: 'turquois',\n  E: 'hi',\n  P: 'ro',\n  O: 'al',\n  N: 'le',\n  M: 'de',\n  L: 'yello',\n  F: 'en',\n  K: 'ch',\n  G: 'arks',\n  H: 'ea',\n  I: 'ightg',\n  J: 'wh'\n};\nconst names$1 = {\n  OiceXe: 'f0f8ff',\n  antiquewEte: 'faebd7',\n  aqua: 'ffff',\n  aquamarRe: '7fffd4',\n  azuY: 'f0ffff',\n  beige: 'f5f5dc',\n  bisque: 'ffe4c4',\n  black: '0',\n  blanKedOmond: 'ffebcd',\n  Xe: 'ff',\n  XeviTet: '8a2be2',\n  bPwn: 'a52a2a',\n  burlywood: 'deb887',\n  caMtXe: '5f9ea0',\n  KartYuse: '7fff00',\n  KocTate: 'd2691e',\n  cSO: 'ff7f50',\n  cSnflowerXe: '6495ed',\n  cSnsilk: 'fff8dc',\n  crimson: 'dc143c',\n  cyan: 'ffff',\n  xXe: '8b',\n  xcyan: '8b8b',\n  xgTMnPd: 'b8860b',\n  xWay: 'a9a9a9',\n  xgYF: '6400',\n  xgYy: 'a9a9a9',\n  xkhaki: 'bdb76b',\n  xmagFta: '8b008b',\n  xTivegYF: '556b2f',\n  xSange: 'ff8c00',\n  xScEd: '9932cc',\n  xYd: '8b0000',\n  xsOmon: 'e9967a',\n  xsHgYF: '8fbc8f',\n  xUXe: '483d8b',\n  xUWay: '2f4f4f',\n  xUgYy: '2f4f4f',\n  xQe: 'ced1',\n  xviTet: '9400d3',\n  dAppRk: 'ff1493',\n  dApskyXe: 'bfff',\n  dimWay: '696969',\n  dimgYy: '696969',\n  dodgerXe: '1e90ff',\n  fiYbrick: 'b22222',\n  flSOwEte: 'fffaf0',\n  foYstWAn: '228b22',\n  fuKsia: 'ff00ff',\n  gaRsbSo: 'dcdcdc',\n  ghostwEte: 'f8f8ff',\n  gTd: 'ffd700',\n  gTMnPd: 'daa520',\n  Way: '808080',\n  gYF: '8000',\n  gYFLw: 'adff2f',\n  gYy: '808080',\n  honeyMw: 'f0fff0',\n  hotpRk: 'ff69b4',\n  RdianYd: 'cd5c5c',\n  Rdigo: '4b0082',\n  ivSy: 'fffff0',\n  khaki: 'f0e68c',\n  lavFMr: 'e6e6fa',\n  lavFMrXsh: 'fff0f5',\n  lawngYF: '7cfc00',\n  NmoncEffon: 'fffacd',\n  ZXe: 'add8e6',\n  ZcSO: 'f08080',\n  Zcyan: 'e0ffff',\n  ZgTMnPdLw: 'fafad2',\n  ZWay: 'd3d3d3',\n  ZgYF: '90ee90',\n  ZgYy: 'd3d3d3',\n  ZpRk: 'ffb6c1',\n  ZsOmon: 'ffa07a',\n  ZsHgYF: '20b2aa',\n  ZskyXe: '87cefa',\n  ZUWay: '778899',\n  ZUgYy: '778899',\n  ZstAlXe: 'b0c4de',\n  ZLw: 'ffffe0',\n  lime: 'ff00',\n  limegYF: '32cd32',\n  lRF: 'faf0e6',\n  magFta: 'ff00ff',\n  maPon: '800000',\n  VaquamarRe: '66cdaa',\n  VXe: 'cd',\n  VScEd: 'ba55d3',\n  VpurpN: '9370db',\n  VsHgYF: '3cb371',\n  VUXe: '7b68ee',\n  VsprRggYF: 'fa9a',\n  VQe: '48d1cc',\n  VviTetYd: 'c71585',\n  midnightXe: '191970',\n  mRtcYam: 'f5fffa',\n  mistyPse: 'ffe4e1',\n  moccasR: 'ffe4b5',\n  navajowEte: 'ffdead',\n  navy: '80',\n  Tdlace: 'fdf5e6',\n  Tive: '808000',\n  TivedBb: '6b8e23',\n  Sange: 'ffa500',\n  SangeYd: 'ff4500',\n  ScEd: 'da70d6',\n  pOegTMnPd: 'eee8aa',\n  pOegYF: '98fb98',\n  pOeQe: 'afeeee',\n  pOeviTetYd: 'db7093',\n  papayawEp: 'ffefd5',\n  pHKpuff: 'ffdab9',\n  peru: 'cd853f',\n  pRk: 'ffc0cb',\n  plum: 'dda0dd',\n  powMrXe: 'b0e0e6',\n  purpN: '800080',\n  YbeccapurpN: '663399',\n  Yd: 'ff0000',\n  Psybrown: 'bc8f8f',\n  PyOXe: '4169e1',\n  saddNbPwn: '8b4513',\n  sOmon: 'fa8072',\n  sandybPwn: 'f4a460',\n  sHgYF: '2e8b57',\n  sHshell: 'fff5ee',\n  siFna: 'a0522d',\n  silver: 'c0c0c0',\n  skyXe: '87ceeb',\n  UXe: '6a5acd',\n  UWay: '708090',\n  UgYy: '708090',\n  snow: 'fffafa',\n  sprRggYF: 'ff7f',\n  stAlXe: '4682b4',\n  tan: 'd2b48c',\n  teO: '8080',\n  tEstN: 'd8bfd8',\n  tomato: 'ff6347',\n  Qe: '40e0d0',\n  viTet: 'ee82ee',\n  JHt: 'f5deb3',\n  wEte: 'ffffff',\n  wEtesmoke: 'f5f5f5',\n  Lw: 'ffff00',\n  LwgYF: '9acd32'\n};\nfunction unpack() {\n  const unpacked = {};\n  const keys = Object.keys(names$1);\n  const tkeys = Object.keys(map);\n  let i, j, k, ok, nk;\n  for (i = 0; i < keys.length; i++) {\n    ok = nk = keys[i];\n    for (j = 0; j < tkeys.length; j++) {\n      k = tkeys[j];\n      nk = nk.replace(k, map[k]);\n    }\n    k = parseInt(names$1[ok], 16);\n    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n  }\n  return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n  if (!names) {\n    names = unpack();\n    names.transparent = [0, 0, 0, 0];\n  }\n  const a = names[str.toLowerCase()];\n  return a && {\n    r: a[0],\n    g: a[1],\n    b: a[2],\n    a: a.length === 4 ? a[3] : 255\n  };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n  const m = RGB_RE.exec(str);\n  let a = 255;\n  let r, g, b;\n  if (!m) {\n    return;\n  }\n  if (m[7] !== r) {\n    const v = +m[7];\n    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n  }\n  r = +m[1];\n  g = +m[3];\n  b = +m[5];\n  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n  return {\n    r: r,\n    g: g,\n    b: b,\n    a: a\n  };\n}\nfunction rgbString(v) {\n  return v && (\n    v.a < 255\n      ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n      : `rgb(${v.r}, ${v.g}, ${v.b})`\n  );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n  const r = from(b2n(rgb1.r));\n  const g = from(b2n(rgb1.g));\n  const b = from(b2n(rgb1.b));\n  return {\n    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n    a: rgb1.a + t * (rgb2.a - rgb1.a)\n  };\n}\n\nfunction modHSL(v, i, ratio) {\n  if (v) {\n    let tmp = rgb2hsl(v);\n    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n    tmp = hsl2rgb(tmp);\n    v.r = tmp[0];\n    v.g = tmp[1];\n    v.b = tmp[2];\n  }\n}\nfunction clone(v, proto) {\n  return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n  var v = {r: 0, g: 0, b: 0, a: 255};\n  if (Array.isArray(input)) {\n    if (input.length >= 3) {\n      v = {r: input[0], g: input[1], b: input[2], a: 255};\n      if (input.length > 3) {\n        v.a = n2b(input[3]);\n      }\n    }\n  } else {\n    v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n    v.a = n2b(v.a);\n  }\n  return v;\n}\nfunction functionParse(str) {\n  if (str.charAt(0) === 'r') {\n    return rgbParse(str);\n  }\n  return hueParse(str);\n}\nclass Color {\n  constructor(input) {\n    if (input instanceof Color) {\n      return input;\n    }\n    const type = typeof input;\n    let v;\n    if (type === 'object') {\n      v = fromObject(input);\n    } else if (type === 'string') {\n      v = hexParse(input) || nameParse(input) || functionParse(input);\n    }\n    this._rgb = v;\n    this._valid = !!v;\n  }\n  get valid() {\n    return this._valid;\n  }\n  get rgb() {\n    var v = clone(this._rgb);\n    if (v) {\n      v.a = b2n(v.a);\n    }\n    return v;\n  }\n  set rgb(obj) {\n    this._rgb = fromObject(obj);\n  }\n  rgbString() {\n    return this._valid ? rgbString(this._rgb) : undefined;\n  }\n  hexString() {\n    return this._valid ? hexString(this._rgb) : undefined;\n  }\n  hslString() {\n    return this._valid ? hslString(this._rgb) : undefined;\n  }\n  mix(color, weight) {\n    if (color) {\n      const c1 = this.rgb;\n      const c2 = color.rgb;\n      let w2;\n      const p = weight === w2 ? 0.5 : weight;\n      const w = 2 * p - 1;\n      const a = c1.a - c2.a;\n      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n      w2 = 1 - w1;\n      c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n      c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n      c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n      c1.a = p * c1.a + (1 - p) * c2.a;\n      this.rgb = c1;\n    }\n    return this;\n  }\n  interpolate(color, t) {\n    if (color) {\n      this._rgb = interpolate(this._rgb, color._rgb, t);\n    }\n    return this;\n  }\n  clone() {\n    return new Color(this.rgb);\n  }\n  alpha(a) {\n    this._rgb.a = n2b(a);\n    return this;\n  }\n  clearer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 - ratio;\n    return this;\n  }\n  greyscale() {\n    const rgb = this._rgb;\n    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n    rgb.r = rgb.g = rgb.b = val;\n    return this;\n  }\n  opaquer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 + ratio;\n    return this;\n  }\n  negate() {\n    const v = this._rgb;\n    v.r = 255 - v.r;\n    v.g = 255 - v.g;\n    v.b = 255 - v.b;\n    return this;\n  }\n  lighten(ratio) {\n    modHSL(this._rgb, 2, ratio);\n    return this;\n  }\n  darken(ratio) {\n    modHSL(this._rgb, 2, -ratio);\n    return this;\n  }\n  saturate(ratio) {\n    modHSL(this._rgb, 1, ratio);\n    return this;\n  }\n  desaturate(ratio) {\n    modHSL(this._rgb, 1, -ratio);\n    return this;\n  }\n  rotate(deg) {\n    rotate(this._rgb, deg);\n    return this;\n  }\n}\n\nfunction index_esm(input) {\n  return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n", "/**\n * @namespace Chart.helpers\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ActiveDataPoint, ChartEvent} from '../types/index.js';\n\n/**\n * An empty function that can be used, for example, for optional callback.\n */\nexport function noop() {\n  /* noop */\n}\n\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */\nexport const uid = (() => {\n  let id = 0;\n  return () => id++;\n})();\n\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isNullOrUndef(value: unknown): value is null | undefined {\n  return value === null || value === undefined;\n}\n\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */\nexport function isArray<T = unknown>(value: unknown): value is T[] {\n  if (Array.isArray && Array.isArray(value)) {\n    return true;\n  }\n  const type = Object.prototype.toString.call(value);\n  if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n    return true;\n  }\n  return false;\n}\n\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isObject(value: unknown): value is AnyObject {\n  return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value  - The value to test.\n */\nfunction isNumberFinite(value: unknown): value is number {\n  return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\nexport {\n  isNumberFinite as isFinite,\n};\n\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */\nexport function finiteOrDefault(value: unknown, defaultValue: number) {\n  return isNumberFinite(value) ? value : defaultValue;\n}\n\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */\nexport function valueOrDefault<T>(value: T | undefined, defaultValue: T) {\n  return typeof value === 'undefined' ? defaultValue : value;\n}\n\nexport const toPercentage = (value: number | string, dimension: number) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100\n    : +value / dimension;\n\nexport const toDimension = (value: number | string, dimension: number) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100 * dimension\n    : +value;\n\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */\nexport function callback<T extends (this: TA, ...restArgs: unknown[]) => R, TA, R>(\n  fn: T | undefined,\n  args: unknown[],\n  thisArg?: TA\n): R | undefined {\n  if (fn && typeof fn.call === 'function') {\n    return fn.apply(thisArg, args);\n  }\n}\n\n/**\n * Note(SB) for performance sake, this method should only be used when loopable type\n * is unknown or in none intensive code (not called often and small loopable). Else\n * it's preferable to use a regular for() loop and save extra function calls.\n * @param loopable - The object or array to be iterated.\n * @param fn - The function to call for each item.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n * @param [reverse] - If true, iterates backward on the loopable.\n */\nexport function each<T, TA>(\n  loopable: Record<string, T>,\n  fn: (this: TA, v: T, i: string) => void,\n  thisArg?: TA,\n  reverse?: boolean\n): void;\nexport function each<T, TA>(\n  loopable: T[],\n  fn: (this: TA, v: T, i: number) => void,\n  thisArg?: TA,\n  reverse?: boolean\n): void;\nexport function each<T, TA>(\n  loopable: T[] | Record<string, T>,\n  fn: (this: TA, v: T, i: any) => void,\n  thisArg?: TA,\n  reverse?: boolean\n) {\n  let i: number, len: number, keys: string[];\n  if (isArray(loopable)) {\n    len = loopable.length;\n    if (reverse) {\n      for (i = len - 1; i >= 0; i--) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    } else {\n      for (i = 0; i < len; i++) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    }\n  } else if (isObject(loopable)) {\n    keys = Object.keys(loopable);\n    len = keys.length;\n    for (i = 0; i < len; i++) {\n      fn.call(thisArg, loopable[keys[i]], keys[i]);\n    }\n  }\n}\n\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */\nexport function _elementsEqual(a0: ActiveDataPoint[], a1: ActiveDataPoint[]) {\n  let i: number, ilen: number, v0: ActiveDataPoint, v1: ActiveDataPoint;\n\n  if (!a0 || !a1 || a0.length !== a1.length) {\n    return false;\n  }\n\n  for (i = 0, ilen = a0.length; i < ilen; ++i) {\n    v0 = a0[i];\n    v1 = a1[i];\n\n    if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */\nexport function clone<T>(source: T): T {\n  if (isArray(source)) {\n    return source.map(clone) as unknown as T;\n  }\n\n  if (isObject(source)) {\n    const target = Object.create(null);\n    const keys = Object.keys(source);\n    const klen = keys.length;\n    let k = 0;\n\n    for (; k < klen; ++k) {\n      target[keys[k]] = clone(source[keys[k]]);\n    }\n\n    return target;\n  }\n\n  return source;\n}\n\nfunction isValidKey(key: string) {\n  return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\n\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */\nexport function _merger(key: string, target: AnyObject, source: AnyObject, options: AnyObject) {\n  if (!isValidKey(key)) {\n    return;\n  }\n\n  const tval = target[key];\n  const sval = source[key];\n\n  if (isObject(tval) && isObject(sval)) {\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    merge(tval, sval, options);\n  } else {\n    target[key] = clone(sval);\n  }\n}\n\nexport interface MergeOptions {\n  merger?: (key: string, target: AnyObject, source: AnyObject, options?: AnyObject) => void;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` with the given `options`.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @param [options] - Merging options:\n * @param [options.merger] - The merge method (key, target, source, options)\n * @returns The `target` object.\n */\nexport function merge<T>(target: T, source: [], options?: MergeOptions): T;\nexport function merge<T, S1>(target: T, source: S1, options?: MergeOptions): T & S1;\nexport function merge<T, S1>(target: T, source: [S1], options?: MergeOptions): T & S1;\nexport function merge<T, S1, S2>(target: T, source: [S1, S2], options?: MergeOptions): T & S1 & S2;\nexport function merge<T, S1, S2, S3>(target: T, source: [S1, S2, S3], options?: MergeOptions): T & S1 & S2 & S3;\nexport function merge<T, S1, S2, S3, S4>(\n  target: T,\n  source: [S1, S2, S3, S4],\n  options?: MergeOptions\n): T & S1 & S2 & S3 & S4;\nexport function merge<T>(target: T, source: AnyObject[], options?: MergeOptions): AnyObject;\nexport function merge<T>(target: T, source: AnyObject[], options?: MergeOptions): AnyObject {\n  const sources = isArray(source) ? source : [source];\n  const ilen = sources.length;\n\n  if (!isObject(target)) {\n    return target as AnyObject;\n  }\n\n  options = options || {};\n  const merger = options.merger || _merger;\n  let current: AnyObject;\n\n  for (let i = 0; i < ilen; ++i) {\n    current = sources[i];\n    if (!isObject(current)) {\n      continue;\n    }\n\n    const keys = Object.keys(current);\n    for (let k = 0, klen = keys.length; k < klen; ++k) {\n      merger(keys[k], target, current, options as AnyObject);\n    }\n  }\n\n  return target;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` *only* if not defined in target.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @returns The `target` object.\n */\nexport function mergeIf<T>(target: T, source: []): T;\nexport function mergeIf<T, S1>(target: T, source: S1): T & S1;\nexport function mergeIf<T, S1>(target: T, source: [S1]): T & S1;\nexport function mergeIf<T, S1, S2>(target: T, source: [S1, S2]): T & S1 & S2;\nexport function mergeIf<T, S1, S2, S3>(target: T, source: [S1, S2, S3]): T & S1 & S2 & S3;\nexport function mergeIf<T, S1, S2, S3, S4>(target: T, source: [S1, S2, S3, S4]): T & S1 & S2 & S3 & S4;\nexport function mergeIf<T>(target: T, source: AnyObject[]): AnyObject;\nexport function mergeIf<T>(target: T, source: AnyObject[]): AnyObject {\n  // eslint-disable-next-line @typescript-eslint/no-use-before-define\n  return merge<T>(target, source, {merger: _mergerIf});\n}\n\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */\nexport function _mergerIf(key: string, target: AnyObject, source: AnyObject) {\n  if (!isValidKey(key)) {\n    return;\n  }\n\n  const tval = target[key];\n  const sval = source[key];\n\n  if (isObject(tval) && isObject(sval)) {\n    mergeIf(tval, sval);\n  } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n    target[key] = clone(sval);\n  }\n}\n\n/**\n * @private\n */\nexport function _deprecated(scope: string, value: unknown, previous: string, current: string) {\n  if (value !== undefined) {\n    console.warn(scope + ': \"' + previous +\n      '\" is deprecated. Please use \"' + current + '\" instead');\n  }\n}\n\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n  // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n  '': v => v,\n  // default resolvers\n  x: o => o.x,\n  y: o => o.y\n};\n\n/**\n * @private\n */\nexport function _splitKey(key: string) {\n  const parts = key.split('.');\n  const keys: string[] = [];\n  let tmp = '';\n  for (const part of parts) {\n    tmp += part;\n    if (tmp.endsWith('\\\\')) {\n      tmp = tmp.slice(0, -1) + '.';\n    } else {\n      keys.push(tmp);\n      tmp = '';\n    }\n  }\n  return keys;\n}\n\nfunction _getKeyResolver(key: string) {\n  const keys = _splitKey(key);\n  return obj => {\n    for (const k of keys) {\n      if (k === '') {\n        // For backward compatibility:\n        // Chart.helpers.core resolveObjectKey should break at empty key\n        break;\n      }\n      obj = obj && obj[k];\n    }\n    return obj;\n  };\n}\n\nexport function resolveObjectKey(obj: AnyObject, key: string): any {\n  const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n  return resolver(obj);\n}\n\n/**\n * @private\n */\nexport function _capitalize(str: string) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n\nexport const defined = (value: unknown) => typeof value !== 'undefined';\n\nexport const isFunction = (value: unknown): value is (...args: any[]) => any => typeof value === 'function';\n\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nexport const setsEqual = <T>(a: Set<T>, b: Set<T>) => {\n  if (a.size !== b.size) {\n    return false;\n  }\n\n  for (const item of a) {\n    if (!b.has(item)) {\n      return false;\n    }\n  }\n\n  return true;\n};\n\n/**\n * @param e - The event\n * @private\n */\nexport function _isClickEvent(e: ChartEvent) {\n  return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n", "import type {Point} from '../types/geometric.js';\nimport {isFinite as isFiniteNumber} from './helpers.core.js';\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */\n\nexport const PI = Math.PI;\nexport const TAU = 2 * PI;\nexport const PITAU = TAU + PI;\nexport const INFINITY = Number.POSITIVE_INFINITY;\nexport const RAD_PER_DEG = PI / 180;\nexport const HALF_PI = PI / 2;\nexport const QUARTER_PI = PI / 4;\nexport const TWO_THIRDS_PI = PI * 2 / 3;\n\nexport const log10 = Math.log10;\nexport const sign = Math.sign;\n\nexport function almostEquals(x: number, y: number, epsilon: number) {\n  return Math.abs(x - y) < epsilon;\n}\n\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */\nexport function niceNum(range: number) {\n  const roundedRange = Math.round(range);\n  range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n  const niceRange = Math.pow(10, Math.floor(log10(range)));\n  const fraction = range / niceRange;\n  const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n  return niceFraction * niceRange;\n}\n\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */\nexport function _factorize(value: number) {\n  const result: number[] = [];\n  const sqrt = Math.sqrt(value);\n  let i: number;\n\n  for (i = 1; i < sqrt; i++) {\n    if (value % i === 0) {\n      result.push(i);\n      result.push(value / i);\n    }\n  }\n  if (sqrt === (sqrt | 0)) { // if value is a square number\n    result.push(sqrt);\n  }\n\n  result.sort((a, b) => a - b).pop();\n  return result;\n}\n\n/**\n * Verifies that attempting to coerce n to string or number won't throw a TypeError.\n */\nfunction isNonPrimitive(n: unknown) {\n  return typeof n === 'symbol' || (typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n));\n}\n\nexport function isNumber(n: unknown): n is number {\n  return !isNonPrimitive(n) && !isNaN(parseFloat(n as string)) && isFinite(n as number);\n}\n\nexport function almostWhole(x: number, epsilon: number) {\n  const rounded = Math.round(x);\n  return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\n\n/**\n * @private\n */\nexport function _setMinAndMaxByKey(\n  array: Record<string, number>[],\n  target: { min: number, max: number },\n  property: string\n) {\n  let i: number, ilen: number, value: number;\n\n  for (i = 0, ilen = array.length; i < ilen; i++) {\n    value = array[i][property];\n    if (!isNaN(value)) {\n      target.min = Math.min(target.min, value);\n      target.max = Math.max(target.max, value);\n    }\n  }\n}\n\nexport function toRadians(degrees: number) {\n  return degrees * (PI / 180);\n}\n\nexport function toDegrees(radians: number) {\n  return radians * (180 / PI);\n}\n\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */\nexport function _decimalPlaces(x: number) {\n  if (!isFiniteNumber(x)) {\n    return;\n  }\n  let e = 1;\n  let p = 0;\n  while (Math.round(x * e) / e !== x) {\n    e *= 10;\n    p++;\n  }\n  return p;\n}\n\n// Gets the angle from vertical upright to the point about a centre.\nexport function getAngleFromPoint(\n  centrePoint: Point,\n  anglePoint: Point\n) {\n  const distanceFromXCenter = anglePoint.x - centrePoint.x;\n  const distanceFromYCenter = anglePoint.y - centrePoint.y;\n  const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n  let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n  if (angle < (-0.5 * PI)) {\n    angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n  }\n\n  return {\n    angle,\n    distance: radialDistanceFromCenter\n  };\n}\n\nexport function distanceBetweenPoints(pt1: Point, pt2: Point) {\n  return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */\nexport function _angleDiff(a: number, b: number) {\n  return (a - b + PITAU) % TAU - PI;\n}\n\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */\nexport function _normalizeAngle(a: number) {\n  return (a % TAU + TAU) % TAU;\n}\n\n/**\n * @private\n */\nexport function _angleBetween(angle: number, start: number, end: number, sameAngleIsFullCircle?: boolean) {\n  const a = _normalizeAngle(angle);\n  const s = _normalizeAngle(start);\n  const e = _normalizeAngle(end);\n  const angleToStart = _normalizeAngle(s - a);\n  const angleToEnd = _normalizeAngle(e - a);\n  const startToAngle = _normalizeAngle(a - s);\n  const endToAngle = _normalizeAngle(a - e);\n  return a === s || a === e || (sameAngleIsFullCircle && s === e)\n    || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\n\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */\nexport function _limitValue(value: number, min: number, max: number) {\n  return Math.max(min, Math.min(max, value));\n}\n\n/**\n * @param {number} value\n * @private\n */\nexport function _int16Range(value: number) {\n  return _limitValue(value, -32768, 32767);\n}\n\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */\nexport function _isBetween(value: number, start: number, end: number, epsilon = 1e-6) {\n  return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n", "import {_capitalize} from './helpers.core.js';\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param value - value to find\n * @param cmp\n * @private\n */\nexport function _lookup(\n  table: number[],\n  value: number,\n  cmp?: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup<T>(\n  table: T[],\n  value: number,\n  cmp: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup(\n  table: unknown[],\n  value: number,\n  cmp?: (value: number) => boolean\n) {\n  cmp = cmp || ((index) => table[index] < value);\n  let hi = table.length - 1;\n  let lo = 0;\n  let mid: number;\n\n  while (hi - lo > 1) {\n    mid = (lo + hi) >> 1;\n    if (cmp(mid)) {\n      lo = mid;\n    } else {\n      hi = mid;\n    }\n  }\n\n  return {lo, hi};\n}\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */\nexport const _lookupByKey = (\n  table: Record<string, number>[],\n  key: string,\n  value: number,\n  last?: boolean\n) =>\n  _lookup(table, value, last\n    ? index => {\n      const ti = table[index][key];\n      return ti < value || ti === value && table[index + 1][key] === value;\n    }\n    : index => table[index][key] < value);\n\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */\nexport const _rlookupByKey = (\n  table: Record<string, number>[],\n  key: string,\n  value: number\n) =>\n  _lookup(table, value, index => table[index][key] >= value);\n\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */\nexport function _filterBetween(values: number[], min: number, max: number) {\n  let start = 0;\n  let end = values.length;\n\n  while (start < end && values[start] < min) {\n    start++;\n  }\n  while (end > start && values[end - 1] > max) {\n    end--;\n  }\n\n  return start > 0 || end < values.length\n    ? values.slice(start, end)\n    : values;\n}\n\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'] as const;\n\nexport interface ArrayListener<T> {\n  _onDataPush?(...item: T[]): void;\n  _onDataPop?(): void;\n  _onDataShift?(): void;\n  _onDataSplice?(index: number, deleteCount: number, ...items: T[]): void;\n  _onDataUnshift?(...item: T[]): void;\n}\n\n/**\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\n * called on the '_onData*' callbacks (e.g. _onDataPush, etc.) with same arguments.\n */\nexport function listenArrayEvents<T>(array: T[], listener: ArrayListener<T>): void;\nexport function listenArrayEvents(array, listener) {\n  if (array._chartjs) {\n    array._chartjs.listeners.push(listener);\n    return;\n  }\n\n  Object.defineProperty(array, '_chartjs', {\n    configurable: true,\n    enumerable: false,\n    value: {\n      listeners: [listener]\n    }\n  });\n\n  arrayEvents.forEach((key) => {\n    const method = '_onData' + _capitalize(key);\n    const base = array[key];\n\n    Object.defineProperty(array, key, {\n      configurable: true,\n      enumerable: false,\n      value(...args) {\n        const res = base.apply(this, args);\n\n        array._chartjs.listeners.forEach((object) => {\n          if (typeof object[method] === 'function') {\n            object[method](...args);\n          }\n        });\n\n        return res;\n      }\n    });\n  });\n}\n\n\n/**\n * Removes the given array event listener and cleanup extra attached properties (such as\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\n */\nexport function unlistenArrayEvents<T>(array: T[], listener: ArrayListener<T>): void;\nexport function unlistenArrayEvents(array, listener) {\n  const stub = array._chartjs;\n  if (!stub) {\n    return;\n  }\n\n  const listeners = stub.listeners;\n  const index = listeners.indexOf(listener);\n  if (index !== -1) {\n    listeners.splice(index, 1);\n  }\n\n  if (listeners.length > 0) {\n    return;\n  }\n\n  arrayEvents.forEach((key) => {\n    delete array[key];\n  });\n\n  delete array._chartjs;\n}\n\n/**\n * @param items\n */\nexport function _arrayUnique<T>(items: T[]) {\n  const set = new Set<T>(items);\n\n  if (set.size === items.length) {\n    return items;\n  }\n\n  return Array.from(set);\n}\n", "import type {ChartMeta, PointElement} from '../types/index.js';\n\nimport {_limitValue} from './helpers.math.js';\nimport {_lookupByKey} from './helpers.collection.js';\nimport {isNullOrUndef} from './helpers.core.js';\n\nexport function fontString(pixelSize: number, fontStyle: string, fontFamily: string) {\n  return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n\n/**\n* Request animation polyfill\n*/\nexport const requestAnimFrame = (function() {\n  if (typeof window === 'undefined') {\n    return function(callback) {\n      return callback();\n    };\n  }\n  return window.requestAnimationFrame;\n}());\n\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */\nexport function throttled<TArgs extends Array<any>>(\n  fn: (...args: TArgs) => void,\n  thisArg: any,\n) {\n  let argsToUse = [] as TArgs;\n  let ticking = false;\n\n  return function(...args: TArgs) {\n    // Save the args for use later\n    argsToUse = args;\n    if (!ticking) {\n      ticking = true;\n      requestAnimFrame.call(window, () => {\n        ticking = false;\n        fn.apply(thisArg, argsToUse);\n      });\n    }\n  };\n}\n\n/**\n * Debounces calling `fn` for `delay` ms\n */\nexport function debounce<TArgs extends Array<any>>(fn: (...args: TArgs) => void, delay: number) {\n  let timeout;\n  return function(...args: TArgs) {\n    if (delay) {\n      clearTimeout(timeout);\n      timeout = setTimeout(fn, delay, args);\n    } else {\n      fn.apply(this, args);\n    }\n    return delay;\n  };\n}\n\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */\nexport const _toLeftRightCenter = (align: 'start' | 'end' | 'center') => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */\nexport const _alignStartEnd = (align: 'start' | 'end' | 'center', start: number, end: number) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */\nexport const _textX = (align: 'left' | 'right' | 'center', left: number, right: number, rtl: boolean) => {\n  const check = rtl ? 'left' : 'right';\n  return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\n/**\n * Return start and count of visible points.\n * @private\n */\nexport function _getStartAndCountOfVisiblePoints(meta: ChartMeta<'line' | 'scatter'>, points: PointElement[], animationsDisabled: boolean) {\n  const pointCount = points.length;\n\n  let start = 0;\n  let count = pointCount;\n\n  if (meta._sorted) {\n    const {iScale, vScale, _parsed} = meta;\n    const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;\n    const axis = iScale.axis;\n    const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n    if (minDefined) {\n      start = Math.min(\n        // @ts-expect-error Need to type _parsed\n        _lookupByKey(_parsed, axis, min).lo,\n        // @ts-expect-error Need to fix types on _lookupByKey\n        animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);\n      if (spanGaps) {\n        const distanceToDefinedLo = (_parsed\n          .slice(0, start + 1)\n          .reverse()\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        start -= Math.max(0, distanceToDefinedLo);\n      }\n      start = _limitValue(start, 0, pointCount - 1);\n    }\n    if (maxDefined) {\n      let end = Math.max(\n        // @ts-expect-error Need to type _parsed\n        _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n        // @ts-expect-error Need to fix types on _lookupByKey\n        animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);\n      if (spanGaps) {\n        const distanceToDefinedHi = (_parsed\n          .slice(end - 1)\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        end += Math.max(0, distanceToDefinedHi);\n      }\n      count = _limitValue(end, start, pointCount) - start;\n    } else {\n      count = pointCount - start;\n    }\n  }\n\n  return {start, count};\n}\n\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */\nexport function _scaleRangesChanged(meta) {\n  const {xScale, yScale, _scaleRanges} = meta;\n  const newRanges = {\n    xmin: xScale.min,\n    xmax: xScale.max,\n    ymin: yScale.min,\n    ymax: yScale.max\n  };\n  if (!_scaleRanges) {\n    meta._scaleRanges = newRanges;\n    return true;\n  }\n  const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n\n  Object.assign(_scaleRanges, newRanges);\n  return changed;\n}\n", "import {PI, TAU, HALF_PI} from './helpers.math.js';\n\nconst atEdge = (t: number) => t === 0 || t === 1;\nconst elasticIn = (t: number, s: number, p: number) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t: number, s: number, p: number) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */\nconst effects = {\n  linear: (t: number) => t,\n\n  easeInQuad: (t: number) => t * t,\n\n  easeOutQuad: (t: number) => -t * (t - 2),\n\n  easeInOutQuad: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t\n    : -0.5 * ((--t) * (t - 2) - 1),\n\n  easeInCubic: (t: number) => t * t * t,\n\n  easeOutCubic: (t: number) => (t -= 1) * t * t + 1,\n\n  easeInOutCubic: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t\n    : 0.5 * ((t -= 2) * t * t + 2),\n\n  easeInQuart: (t: number) => t * t * t * t,\n\n  easeOutQuart: (t: number) => -((t -= 1) * t * t * t - 1),\n\n  easeInOutQuart: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t\n    : -0.5 * ((t -= 2) * t * t * t - 2),\n\n  easeInQuint: (t: number) => t * t * t * t * t,\n\n  easeOutQuint: (t: number) => (t -= 1) * t * t * t * t + 1,\n\n  easeInOutQuint: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t * t\n    : 0.5 * ((t -= 2) * t * t * t * t + 2),\n\n  easeInSine: (t: number) => -Math.cos(t * HALF_PI) + 1,\n\n  easeOutSine: (t: number) => Math.sin(t * HALF_PI),\n\n  easeInOutSine: (t: number) => -0.5 * (Math.cos(PI * t) - 1),\n\n  easeInExpo: (t: number) => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n\n  easeOutExpo: (t: number) => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n\n  easeInOutExpo: (t: number) => atEdge(t) ? t : t < 0.5\n    ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n    : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n\n  easeInCirc: (t: number) => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n\n  easeOutCirc: (t: number) => Math.sqrt(1 - (t -= 1) * t),\n\n  easeInOutCirc: (t: number) => ((t /= 0.5) < 1)\n    ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n    : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n\n  easeInElastic: (t: number) => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n\n  easeOutElastic: (t: number) => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n\n  easeInOutElastic(t: number) {\n    const s = 0.1125;\n    const p = 0.45;\n    return atEdge(t) ? t :\n      t < 0.5\n        ? 0.5 * elasticIn(t * 2, s, p)\n        : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n  },\n\n  easeInBack(t: number) {\n    const s = 1.70158;\n    return t * t * ((s + 1) * t - s);\n  },\n\n  easeOutBack(t: number) {\n    const s = 1.70158;\n    return (t -= 1) * t * ((s + 1) * t + s) + 1;\n  },\n\n  easeInOutBack(t: number) {\n    let s = 1.70158;\n    if ((t /= 0.5) < 1) {\n      return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n    }\n    return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n  },\n\n  easeInBounce: (t: number) => 1 - effects.easeOutBounce(1 - t),\n\n  easeOutBounce(t: number) {\n    const m = 7.5625;\n    const d = 2.75;\n    if (t < (1 / d)) {\n      return m * t * t;\n    }\n    if (t < (2 / d)) {\n      return m * (t -= (1.5 / d)) * t + 0.75;\n    }\n    if (t < (2.5 / d)) {\n      return m * (t -= (2.25 / d)) * t + 0.9375;\n    }\n    return m * (t -= (2.625 / d)) * t + 0.984375;\n  },\n\n  easeInOutBounce: (t: number) => (t < 0.5)\n    ? effects.easeInBounce(t * 2) * 0.5\n    : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n} as const;\n\nexport type EasingFunction = keyof typeof effects\n\nexport default effects;\n", "import {Color} from '@kurkle/color';\n\nexport function isPatternOrGradient(value: unknown): value is CanvasPattern | CanvasGradient {\n  if (value && typeof value === 'object') {\n    const type = value.toString();\n    return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n  }\n\n  return false;\n}\n\nexport function color(value: CanvasGradient): CanvasGradient;\nexport function color(value: CanvasPattern): CanvasPattern;\nexport function color(\n  value:\n  | string\n  | { r: number; g: number; b: number; a: number }\n  | [number, number, number]\n  | [number, number, number, number]\n): Color;\nexport function color(value) {\n  return isPatternOrGradient(value) ? value : new Color(value);\n}\n\nexport function getHoverColor(value: CanvasGradient): CanvasGradient;\nexport function getHoverColor(value: CanvasPattern): CanvasPattern;\nexport function getHoverColor(value: string): string;\nexport function getHoverColor(value) {\n  return isPatternOrGradient(value)\n    ? value\n    : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n", "const numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\n\nexport function applyAnimationsDefaults(defaults) {\n  defaults.set('animation', {\n    delay: undefined,\n    duration: 1000,\n    easing: 'easeOutQuart',\n    fn: undefined,\n    from: undefined,\n    loop: undefined,\n    to: undefined,\n    type: undefined,\n  });\n\n  defaults.describe('animation', {\n    _fallback: false,\n    _indexable: false,\n    _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n  });\n\n  defaults.set('animations', {\n    colors: {\n      type: 'color',\n      properties: colors\n    },\n    numbers: {\n      type: 'number',\n      properties: numbers\n    },\n  });\n\n  defaults.describe('animations', {\n    _fallback: 'animation',\n  });\n\n  defaults.set('transitions', {\n    active: {\n      animation: {\n        duration: 400\n      }\n    },\n    resize: {\n      animation: {\n        duration: 0\n      }\n    },\n    show: {\n      animations: {\n        colors: {\n          from: 'transparent'\n        },\n        visible: {\n          type: 'boolean',\n          duration: 0 // show immediately\n        },\n      }\n    },\n    hide: {\n      animations: {\n        colors: {\n          to: 'transparent'\n        },\n        visible: {\n          type: 'boolean',\n          easing: 'linear',\n          fn: v => v | 0 // for keeping the dataset visible all the way through the animation\n        },\n      }\n    }\n  });\n}\n", "export function applyLayoutsDefaults(defaults) {\n  defaults.set('layout', {\n    autoPadding: true,\n    padding: {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    }\n  });\n}\n", "\nconst intlCache = new Map<string, Intl.NumberFormat>();\n\nfunction getNumberFormat(locale: string, options?: Intl.NumberFormatOptions) {\n  options = options || {};\n  const cacheKey = locale + JSON.stringify(options);\n  let formatter = intlCache.get(cacheKey);\n  if (!formatter) {\n    formatter = new Intl.NumberFormat(locale, options);\n    intlCache.set(cacheKey, formatter);\n  }\n  return formatter;\n}\n\nexport function formatNumber(num: number, locale: string, options?: Intl.NumberFormatOptions) {\n  return getNumberFormat(locale, options).format(num);\n}\n", "import {isArray} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {log10} from '../helpers/helpers.math.js';\n\n/**\n * Namespace to hold formatters for different types of ticks\n * @namespace Chart.Ticks.formatters\n */\nconst formatters = {\n  /**\n   * Formatter for value labels\n   * @method Chart.Ticks.formatters.values\n   * @param value the value to display\n   * @return {string|string[]} the label to display\n   */\n  values(value) {\n    return isArray(value) ? /** @type {string[]} */ (value) : '' + value;\n  },\n\n  /**\n   * Formatter for numeric ticks\n   * @method Chart.Ticks.formatters.numeric\n   * @param tickValue {number} the value to be formatted\n   * @param index {number} the position of the tickValue parameter in the ticks array\n   * @param ticks {object[]} the list of ticks being converted\n   * @return {string} string representation of the tickValue parameter\n   */\n  numeric(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0'; // never show decimal places for 0\n    }\n\n    const locale = this.chart.options.locale;\n    let notation;\n    let delta = tickValue; // This is used when there are less than 2 ticks as the tick interval.\n\n    if (ticks.length > 1) {\n      // all ticks are small or there huge numbers; use scientific notation\n      const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n      if (maxTick < 1e-4 || maxTick > 1e+15) {\n        notation = 'scientific';\n      }\n\n      delta = calculateDelta(tickValue, ticks);\n    }\n\n    const logDelta = log10(Math.abs(delta));\n\n    // When datasets have values approaching Number.MAX_VALUE, the tick calculations might result in\n    // infinity and eventually NaN. Passing NaN for minimumFractionDigits or maximumFractionDigits\n    // will make the number formatter throw. So instead we check for isNaN and use a fallback value.\n    //\n    // toFixed has a max of 20 decimal places\n    const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n\n    const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n    Object.assign(options, this.options.ticks.format);\n\n    return formatNumber(tickValue, locale, options);\n  },\n\n\n  /**\n   * Formatter for logarithmic ticks\n   * @method Chart.Ticks.formatters.logarithmic\n   * @param tickValue {number} the value to be formatted\n   * @param index {number} the position of the tickValue parameter in the ticks array\n   * @param ticks {object[]} the list of ticks being converted\n   * @return {string} string representation of the tickValue parameter\n   */\n  logarithmic(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const remain = ticks[index].significand || (tickValue / (Math.pow(10, Math.floor(log10(tickValue)))));\n    if ([1, 2, 3, 5, 10, 15].includes(remain) || index > 0.8 * ticks.length) {\n      return formatters.numeric.call(this, tickValue, index, ticks);\n    }\n    return '';\n  }\n\n};\n\n\nfunction calculateDelta(tickValue, ticks) {\n  // Figure out how many digits to show\n  // The space between the first two ticks might be smaller than normal spacing\n  let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n\n  // If we have a number like 2.5 as the delta, figure out how many decimal places we need\n  if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n    // not an integer\n    delta = tickValue - Math.floor(tickValue);\n  }\n  return delta;\n}\n\n/**\n * Namespace to hold static tick generation functions\n * @namespace Chart.Ticks\n */\nexport default {formatters};\n", "import Ticks from './core.ticks.js';\n\nexport function applyScaleDefaults(defaults) {\n  defaults.set('scale', {\n    display: true,\n    offset: false,\n    reverse: false,\n    beginAtZero: false,\n\n    /**\n     * Scale boundary strategy (bypassed by min/max time options)\n     * - `data`: make sure data are fully visible, ticks outside are removed\n     * - `ticks`: make sure ticks are fully visible, data outside are truncated\n     * @see https://github.com/chartjs/Chart.js/pull/4556\n     * @since 3.0.0\n     */\n    bounds: 'ticks',\n\n    clip: true,\n\n    /**\n     * Addition grace added to max and reduced from min data value.\n     * @since 3.0.0\n     */\n    grace: 0,\n\n    // grid line settings\n    grid: {\n      display: true,\n      lineWidth: 1,\n      drawOnChartArea: true,\n      drawTicks: true,\n      tickLength: 8,\n      tickWidth: (_ctx, options) => options.lineWidth,\n      tickColor: (_ctx, options) => options.color,\n      offset: false,\n    },\n\n    border: {\n      display: true,\n      dash: [],\n      dashOffset: 0.0,\n      width: 1\n    },\n\n    // scale title\n    title: {\n      // display property\n      display: false,\n\n      // actual label\n      text: '',\n\n      // top/bottom padding\n      padding: {\n        top: 4,\n        bottom: 4\n      }\n    },\n\n    // label settings\n    ticks: {\n      minRotation: 0,\n      maxRotation: 50,\n      mirror: false,\n      textStrokeWidth: 0,\n      textStrokeColor: '',\n      padding: 3,\n      display: true,\n      autoSkip: true,\n      autoSkipPadding: 3,\n      labelOffset: 0,\n      // We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n      callback: Ticks.formatters.values,\n      minor: {},\n      major: {},\n      align: 'center',\n      crossAlign: 'near',\n\n      showLabelBackdrop: false,\n      backdropColor: 'rgba(255, 255, 255, 0.75)',\n      backdropPadding: 2,\n    }\n  });\n\n  defaults.route('scale.ticks', 'color', '', 'color');\n  defaults.route('scale.grid', 'color', '', 'borderColor');\n  defaults.route('scale.border', 'color', '', 'borderColor');\n  defaults.route('scale.title', 'color', '', 'color');\n\n  defaults.describe('scale', {\n    _fallback: false,\n    _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n    _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash',\n  });\n\n  defaults.describe('scales', {\n    _fallback: 'scale',\n  });\n\n  defaults.describe('scale.ticks', {\n    _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n    _indexable: (name) => name !== 'backdropPadding',\n  });\n}\n", "import {getHoverColor} from '../helpers/helpers.color.js';\nimport {isObject, merge, valueOrDefault} from '../helpers/helpers.core.js';\nimport {applyAnimationsDefaults} from './core.animations.defaults.js';\nimport {applyLayoutsDefaults} from './core.layouts.defaults.js';\nimport {applyScaleDefaults} from './core.scale.defaults.js';\n\nexport const overrides = Object.create(null);\nexport const descriptors = Object.create(null);\n\n/**\n * @param {object} node\n * @param {string} key\n * @return {object}\n */\nfunction getScope(node, key) {\n  if (!key) {\n    return node;\n  }\n  const keys = key.split('.');\n  for (let i = 0, n = keys.length; i < n; ++i) {\n    const k = keys[i];\n    node = node[k] || (node[k] = Object.create(null));\n  }\n  return node;\n}\n\nfunction set(root, scope, values) {\n  if (typeof scope === 'string') {\n    return merge(getScope(root, scope), values);\n  }\n  return merge(getScope(root, ''), scope);\n}\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Defaults {\n  constructor(_descriptors, _appliers) {\n    this.animation = undefined;\n    this.backgroundColor = 'rgba(0,0,0,0.1)';\n    this.borderColor = 'rgba(0,0,0,0.1)';\n    this.color = '#666';\n    this.datasets = {};\n    this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n    this.elements = {};\n    this.events = [\n      'mousemove',\n      'mouseout',\n      'click',\n      'touchstart',\n      'touchmove'\n    ];\n    this.font = {\n      family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n      size: 12,\n      style: 'normal',\n      lineHeight: 1.2,\n      weight: null\n    };\n    this.hover = {};\n    this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n    this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n    this.hoverColor = (ctx, options) => getHoverColor(options.color);\n    this.indexAxis = 'x';\n    this.interaction = {\n      mode: 'nearest',\n      intersect: true,\n      includeInvisible: false\n    };\n    this.maintainAspectRatio = true;\n    this.onHover = null;\n    this.onClick = null;\n    this.parsing = true;\n    this.plugins = {};\n    this.responsive = true;\n    this.scale = undefined;\n    this.scales = {};\n    this.showLine = true;\n    this.drawActiveElementsOnTop = true;\n\n    this.describe(_descriptors);\n    this.apply(_appliers);\n  }\n\n  /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n  set(scope, values) {\n    return set(this, scope, values);\n  }\n\n  /**\n\t * @param {string} scope\n\t */\n  get(scope) {\n    return getScope(this, scope);\n  }\n\n  /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n  describe(scope, values) {\n    return set(descriptors, scope, values);\n  }\n\n  override(scope, values) {\n    return set(overrides, scope, values);\n  }\n\n  /**\n\t * Routes the named defaults to fallback to another scope/name.\n\t * This routing is useful when those target values, like defaults.color, are changed runtime.\n\t * If the values would be copied, the runtime change would not take effect. By routing, the\n\t * fallback is evaluated at each access, so its always up to date.\n\t *\n\t * Example:\n\t *\n\t * \tdefaults.route('elements.arc', 'backgroundColor', '', 'color')\n\t *   - reads the backgroundColor from defaults.color when undefined locally\n\t *\n\t * @param {string} scope Scope this route applies to.\n\t * @param {string} name Property name that should be routed to different namespace when not defined here.\n\t * @param {string} targetScope The namespace where those properties should be routed to.\n\t * Empty string ('') is the root of defaults.\n\t * @param {string} targetName The target name in the target scope the property should be routed to.\n\t */\n  route(scope, name, targetScope, targetName) {\n    const scopeObject = getScope(this, scope);\n    const targetScopeObject = getScope(this, targetScope);\n    const privateName = '_' + name;\n\n    Object.defineProperties(scopeObject, {\n      // A private property is defined to hold the actual value, when this property is set in its scope (set in the setter)\n      [privateName]: {\n        value: scopeObject[name],\n        writable: true\n      },\n      // The actual property is defined as getter/setter so we can do the routing when value is not locally set.\n      [name]: {\n        enumerable: true,\n        get() {\n          const local = this[privateName];\n          const target = targetScopeObject[targetName];\n          if (isObject(local)) {\n            return Object.assign({}, target, local);\n          }\n          return valueOrDefault(local, target);\n        },\n        set(value) {\n          this[privateName] = value;\n        }\n      }\n    });\n  }\n\n  apply(appliers) {\n    appliers.forEach((apply) => apply(this));\n  }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Defaults({\n  _scriptable: (name) => !name.startsWith('on'),\n  _indexable: (name) => name !== 'events',\n  hover: {\n    _fallback: 'interaction'\n  },\n  interaction: {\n    _scriptable: false,\n    _indexable: false,\n  }\n}, [applyAnimationsDefaults, applyLayoutsDefaults, applyScaleDefaults]);\n", "import type {\n  Chart,\n  Point,\n  FontSpec,\n  CanvasFontSpec,\n  PointStyle,\n  RenderTextOpts,\n  BackdropOptions\n} from '../types/index.js';\nimport type {\n  TRBL,\n  SplinePoint,\n  RoundedRect,\n  TRBLCorners\n} from '../types/geometric.js';\nimport {isArray, isNullOrUndef} from './helpers.core.js';\nimport {PI, TAU, HALF_PI, QUARTER_PI, TWO_THIRDS_PI, RAD_PER_DEG} from './helpers.math.js';\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */\nexport function toFontString(font: FontSpec) {\n  if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n    return null;\n  }\n\n  return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\n\n/**\n * @private\n */\nexport function _measureText(\n  ctx: CanvasRenderingContext2D,\n  data: Record<string, number>,\n  gc: string[],\n  longest: number,\n  string: string\n) {\n  let textWidth = data[string];\n  if (!textWidth) {\n    textWidth = data[string] = ctx.measureText(string).width;\n    gc.push(string);\n  }\n  if (textWidth > longest) {\n    longest = textWidth;\n  }\n  return longest;\n}\n\ntype Thing = string | undefined | null\ntype Things = (Thing | Thing[])[]\n\n/**\n * @private\n */\n// eslint-disable-next-line complexity\nexport function _longestText(\n  ctx: CanvasRenderingContext2D,\n  font: string,\n  arrayOfThings: Things,\n  cache?: {data?: Record<string, number>, garbageCollect?: string[], font?: string}\n) {\n  cache = cache || {};\n  let data = cache.data = cache.data || {};\n  let gc = cache.garbageCollect = cache.garbageCollect || [];\n\n  if (cache.font !== font) {\n    data = cache.data = {};\n    gc = cache.garbageCollect = [];\n    cache.font = font;\n  }\n\n  ctx.save();\n\n  ctx.font = font;\n  let longest = 0;\n  const ilen = arrayOfThings.length;\n  let i: number, j: number, jlen: number, thing: Thing | Thing[], nestedThing: Thing | Thing[];\n  for (i = 0; i < ilen; i++) {\n    thing = arrayOfThings[i];\n\n    // Undefined strings and arrays should not be measured\n    if (thing !== undefined && thing !== null && !isArray(thing)) {\n      longest = _measureText(ctx, data, gc, longest, thing);\n    } else if (isArray(thing)) {\n      // if it is an array lets measure each element\n      // to do maybe simplify this function a bit so we can do this more recursively?\n      for (j = 0, jlen = thing.length; j < jlen; j++) {\n        nestedThing = thing[j];\n        // Undefined strings and arrays should not be measured\n        if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n          longest = _measureText(ctx, data, gc, longest, nestedThing);\n        }\n      }\n    }\n  }\n\n  ctx.restore();\n\n  const gcLen = gc.length / 2;\n  if (gcLen > arrayOfThings.length) {\n    for (i = 0; i < gcLen; i++) {\n      delete data[gc[i]];\n    }\n    gc.splice(0, gcLen);\n  }\n  return longest;\n}\n\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */\nexport function _alignPixel(chart: Chart, pixel: number, width: number) {\n  const devicePixelRatio = chart.currentDevicePixelRatio;\n  const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n  return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n\n/**\n * Clears the entire canvas.\n */\nexport function clearCanvas(canvas?: HTMLCanvasElement, ctx?: CanvasRenderingContext2D) {\n  if (!ctx && !canvas) {\n    return;\n  }\n\n  ctx = ctx || canvas.getContext('2d');\n\n  ctx.save();\n  // canvas.width and canvas.height do not consider the canvas transform,\n  // while clearRect does\n  ctx.resetTransform();\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  ctx.restore();\n}\n\nexport interface DrawPointOptions {\n  pointStyle: PointStyle;\n  rotation?: number;\n  radius: number;\n  borderWidth: number;\n}\n\nexport function drawPoint(\n  ctx: CanvasRenderingContext2D,\n  options: DrawPointOptions,\n  x: number,\n  y: number\n) {\n  // eslint-disable-next-line @typescript-eslint/no-use-before-define\n  drawPointLegend(ctx, options, x, y, null);\n}\n\n// eslint-disable-next-line complexity\nexport function drawPointLegend(\n  ctx: CanvasRenderingContext2D,\n  options: DrawPointOptions,\n  x: number,\n  y: number,\n  w: number\n) {\n  let type: string, xOffset: number, yOffset: number, size: number, cornerRadius: number, width: number, xOffsetW: number, yOffsetW: number;\n  const style = options.pointStyle;\n  const rotation = options.rotation;\n  const radius = options.radius;\n  let rad = (rotation || 0) * RAD_PER_DEG;\n\n  if (style && typeof style === 'object') {\n    type = style.toString();\n    if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n      ctx.save();\n      ctx.translate(x, y);\n      ctx.rotate(rad);\n      ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n      ctx.restore();\n      return;\n    }\n  }\n\n  if (isNaN(radius) || radius <= 0) {\n    return;\n  }\n\n  ctx.beginPath();\n\n  switch (style) {\n  // Default includes circle\n    default:\n      if (w) {\n        ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n      } else {\n        ctx.arc(x, y, radius, 0, TAU);\n      }\n      ctx.closePath();\n      break;\n    case 'triangle':\n      width = w ? w / 2 : radius;\n      ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      rad += TWO_THIRDS_PI;\n      ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      rad += TWO_THIRDS_PI;\n      ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      ctx.closePath();\n      break;\n    case 'rectRounded':\n    // NOTE: the rounded rect implementation changed to use `arc` instead of\n    // `quadraticCurveTo` since it generates better results when rect is\n    // almost a circle. 0.516 (instead of 0.5) produces results with visually\n    // closer proportion to the previous impl and it is inscribed in the\n    // circle with `radius`. For more details, see the following PRs:\n    // https://github.com/chartjs/Chart.js/issues/5597\n    // https://github.com/chartjs/Chart.js/issues/5858\n      cornerRadius = radius * 0.516;\n      size = radius - cornerRadius;\n      xOffset = Math.cos(rad + QUARTER_PI) * size;\n      xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n      yOffset = Math.sin(rad + QUARTER_PI) * size;\n      yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n      ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n      ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n      ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n      ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n      ctx.closePath();\n      break;\n    case 'rect':\n      if (!rotation) {\n        size = Math.SQRT1_2 * radius;\n        width = w ? w / 2 : size;\n        ctx.rect(x - width, y - size, 2 * width, 2 * size);\n        break;\n      }\n      rad += QUARTER_PI;\n    /* falls through */\n    case 'rectRot':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      ctx.closePath();\n      break;\n    case 'crossRot':\n      rad += QUARTER_PI;\n    /* falls through */\n    case 'cross':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      break;\n    case 'star':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      rad += QUARTER_PI;\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      break;\n    case 'line':\n      xOffset = w ? w / 2 : Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      ctx.moveTo(x - xOffset, y - yOffset);\n      ctx.lineTo(x + xOffset, y + yOffset);\n      break;\n    case 'dash':\n      ctx.moveTo(x, y);\n      ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n      break;\n    case false:\n      ctx.closePath();\n      break;\n  }\n\n  ctx.fill();\n  if (options.borderWidth > 0) {\n    ctx.stroke();\n  }\n}\n\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */\nexport function _isPointInArea(\n  point: Point,\n  area: TRBL,\n  margin?: number\n) {\n  margin = margin || 0.5; // margin - default is to match rounded decimals\n\n  return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\n\nexport function clipArea(ctx: CanvasRenderingContext2D, area: TRBL) {\n  ctx.save();\n  ctx.beginPath();\n  ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n  ctx.clip();\n}\n\nexport function unclipArea(ctx: CanvasRenderingContext2D) {\n  ctx.restore();\n}\n\n/**\n * @private\n */\nexport function _steppedLineTo(\n  ctx: CanvasRenderingContext2D,\n  previous: Point,\n  target: Point,\n  flip?: boolean,\n  mode?: string\n) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  if (mode === 'middle') {\n    const midpoint = (previous.x + target.x) / 2.0;\n    ctx.lineTo(midpoint, previous.y);\n    ctx.lineTo(midpoint, target.y);\n  } else if (mode === 'after' !== !!flip) {\n    ctx.lineTo(previous.x, target.y);\n  } else {\n    ctx.lineTo(target.x, previous.y);\n  }\n  ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @private\n */\nexport function _bezierCurveTo(\n  ctx: CanvasRenderingContext2D,\n  previous: SplinePoint,\n  target: SplinePoint,\n  flip?: boolean\n) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  ctx.bezierCurveTo(\n    flip ? previous.cp1x : previous.cp2x,\n    flip ? previous.cp1y : previous.cp2y,\n    flip ? target.cp2x : target.cp1x,\n    flip ? target.cp2y : target.cp1y,\n    target.x,\n    target.y);\n}\n\nfunction setRenderOpts(ctx: CanvasRenderingContext2D, opts: RenderTextOpts) {\n  if (opts.translation) {\n    ctx.translate(opts.translation[0], opts.translation[1]);\n  }\n\n  if (!isNullOrUndef(opts.rotation)) {\n    ctx.rotate(opts.rotation);\n  }\n\n  if (opts.color) {\n    ctx.fillStyle = opts.color;\n  }\n\n  if (opts.textAlign) {\n    ctx.textAlign = opts.textAlign;\n  }\n\n  if (opts.textBaseline) {\n    ctx.textBaseline = opts.textBaseline;\n  }\n}\n\nfunction decorateText(\n  ctx: CanvasRenderingContext2D,\n  x: number,\n  y: number,\n  line: string,\n  opts: RenderTextOpts\n) {\n  if (opts.strikethrough || opts.underline) {\n    /**\n     * Now that IE11 support has been dropped, we can use more\n     * of the TextMetrics object. The actual bounding boxes\n     * are unflagged in Chrome, Firefox, Edge, and Safari so they\n     * can be safely used.\n     * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n     */\n    const metrics = ctx.measureText(line);\n    const left = x - metrics.actualBoundingBoxLeft;\n    const right = x + metrics.actualBoundingBoxRight;\n    const top = y - metrics.actualBoundingBoxAscent;\n    const bottom = y + metrics.actualBoundingBoxDescent;\n    const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n\n    ctx.strokeStyle = ctx.fillStyle;\n    ctx.beginPath();\n    ctx.lineWidth = opts.decorationWidth || 2;\n    ctx.moveTo(left, yDecoration);\n    ctx.lineTo(right, yDecoration);\n    ctx.stroke();\n  }\n}\n\nfunction drawBackdrop(ctx: CanvasRenderingContext2D, opts: BackdropOptions) {\n  const oldColor = ctx.fillStyle;\n\n  ctx.fillStyle = opts.color as string;\n  ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n  ctx.fillStyle = oldColor;\n}\n\n/**\n * Render text onto the canvas\n */\nexport function renderText(\n  ctx: CanvasRenderingContext2D,\n  text: string | string[],\n  x: number,\n  y: number,\n  font: CanvasFontSpec,\n  opts: RenderTextOpts = {}\n) {\n  const lines = isArray(text) ? text : [text];\n  const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n  let i: number, line: string;\n\n  ctx.save();\n  ctx.font = font.string;\n  setRenderOpts(ctx, opts);\n\n  for (i = 0; i < lines.length; ++i) {\n    line = lines[i];\n\n    if (opts.backdrop) {\n      drawBackdrop(ctx, opts.backdrop);\n    }\n\n    if (stroke) {\n      if (opts.strokeColor) {\n        ctx.strokeStyle = opts.strokeColor;\n      }\n\n      if (!isNullOrUndef(opts.strokeWidth)) {\n        ctx.lineWidth = opts.strokeWidth;\n      }\n\n      ctx.strokeText(line, x, y, opts.maxWidth);\n    }\n\n    ctx.fillText(line, x, y, opts.maxWidth);\n    decorateText(ctx, x, y, line, opts);\n\n    y += Number(font.lineHeight);\n  }\n\n  ctx.restore();\n}\n\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */\nexport function addRoundedRectPath(\n  ctx: CanvasRenderingContext2D,\n  rect: RoundedRect & { radius: TRBLCorners }\n) {\n  const {x, y, w, h, radius} = rect;\n\n  // top left arc\n  ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n\n  // line from top left to bottom left\n  ctx.lineTo(x, y + h - radius.bottomLeft);\n\n  // bottom left arc\n  ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n\n  // line from bottom left to bottom right\n  ctx.lineTo(x + w - radius.bottomRight, y + h);\n\n  // bottom right arc\n  ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n\n  // line from bottom right to top right\n  ctx.lineTo(x + w, y + radius.topRight);\n\n  // top right arc\n  ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n\n  // line from top right to top left\n  ctx.lineTo(x + radius.topLeft, y);\n}\n", "import defaults from '../core/core.defaults.js';\nimport {isArray, isObject, toDimension, valueOrDefault} from './helpers.core.js';\nimport {toFontString} from './helpers.canvas.js';\nimport type {ChartArea, FontSpec, Point} from '../types/index.js';\nimport type {TRBL, TRBLCorners} from '../types/geometric.js';\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n\n/**\n * @alias Chart.helpers.options\n * @namespace\n */\n/**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */\nexport function toLineHeight(value: number | string, size: number): number {\n  const matches = ('' + value).match(LINE_HEIGHT);\n  if (!matches || matches[1] === 'normal') {\n    return size * 1.2;\n  }\n\n  value = +matches[2];\n\n  switch (matches[3]) {\n    case 'px':\n      return value;\n    case '%':\n      value /= 100;\n      break;\n    default:\n      break;\n  }\n\n  return size * value;\n}\n\nconst numberOrZero = (v: unknown) => +v || 0;\n\n/**\n * @param value\n * @param props\n */\nexport function _readValueToProps<K extends string>(value: number | Record<K, number>, props: K[]): Record<K, number>;\nexport function _readValueToProps<K extends string, T extends string>(value: number | Record<K & T, number>, props: Record<T, K>): Record<T, number>;\nexport function _readValueToProps(value: number | Record<string, number>, props: string[] | Record<string, string>) {\n  const ret = {};\n  const objProps = isObject(props);\n  const keys = objProps ? Object.keys(props) : props;\n  const read = isObject(value)\n    ? objProps\n      ? prop => valueOrDefault(value[prop], value[props[prop]])\n      : prop => value[prop]\n    : () => value;\n\n  for (const prop of keys) {\n    ret[prop] = numberOrZero(read(prop));\n  }\n  return ret;\n}\n\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */\nexport function toTRBL(value: number | TRBL | Point) {\n  return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\n\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */\nexport function toTRBLCorners(value: number | TRBLCorners) {\n  return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\n\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */\nexport function toPadding(value?: number | TRBL): ChartArea {\n  const obj = toTRBL(value) as ChartArea;\n\n  obj.width = obj.left + obj.right;\n  obj.height = obj.top + obj.bottom;\n\n  return obj;\n}\n\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */\n\nexport function toFont(options: Partial<FontSpec>, fallback?: Partial<FontSpec>) {\n  options = options || {};\n  fallback = fallback || defaults.font as FontSpec;\n\n  let size = valueOrDefault(options.size, fallback.size);\n\n  if (typeof size === 'string') {\n    size = parseInt(size, 10);\n  }\n  let style = valueOrDefault(options.style, fallback.style);\n  if (style && !('' + style).match(FONT_STYLE)) {\n    console.warn('Invalid font style specified: \"' + style + '\"');\n    style = undefined;\n  }\n\n  const font = {\n    family: valueOrDefault(options.family, fallback.family),\n    lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n    size,\n    style,\n    weight: valueOrDefault(options.weight, fallback.weight),\n    string: ''\n  };\n\n  font.string = toFontString(font);\n  return font;\n}\n\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */\nexport function resolve(inputs: Array<unknown>, context?: object, index?: number, info?: { cacheable: boolean }) {\n  let cacheable = true;\n  let i: number, ilen: number, value: unknown;\n\n  for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n    value = inputs[i];\n    if (value === undefined) {\n      continue;\n    }\n    if (context !== undefined && typeof value === 'function') {\n      value = value(context);\n      cacheable = false;\n    }\n    if (index !== undefined && isArray(value)) {\n      value = value[index % value.length];\n      cacheable = false;\n    }\n    if (value !== undefined) {\n      if (info && !cacheable) {\n        info.cacheable = false;\n      }\n      return value;\n    }\n  }\n}\n\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */\nexport function _addGrace(minmax: { min: number; max: number; }, grace: number | string, beginAtZero: boolean) {\n  const {min, max} = minmax;\n  const change = toDimension(grace, (max - min) / 2);\n  const keepZero = (value: number, add: number) => beginAtZero && value === 0 ? 0 : value + add;\n  return {\n    min: keepZero(min, -Math.abs(change)),\n    max: keepZero(max, change)\n  };\n}\n\n/**\n * Create a context inheriting parentContext\n * @param parentContext\n * @param context\n * @returns\n */\nexport function createContext<T extends object>(parentContext: null, context: T): T;\nexport function createContext<T extends object, P extends T>(parentContext: P, context: T): P & T;\nexport function createContext(parentContext: object, context: object) {\n  return Object.assign(Object.create(parentContext), context);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartMeta} from '../types/index.js';\nimport type {\n  ResolverObjectKey,\n  ResolverCache,\n  ResolverProxy,\n  DescriptorDefaults,\n  Descriptor,\n  ContextCache,\n  ContextProxy\n} from './helpers.config.types.js';\nimport {isArray, isFunction, isObject, resolveObjectKey, _capitalize} from './helpers.core.js';\n\nexport * from './helpers.config.types.js';\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */\nexport function _createResolver<\n  T extends AnyObject[] = AnyObject[],\n  R extends AnyObject[] = T\n>(\n  scopes: T,\n  prefixes = [''],\n  rootScopes?: R,\n  fallback?: ResolverObjectKey,\n  getTarget = () => scopes[0]\n) {\n  const finalRootScopes = rootScopes || scopes;\n  if (typeof fallback === 'undefined') {\n    fallback = _resolve('_fallback', scopes);\n  }\n  const cache: ResolverCache<T, R> = {\n    [Symbol.toStringTag]: 'Object',\n    _cacheable: true,\n    _scopes: scopes,\n    _rootScopes: finalRootScopes,\n    _fallback: fallback,\n    _getTarget: getTarget,\n    override: (scope: AnyObject) => _createResolver([scope, ...scopes], prefixes, finalRootScopes, fallback),\n  };\n  return new Proxy(cache, {\n    /**\n     * A trap for the delete operator.\n     */\n    deleteProperty(target, prop: string) {\n      delete target[prop]; // remove from cache\n      delete target._keys; // remove cached keys\n      delete scopes[0][prop]; // remove from top level scope\n      return true;\n    },\n\n    /**\n     * A trap for getting property values.\n     */\n    get(target, prop: string) {\n      return _cached(target, prop,\n        () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */\n    getOwnPropertyDescriptor(target, prop) {\n      return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n    },\n\n    /**\n     * A trap for Object.getPrototypeOf.\n     */\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(scopes[0]);\n    },\n\n    /**\n     * A trap for the in operator.\n     */\n    has(target, prop: string) {\n      return getKeysFromAllScopes(target).includes(prop);\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */\n    ownKeys(target) {\n      return getKeysFromAllScopes(target);\n    },\n\n    /**\n     * A trap for setting property values.\n     */\n    set(target, prop: string, value) {\n      const storage = target._storage || (target._storage = getTarget());\n      target[prop] = storage[prop] = value; // set to top level scope + cache\n      delete target._keys; // remove cached keys\n      return true;\n    }\n  }) as ResolverProxy<T, R>;\n}\n\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */\nexport function _attachContext<\n  T extends AnyObject[] = AnyObject[],\n  R extends AnyObject[] = T\n>(\n  proxy: ResolverProxy<T, R>,\n  context: AnyObject,\n  subProxy?: ResolverProxy<T, R>,\n  descriptorDefaults?: DescriptorDefaults\n) {\n  const cache: ContextCache<T, R> = {\n    _cacheable: false,\n    _proxy: proxy,\n    _context: context,\n    _subProxy: subProxy,\n    _stack: new Set(),\n    _descriptors: _descriptors(proxy, descriptorDefaults),\n    setContext: (ctx: AnyObject) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n    override: (scope: AnyObject) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n  };\n  return new Proxy(cache, {\n    /**\n     * A trap for the delete operator.\n     */\n    deleteProperty(target, prop) {\n      delete target[prop]; // remove from cache\n      delete proxy[prop]; // remove from proxy\n      return true;\n    },\n\n    /**\n     * A trap for getting property values.\n     */\n    get(target, prop: string, receiver) {\n      return _cached(target, prop,\n        () => _resolveWithContext(target, prop, receiver));\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */\n    getOwnPropertyDescriptor(target, prop) {\n      return target._descriptors.allKeys\n        ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n        : Reflect.getOwnPropertyDescriptor(proxy, prop);\n    },\n\n    /**\n     * A trap for Object.getPrototypeOf.\n     */\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(proxy);\n    },\n\n    /**\n     * A trap for the in operator.\n     */\n    has(target, prop) {\n      return Reflect.has(proxy, prop);\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */\n    ownKeys() {\n      return Reflect.ownKeys(proxy);\n    },\n\n    /**\n     * A trap for setting property values.\n     */\n    set(target, prop, value) {\n      proxy[prop] = value; // set to proxy\n      delete target[prop]; // remove from cache\n      return true;\n    }\n  }) as ContextProxy<T, R>;\n}\n\n/**\n * @private\n */\nexport function _descriptors(\n  proxy: ResolverCache,\n  defaults: DescriptorDefaults = {scriptable: true, indexable: true}\n): Descriptor {\n  const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n  return {\n    allKeys: _allKeys,\n    scriptable: _scriptable,\n    indexable: _indexable,\n    isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n    isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n  };\n}\n\nconst readKey = (prefix: string, name: string) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop: string, value: unknown) => isObject(value) && prop !== 'adapters' &&\n  (Object.getPrototypeOf(value) === null || value.constructor === Object);\n\nfunction _cached(\n  target: AnyObject,\n  prop: string,\n  resolve: () => unknown\n) {\n  if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n    return target[prop];\n  }\n\n  const value = resolve();\n  // cache the resolved value\n  target[prop] = value;\n  return value;\n}\n\nfunction _resolveWithContext(\n  target: ContextCache,\n  prop: string,\n  receiver: AnyObject\n) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  let value = _proxy[prop]; // resolve from proxy\n\n  // resolve with context\n  if (isFunction(value) && descriptors.isScriptable(prop)) {\n    value = _resolveScriptable(prop, value, target, receiver);\n  }\n  if (isArray(value) && value.length) {\n    value = _resolveArray(prop, value, target, descriptors.isIndexable);\n  }\n  if (needsSubResolver(prop, value)) {\n    // if the resolved value is an object, create a sub resolver for it\n    value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n  }\n  return value;\n}\n\nfunction _resolveScriptable(\n  prop: string,\n  getValue: (ctx: AnyObject, sub: AnyObject) => unknown,\n  target: ContextCache,\n  receiver: AnyObject\n) {\n  const {_proxy, _context, _subProxy, _stack} = target;\n  if (_stack.has(prop)) {\n    throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n  }\n  _stack.add(prop);\n  let value = getValue(_context, _subProxy || receiver);\n  _stack.delete(prop);\n  if (needsSubResolver(prop, value)) {\n    // When scriptable option returns an object, create a resolver on that.\n    value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n  }\n  return value;\n}\n\nfunction _resolveArray(\n  prop: string,\n  value: unknown[],\n  target: ContextCache,\n  isIndexable: (key: string) => boolean\n) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n\n  if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n    return value[_context.index % value.length];\n  } else if (isObject(value[0])) {\n    // Array of objects, return array or resolvers\n    const arr = value;\n    const scopes = _proxy._scopes.filter(s => s !== arr);\n    value = [];\n    for (const item of arr) {\n      const resolver = createSubResolver(scopes, _proxy, prop, item);\n      value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n    }\n  }\n  return value;\n}\n\nfunction resolveFallback(\n  fallback: ResolverObjectKey | ((prop: ResolverObjectKey, value: unknown) => ResolverObjectKey),\n  prop: ResolverObjectKey,\n  value: unknown\n) {\n  return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\n\nconst getScope = (key: ResolverObjectKey, parent: AnyObject) => key === true ? parent\n  : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\n\nfunction addScopes(\n  set: Set<AnyObject>,\n  parentScopes: AnyObject[],\n  key: ResolverObjectKey,\n  parentFallback: ResolverObjectKey,\n  value: unknown\n) {\n  for (const parent of parentScopes) {\n    const scope = getScope(key, parent);\n    if (scope) {\n      set.add(scope);\n      const fallback = resolveFallback(scope._fallback, key, value);\n      if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n        // When we reach the descriptor that defines a new _fallback, return that.\n        // The fallback will resume to that new scope.\n        return fallback;\n      }\n    } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n      // Fallback to `false` results to `false`, when falling back to different key.\n      // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n      return null;\n    }\n  }\n  return false;\n}\n\nfunction createSubResolver(\n  parentScopes: AnyObject[],\n  resolver: ResolverCache,\n  prop: ResolverObjectKey,\n  value: unknown\n) {\n  const rootScopes = resolver._rootScopes;\n  const fallback = resolveFallback(resolver._fallback, prop, value);\n  const allScopes = [...parentScopes, ...rootScopes];\n  const set = new Set<AnyObject>();\n  set.add(value);\n  let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n  if (key === null) {\n    return false;\n  }\n  if (typeof fallback !== 'undefined' && fallback !== prop) {\n    key = addScopesFromKey(set, allScopes, fallback, key, value);\n    if (key === null) {\n      return false;\n    }\n  }\n  return _createResolver(Array.from(set), [''], rootScopes, fallback,\n    () => subGetTarget(resolver, prop as string, value));\n}\n\nfunction addScopesFromKey(\n  set: Set<AnyObject>,\n  allScopes: AnyObject[],\n  key: ResolverObjectKey,\n  fallback: ResolverObjectKey,\n  item: unknown\n) {\n  while (key) {\n    key = addScopes(set, allScopes, key, fallback, item);\n  }\n  return key;\n}\n\nfunction subGetTarget(\n  resolver: ResolverCache,\n  prop: string,\n  value: unknown\n) {\n  const parent = resolver._getTarget();\n  if (!(prop in parent)) {\n    parent[prop] = {};\n  }\n  const target = parent[prop];\n  if (isArray(target) && isObject(value)) {\n    // For array of objects, the object is used to store updated values\n    return value;\n  }\n  return target || {};\n}\n\nfunction _resolveWithPrefixes(\n  prop: string,\n  prefixes: string[],\n  scopes: AnyObject[],\n  proxy: ResolverProxy\n) {\n  let value: unknown;\n  for (const prefix of prefixes) {\n    value = _resolve(readKey(prefix, prop), scopes);\n    if (typeof value !== 'undefined') {\n      return needsSubResolver(prop, value)\n        ? createSubResolver(scopes, proxy, prop, value)\n        : value;\n    }\n  }\n}\n\nfunction _resolve(key: string, scopes: AnyObject[]) {\n  for (const scope of scopes) {\n    if (!scope) {\n      continue;\n    }\n    const value = scope[key];\n    if (typeof value !== 'undefined') {\n      return value;\n    }\n  }\n}\n\nfunction getKeysFromAllScopes(target: ResolverCache) {\n  let keys = target._keys;\n  if (!keys) {\n    keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n  }\n  return keys;\n}\n\nfunction resolveKeysFromAllScopes(scopes: AnyObject[]) {\n  const set = new Set<string>();\n  for (const scope of scopes) {\n    for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n      set.add(key);\n    }\n  }\n  return Array.from(set);\n}\n\nexport function _parseObjectDataRadialScale(\n  meta: ChartMeta<'line' | 'scatter'>,\n  data: AnyObject[],\n  start: number,\n  count: number\n) {\n  const {iScale} = meta;\n  const {key = 'r'} = this._parsing;\n  const parsed = new Array<{r: unknown}>(count);\n  let i: number, ilen: number, index: number, item: AnyObject;\n\n  for (i = 0, ilen = count; i < ilen; ++i) {\n    index = i + start;\n    item = data[index];\n    parsed[i] = {\n      r: iScale.parse(resolveObjectKey(item, key), index)\n    };\n  }\n  return parsed;\n}\n", "import {almostEquals, distanceBetweenPoints, sign} from './helpers.math.js';\nimport {_isPointInArea} from './helpers.canvas.js';\nimport type {ChartArea} from '../types/index.js';\nimport type {SplinePoint} from '../types/geometric.js';\n\nconst EPSILON = Number.EPSILON || 1e-14;\n\ntype OptionalSplinePoint = SplinePoint | false\nconst getPoint = (points: SplinePoint[], i: number): OptionalSplinePoint => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis: 'x' | 'y') => indexAxis === 'x' ? 'y' : 'x';\n\nexport function splineCurve(\n  firstPoint: SplinePoint,\n  middlePoint: SplinePoint,\n  afterPoint: SplinePoint,\n  t: number\n): {\n    previous: SplinePoint\n    next: SplinePoint\n  } {\n  // Props to Rob Spencer at scaled innovation for his post on splining between points\n  // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\n  // This function must also respect \"skipped\" points\n\n  const previous = firstPoint.skip ? middlePoint : firstPoint;\n  const current = middlePoint;\n  const next = afterPoint.skip ? middlePoint : afterPoint;\n  const d01 = distanceBetweenPoints(current, previous);\n  const d12 = distanceBetweenPoints(next, current);\n\n  let s01 = d01 / (d01 + d12);\n  let s12 = d12 / (d01 + d12);\n\n  // If all points are the same, s01 & s02 will be inf\n  s01 = isNaN(s01) ? 0 : s01;\n  s12 = isNaN(s12) ? 0 : s12;\n\n  const fa = t * s01; // scaling factor for triangle Ta\n  const fb = t * s12;\n\n  return {\n    previous: {\n      x: current.x - fa * (next.x - previous.x),\n      y: current.y - fa * (next.y - previous.y)\n    },\n    next: {\n      x: current.x + fb * (next.x - previous.x),\n      y: current.y + fb * (next.y - previous.y)\n    }\n  };\n}\n\n/**\n * Adjust tangents to ensure monotonic properties\n */\nfunction monotoneAdjust(points: SplinePoint[], deltaK: number[], mK: number[]) {\n  const pointsLen = points.length;\n\n  let alphaK: number, betaK: number, tauK: number, squaredMagnitude: number, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen - 1; ++i) {\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent || !pointAfter) {\n      continue;\n    }\n\n    if (almostEquals(deltaK[i], 0, EPSILON)) {\n      mK[i] = mK[i + 1] = 0;\n      continue;\n    }\n\n    alphaK = mK[i] / deltaK[i];\n    betaK = mK[i + 1] / deltaK[i];\n    squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n    if (squaredMagnitude <= 9) {\n      continue;\n    }\n\n    tauK = 3 / Math.sqrt(squaredMagnitude);\n    mK[i] = alphaK * tauK * deltaK[i];\n    mK[i + 1] = betaK * tauK * deltaK[i];\n  }\n}\n\nfunction monotoneCompute(points: SplinePoint[], mK: number[], indexAxis: 'x' | 'y' = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  let delta: number, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n\n  for (let i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n\n    const iPixel = pointCurrent[indexAxis];\n    const vPixel = pointCurrent[valueAxis];\n    if (pointBefore) {\n      delta = (iPixel - pointBefore[indexAxis]) / 3;\n      pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n      pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n    }\n    if (pointAfter) {\n      delta = (pointAfter[indexAxis] - iPixel) / 3;\n      pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n      pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n    }\n  }\n}\n\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */\nexport function splineCurveMonotone(points: SplinePoint[], indexAxis: 'x' | 'y' = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  const deltaK: number[] = Array(pointsLen).fill(0);\n  const mK: number[] = Array(pointsLen);\n\n  // Calculate slopes (deltaK) and initialize tangents (mK)\n  let i, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n\n  for (i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n\n    if (pointAfter) {\n      const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n\n      // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n      deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n    }\n    mK[i] = !pointBefore ? deltaK[i]\n      : !pointAfter ? deltaK[i - 1]\n        : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n          : (deltaK[i - 1] + deltaK[i]) / 2;\n  }\n\n  monotoneAdjust(points, deltaK, mK);\n\n  monotoneCompute(points, mK, indexAxis);\n}\n\nfunction capControlPoint(pt: number, min: number, max: number) {\n  return Math.max(Math.min(pt, max), min);\n}\n\nfunction capBezierPoints(points: SplinePoint[], area: ChartArea) {\n  let i, ilen, point, inArea, inAreaPrev;\n  let inAreaNext = _isPointInArea(points[0], area);\n  for (i = 0, ilen = points.length; i < ilen; ++i) {\n    inAreaPrev = inArea;\n    inArea = inAreaNext;\n    inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n    if (!inArea) {\n      continue;\n    }\n    point = points[i];\n    if (inAreaPrev) {\n      point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n      point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n    }\n    if (inAreaNext) {\n      point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n      point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n    }\n  }\n}\n\n/**\n * @private\n */\nexport function _updateBezierControlPoints(\n  points: SplinePoint[],\n  options,\n  area: ChartArea,\n  loop: boolean,\n  indexAxis: 'x' | 'y'\n) {\n  let i: number, ilen: number, point: SplinePoint, controlPoints: ReturnType<typeof splineCurve>;\n\n  // Only consider points that are drawn in case the spanGaps option is used\n  if (options.spanGaps) {\n    points = points.filter((pt) => !pt.skip);\n  }\n\n  if (options.cubicInterpolationMode === 'monotone') {\n    splineCurveMonotone(points, indexAxis);\n  } else {\n    let prev = loop ? points[points.length - 1] : points[0];\n    for (i = 0, ilen = points.length; i < ilen; ++i) {\n      point = points[i];\n      controlPoints = splineCurve(\n        prev,\n        point,\n        points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n        options.tension\n      );\n      point.cp1x = controlPoints.previous.x;\n      point.cp1y = controlPoints.previous.y;\n      point.cp2x = controlPoints.next.x;\n      point.cp2y = controlPoints.next.y;\n      prev = point;\n    }\n  }\n\n  if (options.capBezierPoints) {\n    capBezierPoints(points, area);\n  }\n}\n", "import type {ChartArea, Scale} from '../types/index.js';\nimport type PrivateChart from '../core/core.controller.js';\nimport type {Chart, ChartEvent} from '../types.js';\nimport {INFINITY} from './helpers.math.js';\n\n/**\n * @private\n */\nexport function _isDomSupported(): boolean {\n  return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/**\n * @private\n */\nexport function _getParentNode(domNode: HTMLCanvasElement): HTMLCanvasElement {\n  let parent = domNode.parentNode;\n  if (parent && parent.toString() === '[object ShadowRoot]') {\n    parent = (parent as ShadowRoot).host;\n  }\n  return parent as HTMLCanvasElement;\n}\n\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */\n\nfunction parseMaxStyle(styleValue: string | number, node: HTMLElement, parentProperty: string) {\n  let valueInPixels: number;\n  if (typeof styleValue === 'string') {\n    valueInPixels = parseInt(styleValue, 10);\n\n    if (styleValue.indexOf('%') !== -1) {\n      // percentage * size in dimension\n      valueInPixels = (valueInPixels / 100) * node.parentNode[parentProperty];\n    }\n  } else {\n    valueInPixels = styleValue;\n  }\n\n  return valueInPixels;\n}\n\nconst getComputedStyle = (element: HTMLElement): CSSStyleDeclaration =>\n  element.ownerDocument.defaultView.getComputedStyle(element, null);\n\nexport function getStyle(el: HTMLElement, property: string): string {\n  return getComputedStyle(el).getPropertyValue(property);\n}\n\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles: CSSStyleDeclaration, style: string, suffix?: string): ChartArea {\n  const result = {} as ChartArea;\n  suffix = suffix ? '-' + suffix : '';\n  for (let i = 0; i < 4; i++) {\n    const pos = positions[i];\n    result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n  }\n  result.width = result.left + result.right;\n  result.height = result.top + result.bottom;\n  return result;\n}\n\nconst useOffsetPos = (x: number, y: number, target: HTMLElement | EventTarget) =>\n  (x > 0 || y > 0) && (!target || !(target as HTMLElement).shadowRoot);\n\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */\nfunction getCanvasPosition(\n  e: Event | TouchEvent | MouseEvent,\n  canvas: HTMLCanvasElement\n): {\n    x: number;\n    y: number;\n    box: boolean;\n  } {\n  const touches = (e as TouchEvent).touches;\n  const source = (touches && touches.length ? touches[0] : e) as MouseEvent;\n  const {offsetX, offsetY} = source as MouseEvent;\n  let box = false;\n  let x, y;\n  if (useOffsetPos(offsetX, offsetY, e.target)) {\n    x = offsetX;\n    y = offsetY;\n  } else {\n    const rect = canvas.getBoundingClientRect();\n    x = source.clientX - rect.left;\n    y = source.clientY - rect.top;\n    box = true;\n  }\n  return {x, y, box};\n}\n\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */\n\nexport function getRelativePosition(\n  event: Event | ChartEvent | TouchEvent | MouseEvent,\n  chart: Chart | PrivateChart\n): { x: number; y: number } {\n  if ('native' in event) {\n    return event;\n  }\n\n  const {canvas, currentDevicePixelRatio} = chart;\n  const style = getComputedStyle(canvas);\n  const borderBox = style.boxSizing === 'border-box';\n  const paddings = getPositionedStyle(style, 'padding');\n  const borders = getPositionedStyle(style, 'border', 'width');\n  const {x, y, box} = getCanvasPosition(event, canvas);\n  const xOffset = paddings.left + (box && borders.left);\n  const yOffset = paddings.top + (box && borders.top);\n\n  let {width, height} = chart;\n  if (borderBox) {\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  return {\n    x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n    y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n  };\n}\n\nfunction getContainerSize(canvas: HTMLCanvasElement, width: number, height: number): Partial<Scale> {\n  let maxWidth: number, maxHeight: number;\n\n  if (width === undefined || height === undefined) {\n    const container = canvas && _getParentNode(canvas);\n    if (!container) {\n      width = canvas.clientWidth;\n      height = canvas.clientHeight;\n    } else {\n      const rect = container.getBoundingClientRect(); // this is the border box of the container\n      const containerStyle = getComputedStyle(container);\n      const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n      const containerPadding = getPositionedStyle(containerStyle, 'padding');\n      width = rect.width - containerPadding.width - containerBorder.width;\n      height = rect.height - containerPadding.height - containerBorder.height;\n      maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n      maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n    }\n  }\n  return {\n    width,\n    height,\n    maxWidth: maxWidth || INFINITY,\n    maxHeight: maxHeight || INFINITY\n  };\n}\n\nconst round1 = (v: number) => Math.round(v * 10) / 10;\n\n// eslint-disable-next-line complexity\nexport function getMaximumSize(\n  canvas: HTMLCanvasElement,\n  bbWidth?: number,\n  bbHeight?: number,\n  aspectRatio?: number\n): { width: number; height: number } {\n  const style = getComputedStyle(canvas);\n  const margins = getPositionedStyle(style, 'margin');\n  const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n  const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n  const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n  let {width, height} = containerSize;\n\n  if (style.boxSizing === 'content-box') {\n    const borders = getPositionedStyle(style, 'border', 'width');\n    const paddings = getPositionedStyle(style, 'padding');\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  width = Math.max(0, width - margins.width);\n  height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n  width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n  height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n  if (width && !height) {\n    // https://github.com/chartjs/Chart.js/issues/4659\n    // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n    height = round1(width / 2);\n  }\n\n  const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n\n  if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n    height = containerSize.height;\n    width = round1(Math.floor(height * aspectRatio));\n  }\n\n  return {width, height};\n}\n\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */\nexport function retinaScale(\n  chart: Chart | PrivateChart,\n  forceRatio: number,\n  forceStyle?: boolean\n): boolean | void {\n  const pixelRatio = forceRatio || 1;\n  const deviceHeight = round1(chart.height * pixelRatio);\n  const deviceWidth = round1(chart.width * pixelRatio);\n\n  (chart as PrivateChart).height = round1(chart.height);\n  (chart as PrivateChart).width = round1(chart.width);\n\n  const canvas = chart.canvas;\n\n  // If no style has been set on the canvas, the render size is used as display size,\n  // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n  // See https://github.com/chartjs/Chart.js/issues/3575\n  if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n    canvas.style.height = `${chart.height}px`;\n    canvas.style.width = `${chart.width}px`;\n  }\n\n  if (chart.currentDevicePixelRatio !== pixelRatio\n      || canvas.height !== deviceHeight\n      || canvas.width !== deviceWidth) {\n    (chart as PrivateChart).currentDevicePixelRatio = pixelRatio;\n    canvas.height = deviceHeight;\n    canvas.width = deviceWidth;\n    chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n    return true;\n  }\n  return false;\n}\n\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */\nexport const supportsEventListenerOptions = (function() {\n  let passiveSupported = false;\n  try {\n    const options = {\n      get passive() { // This function will be called when the browser attempts to access the passive property.\n        passiveSupported = true;\n        return false;\n      }\n    } as EventListenerOptions;\n\n    if (_isDomSupported()) {\n      window.addEventListener('test', null, options);\n      window.removeEventListener('test', null, options);\n    }\n  } catch (e) {\n    // continue regardless of error\n  }\n  return passiveSupported;\n}());\n\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */\n\nexport function readUsedSize(\n  element: HTMLElement,\n  property: 'width' | 'height'\n): number | undefined {\n  const value = getStyle(element, property);\n  const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n  return matches ? +matches[1] : undefined;\n}\n", "import type {Point, SplinePoint} from '../types/geometric.js';\n\n/**\n * @private\n */\nexport function _pointInLine(p1: Point, p2: Point, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: p1.y + t * (p2.y - p1.y)\n  };\n}\n\n/**\n * @private\n */\nexport function _steppedInterpolation(\n  p1: Point,\n  p2: Point,\n  t: number, mode: 'middle' | 'after' | unknown\n) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n      : mode === 'after' ? t < 1 ? p1.y : p2.y\n        : t > 0 ? p2.y : p1.y\n  };\n}\n\n/**\n * @private\n */\nexport function _bezierInterpolation(p1: SplinePoint, p2: SplinePoint, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n  const cp1 = {x: p1.cp2x, y: p1.cp2y};\n  const cp2 = {x: p2.cp1x, y: p2.cp1y};\n  const a = _pointInLine(p1, cp1, t);\n  const b = _pointInLine(cp1, cp2, t);\n  const c = _pointInLine(cp2, p2, t);\n  const d = _pointInLine(a, b, t);\n  const e = _pointInLine(b, c, t);\n  return _pointInLine(d, e, t);\n}\n", "export interface RTLAdapter {\n  x(x: number): number;\n  setWidth(w: number): void;\n  textAlign(align: 'center' | 'left' | 'right'): 'center' | 'left' | 'right';\n  xPlus(x: number, value: number): number;\n  leftForLtr(x: number, itemWidth: number): number;\n}\n\nconst getRightToLeftAdapter = function(rectX: number, width: number): RTLAdapter {\n  return {\n    x(x) {\n      return rectX + rectX + width - x;\n    },\n    setWidth(w) {\n      width = w;\n    },\n    textAlign(align) {\n      if (align === 'center') {\n        return align;\n      }\n      return align === 'right' ? 'left' : 'right';\n    },\n    xPlus(x, value) {\n      return x - value;\n    },\n    leftForLtr(x, itemWidth) {\n      return x - itemWidth;\n    },\n  };\n};\n\nconst getLeftToRightAdapter = function(): RTLAdapter {\n  return {\n    x(x) {\n      return x;\n    },\n    setWidth(w) { // eslint-disable-line no-unused-vars\n    },\n    textAlign(align) {\n      return align;\n    },\n    xPlus(x, value) {\n      return x + value;\n    },\n    leftForLtr(x, _itemWidth) { // eslint-disable-line @typescript-eslint/no-unused-vars\n      return x;\n    },\n  };\n};\n\nexport function getRtlAdapter(rtl: boolean, rectX: number, width: number) {\n  return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\n\nexport function overrideTextDirection(ctx: CanvasRenderingContext2D, direction: 'ltr' | 'rtl') {\n  let style: CSSStyleDeclaration, original: [string, string];\n  if (direction === 'ltr' || direction === 'rtl') {\n    style = ctx.canvas.style;\n    original = [\n      style.getPropertyValue('direction'),\n      style.getPropertyPriority('direction'),\n    ];\n\n    style.setProperty('direction', direction, 'important');\n    (ctx as { prevTextDirection?: [string, string] }).prevTextDirection = original;\n  }\n}\n\nexport function restoreTextDirection(ctx: CanvasRenderingContext2D, original?: [string, string]) {\n  if (original !== undefined) {\n    delete (ctx as { prevTextDirection?: [string, string] }).prevTextDirection;\n    ctx.canvas.style.setProperty('direction', original[0], original[1]);\n  }\n}\n", "import {_angleBetween, _angleDiff, _isBetween, _normalizeAngle} from './helpers.math.js';\nimport {createContext} from './helpers.options.js';\nimport {isPatternOrGradient} from './helpers.color.js';\n\n/**\n * @typedef { import('../elements/element.line.js').default } LineElement\n * @typedef { import('../elements/element.point.js').default } PointElement\n * @typedef {{start: number, end: number, loop: boolean, style?: any}} Segment\n */\n\nfunction propertyFn(property) {\n  if (property === 'angle') {\n    return {\n      between: _angleBetween,\n      compare: _angleDiff,\n      normalize: _normalizeAngle,\n    };\n  }\n  return {\n    between: _isBetween,\n    compare: (a, b) => a - b,\n    normalize: x => x\n  };\n}\n\nfunction normalizeSegment({start, end, count, loop, style}) {\n  return {\n    start: start % count,\n    end: end % count,\n    loop: loop && (end - start + 1) % count === 0,\n    style\n  };\n}\n\nfunction getSegment(segment, points, bounds) {\n  const {property, start: startBound, end: endBound} = bounds;\n  const {between, normalize} = propertyFn(property);\n  const count = points.length;\n  // eslint-disable-next-line prefer-const\n  let {start, end, loop} = segment;\n  let i, ilen;\n\n  if (loop) {\n    start += count;\n    end += count;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n        break;\n      }\n      start--;\n      end--;\n    }\n    start %= count;\n    end %= count;\n  }\n\n  if (end < start) {\n    end += count;\n  }\n  return {start, end, loop, style: segment.style};\n}\n\n/**\n * Returns the sub-segment(s) of a line segment that fall in the given bounds\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} [segment.style] - segment style\n * @param {PointElement[]} points - the points that this segment refers to\n * @param {object} [bounds]\n * @param {string} bounds.property - the property of a `PointElement` we are bounding. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the property\n * @param {number} bounds.end - end value of the property\n * @private\n **/\nexport function _boundSegment(segment, points, bounds) {\n  if (!bounds) {\n    return [segment];\n  }\n\n  const {property, start: startBound, end: endBound} = bounds;\n  const count = points.length;\n  const {compare, between, normalize} = propertyFn(property);\n  const {start, end, loop, style} = getSegment(segment, points, bounds);\n\n  const result = [];\n  let inside = false;\n  let subStart = null;\n  let value, point, prevValue;\n\n  const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n  const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n  const shouldStart = () => inside || startIsBefore();\n  const shouldStop = () => !inside || endIsBefore();\n\n  for (let i = start, prev = start; i <= end; ++i) {\n    point = points[i % count];\n\n    if (point.skip) {\n      continue;\n    }\n\n    value = normalize(point[property]);\n\n    if (value === prevValue) {\n      continue;\n    }\n\n    inside = between(value, startBound, endBound);\n\n    if (subStart === null && shouldStart()) {\n      subStart = compare(value, startBound) === 0 ? i : prev;\n    }\n\n    if (subStart !== null && shouldStop()) {\n      result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n      subStart = null;\n    }\n    prev = i;\n    prevValue = value;\n  }\n\n  if (subStart !== null) {\n    result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n  }\n\n  return result;\n}\n\n\n/**\n * Returns the segments of the line that are inside given bounds\n * @param {LineElement} line\n * @param {object} [bounds]\n * @param {string} bounds.property - the property we are bounding with. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the `property`\n * @param {number} bounds.end - end value of the `property`\n * @private\n */\nexport function _boundSegments(line, bounds) {\n  const result = [];\n  const segments = line.segments;\n\n  for (let i = 0; i < segments.length; i++) {\n    const sub = _boundSegment(segments[i], line.points, bounds);\n    if (sub.length) {\n      result.push(...sub);\n    }\n  }\n  return result;\n}\n\n/**\n * Find start and end index of a line.\n */\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n  let start = 0;\n  let end = count - 1;\n\n  if (loop && !spanGaps) {\n    // loop and not spanning gaps, first find a gap to start from\n    while (start < count && !points[start].skip) {\n      start++;\n    }\n  }\n\n  // find first non skipped point (after the first gap possibly)\n  while (start < count && points[start].skip) {\n    start++;\n  }\n\n  // if we looped to count, start needs to be 0\n  start %= count;\n\n  if (loop) {\n    // loop will go past count, if start > 0\n    end += start;\n  }\n\n  while (end > start && points[end % count].skip) {\n    end--;\n  }\n\n  // end could be more than count, normalize\n  end %= count;\n\n  return {start, end};\n}\n\n/**\n * Compute solid segments from Points, when spanGaps === false\n * @param {PointElement[]} points - the points\n * @param {number} start - start index\n * @param {number} max - max index (can go past count on a loop)\n * @param {boolean} loop - boolean indicating that this would be a loop if no gaps are found\n */\nfunction solidSegments(points, start, max, loop) {\n  const count = points.length;\n  const result = [];\n  let last = start;\n  let prev = points[start];\n  let end;\n\n  for (end = start + 1; end <= max; ++end) {\n    const cur = points[end % count];\n    if (cur.skip || cur.stop) {\n      if (!prev.skip) {\n        loop = false;\n        result.push({start: start % count, end: (end - 1) % count, loop});\n        // @ts-ignore\n        start = last = cur.stop ? end : null;\n      }\n    } else {\n      last = end;\n      if (prev.skip) {\n        start = end;\n      }\n    }\n    prev = cur;\n  }\n\n  if (last !== null) {\n    result.push({start: start % count, end: last % count, loop});\n  }\n\n  return result;\n}\n\n/**\n * Compute the continuous segments that define the whole line\n * There can be skipped points within a segment, if spanGaps is true.\n * @param {LineElement} line\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n * @private\n */\nexport function _computeSegments(line, segmentOptions) {\n  const points = line.points;\n  const spanGaps = line.options.spanGaps;\n  const count = points.length;\n\n  if (!count) {\n    return [];\n  }\n\n  const loop = !!line._loop;\n  const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n\n  if (spanGaps === true) {\n    return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n  }\n\n  const max = end < start ? end + count : end;\n  const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n  return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n\n/**\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction splitByStyles(line, segments, points, segmentOptions) {\n  if (!segmentOptions || !segmentOptions.setContext || !points) {\n    return segments;\n  }\n  return doSplitByStyles(line, segments, points, segmentOptions);\n}\n\n/**\n * @param {LineElement} line\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n  const chartContext = line._chart.getContext();\n  const baseStyle = readStyle(line.options);\n  const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n  const count = points.length;\n  const result = [];\n  let prevStyle = baseStyle;\n  let start = segments[0].start;\n  let i = start;\n\n  function addStyle(s, e, l, st) {\n    const dir = spanGaps ? -1 : 1;\n    if (s === e) {\n      return;\n    }\n    // Style can not start/end on a skipped point, adjust indices accordingly\n    s += count;\n    while (points[s % count].skip) {\n      s -= dir;\n    }\n    while (points[e % count].skip) {\n      e += dir;\n    }\n    if (s % count !== e % count) {\n      result.push({start: s % count, end: e % count, loop: l, style: st});\n      prevStyle = st;\n      start = e % count;\n    }\n  }\n\n  for (const segment of segments) {\n    start = spanGaps ? start : segment.start;\n    let prev = points[start % count];\n    let style;\n    for (i = start + 1; i <= segment.end; i++) {\n      const pt = points[i % count];\n      style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n        type: 'segment',\n        p0: prev,\n        p1: pt,\n        p0DataIndex: (i - 1) % count,\n        p1DataIndex: i % count,\n        datasetIndex\n      })));\n      if (styleChanged(style, prevStyle)) {\n        addStyle(start, i - 1, segment.loop, prevStyle);\n      }\n      prev = pt;\n      prevStyle = style;\n    }\n    if (start < i - 1) {\n      addStyle(start, i - 1, segment.loop, prevStyle);\n    }\n  }\n\n  return result;\n}\n\nfunction readStyle(options) {\n  return {\n    backgroundColor: options.backgroundColor,\n    borderCapStyle: options.borderCapStyle,\n    borderDash: options.borderDash,\n    borderDashOffset: options.borderDashOffset,\n    borderJoinStyle: options.borderJoinStyle,\n    borderWidth: options.borderWidth,\n    borderColor: options.borderColor\n  };\n}\n\nfunction styleChanged(style, prevStyle) {\n  if (!prevStyle) {\n    return false;\n  }\n  const cache = [];\n  const replacer = function(key, value) {\n    if (!isPatternOrGradient(value)) {\n      return value;\n    }\n    if (!cache.includes(value)) {\n      cache.push(value);\n    }\n    return cache.indexOf(value);\n  };\n  return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n", "import type {Chart, ChartArea, ChartMeta, Scale, TRBL} from '../types/index.js';\n\nfunction getSizeForArea(scale: Scale, chartArea: ChartArea, field: keyof ChartArea) {\n  return scale.options.clip ? scale[field] : chartArea[field];\n}\n\nfunction getDatasetArea(meta: ChartMeta, chartArea: ChartArea): TRBL {\n  const {xScale, yScale} = meta;\n  if (xScale && yScale) {\n    return {\n      left: getSizeForArea(xScale, chartArea, 'left'),\n      right: getSizeForArea(xScale, chartArea, 'right'),\n      top: getSizeForArea(yScale, chartArea, 'top'),\n      bottom: getSizeForArea(yScale, chartArea, 'bottom')\n    };\n  }\n  return chartArea;\n}\n\nexport function getDatasetClipArea(chart: Chart, meta: ChartMeta): TRBL | false {\n  const clip = meta._clip;\n  if (clip.disabled) {\n    return false;\n  }\n  const area = getDatasetArea(meta, chart.chartArea);\n\n  return {\n    left: clip.left === false ? 0 : area.left - (clip.left === true ? 0 : clip.left),\n    right: clip.right === false ? chart.width : area.right + (clip.right === true ? 0 : clip.right),\n    top: clip.top === false ? 0 : area.top - (clip.top === true ? 0 : clip.top),\n    bottom: clip.bottom === false ? chart.height : area.bottom + (clip.bottom === true ? 0 : clip.bottom)\n  };\n}\n", "import {requestAnimFrame} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('./core.animation.js').default } Animation\n * @typedef { import('./core.controller.js').default } Chart\n */\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is export for typedoc\n */\nexport class Animator {\n  constructor() {\n    this._request = null;\n    this._charts = new Map();\n    this._running = false;\n    this._lastDate = undefined;\n  }\n\n  /**\n\t * @private\n\t */\n  _notify(chart, anims, date, type) {\n    const callbacks = anims.listeners[type];\n    const numSteps = anims.duration;\n\n    callbacks.forEach(fn => fn({\n      chart,\n      initial: anims.initial,\n      numSteps,\n      currentStep: Math.min(date - anims.start, numSteps)\n    }));\n  }\n\n  /**\n\t * @private\n\t */\n  _refresh() {\n    if (this._request) {\n      return;\n    }\n    this._running = true;\n\n    this._request = requestAnimFrame.call(window, () => {\n      this._update();\n      this._request = null;\n\n      if (this._running) {\n        this._refresh();\n      }\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _update(date = Date.now()) {\n    let remaining = 0;\n\n    this._charts.forEach((anims, chart) => {\n      if (!anims.running || !anims.items.length) {\n        return;\n      }\n      const items = anims.items;\n      let i = items.length - 1;\n      let draw = false;\n      let item;\n\n      for (; i >= 0; --i) {\n        item = items[i];\n\n        if (item._active) {\n          if (item._total > anims.duration) {\n            // if the animation has been updated and its duration prolonged,\n            // update to total duration of current animations run (for progress event)\n            anims.duration = item._total;\n          }\n          item.tick(date);\n          draw = true;\n        } else {\n          // Remove the item by replacing it with last item and removing the last\n          // A lot faster than splice.\n          items[i] = items[items.length - 1];\n          items.pop();\n        }\n      }\n\n      if (draw) {\n        chart.draw();\n        this._notify(chart, anims, date, 'progress');\n      }\n\n      if (!items.length) {\n        anims.running = false;\n        this._notify(chart, anims, date, 'complete');\n        anims.initial = false;\n      }\n\n      remaining += items.length;\n    });\n\n    this._lastDate = date;\n\n    if (remaining === 0) {\n      this._running = false;\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _getAnims(chart) {\n    const charts = this._charts;\n    let anims = charts.get(chart);\n    if (!anims) {\n      anims = {\n        running: false,\n        initial: true,\n        items: [],\n        listeners: {\n          complete: [],\n          progress: []\n        }\n      };\n      charts.set(chart, anims);\n    }\n    return anims;\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @param {string} event - event name\n\t * @param {Function} cb - callback\n\t */\n  listen(chart, event, cb) {\n    this._getAnims(chart).listeners[event].push(cb);\n  }\n\n  /**\n\t * Add animations\n\t * @param {Chart} chart\n\t * @param {Animation[]} items - animations\n\t */\n  add(chart, items) {\n    if (!items || !items.length) {\n      return;\n    }\n    this._getAnims(chart).items.push(...items);\n  }\n\n  /**\n\t * Counts number of active animations for the chart\n\t * @param {Chart} chart\n\t */\n  has(chart) {\n    return this._getAnims(chart).items.length > 0;\n  }\n\n  /**\n\t * Start animating (all charts)\n\t * @param {Chart} chart\n\t */\n  start(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims) {\n      return;\n    }\n    anims.running = true;\n    anims.start = Date.now();\n    anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n    this._refresh();\n  }\n\n  running(chart) {\n    if (!this._running) {\n      return false;\n    }\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.running || !anims.items.length) {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n\t * Stop all animations for the chart\n\t * @param {Chart} chart\n\t */\n  stop(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.items.length) {\n      return;\n    }\n    const items = anims.items;\n    let i = items.length - 1;\n\n    for (; i >= 0; --i) {\n      items[i].cancel();\n    }\n    anims.items = [];\n    this._notify(chart, anims, Date.now(), 'complete');\n  }\n\n  /**\n\t * Remove chart from Animator\n\t * @param {Chart} chart\n\t */\n  remove(chart) {\n    return this._charts.delete(chart);\n  }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Animator();\n", "import effects from '../helpers/helpers.easing.js';\nimport {resolve} from '../helpers/helpers.options.js';\nimport {color as helpersColor} from '../helpers/helpers.color.js';\n\nconst transparent = 'transparent';\nconst interpolators = {\n  boolean(from, to, factor) {\n    return factor > 0.5 ? to : from;\n  },\n  /**\n   * @param {string} from\n   * @param {string} to\n   * @param {number} factor\n   */\n  color(from, to, factor) {\n    const c0 = helpersColor(from || transparent);\n    const c1 = c0.valid && helpersColor(to || transparent);\n    return c1 && c1.valid\n      ? c1.mix(c0, factor).hexString()\n      : to;\n  },\n  number(from, to, factor) {\n    return from + (to - from) * factor;\n  }\n};\n\nexport default class Animation {\n  constructor(cfg, target, prop, to) {\n    const currentValue = target[prop];\n\n    to = resolve([cfg.to, to, currentValue, cfg.from]);\n    const from = resolve([cfg.from, currentValue, to]);\n\n    this._active = true;\n    this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n    this._easing = effects[cfg.easing] || effects.linear;\n    this._start = Math.floor(Date.now() + (cfg.delay || 0));\n    this._duration = this._total = Math.floor(cfg.duration);\n    this._loop = !!cfg.loop;\n    this._target = target;\n    this._prop = prop;\n    this._from = from;\n    this._to = to;\n    this._promises = undefined;\n  }\n\n  active() {\n    return this._active;\n  }\n\n  update(cfg, to, date) {\n    if (this._active) {\n      this._notify(false);\n\n      const currentValue = this._target[this._prop];\n      const elapsed = date - this._start;\n      const remain = this._duration - elapsed;\n      this._start = date;\n      this._duration = Math.floor(Math.max(remain, cfg.duration));\n      this._total += elapsed;\n      this._loop = !!cfg.loop;\n      this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n      this._from = resolve([cfg.from, currentValue, to]);\n    }\n  }\n\n  cancel() {\n    if (this._active) {\n      // update current evaluated value, for smoother animations\n      this.tick(Date.now());\n      this._active = false;\n      this._notify(false);\n    }\n  }\n\n  tick(date) {\n    const elapsed = date - this._start;\n    const duration = this._duration;\n    const prop = this._prop;\n    const from = this._from;\n    const loop = this._loop;\n    const to = this._to;\n    let factor;\n\n    this._active = from !== to && (loop || (elapsed < duration));\n\n    if (!this._active) {\n      this._target[prop] = to;\n      this._notify(true);\n      return;\n    }\n\n    if (elapsed < 0) {\n      this._target[prop] = from;\n      return;\n    }\n\n    factor = (elapsed / duration) % 2;\n    factor = loop && factor > 1 ? 2 - factor : factor;\n    factor = this._easing(Math.min(1, Math.max(0, factor)));\n\n    this._target[prop] = this._fn(from, to, factor);\n  }\n\n  wait() {\n    const promises = this._promises || (this._promises = []);\n    return new Promise((res, rej) => {\n      promises.push({res, rej});\n    });\n  }\n\n  _notify(resolved) {\n    const method = resolved ? 'res' : 'rej';\n    const promises = this._promises || [];\n    for (let i = 0; i < promises.length; i++) {\n      promises[i][method]();\n    }\n  }\n}\n", "import animator from './core.animator.js';\nimport Animation from './core.animation.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isObject} from '../helpers/helpers.core.js';\n\nexport default class Animations {\n  constructor(chart, config) {\n    this._chart = chart;\n    this._properties = new Map();\n    this.configure(config);\n  }\n\n  configure(config) {\n    if (!isObject(config)) {\n      return;\n    }\n\n    const animationOptions = Object.keys(defaults.animation);\n    const animatedProps = this._properties;\n\n    Object.getOwnPropertyNames(config).forEach(key => {\n      const cfg = config[key];\n      if (!isObject(cfg)) {\n        return;\n      }\n      const resolved = {};\n      for (const option of animationOptions) {\n        resolved[option] = cfg[option];\n      }\n\n      (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n        if (prop === key || !animatedProps.has(prop)) {\n          animatedProps.set(prop, resolved);\n        }\n      });\n    });\n  }\n\n  /**\n\t * Utility to handle animation of `options`.\n\t * @private\n\t */\n  _animateOptions(target, values) {\n    const newOptions = values.options;\n    const options = resolveTargetOptions(target, newOptions);\n    if (!options) {\n      return [];\n    }\n\n    const animations = this._createAnimations(options, newOptions);\n    if (newOptions.$shared) {\n      // Going to shared options:\n      // After all animations are done, assign the shared options object to the element\n      // So any new updates to the shared options are observed\n      awaitAll(target.options.$animations, newOptions).then(() => {\n        target.options = newOptions;\n      }, () => {\n        // rejected, noop\n      });\n    }\n\n    return animations;\n  }\n\n  /**\n\t * @private\n\t */\n  _createAnimations(target, values) {\n    const animatedProps = this._properties;\n    const animations = [];\n    const running = target.$animations || (target.$animations = {});\n    const props = Object.keys(values);\n    const date = Date.now();\n    let i;\n\n    for (i = props.length - 1; i >= 0; --i) {\n      const prop = props[i];\n      if (prop.charAt(0) === '$') {\n        continue;\n      }\n\n      if (prop === 'options') {\n        animations.push(...this._animateOptions(target, values));\n        continue;\n      }\n      const value = values[prop];\n      let animation = running[prop];\n      const cfg = animatedProps.get(prop);\n\n      if (animation) {\n        if (cfg && animation.active()) {\n          // There is an existing active animation, let's update that\n          animation.update(cfg, value, date);\n          continue;\n        } else {\n          animation.cancel();\n        }\n      }\n      if (!cfg || !cfg.duration) {\n        // not animated, set directly to new value\n        target[prop] = value;\n        continue;\n      }\n\n      running[prop] = animation = new Animation(cfg, target, prop, value);\n      animations.push(animation);\n    }\n    return animations;\n  }\n\n\n  /**\n\t * Update `target` properties to new values, using configured animations\n\t * @param {object} target - object to update\n\t * @param {object} values - new target properties\n\t * @returns {boolean|undefined} - `true` if animations were started\n\t **/\n  update(target, values) {\n    if (this._properties.size === 0) {\n      // Nothing is animated, just apply the new values.\n      Object.assign(target, values);\n      return;\n    }\n\n    const animations = this._createAnimations(target, values);\n\n    if (animations.length) {\n      animator.add(this._chart, animations);\n      return true;\n    }\n  }\n}\n\nfunction awaitAll(animations, properties) {\n  const running = [];\n  const keys = Object.keys(properties);\n  for (let i = 0; i < keys.length; i++) {\n    const anim = animations[keys[i]];\n    if (anim && anim.active()) {\n      running.push(anim.wait());\n    }\n  }\n  // @ts-ignore\n  return Promise.all(running);\n}\n\nfunction resolveTargetOptions(target, newOptions) {\n  if (!newOptions) {\n    return;\n  }\n  let options = target.options;\n  if (!options) {\n    target.options = newOptions;\n    return;\n  }\n  if (options.$shared) {\n    // Going from shared options to distinct one:\n    // Create new options object containing the old shared values and start updating that.\n    target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n  }\n  return options;\n}\n", "import Animations from './core.animations.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isFinite, isObject, valueOrDefault, resolveObjectKey, defined} from '../helpers/helpers.core.js';\nimport {listenArrayEvents, unlistenArrayEvents} from '../helpers/helpers.collection.js';\nimport {createContext, sign} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('./core.scale.js').default } Scale\n */\n\nfunction scaleClip(scale, allowedOverflow) {\n  const opts = scale && scale.options || {};\n  const reverse = opts.reverse;\n  const min = opts.min === undefined ? allowedOverflow : 0;\n  const max = opts.max === undefined ? allowedOverflow : 0;\n  return {\n    start: reverse ? max : min,\n    end: reverse ? min : max\n  };\n}\n\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n  if (allowedOverflow === false) {\n    return false;\n  }\n  const x = scaleClip(xScale, allowedOverflow);\n  const y = scaleClip(yScale, allowedOverflow);\n\n  return {\n    top: y.end,\n    right: x.end,\n    bottom: y.start,\n    left: x.start\n  };\n}\n\nfunction toClip(value) {\n  let t, r, b, l;\n\n  if (isObject(value)) {\n    t = value.top;\n    r = value.right;\n    b = value.bottom;\n    l = value.left;\n  } else {\n    t = r = b = l = value;\n  }\n\n  return {\n    top: t,\n    right: r,\n    bottom: b,\n    left: l,\n    disabled: value === false\n  };\n}\n\nfunction getSortedDatasetIndices(chart, filterVisible) {\n  const keys = [];\n  const metasets = chart._getSortedDatasetMetas(filterVisible);\n  let i, ilen;\n\n  for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n    keys.push(metasets[i].index);\n  }\n  return keys;\n}\n\nfunction applyStack(stack, value, dsIndex, options = {}) {\n  const keys = stack.keys;\n  const singleMode = options.mode === 'single';\n  let i, ilen, datasetIndex, otherValue;\n\n  if (value === null) {\n    return;\n  }\n\n  let found = false;\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    datasetIndex = +keys[i];\n    if (datasetIndex === dsIndex) {\n      found = true;\n      if (options.all) {\n        continue;\n      }\n      break;\n    }\n    otherValue = stack.values[datasetIndex];\n    if (isFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n      value += otherValue;\n    }\n  }\n\n  if (!found && !options.all) {\n    return 0;\n  }\n\n  return value;\n}\n\nfunction convertObjectDataToArray(data, meta) {\n  const {iScale, vScale} = meta;\n  const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n  const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n  const keys = Object.keys(data);\n  const adata = new Array(keys.length);\n  let i, ilen, key;\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    key = keys[i];\n    adata[i] = {\n      [iAxisKey]: key,\n      [vAxisKey]: data[key]\n    };\n  }\n  return adata;\n}\n\nfunction isStacked(scale, meta) {\n  const stacked = scale && scale.options.stacked;\n  return stacked || (stacked === undefined && meta.stack !== undefined);\n}\n\nfunction getStackKey(indexScale, valueScale, meta) {\n  return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\n\nfunction getUserBounds(scale) {\n  const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n  return {\n    min: minDefined ? min : Number.NEGATIVE_INFINITY,\n    max: maxDefined ? max : Number.POSITIVE_INFINITY\n  };\n}\n\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n  const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n  return subStack[indexValue] || (subStack[indexValue] = {});\n}\n\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n  for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n    const value = stack[meta.index];\n    if ((positive && value > 0) || (!positive && value < 0)) {\n      return meta.index;\n    }\n  }\n\n  return null;\n}\n\nfunction updateStacks(controller, parsed) {\n  const {chart, _cachedMeta: meta} = controller;\n  const stacks = chart._stacks || (chart._stacks = {}); // map structure is {stackKey: {datasetIndex: value}}\n  const {iScale, vScale, index: datasetIndex} = meta;\n  const iAxis = iScale.axis;\n  const vAxis = vScale.axis;\n  const key = getStackKey(iScale, vScale, meta);\n  const ilen = parsed.length;\n  let stack;\n\n  for (let i = 0; i < ilen; ++i) {\n    const item = parsed[i];\n    const {[iAxis]: index, [vAxis]: value} = item;\n    const itemStacks = item._stacks || (item._stacks = {});\n    stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n    stack[datasetIndex] = value;\n\n    stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n    stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n\n    const visualValues = stack._visualValues || (stack._visualValues = {});\n    visualValues[datasetIndex] = value;\n  }\n}\n\nfunction getFirstScaleId(chart, axis) {\n  const scales = chart.scales;\n  return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\n\nfunction createDatasetContext(parent, index) {\n  return createContext(parent,\n    {\n      active: false,\n      dataset: undefined,\n      datasetIndex: index,\n      index,\n      mode: 'default',\n      type: 'dataset'\n    }\n  );\n}\n\nfunction createDataContext(parent, index, element) {\n  return createContext(parent, {\n    active: false,\n    dataIndex: index,\n    parsed: undefined,\n    raw: undefined,\n    element,\n    index,\n    mode: 'default',\n    type: 'data'\n  });\n}\n\nfunction clearStacks(meta, items) {\n  // Not using meta.index here, because it might be already updated if the dataset changed location\n  const datasetIndex = meta.controller.index;\n  const axis = meta.vScale && meta.vScale.axis;\n  if (!axis) {\n    return;\n  }\n\n  items = items || meta._parsed;\n  for (const parsed of items) {\n    const stacks = parsed._stacks;\n    if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n      return;\n    }\n    delete stacks[axis][datasetIndex];\n    if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n      delete stacks[axis]._visualValues[datasetIndex];\n    }\n  }\n}\n\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n  && {keys: getSortedDatasetIndices(chart, true), values: null};\n\nexport default class DatasetController {\n\n  /**\n   * @type {any}\n   */\n  static defaults = {};\n\n  /**\n   * Element type used to generate a meta dataset (e.g. Chart.element.LineElement).\n   */\n  static datasetElementType = null;\n\n  /**\n   * Element type used to generate a meta data (e.g. Chart.element.PointElement).\n   */\n  static dataElementType = null;\n\n  /**\n\t * @param {Chart} chart\n\t * @param {number} datasetIndex\n\t */\n  constructor(chart, datasetIndex) {\n    this.chart = chart;\n    this._ctx = chart.ctx;\n    this.index = datasetIndex;\n    this._cachedDataOpts = {};\n    this._cachedMeta = this.getMeta();\n    this._type = this._cachedMeta.type;\n    this.options = undefined;\n    /** @type {boolean | object} */\n    this._parsing = false;\n    this._data = undefined;\n    this._objectData = undefined;\n    this._sharedOptions = undefined;\n    this._drawStart = undefined;\n    this._drawCount = undefined;\n    this.enableOptionSharing = false;\n    this.supportsDecimation = false;\n    this.$context = undefined;\n    this._syncList = [];\n    this.datasetElementType = new.target.datasetElementType;\n    this.dataElementType = new.target.dataElementType;\n\n    this.initialize();\n  }\n\n  initialize() {\n    const meta = this._cachedMeta;\n    this.configure();\n    this.linkScales();\n    meta._stacked = isStacked(meta.vScale, meta);\n    this.addElements();\n\n    if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n      console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n    }\n  }\n\n  updateIndex(datasetIndex) {\n    if (this.index !== datasetIndex) {\n      clearStacks(this._cachedMeta);\n    }\n    this.index = datasetIndex;\n  }\n\n  linkScales() {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n\n    const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n\n    const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n    const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n    const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n    const indexAxis = meta.indexAxis;\n    const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n    const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n    meta.xScale = this.getScaleForId(xid);\n    meta.yScale = this.getScaleForId(yid);\n    meta.rScale = this.getScaleForId(rid);\n    meta.iScale = this.getScaleForId(iid);\n    meta.vScale = this.getScaleForId(vid);\n  }\n\n  getDataset() {\n    return this.chart.data.datasets[this.index];\n  }\n\n  getMeta() {\n    return this.chart.getDatasetMeta(this.index);\n  }\n\n  /**\n\t * @param {string} scaleID\n\t * @return {Scale}\n\t */\n  getScaleForId(scaleID) {\n    return this.chart.scales[scaleID];\n  }\n\n  /**\n\t * @private\n\t */\n  _getOtherScale(scale) {\n    const meta = this._cachedMeta;\n    return scale === meta.iScale\n      ? meta.vScale\n      : meta.iScale;\n  }\n\n  reset() {\n    this._update('reset');\n  }\n\n  /**\n\t * @private\n\t */\n  _destroy() {\n    const meta = this._cachedMeta;\n    if (this._data) {\n      unlistenArrayEvents(this._data, this);\n    }\n    if (meta._stacked) {\n      clearStacks(meta);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _dataCheck() {\n    const dataset = this.getDataset();\n    const data = dataset.data || (dataset.data = []);\n    const _data = this._data;\n\n    // In order to correctly handle data addition/deletion animation (and thus simulate\n    // real-time charts), we need to monitor these data modifications and synchronize\n    // the internal metadata accordingly.\n\n    if (isObject(data)) {\n      const meta = this._cachedMeta;\n      this._data = convertObjectDataToArray(data, meta);\n    } else if (_data !== data) {\n      if (_data) {\n        // This case happens when the user replaced the data array instance.\n        unlistenArrayEvents(_data, this);\n        // Discard old parsed data and stacks\n        const meta = this._cachedMeta;\n        clearStacks(meta);\n        meta._parsed = [];\n      }\n      if (data && Object.isExtensible(data)) {\n        listenArrayEvents(data, this);\n      }\n      this._syncList = [];\n      this._data = data;\n    }\n  }\n\n  addElements() {\n    const meta = this._cachedMeta;\n\n    this._dataCheck();\n\n    if (this.datasetElementType) {\n      meta.dataset = new this.datasetElementType();\n    }\n  }\n\n  buildOrUpdateElements(resetNewElements) {\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    let stackChanged = false;\n\n    this._dataCheck();\n\n    // make sure cached _stacked status is current\n    const oldStacked = meta._stacked;\n    meta._stacked = isStacked(meta.vScale, meta);\n\n    // detect change in stack option\n    if (meta.stack !== dataset.stack) {\n      stackChanged = true;\n      // remove values from old stack\n      clearStacks(meta);\n      meta.stack = dataset.stack;\n    }\n\n    // Re-sync meta data in case the user replaced the data array or if we missed\n    // any updates and so make sure that we handle number of datapoints changing.\n    this._resyncElements(resetNewElements);\n\n    // if stack changed, update stack values for the whole dataset\n    if (stackChanged || oldStacked !== meta._stacked) {\n      updateStacks(this, meta._parsed);\n      meta._stacked = isStacked(meta.vScale, meta);\n    }\n  }\n\n  /**\n\t * Merges user-supplied and default dataset-level options\n\t * @private\n\t */\n  configure() {\n    const config = this.chart.config;\n    const scopeKeys = config.datasetScopeKeys(this._type);\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n    this.options = config.createResolver(scopes, this.getContext());\n    this._parsing = this.options.parsing;\n    this._cachedDataOpts = {};\n  }\n\n  /**\n\t * @param {number} start\n\t * @param {number} count\n\t */\n  parse(start, count) {\n    const {_cachedMeta: meta, _data: data} = this;\n    const {iScale, _stacked} = meta;\n    const iAxis = iScale.axis;\n\n    let sorted = start === 0 && count === data.length ? true : meta._sorted;\n    let prev = start > 0 && meta._parsed[start - 1];\n    let i, cur, parsed;\n\n    if (this._parsing === false) {\n      meta._parsed = data;\n      meta._sorted = true;\n      parsed = data;\n    } else {\n      if (isArray(data[start])) {\n        parsed = this.parseArrayData(meta, data, start, count);\n      } else if (isObject(data[start])) {\n        parsed = this.parseObjectData(meta, data, start, count);\n      } else {\n        parsed = this.parsePrimitiveData(meta, data, start, count);\n      }\n\n      const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n      for (i = 0; i < count; ++i) {\n        meta._parsed[i + start] = cur = parsed[i];\n        if (sorted) {\n          if (isNotInOrderComparedToPrev()) {\n            sorted = false;\n          }\n          prev = cur;\n        }\n      }\n      meta._sorted = sorted;\n    }\n\n    if (_stacked) {\n      updateStacks(this, parsed);\n    }\n  }\n\n  /**\n\t * Parse array of primitive values\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [1,3,4]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {xScale0: 0, yScale0: 1}\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const labels = iScale.getLabels();\n    const singleScale = iScale === vScale;\n    const parsed = new Array(count);\n    let i, ilen, index;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      parsed[i] = {\n        [iAxis]: singleScale || iScale.parse(labels[index], index),\n        [vAxis]: vScale.parse(data[index], index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of arrays\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [[1,2],[3,4]]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {x: 0, y: 1}\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(item[0], index),\n        y: yScale.parse(item[1], index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of objects\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [{x:1, y:5}, {x:2, y:10}]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id. _custom is optional\n\t * Example: {xScale0: 0, yScale0: 1, _custom: {r: 10, foo: 'bar'}}\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n        y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  getParsed(index) {\n    return this._cachedMeta._parsed[index];\n  }\n\n  /**\n\t * @protected\n\t */\n  getDataElement(index) {\n    return this._cachedMeta.data[index];\n  }\n\n  /**\n\t * @protected\n\t */\n  applyStack(scale, parsed, mode) {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const value = parsed[scale.axis];\n    const stack = {\n      keys: getSortedDatasetIndices(chart, true),\n      values: parsed._stacks[scale.axis]._visualValues\n    };\n    return applyStack(stack, value, meta.index, {mode});\n  }\n\n  /**\n\t * @protected\n\t */\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    const parsedValue = parsed[scale.axis];\n    let value = parsedValue === null ? NaN : parsedValue;\n    const values = stack && parsed._stacks[scale.axis];\n    if (stack && values) {\n      stack.values = values;\n      value = applyStack(stack, parsedValue, this._cachedMeta.index);\n    }\n    range.min = Math.min(range.min, value);\n    range.max = Math.max(range.max, value);\n  }\n\n  /**\n\t * @protected\n\t */\n  getMinMax(scale, canStack) {\n    const meta = this._cachedMeta;\n    const _parsed = meta._parsed;\n    const sorted = meta._sorted && scale === meta.iScale;\n    const ilen = _parsed.length;\n    const otherScale = this._getOtherScale(scale);\n    const stack = createStack(canStack, meta, this.chart);\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n    const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n    let i, parsed;\n\n    function _skip() {\n      parsed = _parsed[i];\n      const otherValue = parsed[otherScale.axis];\n      return !isFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n    }\n\n    for (i = 0; i < ilen; ++i) {\n      if (_skip()) {\n        continue;\n      }\n      this.updateRangeFromParsed(range, scale, parsed, stack);\n      if (sorted) {\n        // if the data is sorted, we don't need to check further from this end of array\n        break;\n      }\n    }\n    if (sorted) {\n      // in the sorted case, find first non-skipped value from other end of array\n      for (i = ilen - 1; i >= 0; --i) {\n        if (_skip()) {\n          continue;\n        }\n        this.updateRangeFromParsed(range, scale, parsed, stack);\n        break;\n      }\n    }\n    return range;\n  }\n\n  getAllParsedValues(scale) {\n    const parsed = this._cachedMeta._parsed;\n    const values = [];\n    let i, ilen, value;\n\n    for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n      value = parsed[i][scale.axis];\n      if (isFinite(value)) {\n        values.push(value);\n      }\n    }\n    return values;\n  }\n\n  /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n  getMaxOverflow() {\n    return false;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const vScale = meta.vScale;\n    const parsed = this.getParsed(index);\n    return {\n      label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n      value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n    };\n  }\n\n  /**\n\t * @private\n\t */\n  _update(mode) {\n    const meta = this._cachedMeta;\n    this.update(mode || 'default');\n    meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n  }\n\n  /**\n\t * @param {string} mode\n\t */\n  update(mode) {} // eslint-disable-line no-unused-vars\n\n  draw() {\n    const ctx = this._ctx;\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const elements = meta.data || [];\n    const area = chart.chartArea;\n    const active = [];\n    const start = this._drawStart || 0;\n    const count = this._drawCount || (elements.length - start);\n    const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n    let i;\n\n    if (meta.dataset) {\n      meta.dataset.draw(ctx, area, start, count);\n    }\n\n    for (i = start; i < start + count; ++i) {\n      const element = elements[i];\n      if (element.hidden) {\n        continue;\n      }\n      if (element.active && drawActiveElementsOnTop) {\n        active.push(element);\n      } else {\n        element.draw(ctx, area);\n      }\n    }\n\n    for (i = 0; i < active.length; ++i) {\n      active[i].draw(ctx, area);\n    }\n  }\n\n  /**\n\t * Returns a set of predefined style properties that should be used to represent the dataset\n\t * or the data if the index is specified\n\t * @param {number} index - data index\n\t * @param {boolean} [active] - true if hover\n\t * @return {object} style object\n\t */\n  getStyle(index, active) {\n    const mode = active ? 'active' : 'default';\n    return index === undefined && this._cachedMeta.dataset\n      ? this.resolveDatasetElementOptions(mode)\n      : this.resolveDataElementOptions(index || 0, mode);\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext(index, active, mode) {\n    const dataset = this.getDataset();\n    let context;\n    if (index >= 0 && index < this._cachedMeta.data.length) {\n      const element = this._cachedMeta.data[index];\n      context = element.$context ||\n        (element.$context = createDataContext(this.getContext(), index, element));\n      context.parsed = this.getParsed(index);\n      context.raw = dataset.data[index];\n      context.index = context.dataIndex = index;\n    } else {\n      context = this.$context ||\n        (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n      context.dataset = dataset;\n      context.index = context.datasetIndex = this.index;\n    }\n\n    context.active = !!active;\n    context.mode = mode;\n    return context;\n  }\n\n  /**\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDatasetElementOptions(mode) {\n    return this._resolveElementOptions(this.datasetElementType.id, mode);\n  }\n\n  /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDataElementOptions(index, mode) {\n    return this._resolveElementOptions(this.dataElementType.id, mode, index);\n  }\n\n  /**\n\t * @private\n\t */\n  _resolveElementOptions(elementType, mode = 'default', index) {\n    const active = mode === 'active';\n    const cache = this._cachedDataOpts;\n    const cacheKey = elementType + '-' + mode;\n    const cached = cache[cacheKey];\n    const sharing = this.enableOptionSharing && defined(index);\n    if (cached) {\n      return cloneIfNotShared(cached, sharing);\n    }\n    const config = this.chart.config;\n    const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n    const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n    const names = Object.keys(defaults.elements[elementType]);\n    // context is provided as a function, and is called only if needed,\n    // so we don't create a context for each element if not needed.\n    const context = () => this.getContext(index, active, mode);\n    const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n\n    if (values.$shared) {\n      // `$shared` indicates this set of options can be shared between multiple elements.\n      // Sharing is used to reduce number of properties to change during animation.\n      values.$shared = sharing;\n\n      // We cache options by `mode`, which can be 'active' for example. This enables us\n      // to have the 'active' element options and 'default' options to switch between\n      // when interacting.\n      cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n    }\n\n    return values;\n  }\n\n\n  /**\n\t * @private\n\t */\n  _resolveAnimations(index, transition, active) {\n    const chart = this.chart;\n    const cache = this._cachedDataOpts;\n    const cacheKey = `animation-${transition}`;\n    const cached = cache[cacheKey];\n    if (cached) {\n      return cached;\n    }\n    let options;\n    if (chart.options.animation !== false) {\n      const config = this.chart.config;\n      const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n      const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n      options = config.createResolver(scopes, this.getContext(index, active, transition));\n    }\n    const animations = new Animations(chart, options && options.animations);\n    if (options && options._cacheable) {\n      cache[cacheKey] = Object.freeze(animations);\n    }\n    return animations;\n  }\n\n  /**\n\t * Utility for getting the options object shared between elements\n\t * @protected\n\t */\n  getSharedOptions(options) {\n    if (!options.$shared) {\n      return;\n    }\n    return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n  }\n\n  /**\n\t * Utility for determining if `options` should be included in the updated properties\n\t * @protected\n\t */\n  includeOptions(mode, sharedOptions) {\n    return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n  }\n\n  /**\n   * @todo v4, rename to getSharedOptions and remove excess functions\n   */\n  _getSharedOptions(start, mode) {\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const previouslySharedOptions = this._sharedOptions;\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions) || (sharedOptions !== previouslySharedOptions);\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n    return {sharedOptions, includeOptions};\n  }\n\n  /**\n\t * Utility for updating an element with new properties, using animations when appropriate.\n\t * @protected\n\t */\n  updateElement(element, index, properties, mode) {\n    if (isDirectUpdateMode(mode)) {\n      Object.assign(element, properties);\n    } else {\n      this._resolveAnimations(index, mode).update(element, properties);\n    }\n  }\n\n  /**\n\t * Utility to animate the shared options, that are potentially affecting multiple elements.\n\t * @protected\n\t */\n  updateSharedOptions(sharedOptions, mode, newOptions) {\n    if (sharedOptions && !isDirectUpdateMode(mode)) {\n      this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _setStyle(element, index, mode, active) {\n    element.active = active;\n    const options = this.getStyle(index, active);\n    this._resolveAnimations(index, mode, active).update(element, {\n      // When going from active to inactive, we need to update to the shared options.\n      // This way the once hovered element will end up with the same original shared options instance, after animation.\n      options: (!active && this.getSharedOptions(options)) || options\n    });\n  }\n\n  removeHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', false);\n  }\n\n  setHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', true);\n  }\n\n  /**\n\t * @private\n\t */\n  _removeDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n\n    if (element) {\n      this._setStyle(element, undefined, 'active', false);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _setDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n\n    if (element) {\n      this._setStyle(element, undefined, 'active', true);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _resyncElements(resetNewElements) {\n    const data = this._data;\n    const elements = this._cachedMeta.data;\n\n    // Apply changes detected through array listeners\n    for (const [method, arg1, arg2] of this._syncList) {\n      this[method](arg1, arg2);\n    }\n    this._syncList = [];\n\n    const numMeta = elements.length;\n    const numData = data.length;\n    const count = Math.min(numData, numMeta);\n\n    if (count) {\n      // TODO: It is not optimal to always parse the old data\n      // This is done because we are not detecting direct assignments:\n      // chart.data.datasets[0].data[5] = 10;\n      // chart.data.datasets[0].data[5].y = 10;\n      this.parse(0, count);\n    }\n\n    if (numData > numMeta) {\n      this._insertElements(numMeta, numData - numMeta, resetNewElements);\n    } else if (numData < numMeta) {\n      this._removeElements(numData, numMeta - numData);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _insertElements(start, count, resetNewElements = true) {\n    const meta = this._cachedMeta;\n    const data = meta.data;\n    const end = start + count;\n    let i;\n\n    const move = (arr) => {\n      arr.length += count;\n      for (i = arr.length - 1; i >= end; i--) {\n        arr[i] = arr[i - count];\n      }\n    };\n    move(data);\n\n    for (i = start; i < end; ++i) {\n      data[i] = new this.dataElementType();\n    }\n\n    if (this._parsing) {\n      move(meta._parsed);\n    }\n    this.parse(start, count);\n\n    if (resetNewElements) {\n      this.updateElements(data, start, count, 'reset');\n    }\n  }\n\n  updateElements(element, start, count, mode) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * @private\n\t */\n  _removeElements(start, count) {\n    const meta = this._cachedMeta;\n    if (this._parsing) {\n      const removed = meta._parsed.splice(start, count);\n      if (meta._stacked) {\n        clearStacks(meta, removed);\n      }\n    }\n    meta.data.splice(start, count);\n  }\n\n  /**\n\t * @private\n   */\n  _sync(args) {\n    if (this._parsing) {\n      this._syncList.push(args);\n    } else {\n      const [method, arg1, arg2] = args;\n      this[method](arg1, arg2);\n    }\n    this.chart._dataChanges.push([this.index, ...args]);\n  }\n\n  _onDataPush() {\n    const count = arguments.length;\n    this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n  }\n\n  _onDataPop() {\n    this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n  }\n\n  _onDataShift() {\n    this._sync(['_removeElements', 0, 1]);\n  }\n\n  _onDataSplice(start, count) {\n    if (count) {\n      this._sync(['_removeElements', start, count]);\n    }\n    const newCount = arguments.length - 2;\n    if (newCount) {\n      this._sync(['_insertElements', start, newCount]);\n    }\n  }\n\n  _onDataUnshift() {\n    this._sync(['_insertElements', 0, arguments.length]);\n  }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {\n  _arrayUnique, isArray, isNullOrUndef,\n  valueOrDefault, resolveObjectKey, sign, defined\n} from '../helpers/index.js';\n\nfunction getAllScaleValues(scale, type) {\n  if (!scale._cache.$bar) {\n    const visibleMetas = scale.getMatchingVisibleMetas(type);\n    let values = [];\n\n    for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n      values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n    }\n    scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n  }\n  return scale._cache.$bar;\n}\n\n/**\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\n * @private\n */\nfunction computeMinSampleSize(meta) {\n  const scale = meta.iScale;\n  const values = getAllScaleValues(scale, meta.type);\n  let min = scale._length;\n  let i, ilen, curr, prev;\n  const updateMinAndPrev = () => {\n    if (curr === 32767 || curr === -32768) {\n      // Ignore truncated pixels\n      return;\n    }\n    if (defined(prev)) {\n      // curr - prev === 0 is ignored\n      min = Math.min(min, Math.abs(curr - prev) || min);\n    }\n    prev = curr;\n  };\n\n  for (i = 0, ilen = values.length; i < ilen; ++i) {\n    curr = scale.getPixelForValue(values[i]);\n    updateMinAndPrev();\n  }\n\n  prev = undefined;\n  for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n    curr = scale.getPixelForTick(i);\n    updateMinAndPrev();\n  }\n\n  return min;\n}\n\n/**\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\n * @private\n */\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n  const thickness = options.barThickness;\n  let size, ratio;\n\n  if (isNullOrUndef(thickness)) {\n    size = ruler.min * options.categoryPercentage;\n    ratio = options.barPercentage;\n  } else {\n    // When bar thickness is enforced, category and bar percentages are ignored.\n    // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\n    // and deprecate barPercentage since this value is ignored when thickness is absolute.\n    size = thickness * stackCount;\n    ratio = 1;\n  }\n\n  return {\n    chunk: size / stackCount,\n    ratio,\n    start: ruler.pixels[index] - (size / 2)\n  };\n}\n\n/**\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\n * percentage options are 1), based on the previous and following categories. This mode\n * generates bars with different widths when data are not evenly spaced.\n * @private\n */\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n  const pixels = ruler.pixels;\n  const curr = pixels[index];\n  let prev = index > 0 ? pixels[index - 1] : null;\n  let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n  const percent = options.categoryPercentage;\n\n  if (prev === null) {\n    // first data: its size is double based on the next point or,\n    // if it's also the last data, we use the scale size.\n    prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n  }\n\n  if (next === null) {\n    // last data: its size is also double based on the previous point.\n    next = curr + curr - prev;\n  }\n\n  const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n  const size = Math.abs(next - prev) / 2 * percent;\n\n  return {\n    chunk: size / stackCount,\n    ratio: options.barPercentage,\n    start\n  };\n}\n\nfunction parseFloatBar(entry, item, vScale, i) {\n  const startValue = vScale.parse(entry[0], i);\n  const endValue = vScale.parse(entry[1], i);\n  const min = Math.min(startValue, endValue);\n  const max = Math.max(startValue, endValue);\n  let barStart = min;\n  let barEnd = max;\n\n  if (Math.abs(min) > Math.abs(max)) {\n    barStart = max;\n    barEnd = min;\n  }\n\n  // Store `barEnd` (furthest away from origin) as parsed value,\n  // to make stacking straight forward\n  item[vScale.axis] = barEnd;\n\n  item._custom = {\n    barStart,\n    barEnd,\n    start: startValue,\n    end: endValue,\n    min,\n    max\n  };\n}\n\nfunction parseValue(entry, item, vScale, i) {\n  if (isArray(entry)) {\n    parseFloatBar(entry, item, vScale, i);\n  } else {\n    item[vScale.axis] = vScale.parse(entry, i);\n  }\n  return item;\n}\n\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n  const iScale = meta.iScale;\n  const vScale = meta.vScale;\n  const labels = iScale.getLabels();\n  const singleScale = iScale === vScale;\n  const parsed = [];\n  let i, ilen, item, entry;\n\n  for (i = start, ilen = start + count; i < ilen; ++i) {\n    entry = data[i];\n    item = {};\n    item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n    parsed.push(parseValue(entry, item, vScale, i));\n  }\n  return parsed;\n}\n\nfunction isFloatBar(custom) {\n  return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\n\nfunction barSign(size, vScale, actualBase) {\n  if (size !== 0) {\n    return sign(size);\n  }\n  return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\n\nfunction borderProps(properties) {\n  let reverse, start, end, top, bottom;\n  if (properties.horizontal) {\n    reverse = properties.base > properties.x;\n    start = 'left';\n    end = 'right';\n  } else {\n    reverse = properties.base < properties.y;\n    start = 'bottom';\n    end = 'top';\n  }\n  if (reverse) {\n    top = 'end';\n    bottom = 'start';\n  } else {\n    top = 'start';\n    bottom = 'end';\n  }\n  return {start, end, reverse, top, bottom};\n}\n\nfunction setBorderSkipped(properties, options, stack, index) {\n  let edge = options.borderSkipped;\n  const res = {};\n\n  if (!edge) {\n    properties.borderSkipped = res;\n    return;\n  }\n\n  if (edge === true) {\n    properties.borderSkipped = {top: true, right: true, bottom: true, left: true};\n    return;\n  }\n\n  const {start, end, reverse, top, bottom} = borderProps(properties);\n\n  if (edge === 'middle' && stack) {\n    properties.enableBorderRadius = true;\n    if ((stack._top || 0) === index) {\n      edge = top;\n    } else if ((stack._bottom || 0) === index) {\n      edge = bottom;\n    } else {\n      res[parseEdge(bottom, start, end, reverse)] = true;\n      edge = top;\n    }\n  }\n\n  res[parseEdge(edge, start, end, reverse)] = true;\n  properties.borderSkipped = res;\n}\n\nfunction parseEdge(edge, a, b, reverse) {\n  if (reverse) {\n    edge = swap(edge, a, b);\n    edge = startEnd(edge, b, a);\n  } else {\n    edge = startEnd(edge, a, b);\n  }\n  return edge;\n}\n\nfunction swap(orig, v1, v2) {\n  return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\n\nfunction startEnd(v, start, end) {\n  return v === 'start' ? start : v === 'end' ? end : v;\n}\n\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n  properties.inflateAmount = inflateAmount === 'auto'\n    ? ratio === 1 ? 0.33 : 0\n    : inflateAmount;\n}\n\nexport default class BarController extends DatasetController {\n\n  static id = 'bar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'bar',\n\n    categoryPercentage: 0.8,\n    barPercentage: 0.9,\n    grouped: true,\n\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'base', 'width', 'height']\n      }\n    }\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      _index_: {\n        type: 'category',\n        offset: true,\n        grid: {\n          offset: true\n        }\n      },\n      _value_: {\n        type: 'linear',\n        beginAtZero: true,\n      }\n    }\n  };\n\n\n  /**\n\t * Overriding primitive data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n\n  /**\n\t * Overriding array data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n\n  /**\n\t * Overriding object data parsing since we support mixed primitive/array\n\t * value-scale data for float bars\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const parsed = [];\n    let i, ilen, item, obj;\n    for (i = start, ilen = start + count; i < ilen; ++i) {\n      obj = data[i];\n      item = {};\n      item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n      parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    super.updateRangeFromParsed(range, scale, parsed, stack);\n    const custom = parsed._custom;\n    if (custom && scale === this._cachedMeta.vScale) {\n      // float bar: only one end of the bar is considered by `super`\n      range.min = Math.min(range.min, custom.min);\n      range.max = Math.max(range.max, custom.max);\n    }\n  }\n\n  /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n  getMaxOverflow() {\n    return 0;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const {iScale, vScale} = meta;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const value = isFloatBar(custom)\n      ? '[' + custom.start + ', ' + custom.end + ']'\n      : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n\n    return {\n      label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n      value\n    };\n  }\n\n  initialize() {\n    this.enableOptionSharing = true;\n\n    super.initialize();\n\n    const meta = this._cachedMeta;\n    meta.stack = this.getDataset().stack;\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    this.updateElements(meta.data, 0, meta.data.length, mode);\n  }\n\n  updateElements(bars, start, count, mode) {\n    const reset = mode === 'reset';\n    const {index, _cachedMeta: {vScale}} = this;\n    const base = vScale.getBasePixel();\n    const horizontal = vScale.isHorizontal();\n    const ruler = this._getRuler();\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n\n    for (let i = start; i < start + count; i++) {\n      const parsed = this.getParsed(i);\n      const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n      const ipixels = this._calculateBarIndexPixels(i, ruler);\n      const stack = (parsed._stacks || {})[vScale.axis];\n\n      const properties = {\n        horizontal,\n        base: vpixels.base,\n        enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n        x: horizontal ? vpixels.head : ipixels.center,\n        y: horizontal ? ipixels.center : vpixels.head,\n        height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n        width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n      };\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n      }\n      const options = properties.options || bars[i].options;\n      setBorderSkipped(properties, options, stack, index);\n      setInflateAmount(properties, options, ruler.ratio);\n      this.updateElement(bars[i], i, properties, mode);\n    }\n  }\n\n  /**\n\t * Returns the stacks based on groups and bar visibility.\n\t * @param {number} [last] - The dataset index\n\t * @param {number} [dataIndex] - The data index of the ruler\n\t * @returns {string[]} The list of stack IDs\n\t * @private\n\t */\n  _getStacks(last, dataIndex) {\n    const {iScale} = this._cachedMeta;\n    const metasets = iScale.getMatchingVisibleMetas(this._type)\n      .filter(meta => meta.controller.options.grouped);\n    const stacked = iScale.options.stacked;\n    const stacks = [];\n    const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n    const iScaleValue = currentParsed && currentParsed[iScale.axis];\n\n    const skipNull = (meta) => {\n      const parsed = meta._parsed.find(item => item[iScale.axis] === iScaleValue);\n      const val = parsed && parsed[meta.vScale.axis];\n\n      if (isNullOrUndef(val) || isNaN(val)) {\n        return true;\n      }\n    };\n\n    for (const meta of metasets) {\n      if (dataIndex !== undefined && skipNull(meta)) {\n        continue;\n      }\n\n      // stacked   | meta.stack\n      //           | found | not found | undefined\n      // false     |   x   |     x     |     x\n      // true      |       |     x     |\n      // undefined |       |     x     |     x\n      if (stacked === false || stacks.indexOf(meta.stack) === -1 ||\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\n        stacks.push(meta.stack);\n      }\n      if (meta.index === last) {\n        break;\n      }\n    }\n\n    // No stacks? that means there is no visible data. Let's still initialize an `undefined`\n    // stack where possible invisible bars will be located.\n    // https://github.com/chartjs/Chart.js/issues/6368\n    if (!stacks.length) {\n      stacks.push(undefined);\n    }\n\n    return stacks;\n  }\n\n  /**\n\t * Returns the effective number of stacks based on groups and bar visibility.\n\t * @private\n\t */\n  _getStackCount(index) {\n    return this._getStacks(undefined, index).length;\n  }\n\n  _getAxisCount() {\n    return this._getAxis().length;\n  }\n\n  getFirstScaleIdForIndexAxis() {\n    const scales = this.chart.scales;\n    const indexScaleId = this.chart.options.indexAxis;\n    return Object.keys(scales).filter(key => scales[key].axis === indexScaleId).shift();\n  }\n\n  _getAxis() {\n    const axis = {};\n    const firstScaleAxisId = this.getFirstScaleIdForIndexAxis();\n    for (const dataset of this.chart.data.datasets) {\n      axis[valueOrDefault(\n        this.chart.options.indexAxis === 'x' ? dataset.xAxisID : dataset.yAxisID, firstScaleAxisId\n      )] = true;\n    }\n    return Object.keys(axis);\n  }\n\n  /**\n\t * Returns the stack index for the given dataset based on groups and bar visibility.\n\t * @param {number} [datasetIndex] - The dataset index\n\t * @param {string} [name] - The stack name to find\n   * @param {number} [dataIndex]\n\t * @returns {number} The stack index\n\t * @private\n\t */\n  _getStackIndex(datasetIndex, name, dataIndex) {\n    const stacks = this._getStacks(datasetIndex, dataIndex);\n    const index = (name !== undefined)\n      ? stacks.indexOf(name)\n      : -1; // indexOf returns -1 if element is not present\n\n    return (index === -1)\n      ? stacks.length - 1\n      : index;\n  }\n\n  /**\n\t * @private\n\t */\n  _getRuler() {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const pixels = [];\n    let i, ilen;\n\n    for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n      pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n    }\n\n    const barThickness = opts.barThickness;\n    const min = barThickness || computeMinSampleSize(meta);\n\n    return {\n      min,\n      pixels,\n      start: iScale._startPixel,\n      end: iScale._endPixel,\n      stackCount: this._getStackCount(),\n      scale: iScale,\n      grouped: opts.grouped,\n      // bar thickness ratio used for non-grouped bars\n      ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n    };\n  }\n\n  /**\n\t * Note: pixel values are not clamped to the scale area.\n\t * @private\n\t */\n  _calculateBarValuePixels(index) {\n    const {_cachedMeta: {vScale, _stacked, index: datasetIndex}, options: {base: baseValue, minBarLength}} = this;\n    const actualBase = baseValue || 0;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const floating = isFloatBar(custom);\n    let value = parsed[vScale.axis];\n    let start = 0;\n    let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n    let head, size;\n\n    if (length !== value) {\n      start = length - value;\n      length = value;\n    }\n\n    if (floating) {\n      value = custom.barStart;\n      length = custom.barEnd - custom.barStart;\n      // bars crossing origin are not stacked\n      if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n        start = 0;\n      }\n      start += value;\n    }\n\n    const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n    let base = vScale.getPixelForValue(startValue);\n\n    if (this.chart.getDataVisibility(index)) {\n      head = vScale.getPixelForValue(start + length);\n    } else {\n      // When not visible, no height\n      head = base;\n    }\n\n    size = head - base;\n\n    if (Math.abs(size) < minBarLength) {\n      size = barSign(size, vScale, actualBase) * minBarLength;\n      if (value === actualBase) {\n        base -= size / 2;\n      }\n      const startPixel = vScale.getPixelForDecimal(0);\n      const endPixel = vScale.getPixelForDecimal(1);\n      const min = Math.min(startPixel, endPixel);\n      const max = Math.max(startPixel, endPixel);\n      base = Math.max(Math.min(base, max), min);\n      head = base + size;\n\n      if (_stacked && !floating) {\n        // visual data coordinates after applying minBarLength\n        parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n      }\n    }\n\n    if (base === vScale.getPixelForValue(actualBase)) {\n      const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n      base += halfGrid;\n      size -= halfGrid;\n    }\n\n    return {\n      size,\n      base,\n      head,\n      center: head + size / 2\n    };\n  }\n\n  /**\n\t * @private\n\t */\n  _calculateBarIndexPixels(index, ruler) {\n    const scale = ruler.scale;\n    const options = this.options;\n    const skipNull = options.skipNull;\n    const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n    let center, size;\n    const axisCount = this._getAxisCount();\n    if (ruler.grouped) {\n      const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n      const range = options.barThickness === 'flex'\n        ? computeFlexCategoryTraits(index, ruler, options, stackCount * axisCount)\n        : computeFitCategoryTraits(index, ruler, options, stackCount * axisCount);\n      const axisID = this.chart.options.indexAxis === 'x' ? this.getDataset().xAxisID : this.getDataset().yAxisID;\n      const axisNumber = this._getAxis().indexOf(valueOrDefault(axisID, this.getFirstScaleIdForIndexAxis()));\n      const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined) + axisNumber;\n      center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n      size = Math.min(maxBarThickness, range.chunk * range.ratio);\n    } else {\n      // For non-grouped bar charts, exact pixel values are used\n      center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n      size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n    }\n\n\n    return {\n      base: center - size / 2,\n      head: center + size / 2,\n      center,\n      size\n    };\n  }\n\n  draw() {\n    const meta = this._cachedMeta;\n    const vScale = meta.vScale;\n    const rects = meta.data;\n    const ilen = rects.length;\n    let i = 0;\n\n    for (; i < ilen; ++i) {\n      if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n        rects[i].draw(this._ctx);\n      }\n    }\n  }\n\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {valueOrDefault} from '../helpers/helpers.core.js';\n\nexport default class BubbleController extends DatasetController {\n\n  static id = 'bubble';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'point',\n\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'borderWidth', 'radius']\n      }\n    }\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      x: {\n        type: 'linear'\n      },\n      y: {\n        type: 'linear'\n      }\n    }\n  };\n\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n  }\n\n  /**\n\t * Parse array of primitive values\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    const parsed = super.parsePrimitiveData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of arrays\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    const parsed = super.parseArrayData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of objects\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const parsed = super.parseObjectData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const data = this._cachedMeta.data;\n\n    let max = 0;\n    for (let i = data.length - 1; i >= 0; --i) {\n      max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n    }\n    return max > 0 && max;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const labels = this.chart.data.labels || [];\n    const {xScale, yScale} = meta;\n    const parsed = this.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n    const r = parsed._custom;\n\n    return {\n      label: labels[index] || '',\n      value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n    };\n  }\n\n  update(mode) {\n    const points = this._cachedMeta.data;\n\n    // Update Points\n    this.updateElements(points, 0, points.length, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const parsed = !reset && this.getParsed(i);\n      const properties = {};\n      const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n      const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel);\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n\n        if (reset) {\n          properties.options.radius = 0;\n        }\n      }\n\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n\n  /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDataElementOptions(index, mode) {\n    const parsed = this.getParsed(index);\n    let values = super.resolveDataElementOptions(index, mode);\n\n    // In case values were cached (and thus frozen), we need to clone the values\n    if (values.$shared) {\n      values = Object.assign({}, values, {$shared: false});\n    }\n\n    // Custom radius resolution\n    const radius = values.radius;\n    if (mode !== 'active') {\n      values.radius = 0;\n    }\n    values.radius += valueOrDefault(parsed && parsed._custom, radius);\n\n    return values;\n  }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {isObject, resolveObjectKey, toPercentage, toDimension, valueOrDefault} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {toRadians, PI, TAU, HALF_PI, _angleBetween} from '../helpers/helpers.math.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n  let ratioX = 1;\n  let ratioY = 1;\n  let offsetX = 0;\n  let offsetY = 0;\n  // If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc\n  if (circumference < TAU) {\n    const startAngle = rotation;\n    const endAngle = startAngle + circumference;\n    const startX = Math.cos(startAngle);\n    const startY = Math.sin(startAngle);\n    const endX = Math.cos(endAngle);\n    const endY = Math.sin(endAngle);\n    const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n    const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n    const maxX = calcMax(0, startX, endX);\n    const maxY = calcMax(HALF_PI, startY, endY);\n    const minX = calcMin(PI, startX, endX);\n    const minY = calcMin(PI + HALF_PI, startY, endY);\n    ratioX = (maxX - minX) / 2;\n    ratioY = (maxY - minY) / 2;\n    offsetX = -(maxX + minX) / 2;\n    offsetY = -(maxY + minY) / 2;\n  }\n  return {ratioX, ratioY, offsetX, offsetY};\n}\n\nexport default class DoughnutController extends DatasetController {\n\n  static id = 'doughnut';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'arc',\n    animation: {\n      // Boolean - Whether we animate the rotation of the Doughnut\n      animateRotate: true,\n      // Boolean - Whether we animate scaling the Doughnut from the centre\n      animateScale: false\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n      },\n    },\n    // The percentage of the chart that we cut out of the middle.\n    cutout: '50%',\n\n    // The rotation of the chart, where the first data arc begins.\n    rotation: 0,\n\n    // The total circumference of the chart.\n    circumference: 360,\n\n    // The outer radius of the chart\n    radius: '100%',\n\n    // Spacing between arcs\n    spacing: 0,\n\n    indexAxis: 'r',\n  };\n\n  static descriptors = {\n    _scriptable: (name) => name !== 'spacing',\n    _indexable: (name) => name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash'),\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    // Need to override these to give a nice default\n    plugins: {\n      legend: {\n        labels: {\n          generateLabels(chart) {\n            const data = chart.data;\n            const {labels: {pointStyle, textAlign, color, useBorderRadius, borderRadius}} = chart.legend.options;\n            if (data.labels.length && data.datasets.length) {\n              return data.labels.map((label, i) => {\n                const meta = chart.getDatasetMeta(0);\n                const style = meta.controller.getStyle(i);\n\n                return {\n                  text: label,\n                  fillStyle: style.backgroundColor,\n                  fontColor: color,\n                  hidden: !chart.getDataVisibility(i),\n                  lineDash: style.borderDash,\n                  lineDashOffset: style.borderDashOffset,\n                  lineJoin: style.borderJoinStyle,\n                  lineWidth: style.borderWidth,\n                  strokeStyle: style.borderColor,\n                  textAlign: textAlign,\n                  pointStyle: pointStyle,\n                  borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n                  // Extra data used for toggling the correct item\n                  index: i\n                };\n              });\n            }\n            return [];\n          }\n        },\n\n        onClick(e, legendItem, legend) {\n          legend.chart.toggleDataVisibility(legendItem.index);\n          legend.chart.update();\n        }\n      }\n    }\n  };\n\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n\n    this.enableOptionSharing = true;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.offsetX = undefined;\n    this.offsetY = undefined;\n  }\n\n  linkScales() {}\n\n  /**\n\t * Override data parsing, since we are not using scales\n\t */\n  parse(start, count) {\n    const data = this.getDataset().data;\n    const meta = this._cachedMeta;\n\n    if (this._parsing === false) {\n      meta._parsed = data;\n    } else {\n      let getter = (i) => +data[i];\n\n      if (isObject(data[start])) {\n        const {key = 'value'} = this._parsing;\n        getter = (i) => +resolveObjectKey(data[i], key);\n      }\n\n      let i, ilen;\n      for (i = start, ilen = start + count; i < ilen; ++i) {\n        meta._parsed[i] = getter(i);\n      }\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _getRotation() {\n    return toRadians(this.options.rotation - 90);\n  }\n\n  /**\n\t * @private\n\t */\n  _getCircumference() {\n    return toRadians(this.options.circumference);\n  }\n\n  /**\n\t * Get the maximal rotation & circumference extents\n\t * across all visible datasets.\n\t */\n  _getRotationExtents() {\n    let min = TAU;\n    let max = -TAU;\n\n    for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n      if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n        const controller = this.chart.getDatasetMeta(i).controller;\n        const rotation = controller._getRotation();\n        const circumference = controller._getCircumference();\n\n        min = Math.min(min, rotation);\n        max = Math.max(max, rotation + circumference);\n      }\n    }\n\n    return {\n      rotation: min,\n      circumference: max - min,\n    };\n  }\n\n  /**\n\t * @param {string} mode\n\t */\n  update(mode) {\n    const chart = this.chart;\n    const {chartArea} = chart;\n    const meta = this._cachedMeta;\n    const arcs = meta.data;\n    const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n    const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n    const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n    const chartWeight = this._getRingWeight(this.index);\n\n    // Compute the maximal rotation & circumference limits.\n    // If we only consider our dataset, this can cause problems when two datasets\n    // are both less than a circle with different rotations (starting angles)\n    const {circumference, rotation} = this._getRotationExtents();\n    const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n    const maxWidth = (chartArea.width - spacing) / ratioX;\n    const maxHeight = (chartArea.height - spacing) / ratioY;\n    const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n    const outerRadius = toDimension(this.options.radius, maxRadius);\n    const innerRadius = Math.max(outerRadius * cutout, 0);\n    const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n    this.offsetX = offsetX * outerRadius;\n    this.offsetY = offsetY * outerRadius;\n\n    meta.total = this.calculateTotal();\n\n    this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n    this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n\n  /**\n   * @private\n   */\n  _circumference(i, reset) {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const circumference = this._getCircumference();\n    if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n      return 0;\n    }\n    return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n  }\n\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const centerX = (chartArea.left + chartArea.right) / 2;\n    const centerY = (chartArea.top + chartArea.bottom) / 2;\n    const animateScale = reset && animationOpts.animateScale;\n    const innerRadius = animateScale ? 0 : this.innerRadius;\n    const outerRadius = animateScale ? 0 : this.outerRadius;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    let startAngle = this._getRotation();\n    let i;\n\n    for (i = 0; i < start; ++i) {\n      startAngle += this._circumference(i, reset);\n    }\n\n    for (i = start; i < start + count; ++i) {\n      const circumference = this._circumference(i, reset);\n      const arc = arcs[i];\n      const properties = {\n        x: centerX + this.offsetX,\n        y: centerY + this.offsetY,\n        startAngle,\n        endAngle: startAngle + circumference,\n        circumference,\n        outerRadius,\n        innerRadius\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n      }\n      startAngle += circumference;\n\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n\n  calculateTotal() {\n    const meta = this._cachedMeta;\n    const metaData = meta.data;\n    let total = 0;\n    let i;\n\n    for (i = 0; i < metaData.length; i++) {\n      const value = meta._parsed[i];\n      if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n        total += Math.abs(value);\n      }\n    }\n\n    return total;\n  }\n\n  calculateCircumference(value) {\n    const total = this._cachedMeta.total;\n    if (total > 0 && !isNaN(value)) {\n      return TAU * (Math.abs(value) / total);\n    }\n    return 0;\n  }\n\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index], chart.options.locale);\n\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n\n  getMaxBorderWidth(arcs) {\n    let max = 0;\n    const chart = this.chart;\n    let i, ilen, meta, controller, options;\n\n    if (!arcs) {\n      // Find the outmost visible dataset\n      for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n        if (chart.isDatasetVisible(i)) {\n          meta = chart.getDatasetMeta(i);\n          arcs = meta.data;\n          controller = meta.controller;\n          break;\n        }\n      }\n    }\n\n    if (!arcs) {\n      return 0;\n    }\n\n    for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n      options = controller.resolveDataElementOptions(i);\n      if (options.borderAlign !== 'inner') {\n        max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n      }\n    }\n    return max;\n  }\n\n  getMaxOffset(arcs) {\n    let max = 0;\n\n    for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n      const options = this.resolveDataElementOptions(i);\n      max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n    }\n    return max;\n  }\n\n  /**\n\t * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\n\t * @private\n\t */\n  _getRingWeightOffset(datasetIndex) {\n    let ringWeightOffset = 0;\n\n    for (let i = 0; i < datasetIndex; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        ringWeightOffset += this._getRingWeight(i);\n      }\n    }\n\n    return ringWeightOffset;\n  }\n\n  /**\n\t * @private\n\t */\n  _getRingWeight(datasetIndex) {\n    return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n  }\n\n  /**\n\t * Returns the sum of all visible data set weights.\n\t * @private\n\t */\n  _getVisibleDatasetWeightTotal() {\n    return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n  }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class LineController extends DatasetController {\n\n  static id = 'line';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: 'line',\n    dataElementType: 'point',\n\n    showLine: true,\n    spanGaps: false,\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      _index_: {\n        type: 'category',\n      },\n      _value_: {\n        type: 'linear',\n      },\n    }\n  };\n\n  initialize() {\n    this.enableOptionSharing = true;\n    this.supportsDecimation = true;\n    super.initialize();\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {dataset: line, data: points = [], _dataset} = meta;\n    // @ts-ignore\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n    this._drawStart = start;\n    this._drawCount = count;\n\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n\n    // Update Line\n    line._chart = this.chart;\n    line._datasetIndex = this.index;\n    line._decimated = !!_dataset._decimated;\n    line.points = points;\n\n    const options = this.resolveDatasetElementOptions(mode);\n    if (!this.options.showLine) {\n      options.borderWidth = 0;\n    }\n    options.segment = this.options.segment;\n    this.updateElement(line, undefined, {\n      animated: !animationsDisabled,\n      options\n    }, mode);\n\n    // Update Points\n    this.updateElements(points, start, count, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    const end = start + count;\n    const pointsCount = points.length;\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n\n    for (let i = 0; i < pointsCount; ++i) {\n      const point = points[i];\n      const properties = directUpdate ? point : {};\n\n      if (i < start || i >= end) {\n        properties.skip = true;\n        continue;\n      }\n\n      const parsed = this.getParsed(i);\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n\n      prevParsed = parsed;\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n    const data = meta.data || [];\n    if (!data.length) {\n      return border;\n    }\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n\n  draw() {\n    const meta = this._cachedMeta;\n    meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n    super.draw();\n  }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {toRadians, PI, formatNumber, _parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class PolarAreaController extends DatasetController {\n\n  static id = 'polarArea';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    dataElementType: 'arc',\n    animation: {\n      animateRotate: true,\n      animateScale: true\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n      },\n    },\n    indexAxis: 'r',\n    startAngle: 0,\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    plugins: {\n      legend: {\n        labels: {\n          generateLabels(chart) {\n            const data = chart.data;\n            if (data.labels.length && data.datasets.length) {\n              const {labels: {pointStyle, color}} = chart.legend.options;\n\n              return data.labels.map((label, i) => {\n                const meta = chart.getDatasetMeta(0);\n                const style = meta.controller.getStyle(i);\n\n                return {\n                  text: label,\n                  fillStyle: style.backgroundColor,\n                  strokeStyle: style.borderColor,\n                  fontColor: color,\n                  lineWidth: style.borderWidth,\n                  pointStyle: pointStyle,\n                  hidden: !chart.getDataVisibility(i),\n\n                  // Extra data used for toggling the correct item\n                  index: i\n                };\n              });\n            }\n            return [];\n          }\n        },\n\n        onClick(e, legendItem, legend) {\n          legend.chart.toggleDataVisibility(legendItem.index);\n          legend.chart.update();\n        }\n      }\n    },\n\n    scales: {\n      r: {\n        type: 'radialLinear',\n        angleLines: {\n          display: false\n        },\n        beginAtZero: true,\n        grid: {\n          circular: true\n        },\n        pointLabels: {\n          display: false\n        },\n        startAngle: 0\n      }\n    }\n  };\n\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n  }\n\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n\n  update(mode) {\n    const arcs = this._cachedMeta.data;\n\n    this._updateRadius();\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n\n  /**\n   * @protected\n   */\n  getMinMax() {\n    const meta = this._cachedMeta;\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n\n    meta.data.forEach((element, index) => {\n      const parsed = this.getParsed(index).r;\n\n      if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n        if (parsed < range.min) {\n          range.min = parsed;\n        }\n\n        if (parsed > range.max) {\n          range.max = parsed;\n        }\n      }\n    });\n\n    return range;\n  }\n\n  /**\n\t * @private\n\t */\n  _updateRadius() {\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n\n    const outerRadius = Math.max(minSize / 2, 0);\n    const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n    const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n\n    this.outerRadius = outerRadius - (radiusLength * this.index);\n    this.innerRadius = this.outerRadius - radiusLength;\n  }\n\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const scale = this._cachedMeta.rScale;\n    const centerX = scale.xCenter;\n    const centerY = scale.yCenter;\n    const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n    let angle = datasetStartAngle;\n    let i;\n\n    const defaultAngle = 360 / this.countVisibleElements();\n\n    for (i = 0; i < start; ++i) {\n      angle += this._computeAngle(i, mode, defaultAngle);\n    }\n    for (i = start; i < start + count; i++) {\n      const arc = arcs[i];\n      let startAngle = angle;\n      let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n      let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n      angle = endAngle;\n\n      if (reset) {\n        if (animationOpts.animateScale) {\n          outerRadius = 0;\n        }\n        if (animationOpts.animateRotate) {\n          startAngle = endAngle = datasetStartAngle;\n        }\n      }\n\n      const properties = {\n        x: centerX,\n        y: centerY,\n        innerRadius: 0,\n        outerRadius,\n        startAngle,\n        endAngle,\n        options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n      };\n\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n\n  countVisibleElements() {\n    const meta = this._cachedMeta;\n    let count = 0;\n\n    meta.data.forEach((element, index) => {\n      if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n        count++;\n      }\n    });\n\n    return count;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeAngle(index, mode, defaultAngle) {\n    return this.chart.getDataVisibility(index)\n      ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n      : 0;\n  }\n}\n", "import DoughnutController from './controller.doughnut.js';\n\n// Pie charts are Doughnut chart with different defaults\nexport default class PieController extends DoughnutController {\n\n  static id = 'pie';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    // The percentage of the chart that we cut out of the middle.\n    cutout: 0,\n\n    // The rotation of the chart, where the first data arc begins.\n    rotation: 0,\n\n    // The total circumference of the chart.\n    circumference: 360,\n\n    // The outer radius of the chart\n    radius: '100%'\n  };\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {_parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class RadarController extends DatasetController {\n\n  static id = 'radar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: 'line',\n    dataElementType: 'point',\n    indexAxis: 'r',\n    showLine: true,\n    elements: {\n      line: {\n        fill: 'start'\n      }\n    },\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    scales: {\n      r: {\n        type: 'radialLinear',\n      }\n    }\n  };\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const vScale = this._cachedMeta.vScale;\n    const parsed = this.getParsed(index);\n\n    return {\n      label: vScale.getLabels()[index],\n      value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n    };\n  }\n\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const line = meta.dataset;\n    const points = meta.data || [];\n    const labels = meta.iScale.getLabels();\n\n    // Update Line\n    line.points = points;\n    // In resize mode only point locations change, so no need to set the points or options.\n    if (mode !== 'resize') {\n      const options = this.resolveDatasetElementOptions(mode);\n      if (!this.options.showLine) {\n        options.borderWidth = 0;\n      }\n\n      const properties = {\n        _loop: true,\n        _fullLoop: labels.length === points.length,\n        options\n      };\n\n      this.updateElement(line, undefined, properties, mode);\n    }\n\n    // Update Points\n    this.updateElements(points, 0, points.length, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const scale = this._cachedMeta.rScale;\n    const reset = mode === 'reset';\n\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n\n      const x = reset ? scale.xCenter : pointPosition.x;\n      const y = reset ? scale.yCenter : pointPosition.y;\n\n      const properties = {\n        x,\n        y,\n        angle: pointPosition.angle,\n        skip: isNaN(x) || isNaN(y),\n        options\n      };\n\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class ScatterController extends DatasetController {\n\n  static id = 'scatter';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'point',\n    showLine: false,\n    fill: false\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n\n    interaction: {\n      mode: 'point'\n    },\n\n    scales: {\n      x: {\n        type: 'linear'\n      },\n      y: {\n        type: 'linear'\n      }\n    }\n  };\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const labels = this.chart.data.labels || [];\n    const {xScale, yScale} = meta;\n    const parsed = this.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n\n    return {\n      label: labels[index] || '',\n      value: '(' + x + ', ' + y + ')'\n    };\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {data: points = []} = meta;\n    // @ts-ignore\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n    this._drawStart = start;\n    this._drawCount = count;\n\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n\n    if (this.options.showLine) {\n\n      // https://github.com/chartjs/Chart.js/issues/11333\n      if (!this.datasetElementType) {\n        this.addElements();\n      }\n      const {dataset: line, _dataset} = meta;\n\n      // Update Line\n      line._chart = this.chart;\n      line._datasetIndex = this.index;\n      line._decimated = !!_dataset._decimated;\n      line.points = points;\n\n      const options = this.resolveDatasetElementOptions(mode);\n      options.segment = this.options.segment;\n      this.updateElement(line, undefined, {\n        animated: !animationsDisabled,\n        options\n      }, mode);\n    } else if (this.datasetElementType) {\n      // https://github.com/chartjs/Chart.js/issues/11333\n      delete meta.dataset;\n      this.datasetElementType = false;\n    }\n\n    // Update Points\n    this.updateElements(points, start, count, mode);\n  }\n\n  addElements() {\n    const {showLine} = this.options;\n\n    if (!this.datasetElementType && showLine) {\n      this.datasetElementType = this.chart.registry.getElement('line');\n    }\n\n    super.addElements();\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n\n    for (let i = start; i < start + count; ++i) {\n      const point = points[i];\n      const parsed = this.getParsed(i);\n      const properties = directUpdate ? point : {};\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n\n      prevParsed = parsed;\n    }\n\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const data = meta.data || [];\n\n    if (!this.options.showLine) {\n      let max = 0;\n      for (let i = data.length - 1; i >= 0; --i) {\n        max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n      }\n      return max > 0 && max;\n    }\n\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n\n    if (!data.length) {\n      return border;\n    }\n\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n}\n", "/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartOptions} from '../types/index.js';\n\nexport type TimeUnit = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';\n\nexport interface DateAdapter<T extends AnyObject = AnyObject> {\n  readonly options: T;\n  /**\n   * Will called with chart options after adapter creation.\n   */\n  init(this: DateAdapter<T>, chartOptions: ChartOptions): void;\n  /**\n   * Returns a map of time formats for the supported formatting units defined\n   * in Unit as well as 'datetime' representing a detailed date/time string.\n   */\n  formats(this: DateAdapter<T>): Record<TimeUnit | 'datetime', string>;\n  /**\n   * Parses the given `value` and return the associated timestamp.\n   * @param value - the value to parse (usually comes from the data)\n   * @param [format] - the expected data format\n   */\n  parse(this: DateAdapter<T>, value: unknown, format?: string): number | null;\n  /**\n   * Returns the formatted date in the specified `format` for a given `timestamp`.\n   * @param timestamp - the timestamp to format\n   * @param format - the date/time token\n   */\n  format(this: DateAdapter<T>, timestamp: number, format: string): string;\n  /**\n   * Adds the specified `amount` of `unit` to the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param amount - the amount to add\n   * @param unit - the unit as string\n   */\n  add(this: DateAdapter<T>, timestamp: number, amount: number, unit: TimeUnit): number;\n  /**\n   * Returns the number of `unit` between the given timestamps.\n   * @param a - the input timestamp (reference)\n   * @param b - the timestamp to subtract\n   * @param unit - the unit as string\n   */\n  diff(this: DateAdapter<T>, a: number, b: number, unit: TimeUnit): number;\n  /**\n   * Returns start of `unit` for the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param unit - the unit as string\n   * @param [weekday] - the ISO day of the week with 1 being Monday\n   * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\n   */\n  startOf(this: DateAdapter<T>, timestamp: number, unit: TimeUnit | 'isoWeek', weekday?: number | boolean): number;\n  /**\n   * Returns end of `unit` for the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param unit - the unit as string\n   */\n  endOf(this: DateAdapter<T>, timestamp: number, unit: TimeUnit): number;\n}\n\nfunction abstract<T = void>(): T {\n  throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */\nclass DateAdapterBase implements DateAdapter {\n\n  /**\n   * Override default date adapter methods.\n   * Accepts type parameter to define options type.\n   * @example\n   * Chart._adapters._date.override<{myAdapterOption: string}>({\n   *   init() {\n   *     console.log(this.options.myAdapterOption);\n   *   }\n   * })\n   */\n  static override<T extends AnyObject = AnyObject>(\n    members: Partial<Omit<DateAdapter<T>, 'options'>>\n  ) {\n    Object.assign(DateAdapterBase.prototype, members);\n  }\n\n  readonly options: AnyObject;\n\n  constructor(options?: AnyObject) {\n    this.options = options || {};\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  init() {}\n\n  formats(): Record<TimeUnit | 'datetime', string> {\n    return abstract();\n  }\n\n  parse(): number | null {\n    return abstract();\n  }\n\n  format(): string {\n    return abstract();\n  }\n\n  add(): number {\n    return abstract();\n  }\n\n  diff(): number {\n    return abstract();\n  }\n\n  startOf(): number {\n    return abstract();\n  }\n\n  endOf(): number {\n    return abstract();\n  }\n}\n\nexport default {\n  _date: DateAdapterBase as {\n    new (options?: AnyObject): DateAdapter;\n    override<T extends AnyObject = AnyObject>(\n      members: Partial<Omit<DateAdapter<T>, 'options'>>\n    ): void;\n  }\n};\n", "import {_lookupByKey, _rlookupByKey} from '../helpers/helpers.collection.js';\nimport {getRelativePosition} from '../helpers/helpers.dom.js';\nimport {_angleBetween, getAngleFromPoint} from '../helpers/helpers.math.js';\nimport {_isPointInArea, isNullOrUndef} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef {{axis?: string, intersect?: boolean, includeInvisible?: boolean}} InteractionOptions\n * @typedef {{datasetIndex: number, index: number, element: import('./core.element.js').default}} InteractionItem\n * @typedef { import('../types/index.js').Point } Point\n */\n\n/**\n * Helper function to do binary search when possible\n * @param {object} metaset - the dataset meta\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {number} value - the value to find\n * @param {boolean} [intersect] - should the element intersect\n * @returns {{lo:number, hi:number}} indices to search data array between\n */\nfunction binarySearch(metaset, axis, value, intersect) {\n  const {controller, data, _sorted} = metaset;\n  const iScale = controller._cachedMeta.iScale;\n  const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;\n\n  if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n    const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n    if (!intersect) {\n      const result = lookupMethod(data, axis, value);\n      if (spanGaps) {\n        const {vScale} = controller._cachedMeta;\n        const {_parsed} = metaset;\n\n        const distanceToDefinedLo = (_parsed\n          .slice(0, result.lo + 1)\n          .reverse()\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        result.lo -= Math.max(0, distanceToDefinedLo);\n\n        const distanceToDefinedHi = (_parsed\n          .slice(result.hi)\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        result.hi += Math.max(0, distanceToDefinedHi);\n      }\n      return result;\n    } else if (controller._sharedOptions) {\n      // _sharedOptions indicates that each element has equal options -> equal proportions\n      // So we can do a ranged binary search based on the range of first element and\n      // be confident to get the full range of indices that can intersect with the value.\n      const el = data[0];\n      const range = typeof el.getRange === 'function' && el.getRange(axis);\n      if (range) {\n        const start = lookupMethod(data, axis, value - range);\n        const end = lookupMethod(data, axis, value + range);\n        return {lo: start.lo, hi: end.hi};\n      }\n    }\n  }\n  // Default to all elements, when binary search can not be used.\n  return {lo: 0, hi: data.length - 1};\n}\n\n/**\n * Helper function to select candidate elements for interaction\n * @param {Chart} chart - the chart\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {function} handler - the callback to execute for each visible item\n * @param {boolean} [intersect] - consider intersecting items\n */\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n  const metasets = chart.getSortedVisibleDatasetMetas();\n  const value = position[axis];\n  for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n    const {index, data} = metasets[i];\n    const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n    for (let j = lo; j <= hi; ++j) {\n      const element = data[j];\n      if (!element.skip) {\n        handler(element, index, j);\n      }\n    }\n  }\n}\n\n/**\n * Get a distance metric function for two points based on the\n * axis mode setting\n * @param {string} axis - the axis mode. x|y|xy|r\n */\nfunction getDistanceMetricForAxis(axis) {\n  const useX = axis.indexOf('x') !== -1;\n  const useY = axis.indexOf('y') !== -1;\n\n  return function(pt1, pt2) {\n    const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n    const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n    return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n  };\n}\n\n/**\n * Helper function to get the items that intersect the event position\n * @param {Chart} chart - the chart\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n  const items = [];\n\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return items;\n  }\n\n  const evaluationFunc = function(element, datasetIndex, index) {\n    if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n      return;\n    }\n    if (element.inRange(position.x, position.y, useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n    }\n  };\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a radial chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n  let items = [];\n\n  function evaluationFunc(element, datasetIndex, index) {\n    const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n    const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n\n    if (_angleBetween(angle, startAngle, endAngle)) {\n      items.push({element, datasetIndex, index});\n    }\n  }\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a cartesian chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  let items = [];\n  const distanceMetric = getDistanceMetricForAxis(axis);\n  let minDistance = Number.POSITIVE_INFINITY;\n\n  function evaluationFunc(element, datasetIndex, index) {\n    const inRange = element.inRange(position.x, position.y, useFinalPosition);\n    if (intersect && !inRange) {\n      return;\n    }\n\n    const center = element.getCenterPoint(useFinalPosition);\n    const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n    if (!pointInArea && !inRange) {\n      return;\n    }\n\n    const distance = distanceMetric(position, center);\n    if (distance < minDistance) {\n      items = [{element, datasetIndex, index}];\n      minDistance = distance;\n    } else if (distance === minDistance) {\n      // Can have multiple items at the same distance in which case we sort by size\n      items.push({element, datasetIndex, index});\n    }\n  }\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position considering all visible items in the chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return [];\n  }\n\n  return axis === 'r' && !intersect\n    ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n    : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n\n/**\n * Helper function to get the items matching along the given X or Y axis\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis to match\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n  const items = [];\n  const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n  let intersectsItem = false;\n\n  evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n    if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n      intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n    }\n  });\n\n  // If we want to trigger on an intersect and we don't have any items\n  // that intersect the position, return nothing\n  if (intersect && !intersectsItem) {\n    return [];\n  }\n  return items;\n}\n\n/**\n * Contains interaction related functions\n * @namespace Chart.Interaction\n */\nexport default {\n  // Part of the public API to facilitate developers creating their own modes\n  evaluateInteractionItems,\n\n  // Helper function for different modes\n  modes: {\n    /**\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\n\t\t * @function Chart.Interaction.modes.index\n\t\t * @since v2.4.0\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    index(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      // Default axis for index mode is 'x' to match old behaviour\n      const axis = options.axis || 'x';\n      const includeInvisible = options.includeInvisible || false;\n      const items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n        : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      const elements = [];\n\n      if (!items.length) {\n        return [];\n      }\n\n      chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n        const index = items[0].index;\n        const element = meta.data[index];\n\n        // don't count items that are skipped (null data)\n        if (element && !element.skip) {\n          elements.push({element, datasetIndex: meta.index, index});\n        }\n      });\n\n      return elements;\n    },\n\n    /**\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\n\t\t * @function Chart.Interaction.modes.dataset\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    dataset(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      let items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n        getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n\n      if (items.length > 0) {\n        const datasetIndex = items[0].datasetIndex;\n        const data = chart.getDatasetMeta(datasetIndex).data;\n        items = [];\n        for (let i = 0; i < data.length; ++i) {\n          items.push({element: data[i], datasetIndex, index: i});\n        }\n      }\n\n      return items;\n    },\n\n    /**\n\t\t * Point mode returns all elements that hit test based on the event position\n\t\t * of the event\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    point(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n    },\n\n    /**\n\t\t * nearest mode returns the element closest to the point\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    nearest(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n    },\n\n    /**\n\t\t * x mode returns the elements that hit-test at the current x coordinate\n\t\t * @function Chart.Interaction.modes.x\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    x(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n    },\n\n    /**\n\t\t * y mode returns the elements that hit-test at the current y coordinate\n\t\t * @function Chart.Interaction.modes.y\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    y(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n    }\n  }\n};\n", "import {defined, each, isObject} from '../helpers/helpers.core.js';\nimport {toPadding} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n */\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\n\nfunction filterByPosition(array, position) {\n  return array.filter(v => v.pos === position);\n}\n\nfunction filterDynamicPositionByAxis(array, axis) {\n  return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\n\nfunction sortByWeight(array, reverse) {\n  return array.sort((a, b) => {\n    const v0 = reverse ? b : a;\n    const v1 = reverse ? a : b;\n    return v0.weight === v1.weight ?\n      v0.index - v1.index :\n      v0.weight - v1.weight;\n  });\n}\n\nfunction wrapBoxes(boxes) {\n  const layoutBoxes = [];\n  let i, ilen, box, pos, stack, stackWeight;\n\n  for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n    box = boxes[i];\n    ({position: pos, options: {stack, stackWeight = 1}} = box);\n    layoutBoxes.push({\n      index: i,\n      box,\n      pos,\n      horizontal: box.isHorizontal(),\n      weight: box.weight,\n      stack: stack && (pos + stack),\n      stackWeight\n    });\n  }\n  return layoutBoxes;\n}\n\nfunction buildStacks(layouts) {\n  const stacks = {};\n  for (const wrap of layouts) {\n    const {stack, pos, stackWeight} = wrap;\n    if (!stack || !STATIC_POSITIONS.includes(pos)) {\n      continue;\n    }\n    const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n    _stack.count++;\n    _stack.weight += stackWeight;\n  }\n  return stacks;\n}\n\n/**\n * store dimensions used instead of available chartArea in fitBoxes\n **/\nfunction setLayoutDims(layouts, params) {\n  const stacks = buildStacks(layouts);\n  const {vBoxMaxWidth, hBoxMaxHeight} = params;\n  let i, ilen, layout;\n  for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n    layout = layouts[i];\n    const {fullSize} = layout.box;\n    const stack = stacks[layout.stack];\n    const factor = stack && layout.stackWeight / stack.weight;\n    if (layout.horizontal) {\n      layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n      layout.height = hBoxMaxHeight;\n    } else {\n      layout.width = vBoxMaxWidth;\n      layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n    }\n  }\n  return stacks;\n}\n\nfunction buildLayoutBoxes(boxes) {\n  const layoutBoxes = wrapBoxes(boxes);\n  const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n  const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n  const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n  const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n  const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n  const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n  const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n\n  return {\n    fullSize,\n    leftAndTop: left.concat(top),\n    rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n    chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n    vertical: left.concat(right).concat(centerVertical),\n    horizontal: top.concat(bottom).concat(centerHorizontal)\n  };\n}\n\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n  return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\n\nfunction updateMaxPadding(maxPadding, boxPadding) {\n  maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n  maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n  maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n  maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\n\nfunction updateDims(chartArea, params, layout, stacks) {\n  const {pos, box} = layout;\n  const maxPadding = chartArea.maxPadding;\n\n  // dynamically placed boxes size is not considered\n  if (!isObject(pos)) {\n    if (layout.size) {\n      // this layout was already counted for, lets first reduce old size\n      chartArea[pos] -= layout.size;\n    }\n    const stack = stacks[layout.stack] || {size: 0, count: 1};\n    stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n    layout.size = stack.size / stack.count;\n    chartArea[pos] += layout.size;\n  }\n\n  if (box.getPadding) {\n    updateMaxPadding(maxPadding, box.getPadding());\n  }\n\n  const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n  const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n  const widthChanged = newWidth !== chartArea.w;\n  const heightChanged = newHeight !== chartArea.h;\n  chartArea.w = newWidth;\n  chartArea.h = newHeight;\n\n  // return booleans on the changes per direction\n  return layout.horizontal\n    ? {same: widthChanged, other: heightChanged}\n    : {same: heightChanged, other: widthChanged};\n}\n\nfunction handleMaxPadding(chartArea) {\n  const maxPadding = chartArea.maxPadding;\n\n  function updatePos(pos) {\n    const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n    chartArea[pos] += change;\n    return change;\n  }\n  chartArea.y += updatePos('top');\n  chartArea.x += updatePos('left');\n  updatePos('right');\n  updatePos('bottom');\n}\n\nfunction getMargins(horizontal, chartArea) {\n  const maxPadding = chartArea.maxPadding;\n\n  function marginForPositions(positions) {\n    const margin = {left: 0, top: 0, right: 0, bottom: 0};\n    positions.forEach((pos) => {\n      margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n    });\n    return margin;\n  }\n\n  return horizontal\n    ? marginForPositions(['left', 'right'])\n    : marginForPositions(['top', 'bottom']);\n}\n\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n  const refitBoxes = [];\n  let i, ilen, layout, box, refit, changed;\n\n  for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n    layout = boxes[i];\n    box = layout.box;\n\n    box.update(\n      layout.width || chartArea.w,\n      layout.height || chartArea.h,\n      getMargins(layout.horizontal, chartArea)\n    );\n    const {same, other} = updateDims(chartArea, params, layout, stacks);\n\n    // Dimensions changed and there were non full width boxes before this\n    // -> we have to refit those\n    refit |= same && refitBoxes.length;\n\n    // Chart area changed in the opposite direction\n    changed = changed || other;\n\n    if (!box.fullSize) { // fullSize boxes don't need to be re-fitted in any case\n      refitBoxes.push(layout);\n    }\n  }\n\n  return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\n\nfunction setBoxDims(box, left, top, width, height) {\n  box.top = top;\n  box.left = left;\n  box.right = left + width;\n  box.bottom = top + height;\n  box.width = width;\n  box.height = height;\n}\n\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n  const userPadding = params.padding;\n  let {x, y} = chartArea;\n\n  for (const layout of boxes) {\n    const box = layout.box;\n    const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n    const weight = (layout.stackWeight / stack.weight) || 1;\n    if (layout.horizontal) {\n      const width = chartArea.w * weight;\n      const height = stack.size || box.height;\n      if (defined(stack.start)) {\n        y = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n      } else {\n        setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n      }\n      stack.start = y;\n      stack.placed += width;\n      y = box.bottom;\n    } else {\n      const height = chartArea.h * weight;\n      const width = stack.size || box.width;\n      if (defined(stack.start)) {\n        x = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n      } else {\n        setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n      }\n      stack.start = x;\n      stack.placed += height;\n      x = box.right;\n    }\n  }\n\n  chartArea.x = x;\n  chartArea.y = y;\n}\n\n/**\n * @interface LayoutItem\n * @typedef {object} LayoutItem\n * @prop {string} position - The position of the item in the chart layout. Possible values are\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\n * @prop {boolean} fullSize - if true, and the item is horizontal, then push vertical boxes down\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\n * @prop {function} draw - Draws the element\n * @prop {function} [getPadding] -  Returns an object with padding on the edges\n * @prop {number} width - Width of item. Must be valid after update()\n * @prop {number} height - Height of item. Must be valid after update()\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\n */\n\n// The layout service is very self explanatory.  It's responsible for the layout within a chart.\n// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n// It is this service's responsibility of carrying out that layout.\nexport default {\n\n  /**\n\t * Register a box to a chart.\n\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\n\t * @param {Chart} chart - the chart to use\n\t * @param {LayoutItem} item - the item to add to be laid out\n\t */\n  addBox(chart, item) {\n    if (!chart.boxes) {\n      chart.boxes = [];\n    }\n\n    // initialize item with default values\n    item.fullSize = item.fullSize || false;\n    item.position = item.position || 'top';\n    item.weight = item.weight || 0;\n    // @ts-ignore\n    item._layers = item._layers || function() {\n      return [{\n        z: 0,\n        draw(chartArea) {\n          item.draw(chartArea);\n        }\n      }];\n    };\n\n    chart.boxes.push(item);\n  },\n\n  /**\n\t * Remove a layoutItem from a chart\n\t * @param {Chart} chart - the chart to remove the box from\n\t * @param {LayoutItem} layoutItem - the item to remove from the layout\n\t */\n  removeBox(chart, layoutItem) {\n    const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n    if (index !== -1) {\n      chart.boxes.splice(index, 1);\n    }\n  },\n\n  /**\n\t * Sets (or updates) options on the given `item`.\n\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\n\t * @param {LayoutItem} item - the item to configure with the given options\n\t * @param {object} options - the new item options.\n\t */\n  configure(chart, item, options) {\n    item.fullSize = options.fullSize;\n    item.position = options.position;\n    item.weight = options.weight;\n  },\n\n  /**\n\t * Fits boxes of the given chart into the given size by having each box measure itself\n\t * then running a fitting algorithm\n\t * @param {Chart} chart - the chart\n\t * @param {number} width - the width to fit into\n\t * @param {number} height - the height to fit into\n   * @param {number} minPadding - minimum padding required for each side of chart area\n\t */\n  update(chart, width, height, minPadding) {\n    if (!chart) {\n      return;\n    }\n\n    const padding = toPadding(chart.options.layout.padding);\n    const availableWidth = Math.max(width - padding.width, 0);\n    const availableHeight = Math.max(height - padding.height, 0);\n    const boxes = buildLayoutBoxes(chart.boxes);\n    const verticalBoxes = boxes.vertical;\n    const horizontalBoxes = boxes.horizontal;\n\n    // Before any changes are made, notify boxes that an update is about to being\n    // This is used to clear any cached data (e.g. scale limits)\n    each(chart.boxes, box => {\n      if (typeof box.beforeLayout === 'function') {\n        box.beforeLayout();\n      }\n    });\n\n    // Essentially we now have any number of boxes on each of the 4 sides.\n    // Our canvas looks like the following.\n    // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n    // B1 is the bottom axis\n    // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n    // These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n    // an error will be thrown.\n    //\n    // |----------------------------------------------------|\n    // |                  T1 (Full Width)                   |\n    // |----------------------------------------------------|\n    // |    |    |                 T2                  |    |\n    // |    |----|-------------------------------------|----|\n    // |    |    | C1 |                           | C2 |    |\n    // |    |    |----|                           |----|    |\n    // |    |    |                                     |    |\n    // | L1 | L2 |           ChartArea (C0)            | R1 |\n    // |    |    |                                     |    |\n    // |    |    |----|                           |----|    |\n    // |    |    | C3 |                           | C4 |    |\n    // |    |----|-------------------------------------|----|\n    // |    |    |                 B1                  |    |\n    // |----------------------------------------------------|\n    // |                  B2 (Full Width)                   |\n    // |----------------------------------------------------|\n    //\n\n    const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n      wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n\n    const params = Object.freeze({\n      outerWidth: width,\n      outerHeight: height,\n      padding,\n      availableWidth,\n      availableHeight,\n      vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n      hBoxMaxHeight: availableHeight / 2\n    });\n    const maxPadding = Object.assign({}, padding);\n    updateMaxPadding(maxPadding, toPadding(minPadding));\n    const chartArea = Object.assign({\n      maxPadding,\n      w: availableWidth,\n      h: availableHeight,\n      x: padding.left,\n      y: padding.top\n    }, padding);\n\n    const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n\n    // First fit the fullSize boxes, to reduce probability of re-fitting.\n    fitBoxes(boxes.fullSize, chartArea, params, stacks);\n\n    // Then fit vertical boxes\n    fitBoxes(verticalBoxes, chartArea, params, stacks);\n\n    // Then fit horizontal boxes\n    if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n      // if the area changed, re-fit vertical boxes\n      fitBoxes(verticalBoxes, chartArea, params, stacks);\n    }\n\n    handleMaxPadding(chartArea);\n\n    // Finally place the boxes to correct coordinates\n    placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n\n    // Move to opposite side of chart\n    chartArea.x += chartArea.w;\n    chartArea.y += chartArea.h;\n\n    placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n\n    chart.chartArea = {\n      left: chartArea.left,\n      top: chartArea.top,\n      right: chartArea.left + chartArea.w,\n      bottom: chartArea.top + chartArea.h,\n      height: chartArea.h,\n      width: chartArea.w,\n    };\n\n    // Finally update boxes in chartArea (radial scale for example)\n    each(boxes.chartArea, (layout) => {\n      const box = layout.box;\n      Object.assign(box, chart.chartArea);\n      box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n    });\n  }\n};\n", "\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\n/**\n * Abstract class that allows abstracting platform dependencies away from the chart.\n */\nexport default class BasePlatform {\n  /**\n\t * Called at chart construction time, returns a context2d instance implementing\n\t * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\n\t * @param {HTMLCanvasElement} canvas - The canvas from which to acquire context (platform specific)\n\t * @param {number} [aspectRatio] - The chart options\n\t */\n  acquireContext(canvas, aspectRatio) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Called at chart destruction time, releases any resources associated to the context\n\t * previously returned by the acquireContext() method.\n\t * @param {CanvasRenderingContext2D} context - The context2d instance\n\t * @returns {boolean} true if the method succeeded, else false\n\t */\n  releaseContext(context) { // eslint-disable-line no-unused-vars\n    return false;\n  }\n\n  /**\n\t * Registers the specified listener on the given chart.\n\t * @param {Chart} chart - Chart from which to listen for event\n\t * @param {string} type - The ({@link ChartEvent}) type to listen for\n\t * @param {function} listener - Receives a notification (an object that implements\n\t * the {@link ChartEvent} interface) when an event of the specified type occurs.\n\t */\n  addEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Removes the specified listener previously registered with addEventListener.\n\t * @param {Chart} chart - Chart from which to remove the listener\n\t * @param {string} type - The ({@link ChartEvent}) type to remove\n\t * @param {function} listener - The listener function to remove from the event target.\n\t */\n  removeEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * @returns {number} the current devicePixelRatio of the device this platform is connected to.\n\t */\n  getDevicePixelRatio() {\n    return 1;\n  }\n\n  /**\n\t * Returns the maximum size in pixels of given canvas element.\n\t * @param {HTMLCanvasElement} element\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n  getMaximumSize(element, width, height, aspectRatio) {\n    width = Math.max(0, width || element.width);\n    height = height || element.height;\n    return {\n      width,\n      height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n    };\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @returns {boolean} true if the canvas is attached to the platform, false if not.\n\t */\n  isAttached(canvas) { // eslint-disable-line no-unused-vars\n    return true;\n  }\n\n  /**\n   * Updates config with platform specific requirements\n   * @param {import('../core/core.config.js').default} config\n   */\n  updateConfig(config) { // eslint-disable-line no-unused-vars\n    // no-op\n  }\n}\n", "/**\n * Platform fallback implementation (minimal).\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\n */\n\nimport BasePlatform from './platform.base.js';\n\n/**\n * Platform class for charts without access to the DOM or to many element properties\n * This platform is used by default for any chart passed an OffscreenCanvas.\n * @extends BasePlatform\n */\nexport default class BasicPlatform extends BasePlatform {\n  acquireContext(item) {\n    // To prevent canvas fingerprinting, some add-ons undefine the getContext\n    // method, for example: https://github.com/kkapsner/CanvasBlocker\n    // https://github.com/chartjs/Chart.js/issues/2807\n    return item && item.getContext && item.getContext('2d') || null;\n  }\n  updateConfig(config) {\n    config.options.animation = false;\n  }\n}\n", "/**\n * Chart.Platform implementation for targeting a web browser\n */\n\nimport BasePlatform from './platform.base.js';\nimport {_getParentNode, getRelativePosition, supportsEventListenerOptions, readUsedSize, getMaximumSize} from '../helpers/helpers.dom.js';\nimport {throttled} from '../helpers/helpers.extras.js';\nimport {isNullOrUndef} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nconst EXPANDO_KEY = '$chartjs';\n\n/**\n * DOM event types -> Chart.js event types.\n * Note: only events with different types are mapped.\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\n */\nconst EVENT_TYPES = {\n  touchstart: 'mousedown',\n  touchmove: 'mousemove',\n  touchend: 'mouseup',\n  pointerenter: 'mouseenter',\n  pointerdown: 'mousedown',\n  pointermove: 'mousemove',\n  pointerup: 'mouseup',\n  pointerleave: 'mouseout',\n  pointerout: 'mouseout'\n};\n\nconst isNullOrEmpty = value => value === null || value === '';\n/**\n * Initializes the canvas style and render size without modifying the canvas display size,\n * since responsiveness is handled by the controller.resize() method. The config is used\n * to determine the aspect ratio to apply in case no explicit height has been specified.\n * @param {HTMLCanvasElement} canvas\n * @param {number} [aspectRatio]\n */\nfunction initCanvas(canvas, aspectRatio) {\n  const style = canvas.style;\n\n  // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n  // returns null or '' if no explicit value has been set to the canvas attribute.\n  const renderHeight = canvas.getAttribute('height');\n  const renderWidth = canvas.getAttribute('width');\n\n  // Chart.js modifies some canvas values that we want to restore on destroy\n  canvas[EXPANDO_KEY] = {\n    initial: {\n      height: renderHeight,\n      width: renderWidth,\n      style: {\n        display: style.display,\n        height: style.height,\n        width: style.width\n      }\n    }\n  };\n\n  // Force canvas to display as block to avoid extra space caused by inline\n  // elements, which would interfere with the responsive resize process.\n  // https://github.com/chartjs/Chart.js/issues/2538\n  style.display = style.display || 'block';\n  // Include possible borders in the size\n  style.boxSizing = style.boxSizing || 'border-box';\n\n  if (isNullOrEmpty(renderWidth)) {\n    const displayWidth = readUsedSize(canvas, 'width');\n    if (displayWidth !== undefined) {\n      canvas.width = displayWidth;\n    }\n  }\n\n  if (isNullOrEmpty(renderHeight)) {\n    if (canvas.style.height === '') {\n      // If no explicit render height and style height, let's apply the aspect ratio,\n      // which one can be specified by the user but also by charts as default option\n      // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n      canvas.height = canvas.width / (aspectRatio || 2);\n    } else {\n      const displayHeight = readUsedSize(canvas, 'height');\n      if (displayHeight !== undefined) {\n        canvas.height = displayHeight;\n      }\n    }\n  }\n\n  return canvas;\n}\n\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n// https://github.com/chartjs/Chart.js/issues/4287\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\n\nfunction addListener(node, type, listener) {\n  if (node) {\n    node.addEventListener(type, listener, eventListenerOptions);\n  }\n}\n\nfunction removeListener(chart, type, listener) {\n  if (chart && chart.canvas) {\n    chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n  }\n}\n\nfunction fromNativeEvent(event, chart) {\n  const type = EVENT_TYPES[event.type] || event.type;\n  const {x, y} = getRelativePosition(event, chart);\n  return {\n    type,\n    chart,\n    native: event,\n    x: x !== undefined ? x : null,\n    y: y !== undefined ? y : null,\n  };\n}\n\nfunction nodeListContains(nodeList, canvas) {\n  for (const node of nodeList) {\n    if (node === canvas || node.contains(canvas)) {\n      return true;\n    }\n  }\n}\n\nfunction createAttachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\n\nfunction createDetachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\n\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\n\nfunction onWindowResize() {\n  const dpr = window.devicePixelRatio;\n  if (dpr === oldDevicePixelRatio) {\n    return;\n  }\n  oldDevicePixelRatio = dpr;\n  drpListeningCharts.forEach((resize, chart) => {\n    if (chart.currentDevicePixelRatio !== dpr) {\n      resize();\n    }\n  });\n}\n\nfunction listenDevicePixelRatioChanges(chart, resize) {\n  if (!drpListeningCharts.size) {\n    window.addEventListener('resize', onWindowResize);\n  }\n  drpListeningCharts.set(chart, resize);\n}\n\nfunction unlistenDevicePixelRatioChanges(chart) {\n  drpListeningCharts.delete(chart);\n  if (!drpListeningCharts.size) {\n    window.removeEventListener('resize', onWindowResize);\n  }\n}\n\nfunction createResizeObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const container = canvas && _getParentNode(canvas);\n  if (!container) {\n    return;\n  }\n  const resize = throttled((width, height) => {\n    const w = container.clientWidth;\n    listener(width, height);\n    if (w < container.clientWidth) {\n      // If the container size shrank during chart resize, let's assume\n      // scrollbar appeared. So we resize again with the scrollbar visible -\n      // effectively making chart smaller and the scrollbar hidden again.\n      // Because we are inside `throttled`, and currently `ticking`, scroll\n      // events are ignored during this whole 2 resize process.\n      // If we assumed wrong and something else happened, we are resizing\n      // twice in a frame (potential performance issue)\n      listener();\n    }\n  }, window);\n\n  // @ts-ignore until https://github.com/microsoft/TypeScript/issues/37861 implemented\n  const observer = new ResizeObserver(entries => {\n    const entry = entries[0];\n    const width = entry.contentRect.width;\n    const height = entry.contentRect.height;\n    // When its container's display is set to 'none' the callback will be called with a\n    // size of (0, 0), which will cause the chart to lose its original height, so skip\n    // resizing in such case.\n    if (width === 0 && height === 0) {\n      return;\n    }\n    resize(width, height);\n  });\n  observer.observe(container);\n  listenDevicePixelRatioChanges(chart, resize);\n\n  return observer;\n}\n\nfunction releaseObserver(chart, type, observer) {\n  if (observer) {\n    observer.disconnect();\n  }\n  if (type === 'resize') {\n    unlistenDevicePixelRatioChanges(chart);\n  }\n}\n\nfunction createProxyAndListen(chart, type, listener) {\n  const canvas = chart.canvas;\n  const proxy = throttled((event) => {\n    // This case can occur if the chart is destroyed while waiting\n    // for the throttled function to occur. We prevent crashes by checking\n    // for a destroyed chart\n    if (chart.ctx !== null) {\n      listener(fromNativeEvent(event, chart));\n    }\n  }, chart);\n\n  addListener(canvas, type, proxy);\n\n  return proxy;\n}\n\n/**\n * Platform class for charts that can access the DOM and global window/document properties\n * @extends BasePlatform\n */\nexport default class DomPlatform extends BasePlatform {\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [aspectRatio]\n\t * @return {CanvasRenderingContext2D|null}\n\t */\n  acquireContext(canvas, aspectRatio) {\n    // To prevent canvas fingerprinting, some add-ons undefine the getContext\n    // method, for example: https://github.com/kkapsner/CanvasBlocker\n    // https://github.com/chartjs/Chart.js/issues/2807\n    const context = canvas && canvas.getContext && canvas.getContext('2d');\n\n    // `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the canvas is\n    // inside an iframe or when running in a protected environment. We could guess the\n    // types from their toString() value but let's keep things flexible and assume it's\n    // a sufficient condition if the canvas has a context2D which has canvas as `canvas`.\n    // https://github.com/chartjs/Chart.js/issues/3887\n    // https://github.com/chartjs/Chart.js/issues/4102\n    // https://github.com/chartjs/Chart.js/issues/4152\n    if (context && context.canvas === canvas) {\n      // Load platform resources on first chart creation, to make it possible to\n      // import the library before setting platform options.\n      initCanvas(canvas, aspectRatio);\n      return context;\n    }\n\n    return null;\n  }\n\n  /**\n\t * @param {CanvasRenderingContext2D} context\n\t */\n  releaseContext(context) {\n    const canvas = context.canvas;\n    if (!canvas[EXPANDO_KEY]) {\n      return false;\n    }\n\n    const initial = canvas[EXPANDO_KEY].initial;\n    ['height', 'width'].forEach((prop) => {\n      const value = initial[prop];\n      if (isNullOrUndef(value)) {\n        canvas.removeAttribute(prop);\n      } else {\n        canvas.setAttribute(prop, value);\n      }\n    });\n\n    const style = initial.style || {};\n    Object.keys(style).forEach((key) => {\n      canvas.style[key] = style[key];\n    });\n\n    // The canvas render size might have been changed (and thus the state stack discarded),\n    // we can't use save() and restore() to restore the initial state. So make sure that at\n    // least the canvas context is reset to the default state by setting the canvas width.\n    // https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n    // eslint-disable-next-line no-self-assign\n    canvas.width = canvas.width;\n\n    delete canvas[EXPANDO_KEY];\n    return true;\n  }\n\n  /**\n\t *\n\t * @param {Chart} chart\n\t * @param {string} type\n\t * @param {function} listener\n\t */\n  addEventListener(chart, type, listener) {\n    // Can have only one listener per type, so make sure previous is removed\n    this.removeEventListener(chart, type);\n\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const handlers = {\n      attach: createAttachObserver,\n      detach: createDetachObserver,\n      resize: createResizeObserver\n    };\n    const handler = handlers[type] || createProxyAndListen;\n    proxies[type] = handler(chart, type, listener);\n  }\n\n\n  /**\n\t * @param {Chart} chart\n\t * @param {string} type\n\t */\n  removeEventListener(chart, type) {\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const proxy = proxies[type];\n\n    if (!proxy) {\n      return;\n    }\n\n    const handlers = {\n      attach: releaseObserver,\n      detach: releaseObserver,\n      resize: releaseObserver\n    };\n    const handler = handlers[type] || removeListener;\n    handler(chart, type, proxy);\n    proxies[type] = undefined;\n  }\n\n  getDevicePixelRatio() {\n    return window.devicePixelRatio;\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n  getMaximumSize(canvas, width, height, aspectRatio) {\n    return getMaximumSize(canvas, width, height, aspectRatio);\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t */\n  isAttached(canvas) {\n    const container = canvas && _getParentNode(canvas);\n    return !!(container && container.isConnected);\n  }\n}\n", "import {_isDomSupported} from '../helpers/index.js';\nimport BasePlatform from './platform.base.js';\nimport BasicPlatform from './platform.basic.js';\nimport DomPlatform from './platform.dom.js';\n\nexport function _detectPlatform(canvas) {\n  if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n    return BasicPlatform;\n  }\n  return DomPlatform;\n}\n\nexport {BasePlatform, BasicPlatform, DomPlatform};\n", "import type {AnyObject} from '../types/basic.js';\nimport type {Point} from '../types/geometric.js';\nimport type {Animation} from '../types/animation.js';\nimport {isNumber} from '../helpers/helpers.math.js';\n\nexport default class Element<T = AnyObject, O = AnyObject> {\n\n  static defaults = {};\n  static defaultRoutes = undefined;\n\n  x: number;\n  y: number;\n  active = false;\n  options: O;\n  $animations: Record<keyof T, Animation>;\n\n  tooltipPosition(useFinalPosition: boolean): Point {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y} as Point;\n  }\n\n  hasValue() {\n    return isNumber(this.x) && isNumber(this.y);\n  }\n\n  /**\n   * Gets the current or final value of each prop. Can return extra properties (whole object).\n   * @param props - properties to get\n   * @param [final] - get the final value (animation target)\n   */\n  getProps<P extends (keyof T)[]>(props: P, final?: boolean): Pick<T, P[number]>;\n  getProps<P extends string>(props: P[], final?: boolean): Partial<Record<P, unknown>>;\n  getProps(props: string[], final?: boolean): Partial<Record<string, unknown>> {\n    const anims = this.$animations;\n    if (!final || !anims) {\n      // let's not create an object, if not needed\n      return this as Record<string, unknown>;\n    }\n    const ret: Record<string, unknown> = {};\n    props.forEach((prop) => {\n      ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop as string];\n    });\n    return ret;\n  }\n}\n", "import {isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\nimport {_factorize} from '../helpers/helpers.math.js';\n\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a subset of ticks to be plotted to avoid overlapping labels.\n * @param {import('./core.scale.js').default} scale\n * @param {Tick[]} ticks\n * @return {Tick[]}\n * @private\n */\nexport function autoSkip(scale, ticks) {\n  const tickOpts = scale.options.ticks;\n  const determinedMaxTicks = determineMaxTicks(scale);\n  const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n  const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n  const numMajorIndices = majorIndices.length;\n  const first = majorIndices[0];\n  const last = majorIndices[numMajorIndices - 1];\n  const newTicks = [];\n\n  // If there are too many major ticks to display them all\n  if (numMajorIndices > ticksLimit) {\n    skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n    return newTicks;\n  }\n\n  const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n\n  if (numMajorIndices > 0) {\n    let i, ilen;\n    const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n    skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n    for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n      skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n    }\n    skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n    return newTicks;\n  }\n  skip(ticks, newTicks, spacing);\n  return newTicks;\n}\n\nfunction determineMaxTicks(scale) {\n  const offset = scale.options.offset;\n  const tickLength = scale._tickSize();\n  const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n  const maxChart = scale._maxLength / tickLength;\n  return Math.floor(Math.min(maxScale, maxChart));\n}\n\n/**\n * @param {number[]} majorIndices\n * @param {Tick[]} ticks\n * @param {number} ticksLimit\n */\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n  const evenMajorSpacing = getEvenSpacing(majorIndices);\n  const spacing = ticks.length / ticksLimit;\n\n  // If the major ticks are evenly spaced apart, place the minor ticks\n  // so that they divide the major ticks into even chunks\n  if (!evenMajorSpacing) {\n    return Math.max(spacing, 1);\n  }\n\n  const factors = _factorize(evenMajorSpacing);\n  for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n    const factor = factors[i];\n    if (factor > spacing) {\n      return factor;\n    }\n  }\n  return Math.max(spacing, 1);\n}\n\n/**\n * @param {Tick[]} ticks\n */\nfunction getMajorIndices(ticks) {\n  const result = [];\n  let i, ilen;\n  for (i = 0, ilen = ticks.length; i < ilen; i++) {\n    if (ticks[i].major) {\n      result.push(i);\n    }\n  }\n  return result;\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number[]} majorIndices\n * @param {number} spacing\n */\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n  let count = 0;\n  let next = majorIndices[0];\n  let i;\n\n  spacing = Math.ceil(spacing);\n  for (i = 0; i < ticks.length; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = majorIndices[count * spacing];\n    }\n  }\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number} spacing\n * @param {number} [majorStart]\n * @param {number} [majorEnd]\n */\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n  const start = valueOrDefault(majorStart, 0);\n  const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n  let count = 0;\n  let length, i, next;\n\n  spacing = Math.ceil(spacing);\n  if (majorEnd) {\n    length = majorEnd - majorStart;\n    spacing = length / Math.floor(length / spacing);\n  }\n\n  next = start;\n\n  while (next < 0) {\n    count++;\n    next = Math.round(start + count * spacing);\n  }\n\n  for (i = Math.max(start, 0); i < end; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = Math.round(start + count * spacing);\n    }\n  }\n}\n\n\n/**\n * @param {number[]} arr\n */\nfunction getEvenSpacing(arr) {\n  const len = arr.length;\n  let i, diff;\n\n  if (len < 2) {\n    return false;\n  }\n\n  for (diff = arr[0], i = 1; i < len; ++i) {\n    if (arr[i] - arr[i - 1] !== diff) {\n      return false;\n    }\n  }\n  return diff;\n}\n", "import Element from './core.element.js';\nimport {_alignPixel, _measureText, renderText, clipArea, unclipArea} from '../helpers/helpers.canvas.js';\nimport {callback as call, each, finiteOrDefault, isArray, isFinite, isNullOrUndef, isObject, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toDegrees, toRadians, _int16Range, _limitValue, HALF_PI} from '../helpers/helpers.math.js';\nimport {_alignStartEnd, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {createContext, toFont, toPadding, _addGrace} from '../helpers/helpers.options.js';\nimport {autoSkip} from './core.scale.autoskip.js';\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit) => Math.min(maxTicksLimit || ticksLength, ticksLength);\n\n/**\n * @typedef { import('../types/index.js').Chart } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a new array containing numItems from arr\n * @param {any[]} arr\n * @param {number} numItems\n */\nfunction sample(arr, numItems) {\n  const result = [];\n  const increment = arr.length / numItems;\n  const len = arr.length;\n  let i = 0;\n\n  for (; i < len; i += increment) {\n    result.push(arr[Math.floor(i)]);\n  }\n  return result;\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @param {boolean} offsetGridLines\n */\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n  const length = scale.ticks.length;\n  const validIndex = Math.min(index, length - 1);\n  const start = scale._startPixel;\n  const end = scale._endPixel;\n  const epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\n  let lineValue = scale.getPixelForTick(validIndex);\n  let offset;\n\n  if (offsetGridLines) {\n    if (length === 1) {\n      offset = Math.max(lineValue - start, end - lineValue);\n    } else if (index === 0) {\n      offset = (scale.getPixelForTick(1) - lineValue) / 2;\n    } else {\n      offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n    }\n    lineValue += validIndex < index ? offset : -offset;\n\n    // Return undefined if the pixel is out of the range\n    if (lineValue < start - epsilon || lineValue > end + epsilon) {\n      return;\n    }\n  }\n  return lineValue;\n}\n\n/**\n * @param {object} caches\n * @param {number} length\n */\nfunction garbageCollect(caches, length) {\n  each(caches, (cache) => {\n    const gc = cache.gc;\n    const gcLen = gc.length / 2;\n    let i;\n    if (gcLen > length) {\n      for (i = 0; i < gcLen; ++i) {\n        delete cache.data[gc[i]];\n      }\n      gc.splice(0, gcLen);\n    }\n  });\n}\n\n/**\n * @param {object} options\n */\nfunction getTickMarkLength(options) {\n  return options.drawTicks ? options.tickLength : 0;\n}\n\n/**\n * @param {object} options\n */\nfunction getTitleHeight(options, fallback) {\n  if (!options.display) {\n    return 0;\n  }\n\n  const font = toFont(options.font, fallback);\n  const padding = toPadding(options.padding);\n  const lines = isArray(options.text) ? options.text.length : 1;\n\n  return (lines * font.lineHeight) + padding.height;\n}\n\nfunction createScaleContext(parent, scale) {\n  return createContext(parent, {\n    scale,\n    type: 'scale'\n  });\n}\n\nfunction createTickContext(parent, index, tick) {\n  return createContext(parent, {\n    tick,\n    index,\n    type: 'tick'\n  });\n}\n\nfunction titleAlign(align, position, reverse) {\n  /** @type {CanvasTextAlign} */\n  let ret = _toLeftRightCenter(align);\n  if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n    ret = reverseAlign(ret);\n  }\n  return ret;\n}\n\nfunction titleArgs(scale, offset, position, align) {\n  const {top, left, bottom, right, chart} = scale;\n  const {chartArea, scales} = chart;\n  let rotation = 0;\n  let maxWidth, titleX, titleY;\n  const height = bottom - top;\n  const width = right - left;\n\n  if (scale.isHorizontal()) {\n    titleX = _alignStartEnd(align, left, right);\n\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n    } else if (position === 'center') {\n      titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n    } else {\n      titleY = offsetFromEdge(scale, position, offset);\n    }\n    maxWidth = right - left;\n  } else {\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n    } else if (position === 'center') {\n      titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n    } else {\n      titleX = offsetFromEdge(scale, position, offset);\n    }\n    titleY = _alignStartEnd(align, bottom, top);\n    rotation = position === 'left' ? -HALF_PI : HALF_PI;\n  }\n  return {titleX, titleY, maxWidth, rotation};\n}\n\nexport default class Scale extends Element {\n\n  // eslint-disable-next-line max-statements\n  constructor(cfg) {\n    super();\n\n    /** @type {string} */\n    this.id = cfg.id;\n    /** @type {string} */\n    this.type = cfg.type;\n    /** @type {any} */\n    this.options = undefined;\n    /** @type {CanvasRenderingContext2D} */\n    this.ctx = cfg.ctx;\n    /** @type {Chart} */\n    this.chart = cfg.chart;\n\n    // implements box\n    /** @type {number} */\n    this.top = undefined;\n    /** @type {number} */\n    this.bottom = undefined;\n    /** @type {number} */\n    this.left = undefined;\n    /** @type {number} */\n    this.right = undefined;\n    /** @type {number} */\n    this.width = undefined;\n    /** @type {number} */\n    this.height = undefined;\n    this._margins = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    };\n    /** @type {number} */\n    this.maxWidth = undefined;\n    /** @type {number} */\n    this.maxHeight = undefined;\n    /** @type {number} */\n    this.paddingTop = undefined;\n    /** @type {number} */\n    this.paddingBottom = undefined;\n    /** @type {number} */\n    this.paddingLeft = undefined;\n    /** @type {number} */\n    this.paddingRight = undefined;\n\n    // scale-specific properties\n    /** @type {string=} */\n    this.axis = undefined;\n    /** @type {number=} */\n    this.labelRotation = undefined;\n    this.min = undefined;\n    this.max = undefined;\n    this._range = undefined;\n    /** @type {Tick[]} */\n    this.ticks = [];\n    /** @type {object[]|null} */\n    this._gridLineItems = null;\n    /** @type {object[]|null} */\n    this._labelItems = null;\n    /** @type {object|null} */\n    this._labelSizes = null;\n    this._length = 0;\n    this._maxLength = 0;\n    this._longestTextCache = {};\n    /** @type {number} */\n    this._startPixel = undefined;\n    /** @type {number} */\n    this._endPixel = undefined;\n    this._reversePixels = false;\n    this._userMax = undefined;\n    this._userMin = undefined;\n    this._suggestedMax = undefined;\n    this._suggestedMin = undefined;\n    this._ticksLength = 0;\n    this._borderValue = 0;\n    this._cache = {};\n    this._dataLimitsCached = false;\n    this.$context = undefined;\n  }\n\n  /**\n\t * @param {any} options\n\t * @since 3.0\n\t */\n  init(options) {\n    this.options = options.setContext(this.getContext());\n\n    this.axis = options.axis;\n\n    // parse min/max value, so we can properly determine min/max for other scales\n    this._userMin = this.parse(options.min);\n    this._userMax = this.parse(options.max);\n    this._suggestedMin = this.parse(options.suggestedMin);\n    this._suggestedMax = this.parse(options.suggestedMax);\n  }\n\n  /**\n\t * Parse a supported input value to internal representation.\n\t * @param {*} raw\n\t * @param {number} [index]\n\t * @since 3.0\n\t */\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    return raw;\n  }\n\n  /**\n\t * @return {{min: number, max: number, minDefined: boolean, maxDefined: boolean}}\n\t * @protected\n\t * @since 3.0\n\t */\n  getUserBounds() {\n    let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n    _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n    _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n    _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n    _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n    return {\n      min: finiteOrDefault(_userMin, _suggestedMin),\n      max: finiteOrDefault(_userMax, _suggestedMax),\n      minDefined: isFinite(_userMin),\n      maxDefined: isFinite(_userMax)\n    };\n  }\n\n  /**\n\t * @param {boolean} canStack\n\t * @return {{min: number, max: number}}\n\t * @protected\n\t * @since 3.0\n\t */\n  getMinMax(canStack) {\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n    let range;\n\n    if (minDefined && maxDefined) {\n      return {min, max};\n    }\n\n    const metas = this.getMatchingVisibleMetas();\n    for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n      range = metas[i].controller.getMinMax(this, canStack);\n      if (!minDefined) {\n        min = Math.min(min, range.min);\n      }\n      if (!maxDefined) {\n        max = Math.max(max, range.max);\n      }\n    }\n\n    // Make sure min <= max when only min or max is defined by user and the data is outside that range\n    min = maxDefined && min > max ? max : min;\n    max = minDefined && min > max ? min : max;\n\n    return {\n      min: finiteOrDefault(min, finiteOrDefault(max, min)),\n      max: finiteOrDefault(max, finiteOrDefault(min, max))\n    };\n  }\n\n  /**\n\t * Get the padding needed for the scale\n\t * @return {{top: number, left: number, bottom: number, right: number}} the necessary padding\n\t * @private\n\t */\n  getPadding() {\n    return {\n      left: this.paddingLeft || 0,\n      top: this.paddingTop || 0,\n      right: this.paddingRight || 0,\n      bottom: this.paddingBottom || 0\n    };\n  }\n\n  /**\n\t * Returns the scale tick objects\n\t * @return {Tick[]}\n\t * @since 2.7\n\t */\n  getTicks() {\n    return this.ticks;\n  }\n\n  /**\n\t * @return {string[]}\n\t */\n  getLabels() {\n    const data = this.chart.data;\n    return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n  }\n\n  /**\n   * @return {import('../types.js').LabelItem[]}\n   */\n  getLabelItems(chartArea = this.chart.chartArea) {\n    const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n    return items;\n  }\n\n  // When a new layout is created, reset the data limits cache\n  beforeLayout() {\n    this._cache = {};\n    this._dataLimitsCached = false;\n  }\n\n  // These methods are ordered by lifecycle. Utilities then follow.\n  // Any function defined here is inherited by all scale types.\n  // Any function can be extended by the scale type\n\n  beforeUpdate() {\n    call(this.options.beforeUpdate, [this]);\n  }\n\n  /**\n\t * @param {number} maxWidth - the max width in pixels\n\t * @param {number} maxHeight - the max height in pixels\n\t * @param {{top: number, left: number, bottom: number, right: number}} margins - the space between the edge of the other scales and edge of the chart\n\t *   This space comes from two sources:\n\t *     - padding - space that's required to show the labels at the edges of the scale\n\t *     - thickness of scales or legends in another orientation\n\t */\n  update(maxWidth, maxHeight, margins) {\n    const {beginAtZero, grace, ticks: tickOpts} = this.options;\n    const sampleSize = tickOpts.sampleSize;\n\n    // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n    this.beforeUpdate();\n\n    // Absorb the master measurements\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins = Object.assign({\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    }, margins);\n\n    this.ticks = null;\n    this._labelSizes = null;\n    this._gridLineItems = null;\n    this._labelItems = null;\n\n    // Dimensions\n    this.beforeSetDimensions();\n    this.setDimensions();\n    this.afterSetDimensions();\n\n    this._maxLength = this.isHorizontal()\n      ? this.width + margins.left + margins.right\n      : this.height + margins.top + margins.bottom;\n\n    // Data min/max\n    if (!this._dataLimitsCached) {\n      this.beforeDataLimits();\n      this.determineDataLimits();\n      this.afterDataLimits();\n      this._range = _addGrace(this, grace, beginAtZero);\n      this._dataLimitsCached = true;\n    }\n\n    this.beforeBuildTicks();\n\n    this.ticks = this.buildTicks() || [];\n\n    // Allow modification of ticks in callback.\n    this.afterBuildTicks();\n\n    // Compute tick rotation and fit using a sampled subset of labels\n    // We generally don't need to compute the size of every single label for determining scale size\n    const samplingEnabled = sampleSize < this.ticks.length;\n    this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n\n    // configure is called twice, once here, once from core.controller.updateLayout.\n    // Here we haven't been positioned yet, but dimensions are correct.\n    // Variables set in configure are needed for calculateLabelRotation, and\n    // it's ok that coordinates are not correct there, only dimensions matter.\n    this.configure();\n\n    // Tick Rotation\n    this.beforeCalculateLabelRotation();\n    this.calculateLabelRotation(); // Preconditions: number of ticks and sizes of largest labels must be calculated beforehand\n    this.afterCalculateLabelRotation();\n\n    // Auto-skip\n    if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n      this.ticks = autoSkip(this, this.ticks);\n      this._labelSizes = null;\n      this.afterAutoSkip();\n    }\n\n    if (samplingEnabled) {\n      // Generate labels using all non-skipped ticks\n      this._convertTicksToLabels(this.ticks);\n    }\n\n    this.beforeFit();\n    this.fit(); // Preconditions: label rotation and label sizes must be calculated beforehand\n    this.afterFit();\n\n    // IMPORTANT: after this point, we consider that `this.ticks` will NEVER change!\n\n    this.afterUpdate();\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    let reversePixels = this.options.reverse;\n    let startPixel, endPixel;\n\n    if (this.isHorizontal()) {\n      startPixel = this.left;\n      endPixel = this.right;\n    } else {\n      startPixel = this.top;\n      endPixel = this.bottom;\n      // by default vertical scales are from bottom to top, so pixels are reversed\n      reversePixels = !reversePixels;\n    }\n    this._startPixel = startPixel;\n    this._endPixel = endPixel;\n    this._reversePixels = reversePixels;\n    this._length = endPixel - startPixel;\n    this._alignToPixels = this.options.alignToPixels;\n  }\n\n  afterUpdate() {\n    call(this.options.afterUpdate, [this]);\n  }\n\n  //\n\n  beforeSetDimensions() {\n    call(this.options.beforeSetDimensions, [this]);\n  }\n  setDimensions() {\n    // Set the unconstrained dimension before label rotation\n    if (this.isHorizontal()) {\n      // Reset position before calculating rotation\n      this.width = this.maxWidth;\n      this.left = 0;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n\n      // Reset position before calculating rotation\n      this.top = 0;\n      this.bottom = this.height;\n    }\n\n    // Reset padding\n    this.paddingLeft = 0;\n    this.paddingTop = 0;\n    this.paddingRight = 0;\n    this.paddingBottom = 0;\n  }\n  afterSetDimensions() {\n    call(this.options.afterSetDimensions, [this]);\n  }\n\n  _callHooks(name) {\n    this.chart.notifyPlugins(name, this.getContext());\n    call(this.options[name], [this]);\n  }\n\n  // Data limits\n  beforeDataLimits() {\n    this._callHooks('beforeDataLimits');\n  }\n  determineDataLimits() {}\n  afterDataLimits() {\n    this._callHooks('afterDataLimits');\n  }\n\n  //\n  beforeBuildTicks() {\n    this._callHooks('beforeBuildTicks');\n  }\n  /**\n\t * @return {object[]} the ticks\n\t */\n  buildTicks() {\n    return [];\n  }\n  afterBuildTicks() {\n    this._callHooks('afterBuildTicks');\n  }\n\n  beforeTickToLabelConversion() {\n    call(this.options.beforeTickToLabelConversion, [this]);\n  }\n  /**\n\t * Convert ticks to label strings\n\t * @param {Tick[]} ticks\n\t */\n  generateTickLabels(ticks) {\n    const tickOpts = this.options.ticks;\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      tick = ticks[i];\n      tick.label = call(tickOpts.callback, [tick.value, i, ticks], this);\n    }\n  }\n  afterTickToLabelConversion() {\n    call(this.options.afterTickToLabelConversion, [this]);\n  }\n\n  //\n\n  beforeCalculateLabelRotation() {\n    call(this.options.beforeCalculateLabelRotation, [this]);\n  }\n  calculateLabelRotation() {\n    const options = this.options;\n    const tickOpts = options.ticks;\n    const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n    const minRotation = tickOpts.minRotation || 0;\n    const maxRotation = tickOpts.maxRotation;\n    let labelRotation = minRotation;\n    let tickWidth, maxHeight, maxLabelDiagonal;\n\n    if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n      this.labelRotation = minRotation;\n      return;\n    }\n\n    const labelSizes = this._getLabelSizes();\n    const maxLabelWidth = labelSizes.widest.width;\n    const maxLabelHeight = labelSizes.highest.height;\n\n    // Estimate the width of each grid based on the canvas width, the maximum\n    // label width and the number of tick intervals\n    const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n    tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n\n    // Allow 3 pixels x2 padding either side for label readability\n    if (maxLabelWidth + 6 > tickWidth) {\n      tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n      maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n      maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n      labelRotation = toDegrees(Math.min(\n        Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n        Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n      ));\n      labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n    }\n\n    this.labelRotation = labelRotation;\n  }\n  afterCalculateLabelRotation() {\n    call(this.options.afterCalculateLabelRotation, [this]);\n  }\n  afterAutoSkip() {}\n\n  //\n\n  beforeFit() {\n    call(this.options.beforeFit, [this]);\n  }\n  fit() {\n    // Reset\n    const minSize = {\n      width: 0,\n      height: 0\n    };\n\n    const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n    const display = this._isVisible();\n    const isHorizontal = this.isHorizontal();\n\n    if (display) {\n      const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n      if (isHorizontal) {\n        minSize.width = this.maxWidth;\n        minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n      } else {\n        minSize.height = this.maxHeight; // fill all the height\n        minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n      }\n\n      // Don't bother fitting the ticks if we are not showing the labels\n      if (tickOpts.display && this.ticks.length) {\n        const {first, last, widest, highest} = this._getLabelSizes();\n        const tickPadding = tickOpts.padding * 2;\n        const angleRadians = toRadians(this.labelRotation);\n        const cos = Math.cos(angleRadians);\n        const sin = Math.sin(angleRadians);\n\n        if (isHorizontal) {\n        // A horizontal axis is more constrained by the height.\n          const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n          minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n        } else {\n        // A vertical axis is more constrained by the width. Labels are the\n        // dominant factor here, so get that length first and account for padding\n          const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n\n          minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n        }\n        this._calculatePadding(first, last, sin, cos);\n      }\n    }\n\n    this._handleMargins();\n\n    if (isHorizontal) {\n      this.width = this._length = chart.width - this._margins.left - this._margins.right;\n      this.height = minSize.height;\n    } else {\n      this.width = minSize.width;\n      this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n    }\n  }\n\n  _calculatePadding(first, last, sin, cos) {\n    const {ticks: {align, padding}, position} = this.options;\n    const isRotated = this.labelRotation !== 0;\n    const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n\n    if (this.isHorizontal()) {\n      const offsetLeft = this.getPixelForTick(0) - this.left;\n      const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n      let paddingLeft = 0;\n      let paddingRight = 0;\n\n      // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\n      // which means that the right padding is dominated by the font height\n      if (isRotated) {\n        if (labelsBelowTicks) {\n          paddingLeft = cos * first.width;\n          paddingRight = sin * last.height;\n        } else {\n          paddingLeft = sin * first.height;\n          paddingRight = cos * last.width;\n        }\n      } else if (align === 'start') {\n        paddingRight = last.width;\n      } else if (align === 'end') {\n        paddingLeft = first.width;\n      } else if (align !== 'inner') {\n        paddingLeft = first.width / 2;\n        paddingRight = last.width / 2;\n      }\n\n      // Adjust padding taking into account changes in offsets\n      this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n      this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n    } else {\n      let paddingTop = last.height / 2;\n      let paddingBottom = first.height / 2;\n\n      if (align === 'start') {\n        paddingTop = 0;\n        paddingBottom = first.height;\n      } else if (align === 'end') {\n        paddingTop = last.height;\n        paddingBottom = 0;\n      }\n\n      this.paddingTop = paddingTop + padding;\n      this.paddingBottom = paddingBottom + padding;\n    }\n  }\n\n  /**\n\t * Handle margins and padding interactions\n\t * @private\n\t */\n  _handleMargins() {\n    if (this._margins) {\n      this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n      this._margins.top = Math.max(this.paddingTop, this._margins.top);\n      this._margins.right = Math.max(this.paddingRight, this._margins.right);\n      this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n    }\n  }\n\n  afterFit() {\n    call(this.options.afterFit, [this]);\n  }\n\n  // Shared Methods\n  /**\n\t * @return {boolean}\n\t */\n  isHorizontal() {\n    const {axis, position} = this.options;\n    return position === 'top' || position === 'bottom' || axis === 'x';\n  }\n  /**\n\t * @return {boolean}\n\t */\n  isFullSize() {\n    return this.options.fullSize;\n  }\n\n  /**\n\t * @param {Tick[]} ticks\n\t * @private\n\t */\n  _convertTicksToLabels(ticks) {\n    this.beforeTickToLabelConversion();\n\n    this.generateTickLabels(ticks);\n\n    // Ticks should be skipped when callback returns null or undef, so lets remove those.\n    let i, ilen;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      if (isNullOrUndef(ticks[i].label)) {\n        ticks.splice(i, 1);\n        ilen--;\n        i--;\n      }\n    }\n\n    this.afterTickToLabelConversion();\n  }\n\n  /**\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n  _getLabelSizes() {\n    let labelSizes = this._labelSizes;\n\n    if (!labelSizes) {\n      const sampleSize = this.options.ticks.sampleSize;\n      let ticks = this.ticks;\n      if (sampleSize < ticks.length) {\n        ticks = sample(ticks, sampleSize);\n      }\n\n      this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n    }\n\n    return labelSizes;\n  }\n\n  /**\n\t * Returns {width, height, offset} objects for the first, last, widest, highest tick\n\t * labels where offset indicates the anchor point offset from the top in pixels.\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n  _computeLabelSizes(ticks, length, maxTicksLimit) {\n    const {ctx, _longestTextCache: caches} = this;\n    const widths = [];\n    const heights = [];\n    const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n    let widestLabelSize = 0;\n    let highestLabelSize = 0;\n    let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n\n    for (i = 0; i < length; i += increment) {\n      label = ticks[i].label;\n      tickFont = this._resolveTickFontOptions(i);\n      ctx.font = fontString = tickFont.string;\n      cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n      lineHeight = tickFont.lineHeight;\n      width = height = 0;\n      // Undefined labels and arrays should not be measured\n      if (!isNullOrUndef(label) && !isArray(label)) {\n        width = _measureText(ctx, cache.data, cache.gc, width, label);\n        height = lineHeight;\n      } else if (isArray(label)) {\n        // if it is an array let's measure each element\n        for (j = 0, jlen = label.length; j < jlen; ++j) {\n          nestedLabel = /** @type {string} */ (label[j]);\n          // Undefined labels and arrays should not be measured\n          if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n            width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n            height += lineHeight;\n          }\n        }\n      }\n      widths.push(width);\n      heights.push(height);\n      widestLabelSize = Math.max(width, widestLabelSize);\n      highestLabelSize = Math.max(height, highestLabelSize);\n    }\n    garbageCollect(caches, length);\n\n    const widest = widths.indexOf(widestLabelSize);\n    const highest = heights.indexOf(highestLabelSize);\n\n    const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n\n    return {\n      first: valueAt(0),\n      last: valueAt(length - 1),\n      widest: valueAt(widest),\n      highest: valueAt(highest),\n      widths,\n      heights,\n    };\n  }\n\n  /**\n\t * Used to get the label to display in the tooltip for the given value\n\t * @param {*} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    return value;\n  }\n\n  /**\n\t * Returns the location of the given data point. Value can either be an index or a numerical value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {*} value\n\t * @param {number} [index]\n\t * @return {number}\n\t */\n  getPixelForValue(value, index) { // eslint-disable-line no-unused-vars\n    return NaN;\n  }\n\n  /**\n\t * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} pixel\n\t * @return {*}\n\t */\n  getValueForPixel(pixel) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Returns the location of the tick at the given index\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} index\n\t * @return {number}\n\t */\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n\n  /**\n\t * Utility for getting the pixel location of a percentage of scale\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} decimal\n\t * @return {number}\n\t */\n  getPixelForDecimal(decimal) {\n    if (this._reversePixels) {\n      decimal = 1 - decimal;\n    }\n\n    const pixel = this._startPixel + decimal * this._length;\n    return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getDecimalForPixel(pixel) {\n    const decimal = (pixel - this._startPixel) / this._length;\n    return this._reversePixels ? 1 - decimal : decimal;\n  }\n\n  /**\n\t * Returns the pixel for the minimum chart value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @return {number}\n\t */\n  getBasePixel() {\n    return this.getPixelForValue(this.getBaseValue());\n  }\n\n  /**\n\t * @return {number}\n\t */\n  getBaseValue() {\n    const {min, max} = this;\n\n    return min < 0 && max < 0 ? max :\n      min > 0 && max > 0 ? min :\n      0;\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext(index) {\n    const ticks = this.ticks || [];\n\n    if (index >= 0 && index < ticks.length) {\n      const tick = ticks[index];\n      return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n    }\n    return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n  }\n\n  /**\n\t * @return {number}\n\t * @private\n\t */\n  _tickSize() {\n    const optionTicks = this.options.ticks;\n\n    // Calculate space needed by label in axis direction.\n    const rot = toRadians(this.labelRotation);\n    const cos = Math.abs(Math.cos(rot));\n    const sin = Math.abs(Math.sin(rot));\n\n    const labelSizes = this._getLabelSizes();\n    const padding = optionTicks.autoSkipPadding || 0;\n    const w = labelSizes ? labelSizes.widest.width + padding : 0;\n    const h = labelSizes ? labelSizes.highest.height + padding : 0;\n\n    // Calculate space needed for 1 tick in axis direction.\n    return this.isHorizontal()\n      ? h * cos > w * sin ? w / cos : h / sin\n      : h * sin < w * cos ? h / cos : w / sin;\n  }\n\n  /**\n\t * @return {boolean}\n\t * @private\n\t */\n  _isVisible() {\n    const display = this.options.display;\n\n    if (display !== 'auto') {\n      return !!display;\n    }\n\n    return this.getMatchingVisibleMetas().length > 0;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeGridLineItems(chartArea) {\n    const axis = this.axis;\n    const chart = this.chart;\n    const options = this.options;\n    const {grid, position, border} = options;\n    const offset = grid.offset;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const ticksLength = ticks.length + (offset ? 1 : 0);\n    const tl = getTickMarkLength(grid);\n    const items = [];\n\n    const borderOpts = border.setContext(this.getContext());\n    const axisWidth = borderOpts.display ? borderOpts.width : 0;\n    const axisHalfWidth = axisWidth / 2;\n    const alignBorderValue = function(pixel) {\n      return _alignPixel(chart, pixel, axisWidth);\n    };\n    let borderValue, i, lineValue, alignedLineValue;\n    let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n\n    if (position === 'top') {\n      borderValue = alignBorderValue(this.bottom);\n      ty1 = this.bottom - tl;\n      ty2 = borderValue - axisHalfWidth;\n      y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n      y2 = chartArea.bottom;\n    } else if (position === 'bottom') {\n      borderValue = alignBorderValue(this.top);\n      y1 = chartArea.top;\n      y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = this.top + tl;\n    } else if (position === 'left') {\n      borderValue = alignBorderValue(this.right);\n      tx1 = this.right - tl;\n      tx2 = borderValue - axisHalfWidth;\n      x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n      x2 = chartArea.right;\n    } else if (position === 'right') {\n      borderValue = alignBorderValue(this.left);\n      x1 = chartArea.left;\n      x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n      tx1 = borderValue + axisHalfWidth;\n      tx2 = this.left + tl;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n\n      y1 = chartArea.top;\n      y2 = chartArea.bottom;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = ty1 + tl;\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n\n      tx1 = borderValue - axisHalfWidth;\n      tx2 = tx1 - tl;\n      x1 = chartArea.left;\n      x2 = chartArea.right;\n    }\n\n    const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n    const step = Math.max(1, Math.ceil(ticksLength / limit));\n    for (i = 0; i < ticksLength; i += step) {\n      const context = this.getContext(i);\n      const optsAtIndex = grid.setContext(context);\n      const optsAtIndexBorder = border.setContext(context);\n\n      const lineWidth = optsAtIndex.lineWidth;\n      const lineColor = optsAtIndex.color;\n      const borderDash = optsAtIndexBorder.dash || [];\n      const borderDashOffset = optsAtIndexBorder.dashOffset;\n\n      const tickWidth = optsAtIndex.tickWidth;\n      const tickColor = optsAtIndex.tickColor;\n      const tickBorderDash = optsAtIndex.tickBorderDash || [];\n      const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n\n      lineValue = getPixelForGridLine(this, i, offset);\n\n      // Skip if the pixel is out of the range\n      if (lineValue === undefined) {\n        continue;\n      }\n\n      alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n\n      if (isHorizontal) {\n        tx1 = tx2 = x1 = x2 = alignedLineValue;\n      } else {\n        ty1 = ty2 = y1 = y2 = alignedLineValue;\n      }\n\n      items.push({\n        tx1,\n        ty1,\n        tx2,\n        ty2,\n        x1,\n        y1,\n        x2,\n        y2,\n        width: lineWidth,\n        color: lineColor,\n        borderDash,\n        borderDashOffset,\n        tickWidth,\n        tickColor,\n        tickBorderDash,\n        tickBorderDashOffset,\n      });\n    }\n\n    this._ticksLength = ticksLength;\n    this._borderValue = borderValue;\n\n    return items;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeLabelItems(chartArea) {\n    const axis = this.axis;\n    const options = this.options;\n    const {position, ticks: optionTicks} = options;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const {align, crossAlign, padding, mirror} = optionTicks;\n    const tl = getTickMarkLength(options.grid);\n    const tickAndPadding = tl + padding;\n    const hTickAndPadding = mirror ? -padding : tickAndPadding;\n    const rotation = -toRadians(this.labelRotation);\n    const items = [];\n    let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n    let textBaseline = 'middle';\n\n    if (position === 'top') {\n      y = this.bottom - hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'bottom') {\n      y = this.top + hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'left') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (position === 'right') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n      }\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        x = this.chart.scales[positionAxisID].getPixelForValue(value);\n      }\n      textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n    }\n\n    if (axis === 'y') {\n      if (align === 'start') {\n        textBaseline = 'top';\n      } else if (align === 'end') {\n        textBaseline = 'bottom';\n      }\n    }\n\n    const labelSizes = this._getLabelSizes();\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      label = tick.label;\n\n      const optsAtIndex = optionTicks.setContext(this.getContext(i));\n      pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n      font = this._resolveTickFontOptions(i);\n      lineHeight = font.lineHeight;\n      lineCount = isArray(label) ? label.length : 1;\n      const halfCount = lineCount / 2;\n      const color = optsAtIndex.color;\n      const strokeColor = optsAtIndex.textStrokeColor;\n      const strokeWidth = optsAtIndex.textStrokeWidth;\n      let tickTextAlign = textAlign;\n\n      if (isHorizontal) {\n        x = pixel;\n\n        if (textAlign === 'inner') {\n          if (i === ilen - 1) {\n            tickTextAlign = !this.options.reverse ? 'right' : 'left';\n          } else if (i === 0) {\n            tickTextAlign = !this.options.reverse ? 'left' : 'right';\n          } else {\n            tickTextAlign = 'center';\n          }\n        }\n\n        if (position === 'top') {\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = -lineCount * lineHeight + lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n          } else {\n            textOffset = -labelSizes.highest.height + lineHeight / 2;\n          }\n        } else {\n          // eslint-disable-next-line no-lonely-if\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n          } else {\n            textOffset = labelSizes.highest.height - lineCount * lineHeight;\n          }\n        }\n        if (mirror) {\n          textOffset *= -1;\n        }\n        if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n          x += (lineHeight / 2) * Math.sin(rotation);\n        }\n      } else {\n        y = pixel;\n        textOffset = (1 - lineCount) * lineHeight / 2;\n      }\n\n      let backdrop;\n\n      if (optsAtIndex.showLabelBackdrop) {\n        const labelPadding = toPadding(optsAtIndex.backdropPadding);\n        const height = labelSizes.heights[i];\n        const width = labelSizes.widths[i];\n\n        let top = textOffset - labelPadding.top;\n        let left = 0 - labelPadding.left;\n\n        switch (textBaseline) {\n        case 'middle':\n          top -= height / 2;\n          break;\n        case 'bottom':\n          top -= height;\n          break;\n        default:\n          break;\n        }\n\n        switch (textAlign) {\n        case 'center':\n          left -= width / 2;\n          break;\n        case 'right':\n          left -= width;\n          break;\n        case 'inner':\n          if (i === ilen - 1) {\n            left -= width;\n          } else if (i > 0) {\n            left -= width / 2;\n          }\n          break;\n        default:\n          break;\n        }\n\n        backdrop = {\n          left,\n          top,\n          width: width + labelPadding.width,\n          height: height + labelPadding.height,\n\n          color: optsAtIndex.backdropColor,\n        };\n      }\n\n      items.push({\n        label,\n        font,\n        textOffset,\n        options: {\n          rotation,\n          color,\n          strokeColor,\n          strokeWidth,\n          textAlign: tickTextAlign,\n          textBaseline,\n          translation: [x, y],\n          backdrop,\n        }\n      });\n    }\n\n    return items;\n  }\n\n  _getXAxisLabelAlignment() {\n    const {position, ticks} = this.options;\n    const rotation = -toRadians(this.labelRotation);\n\n    if (rotation) {\n      return position === 'top' ? 'left' : 'right';\n    }\n\n    let align = 'center';\n\n    if (ticks.align === 'start') {\n      align = 'left';\n    } else if (ticks.align === 'end') {\n      align = 'right';\n    } else if (ticks.align === 'inner') {\n      align = 'inner';\n    }\n\n    return align;\n  }\n\n  _getYAxisLabelAlignment(tl) {\n    const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n    const labelSizes = this._getLabelSizes();\n    const tickAndPadding = tl + padding;\n    const widest = labelSizes.widest.width;\n\n    let textAlign;\n    let x;\n\n    if (position === 'left') {\n      if (mirror) {\n        x = this.right + padding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += (widest / 2);\n        } else {\n          textAlign = 'right';\n          x += widest;\n        }\n      } else {\n        x = this.right - tickAndPadding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x = this.left;\n        }\n      }\n    } else if (position === 'right') {\n      if (mirror) {\n        x = this.left + padding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x -= widest;\n        }\n      } else {\n        x = this.left + tickAndPadding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += widest / 2;\n        } else {\n          textAlign = 'right';\n          x = this.right;\n        }\n      }\n    } else {\n      textAlign = 'right';\n    }\n\n    return {textAlign, x};\n  }\n\n  /**\n\t * @private\n\t */\n  _computeLabelArea() {\n    if (this.options.ticks.mirror) {\n      return;\n    }\n\n    const chart = this.chart;\n    const position = this.options.position;\n\n    if (position === 'left' || position === 'right') {\n      return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n    } if (position === 'top' || position === 'bottom') {\n      return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n    }\n  }\n\n  /**\n   * @protected\n   */\n  drawBackground() {\n    const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n    if (backgroundColor) {\n      ctx.save();\n      ctx.fillStyle = backgroundColor;\n      ctx.fillRect(left, top, width, height);\n      ctx.restore();\n    }\n  }\n\n  getLineWidthForValue(value) {\n    const grid = this.options.grid;\n    if (!this._isVisible() || !grid.display) {\n      return 0;\n    }\n    const ticks = this.ticks;\n    const index = ticks.findIndex(t => t.value === value);\n    if (index >= 0) {\n      const opts = grid.setContext(this.getContext(index));\n      return opts.lineWidth;\n    }\n    return 0;\n  }\n\n  /**\n\t * @protected\n\t */\n  drawGrid(chartArea) {\n    const grid = this.options.grid;\n    const ctx = this.ctx;\n    const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n    let i, ilen;\n\n    const drawLine = (p1, p2, style) => {\n      if (!style.width || !style.color) {\n        return;\n      }\n      ctx.save();\n      ctx.lineWidth = style.width;\n      ctx.strokeStyle = style.color;\n      ctx.setLineDash(style.borderDash || []);\n      ctx.lineDashOffset = style.borderDashOffset;\n\n      ctx.beginPath();\n      ctx.moveTo(p1.x, p1.y);\n      ctx.lineTo(p2.x, p2.y);\n      ctx.stroke();\n      ctx.restore();\n    };\n\n    if (grid.display) {\n      for (i = 0, ilen = items.length; i < ilen; ++i) {\n        const item = items[i];\n\n        if (grid.drawOnChartArea) {\n          drawLine(\n            {x: item.x1, y: item.y1},\n            {x: item.x2, y: item.y2},\n            item\n          );\n        }\n\n        if (grid.drawTicks) {\n          drawLine(\n            {x: item.tx1, y: item.ty1},\n            {x: item.tx2, y: item.ty2},\n            {\n              color: item.tickColor,\n              width: item.tickWidth,\n              borderDash: item.tickBorderDash,\n              borderDashOffset: item.tickBorderDashOffset\n            }\n          );\n        }\n      }\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBorder() {\n    const {chart, ctx, options: {border, grid}} = this;\n    const borderOpts = border.setContext(this.getContext());\n    const axisWidth = border.display ? borderOpts.width : 0;\n    if (!axisWidth) {\n      return;\n    }\n    const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n    const borderValue = this._borderValue;\n    let x1, x2, y1, y2;\n\n    if (this.isHorizontal()) {\n      x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n      x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n      y1 = y2 = borderValue;\n    } else {\n      y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n      y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n      x1 = x2 = borderValue;\n    }\n    ctx.save();\n    ctx.lineWidth = borderOpts.width;\n    ctx.strokeStyle = borderOpts.color;\n\n    ctx.beginPath();\n    ctx.moveTo(x1, y1);\n    ctx.lineTo(x2, y2);\n    ctx.stroke();\n\n    ctx.restore();\n  }\n\n  /**\n\t * @protected\n\t */\n  drawLabels(chartArea) {\n    const optionTicks = this.options.ticks;\n\n    if (!optionTicks.display) {\n      return;\n    }\n\n    const ctx = this.ctx;\n\n    const area = this._computeLabelArea();\n    if (area) {\n      clipArea(ctx, area);\n    }\n\n    const items = this.getLabelItems(chartArea);\n    for (const item of items) {\n      const renderTextOptions = item.options;\n      const tickFont = item.font;\n      const label = item.label;\n      const y = item.textOffset;\n      renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n    }\n\n    if (area) {\n      unclipArea(ctx);\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {\n    const {ctx, options: {position, title, reverse}} = this;\n\n    if (!title.display) {\n      return;\n    }\n\n    const font = toFont(title.font);\n    const padding = toPadding(title.padding);\n    const align = title.align;\n    let offset = font.lineHeight / 2;\n\n    if (position === 'bottom' || position === 'center' || isObject(position)) {\n      offset += padding.bottom;\n      if (isArray(title.text)) {\n        offset += font.lineHeight * (title.text.length - 1);\n      }\n    } else {\n      offset += padding.top;\n    }\n\n    const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n\n    renderText(ctx, title.text, 0, 0, font, {\n      color: title.color,\n      maxWidth,\n      rotation,\n      textAlign: titleAlign(align, position, reverse),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n\n  draw(chartArea) {\n    if (!this._isVisible()) {\n      return;\n    }\n\n    this.drawBackground();\n    this.drawGrid(chartArea);\n    this.drawBorder();\n    this.drawTitle();\n    this.drawLabels(chartArea);\n  }\n\n  /**\n\t * @return {object[]}\n\t * @private\n\t */\n  _layers() {\n    const opts = this.options;\n    const tz = opts.ticks && opts.ticks.z || 0;\n    const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n    const bz = valueOrDefault(opts.border && opts.border.z, 0);\n\n    if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n      // backward compatibility: draw has been overridden by custom scale\n      return [{\n        z: tz,\n        draw: (chartArea) => {\n          this.draw(chartArea);\n        }\n      }];\n    }\n\n    return [{\n      z: gz,\n      draw: (chartArea) => {\n        this.drawBackground();\n        this.drawGrid(chartArea);\n        this.drawTitle();\n      }\n    }, {\n      z: bz,\n      draw: () => {\n        this.drawBorder();\n      }\n    }, {\n      z: tz,\n      draw: (chartArea) => {\n        this.drawLabels(chartArea);\n      }\n    }];\n  }\n\n  /**\n\t * Returns visible dataset metas that are attached to this scale\n\t * @param {string} [type] - if specified, also filter by dataset type\n\t * @return {object[]}\n\t */\n  getMatchingVisibleMetas(type) {\n    const metas = this.chart.getSortedVisibleDatasetMetas();\n    const axisID = this.axis + 'AxisID';\n    const result = [];\n    let i, ilen;\n\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      const meta = metas[i];\n      if (meta[axisID] === this.id && (!type || meta.type === type)) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n\n  /**\n\t * @param {number} index\n\t * @return {object}\n\t * @protected\n \t */\n  _resolveTickFontOptions(index) {\n    const opts = this.options.ticks.setContext(this.getContext(index));\n    return toFont(opts.font);\n  }\n\n  /**\n   * @protected\n   */\n  _maxDigits() {\n    const fontSize = this._resolveTickFontOptions(0).lineHeight;\n    return (this.isHorizontal() ? this.width : this.height) / fontSize;\n  }\n}\n", "import {merge} from '../helpers/index.js';\nimport defaults, {overrides} from './core.defaults.js';\n\n/**\n * @typedef {{id: string, defaults: any, overrides?: any, defaultRoutes: any}} IChartComponent\n */\n\nexport default class TypedRegistry {\n  constructor(type, scope, override) {\n    this.type = type;\n    this.scope = scope;\n    this.override = override;\n    this.items = Object.create(null);\n  }\n\n  isForType(type) {\n    return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n  }\n\n  /**\n\t * @param {IChartComponent} item\n\t * @returns {string} The scope where items defaults were registered to.\n\t */\n  register(item) {\n    const proto = Object.getPrototypeOf(item);\n    let parentScope;\n\n    if (isIChartComponent(proto)) {\n      // Make sure the parent is registered and note the scope where its defaults are.\n      parentScope = this.register(proto);\n    }\n\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope + '.' + id;\n\n    if (!id) {\n      throw new Error('class does not have id: ' + item);\n    }\n\n    if (id in items) {\n      // already registered\n      return scope;\n    }\n\n    items[id] = item;\n    registerDefaults(item, scope, parentScope);\n    if (this.override) {\n      defaults.override(item.id, item.overrides);\n    }\n\n    return scope;\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {object?}\n\t */\n  get(id) {\n    return this.items[id];\n  }\n\n  /**\n\t * @param {IChartComponent} item\n\t */\n  unregister(item) {\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope;\n\n    if (id in items) {\n      delete items[id];\n    }\n\n    if (scope && id in defaults[scope]) {\n      delete defaults[scope][id];\n      if (this.override) {\n        delete overrides[id];\n      }\n    }\n  }\n}\n\nfunction registerDefaults(item, scope, parentScope) {\n  // Inherit the parent's defaults and keep existing defaults\n  const itemDefaults = merge(Object.create(null), [\n    parentScope ? defaults.get(parentScope) : {},\n    defaults.get(scope),\n    item.defaults\n  ]);\n\n  defaults.set(scope, itemDefaults);\n\n  if (item.defaultRoutes) {\n    routeDefaults(scope, item.defaultRoutes);\n  }\n\n  if (item.descriptors) {\n    defaults.describe(scope, item.descriptors);\n  }\n}\n\nfunction routeDefaults(scope, routes) {\n  Object.keys(routes).forEach(property => {\n    const propertyParts = property.split('.');\n    const sourceName = propertyParts.pop();\n    const sourceScope = [scope].concat(propertyParts).join('.');\n    const parts = routes[property].split('.');\n    const targetName = parts.pop();\n    const targetScope = parts.join('.');\n    defaults.route(sourceScope, sourceName, targetScope, targetName);\n  });\n}\n\nfunction isIChartComponent(proto) {\n  return 'id' in proto && 'defaults' in proto;\n}\n", "import DatasetController from './core.datasetController.js';\nimport Element from './core.element.js';\nimport Scale from './core.scale.js';\nimport TypedRegistry from './core.typedRegistry.js';\nimport {each, callback as call, _capitalize} from '../helpers/helpers.core.js';\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Registry {\n  constructor() {\n    this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n    this.elements = new TypedRegistry(Element, 'elements');\n    this.plugins = new TypedRegistry(Object, 'plugins');\n    this.scales = new TypedRegistry(Scale, 'scales');\n    // Order is important, Scale has Element in prototype chain,\n    // so Scales must be before Elements. Plugins are a fallback, so not listed here.\n    this._typedRegistries = [this.controllers, this.scales, this.elements];\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  add(...args) {\n    this._each('register', args);\n  }\n\n  remove(...args) {\n    this._each('unregister', args);\n  }\n\n  /**\n\t * @param  {...typeof DatasetController} args\n\t */\n  addControllers(...args) {\n    this._each('register', args, this.controllers);\n  }\n\n  /**\n\t * @param  {...typeof Element} args\n\t */\n  addElements(...args) {\n    this._each('register', args, this.elements);\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  addPlugins(...args) {\n    this._each('register', args, this.plugins);\n  }\n\n  /**\n\t * @param  {...typeof Scale} args\n\t */\n  addScales(...args) {\n    this._each('register', args, this.scales);\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof DatasetController}\n\t */\n  getController(id) {\n    return this._get(id, this.controllers, 'controller');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof Element}\n\t */\n  getElement(id) {\n    return this._get(id, this.elements, 'element');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {object}\n\t */\n  getPlugin(id) {\n    return this._get(id, this.plugins, 'plugin');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof Scale}\n\t */\n  getScale(id) {\n    return this._get(id, this.scales, 'scale');\n  }\n\n  /**\n\t * @param  {...typeof DatasetController} args\n\t */\n  removeControllers(...args) {\n    this._each('unregister', args, this.controllers);\n  }\n\n  /**\n\t * @param  {...typeof Element} args\n\t */\n  removeElements(...args) {\n    this._each('unregister', args, this.elements);\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  removePlugins(...args) {\n    this._each('unregister', args, this.plugins);\n  }\n\n  /**\n\t * @param  {...typeof Scale} args\n\t */\n  removeScales(...args) {\n    this._each('unregister', args, this.scales);\n  }\n\n  /**\n\t * @private\n\t */\n  _each(method, args, typedRegistry) {\n    [...args].forEach(arg => {\n      const reg = typedRegistry || this._getRegistryForType(arg);\n      if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n        this._exec(method, reg, arg);\n      } else {\n        // Handle loopable args\n        // Use case:\n        //  import * as plugins from './plugins.js';\n        //  Chart.register(plugins);\n        each(arg, item => {\n          // If there are mixed types in the loopable, make sure those are\n          // registered in correct registry\n          // Use case: (treemap exporting controller, elements etc)\n          //  import * as treemap from 'chartjs-chart-treemap.js';\n          //  Chart.register(treemap);\n\n          const itemReg = typedRegistry || this._getRegistryForType(item);\n          this._exec(method, itemReg, item);\n        });\n      }\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _exec(method, registry, component) {\n    const camelMethod = _capitalize(method);\n    call(component['before' + camelMethod], [], component); // beforeRegister / beforeUnregister\n    registry[method](component);\n    call(component['after' + camelMethod], [], component); // afterRegister / afterUnregister\n  }\n\n  /**\n\t * @private\n\t */\n  _getRegistryForType(type) {\n    for (let i = 0; i < this._typedRegistries.length; i++) {\n      const reg = this._typedRegistries[i];\n      if (reg.isForType(type)) {\n        return reg;\n      }\n    }\n    // plugins is the fallback registry\n    return this.plugins;\n  }\n\n  /**\n\t * @private\n\t */\n  _get(id, typedRegistry, type) {\n    const item = typedRegistry.get(id);\n    if (item === undefined) {\n      throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n    }\n    return item;\n  }\n\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Registry();\n", "import registry from './core.registry.js';\nimport {callback as callCallback, isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../plugins/plugin.tooltip.js').default } Tooltip\n */\n\n/**\n * @callback filterCallback\n * @param {{plugin: object, options: object}} value\n * @param {number} [index]\n * @param {array} [array]\n * @param {object} [thisArg]\n * @return {boolean}\n */\n\n\nexport default class PluginService {\n  constructor() {\n    this._init = undefined;\n  }\n\n  /**\n\t * Calls enabled plugins for `chart` on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {Chart} chart - The chart instance for which plugins should be called.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {object} [args] - Extra arguments to apply to the hook call.\n   * @param {filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n  notify(chart, hook, args, filter) {\n    if (hook === 'beforeInit') {\n      this._init = this._createDescriptors(chart, true);\n      this._notify(this._init, chart, 'install');\n    }\n\n    if (this._init === undefined) { // Do not trigger events before install\n      return;\n    }\n\n    const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n    const result = this._notify(descriptors, chart, hook, args);\n\n    if (hook === 'afterDestroy') {\n      this._notify(descriptors, chart, 'stop');\n      this._notify(this._init, chart, 'uninstall');\n      this._init = undefined; // Do not trigger events after uninstall\n    }\n    return result;\n  }\n\n  /**\n\t * @private\n\t */\n  _notify(descriptors, chart, hook, args) {\n    args = args || {};\n    for (const descriptor of descriptors) {\n      const plugin = descriptor.plugin;\n      const method = plugin[hook];\n      const params = [chart, args, descriptor.options];\n      if (callCallback(method, params, plugin) === false && args.cancelable) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  invalidate() {\n    // When plugins are registered, there is the possibility of a double\n    // invalidate situation. In this case, we only want to invalidate once.\n    // If we invalidate multiple times, the `_oldCache` is lost and all of the\n    // plugins are restarted without being correctly stopped.\n    // See https://github.com/chartjs/Chart.js/issues/8147\n    if (!isNullOrUndef(this._cache)) {\n      this._oldCache = this._cache;\n      this._cache = undefined;\n    }\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n  _descriptors(chart) {\n    if (this._cache) {\n      return this._cache;\n    }\n\n    const descriptors = this._cache = this._createDescriptors(chart);\n\n    this._notifyStateChanges(chart);\n\n    return descriptors;\n  }\n\n  _createDescriptors(chart, all) {\n    const config = chart && chart.config;\n    const options = valueOrDefault(config.options && config.options.plugins, {});\n    const plugins = allPlugins(config);\n    // options === false => all plugins are disabled\n    return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n  _notifyStateChanges(chart) {\n    const previousDescriptors = this._oldCache || [];\n    const descriptors = this._cache;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n    this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n    this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n  }\n}\n\n/**\n * @param {import('./core.config.js').default} config\n */\nfunction allPlugins(config) {\n  const localIds = {};\n  const plugins = [];\n  const keys = Object.keys(registry.plugins.items);\n  for (let i = 0; i < keys.length; i++) {\n    plugins.push(registry.getPlugin(keys[i]));\n  }\n\n  const local = config.plugins || [];\n  for (let i = 0; i < local.length; i++) {\n    const plugin = local[i];\n\n    if (plugins.indexOf(plugin) === -1) {\n      plugins.push(plugin);\n      localIds[plugin.id] = true;\n    }\n  }\n\n  return {plugins, localIds};\n}\n\nfunction getOpts(options, all) {\n  if (!all && options === false) {\n    return null;\n  }\n  if (options === true) {\n    return {};\n  }\n  return options;\n}\n\nfunction createDescriptors(chart, {plugins, localIds}, options, all) {\n  const result = [];\n  const context = chart.getContext();\n\n  for (const plugin of plugins) {\n    const id = plugin.id;\n    const opts = getOpts(options[id], all);\n    if (opts === null) {\n      continue;\n    }\n    result.push({\n      plugin,\n      options: pluginOpts(chart.config, {plugin, local: localIds[id]}, opts, context)\n    });\n  }\n\n  return result;\n}\n\nfunction pluginOpts(config, {plugin, local}, opts, context) {\n  const keys = config.pluginScopeKeys(plugin);\n  const scopes = config.getOptionScopes(opts, keys);\n  if (local && plugin.defaults) {\n    // make sure plugin defaults are in scopes for local (not registered) plugins\n    scopes.push(plugin.defaults);\n  }\n  return config.createResolver(scopes, context, [''], {\n    // These are just defaults that plugins can override\n    scriptable: false,\n    indexable: false,\n    allKeys: true\n  });\n}\n", "import defaults, {overrides, descriptors} from './core.defaults.js';\nimport {mergeIf, resolveObjectKey, isArray, isFunction, valueOrDefault, isObject} from '../helpers/helpers.core.js';\nimport {_attachContext, _createResolver, _descriptors} from '../helpers/helpers.config.js';\n\nexport function getIndexAxis(type, options) {\n  const datasetDefaults = defaults.datasets[type] || {};\n  const datasetOptions = (options.datasets || {})[type] || {};\n  return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\n\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n  let axis = id;\n  if (id === '_index_') {\n    axis = indexAxis;\n  } else if (id === '_value_') {\n    axis = indexAxis === 'x' ? 'y' : 'x';\n  }\n  return axis;\n}\n\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n  return axis === indexAxis ? '_index_' : '_value_';\n}\n\nfunction idMatchesAxis(id) {\n  if (id === 'x' || id === 'y' || id === 'r') {\n    return id;\n  }\n}\n\nfunction axisFromPosition(position) {\n  if (position === 'top' || position === 'bottom') {\n    return 'x';\n  }\n  if (position === 'left' || position === 'right') {\n    return 'y';\n  }\n}\n\nexport function determineAxis(id, ...scaleOptions) {\n  if (idMatchesAxis(id)) {\n    return id;\n  }\n  for (const opts of scaleOptions) {\n    const axis = opts.axis\n      || axisFromPosition(opts.position)\n      || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n    if (axis) {\n      return axis;\n    }\n  }\n  throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\n\nfunction getAxisFromDataset(id, axis, dataset) {\n  if (dataset[axis + 'AxisID'] === id) {\n    return {axis};\n  }\n}\n\nfunction retrieveAxisFromDatasets(id, config) {\n  if (config.data && config.data.datasets) {\n    const boundDs = config.data.datasets.filter((d) => d.xAxisID === id || d.yAxisID === id);\n    if (boundDs.length) {\n      return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n    }\n  }\n  return {};\n}\n\nfunction mergeScaleConfig(config, options) {\n  const chartDefaults = overrides[config.type] || {scales: {}};\n  const configScales = options.scales || {};\n  const chartIndexAxis = getIndexAxis(config.type, options);\n  const scales = Object.create(null);\n\n  // First figure out first scale id's per axis.\n  Object.keys(configScales).forEach(id => {\n    const scaleConf = configScales[id];\n    if (!isObject(scaleConf)) {\n      return console.error(`Invalid scale configuration for scale: ${id}`);\n    }\n    if (scaleConf._proxy) {\n      return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n    }\n    const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n    const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n    const defaultScaleOptions = chartDefaults.scales || {};\n    scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n  });\n\n  // Then merge dataset defaults to scale configs\n  config.data.datasets.forEach(dataset => {\n    const type = dataset.type || config.type;\n    const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n    const datasetDefaults = overrides[type] || {};\n    const defaultScaleOptions = datasetDefaults.scales || {};\n    Object.keys(defaultScaleOptions).forEach(defaultID => {\n      const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n      const id = dataset[axis + 'AxisID'] || axis;\n      scales[id] = scales[id] || Object.create(null);\n      mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n    });\n  });\n\n  // apply scale defaults, if not overridden by dataset defaults\n  Object.keys(scales).forEach(key => {\n    const scale = scales[key];\n    mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n  });\n\n  return scales;\n}\n\nfunction initOptions(config) {\n  const options = config.options || (config.options = {});\n\n  options.plugins = valueOrDefault(options.plugins, {});\n  options.scales = mergeScaleConfig(config, options);\n}\n\nfunction initData(data) {\n  data = data || {};\n  data.datasets = data.datasets || [];\n  data.labels = data.labels || [];\n  return data;\n}\n\nfunction initConfig(config) {\n  config = config || {};\n  config.data = initData(config.data);\n\n  initOptions(config);\n\n  return config;\n}\n\nconst keyCache = new Map();\nconst keysCached = new Set();\n\nfunction cachedKeys(cacheKey, generate) {\n  let keys = keyCache.get(cacheKey);\n  if (!keys) {\n    keys = generate();\n    keyCache.set(cacheKey, keys);\n    keysCached.add(keys);\n  }\n  return keys;\n}\n\nconst addIfFound = (set, obj, key) => {\n  const opts = resolveObjectKey(obj, key);\n  if (opts !== undefined) {\n    set.add(opts);\n  }\n};\n\nexport default class Config {\n  constructor(config) {\n    this._config = initConfig(config);\n    this._scopeCache = new Map();\n    this._resolverCache = new Map();\n  }\n\n  get platform() {\n    return this._config.platform;\n  }\n\n  get type() {\n    return this._config.type;\n  }\n\n  set type(type) {\n    this._config.type = type;\n  }\n\n  get data() {\n    return this._config.data;\n  }\n\n  set data(data) {\n    this._config.data = initData(data);\n  }\n\n  get options() {\n    return this._config.options;\n  }\n\n  set options(options) {\n    this._config.options = options;\n  }\n\n  get plugins() {\n    return this._config.plugins;\n  }\n\n  update() {\n    const config = this._config;\n    this.clearCache();\n    initOptions(config);\n  }\n\n  clearCache() {\n    this._scopeCache.clear();\n    this._resolverCache.clear();\n  }\n\n  /**\n   * Returns the option scope keys for resolving dataset options.\n   * These keys do not include the dataset itself, because it is not under options.\n   * @param {string} datasetType\n   * @return {string[][]}\n   */\n  datasetScopeKeys(datasetType) {\n    return cachedKeys(datasetType,\n      () => [[\n        `datasets.${datasetType}`,\n        ''\n      ]]);\n  }\n\n  /**\n   * Returns the option scope keys for resolving dataset animation options.\n   * These keys do not include the dataset itself, because it is not under options.\n   * @param {string} datasetType\n   * @param {string} transition\n   * @return {string[][]}\n   */\n  datasetAnimationScopeKeys(datasetType, transition) {\n    return cachedKeys(`${datasetType}.transition.${transition}`,\n      () => [\n        [\n          `datasets.${datasetType}.transitions.${transition}`,\n          `transitions.${transition}`,\n        ],\n        // The following are used for looking up the `animations` and `animation` keys\n        [\n          `datasets.${datasetType}`,\n          ''\n        ]\n      ]);\n  }\n\n  /**\n   * Returns the options scope keys for resolving element options that belong\n   * to an dataset. These keys do not include the dataset itself, because it\n   * is not under options.\n   * @param {string} datasetType\n   * @param {string} elementType\n   * @return {string[][]}\n   */\n  datasetElementScopeKeys(datasetType, elementType) {\n    return cachedKeys(`${datasetType}-${elementType}`,\n      () => [[\n        `datasets.${datasetType}.elements.${elementType}`,\n        `datasets.${datasetType}`,\n        `elements.${elementType}`,\n        ''\n      ]]);\n  }\n\n  /**\n   * Returns the options scope keys for resolving plugin options.\n   * @param {{id: string, additionalOptionScopes?: string[]}} plugin\n   * @return {string[][]}\n   */\n  pluginScopeKeys(plugin) {\n    const id = plugin.id;\n    const type = this.type;\n    return cachedKeys(`${type}-plugin-${id}`,\n      () => [[\n        `plugins.${id}`,\n        ...plugin.additionalOptionScopes || [],\n      ]]);\n  }\n\n  /**\n   * @private\n   */\n  _cachedScopes(mainScope, resetCache) {\n    const _scopeCache = this._scopeCache;\n    let cache = _scopeCache.get(mainScope);\n    if (!cache || resetCache) {\n      cache = new Map();\n      _scopeCache.set(mainScope, cache);\n    }\n    return cache;\n  }\n\n  /**\n   * Resolves the objects from options and defaults for option value resolution.\n   * @param {object} mainScope - The main scope object for options\n   * @param {string[][]} keyLists - The arrays of keys in resolution order\n   * @param {boolean} [resetCache] - reset the cache for this mainScope\n   */\n  getOptionScopes(mainScope, keyLists, resetCache) {\n    const {options, type} = this;\n    const cache = this._cachedScopes(mainScope, resetCache);\n    const cached = cache.get(keyLists);\n    if (cached) {\n      return cached;\n    }\n\n    const scopes = new Set();\n\n    keyLists.forEach(keys => {\n      if (mainScope) {\n        scopes.add(mainScope);\n        keys.forEach(key => addIfFound(scopes, mainScope, key));\n      }\n      keys.forEach(key => addIfFound(scopes, options, key));\n      keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n      keys.forEach(key => addIfFound(scopes, defaults, key));\n      keys.forEach(key => addIfFound(scopes, descriptors, key));\n    });\n\n    const array = Array.from(scopes);\n    if (array.length === 0) {\n      array.push(Object.create(null));\n    }\n    if (keysCached.has(keyLists)) {\n      cache.set(keyLists, array);\n    }\n    return array;\n  }\n\n  /**\n   * Returns the option scopes for resolving chart options\n   * @return {object[]}\n   */\n  chartOptionScopes() {\n    const {options, type} = this;\n\n    return [\n      options,\n      overrides[type] || {},\n      defaults.datasets[type] || {}, // https://github.com/chartjs/Chart.js/issues/8531\n      {type},\n      defaults,\n      descriptors\n    ];\n  }\n\n  /**\n   * @param {object[]} scopes\n   * @param {string[]} names\n   * @param {function|object} context\n   * @param {string[]} [prefixes]\n   * @return {object}\n   */\n  resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n    const result = {$shared: true};\n    const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n    let options = resolver;\n    if (needContext(resolver, names)) {\n      result.$shared = false;\n      context = isFunction(context) ? context() : context;\n      // subResolver is passed to scriptable options. It should not resolve to hover options.\n      const subResolver = this.createResolver(scopes, context, subPrefixes);\n      options = _attachContext(resolver, context, subResolver);\n    }\n\n    for (const prop of names) {\n      result[prop] = options[prop];\n    }\n    return result;\n  }\n\n  /**\n   * @param {object[]} scopes\n   * @param {object} [context]\n   * @param {string[]} [prefixes]\n   * @param {{scriptable: boolean, indexable: boolean, allKeys?: boolean}} [descriptorDefaults]\n   */\n  createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n    const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n    return isObject(context)\n      ? _attachContext(resolver, context, undefined, descriptorDefaults)\n      : resolver;\n  }\n}\n\nfunction getResolver(resolverCache, scopes, prefixes) {\n  let cache = resolverCache.get(scopes);\n  if (!cache) {\n    cache = new Map();\n    resolverCache.set(scopes, cache);\n  }\n  const cacheKey = prefixes.join();\n  let cached = cache.get(cacheKey);\n  if (!cached) {\n    const resolver = _createResolver(scopes, prefixes);\n    cached = {\n      resolver,\n      subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n    };\n    cache.set(cacheKey, cached);\n  }\n  return cached;\n}\n\nconst hasFunction = value => isObject(value)\n  && Object.getOwnPropertyNames(value).some((key) => isFunction(value[key]));\n\nfunction needContext(proxy, names) {\n  const {isScriptable, isIndexable} = _descriptors(proxy);\n\n  for (const prop of names) {\n    const scriptable = isScriptable(prop);\n    const indexable = isIndexable(prop);\n    const value = (indexable || scriptable) && proxy[prop];\n    if ((scriptable && (isFunction(value) || hasFunction(value)))\n      || (indexable && isArray(value))) {\n      return true;\n    }\n  }\n  return false;\n}\n", "import animator from './core.animator.js';\nimport defaults, {overrides} from './core.defaults.js';\nimport Interaction from './core.interaction.js';\nimport layouts from './core.layouts.js';\nimport {_detectPlatform} from '../platform/index.js';\nimport PluginService from './core.plugins.js';\nimport registry from './core.registry.js';\nimport Config, {determineAxis, getIndexAxis} from './core.config.js';\nimport {each, callback as callCallback, uid, valueOrDefault, _elementsEqual, isNullOrUndef, setsEqual, defined, isFunction, _isClickEvent} from '../helpers/helpers.core.js';\nimport {clearCanvas, clipArea, createContext, unclipArea, _isPointInArea, _isDomSupported, retinaScale, getDatasetClipArea} from '../helpers/index.js';\n// @ts-ignore\nimport {version} from '../../package.json';\nimport {debounce} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').Point } Point\n */\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n  return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\n\nfunction compare2Level(l1, l2) {\n  return function(a, b) {\n    return a[l1] === b[l1]\n      ? a[l2] - b[l2]\n      : a[l1] - b[l1];\n  };\n}\n\nfunction onAnimationsComplete(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n\n  chart.notifyPlugins('afterRender');\n  callCallback(animationOptions && animationOptions.onComplete, [context], chart);\n}\n\nfunction onAnimationProgress(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  callCallback(animationOptions && animationOptions.onProgress, [context], chart);\n}\n\n/**\n * Chart.js can take a string id of a canvas element, a 2d context, or a canvas element itself.\n * Attempt to unwrap the item passed into the chart constructor so that it is a canvas element (if possible).\n */\nfunction getCanvas(item) {\n  if (_isDomSupported() && typeof item === 'string') {\n    item = document.getElementById(item);\n  } else if (item && item.length) {\n    // Support for array based queries (such as jQuery)\n    item = item[0];\n  }\n\n  if (item && item.canvas) {\n    // Support for any object associated to a canvas (including a context2d)\n    item = item.canvas;\n  }\n  return item;\n}\n\nconst instances = {};\nconst getChart = (key) => {\n  const canvas = getCanvas(key);\n  return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\n\nfunction moveNumericKeys(obj, start, move) {\n  const keys = Object.keys(obj);\n  for (const key of keys) {\n    const intKey = +key;\n    if (intKey >= start) {\n      const value = obj[key];\n      delete obj[key];\n      if (move > 0 || intKey > start) {\n        obj[intKey + move] = value;\n      }\n    }\n  }\n}\n\n/**\n * @param {ChartEvent} e\n * @param {ChartEvent|null} lastEvent\n * @param {boolean} inChartArea\n * @param {boolean} isClick\n * @returns {ChartEvent|null}\n */\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n  if (!inChartArea || e.type === 'mouseout') {\n    return null;\n  }\n  if (isClick) {\n    return lastEvent;\n  }\n  return e;\n}\n\nclass Chart {\n\n  static defaults = defaults;\n  static instances = instances;\n  static overrides = overrides;\n  static registry = registry;\n  static version = version;\n  static getChart = getChart;\n\n  static register(...items) {\n    registry.add(...items);\n    invalidatePlugins();\n  }\n\n  static unregister(...items) {\n    registry.remove(...items);\n    invalidatePlugins();\n  }\n\n  // eslint-disable-next-line max-statements\n  constructor(item, userConfig) {\n    const config = this.config = new Config(userConfig);\n    const initialCanvas = getCanvas(item);\n    const existingChart = getChart(initialCanvas);\n    if (existingChart) {\n      throw new Error(\n        'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.'\n      );\n    }\n\n    const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n\n    this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n    this.platform.updateConfig(config);\n\n    const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n    const canvas = context && context.canvas;\n    const height = canvas && canvas.height;\n    const width = canvas && canvas.width;\n\n    this.id = uid();\n    this.ctx = context;\n    this.canvas = canvas;\n    this.width = width;\n    this.height = height;\n    this._options = options;\n    // Store the previously used aspect ratio to determine if a resize\n    // is needed during updates. Do this after _options is set since\n    // aspectRatio uses a getter\n    this._aspectRatio = this.aspectRatio;\n    this._layers = [];\n    this._metasets = [];\n    this._stacks = undefined;\n    this.boxes = [];\n    this.currentDevicePixelRatio = undefined;\n    this.chartArea = undefined;\n    this._active = [];\n    this._lastEvent = undefined;\n    this._listeners = {};\n    /** @type {?{attach?: function, detach?: function, resize?: function}} */\n    this._responsiveListeners = undefined;\n    this._sortedMetasets = [];\n    this.scales = {};\n    this._plugins = new PluginService();\n    this.$proxies = {};\n    this._hiddenIndices = {};\n    this.attached = false;\n    this._animationsDisabled = undefined;\n    this.$context = undefined;\n    this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n    this._dataChanges = [];\n\n    // Add the chart instance to the global namespace\n    instances[this.id] = this;\n\n    if (!context || !canvas) {\n      // The given item is not a compatible context2d element, let's return before finalizing\n      // the chart initialization but after setting basic chart / controller properties that\n      // can help to figure out that the chart is not valid (e.g chart.canvas !== null);\n      // https://github.com/chartjs/Chart.js/issues/2807\n      console.error(\"Failed to create chart: can't acquire context from the given item\");\n      return;\n    }\n\n    animator.listen(this, 'complete', onAnimationsComplete);\n    animator.listen(this, 'progress', onAnimationProgress);\n\n    this._initialize();\n    if (this.attached) {\n      this.update();\n    }\n  }\n\n  get aspectRatio() {\n    const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n    if (!isNullOrUndef(aspectRatio)) {\n      // If aspectRatio is defined in options, use that.\n      return aspectRatio;\n    }\n\n    if (maintainAspectRatio && _aspectRatio) {\n      // If maintainAspectRatio is truthly and we had previously determined _aspectRatio, use that\n      return _aspectRatio;\n    }\n\n    // Calculate\n    return height ? width / height : null;\n  }\n\n  get data() {\n    return this.config.data;\n  }\n\n  set data(data) {\n    this.config.data = data;\n  }\n\n  get options() {\n    return this._options;\n  }\n\n  set options(options) {\n    this.config.options = options;\n  }\n\n  get registry() {\n    return registry;\n  }\n\n  /**\n\t * @private\n\t */\n  _initialize() {\n    // Before init plugin notification\n    this.notifyPlugins('beforeInit');\n\n    if (this.options.responsive) {\n      this.resize();\n    } else {\n      retinaScale(this, this.options.devicePixelRatio);\n    }\n\n    this.bindEvents();\n\n    // After init plugin notification\n    this.notifyPlugins('afterInit');\n\n    return this;\n  }\n\n  clear() {\n    clearCanvas(this.canvas, this.ctx);\n    return this;\n  }\n\n  stop() {\n    animator.stop(this);\n    return this;\n  }\n\n  /**\n\t * Resize the chart to its container or to explicit dimensions.\n\t * @param {number} [width]\n\t * @param {number} [height]\n\t */\n  resize(width, height) {\n    if (!animator.running(this)) {\n      this._resize(width, height);\n    } else {\n      this._resizeBeforeDraw = {width, height};\n    }\n  }\n\n  _resize(width, height) {\n    const options = this.options;\n    const canvas = this.canvas;\n    const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n    const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n    const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n    const mode = this.width ? 'resize' : 'attach';\n\n    this.width = newSize.width;\n    this.height = newSize.height;\n    this._aspectRatio = this.aspectRatio;\n    if (!retinaScale(this, newRatio, true)) {\n      return;\n    }\n\n    this.notifyPlugins('resize', {size: newSize});\n\n    callCallback(options.onResize, [this, newSize], this);\n\n    if (this.attached) {\n      if (this._doResize(mode)) {\n        // The resize update is delayed, only draw without updating.\n        this.render();\n      }\n    }\n  }\n\n  ensureScalesHaveIDs() {\n    const options = this.options;\n    const scalesOptions = options.scales || {};\n\n    each(scalesOptions, (axisOptions, axisID) => {\n      axisOptions.id = axisID;\n    });\n  }\n\n  /**\n\t * Builds a map of scale ID to scale object for future lookup.\n\t */\n  buildOrUpdateScales() {\n    const options = this.options;\n    const scaleOpts = options.scales;\n    const scales = this.scales;\n    const updated = Object.keys(scales).reduce((obj, id) => {\n      obj[id] = false;\n      return obj;\n    }, {});\n    let items = [];\n\n    if (scaleOpts) {\n      items = items.concat(\n        Object.keys(scaleOpts).map((id) => {\n          const scaleOptions = scaleOpts[id];\n          const axis = determineAxis(id, scaleOptions);\n          const isRadial = axis === 'r';\n          const isHorizontal = axis === 'x';\n          return {\n            options: scaleOptions,\n            dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n            dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n          };\n        })\n      );\n    }\n\n    each(items, (item) => {\n      const scaleOptions = item.options;\n      const id = scaleOptions.id;\n      const axis = determineAxis(id, scaleOptions);\n      const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n\n      if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n        scaleOptions.position = item.dposition;\n      }\n\n      updated[id] = true;\n      let scale = null;\n      if (id in scales && scales[id].type === scaleType) {\n        scale = scales[id];\n      } else {\n        const scaleClass = registry.getScale(scaleType);\n        scale = new scaleClass({\n          id,\n          type: scaleType,\n          ctx: this.ctx,\n          chart: this\n        });\n        scales[scale.id] = scale;\n      }\n\n      scale.init(scaleOptions, options);\n    });\n    // clear up discarded scales\n    each(updated, (hasUpdated, id) => {\n      if (!hasUpdated) {\n        delete scales[id];\n      }\n    });\n\n    each(scales, (scale) => {\n      layouts.configure(this, scale, scale.options);\n      layouts.addBox(this, scale);\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _updateMetasets() {\n    const metasets = this._metasets;\n    const numData = this.data.datasets.length;\n    const numMeta = metasets.length;\n\n    metasets.sort((a, b) => a.index - b.index);\n    if (numMeta > numData) {\n      for (let i = numData; i < numMeta; ++i) {\n        this._destroyDatasetMeta(i);\n      }\n      metasets.splice(numData, numMeta - numData);\n    }\n    this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n  }\n\n  /**\n\t * @private\n\t */\n  _removeUnreferencedMetasets() {\n    const {_metasets: metasets, data: {datasets}} = this;\n    if (metasets.length > datasets.length) {\n      delete this._stacks;\n    }\n    metasets.forEach((meta, index) => {\n      if (datasets.filter(x => x === meta._dataset).length === 0) {\n        this._destroyDatasetMeta(index);\n      }\n    });\n  }\n\n  buildOrUpdateControllers() {\n    const newControllers = [];\n    const datasets = this.data.datasets;\n    let i, ilen;\n\n    this._removeUnreferencedMetasets();\n\n    for (i = 0, ilen = datasets.length; i < ilen; i++) {\n      const dataset = datasets[i];\n      let meta = this.getDatasetMeta(i);\n      const type = dataset.type || this.config.type;\n\n      if (meta.type && meta.type !== type) {\n        this._destroyDatasetMeta(i);\n        meta = this.getDatasetMeta(i);\n      }\n      meta.type = type;\n      meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n      meta.order = dataset.order || 0;\n      meta.index = i;\n      meta.label = '' + dataset.label;\n      meta.visible = this.isDatasetVisible(i);\n\n      if (meta.controller) {\n        meta.controller.updateIndex(i);\n        meta.controller.linkScales();\n      } else {\n        const ControllerClass = registry.getController(type);\n        const {datasetElementType, dataElementType} = defaults.datasets[type];\n        Object.assign(ControllerClass, {\n          dataElementType: registry.getElement(dataElementType),\n          datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n        });\n        meta.controller = new ControllerClass(this, i);\n        newControllers.push(meta.controller);\n      }\n    }\n\n    this._updateMetasets();\n    return newControllers;\n  }\n\n  /**\n\t * Reset the elements of all datasets\n\t * @private\n\t */\n  _resetElements() {\n    each(this.data.datasets, (dataset, datasetIndex) => {\n      this.getDatasetMeta(datasetIndex).controller.reset();\n    }, this);\n  }\n\n  /**\n\t* Resets the chart back to its state before the initial animation\n\t*/\n  reset() {\n    this._resetElements();\n    this.notifyPlugins('reset');\n  }\n\n  update(mode) {\n    const config = this.config;\n\n    config.update();\n    const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    const animsDisabled = this._animationsDisabled = !options.animation;\n\n    this._updateScales();\n    this._checkEventBindings();\n    this._updateHiddenIndices();\n\n    // plugins options references might have change, let's invalidate the cache\n    // https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n    this._plugins.invalidate();\n\n    if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n\n    // Make sure dataset controllers are updated and new controllers are reset\n    const newControllers = this.buildOrUpdateControllers();\n\n    this.notifyPlugins('beforeElementsUpdate');\n\n    // Make sure all dataset controllers have correct meta data counts\n    let minPadding = 0;\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n      const {controller} = this.getDatasetMeta(i);\n      const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n      // New controllers will be reset after the layout pass, so we only want to modify\n      // elements added to new datasets\n      controller.buildOrUpdateElements(reset);\n      minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n    }\n    minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n    this._updateLayout(minPadding);\n\n    // Only reset the controllers if we have animations\n    if (!animsDisabled) {\n      // Can only reset the new controllers after the scales have been updated\n      // Reset is done to get the starting point for the initial animation\n      each(newControllers, (controller) => {\n        controller.reset();\n      });\n    }\n\n    this._updateDatasets(mode);\n\n    // Do this before render so that any plugins that need final scale updates can use it\n    this.notifyPlugins('afterUpdate', {mode});\n\n    this._layers.sort(compare2Level('z', '_idx'));\n\n    // Replay last event from before update, or set hover styles on active elements\n    const {_active, _lastEvent} = this;\n    if (_lastEvent) {\n      this._eventHandler(_lastEvent, true);\n    } else if (_active.length) {\n      this._updateHoverStyles(_active, _active, true);\n    }\n\n    this.render();\n  }\n\n  /**\n   * @private\n   */\n  _updateScales() {\n    each(this.scales, (scale) => {\n      layouts.removeBox(this, scale);\n    });\n\n    this.ensureScalesHaveIDs();\n    this.buildOrUpdateScales();\n  }\n\n  /**\n   * @private\n   */\n  _checkEventBindings() {\n    const options = this.options;\n    const existingEvents = new Set(Object.keys(this._listeners));\n    const newEvents = new Set(options.events);\n\n    if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n      // The configured events have changed. Rebind.\n      this.unbindEvents();\n      this.bindEvents();\n    }\n  }\n\n  /**\n   * @private\n   */\n  _updateHiddenIndices() {\n    const {_hiddenIndices} = this;\n    const changes = this._getUniformDataChanges() || [];\n    for (const {method, start, count} of changes) {\n      const move = method === '_removeElements' ? -count : count;\n      moveNumericKeys(_hiddenIndices, start, move);\n    }\n  }\n\n  /**\n   * @private\n   */\n  _getUniformDataChanges() {\n    const _dataChanges = this._dataChanges;\n    if (!_dataChanges || !_dataChanges.length) {\n      return;\n    }\n\n    this._dataChanges = [];\n    const datasetCount = this.data.datasets.length;\n    const makeSet = (idx) => new Set(\n      _dataChanges\n        .filter(c => c[0] === idx)\n        .map((c, i) => i + ',' + c.splice(1).join(','))\n    );\n\n    const changeSet = makeSet(0);\n    for (let i = 1; i < datasetCount; i++) {\n      if (!setsEqual(changeSet, makeSet(i))) {\n        return;\n      }\n    }\n    return Array.from(changeSet)\n      .map(c => c.split(','))\n      .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n  }\n\n  /**\n\t * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\n\t * hook, in which case, plugins will not be called on `afterLayout`.\n\t * @private\n\t */\n  _updateLayout(minPadding) {\n    if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n      return;\n    }\n\n    layouts.update(this, this.width, this.height, minPadding);\n\n    const area = this.chartArea;\n    const noArea = area.width <= 0 || area.height <= 0;\n\n    this._layers = [];\n    each(this.boxes, (box) => {\n      if (noArea && box.position === 'chartArea') {\n        // Skip drawing and configuring chartArea boxes when chartArea is zero or negative\n        return;\n      }\n\n      // configure is called twice, once in core.scale.update and once here.\n      // Here the boxes are fully updated and at their final positions.\n      if (box.configure) {\n        box.configure();\n      }\n      this._layers.push(...box._layers());\n    }, this);\n\n    this._layers.forEach((item, index) => {\n      item._idx = index;\n    });\n\n    this.notifyPlugins('afterLayout');\n  }\n\n  /**\n\t * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\n\t * @private\n\t */\n  _updateDatasets(mode) {\n    if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this.getDatasetMeta(i).controller.configure();\n    }\n\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n    }\n\n    this.notifyPlugins('afterDatasetsUpdate', {mode});\n  }\n\n  /**\n\t * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\n\t * @private\n\t */\n  _updateDataset(index, mode) {\n    const meta = this.getDatasetMeta(index);\n    const args = {meta, index, mode, cancelable: true};\n\n    if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n      return;\n    }\n\n    meta.controller._update(mode);\n\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetUpdate', args);\n  }\n\n  render() {\n    if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n      return;\n    }\n\n    if (animator.has(this)) {\n      if (this.attached && !animator.running(this)) {\n        animator.start(this);\n      }\n    } else {\n      this.draw();\n      onAnimationsComplete({chart: this});\n    }\n  }\n\n  draw() {\n    let i;\n    if (this._resizeBeforeDraw) {\n      const {width, height} = this._resizeBeforeDraw;\n      // Unset pending resize request now to avoid possible recursion within _resize\n      this._resizeBeforeDraw = null;\n      this._resize(width, height);\n    }\n    this.clear();\n\n    if (this.width <= 0 || this.height <= 0) {\n      return;\n    }\n\n    if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n      return;\n    }\n\n    // Because of plugin hooks (before/afterDatasetsDraw), datasets can't\n    // currently be part of layers. Instead, we draw\n    // layers <= 0 before(default, backward compat), and the rest after\n    const layers = this._layers;\n    for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n\n    this._drawDatasets();\n\n    // Rest of layers\n    for (; i < layers.length; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n\n    this.notifyPlugins('afterDraw');\n  }\n\n  /**\n\t * @private\n\t */\n  _getSortedDatasetMetas(filterVisible) {\n    const metasets = this._sortedMetasets;\n    const result = [];\n    let i, ilen;\n\n    for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n      const meta = metasets[i];\n      if (!filterVisible || meta.visible) {\n        result.push(meta);\n      }\n    }\n\n    return result;\n  }\n\n  /**\n\t * Gets the visible dataset metas in drawing order\n\t * @return {object[]}\n\t */\n  getSortedVisibleDatasetMetas() {\n    return this._getSortedDatasetMetas(true);\n  }\n\n  /**\n\t * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\n\t * @private\n\t */\n  _drawDatasets() {\n    if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n      return;\n    }\n\n    const metasets = this.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      this._drawDataset(metasets[i]);\n    }\n\n    this.notifyPlugins('afterDatasetsDraw');\n  }\n\n  /**\n\t * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetDraw`.\n\t * @private\n\t */\n  _drawDataset(meta) {\n    const ctx = this.ctx;\n    const args = {\n      meta,\n      index: meta.index,\n      cancelable: true\n    };\n    // @ts-expect-error\n    const clip = getDatasetClipArea(this, meta);\n\n    if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n      return;\n    }\n\n    if (clip) {\n      clipArea(ctx, clip);\n    }\n\n    meta.controller.draw();\n\n    if (clip) {\n      unclipArea(ctx);\n    }\n\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetDraw', args);\n  }\n\n  /**\n   * Checks whether the given point is in the chart area.\n   * @param {Point} point - in relative coordinates (see, e.g., getRelativePosition)\n   * @returns {boolean}\n   */\n  isPointInArea(point) {\n    return _isPointInArea(point, this.chartArea, this._minPadding);\n  }\n\n  getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n    const method = Interaction.modes[mode];\n    if (typeof method === 'function') {\n      return method(this, e, options, useFinalPosition);\n    }\n\n    return [];\n  }\n\n  getDatasetMeta(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    const metasets = this._metasets;\n    let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n\n    if (!meta) {\n      meta = {\n        type: null,\n        data: [],\n        dataset: null,\n        controller: null,\n        hidden: null,\t\t\t// See isDatasetVisible() comment\n        xAxisID: null,\n        yAxisID: null,\n        order: dataset && dataset.order || 0,\n        index: datasetIndex,\n        _dataset: dataset,\n        _parsed: [],\n        _sorted: false\n      };\n      metasets.push(meta);\n    }\n\n    return meta;\n  }\n\n  getContext() {\n    return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n  }\n\n  getVisibleDatasetCount() {\n    return this.getSortedVisibleDatasetMetas().length;\n  }\n\n  isDatasetVisible(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    if (!dataset) {\n      return false;\n    }\n\n    const meta = this.getDatasetMeta(datasetIndex);\n\n    // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n    // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n    return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n  }\n\n  setDatasetVisibility(datasetIndex, visible) {\n    const meta = this.getDatasetMeta(datasetIndex);\n    meta.hidden = !visible;\n  }\n\n  toggleDataVisibility(index) {\n    this._hiddenIndices[index] = !this._hiddenIndices[index];\n  }\n\n  getDataVisibility(index) {\n    return !this._hiddenIndices[index];\n  }\n\n  /**\n\t * @private\n\t */\n  _updateVisibility(datasetIndex, dataIndex, visible) {\n    const mode = visible ? 'show' : 'hide';\n    const meta = this.getDatasetMeta(datasetIndex);\n    const anims = meta.controller._resolveAnimations(undefined, mode);\n\n    if (defined(dataIndex)) {\n      meta.data[dataIndex].hidden = !visible;\n      this.update();\n    } else {\n      this.setDatasetVisibility(datasetIndex, visible);\n      // Animate visible state, so hide animation can be seen. This could be handled better if update / updateDataset returned a Promise.\n      anims.update(meta, {visible});\n      this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n    }\n  }\n\n  hide(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, false);\n  }\n\n  show(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, true);\n  }\n\n  /**\n\t * @private\n\t */\n  _destroyDatasetMeta(datasetIndex) {\n    const meta = this._metasets[datasetIndex];\n    if (meta && meta.controller) {\n      meta.controller._destroy();\n    }\n    delete this._metasets[datasetIndex];\n  }\n\n  _stop() {\n    let i, ilen;\n    this.stop();\n    animator.remove(this);\n\n    for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._destroyDatasetMeta(i);\n    }\n  }\n\n  destroy() {\n    this.notifyPlugins('beforeDestroy');\n    const {canvas, ctx} = this;\n\n    this._stop();\n    this.config.clearCache();\n\n    if (canvas) {\n      this.unbindEvents();\n      clearCanvas(canvas, ctx);\n      this.platform.releaseContext(ctx);\n      this.canvas = null;\n      this.ctx = null;\n    }\n\n    delete instances[this.id];\n\n    this.notifyPlugins('afterDestroy');\n  }\n\n  toBase64Image(...args) {\n    return this.canvas.toDataURL(...args);\n  }\n\n  /**\n\t * @private\n\t */\n  bindEvents() {\n    this.bindUserEvents();\n    if (this.options.responsive) {\n      this.bindResponsiveEvents();\n    } else {\n      this.attached = true;\n    }\n  }\n\n  /**\n   * @private\n   */\n  bindUserEvents() {\n    const listeners = this._listeners;\n    const platform = this.platform;\n\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n\n    const listener = (e, x, y) => {\n      e.offsetX = x;\n      e.offsetY = y;\n      this._eventHandler(e);\n    };\n\n    each(this.options.events, (type) => _add(type, listener));\n  }\n\n  /**\n   * @private\n   */\n  bindResponsiveEvents() {\n    if (!this._responsiveListeners) {\n      this._responsiveListeners = {};\n    }\n    const listeners = this._responsiveListeners;\n    const platform = this.platform;\n\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n    const _remove = (type, listener) => {\n      if (listeners[type]) {\n        platform.removeEventListener(this, type, listener);\n        delete listeners[type];\n      }\n    };\n\n    const listener = (width, height) => {\n      if (this.canvas) {\n        this.resize(width, height);\n      }\n    };\n\n    let detached; // eslint-disable-line prefer-const\n    const attached = () => {\n      _remove('attach', attached);\n\n      this.attached = true;\n      this.resize();\n\n      _add('resize', listener);\n      _add('detach', detached);\n    };\n\n    detached = () => {\n      this.attached = false;\n\n      _remove('resize', listener);\n\n      // Stop animating and remove metasets, so when re-attached, the animations start from beginning.\n      this._stop();\n      this._resize(0, 0);\n\n      _add('attach', attached);\n    };\n\n    if (platform.isAttached(this.canvas)) {\n      attached();\n    } else {\n      detached();\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  unbindEvents() {\n    each(this._listeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._listeners = {};\n\n    each(this._responsiveListeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._responsiveListeners = undefined;\n  }\n\n  updateHoverStyle(items, mode, enabled) {\n    const prefix = enabled ? 'set' : 'remove';\n    let meta, item, i, ilen;\n\n    if (mode === 'dataset') {\n      meta = this.getDatasetMeta(items[0].datasetIndex);\n      meta.controller['_' + prefix + 'DatasetHoverStyle']();\n    }\n\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      item = items[i];\n      const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n      if (controller) {\n        controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n      }\n    }\n  }\n\n  /**\n\t * Get active (hovered) elements\n\t * @returns array\n\t */\n  getActiveElements() {\n    return this._active || [];\n  }\n\n  /**\n\t * Set active (hovered) elements\n\t * @param {array} activeElements New active data points\n\t */\n  setActiveElements(activeElements) {\n    const lastActive = this._active || [];\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('No dataset found at index ' + datasetIndex);\n      }\n\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(active, lastActive);\n\n    if (changed) {\n      this._active = active;\n      // Make sure we don't use the previous mouse event to override the active elements in update.\n      this._lastEvent = null;\n      this._updateHoverStyles(active, lastActive);\n    }\n  }\n\n  /**\n\t * Calls enabled plugins on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {Object} [args] - Extra arguments to apply to the hook call.\n   * @param {import('./core.plugins.js').filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n  notifyPlugins(hook, args, filter) {\n    return this._plugins.notify(this, hook, args, filter);\n  }\n\n  /**\n   * Check if a plugin with the specific ID is registered and enabled\n   * @param {string} pluginId - The ID of the plugin of which to check if it is enabled\n   * @returns {boolean}\n   */\n  isPluginEnabled(pluginId) {\n    return this._plugins._cache.filter(p => p.plugin.id === pluginId).length === 1;\n  }\n\n  /**\n\t * @private\n\t */\n  _updateHoverStyles(active, lastActive, replay) {\n    const hoverOptions = this.options.hover;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n    const deactivated = diff(lastActive, active);\n    const activated = replay ? active : diff(active, lastActive);\n\n    if (deactivated.length) {\n      this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n    }\n\n    if (activated.length && hoverOptions.mode) {\n      this.updateHoverStyle(activated, hoverOptions.mode, true);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _eventHandler(e, replay) {\n    const args = {\n      event: e,\n      replay,\n      cancelable: true,\n      inChartArea: this.isPointInArea(e)\n    };\n    const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n\n    if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n      return;\n    }\n\n    const changed = this._handleEvent(e, replay, args.inChartArea);\n\n    args.cancelable = false;\n    this.notifyPlugins('afterEvent', args, eventFilter);\n\n    if (changed || args.changed) {\n      this.render();\n    }\n\n    return this;\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e the event to handle\n\t * @param {boolean} [replay] - true if the event was replayed by `update`\n   * @param {boolean} [inChartArea] - true if the event is inside chartArea\n\t * @return {boolean} true if the chart needs to re-render\n\t * @private\n\t */\n  _handleEvent(e, replay, inChartArea) {\n    const {_active: lastActive = [], options} = this;\n\n    // If the event is replayed from `update`, we should evaluate with the final positions.\n    //\n    // The `replay`:\n    // It's the last event (excluding click) that has occurred before `update`.\n    // So mouse has not moved. It's also over the chart, because there is a `replay`.\n    //\n    // The why:\n    // If animations are active, the elements haven't moved yet compared to state before update.\n    // But if they will, we are activating the elements that would be active, if this check\n    // was done after the animations have completed. => \"final positions\".\n    // If there is no animations, the \"final\" and \"current\" positions are equal.\n    // This is done so we do not have to evaluate the active elements each animation frame\n    // - it would be expensive.\n    const useFinalPosition = replay;\n    const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n    const isClick = _isClickEvent(e);\n    const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n\n    if (inChartArea) {\n      // Set _lastEvent to null while we are processing the event handlers.\n      // This prevents recursion if the handler calls chart.update()\n      this._lastEvent = null;\n\n      // Invoke onHover hook\n      callCallback(options.onHover, [e, active, this], this);\n\n      if (isClick) {\n        callCallback(options.onClick, [e, active, this], this);\n      }\n    }\n\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed || replay) {\n      this._active = active;\n      this._updateHoverStyles(active, lastActive, replay);\n    }\n\n    this._lastEvent = lastEvent;\n\n    return changed;\n  }\n\n  /**\n   * @param {ChartEvent} e - The event\n   * @param {import('../types/index.js').ActiveElement[]} lastActive - Previously active elements\n   * @param {boolean} inChartArea - Is the event inside chartArea\n   * @param {boolean} useFinalPosition - Should the evaluation be done with current or final (after animation) element positions\n   * @returns {import('../types/index.js').ActiveElement[]} - The active elements\n   * @pravate\n   */\n  _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n    if (e.type === 'mouseout') {\n      return [];\n    }\n\n    if (!inChartArea) {\n      // Let user control the active elements outside chartArea. Eg. using Legend.\n      return lastActive;\n    }\n\n    const hoverOptions = this.options.hover;\n    return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n  }\n}\n\n// @ts-ignore\nfunction invalidatePlugins() {\n  return each(Chart.instances, (chart) => chart._plugins.invalidate());\n}\n\nexport default Chart;\n", "import Element from '../core/core.element.js';\nimport {_angleBetween, getAngleFromPoint, TAU, HALF_PI, valueOrDefault} from '../helpers/index.js';\nimport {PI, _angleDiff, _normalizeAngle, _isBetween, _limitValue} from '../helpers/helpers.math.js';\nimport {_readValueToProps} from '../helpers/helpers.options.js';\nimport type {ArcOptions, Point} from '../types/index.js';\n\nfunction clipSelf(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n  const {startAngle, x, y, outerRadius, innerRadius, options} = element;\n  const {borderWidth, borderJoinStyle} = options;\n  const outerAngleClip = Math.min(borderWidth / outerRadius, _normalizeAngle(startAngle - endAngle));\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius - borderWidth / 2, startAngle + outerAngleClip / 2, endAngle - outerAngleClip / 2);\n\n  if (innerRadius > 0) {\n    const innerAngleClip = Math.min(borderWidth / innerRadius, _normalizeAngle(startAngle - endAngle));\n    ctx.arc(x, y, innerRadius + borderWidth / 2, endAngle - innerAngleClip / 2, startAngle + innerAngleClip / 2, true);\n  } else {\n    const clipWidth = Math.min(borderWidth / 2, outerRadius * _normalizeAngle(startAngle - endAngle));\n\n    if (borderJoinStyle === 'round') {\n      ctx.arc(x, y, clipWidth, endAngle - PI / 2, startAngle + PI / 2, true);\n    } else if (borderJoinStyle === 'bevel') {\n      const r = 2 * clipWidth * clipWidth;\n      const endX = -r * Math.cos(endAngle + PI / 2) + x;\n      const endY = -r * Math.sin(endAngle + PI / 2) + y;\n      const startX = r * Math.cos(startAngle + PI / 2) + x;\n      const startY = r * Math.sin(startAngle + PI / 2) + y;\n      ctx.lineTo(endX, endY);\n      ctx.lineTo(startX, startY);\n    }\n  }\n  ctx.closePath();\n\n  ctx.moveTo(0, 0);\n  ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);\n\n  ctx.clip('evenodd');\n}\n\n\nfunction clipArc(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n  const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n  let angleMargin = pixelMargin / outerRadius;\n\n  // Draw an inner border by clipping the arc and drawing a double-width border\n  // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n  if (innerRadius > pixelMargin) {\n    angleMargin = pixelMargin / innerRadius;\n    ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n  } else {\n    ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n  }\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction toRadiusCorners(value) {\n  return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\n\n/**\n * Parse border radius from the provided options\n */\nfunction parseBorderRadius(arc: ArcElement, innerRadius: number, outerRadius: number, angleDelta: number) {\n  const o = toRadiusCorners(arc.options.borderRadius);\n  const halfThickness = (outerRadius - innerRadius) / 2;\n  const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n\n  // Outer limits are complicated. We want to compute the available angular distance at\n  // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n  // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n  //\n  // If the borderRadius is large, that value can become negative.\n  // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n  // we know that the thickness term will dominate and compute the limits at that point\n  const computeOuterLimit = (val) => {\n    const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n    return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n  };\n\n  return {\n    outerStart: computeOuterLimit(o.outerStart),\n    outerEnd: computeOuterLimit(o.outerEnd),\n    innerStart: _limitValue(o.innerStart, 0, innerLimit),\n    innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n  };\n}\n\n/**\n * Convert (r, 𝜃) to (x, y)\n */\nfunction rThetaToXY(r: number, theta: number, x: number, y: number) {\n  return {\n    x: x + r * Math.cos(theta),\n    y: y + r * Math.sin(theta),\n  };\n}\n\n\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n *   Start      End\n *\n *    1--->a--->2    Outer\n *   /           \\\n *   8           3\n *   |           |\n *   |           |\n *   7           4\n *   \\           /\n *    6<---b<---5    Inner\n */\nfunction pathArc(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  end: number,\n  circular: boolean,\n) {\n  const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n\n  const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n  const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n\n  let spacingOffset = 0;\n  const alpha = end - start;\n\n  if (spacing) {\n    // When spacing is present, it is the same for all items\n    // So we adjust the start and end angle of the arc such that\n    // the distance is the same as it would be without the spacing\n    const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n    const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n    const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n    const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n    spacingOffset = (alpha - adjustedAngle) / 2;\n  }\n\n  const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n  const angleOffset = (alpha - beta) / 2;\n  const startAngle = start + angleOffset + spacingOffset;\n  const endAngle = end - angleOffset - spacingOffset;\n  const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius(element, innerRadius, outerRadius, endAngle - startAngle);\n\n  const outerStartAdjustedRadius = outerRadius - outerStart;\n  const outerEndAdjustedRadius = outerRadius - outerEnd;\n  const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n  const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n\n  const innerStartAdjustedRadius = innerRadius + innerStart;\n  const innerEndAdjustedRadius = innerRadius + innerEnd;\n  const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n  const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n\n  ctx.beginPath();\n\n  if (circular) {\n    // The first arc segments from point 1 to point a to point 2\n    const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n    ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n    ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n\n    // The corner segment from point 2 to point 3\n    if (outerEnd > 0) {\n      const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n    }\n\n    // The line from point 3 to point 4\n    const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n    ctx.lineTo(p4.x, p4.y);\n\n    // The corner segment from point 4 to point 5\n    if (innerEnd > 0) {\n      const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n    }\n\n    // The inner arc from point 5 to point b to point 6\n    const innerMidAdjustedAngle = ((endAngle - (innerEnd / innerRadius)) + (startAngle + (innerStart / innerRadius))) / 2;\n    ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), innerMidAdjustedAngle, true);\n    ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + (innerStart / innerRadius), true);\n\n    // The corner segment from point 6 to point 7\n    if (innerStart > 0) {\n      const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n    }\n\n    // The line from point 7 to point 8\n    const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n    ctx.lineTo(p8.x, p8.y);\n\n    // The corner segment from point 8 to point 1\n    if (outerStart > 0) {\n      const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n    }\n  } else {\n    ctx.moveTo(x, y);\n\n    const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n    const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerStartX, outerStartY);\n\n    const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n    const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerEndX, outerEndY);\n  }\n\n  ctx.closePath();\n}\n\nfunction drawArc(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  circular: boolean,\n) {\n  const {fullCircles, startAngle, circumference} = element;\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.fill();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + (circumference % TAU || TAU);\n    }\n  }\n  pathArc(ctx, element, offset, spacing, endAngle, circular);\n  ctx.fill();\n  return endAngle;\n}\n\nfunction drawBorder(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  circular: boolean,\n) {\n  const {fullCircles, startAngle, circumference, options} = element;\n  const {borderWidth, borderJoinStyle, borderDash, borderDashOffset, borderRadius} = options;\n  const inner = options.borderAlign === 'inner';\n\n  if (!borderWidth) {\n    return;\n  }\n\n  ctx.setLineDash(borderDash || []);\n  ctx.lineDashOffset = borderDashOffset;\n\n  if (inner) {\n    ctx.lineWidth = borderWidth * 2;\n    ctx.lineJoin = borderJoinStyle || 'round';\n  } else {\n    ctx.lineWidth = borderWidth;\n    ctx.lineJoin = borderJoinStyle || 'bevel';\n  }\n\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.stroke();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + (circumference % TAU || TAU);\n    }\n  }\n\n  if (inner) {\n    clipArc(ctx, element, endAngle);\n  }\n\n  if (options.selfJoin && endAngle - startAngle >= PI && borderRadius === 0 && borderJoinStyle !== 'miter') {\n    clipSelf(ctx, element, endAngle);\n  }\n\n  if (!fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    ctx.stroke();\n  }\n}\n\nexport interface ArcProps extends Point {\n  startAngle: number;\n  endAngle: number;\n  innerRadius: number;\n  outerRadius: number;\n  circumference: number;\n}\n\nexport default class ArcElement extends Element<ArcProps, ArcOptions> {\n\n  static id = 'arc';\n\n  static defaults = {\n    borderAlign: 'center',\n    borderColor: '#fff',\n    borderDash: [],\n    borderDashOffset: 0,\n    borderJoinStyle: undefined,\n    borderRadius: 0,\n    borderWidth: 2,\n    offset: 0,\n    spacing: 0,\n    angle: undefined,\n    circular: true,\n    selfJoin: false,\n  };\n\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor'\n  };\n\n  static descriptors = {\n    _scriptable: true,\n    _indexable: (name) => name !== 'borderDash'\n  };\n\n  circumference: number;\n  endAngle: number;\n  fullCircles: number;\n  innerRadius: number;\n  outerRadius: number;\n  pixelMargin: number;\n  startAngle: number;\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.circumference = undefined;\n    this.startAngle = undefined;\n    this.endAngle = undefined;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.pixelMargin = 0;\n    this.fullCircles = 0;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  inRange(chartX: number, chartY: number, useFinalPosition: boolean) {\n    const point = this.getProps(['x', 'y'], useFinalPosition);\n    const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n    const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius',\n      'circumference'\n    ], useFinalPosition);\n    const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n    const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n    const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n    const betweenAngles = _circumference >= TAU || nonZeroBetween;\n    const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n\n    return (betweenAngles && withinRadius);\n  }\n\n  getCenterPoint(useFinalPosition: boolean) {\n    const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n      'x',\n      'y',\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius'\n    ], useFinalPosition);\n    const {offset, spacing} = this.options;\n    const halfAngle = (startAngle + endAngle) / 2;\n    const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n    return {\n      x: x + Math.cos(halfAngle) * halfRadius,\n      y: y + Math.sin(halfAngle) * halfRadius\n    };\n  }\n\n  tooltipPosition(useFinalPosition: boolean) {\n    return this.getCenterPoint(useFinalPosition);\n  }\n\n  draw(ctx: CanvasRenderingContext2D) {\n    const {options, circumference} = this;\n    const offset = (options.offset || 0) / 4;\n    const spacing = (options.spacing || 0) / 2;\n    const circular = options.circular;\n    this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n    this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n\n    if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n      return;\n    }\n\n    ctx.save();\n\n    const halfAngle = (this.startAngle + this.endAngle) / 2;\n    ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n    const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n    const radiusOffset = offset * fix;\n\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n\n    drawArc(ctx, this, radiusOffset, spacing, circular);\n    drawBorder(ctx, this, radiusOffset, spacing, circular);\n\n    ctx.restore();\n  }\n}\n", "import Element from '../core/core.element.js';\nimport {_bezierInterpolation, _pointInLine, _steppedInterpolation} from '../helpers/helpers.interpolation.js';\nimport {_computeSegments, _boundSegments} from '../helpers/helpers.segment.js';\nimport {_steppedLineTo, _bezierCurveTo} from '../helpers/helpers.canvas.js';\nimport {_updateBezierControlPoints} from '../helpers/helpers.curve.js';\nimport {valueOrDefault} from '../helpers/index.js';\n\n/**\n * @typedef { import('./element.point.js').default } PointElement\n */\n\nfunction setStyle(ctx, options, style = options) {\n  ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n  ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n  ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n  ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n  ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n  ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\n\nfunction lineTo(ctx, previous, target) {\n  ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @returns {any}\n */\nfunction getLineMethod(options) {\n  if (options.stepped) {\n    return _steppedLineTo;\n  }\n\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierCurveTo;\n  }\n\n  return lineTo;\n}\n\nfunction pathVars(points, segment, params = {}) {\n  const count = points.length;\n  const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n  const {start: segmentStart, end: segmentEnd} = segment;\n  const start = Math.max(paramsStart, segmentStart);\n  const end = Math.min(paramsEnd, segmentEnd);\n  const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n\n  return {\n    count,\n    start,\n    loop: segment.loop,\n    ilen: end < start && !outside ? count + end - start : end - start\n  };\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction pathSegment(ctx, line, segment, params) {\n  const {points, options} = line;\n  const {count, start, loop, ilen} = pathVars(points, segment, params);\n  const lineMethod = getLineMethod(options);\n  // eslint-disable-next-line prefer-const\n  let {move = true, reverse} = params || {};\n  let i, point, prev;\n\n  for (i = 0; i <= ilen; ++i) {\n    point = points[(start + (reverse ? ilen - i : i)) % count];\n\n    if (point.skip) {\n      // If there is a skipped point inside a segment, spanGaps must be true\n      continue;\n    } else if (move) {\n      ctx.moveTo(point.x, point.y);\n      move = false;\n    } else {\n      lineMethod(ctx, prev, point, reverse, options.stepped);\n    }\n\n    prev = point;\n  }\n\n  if (loop) {\n    point = points[(start + (reverse ? ilen : 0)) % count];\n    lineMethod(ctx, prev, point, reverse, options.stepped);\n  }\n\n  return !!loop;\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction fastPathSegment(ctx, line, segment, params) {\n  const points = line.points;\n  const {count, start, ilen} = pathVars(points, segment, params);\n  const {move = true, reverse} = params || {};\n  let avgX = 0;\n  let countX = 0;\n  let i, point, prevX, minY, maxY, lastY;\n\n  const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n  const drawX = () => {\n    if (minY !== maxY) {\n      // Draw line to maxY and minY, using the average x-coordinate\n      ctx.lineTo(avgX, maxY);\n      ctx.lineTo(avgX, minY);\n      // Line to y-value of last point in group. So the line continues\n      // from correct position. Not using move, to have solid path.\n      ctx.lineTo(avgX, lastY);\n    }\n  };\n\n  if (move) {\n    point = points[pointIndex(0)];\n    ctx.moveTo(point.x, point.y);\n  }\n\n  for (i = 0; i <= ilen; ++i) {\n    point = points[pointIndex(i)];\n\n    if (point.skip) {\n      // If there is a skipped point inside a segment, spanGaps must be true\n      continue;\n    }\n\n    const x = point.x;\n    const y = point.y;\n    const truncX = x | 0; // truncated x-coordinate\n\n    if (truncX === prevX) {\n      // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n      if (y < minY) {\n        minY = y;\n      } else if (y > maxY) {\n        maxY = y;\n      }\n      // For first point in group, countX is `0`, so average will be `x` / 1.\n      avgX = (countX * avgX + x) / ++countX;\n    } else {\n      drawX();\n      // Draw line to next x-position, using the first (or only)\n      // y-value in that group\n      ctx.lineTo(x, y);\n\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n    }\n    // Keep track of the last y-value in group\n    lastY = y;\n  }\n  drawX();\n}\n\n/**\n * @param {LineElement} line - the line\n * @returns {function}\n * @private\n */\nfunction _getSegmentMethod(line) {\n  const opts = line.options;\n  const borderDash = opts.borderDash && opts.borderDash.length;\n  const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n  return useFastPath ? fastPathSegment : pathSegment;\n}\n\n/**\n * @private\n */\nfunction _getInterpolationMethod(options) {\n  if (options.stepped) {\n    return _steppedInterpolation;\n  }\n\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierInterpolation;\n  }\n\n  return _pointInLine;\n}\n\nfunction strokePathWithCache(ctx, line, start, count) {\n  let path = line._path;\n  if (!path) {\n    path = line._path = new Path2D();\n    if (line.path(path, start, count)) {\n      path.closePath();\n    }\n  }\n  setStyle(ctx, line.options);\n  ctx.stroke(path);\n}\n\nfunction strokePathDirect(ctx, line, start, count) {\n  const {segments, options} = line;\n  const segmentMethod = _getSegmentMethod(line);\n\n  for (const segment of segments) {\n    setStyle(ctx, options, segment.style);\n    ctx.beginPath();\n    if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n      ctx.closePath();\n    }\n    ctx.stroke();\n  }\n}\n\nconst usePath2D = typeof Path2D === 'function';\n\nfunction draw(ctx, line, start, count) {\n  if (usePath2D && !line.options.segment) {\n    strokePathWithCache(ctx, line, start, count);\n  } else {\n    strokePathDirect(ctx, line, start, count);\n  }\n}\n\nexport default class LineElement extends Element {\n\n  static id = 'line';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderCapStyle: 'butt',\n    borderDash: [],\n    borderDashOffset: 0,\n    borderJoinStyle: 'miter',\n    borderWidth: 3,\n    capBezierPoints: true,\n    cubicInterpolationMode: 'default',\n    fill: false,\n    spanGaps: false,\n    stepped: false,\n    tension: 0,\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n\n  static descriptors = {\n    _scriptable: true,\n    _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n  };\n\n\n  constructor(cfg) {\n    super();\n\n    this.animated = true;\n    this.options = undefined;\n    this._chart = undefined;\n    this._loop = undefined;\n    this._fullLoop = undefined;\n    this._path = undefined;\n    this._points = undefined;\n    this._segments = undefined;\n    this._decimated = false;\n    this._pointsUpdated = false;\n    this._datasetIndex = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  updateControlPoints(chartArea, indexAxis) {\n    const options = this.options;\n    if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n      const loop = options.spanGaps ? this._loop : this._fullLoop;\n      _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n      this._pointsUpdated = true;\n    }\n  }\n\n  set points(points) {\n    this._points = points;\n    delete this._segments;\n    delete this._path;\n    this._pointsUpdated = false;\n  }\n\n  get points() {\n    return this._points;\n  }\n\n  get segments() {\n    return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n  }\n\n  /**\n\t * First non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n  first() {\n    const segments = this.segments;\n    const points = this.points;\n    return segments.length && points[segments[0].start];\n  }\n\n  /**\n\t * Last non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n  last() {\n    const segments = this.segments;\n    const points = this.points;\n    const count = segments.length;\n    return count && points[segments[count - 1].end];\n  }\n\n  /**\n\t * Interpolate a point in this line at the same value on `property` as\n\t * the reference `point` provided\n\t * @param {PointElement} point - the reference point\n\t * @param {string} property - the property to match on\n\t * @returns {PointElement|undefined}\n\t */\n  interpolate(point, property) {\n    const options = this.options;\n    const value = point[property];\n    const points = this.points;\n    const segments = _boundSegments(this, {property, start: value, end: value});\n\n    if (!segments.length) {\n      return;\n    }\n\n    const result = [];\n    const _interpolate = _getInterpolationMethod(options);\n    let i, ilen;\n    for (i = 0, ilen = segments.length; i < ilen; ++i) {\n      const {start, end} = segments[i];\n      const p1 = points[start];\n      const p2 = points[end];\n      if (p1 === p2) {\n        result.push(p1);\n        continue;\n      }\n      const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n      const interpolated = _interpolate(p1, p2, t, options.stepped);\n      interpolated[property] = point[property];\n      result.push(interpolated);\n    }\n    return result.length === 1 ? result[0] : result;\n  }\n\n  /**\n\t * Append a segment of this line to current path.\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} segment\n\t * @param {number} segment.start - start index of the segment, referring the points array\n \t * @param {number} segment.end - end index of the segment, referring the points array\n \t * @param {boolean} segment.loop - indicates that the segment is a loop\n\t * @param {object} params\n\t * @param {boolean} params.move - move to starting point (vs line to it)\n\t * @param {boolean} params.reverse - path the segment from end to start\n\t * @param {number} params.start - limit segment to points starting from `start` index\n\t * @param {number} params.end - limit segment to points ending at `start` + `count` index\n\t * @returns {undefined|boolean} - true if the segment is a full loop (path should be closed)\n\t */\n  pathSegment(ctx, segment, params) {\n    const segmentMethod = _getSegmentMethod(this);\n    return segmentMethod(ctx, this, segment, params);\n  }\n\n  /**\n\t * Append all segments of this line to current path.\n\t * @param {CanvasRenderingContext2D|Path2D} ctx\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t * @returns {undefined|boolean} - true if line is a full loop (path should be closed)\n\t */\n  path(ctx, start, count) {\n    const segments = this.segments;\n    const segmentMethod = _getSegmentMethod(this);\n    let loop = this._loop;\n\n    start = start || 0;\n    count = count || (this.points.length - start);\n\n    for (const segment of segments) {\n      loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n    }\n    return !!loop;\n  }\n\n  /**\n\t * Draw\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} chartArea\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t */\n  draw(ctx, chartArea, start, count) {\n    const options = this.options || {};\n    const points = this.points || [];\n\n    if (points.length && options.borderWidth) {\n      ctx.save();\n\n      draw(ctx, this, start, count);\n\n      ctx.restore();\n    }\n\n    if (this.animated) {\n      // When line is animated, the control points and path are not cached.\n      this._pointsUpdated = false;\n      this._path = undefined;\n    }\n  }\n}\n", "import Element from '../core/core.element.js';\nimport {drawPoint, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport type {\n  CartesianParsedData,\n  ChartArea,\n  Point,\n  PointHoverOptions,\n  PointOptions,\n} from '../types/index.js';\n\nfunction inRange(el: PointElement, pos: number, axis: 'x' | 'y', useFinalPosition?: boolean) {\n  const options = el.options;\n  const {[axis]: value} = el.getProps([axis], useFinalPosition);\n\n  return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\n\nexport type PointProps = Point\n\nexport default class PointElement extends Element<PointProps, PointOptions & PointHoverOptions> {\n\n  static id = 'point';\n\n  parsed: CartesianParsedData;\n  skip?: boolean;\n  stop?: boolean;\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderWidth: 1,\n    hitRadius: 1,\n    hoverBorderWidth: 1,\n    hoverRadius: 4,\n    pointStyle: 'circle',\n    radius: 3,\n    rotation: 0\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.parsed = undefined;\n    this.skip = undefined;\n    this.stop = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  inRange(mouseX: number, mouseY: number, useFinalPosition?: boolean) {\n    const options = this.options;\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n  }\n\n  inXRange(mouseX: number, useFinalPosition?: boolean) {\n    return inRange(this, mouseX, 'x', useFinalPosition);\n  }\n\n  inYRange(mouseY: number, useFinalPosition?: boolean) {\n    return inRange(this, mouseY, 'y', useFinalPosition);\n  }\n\n  getCenterPoint(useFinalPosition?: boolean) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n\n  size(options?: Partial<PointOptions & PointHoverOptions>) {\n    options = options || this.options || {};\n    let radius = options.radius || 0;\n    radius = Math.max(radius, radius && options.hoverRadius || 0);\n    const borderWidth = radius && options.borderWidth || 0;\n    return (radius + borderWidth) * 2;\n  }\n\n  draw(ctx: CanvasRenderingContext2D, area: ChartArea) {\n    const options = this.options;\n\n    if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n      return;\n    }\n\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.fillStyle = options.backgroundColor;\n    drawPoint(ctx, options, this.x, this.y);\n  }\n\n  getRange() {\n    const options = this.options || {};\n    // @ts-expect-error Fallbacks should never be hit in practice\n    return options.radius + options.hitRadius;\n  }\n}\n", "import Element from '../core/core.element.js';\nimport {isObject, _isBetween, _limitValue} from '../helpers/index.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {toTRBL, toTRBLCorners} from '../helpers/helpers.options.js';\n\n/** @typedef {{ x: number, y: number, base: number, horizontal: boolean, width: number, height: number }} BarProps */\n\n/**\n * Helper function to get the bounds of the bar regardless of the orientation\n * @param {BarElement} bar the bar\n * @param {boolean} [useFinalPosition]\n * @return {object} bounds of the bar\n * @private\n */\nfunction getBarBounds(bar, useFinalPosition) {\n  const {x, y, base, width, height} = /** @type {BarProps} */ (bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition));\n\n  let left, right, top, bottom, half;\n\n  if (bar.horizontal) {\n    half = height / 2;\n    left = Math.min(x, base);\n    right = Math.max(x, base);\n    top = y - half;\n    bottom = y + half;\n  } else {\n    half = width / 2;\n    left = x - half;\n    right = x + half;\n    top = Math.min(y, base);\n    bottom = Math.max(y, base);\n  }\n\n  return {left, top, right, bottom};\n}\n\nfunction skipOrLimit(skip, value, min, max) {\n  return skip ? 0 : _limitValue(value, min, max);\n}\n\nfunction parseBorderWidth(bar, maxW, maxH) {\n  const value = bar.options.borderWidth;\n  const skip = bar.borderSkipped;\n  const o = toTRBL(value);\n\n  return {\n    t: skipOrLimit(skip.top, o.top, 0, maxH),\n    r: skipOrLimit(skip.right, o.right, 0, maxW),\n    b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n    l: skipOrLimit(skip.left, o.left, 0, maxW)\n  };\n}\n\nfunction parseBorderRadius(bar, maxW, maxH) {\n  const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n  const value = bar.options.borderRadius;\n  const o = toTRBLCorners(value);\n  const maxR = Math.min(maxW, maxH);\n  const skip = bar.borderSkipped;\n\n  // If the value is an object, assume the user knows what they are doing\n  // and apply as directed.\n  const enableBorder = enableBorderRadius || isObject(value);\n\n  return {\n    topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n    topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n    bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n    bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n  };\n}\n\nfunction boundingRects(bar) {\n  const bounds = getBarBounds(bar);\n  const width = bounds.right - bounds.left;\n  const height = bounds.bottom - bounds.top;\n  const border = parseBorderWidth(bar, width / 2, height / 2);\n  const radius = parseBorderRadius(bar, width / 2, height / 2);\n\n  return {\n    outer: {\n      x: bounds.left,\n      y: bounds.top,\n      w: width,\n      h: height,\n      radius\n    },\n    inner: {\n      x: bounds.left + border.l,\n      y: bounds.top + border.t,\n      w: width - border.l - border.r,\n      h: height - border.t - border.b,\n      radius: {\n        topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n        topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n        bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n        bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n      }\n    }\n  };\n}\n\nfunction inRange(bar, x, y, useFinalPosition) {\n  const skipX = x === null;\n  const skipY = y === null;\n  const skipBoth = skipX && skipY;\n  const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n\n  return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\n\nfunction hasRadius(radius) {\n  return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n\n/**\n * Add a path of a rectangle to the current sub-path\n * @param {CanvasRenderingContext2D} ctx Context\n * @param {*} rect Bounding rect\n */\nfunction addNormalRectPath(ctx, rect) {\n  ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\n\nfunction inflateRect(rect, amount, refRect = {}) {\n  const x = rect.x !== refRect.x ? -amount : 0;\n  const y = rect.y !== refRect.y ? -amount : 0;\n  const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n  const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n  return {\n    x: rect.x + x,\n    y: rect.y + y,\n    w: rect.w + w,\n    h: rect.h + h,\n    radius: rect.radius\n  };\n}\n\nexport default class BarElement extends Element {\n\n  static id = 'bar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderSkipped: 'start',\n    borderWidth: 0,\n    borderRadius: 0,\n    inflateAmount: 'auto',\n    pointStyle: undefined\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.horizontal = undefined;\n    this.base = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.inflateAmount = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  draw(ctx) {\n    const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n    const {inner, outer} = boundingRects(this);\n    const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n\n    ctx.save();\n\n    if (outer.w !== inner.w || outer.h !== inner.h) {\n      ctx.beginPath();\n      addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n      ctx.clip();\n      addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n      ctx.fillStyle = borderColor;\n      ctx.fill('evenodd');\n    }\n\n    ctx.beginPath();\n    addRectPath(ctx, inflateRect(inner, inflateAmount));\n    ctx.fillStyle = backgroundColor;\n    ctx.fill();\n\n    ctx.restore();\n  }\n\n  inRange(mouseX, mouseY, useFinalPosition) {\n    return inRange(this, mouseX, mouseY, useFinalPosition);\n  }\n\n  inXRange(mouseX, useFinalPosition) {\n    return inRange(this, mouseX, null, useFinalPosition);\n  }\n\n  inYRange(mouseY, useFinalPosition) {\n    return inRange(this, null, mouseY, useFinalPosition);\n  }\n\n  getCenterPoint(useFinalPosition) {\n    const {x, y, base, horizontal} = /** @type {BarProps} */ (this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition));\n    return {\n      x: horizontal ? (x + base) / 2 : x,\n      y: horizontal ? y : (y + base) / 2\n    };\n  }\n\n  getRange(axis) {\n    return axis === 'x' ? this.width / 2 : this.height / 2;\n  }\n}\n", "import {DoughnutController, PolarAreaController, defaults} from '../index.js';\nimport type {Chart, ChartDataset} from '../types.js';\n\nexport interface ColorsPluginOptions {\n  enabled?: boolean;\n  forceOverride?: boolean;\n}\n\ninterface ColorsDescriptor {\n  backgroundColor?: unknown;\n  borderColor?: unknown;\n}\n\nconst BORDER_COLORS = [\n  'rgb(54, 162, 235)', // blue\n  'rgb(255, 99, 132)', // red\n  'rgb(255, 159, 64)', // orange\n  'rgb(255, 205, 86)', // yellow\n  'rgb(75, 192, 192)', // green\n  'rgb(153, 102, 255)', // purple\n  'rgb(201, 203, 207)' // grey\n];\n\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map(color => color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\n\nfunction getBorderColor(i: number) {\n  return BORDER_COLORS[i % BORDER_COLORS.length];\n}\n\nfunction getBackgroundColor(i: number) {\n  return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\n\nfunction colorizeDefaultDataset(dataset: ChartDataset, i: number) {\n  dataset.borderColor = getBorderColor(i);\n  dataset.backgroundColor = getBackgroundColor(i);\n\n  return ++i;\n}\n\nfunction colorizeDoughnutDataset(dataset: ChartDataset, i: number) {\n  dataset.backgroundColor = dataset.data.map(() => getBorderColor(i++));\n\n  return i;\n}\n\nfunction colorizePolarAreaDataset(dataset: ChartDataset, i: number) {\n  dataset.backgroundColor = dataset.data.map(() => getBackgroundColor(i++));\n\n  return i;\n}\n\nfunction getColorizer(chart: Chart) {\n  let i = 0;\n\n  return (dataset: ChartDataset, datasetIndex: number) => {\n    const controller = chart.getDatasetMeta(datasetIndex).controller;\n\n    if (controller instanceof DoughnutController) {\n      i = colorizeDoughnutDataset(dataset, i);\n    } else if (controller instanceof PolarAreaController) {\n      i = colorizePolarAreaDataset(dataset, i);\n    } else if (controller) {\n      i = colorizeDefaultDataset(dataset, i);\n    }\n  };\n}\n\nfunction containsColorsDefinitions(\n  descriptors: ColorsDescriptor[] | Record<string, ColorsDescriptor>\n) {\n  let k: number | string;\n\n  for (k in descriptors) {\n    if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction containsColorsDefinition(\n  descriptor: ColorsDescriptor\n) {\n  return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\n\nfunction containsDefaultColorsDefenitions() {\n  return defaults.borderColor !== 'rgba(0,0,0,0.1)' || defaults.backgroundColor !== 'rgba(0,0,0,0.1)';\n}\n\nexport default {\n  id: 'colors',\n\n  defaults: {\n    enabled: true,\n    forceOverride: false\n  } as ColorsPluginOptions,\n\n  beforeLayout(chart: Chart, _args, options: ColorsPluginOptions) {\n    if (!options.enabled) {\n      return;\n    }\n\n    const {\n      data: {datasets},\n      options: chartOptions\n    } = chart.config;\n    const {elements} = chartOptions;\n\n    const containsColorDefenition = (\n      containsColorsDefinitions(datasets) ||\n      containsColorsDefinition(chartOptions) ||\n      (elements && containsColorsDefinitions(elements)) ||\n      containsDefaultColorsDefenitions());\n\n    if (!options.forceOverride && containsColorDefenition) {\n      return;\n    }\n\n    const colorizer = getColorizer(chart);\n\n    datasets.forEach(colorizer);\n  }\n};\n", "import {_limitValue, _lookupByKey, isNullOrUndef, resolve} from '../helpers/index.js';\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n  /**\n   * Implementation of the Largest Triangle Three Buckets algorithm.\n   *\n   * This implementation is based on the original implementation by Sveinn Steinarsson\n   * in https://github.com/sveinn-steinarsson/flot-downsample/blob/master/jquery.flot.downsample.js\n   *\n   * The original implementation is MIT licensed.\n   */\n  const samples = options.samples || availableWidth;\n  // There are less points than the threshold, returning the whole array\n  if (samples >= count) {\n    return data.slice(start, start + count);\n  }\n\n  const decimated = [];\n\n  const bucketWidth = (count - 2) / (samples - 2);\n  let sampledIndex = 0;\n  const endIndex = start + count - 1;\n  // Starting from offset\n  let a = start;\n  let i, maxAreaPoint, maxArea, area, nextA;\n\n  decimated[sampledIndex++] = data[a];\n\n  for (i = 0; i < samples - 2; i++) {\n    let avgX = 0;\n    let avgY = 0;\n    let j;\n\n    // Adding offset\n    const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n    const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n    const avgRangeLength = avgRangeEnd - avgRangeStart;\n\n    for (j = avgRangeStart; j < avgRangeEnd; j++) {\n      avgX += data[j].x;\n      avgY += data[j].y;\n    }\n\n    avgX /= avgRangeLength;\n    avgY /= avgRangeLength;\n\n    // Adding offset\n    const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n    const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n    const {x: pointAx, y: pointAy} = data[a];\n\n    // Note that this is changed from the original algorithm which initializes these\n    // values to 1. The reason for this change is that if the area is small, nextA\n    // would never be set and thus a crash would occur in the next loop as `a` would become\n    // `undefined`. Since the area is always positive, but could be 0 in the case of a flat trace,\n    // initializing with a negative number is the correct solution.\n    maxArea = area = -1;\n\n    for (j = rangeOffs; j < rangeTo; j++) {\n      area = 0.5 * Math.abs(\n        (pointAx - avgX) * (data[j].y - pointAy) -\n        (pointAx - data[j].x) * (avgY - pointAy)\n      );\n\n      if (area > maxArea) {\n        maxArea = area;\n        maxAreaPoint = data[j];\n        nextA = j;\n      }\n    }\n\n    decimated[sampledIndex++] = maxAreaPoint;\n    a = nextA;\n  }\n\n  // Include the last point\n  decimated[sampledIndex++] = data[endIndex];\n\n  return decimated;\n}\n\nfunction minMaxDecimation(data, start, count, availableWidth) {\n  let avgX = 0;\n  let countX = 0;\n  let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n  const decimated = [];\n  const endIndex = start + count - 1;\n\n  const xMin = data[start].x;\n  const xMax = data[endIndex].x;\n  const dx = xMax - xMin;\n\n  for (i = start; i < start + count; ++i) {\n    point = data[i];\n    x = (point.x - xMin) / dx * availableWidth;\n    y = point.y;\n    const truncX = x | 0;\n\n    if (truncX === prevX) {\n      // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n      if (y < minY) {\n        minY = y;\n        minIndex = i;\n      } else if (y > maxY) {\n        maxY = y;\n        maxIndex = i;\n      }\n      // For first point in group, countX is `0`, so average will be `x` / 1.\n      // Use point.x here because we're computing the average data `x` value\n      avgX = (countX * avgX + point.x) / ++countX;\n    } else {\n      // Push up to 4 points, 3 for the last interval and the first point for this interval\n      const lastIndex = i - 1;\n\n      if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n        // The interval is defined by 4 points: start, min, max, end.\n        // The starting point is already considered at this point, so we need to determine which\n        // of the other points to add. We need to sort these points to ensure the decimated data\n        // is still sorted and then ensure there are no duplicates.\n        const intermediateIndex1 = Math.min(minIndex, maxIndex);\n        const intermediateIndex2 = Math.max(minIndex, maxIndex);\n\n        if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex1],\n            x: avgX,\n          });\n        }\n        if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex2],\n            x: avgX\n          });\n        }\n      }\n\n      // lastIndex === startIndex will occur when a range has only 1 point which could\n      // happen with very uneven data\n      if (i > 0 && lastIndex !== startIndex) {\n        // Last point in the previous interval\n        decimated.push(data[lastIndex]);\n      }\n\n      // Start of the new interval\n      decimated.push(point);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n      minIndex = maxIndex = startIndex = i;\n    }\n  }\n\n  return decimated;\n}\n\nfunction cleanDecimatedDataset(dataset) {\n  if (dataset._decimated) {\n    const data = dataset._data;\n    delete dataset._decimated;\n    delete dataset._data;\n    Object.defineProperty(dataset, 'data', {\n      configurable: true,\n      enumerable: true,\n      writable: true,\n      value: data,\n    });\n  }\n}\n\nfunction cleanDecimatedData(chart) {\n  chart.data.datasets.forEach((dataset) => {\n    cleanDecimatedDataset(dataset);\n  });\n}\n\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n  const pointCount = points.length;\n\n  let start = 0;\n  let count;\n\n  const {iScale} = meta;\n  const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n  if (minDefined) {\n    start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n  }\n  if (maxDefined) {\n    count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n  } else {\n    count = pointCount - start;\n  }\n\n  return {start, count};\n}\n\nexport default {\n  id: 'decimation',\n\n  defaults: {\n    algorithm: 'min-max',\n    enabled: false,\n  },\n\n  beforeElementsUpdate: (chart, args, options) => {\n    if (!options.enabled) {\n      // The decimation plugin may have been previously enabled. Need to remove old `dataset._data` handlers\n      cleanDecimatedData(chart);\n      return;\n    }\n\n    // Assume the entire chart is available to show a few more points than needed\n    const availableWidth = chart.width;\n\n    chart.data.datasets.forEach((dataset, datasetIndex) => {\n      const {_data, indexAxis} = dataset;\n      const meta = chart.getDatasetMeta(datasetIndex);\n      const data = _data || dataset.data;\n\n      if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n        // Decimation is only supported for lines that have an X indexAxis\n        return;\n      }\n\n      if (!meta.controller.supportsDecimation) {\n        // Only line datasets are supported\n        return;\n      }\n\n      const xAxis = chart.scales[meta.xAxisID];\n      if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n        // Only linear interpolation is supported\n        return;\n      }\n\n      if (chart.options.parsing) {\n        // Plugin only supports data that does not need parsing\n        return;\n      }\n\n      let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n      const threshold = options.threshold || 4 * availableWidth;\n      if (count <= threshold) {\n        // No decimation is required until we are above this threshold\n        cleanDecimatedDataset(dataset);\n        return;\n      }\n\n      if (isNullOrUndef(_data)) {\n        // First time we are seeing this dataset\n        // We override the 'data' property with a setter that stores the\n        // raw data in _data, but reads the decimated data from _decimated\n        dataset._data = data;\n        delete dataset.data;\n        Object.defineProperty(dataset, 'data', {\n          configurable: true,\n          enumerable: true,\n          get: function() {\n            return this._decimated;\n          },\n          set: function(d) {\n            this._data = d;\n          }\n        });\n      }\n\n      // Point the chart to the decimated data\n      let decimated;\n      switch (options.algorithm) {\n      case 'lttb':\n        decimated = lttbDecimation(data, start, count, availableWidth, options);\n        break;\n      case 'min-max':\n        decimated = minMaxDecimation(data, start, count, availableWidth);\n        break;\n      default:\n        throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n      }\n\n      dataset._decimated = decimated;\n    });\n  },\n\n  destroy(chart) {\n    cleanDecimatedData(chart);\n  }\n};\n", "import {_boundSegment, _boundSegments, _normalizeAngle} from '../../helpers/index.js';\n\nexport function _segments(line, target, property) {\n  const segments = line.segments;\n  const points = line.points;\n  const tpoints = target.points;\n  const parts = [];\n\n  for (const segment of segments) {\n    let {start, end} = segment;\n    end = _findSegmentEnd(start, end, points);\n\n    const bounds = _getBounds(property, points[start], points[end], segment.loop);\n\n    if (!target.segments) {\n      // Special case for boundary not supporting `segments` (simpleArc)\n      // Bounds are provided as `target` for partial circle, or undefined for full circle\n      parts.push({\n        source: segment,\n        target: bounds,\n        start: points[start],\n        end: points[end]\n      });\n      continue;\n    }\n\n    // Get all segments from `target` that intersect the bounds of current segment of `line`\n    const targetSegments = _boundSegments(target, bounds);\n\n    for (const tgt of targetSegments) {\n      const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n      const fillSources = _boundSegment(segment, points, subBounds);\n\n      for (const fillSource of fillSources) {\n        parts.push({\n          source: fillSource,\n          target: tgt,\n          start: {\n            [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n          },\n          end: {\n            [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n          }\n        });\n      }\n    }\n  }\n  return parts;\n}\n\nexport function _getBounds(property, first, last, loop) {\n  if (loop) {\n    return;\n  }\n  let start = first[property];\n  let end = last[property];\n\n  if (property === 'angle') {\n    start = _normalizeAngle(start);\n    end = _normalizeAngle(end);\n  }\n  return {property, start, end};\n}\n\nexport function _pointsFromSegments(boundary, line) {\n  const {x = null, y = null} = boundary || {};\n  const linePoints = line.points;\n  const points = [];\n  line.segments.forEach(({start, end}) => {\n    end = _findSegmentEnd(start, end, linePoints);\n    const first = linePoints[start];\n    const last = linePoints[end];\n    if (y !== null) {\n      points.push({x: first.x, y});\n      points.push({x: last.x, y});\n    } else if (x !== null) {\n      points.push({x, y: first.y});\n      points.push({x, y: last.y});\n    }\n  });\n  return points;\n}\n\nexport function _findSegmentEnd(start, end, points) {\n  for (;end > start; end--) {\n    const point = points[end];\n    if (!isNaN(point.x) && !isNaN(point.y)) {\n      break;\n    }\n  }\n  return end;\n}\n\nfunction _getEdge(a, b, prop, fn) {\n  if (a && b) {\n    return fn(a[prop], b[prop]);\n  }\n  return a ? a[prop] : b ? b[prop] : 0;\n}\n", "/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {isArray} from '../../helpers/index.js';\nimport {_pointsFromSegments} from './filler.segment.js';\n\n/**\n * @param {PointElement[] | { x: number; y: number; }} boundary\n * @param {LineElement} line\n * @return {LineElement?}\n */\nexport function _createBoundaryLine(boundary, line) {\n  let points = [];\n  let _loop = false;\n\n  if (isArray(boundary)) {\n    _loop = true;\n    // @ts-ignore\n    points = boundary;\n  } else {\n    points = _pointsFromSegments(boundary, line);\n  }\n\n  return points.length ? new LineElement({\n    points,\n    options: {tension: 0},\n    _loop,\n    _fullLoop: _loop\n  }) : null;\n}\n\nexport function _shouldApplyFill(source) {\n  return source && source.fill !== false;\n}\n", "import {isObject, isFinite, valueOrDefault} from '../../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.line.js').default } LineElement\n * @typedef { import('../../types/index.js').FillTarget } FillTarget\n * @typedef { import('../../types/index.js').ComplexFillTarget } ComplexFillTarget\n */\n\nexport function _resolveTarget(sources, index, propagate) {\n  const source = sources[index];\n  let fill = source.fill;\n  const visited = [index];\n  let target;\n\n  if (!propagate) {\n    return fill;\n  }\n\n  while (fill !== false && visited.indexOf(fill) === -1) {\n    if (!isFinite(fill)) {\n      return fill;\n    }\n\n    target = sources[fill];\n    if (!target) {\n      return false;\n    }\n\n    if (target.visible) {\n      return fill;\n    }\n\n    visited.push(fill);\n    fill = target.fill;\n  }\n\n  return false;\n}\n\n/**\n * @param {LineElement} line\n * @param {number} index\n * @param {number} count\n */\nexport function _decodeFill(line, index, count) {\n  /** @type {string | {value: number}} */\n  const fill = parseFillOption(line);\n\n  if (isObject(fill)) {\n    return isNaN(fill.value) ? false : fill;\n  }\n\n  let target = parseFloat(fill);\n\n  if (isFinite(target) && Math.floor(target) === target) {\n    return decodeTargetIndex(fill[0], index, target, count);\n  }\n\n  return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\n\nfunction decodeTargetIndex(firstCh, index, target, count) {\n  if (firstCh === '-' || firstCh === '+') {\n    target = index + target;\n  }\n\n  if (target === index || target < 0 || target >= count) {\n    return false;\n  }\n\n  return target;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @returns {number | null}\n */\nexport function _getTargetPixel(fill, scale) {\n  let pixel = null;\n  if (fill === 'start') {\n    pixel = scale.bottom;\n  } else if (fill === 'end') {\n    pixel = scale.top;\n  } else if (isObject(fill)) {\n    // @ts-ignore\n    pixel = scale.getPixelForValue(fill.value);\n  } else if (scale.getBasePixel) {\n    pixel = scale.getBasePixel();\n  }\n  return pixel;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @param {number} startValue\n * @returns {number | undefined}\n */\nexport function _getTargetValue(fill, scale, startValue) {\n  let value;\n\n  if (fill === 'start') {\n    value = startValue;\n  } else if (fill === 'end') {\n    value = scale.options.reverse ? scale.min : scale.max;\n  } else if (isObject(fill)) {\n    // @ts-ignore\n    value = fill.value;\n  } else {\n    value = scale.getBaseValue();\n  }\n  return value;\n}\n\n/**\n * @param {LineElement} line\n */\nfunction parseFillOption(line) {\n  const options = line.options;\n  const fillOption = options.fill;\n  let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n\n  if (fill === undefined) {\n    fill = !!options.backgroundColor;\n  }\n\n  if (fill === false || fill === null) {\n    return false;\n  }\n\n  if (fill === true) {\n    return 'origin';\n  }\n  return fill;\n}\n", "/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {_isBetween} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\n\n/**\n * @param {{ chart: Chart; scale: Scale; index: number; line: LineElement; }} source\n * @return {LineElement}\n */\nexport function _buildStackLine(source) {\n  const {scale, index, line} = source;\n  const points = [];\n  const segments = line.segments;\n  const sourcePoints = line.points;\n  const linesBelow = getLinesBelow(scale, index);\n  linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    for (let j = segment.start; j <= segment.end; j++) {\n      addPointsBelow(points, sourcePoints[j], linesBelow);\n    }\n  }\n  return new LineElement({points, options: {}});\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @return {LineElement[]}\n */\nfunction getLinesBelow(scale, index) {\n  const below = [];\n  const metas = scale.getMatchingVisibleMetas('line');\n\n  for (let i = 0; i < metas.length; i++) {\n    const meta = metas[i];\n    if (meta.index === index) {\n      break;\n    }\n    if (!meta.hidden) {\n      below.unshift(meta.dataset);\n    }\n  }\n  return below;\n}\n\n/**\n * @param {PointElement[]} points\n * @param {PointElement} sourcePoint\n * @param {LineElement[]} linesBelow\n */\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n  const postponed = [];\n  for (let j = 0; j < linesBelow.length; j++) {\n    const line = linesBelow[j];\n    const {first, last, point} = findPoint(line, sourcePoint, 'x');\n\n    if (!point || (first && last)) {\n      continue;\n    }\n    if (first) {\n      // First point of a segment -> need to add another point before this,\n      postponed.unshift(point);\n    } else {\n      points.push(point);\n      if (!last) {\n        // In the middle of a segment, no need to add more points.\n        break;\n      }\n    }\n  }\n  points.push(...postponed);\n}\n\n/**\n * @param {LineElement} line\n * @param {PointElement} sourcePoint\n * @param {string} property\n * @returns {{point?: PointElement, first?: boolean, last?: boolean}}\n */\nfunction findPoint(line, sourcePoint, property) {\n  const point = line.interpolate(sourcePoint, property);\n  if (!point) {\n    return {};\n  }\n\n  const pointValue = point[property];\n  const segments = line.segments;\n  const linePoints = line.points;\n  let first = false;\n  let last = false;\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    const firstValue = linePoints[segment.start][property];\n    const lastValue = linePoints[segment.end][property];\n    if (_isBetween(pointValue, firstValue, lastValue)) {\n      first = pointValue === firstValue;\n      last = pointValue === lastValue;\n      break;\n    }\n  }\n  return {first, last, point};\n}\n", "import {TAU} from '../../helpers/index.js';\n\n// TODO: use elements.ArcElement instead\nexport class simpleArc {\n  constructor(opts) {\n    this.x = opts.x;\n    this.y = opts.y;\n    this.radius = opts.radius;\n  }\n\n  pathSegment(ctx, bounds, opts) {\n    const {x, y, radius} = this;\n    bounds = bounds || {start: 0, end: TAU};\n    ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n    return !opts.bounds;\n  }\n\n  interpolate(point) {\n    const {x, y, radius} = this;\n    const angle = point.angle;\n    return {\n      x: x + Math.cos(angle) * radius,\n      y: y + Math.sin(angle) * radius,\n      angle\n    };\n  }\n}\n", "import {isFinite} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\nimport {_getTargetPixel, _getTargetValue} from './filler.options.js';\nimport {_buildStackLine} from './filler.target.stack.js';\nimport {simpleArc} from './simpleArc.js';\n\n/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nexport function _getTarget(source) {\n  const {chart, fill, line} = source;\n\n  if (isFinite(fill)) {\n    return getLineByIndex(chart, fill);\n  }\n\n  if (fill === 'stack') {\n    return _buildStackLine(source);\n  }\n\n  if (fill === 'shape') {\n    return true;\n  }\n\n  const boundary = computeBoundary(source);\n\n  if (boundary instanceof simpleArc) {\n    return boundary;\n  }\n\n  return _createBoundaryLine(boundary, line);\n}\n\n/**\n * @param {Chart} chart\n * @param {number} index\n */\nfunction getLineByIndex(chart, index) {\n  const meta = chart.getDatasetMeta(index);\n  const visible = meta && chart.isDatasetVisible(index);\n  return visible ? meta.dataset : null;\n}\n\nfunction computeBoundary(source) {\n  const scale = source.scale || {};\n\n  if (scale.getPointPositionForValue) {\n    return computeCircularBoundary(source);\n  }\n  return computeLinearBoundary(source);\n}\n\n\nfunction computeLinearBoundary(source) {\n  const {scale = {}, fill} = source;\n  const pixel = _getTargetPixel(fill, scale);\n\n  if (isFinite(pixel)) {\n    const horizontal = scale.isHorizontal();\n\n    return {\n      x: horizontal ? pixel : null,\n      y: horizontal ? null : pixel\n    };\n  }\n\n  return null;\n}\n\nfunction computeCircularBoundary(source) {\n  const {scale, fill} = source;\n  const options = scale.options;\n  const length = scale.getLabels().length;\n  const start = options.reverse ? scale.max : scale.min;\n  const value = _getTargetValue(fill, scale, start);\n  const target = [];\n\n  if (options.grid.circular) {\n    const center = scale.getPointPositionForValue(0, start);\n    return new simpleArc({\n      x: center.x,\n      y: center.y,\n      radius: scale.getDistanceFromCenterForValue(value)\n    });\n  }\n\n  for (let i = 0; i < length; ++i) {\n    target.push(scale.getPointPositionForValue(i, value));\n  }\n  return target;\n}\n\n", "import {clipArea, unclipArea, getDatasetClipArea} from '../../helpers/index.js';\nimport {_findSegmentEnd, _getBounds, _segments} from './filler.segment.js';\nimport {_getTarget} from './filler.target.js';\n\nexport function _drawfill(ctx, source, area) {\n  const target = _getTarget(source);\n  const {chart, index, line, scale, axis} = source;\n  const lineOpts = line.options;\n  const fillOption = lineOpts.fill;\n  const color = lineOpts.backgroundColor;\n  const {above = color, below = color} = fillOption || {};\n  const meta = chart.getDatasetMeta(index);\n  const clip = getDatasetClipArea(chart, meta);\n  if (target && line.points.length) {\n    clipArea(ctx, area);\n    doFill(ctx, {line, target, above, below, area, scale, axis, clip});\n    unclipArea(ctx);\n  }\n}\n\nfunction doFill(ctx, cfg) {\n  const {line, target, above, below, area, scale, clip} = cfg;\n  const property = line._loop ? 'angle' : cfg.axis;\n\n  ctx.save();\n\n  let fillColor = below;\n  if (below !== above) {\n    if (property === 'x') {\n      clipVertical(ctx, target, area.top);\n      fill(ctx, {line, target, color: above, scale, property, clip});\n      ctx.restore();\n      ctx.save();\n      clipVertical(ctx, target, area.bottom);\n    } else if (property === 'y') {\n      clipHorizontal(ctx, target, area.left);\n      fill(ctx, {line, target, color: below, scale, property, clip});\n      ctx.restore();\n      ctx.save();\n      clipHorizontal(ctx, target, area.right);\n      fillColor = above;\n    }\n  }\n  fill(ctx, {line, target, color: fillColor, scale, property, clip});\n\n  ctx.restore();\n}\n\nfunction clipVertical(ctx, target, clipY) {\n  const {segments, points} = target;\n  let first = true;\n  let lineLoop = false;\n\n  ctx.beginPath();\n  for (const segment of segments) {\n    const {start, end} = segment;\n    const firstPoint = points[start];\n    const lastPoint = points[_findSegmentEnd(start, end, points)];\n    if (first) {\n      ctx.moveTo(firstPoint.x, firstPoint.y);\n      first = false;\n    } else {\n      ctx.lineTo(firstPoint.x, clipY);\n      ctx.lineTo(firstPoint.x, firstPoint.y);\n    }\n    lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n    if (lineLoop) {\n      ctx.closePath();\n    } else {\n      ctx.lineTo(lastPoint.x, clipY);\n    }\n  }\n\n  ctx.lineTo(target.first().x, clipY);\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction clipHorizontal(ctx, target, clipX) {\n  const {segments, points} = target;\n  let first = true;\n  let lineLoop = false;\n\n  ctx.beginPath();\n  for (const segment of segments) {\n    const {start, end} = segment;\n    const firstPoint = points[start];\n    const lastPoint = points[_findSegmentEnd(start, end, points)];\n    if (first) {\n      ctx.moveTo(firstPoint.x, firstPoint.y);\n      first = false;\n    } else {\n      ctx.lineTo(clipX, firstPoint.y);\n      ctx.lineTo(firstPoint.x, firstPoint.y);\n    }\n    lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n    if (lineLoop) {\n      ctx.closePath();\n    } else {\n      ctx.lineTo(clipX, lastPoint.y);\n    }\n  }\n\n  ctx.lineTo(clipX, target.first().y);\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction fill(ctx, cfg) {\n  const {line, target, property, color, scale, clip} = cfg;\n  const segments = _segments(line, target, property);\n\n  for (const {source: src, target: tgt, start, end} of segments) {\n    const {style: {backgroundColor = color} = {}} = src;\n    const notShape = target !== true;\n\n    ctx.save();\n    ctx.fillStyle = backgroundColor;\n\n    clipBounds(ctx, scale, clip, notShape && _getBounds(property, start, end));\n\n    ctx.beginPath();\n\n    const lineLoop = !!line.pathSegment(ctx, src);\n\n    let loop;\n    if (notShape) {\n      if (lineLoop) {\n        ctx.closePath();\n      } else {\n        interpolatedLineTo(ctx, target, end, property);\n      }\n\n      const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n      loop = lineLoop && targetLoop;\n      if (!loop) {\n        interpolatedLineTo(ctx, target, start, property);\n      }\n    }\n\n    ctx.closePath();\n    ctx.fill(loop ? 'evenodd' : 'nonzero');\n\n    ctx.restore();\n  }\n}\n\nfunction clipBounds(ctx, scale, clip, bounds) {\n  const chartArea = scale.chart.chartArea;\n  const {property, start, end} = bounds || {};\n\n  if (property === 'x' || property === 'y') {\n    let left, top, right, bottom;\n\n    if (property === 'x') {\n      left = start;\n      top = chartArea.top;\n      right = end;\n      bottom = chartArea.bottom;\n    } else {\n      left = chartArea.left;\n      top = start;\n      right = chartArea.right;\n      bottom = end;\n    }\n\n    ctx.beginPath();\n\n    if (clip) {\n      left = Math.max(left, clip.left);\n      right = Math.min(right, clip.right);\n      top = Math.max(top, clip.top);\n      bottom = Math.min(bottom, clip.bottom);\n    }\n\n    ctx.rect(left, top, right - left, bottom - top);\n    ctx.clip();\n  }\n}\n\nfunction interpolatedLineTo(ctx, target, point, property) {\n  const interpolatedPoint = target.interpolate(point, property);\n  if (interpolatedPoint) {\n    ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n  }\n}\n\n", "/**\n * Plugin based on discussion from the following Chart.js issues:\n * @see https://github.com/chartjs/Chart.js/issues/2380#issuecomment-279961569\n * @see https://github.com/chartjs/Chart.js/issues/2440#issuecomment-256461897\n */\n\nimport LineElement from '../../elements/element.line.js';\nimport {_drawfill} from './filler.drawing.js';\nimport {_shouldApplyFill} from './filler.helper.js';\nimport {_decodeFill, _resolveTarget} from './filler.options.js';\n\nexport default {\n  id: 'filler',\n\n  afterDatasetsUpdate(chart, _args, options) {\n    const count = (chart.data.datasets || []).length;\n    const sources = [];\n    let meta, i, line, source;\n\n    for (i = 0; i < count; ++i) {\n      meta = chart.getDatasetMeta(i);\n      line = meta.dataset;\n      source = null;\n\n      if (line && line.options && line instanceof LineElement) {\n        source = {\n          visible: chart.isDatasetVisible(i),\n          index: i,\n          fill: _decodeFill(line, i, count),\n          chart,\n          axis: meta.controller.options.indexAxis,\n          scale: meta.vScale,\n          line,\n        };\n      }\n\n      meta.$filler = source;\n      sources.push(source);\n    }\n\n    for (i = 0; i < count; ++i) {\n      source = sources[i];\n      if (!source || source.fill === false) {\n        continue;\n      }\n\n      source.fill = _resolveTarget(sources, i, options.propagate);\n    }\n  },\n\n  beforeDraw(chart, _args, options) {\n    const draw = options.drawTime === 'beforeDraw';\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    const area = chart.chartArea;\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (!source) {\n        continue;\n      }\n\n      source.line.updateControlPoints(area, source.axis);\n      if (draw && source.fill) {\n        _drawfill(chart.ctx, source, area);\n      }\n    }\n  },\n\n  beforeDatasetsDraw(chart, _args, options) {\n    if (options.drawTime !== 'beforeDatasetsDraw') {\n      return;\n    }\n\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n\n      if (_shouldApplyFill(source)) {\n        _drawfill(chart.ctx, source, chart.chartArea);\n      }\n    }\n  },\n\n  beforeDatasetDraw(chart, args, options) {\n    const source = args.meta.$filler;\n\n    if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n      return;\n    }\n\n    _drawfill(chart.ctx, source, chart.chartArea);\n  },\n\n  defaults: {\n    propagate: true,\n    drawTime: 'beforeDatasetDraw'\n  }\n};\n", "import defaults from '../core/core.defaults.js';\nimport Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {addRoundedRectPath, drawPointLegend, renderText} from '../helpers/helpers.canvas.js';\nimport {\n  _isBetween,\n  callback as call,\n  clipArea,\n  getRtlAdapter,\n  overrideTextDirection,\n  restoreTextDirection,\n  toFont,\n  toPadding,\n  unclipArea,\n  valueOrDefault,\n} from '../helpers/index.js';\nimport {_alignStartEnd, _textX, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {toTRBLCorners} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n */\n\nconst getBoxSize = (labelOpts, fontSize) => {\n  let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n\n  if (labelOpts.usePointStyle) {\n    boxHeight = Math.min(boxHeight, fontSize);\n    boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n  }\n\n  return {\n    boxWidth,\n    boxHeight,\n    itemHeight: Math.max(fontSize, boxHeight)\n  };\n};\n\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\n\nexport class Legend extends Element {\n\n  /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n  constructor(config) {\n    super();\n\n    this._added = false;\n\n    // Contains hit boxes for each dataset (in dataset order)\n    this.legendHitBoxes = [];\n\n    /**\n \t\t * @private\n \t\t */\n    this._hoveredItem = null;\n\n    // Are we in doughnut mode which has a different data type\n    this.doughnutMode = false;\n\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this.legendItems = undefined;\n    this.columnSizes = undefined;\n    this.lineWidths = undefined;\n    this.maxHeight = undefined;\n    this.maxWidth = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this._margins = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n\n  update(maxWidth, maxHeight, margins) {\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins;\n\n    this.setDimensions();\n    this.buildLabels();\n    this.fit();\n  }\n\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = this._margins.left;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = this._margins.top;\n      this.bottom = this.height;\n    }\n  }\n\n  buildLabels() {\n    const labelOpts = this.options.labels || {};\n    let legendItems = call(labelOpts.generateLabels, [this.chart], this) || [];\n\n    if (labelOpts.filter) {\n      legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n    }\n\n    if (labelOpts.sort) {\n      legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n    }\n\n    if (this.options.reverse) {\n      legendItems.reverse();\n    }\n\n    this.legendItems = legendItems;\n  }\n\n  fit() {\n    const {options, ctx} = this;\n\n    // The legend may not be displayed for a variety of reasons including\n    // the fact that the defaults got set to `false`.\n    // When the legend is not displayed, there are no guarantees that the options\n    // are correctly formatted so we need to bail out as early as possible.\n    if (!options.display) {\n      this.width = this.height = 0;\n      return;\n    }\n\n    const labelOpts = options.labels;\n    const labelFont = toFont(labelOpts.font);\n    const fontSize = labelFont.size;\n    const titleHeight = this._computeTitleHeight();\n    const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n    let width, height;\n\n    ctx.font = labelFont.string;\n\n    if (this.isHorizontal()) {\n      width = this.maxWidth; // fill all the width\n      height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    } else {\n      height = this.maxHeight; // fill all the height\n      width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n    }\n\n    this.width = Math.min(width, options.maxWidth || this.maxWidth);\n    this.height = Math.min(height, options.maxHeight || this.maxHeight);\n  }\n\n  /**\n\t * @private\n\t */\n  _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n    const {ctx, maxWidth, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    // Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n    const lineWidths = this.lineWidths = [0];\n    const lineHeight = itemHeight + padding;\n    let totalHeight = titleHeight;\n\n    ctx.textAlign = 'left';\n    ctx.textBaseline = 'middle';\n\n    let row = -1;\n    let top = -lineHeight;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n      if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n        totalHeight += lineHeight;\n        lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n        top += lineHeight;\n        row++;\n      }\n\n      hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n\n      lineWidths[lineWidths.length - 1] += itemWidth + padding;\n    });\n\n    return totalHeight;\n  }\n\n  _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n    const {ctx, maxHeight, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    const columnSizes = this.columnSizes = [];\n    const heightLimit = maxHeight - titleHeight;\n\n    let totalWidth = padding;\n    let currentColWidth = 0;\n    let currentColHeight = 0;\n\n    let left = 0;\n    let col = 0;\n\n    this.legendItems.forEach((legendItem, i) => {\n      const {itemWidth, itemHeight} = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n\n      // If too tall, go to new column\n      if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n        totalWidth += currentColWidth + padding;\n        columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n        left += currentColWidth + padding;\n        col++;\n        currentColWidth = currentColHeight = 0;\n      }\n\n      // Store the hitbox width and height here. Final position will be updated in `draw`\n      hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n\n      // Get max width\n      currentColWidth = Math.max(currentColWidth, itemWidth);\n      currentColHeight += itemHeight + padding;\n    });\n\n    totalWidth += currentColWidth;\n    columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n\n    return totalWidth;\n  }\n\n  adjustHitBoxes() {\n    if (!this.options.display) {\n      return;\n    }\n    const titleHeight = this._computeTitleHeight();\n    const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n    const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n    if (this.isHorizontal()) {\n      let row = 0;\n      let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n      for (const hitbox of hitboxes) {\n        if (row !== hitbox.row) {\n          row = hitbox.row;\n          left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n        }\n        hitbox.top += this.top + titleHeight + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n        left += hitbox.width + padding;\n      }\n    } else {\n      let col = 0;\n      let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n      for (const hitbox of hitboxes) {\n        if (hitbox.col !== col) {\n          col = hitbox.col;\n          top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n        }\n        hitbox.top = top;\n        hitbox.left += this.left + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n        top += hitbox.height + padding;\n      }\n    }\n  }\n\n  isHorizontal() {\n    return this.options.position === 'top' || this.options.position === 'bottom';\n  }\n\n  draw() {\n    if (this.options.display) {\n      const ctx = this.ctx;\n      clipArea(ctx, this);\n\n      this._draw();\n\n      unclipArea(ctx);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _draw() {\n    const {options: opts, columnSizes, lineWidths, ctx} = this;\n    const {align, labels: labelOpts} = opts;\n    const defaultColor = defaults.color;\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const labelFont = toFont(labelOpts.font);\n    const {padding} = labelOpts;\n    const fontSize = labelFont.size;\n    const halfFontSize = fontSize / 2;\n    let cursor;\n\n    this.drawTitle();\n\n    // Canvas setup\n    ctx.textAlign = rtlHelper.textAlign('left');\n    ctx.textBaseline = 'middle';\n    ctx.lineWidth = 0.5;\n    ctx.font = labelFont.string;\n\n    const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n    // current position\n    const drawLegendBox = function(x, y, legendItem) {\n      if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n        return;\n      }\n\n      // Set the ctx for the box\n      ctx.save();\n\n      const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n      ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n      ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n      ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n      ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n      ctx.lineWidth = lineWidth;\n      ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n\n      ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n\n      if (labelOpts.usePointStyle) {\n        // Recalculate x and y for drawPoint() because its expecting\n        // x and y to be center of figure (instead of top left)\n        const drawOptions = {\n          radius: boxHeight * Math.SQRT2 / 2,\n          pointStyle: legendItem.pointStyle,\n          rotation: legendItem.rotation,\n          borderWidth: lineWidth\n        };\n        const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n        const centerY = y + halfFontSize;\n\n        // Draw pointStyle as legend symbol\n        drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n      } else {\n        // Draw box as legend symbol\n        // Adjust position when boxHeight < fontSize (want it centered)\n        const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n        const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n        const borderRadius = toTRBLCorners(legendItem.borderRadius);\n\n        ctx.beginPath();\n\n        if (Object.values(borderRadius).some(v => v !== 0)) {\n          addRoundedRectPath(ctx, {\n            x: xBoxLeft,\n            y: yBoxTop,\n            w: boxWidth,\n            h: boxHeight,\n            radius: borderRadius,\n          });\n        } else {\n          ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n        }\n\n        ctx.fill();\n        if (lineWidth !== 0) {\n          ctx.stroke();\n        }\n      }\n\n      ctx.restore();\n    };\n\n    const fillText = function(x, y, legendItem) {\n      renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n        strikethrough: legendItem.hidden,\n        textAlign: rtlHelper.textAlign(legendItem.textAlign)\n      });\n    };\n\n    // Horizontal\n    const isHorizontal = this.isHorizontal();\n    const titleHeight = this._computeTitleHeight();\n    if (isHorizontal) {\n      cursor = {\n        x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n        y: this.top + padding + titleHeight,\n        line: 0\n      };\n    } else {\n      cursor = {\n        x: this.left + padding,\n        y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n        line: 0\n      };\n    }\n\n    overrideTextDirection(this.ctx, opts.textDirection);\n\n    const lineHeight = itemHeight + padding;\n    this.legendItems.forEach((legendItem, i) => {\n      ctx.strokeStyle = legendItem.fontColor; // for strikethrough effect\n      ctx.fillStyle = legendItem.fontColor; // render in correct colour\n\n      const textWidth = ctx.measureText(legendItem.text).width;\n      const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n      const width = boxWidth + halfFontSize + textWidth;\n      let x = cursor.x;\n      let y = cursor.y;\n\n      rtlHelper.setWidth(this.width);\n\n      if (isHorizontal) {\n        if (i > 0 && x + width + padding > this.right) {\n          y = cursor.y += lineHeight;\n          cursor.line++;\n          x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n        }\n      } else if (i > 0 && y + lineHeight > this.bottom) {\n        x = cursor.x = x + columnSizes[cursor.line].width + padding;\n        cursor.line++;\n        y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n      }\n\n      const realX = rtlHelper.x(x);\n\n      drawLegendBox(realX, y, legendItem);\n\n      x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n\n      // Fill the actual label\n      fillText(rtlHelper.x(x), y, legendItem);\n\n      if (isHorizontal) {\n        cursor.x += width + padding;\n      } else if (typeof legendItem.text !== 'string') {\n        const fontLineHeight = labelFont.lineHeight;\n        cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n      } else {\n        cursor.y += lineHeight;\n      }\n    });\n\n    restoreTextDirection(this.ctx, opts.textDirection);\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {\n    const opts = this.options;\n    const titleOpts = opts.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n\n    if (!titleOpts.display) {\n      return;\n    }\n\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const ctx = this.ctx;\n    const position = titleOpts.position;\n    const halfFontSize = titleFont.size / 2;\n    const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n    let y;\n\n    // These defaults are used when the legend is vertical.\n    // When horizontal, they are computed below.\n    let left = this.left;\n    let maxWidth = this.width;\n\n    if (this.isHorizontal()) {\n      // Move left / right so that the title is above the legend lines\n      maxWidth = Math.max(...this.lineWidths);\n      y = this.top + topPaddingPlusHalfFontSize;\n      left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n    } else {\n      // Move down so that the title is above the legend stack in every alignment\n      const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n      y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n    }\n\n    // Now that we know the left edge of the inner legend box, compute the correct\n    // X coordinate from the title alignment\n    const x = _alignStartEnd(position, left, left + maxWidth);\n\n    // Canvas setup\n    ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n    ctx.textBaseline = 'middle';\n    ctx.strokeStyle = titleOpts.color;\n    ctx.fillStyle = titleOpts.color;\n    ctx.font = titleFont.string;\n\n    renderText(ctx, titleOpts.text, x, y, titleFont);\n  }\n\n  /**\n\t * @private\n\t */\n  _computeTitleHeight() {\n    const titleOpts = this.options.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n  }\n\n  /**\n\t * @private\n\t */\n  _getLegendItemAt(x, y) {\n    let i, hitBox, lh;\n\n    if (_isBetween(x, this.left, this.right)\n      && _isBetween(y, this.top, this.bottom)) {\n      // See if we are touching one of the dataset boxes\n      lh = this.legendHitBoxes;\n      for (i = 0; i < lh.length; ++i) {\n        hitBox = lh[i];\n\n        if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n          && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n          // Touching an element\n          return this.legendItems[i];\n        }\n      }\n    }\n\n    return null;\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t */\n  handleEvent(e) {\n    const opts = this.options;\n    if (!isListened(e.type, opts)) {\n      return;\n    }\n\n    // Chart event already has relative position in it\n    const hoveredItem = this._getLegendItemAt(e.x, e.y);\n\n    if (e.type === 'mousemove' || e.type === 'mouseout') {\n      const previous = this._hoveredItem;\n      const sameItem = itemsEqual(previous, hoveredItem);\n      if (previous && !sameItem) {\n        call(opts.onLeave, [e, previous, this], this);\n      }\n\n      this._hoveredItem = hoveredItem;\n\n      if (hoveredItem && !sameItem) {\n        call(opts.onHover, [e, hoveredItem, this], this);\n      }\n    } else if (hoveredItem) {\n      call(opts.onClick, [e, hoveredItem, this], this);\n    }\n  }\n}\n\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n  const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n  const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n  return {itemWidth, itemHeight};\n}\n\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n  let legendItemText = legendItem.text;\n  if (legendItemText && typeof legendItemText !== 'string') {\n    legendItemText = legendItemText.reduce((a, b) => a.length > b.length ? a : b);\n  }\n  return boxWidth + (labelFont.size / 2) + ctx.measureText(legendItemText).width;\n}\n\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n  let itemHeight = _itemHeight;\n  if (typeof legendItem.text !== 'string') {\n    itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n  }\n  return itemHeight;\n}\n\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n  const labelHeight = legendItem.text ? legendItem.text.length : 0;\n  return fontLineHeight * labelHeight;\n}\n\nfunction isListened(type, opts) {\n  if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n    return true;\n  }\n  if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n    return true;\n  }\n  return false;\n}\n\nexport default {\n  id: 'legend',\n\n  /**\n\t * For tests\n\t * @private\n\t */\n  _element: Legend,\n\n  start(chart, _args, options) {\n    const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n    layouts.configure(chart, legend, options);\n    layouts.addBox(chart, legend);\n  },\n\n  stop(chart) {\n    layouts.removeBox(chart, chart.legend);\n    delete chart.legend;\n  },\n\n  // During the beforeUpdate step, the layout configuration needs to run\n  // This ensures that if the legend position changes (via an option update)\n  // the layout system respects the change. See https://github.com/chartjs/Chart.js/issues/7527\n  beforeUpdate(chart, _args, options) {\n    const legend = chart.legend;\n    layouts.configure(chart, legend, options);\n    legend.options = options;\n  },\n\n  // The labels need to be built after datasets are updated to ensure that colors\n  // and other styling are correct. See https://github.com/chartjs/Chart.js/issues/6968\n  afterUpdate(chart) {\n    const legend = chart.legend;\n    legend.buildLabels();\n    legend.adjustHitBoxes();\n  },\n\n\n  afterEvent(chart, args) {\n    if (!args.replay) {\n      chart.legend.handleEvent(args.event);\n    }\n  },\n\n  defaults: {\n    display: true,\n    position: 'top',\n    align: 'center',\n    fullSize: true,\n    reverse: false,\n    weight: 1000,\n\n    // a callback that will handle\n    onClick(e, legendItem, legend) {\n      const index = legendItem.datasetIndex;\n      const ci = legend.chart;\n      if (ci.isDatasetVisible(index)) {\n        ci.hide(index);\n        legendItem.hidden = true;\n      } else {\n        ci.show(index);\n        legendItem.hidden = false;\n      }\n    },\n\n    onHover: null,\n    onLeave: null,\n\n    labels: {\n      color: (ctx) => ctx.chart.options.color,\n      boxWidth: 40,\n      padding: 10,\n      // Generates labels shown in the legend\n      // Valid properties to return:\n      // text : text to display\n      // fillStyle : fill of coloured box\n      // strokeStyle: stroke of coloured box\n      // hidden : if this legend item refers to a hidden item\n      // lineCap : cap style for line\n      // lineDash\n      // lineDashOffset :\n      // lineJoin :\n      // lineWidth :\n      generateLabels(chart) {\n        const datasets = chart.data.datasets;\n        const {labels: {usePointStyle, pointStyle, textAlign, color, useBorderRadius, borderRadius}} = chart.legend.options;\n\n        return chart._getSortedDatasetMetas().map((meta) => {\n          const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n          const borderWidth = toPadding(style.borderWidth);\n\n          return {\n            text: datasets[meta.index].label,\n            fillStyle: style.backgroundColor,\n            fontColor: color,\n            hidden: !meta.visible,\n            lineCap: style.borderCapStyle,\n            lineDash: style.borderDash,\n            lineDashOffset: style.borderDashOffset,\n            lineJoin: style.borderJoinStyle,\n            lineWidth: (borderWidth.width + borderWidth.height) / 4,\n            strokeStyle: style.borderColor,\n            pointStyle: pointStyle || style.pointStyle,\n            rotation: style.rotation,\n            textAlign: textAlign || style.textAlign,\n            borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n\n            // Below is extra data used for toggling the datasets\n            datasetIndex: meta.index\n          };\n        }, this);\n      }\n    },\n\n    title: {\n      color: (ctx) => ctx.chart.options.color,\n      display: false,\n      position: 'center',\n      text: '',\n    }\n  },\n\n  descriptors: {\n    _scriptable: (name) => !name.startsWith('on'),\n    labels: {\n      _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n    }\n  },\n};\n", "import Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {PI, isArray, toPadding, toFont} from '../helpers/index.js';\nimport {_toLeftRightCenter, _alignStartEnd} from '../helpers/helpers.extras.js';\nimport {renderText} from '../helpers/helpers.canvas.js';\n\nexport class Title extends Element {\n  /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n  constructor(config) {\n    super();\n\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this._padding = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n\n  update(maxWidth, maxHeight) {\n    const opts = this.options;\n\n    this.left = 0;\n    this.top = 0;\n\n    if (!opts.display) {\n      this.width = this.height = this.right = this.bottom = 0;\n      return;\n    }\n\n    this.width = this.right = maxWidth;\n    this.height = this.bottom = maxHeight;\n\n    const lineCount = isArray(opts.text) ? opts.text.length : 1;\n    this._padding = toPadding(opts.padding);\n    const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n\n    if (this.isHorizontal()) {\n      this.height = textSize;\n    } else {\n      this.width = textSize;\n    }\n  }\n\n  isHorizontal() {\n    const pos = this.options.position;\n    return pos === 'top' || pos === 'bottom';\n  }\n\n  _drawArgs(offset) {\n    const {top, left, bottom, right, options} = this;\n    const align = options.align;\n    let rotation = 0;\n    let maxWidth, titleX, titleY;\n\n    if (this.isHorizontal()) {\n      titleX = _alignStartEnd(align, left, right);\n      titleY = top + offset;\n      maxWidth = right - left;\n    } else {\n      if (options.position === 'left') {\n        titleX = left + offset;\n        titleY = _alignStartEnd(align, bottom, top);\n        rotation = PI * -0.5;\n      } else {\n        titleX = right - offset;\n        titleY = _alignStartEnd(align, top, bottom);\n        rotation = PI * 0.5;\n      }\n      maxWidth = bottom - top;\n    }\n    return {titleX, titleY, maxWidth, rotation};\n  }\n\n  draw() {\n    const ctx = this.ctx;\n    const opts = this.options;\n\n    if (!opts.display) {\n      return;\n    }\n\n    const fontOpts = toFont(opts.font);\n    const lineHeight = fontOpts.lineHeight;\n    const offset = lineHeight / 2 + this._padding.top;\n    const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n\n    renderText(ctx, opts.text, 0, 0, fontOpts, {\n      color: opts.color,\n      maxWidth,\n      rotation,\n      textAlign: _toLeftRightCenter(opts.align),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n}\n\nfunction createTitle(chart, titleOpts) {\n  const title = new Title({\n    ctx: chart.ctx,\n    options: titleOpts,\n    chart\n  });\n\n  layouts.configure(chart, title, titleOpts);\n  layouts.addBox(chart, title);\n  chart.titleBlock = title;\n}\n\nexport default {\n  id: 'title',\n\n  /**\n\t * For tests\n\t * @private\n\t */\n  _element: Title,\n\n  start(chart, _args, options) {\n    createTitle(chart, options);\n  },\n\n  stop(chart) {\n    const titleBlock = chart.titleBlock;\n    layouts.removeBox(chart, titleBlock);\n    delete chart.titleBlock;\n  },\n\n  beforeUpdate(chart, _args, options) {\n    const title = chart.titleBlock;\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'bold',\n    },\n    fullSize: true,\n    padding: 10,\n    position: 'top',\n    text: '',\n    weight: 2000         // by default greater than legend (1000) to be above\n  },\n\n  defaultRoutes: {\n    color: 'color'\n  },\n\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n", "import {Title} from './plugin.title.js';\nimport layouts from '../core/core.layouts.js';\n\nconst map = new WeakMap();\n\nexport default {\n  id: 'subtitle',\n\n  start(chart, _args, options) {\n    const title = new Title({\n      ctx: chart.ctx,\n      options,\n      chart\n    });\n\n    layouts.configure(chart, title, options);\n    layouts.addBox(chart, title);\n    map.set(chart, title);\n  },\n\n  stop(chart) {\n    layouts.removeBox(chart, map.get(chart));\n    map.delete(chart);\n  },\n\n  beforeUpdate(chart, _args, options) {\n    const title = map.get(chart);\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'normal',\n    },\n    fullSize: true,\n    padding: 0,\n    position: 'top',\n    text: '',\n    weight: 1500         // by default greater than legend (1000) and smaller than title (2000)\n  },\n\n  defaultRoutes: {\n    color: 'color'\n  },\n\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n", "import Animations from '../core/core.animations.js';\nimport Element from '../core/core.element.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {each, noop, isNullOrUndef, isArray, _elementsEqual, isObject} from '../helpers/helpers.core.js';\nimport {toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\nimport {getRtlAdapter, overrideTextDirection, restoreTextDirection} from '../helpers/helpers.rtl.js';\nimport {distanceBetweenPoints, _limitValue} from '../helpers/helpers.math.js';\nimport {createContext, drawPoint} from '../helpers/index.js';\n\n/**\n * @typedef { import('../platform/platform.base.js').Chart } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').ActiveElement } ActiveElement\n * @typedef { import('../core/core.interaction.js').InteractionItem } InteractionItem\n */\n\nconst positioners = {\n  /**\n\t * Average mode places the tooltip at the average position of the elements shown\n\t */\n  average(items) {\n    if (!items.length) {\n      return false;\n    }\n\n    let i, len;\n    let xSet = new Set();\n    let y = 0;\n    let count = 0;\n\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const pos = el.tooltipPosition();\n        xSet.add(pos.x);\n        y += pos.y;\n        ++count;\n      }\n    }\n\n    // No visible items where found, return false so we don't have to divide by 0 which reduces in NaN\n    if (count === 0 || xSet.size === 0) {\n      return false;\n    }\n\n    const xAverage = [...xSet].reduce((a, b) => a + b) / xSet.size;\n\n    return {\n      x: xAverage,\n      y: y / count\n    };\n  },\n\n  /**\n\t * Gets the tooltip position nearest of the item nearest to the event position\n\t */\n  nearest(items, eventPosition) {\n    if (!items.length) {\n      return false;\n    }\n\n    let x = eventPosition.x;\n    let y = eventPosition.y;\n    let minDistance = Number.POSITIVE_INFINITY;\n    let i, len, nearestElement;\n\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const center = el.getCenterPoint();\n        const d = distanceBetweenPoints(eventPosition, center);\n\n        if (d < minDistance) {\n          minDistance = d;\n          nearestElement = el;\n        }\n      }\n    }\n\n    if (nearestElement) {\n      const tp = nearestElement.tooltipPosition();\n      x = tp.x;\n      y = tp.y;\n    }\n\n    return {\n      x,\n      y\n    };\n  }\n};\n\n// Helper to push or concat based on if the 2nd parameter is an array or not\nfunction pushOrConcat(base, toPush) {\n  if (toPush) {\n    if (isArray(toPush)) {\n      // base = base.concat(toPush);\n      Array.prototype.push.apply(base, toPush);\n    } else {\n      base.push(toPush);\n    }\n  }\n\n  return base;\n}\n\n/**\n * Returns array of strings split by newline\n * @param {*} str - The value to split by newline.\n * @returns {string|string[]} value if newline present - Returned from String split() method\n * @function\n */\nfunction splitNewlines(str) {\n  if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n    return str.split('\\n');\n  }\n  return str;\n}\n\n\n/**\n * Private helper to create a tooltip item model\n * @param {Chart} chart\n * @param {ActiveElement} item - {element, index, datasetIndex} to create the tooltip item for\n * @return new tooltip item\n */\nfunction createTooltipItem(chart, item) {\n  const {element, datasetIndex, index} = item;\n  const controller = chart.getDatasetMeta(datasetIndex).controller;\n  const {label, value} = controller.getLabelAndValue(index);\n\n  return {\n    chart,\n    label,\n    parsed: controller.getParsed(index),\n    raw: chart.data.datasets[datasetIndex].data[index],\n    formattedValue: value,\n    dataset: controller.getDataset(),\n    dataIndex: index,\n    datasetIndex,\n    element\n  };\n}\n\n/**\n * Get the size of the tooltip\n */\nfunction getTooltipSize(tooltip, options) {\n  const ctx = tooltip.chart.ctx;\n  const {body, footer, title} = tooltip;\n  const {boxWidth, boxHeight} = options;\n  const bodyFont = toFont(options.bodyFont);\n  const titleFont = toFont(options.titleFont);\n  const footerFont = toFont(options.footerFont);\n  const titleLineCount = title.length;\n  const footerLineCount = footer.length;\n  const bodyLineItemCount = body.length;\n\n  const padding = toPadding(options.padding);\n  let height = padding.height;\n  let width = 0;\n\n  // Count of all lines in the body\n  let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n  combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n\n  if (titleLineCount) {\n    height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n  }\n  if (combinedBodyLength) {\n    // Body lines may include some extra height depending on boxHeight\n    const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n    height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n  }\n  if (footerLineCount) {\n    height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n  }\n\n  // Title width\n  let widthPadding = 0;\n  const maxLineWidth = function(line) {\n    width = Math.max(width, ctx.measureText(line).width + widthPadding);\n  };\n\n  ctx.save();\n\n  ctx.font = titleFont.string;\n  each(tooltip.title, maxLineWidth);\n\n  // Body width\n  ctx.font = bodyFont.string;\n  each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n\n  // Body lines may include some extra width due to the color box\n  widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n  each(body, (bodyItem) => {\n    each(bodyItem.before, maxLineWidth);\n    each(bodyItem.lines, maxLineWidth);\n    each(bodyItem.after, maxLineWidth);\n  });\n\n  // Reset back to 0\n  widthPadding = 0;\n\n  // Footer width\n  ctx.font = footerFont.string;\n  each(tooltip.footer, maxLineWidth);\n\n  ctx.restore();\n\n  // Add padding\n  width += padding.width;\n\n  return {width, height};\n}\n\nfunction determineYAlign(chart, size) {\n  const {y, height} = size;\n\n  if (y < height / 2) {\n    return 'top';\n  } else if (y > (chart.height - height / 2)) {\n    return 'bottom';\n  }\n  return 'center';\n}\n\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n  const {x, width} = size;\n  const caret = options.caretSize + options.caretPadding;\n  if (xAlign === 'left' && x + width + caret > chart.width) {\n    return true;\n  }\n\n  if (xAlign === 'right' && x - width - caret < 0) {\n    return true;\n  }\n}\n\nfunction determineXAlign(chart, options, size, yAlign) {\n  const {x, width} = size;\n  const {width: chartWidth, chartArea: {left, right}} = chart;\n  let xAlign = 'center';\n\n  if (yAlign === 'center') {\n    xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n  } else if (x <= width / 2) {\n    xAlign = 'left';\n  } else if (x >= chartWidth - width / 2) {\n    xAlign = 'right';\n  }\n\n  if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n    xAlign = 'center';\n  }\n\n  return xAlign;\n}\n\n/**\n * Helper to get the alignment of a tooltip given the size\n */\nfunction determineAlignment(chart, options, size) {\n  const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n\n  return {\n    xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n    yAlign\n  };\n}\n\nfunction alignX(size, xAlign) {\n  let {x, width} = size;\n  if (xAlign === 'right') {\n    x -= width;\n  } else if (xAlign === 'center') {\n    x -= (width / 2);\n  }\n  return x;\n}\n\nfunction alignY(size, yAlign, paddingAndSize) {\n  // eslint-disable-next-line prefer-const\n  let {y, height} = size;\n  if (yAlign === 'top') {\n    y += paddingAndSize;\n  } else if (yAlign === 'bottom') {\n    y -= height + paddingAndSize;\n  } else {\n    y -= (height / 2);\n  }\n  return y;\n}\n\n/**\n * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\n */\nfunction getBackgroundPoint(options, size, alignment, chart) {\n  const {caretSize, caretPadding, cornerRadius} = options;\n  const {xAlign, yAlign} = alignment;\n  const paddingAndSize = caretSize + caretPadding;\n  const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n\n  let x = alignX(size, xAlign);\n  const y = alignY(size, yAlign, paddingAndSize);\n\n  if (yAlign === 'center') {\n    if (xAlign === 'left') {\n      x += paddingAndSize;\n    } else if (xAlign === 'right') {\n      x -= paddingAndSize;\n    }\n  } else if (xAlign === 'left') {\n    x -= Math.max(topLeft, bottomLeft) + caretSize;\n  } else if (xAlign === 'right') {\n    x += Math.max(topRight, bottomRight) + caretSize;\n  }\n\n  return {\n    x: _limitValue(x, 0, chart.width - size.width),\n    y: _limitValue(y, 0, chart.height - size.height)\n  };\n}\n\nfunction getAlignedX(tooltip, align, options) {\n  const padding = toPadding(options.padding);\n\n  return align === 'center'\n    ? tooltip.x + tooltip.width / 2\n    : align === 'right'\n      ? tooltip.x + tooltip.width - padding.right\n      : tooltip.x + padding.left;\n}\n\n/**\n * Helper to build before and after body lines\n */\nfunction getBeforeAfterBodyLines(callback) {\n  return pushOrConcat([], splitNewlines(callback));\n}\n\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n  return createContext(parent, {\n    tooltip,\n    tooltipItems,\n    type: 'tooltip'\n  });\n}\n\nfunction overrideCallbacks(callbacks, context) {\n  const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n  return override ? callbacks.override(override) : callbacks;\n}\n\nconst defaultCallbacks = {\n  // Args are: (tooltipItems, data)\n  beforeTitle: noop,\n  title(tooltipItems) {\n    if (tooltipItems.length > 0) {\n      const item = tooltipItems[0];\n      const labels = item.chart.data.labels;\n      const labelCount = labels ? labels.length : 0;\n\n      if (this && this.options && this.options.mode === 'dataset') {\n        return item.dataset.label || '';\n      } else if (item.label) {\n        return item.label;\n      } else if (labelCount > 0 && item.dataIndex < labelCount) {\n        return labels[item.dataIndex];\n      }\n    }\n\n    return '';\n  },\n  afterTitle: noop,\n\n  // Args are: (tooltipItems, data)\n  beforeBody: noop,\n\n  // Args are: (tooltipItem, data)\n  beforeLabel: noop,\n  label(tooltipItem) {\n    if (this && this.options && this.options.mode === 'dataset') {\n      return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n    }\n\n    let label = tooltipItem.dataset.label || '';\n\n    if (label) {\n      label += ': ';\n    }\n    const value = tooltipItem.formattedValue;\n    if (!isNullOrUndef(value)) {\n      label += value;\n    }\n    return label;\n  },\n  labelColor(tooltipItem) {\n    const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n    const options = meta.controller.getStyle(tooltipItem.dataIndex);\n    return {\n      borderColor: options.borderColor,\n      backgroundColor: options.backgroundColor,\n      borderWidth: options.borderWidth,\n      borderDash: options.borderDash,\n      borderDashOffset: options.borderDashOffset,\n      borderRadius: 0,\n    };\n  },\n  labelTextColor() {\n    return this.options.bodyColor;\n  },\n  labelPointStyle(tooltipItem) {\n    const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n    const options = meta.controller.getStyle(tooltipItem.dataIndex);\n    return {\n      pointStyle: options.pointStyle,\n      rotation: options.rotation,\n    };\n  },\n  afterLabel: noop,\n\n  // Args are: (tooltipItems, data)\n  afterBody: noop,\n\n  // Args are: (tooltipItems, data)\n  beforeFooter: noop,\n  footer: noop,\n  afterFooter: noop\n};\n\n/**\n * Invoke callback from object with context and arguments.\n * If callback returns `undefined`, then will be invoked default callback.\n * @param {Record<keyof typeof defaultCallbacks, Function>} callbacks\n * @param {keyof typeof defaultCallbacks} name\n * @param {*} ctx\n * @param {*} arg\n * @returns {any}\n */\nfunction invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n  const result = callbacks[name].call(ctx, arg);\n\n  if (typeof result === 'undefined') {\n    return defaultCallbacks[name].call(ctx, arg);\n  }\n\n  return result;\n}\n\nexport class Tooltip extends Element {\n\n  /**\n   * @namespace Chart.Tooltip.positioners\n   */\n  static positioners = positioners;\n\n  constructor(config) {\n    super();\n\n    this.opacity = 0;\n    this._active = [];\n    this._eventPosition = undefined;\n    this._size = undefined;\n    this._cachedAnimations = undefined;\n    this._tooltipItems = [];\n    this.$animations = undefined;\n    this.$context = undefined;\n    this.chart = config.chart;\n    this.options = config.options;\n    this.dataPoints = undefined;\n    this.title = undefined;\n    this.beforeBody = undefined;\n    this.body = undefined;\n    this.afterBody = undefined;\n    this.footer = undefined;\n    this.xAlign = undefined;\n    this.yAlign = undefined;\n    this.x = undefined;\n    this.y = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this.caretX = undefined;\n    this.caretY = undefined;\n    // TODO: V4, make this private, rename to `_labelStyles`, and combine with `labelPointStyles`\n    // and `labelTextColors` to create a single variable\n    this.labelColors = undefined;\n    this.labelPointStyles = undefined;\n    this.labelTextColors = undefined;\n  }\n\n  initialize(options) {\n    this.options = options;\n    this._cachedAnimations = undefined;\n    this.$context = undefined;\n  }\n\n  /**\n\t * @private\n\t */\n  _resolveAnimations() {\n    const cached = this._cachedAnimations;\n\n    if (cached) {\n      return cached;\n    }\n\n    const chart = this.chart;\n    const options = this.options.setContext(this.getContext());\n    const opts = options.enabled && chart.options.animation && options.animations;\n    const animations = new Animations(this.chart, opts);\n    if (opts._cacheable) {\n      this._cachedAnimations = Object.freeze(animations);\n    }\n\n    return animations;\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext() {\n    return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n  }\n\n  getTitle(context, options) {\n    const {callbacks} = options;\n\n    const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n    const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n    const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n    lines = pushOrConcat(lines, splitNewlines(title));\n    lines = pushOrConcat(lines, splitNewlines(afterTitle));\n\n    return lines;\n  }\n\n  getBeforeBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(\n      invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems)\n    );\n  }\n\n  getBody(tooltipItems, options) {\n    const {callbacks} = options;\n    const bodyItems = [];\n\n    each(tooltipItems, (context) => {\n      const bodyItem = {\n        before: [],\n        lines: [],\n        after: []\n      };\n      const scoped = overrideCallbacks(callbacks, context);\n      pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n      pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n      pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n\n      bodyItems.push(bodyItem);\n    });\n\n    return bodyItems;\n  }\n\n  getAfterBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(\n      invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems)\n    );\n  }\n\n  // Get the footer and beforeFooter and afterFooter lines\n  getFooter(tooltipItems, options) {\n    const {callbacks} = options;\n\n    const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n    const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n    const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n    lines = pushOrConcat(lines, splitNewlines(footer));\n    lines = pushOrConcat(lines, splitNewlines(afterFooter));\n\n    return lines;\n  }\n\n  /**\n\t * @private\n\t */\n  _createItems(options) {\n    const active = this._active;\n    const data = this.chart.data;\n    const labelColors = [];\n    const labelPointStyles = [];\n    const labelTextColors = [];\n    let tooltipItems = [];\n    let i, len;\n\n    for (i = 0, len = active.length; i < len; ++i) {\n      tooltipItems.push(createTooltipItem(this.chart, active[i]));\n    }\n\n    // If the user provided a filter function, use it to modify the tooltip items\n    if (options.filter) {\n      tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n    }\n\n    // If the user provided a sorting function, use it to modify the tooltip items\n    if (options.itemSort) {\n      tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n    }\n\n    // Determine colors for boxes\n    each(tooltipItems, (context) => {\n      const scoped = overrideCallbacks(options.callbacks, context);\n      labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n      labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n      labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n    });\n\n    this.labelColors = labelColors;\n    this.labelPointStyles = labelPointStyles;\n    this.labelTextColors = labelTextColors;\n    this.dataPoints = tooltipItems;\n    return tooltipItems;\n  }\n\n  update(changed, replay) {\n    const options = this.options.setContext(this.getContext());\n    const active = this._active;\n    let properties;\n    let tooltipItems = [];\n\n    if (!active.length) {\n      if (this.opacity !== 0) {\n        properties = {\n          opacity: 0\n        };\n      }\n    } else {\n      const position = positioners[options.position].call(this, active, this._eventPosition);\n      tooltipItems = this._createItems(options);\n\n      this.title = this.getTitle(tooltipItems, options);\n      this.beforeBody = this.getBeforeBody(tooltipItems, options);\n      this.body = this.getBody(tooltipItems, options);\n      this.afterBody = this.getAfterBody(tooltipItems, options);\n      this.footer = this.getFooter(tooltipItems, options);\n\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, size);\n      const alignment = determineAlignment(this.chart, options, positionAndSize);\n      const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n\n      this.xAlign = alignment.xAlign;\n      this.yAlign = alignment.yAlign;\n\n      properties = {\n        opacity: 1,\n        x: backgroundPoint.x,\n        y: backgroundPoint.y,\n        width: size.width,\n        height: size.height,\n        caretX: position.x,\n        caretY: position.y\n      };\n    }\n\n    this._tooltipItems = tooltipItems;\n    this.$context = undefined;\n\n    if (properties) {\n      this._resolveAnimations().update(this, properties);\n    }\n\n    if (changed && options.external) {\n      options.external.call(this, {chart: this.chart, tooltip: this, replay});\n    }\n  }\n\n  drawCaret(tooltipPoint, ctx, size, options) {\n    const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n\n    ctx.lineTo(caretPosition.x1, caretPosition.y1);\n    ctx.lineTo(caretPosition.x2, caretPosition.y2);\n    ctx.lineTo(caretPosition.x3, caretPosition.y3);\n  }\n\n  getCaretPosition(tooltipPoint, size, options) {\n    const {xAlign, yAlign} = this;\n    const {caretSize, cornerRadius} = options;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n    const {x: ptX, y: ptY} = tooltipPoint;\n    const {width, height} = size;\n    let x1, x2, x3, y1, y2, y3;\n\n    if (yAlign === 'center') {\n      y2 = ptY + (height / 2);\n\n      if (xAlign === 'left') {\n        x1 = ptX;\n        x2 = x1 - caretSize;\n\n        // Left draws bottom -> top, this y1 is on the bottom\n        y1 = y2 + caretSize;\n        y3 = y2 - caretSize;\n      } else {\n        x1 = ptX + width;\n        x2 = x1 + caretSize;\n\n        // Right draws top -> bottom, thus y1 is on the top\n        y1 = y2 - caretSize;\n        y3 = y2 + caretSize;\n      }\n\n      x3 = x1;\n    } else {\n      if (xAlign === 'left') {\n        x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n      } else if (xAlign === 'right') {\n        x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n      } else {\n        x2 = this.caretX;\n      }\n\n      if (yAlign === 'top') {\n        y1 = ptY;\n        y2 = y1 - caretSize;\n\n        // Top draws left -> right, thus x1 is on the left\n        x1 = x2 - caretSize;\n        x3 = x2 + caretSize;\n      } else {\n        y1 = ptY + height;\n        y2 = y1 + caretSize;\n\n        // Bottom draws right -> left, thus x1 is on the right\n        x1 = x2 + caretSize;\n        x3 = x2 - caretSize;\n      }\n      y3 = y1;\n    }\n    return {x1, x2, x3, y1, y2, y3};\n  }\n\n  drawTitle(pt, ctx, options) {\n    const title = this.title;\n    const length = title.length;\n    let titleFont, titleSpacing, i;\n\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n      pt.x = getAlignedX(this, options.titleAlign, options);\n\n      ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n      ctx.textBaseline = 'middle';\n\n      titleFont = toFont(options.titleFont);\n      titleSpacing = options.titleSpacing;\n\n      ctx.fillStyle = options.titleColor;\n      ctx.font = titleFont.string;\n\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n        pt.y += titleFont.lineHeight + titleSpacing; // Line Height and spacing\n\n        if (i + 1 === length) {\n          pt.y += options.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n        }\n      }\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _drawColorBox(ctx, pt, i, rtlHelper, options) {\n    const labelColor = this.labelColors[i];\n    const labelPointStyle = this.labelPointStyles[i];\n    const {boxHeight, boxWidth} = options;\n    const bodyFont = toFont(options.bodyFont);\n    const colorX = getAlignedX(this, 'left', options);\n    const rtlColorX = rtlHelper.x(colorX);\n    const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n    const colorY = pt.y + yOffSet;\n\n    if (options.usePointStyle) {\n      const drawOptions = {\n        radius: Math.min(boxWidth, boxHeight) / 2, // fit the circle in the box\n        pointStyle: labelPointStyle.pointStyle,\n        rotation: labelPointStyle.rotation,\n        borderWidth: 1\n      };\n      // Recalculate x and y for drawPoint() because its expecting\n      // x and y to be center of figure (instead of top left)\n      const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n      const centerY = colorY + boxHeight / 2;\n\n      // Fill the point with white so that colours merge nicely if the opacity is < 1\n      ctx.strokeStyle = options.multiKeyBackground;\n      ctx.fillStyle = options.multiKeyBackground;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n\n      // Draw the point\n      ctx.strokeStyle = labelColor.borderColor;\n      ctx.fillStyle = labelColor.backgroundColor;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n    } else {\n      // Border\n      ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : (labelColor.borderWidth || 1); // TODO, v4 remove fallback\n      ctx.strokeStyle = labelColor.borderColor;\n      ctx.setLineDash(labelColor.borderDash || []);\n      ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n\n      // Fill a white rect so that colours merge nicely if the opacity is < 1\n      const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n      const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n      const borderRadius = toTRBLCorners(labelColor.borderRadius);\n\n      if (Object.values(borderRadius).some(v => v !== 0)) {\n        ctx.beginPath();\n        ctx.fillStyle = options.multiKeyBackground;\n        addRoundedRectPath(ctx, {\n          x: outerX,\n          y: colorY,\n          w: boxWidth,\n          h: boxHeight,\n          radius: borderRadius,\n        });\n        ctx.fill();\n        ctx.stroke();\n\n        // Inner square\n        ctx.fillStyle = labelColor.backgroundColor;\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: innerX,\n          y: colorY + 1,\n          w: boxWidth - 2,\n          h: boxHeight - 2,\n          radius: borderRadius,\n        });\n        ctx.fill();\n      } else {\n        // Normal rect\n        ctx.fillStyle = options.multiKeyBackground;\n        ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n        // Inner square\n        ctx.fillStyle = labelColor.backgroundColor;\n        ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n      }\n    }\n\n    // restore fillStyle\n    ctx.fillStyle = this.labelTextColors[i];\n  }\n\n  drawBody(pt, ctx, options) {\n    const {body} = this;\n    const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n    const bodyFont = toFont(options.bodyFont);\n    let bodyLineHeight = bodyFont.lineHeight;\n    let xLinePadding = 0;\n\n    const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n    const fillLineOfText = function(line) {\n      ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n      pt.y += bodyLineHeight + bodySpacing;\n    };\n\n    const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n    let bodyItem, textColor, lines, i, j, ilen, jlen;\n\n    ctx.textAlign = bodyAlign;\n    ctx.textBaseline = 'middle';\n    ctx.font = bodyFont.string;\n\n    pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n\n    // Before body lines\n    ctx.fillStyle = options.bodyColor;\n    each(this.beforeBody, fillLineOfText);\n\n    xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n      ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n      : 0;\n\n    // Draw body lines now\n    for (i = 0, ilen = body.length; i < ilen; ++i) {\n      bodyItem = body[i];\n      textColor = this.labelTextColors[i];\n\n      ctx.fillStyle = textColor;\n      each(bodyItem.before, fillLineOfText);\n\n      lines = bodyItem.lines;\n      // Draw Legend-like boxes if needed\n      if (displayColors && lines.length) {\n        this._drawColorBox(ctx, pt, i, rtlHelper, options);\n        bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n      }\n\n      for (j = 0, jlen = lines.length; j < jlen; ++j) {\n        fillLineOfText(lines[j]);\n        // Reset for any lines that don't include colorbox\n        bodyLineHeight = bodyFont.lineHeight;\n      }\n\n      each(bodyItem.after, fillLineOfText);\n    }\n\n    // Reset back to 0 for after body\n    xLinePadding = 0;\n    bodyLineHeight = bodyFont.lineHeight;\n\n    // After body lines\n    each(this.afterBody, fillLineOfText);\n    pt.y -= bodySpacing; // Remove last body spacing\n  }\n\n  drawFooter(pt, ctx, options) {\n    const footer = this.footer;\n    const length = footer.length;\n    let footerFont, i;\n\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n      pt.x = getAlignedX(this, options.footerAlign, options);\n      pt.y += options.footerMarginTop;\n\n      ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n      ctx.textBaseline = 'middle';\n\n      footerFont = toFont(options.footerFont);\n\n      ctx.fillStyle = options.footerColor;\n      ctx.font = footerFont.string;\n\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n        pt.y += footerFont.lineHeight + options.footerSpacing;\n      }\n    }\n  }\n\n  drawBackground(pt, ctx, tooltipSize, options) {\n    const {xAlign, yAlign} = this;\n    const {x, y} = pt;\n    const {width, height} = tooltipSize;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n\n    ctx.beginPath();\n    ctx.moveTo(x + topLeft, y);\n    if (yAlign === 'top') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width - topRight, y);\n    ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n    if (yAlign === 'center' && xAlign === 'right') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width, y + height - bottomRight);\n    ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n    if (yAlign === 'bottom') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + bottomLeft, y + height);\n    ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n    if (yAlign === 'center' && xAlign === 'left') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x, y + topLeft);\n    ctx.quadraticCurveTo(x, y, x + topLeft, y);\n    ctx.closePath();\n\n    ctx.fill();\n\n    if (options.borderWidth > 0) {\n      ctx.stroke();\n    }\n  }\n\n  /**\n\t * Update x/y animation targets when _active elements are animating too\n\t * @private\n\t */\n  _updateAnimationTarget(options) {\n    const chart = this.chart;\n    const anims = this.$animations;\n    const animX = anims && anims.x;\n    const animY = anims && anims.y;\n    if (animX || animY) {\n      const position = positioners[options.position].call(this, this._active, this._eventPosition);\n      if (!position) {\n        return;\n      }\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, this._size);\n      const alignment = determineAlignment(chart, options, positionAndSize);\n      const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n      if (animX._to !== point.x || animY._to !== point.y) {\n        this.xAlign = alignment.xAlign;\n        this.yAlign = alignment.yAlign;\n        this.width = size.width;\n        this.height = size.height;\n        this.caretX = position.x;\n        this.caretY = position.y;\n        this._resolveAnimations().update(this, point);\n      }\n    }\n  }\n\n  /**\n   * Determine if the tooltip will draw anything\n   * @returns {boolean} True if the tooltip will render\n   */\n  _willRender() {\n    return !!this.opacity;\n  }\n\n  draw(ctx) {\n    const options = this.options.setContext(this.getContext());\n    let opacity = this.opacity;\n\n    if (!opacity) {\n      return;\n    }\n\n    this._updateAnimationTarget(options);\n\n    const tooltipSize = {\n      width: this.width,\n      height: this.height\n    };\n    const pt = {\n      x: this.x,\n      y: this.y\n    };\n\n    // IE11/Edge does not like very small opacities, so snap to 0\n    opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n\n    const padding = toPadding(options.padding);\n\n    // Truthy/falsey value for empty tooltip\n    const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n\n    if (options.enabled && hasTooltipContent) {\n      ctx.save();\n      ctx.globalAlpha = opacity;\n\n      // Draw Background\n      this.drawBackground(pt, ctx, tooltipSize, options);\n\n      overrideTextDirection(ctx, options.textDirection);\n\n      pt.y += padding.top;\n\n      // Titles\n      this.drawTitle(pt, ctx, options);\n\n      // Body\n      this.drawBody(pt, ctx, options);\n\n      // Footer\n      this.drawFooter(pt, ctx, options);\n\n      restoreTextDirection(ctx, options.textDirection);\n\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * Get active elements in the tooltip\n\t * @returns {Array} Array of elements that are active in the tooltip\n\t */\n  getActiveElements() {\n    return this._active || [];\n  }\n\n  /**\n\t * Set active elements in the tooltip\n\t * @param {array} activeElements Array of active datasetIndex/index pairs.\n\t * @param {object} eventPosition Synthetic event position used in positioning\n\t */\n  setActiveElements(activeElements, eventPosition) {\n    const lastActive = this._active;\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.chart.getDatasetMeta(datasetIndex);\n\n      if (!meta) {\n        throw new Error('Cannot find a dataset at index ' + datasetIndex);\n      }\n\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(lastActive, active);\n    const positionChanged = this._positionChanged(active, eventPosition);\n\n    if (changed || positionChanged) {\n      this._active = active;\n      this._eventPosition = eventPosition;\n      this._ignoreReplayEvents = true;\n      this.update(true);\n    }\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {boolean} true if the tooltip changed\n\t */\n  handleEvent(e, replay, inChartArea = true) {\n    if (replay && this._ignoreReplayEvents) {\n      return false;\n    }\n    this._ignoreReplayEvents = false;\n\n    const options = this.options;\n    const lastActive = this._active || [];\n    const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n\n    // When there are multiple items shown, but the tooltip position is nearest mode\n    // an update may need to be made because our position may have changed even though\n    // the items are the same as before.\n    const positionChanged = this._positionChanged(active, e);\n\n    // Remember Last Actives\n    const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n\n    // Only handle target event on tooltip change\n    if (changed) {\n      this._active = active;\n\n      if (options.enabled || options.external) {\n        this._eventPosition = {\n          x: e.x,\n          y: e.y\n        };\n\n        this.update(true, replay);\n      }\n    }\n\n    return changed;\n  }\n\n  /**\n\t * Helper for determining the active elements for event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {InteractionItem[]} lastActive - Previously active elements\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {InteractionItem[]} - Active elements\n\t * @private\n\t */\n  _getActiveElements(e, lastActive, replay, inChartArea) {\n    const options = this.options;\n\n    if (e.type === 'mouseout') {\n      return [];\n    }\n\n    if (!inChartArea) {\n      // Let user control the active elements outside chartArea. Eg. using Legend.\n      // But make sure that active elements are still valid.\n      return lastActive.filter(i =>\n        this.chart.data.datasets[i.datasetIndex] &&\n        this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined\n      );\n    }\n\n    // Find Active Elements for tooltips\n    const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n\n    if (options.reverse) {\n      active.reverse();\n    }\n\n    return active;\n  }\n\n  /**\n\t * Determine if the active elements + event combination changes the\n\t * tooltip position\n\t * @param {array} active - Active elements\n\t * @param {ChartEvent} e - Event that triggered the position change\n\t * @returns {boolean} True if the position has changed\n\t */\n  _positionChanged(active, e) {\n    const {caretX, caretY, options} = this;\n    const position = positioners[options.position].call(this, active, e);\n    return position !== false && (caretX !== position.x || caretY !== position.y);\n  }\n}\n\nexport default {\n  id: 'tooltip',\n  _element: Tooltip,\n  positioners,\n\n  afterInit(chart, _args, options) {\n    if (options) {\n      chart.tooltip = new Tooltip({chart, options});\n    }\n  },\n\n  beforeUpdate(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n\n  reset(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n\n  afterDraw(chart) {\n    const tooltip = chart.tooltip;\n\n    if (tooltip && tooltip._willRender()) {\n      const args = {\n        tooltip\n      };\n\n      if (chart.notifyPlugins('beforeTooltipDraw', {...args, cancelable: true}) === false) {\n        return;\n      }\n\n      tooltip.draw(chart.ctx);\n\n      chart.notifyPlugins('afterTooltipDraw', args);\n    }\n  },\n\n  afterEvent(chart, args) {\n    if (chart.tooltip) {\n      // If the event is replayed from `update`, we should evaluate with the final positions.\n      const useFinalPosition = args.replay;\n      if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n        // notify chart about the change, so it will render\n        args.changed = true;\n      }\n    }\n  },\n\n  defaults: {\n    enabled: true,\n    external: null,\n    position: 'average',\n    backgroundColor: 'rgba(0,0,0,0.8)',\n    titleColor: '#fff',\n    titleFont: {\n      weight: 'bold',\n    },\n    titleSpacing: 2,\n    titleMarginBottom: 6,\n    titleAlign: 'left',\n    bodyColor: '#fff',\n    bodySpacing: 2,\n    bodyFont: {\n    },\n    bodyAlign: 'left',\n    footerColor: '#fff',\n    footerSpacing: 2,\n    footerMarginTop: 6,\n    footerFont: {\n      weight: 'bold',\n    },\n    footerAlign: 'left',\n    padding: 6,\n    caretPadding: 2,\n    caretSize: 5,\n    cornerRadius: 6,\n    boxHeight: (ctx, opts) => opts.bodyFont.size,\n    boxWidth: (ctx, opts) => opts.bodyFont.size,\n    multiKeyBackground: '#fff',\n    displayColors: true,\n    boxPadding: 0,\n    borderColor: 'rgba(0,0,0,0)',\n    borderWidth: 0,\n    animation: {\n      duration: 400,\n      easing: 'easeOutQuart',\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n      },\n      opacity: {\n        easing: 'linear',\n        duration: 200\n      }\n    },\n    callbacks: defaultCallbacks\n  },\n\n  defaultRoutes: {\n    bodyFont: 'font',\n    footerFont: 'font',\n    titleFont: 'font'\n  },\n\n  descriptors: {\n    _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n    _indexable: false,\n    callbacks: {\n      _scriptable: false,\n      _indexable: false,\n    },\n    animation: {\n      _fallback: false\n    },\n    animations: {\n      _fallback: 'animation'\n    }\n  },\n\n  // Resolve additionally from `interaction` options and defaults.\n  additionalOptionScopes: ['interaction']\n};\n", "import Scale from '../core/core.scale.js';\nimport {isNullOrUndef, valueOrDefault, _limitValue} from '../helpers/index.js';\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n  if (typeof raw === 'string') {\n    index = labels.push(raw) - 1;\n    addedLabels.unshift({index, label: raw});\n  } else if (isNaN(raw)) {\n    index = null;\n  }\n  return index;\n};\n\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n  const first = labels.indexOf(raw);\n  if (first === -1) {\n    return addIfString(labels, raw, index, addedLabels);\n  }\n  const last = labels.lastIndexOf(raw);\n  return first !== last ? index : first;\n}\n\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\n\nfunction _getLabelForValue(value) {\n  const labels = this.getLabels();\n\n  if (value >= 0 && value < labels.length) {\n    return labels[value];\n  }\n  return value;\n}\n\nexport default class CategoryScale extends Scale {\n\n  static id = 'category';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: _getLabelForValue\n    }\n  };\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this._startValue = undefined;\n    this._valueRange = 0;\n    this._addedLabels = [];\n  }\n\n  init(scaleOptions) {\n    const added = this._addedLabels;\n    if (added.length) {\n      const labels = this.getLabels();\n      for (const {index, label} of added) {\n        if (labels[index] === label) {\n          labels.splice(index, 1);\n        }\n      }\n      this._addedLabels = [];\n    }\n    super.init(scaleOptions);\n  }\n\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    const labels = this.getLabels();\n    index = isFinite(index) && labels[index] === raw ? index\n      : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n    return validIndex(index, labels.length - 1);\n  }\n\n  determineDataLimits() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this.getMinMax(true);\n\n    if (this.options.bounds === 'ticks') {\n      if (!minDefined) {\n        min = 0;\n      }\n      if (!maxDefined) {\n        max = this.getLabels().length - 1;\n      }\n    }\n\n    this.min = min;\n    this.max = max;\n  }\n\n  buildTicks() {\n    const min = this.min;\n    const max = this.max;\n    const offset = this.options.offset;\n    const ticks = [];\n    let labels = this.getLabels();\n\n    // If we are viewing some subset of labels, slice the original array\n    labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n\n    this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n    this._startValue = this.min - (offset ? 0.5 : 0);\n\n    for (let value = min; value <= max; value++) {\n      ticks.push({value});\n    }\n    return ticks;\n  }\n\n  getLabelForValue(value) {\n    return _getLabelForValue.call(this, value);\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    super.configure();\n\n    if (!this.isHorizontal()) {\n      // For backward compatibility, vertical category scale reverse is inverted.\n      this._reversePixels = !this._reversePixels;\n    }\n  }\n\n  // Used to get data value locations. Value can either be an index or a numerical value\n  getPixelForValue(value) {\n    if (typeof value !== 'number') {\n      value = this.parse(value);\n    }\n\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n\n  // Must override base implementation because it calls getPixelForValue\n  // and category scale can have duplicate values\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n\n  getValueForPixel(pixel) {\n    return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n  }\n\n  getBasePixel() {\n    return this.bottom;\n  }\n}\n", "import {isNullOrUndef} from '../helpers/helpers.core.js';\nimport {almostEquals, almostWhole, niceNum, _decimalPlaces, _setMinAndMaxByKey, sign, toRadians} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\n\n/**\n * Generate a set of linear ticks for an axis\n * 1. If generationOptions.min, generationOptions.max, and generationOptions.step are defined:\n *    if (max - min) / step is an integer, ticks are generated as [min, min + step, ..., max]\n *    Note that the generationOptions.maxCount setting is respected in this scenario\n *\n * 2. If generationOptions.min, generationOptions.max, and generationOptions.count is defined\n *    spacing = (max - min) / count\n *    Ticks are generated as [min, min + spacing, ..., max]\n *\n * 3. If generationOptions.count is defined\n *    spacing = (niceMax - niceMin) / count\n *\n * 4. Compute optimal spacing of ticks using niceNum algorithm\n *\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, dataRange) {\n  const ticks = [];\n  // To get a \"nice\" value for the tick spacing, we will use the appropriately named\n  // \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n  // for details.\n\n  const MIN_SPACING = 1e-14;\n  const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n  const unit = step || 1;\n  const maxSpaces = maxTicks - 1;\n  const {min: rmin, max: rmax} = dataRange;\n  const minDefined = !isNullOrUndef(min);\n  const maxDefined = !isNullOrUndef(max);\n  const countDefined = !isNullOrUndef(count);\n  const minSpacing = (rmax - rmin) / (maxDigits + 1);\n  let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n  let factor, niceMin, niceMax, numSpaces;\n\n  // Beyond MIN_SPACING floating point numbers being to lose precision\n  // such that we can't do the math necessary to generate ticks\n  if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n    return [{value: rmin}, {value: rmax}];\n  }\n\n  numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n  if (numSpaces > maxSpaces) {\n    // If the calculated num of spaces exceeds maxNumSpaces, recalculate it\n    spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n  }\n\n  if (!isNullOrUndef(precision)) {\n    // If the user specified a precision, round to that number of decimal places\n    factor = Math.pow(10, precision);\n    spacing = Math.ceil(spacing * factor) / factor;\n  }\n\n  if (bounds === 'ticks') {\n    niceMin = Math.floor(rmin / spacing) * spacing;\n    niceMax = Math.ceil(rmax / spacing) * spacing;\n  } else {\n    niceMin = rmin;\n    niceMax = rmax;\n  }\n\n  if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n    // Case 1: If min, max and stepSize are set and they make an evenly spaced scale use it.\n    // spacing = step;\n    // numSpaces = (max - min) / spacing;\n    // Note that we round here to handle the case where almostWhole translated an FP error\n    numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n    spacing = (max - min) / numSpaces;\n    niceMin = min;\n    niceMax = max;\n  } else if (countDefined) {\n    // Cases 2 & 3, we have a count specified. Handle optional user defined edges to the range.\n    // Sometimes these are no-ops, but it makes the code a lot clearer\n    // and when a user defined range is specified, we want the correct ticks\n    niceMin = minDefined ? min : niceMin;\n    niceMax = maxDefined ? max : niceMax;\n    numSpaces = count - 1;\n    spacing = (niceMax - niceMin) / numSpaces;\n  } else {\n    // Case 4\n    numSpaces = (niceMax - niceMin) / spacing;\n\n    // If very close to our rounded value, use it.\n    if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n      numSpaces = Math.round(numSpaces);\n    } else {\n      numSpaces = Math.ceil(numSpaces);\n    }\n  }\n\n  // The spacing will have changed in cases 1, 2, and 3 so the factor cannot be computed\n  // until this point\n  const decimalPlaces = Math.max(\n    _decimalPlaces(spacing),\n    _decimalPlaces(niceMin)\n  );\n  factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n  niceMin = Math.round(niceMin * factor) / factor;\n  niceMax = Math.round(niceMax * factor) / factor;\n\n  let j = 0;\n  if (minDefined) {\n    if (includeBounds && niceMin !== min) {\n      ticks.push({value: min});\n\n      if (niceMin < min) {\n        j++; // Skip niceMin\n      }\n      // If the next nice tick is close to min, skip it\n      if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n        j++;\n      }\n    } else if (niceMin < min) {\n      j++;\n    }\n  }\n\n  for (; j < numSpaces; ++j) {\n    const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n    if (maxDefined && tickValue > max) {\n      break;\n    }\n    ticks.push({value: tickValue});\n  }\n\n  if (maxDefined && includeBounds && niceMax !== max) {\n    // If the previous tick is too close to max, replace it with max, else add max\n    if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n      ticks[ticks.length - 1].value = max;\n    } else {\n      ticks.push({value: max});\n    }\n  } else if (!maxDefined || niceMax === max) {\n    ticks.push({value: niceMax});\n  }\n\n  return ticks;\n}\n\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n  const rad = toRadians(minRotation);\n  const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n  const length = 0.75 * minSpacing * ('' + value).length;\n  return Math.min(minSpacing / ratio, length);\n}\n\nexport default class LinearScaleBase extends Scale {\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.start = undefined;\n    /** @type {number} */\n    this.end = undefined;\n    /** @type {number} */\n    this._startValue = undefined;\n    /** @type {number} */\n    this._endValue = undefined;\n    this._valueRange = 0;\n  }\n\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n      return null;\n    }\n\n    return +raw;\n  }\n\n  handleTickRangeOptions() {\n    const {beginAtZero} = this.options;\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this;\n\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n\n    if (beginAtZero) {\n      const minSign = sign(min);\n      const maxSign = sign(max);\n\n      if (minSign < 0 && maxSign < 0) {\n        setMax(0);\n      } else if (minSign > 0 && maxSign > 0) {\n        setMin(0);\n      }\n    }\n\n    if (min === max) {\n      let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n\n      setMax(max + offset);\n\n      if (!beginAtZero) {\n        setMin(min - offset);\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n\n  getTickLimit() {\n    const tickOpts = this.options.ticks;\n    // eslint-disable-next-line prefer-const\n    let {maxTicksLimit, stepSize} = tickOpts;\n    let maxTicks;\n\n    if (stepSize) {\n      maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n      if (maxTicks > 1000) {\n        console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n        maxTicks = 1000;\n      }\n    } else {\n      maxTicks = this.computeTickLimit();\n      maxTicksLimit = maxTicksLimit || 11;\n    }\n\n    if (maxTicksLimit) {\n      maxTicks = Math.min(maxTicksLimit, maxTicks);\n    }\n\n    return maxTicks;\n  }\n\n  /**\n\t * @protected\n\t */\n  computeTickLimit() {\n    return Number.POSITIVE_INFINITY;\n  }\n\n  buildTicks() {\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n\n    // Figure out what the max number of ticks we can support it is based on the size of\n    // the axis area. For now, we say that the minimum tick spacing in pixels must be 40\n    // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n    // the graph. Make sure we always have at least 2 ticks\n    let maxTicks = this.getTickLimit();\n    maxTicks = Math.max(2, maxTicks);\n\n    const numericGeneratorOptions = {\n      maxTicks,\n      bounds: opts.bounds,\n      min: opts.min,\n      max: opts.max,\n      precision: tickOpts.precision,\n      step: tickOpts.stepSize,\n      count: tickOpts.count,\n      maxDigits: this._maxDigits(),\n      horizontal: this.isHorizontal(),\n      minRotation: tickOpts.minRotation || 0,\n      includeBounds: tickOpts.includeBounds !== false\n    };\n    const dataRange = this._range || this;\n    const ticks = generateTicks(numericGeneratorOptions, dataRange);\n\n    // At this point, we need to update our max and min given the tick values,\n    // since we probably have expanded the range of the scale\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n\n    if (opts.reverse) {\n      ticks.reverse();\n\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n\n    return ticks;\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    const ticks = this.ticks;\n    let start = this.min;\n    let end = this.max;\n\n    super.configure();\n\n    if (this.options.offset && ticks.length) {\n      const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n      start -= offset;\n      end += offset;\n    }\n    this._startValue = start;\n    this._endValue = end;\n    this._valueRange = end - start;\n  }\n\n  getLabelForValue(value) {\n    return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n}\n", "import {isFinite} from '../helpers/helpers.core.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {toRadians} from '../helpers/index.js';\n\nexport default class LinearScale extends LinearScaleBase {\n\n  static id = 'linear';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: Ticks.formatters.numeric\n    }\n  };\n\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n\n    this.min = isFinite(min) ? min : 0;\n    this.max = isFinite(max) ? max : 1;\n\n    // Common base implementation to handle min, max, beginAtZero\n    this.handleTickRangeOptions();\n  }\n\n  /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n \t */\n  computeTickLimit() {\n    const horizontal = this.isHorizontal();\n    const length = horizontal ? this.width : this.height;\n    const minRotation = toRadians(this.options.ticks.minRotation);\n    const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n    const tickFont = this._resolveTickFontOptions(0);\n    return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n  }\n\n  // Utils\n  getPixelForValue(value) {\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n\n  getValueForPixel(pixel) {\n    return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n  }\n}\n", "import {finiteOrDefault, isFinite} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {_setMinAndMaxByKey, log10} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\n\nconst log10Floor = v => Math.floor(log10(v));\nconst changeExponent = (v, m) => Math.pow(10, log10Floor(v) + m);\n\nfunction isMajor(tickVal) {\n  const remain = tickVal / (Math.pow(10, log10Floor(tickVal)));\n  return remain === 1;\n}\n\nfunction steps(min, max, rangeExp) {\n  const rangeStep = Math.pow(10, rangeExp);\n  const start = Math.floor(min / rangeStep);\n  const end = Math.ceil(max / rangeStep);\n  return end - start;\n}\n\nfunction startExp(min, max) {\n  const range = max - min;\n  let rangeExp = log10Floor(range);\n  while (steps(min, max, rangeExp) > 10) {\n    rangeExp++;\n  }\n  while (steps(min, max, rangeExp) < 10) {\n    rangeExp--;\n  }\n  return Math.min(rangeExp, log10Floor(min));\n}\n\n\n/**\n * Generate a set of logarithmic ticks\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, {min, max}) {\n  min = finiteOrDefault(generationOptions.min, min);\n  const ticks = [];\n  const minExp = log10Floor(min);\n  let exp = startExp(min, max);\n  let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n  const stepSize = Math.pow(10, exp);\n  const base = minExp > exp ? Math.pow(10, minExp) : 0;\n  const start = Math.round((min - base) * precision) / precision;\n  const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n  let significand = Math.floor((start - offset) / Math.pow(10, exp));\n  let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n  while (value < max) {\n    ticks.push({value, major: isMajor(value), significand});\n    if (significand >= 10) {\n      significand = significand < 15 ? 15 : 20;\n    } else {\n      significand++;\n    }\n    if (significand >= 20) {\n      exp++;\n      significand = 2;\n      precision = exp >= 0 ? 1 : precision;\n    }\n    value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n  }\n  const lastTick = finiteOrDefault(generationOptions.max, value);\n  ticks.push({value: lastTick, major: isMajor(lastTick), significand});\n\n  return ticks;\n}\n\nexport default class LogarithmicScale extends Scale {\n\n  static id = 'logarithmic';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: Ticks.formatters.logarithmic,\n      major: {\n        enabled: true\n      }\n    }\n  };\n\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.start = undefined;\n    /** @type {number} */\n    this.end = undefined;\n    /** @type {number} */\n    this._startValue = undefined;\n    this._valueRange = 0;\n  }\n\n  parse(raw, index) {\n    const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n    if (value === 0) {\n      this._zero = true;\n      return undefined;\n    }\n    return isFinite(value) && value > 0 ? value : null;\n  }\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n\n    this.min = isFinite(min) ? Math.max(0, min) : null;\n    this.max = isFinite(max) ? Math.max(0, max) : null;\n\n    if (this.options.beginAtZero) {\n      this._zero = true;\n    }\n\n    // if data has `0` in it or `beginAtZero` is true, min (non zero) value is at bottom\n    // of scale, and it does not equal suggestedMin, lower the min bound by one exp.\n    if (this._zero && this.min !== this._suggestedMin && !isFinite(this._userMin)) {\n      this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n    }\n\n    this.handleTickRangeOptions();\n  }\n\n  handleTickRangeOptions() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let min = this.min;\n    let max = this.max;\n\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n\n    if (min === max) {\n      if (min <= 0) { // includes null\n        setMin(1);\n        setMax(10);\n      } else {\n        setMin(changeExponent(min, -1));\n        setMax(changeExponent(max, +1));\n      }\n    }\n    if (min <= 0) {\n      setMin(changeExponent(max, -1));\n    }\n    if (max <= 0) {\n\n      setMax(changeExponent(min, +1));\n    }\n\n    this.min = min;\n    this.max = max;\n  }\n\n  buildTicks() {\n    const opts = this.options;\n\n    const generationOptions = {\n      min: this._userMin,\n      max: this._userMax\n    };\n    const ticks = generateTicks(generationOptions, this);\n\n    // At this point, we need to update our max and min given the tick values,\n    // since we probably have expanded the range of the scale\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n\n    if (opts.reverse) {\n      ticks.reverse();\n\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n\n    return ticks;\n  }\n\n  /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    return value === undefined\n      ? '0'\n      : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    const start = this.min;\n\n    super.configure();\n\n    this._startValue = log10(start);\n    this._valueRange = log10(this.max) - log10(start);\n  }\n\n  getPixelForValue(value) {\n    if (value === undefined || value === 0) {\n      value = this.min;\n    }\n    if (value === null || isNaN(value)) {\n      return NaN;\n    }\n    return this.getPixelForDecimal(value === this.min\n      ? 0\n      : (log10(value) - this._startValue) / this._valueRange);\n  }\n\n  getValueForPixel(pixel) {\n    const decimal = this.getDecimalForPixel(pixel);\n    return Math.pow(10, this._startValue + decimal * this._valueRange);\n  }\n}\n", "import defaults from '../core/core.defaults.js';\nimport {_longestText, addRoundedRectPath, renderText, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport {HALF_PI, TAU, toDegrees, toRadians, _normalizeAngle, PI} from '../helpers/helpers.math.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {valueOrDefault, isArray, isFinite, callback as callCallback, isNullOrUndef} from '../helpers/helpers.core.js';\nimport {createContext, toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\n\nfunction getTickBackdropHeight(opts) {\n  const tickOpts = opts.ticks;\n\n  if (tickOpts.display && opts.display) {\n    const padding = toPadding(tickOpts.backdropPadding);\n    return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n  }\n  return 0;\n}\n\nfunction measureLabelSize(ctx, font, label) {\n  label = isArray(label) ? label : [label];\n  return {\n    w: _longestText(ctx, font.string, label),\n    h: label.length * font.lineHeight\n  };\n}\n\nfunction determineLimits(angle, pos, size, min, max) {\n  if (angle === min || angle === max) {\n    return {\n      start: pos - (size / 2),\n      end: pos + (size / 2)\n    };\n  } else if (angle < min || angle > max) {\n    return {\n      start: pos - size,\n      end: pos\n    };\n  }\n\n  return {\n    start: pos,\n    end: pos + size\n  };\n}\n\n/**\n * Helper function to fit a radial linear scale with point labels\n */\nfunction fitWithPointLabels(scale) {\n\n  // Right, this is really confusing and there is a lot of maths going on here\n  // The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n  //\n  // Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n  //\n  // Solution:\n  //\n  // We assume the radius of the polygon is half the size of the canvas at first\n  // at each index we check if the text overlaps.\n  //\n  // Where it does, we store that angle and that index.\n  //\n  // After finding the largest index and angle we calculate how much we need to remove\n  // from the shape radius to move the point inwards by that x.\n  //\n  // We average the left and right distances to get the maximum shape radius that can fit in the box\n  // along with labels.\n  //\n  // Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n  // on each side, removing that from the size, halving it and adding the left x protrusion width.\n  //\n  // This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n  // and position it in the most space efficient manner\n  //\n  // https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\n  // Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n  // Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n  const orig = {\n    l: scale.left + scale._padding.left,\n    r: scale.right - scale._padding.right,\n    t: scale.top + scale._padding.top,\n    b: scale.bottom - scale._padding.bottom\n  };\n  const limits = Object.assign({}, orig);\n  const labelSizes = [];\n  const padding = [];\n  const valueCount = scale._pointLabels.length;\n  const pointLabelOpts = scale.options.pointLabels;\n  const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n\n  for (let i = 0; i < valueCount; i++) {\n    const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n    padding[i] = opts.padding;\n    const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n    const plFont = toFont(opts.font);\n    const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n    labelSizes[i] = textSize;\n\n    const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n    const angle = Math.round(toDegrees(angleRadians));\n    const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n    const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n    updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n  }\n\n  scale.setCenterPoint(\n    orig.l - limits.l,\n    limits.r - orig.r,\n    orig.t - limits.t,\n    limits.b - orig.b\n  );\n\n  // Now that text size is determined, compute the full positions\n  scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\n\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n  const sin = Math.abs(Math.sin(angle));\n  const cos = Math.abs(Math.cos(angle));\n  let x = 0;\n  let y = 0;\n  if (hLimits.start < orig.l) {\n    x = (orig.l - hLimits.start) / sin;\n    limits.l = Math.min(limits.l, orig.l - x);\n  } else if (hLimits.end > orig.r) {\n    x = (hLimits.end - orig.r) / sin;\n    limits.r = Math.max(limits.r, orig.r + x);\n  }\n  if (vLimits.start < orig.t) {\n    y = (orig.t - vLimits.start) / cos;\n    limits.t = Math.min(limits.t, orig.t - y);\n  } else if (vLimits.end > orig.b) {\n    y = (vLimits.end - orig.b) / cos;\n    limits.b = Math.max(limits.b, orig.b + y);\n  }\n}\n\nfunction createPointLabelItem(scale, index, itemOpts) {\n  const outerDistance = scale.drawingArea;\n  const {extra, additionalAngle, padding, size} = itemOpts;\n  const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n  const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n  const y = yForAngle(pointLabelPosition.y, size.h, angle);\n  const textAlign = getTextAlignForAngle(angle);\n  const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n  return {\n    // if to draw or overlapped\n    visible: true,\n\n    // Text position\n    x: pointLabelPosition.x,\n    y,\n\n    // Text rendering data\n    textAlign,\n\n    // Bounding box\n    left,\n    top: y,\n    right: left + size.w,\n    bottom: y + size.h\n  };\n}\n\nfunction isNotOverlapped(item, area) {\n  if (!area) {\n    return true;\n  }\n  const {left, top, right, bottom} = item;\n  const apexesInArea = _isPointInArea({x: left, y: top}, area) || _isPointInArea({x: left, y: bottom}, area) ||\n    _isPointInArea({x: right, y: top}, area) || _isPointInArea({x: right, y: bottom}, area);\n  return !apexesInArea;\n}\n\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n  const items = [];\n  const valueCount = scale._pointLabels.length;\n  const opts = scale.options;\n  const {centerPointLabels, display} = opts.pointLabels;\n  const itemOpts = {\n    extra: getTickBackdropHeight(opts) / 2,\n    additionalAngle: centerPointLabels ? PI / valueCount : 0\n  };\n  let area;\n\n  for (let i = 0; i < valueCount; i++) {\n    itemOpts.padding = padding[i];\n    itemOpts.size = labelSizes[i];\n\n    const item = createPointLabelItem(scale, i, itemOpts);\n    items.push(item);\n    if (display === 'auto') {\n      item.visible = isNotOverlapped(item, area);\n      if (item.visible) {\n        area = item;\n      }\n    }\n  }\n  return items;\n}\n\nfunction getTextAlignForAngle(angle) {\n  if (angle === 0 || angle === 180) {\n    return 'center';\n  } else if (angle < 180) {\n    return 'left';\n  }\n\n  return 'right';\n}\n\nfunction leftForTextAlign(x, w, align) {\n  if (align === 'right') {\n    x -= w;\n  } else if (align === 'center') {\n    x -= (w / 2);\n  }\n  return x;\n}\n\nfunction yForAngle(y, h, angle) {\n  if (angle === 90 || angle === 270) {\n    y -= (h / 2);\n  } else if (angle > 270 || angle < 90) {\n    y -= h;\n  }\n  return y;\n}\n\nfunction drawPointLabelBox(ctx, opts, item) {\n  const {left, top, right, bottom} = item;\n  const {backdropColor} = opts;\n\n  if (!isNullOrUndef(backdropColor)) {\n    const borderRadius = toTRBLCorners(opts.borderRadius);\n    const padding = toPadding(opts.backdropPadding);\n    ctx.fillStyle = backdropColor;\n\n    const backdropLeft = left - padding.left;\n    const backdropTop = top - padding.top;\n    const backdropWidth = right - left + padding.width;\n    const backdropHeight = bottom - top + padding.height;\n\n    if (Object.values(borderRadius).some(v => v !== 0)) {\n      ctx.beginPath();\n      addRoundedRectPath(ctx, {\n        x: backdropLeft,\n        y: backdropTop,\n        w: backdropWidth,\n        h: backdropHeight,\n        radius: borderRadius,\n      });\n      ctx.fill();\n    } else {\n      ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n    }\n  }\n}\n\nfunction drawPointLabels(scale, labelCount) {\n  const {ctx, options: {pointLabels}} = scale;\n\n  for (let i = labelCount - 1; i >= 0; i--) {\n    const item = scale._pointLabelItems[i];\n    if (!item.visible) {\n      // overlapping\n      continue;\n    }\n    const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n    drawPointLabelBox(ctx, optsAtIndex, item);\n    const plFont = toFont(optsAtIndex.font);\n    const {x, y, textAlign} = item;\n\n    renderText(\n      ctx,\n      scale._pointLabels[i],\n      x,\n      y + (plFont.lineHeight / 2),\n      plFont,\n      {\n        color: optsAtIndex.color,\n        textAlign: textAlign,\n        textBaseline: 'middle'\n      }\n    );\n  }\n}\n\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n  const {ctx} = scale;\n  if (circular) {\n    // Draw circular arcs between the points\n    ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n  } else {\n    // Draw straight lines connecting each index\n    let pointPosition = scale.getPointPosition(0, radius);\n    ctx.moveTo(pointPosition.x, pointPosition.y);\n\n    for (let i = 1; i < labelCount; i++) {\n      pointPosition = scale.getPointPosition(i, radius);\n      ctx.lineTo(pointPosition.x, pointPosition.y);\n    }\n  }\n}\n\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n  const ctx = scale.ctx;\n  const circular = gridLineOpts.circular;\n\n  const {color, lineWidth} = gridLineOpts;\n\n  if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n    return;\n  }\n\n  ctx.save();\n  ctx.strokeStyle = color;\n  ctx.lineWidth = lineWidth;\n  ctx.setLineDash(borderOpts.dash || []);\n  ctx.lineDashOffset = borderOpts.dashOffset;\n\n  ctx.beginPath();\n  pathRadiusLine(scale, radius, circular, labelCount);\n  ctx.closePath();\n  ctx.stroke();\n  ctx.restore();\n}\n\nfunction createPointLabelContext(parent, index, label) {\n  return createContext(parent, {\n    label,\n    index,\n    type: 'pointLabel'\n  });\n}\n\nexport default class RadialLinearScale extends LinearScaleBase {\n\n  static id = 'radialLinear';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    display: true,\n\n    // Boolean - Whether to animate scaling the chart from the centre\n    animate: true,\n    position: 'chartArea',\n\n    angleLines: {\n      display: true,\n      lineWidth: 1,\n      borderDash: [],\n      borderDashOffset: 0.0\n    },\n\n    grid: {\n      circular: false\n    },\n\n    startAngle: 0,\n\n    // label settings\n    ticks: {\n      // Boolean - Show a backdrop to the scale label\n      showLabelBackdrop: true,\n\n      callback: Ticks.formatters.numeric\n    },\n\n    pointLabels: {\n      backdropColor: undefined,\n\n      // Number - The backdrop padding above & below the label in pixels\n      backdropPadding: 2,\n\n      // Boolean - if true, show point labels\n      display: true,\n\n      // Number - Point label font size in pixels\n      font: {\n        size: 10\n      },\n\n      // Function - Used to convert point labels\n      callback(label) {\n        return label;\n      },\n\n      // Number - Additionl padding between scale and pointLabel\n      padding: 5,\n\n      // Boolean - if true, center point labels to slices in polar chart\n      centerPointLabels: false\n    }\n  };\n\n  static defaultRoutes = {\n    'angleLines.color': 'borderColor',\n    'pointLabels.color': 'color',\n    'ticks.color': 'color'\n  };\n\n  static descriptors = {\n    angleLines: {\n      _fallback: 'grid'\n    }\n  };\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.xCenter = undefined;\n    /** @type {number} */\n    this.yCenter = undefined;\n    /** @type {number} */\n    this.drawingArea = undefined;\n    /** @type {string[]} */\n    this._pointLabels = [];\n    this._pointLabelItems = [];\n  }\n\n  setDimensions() {\n    // Set the unconstrained dimension before label rotation\n    const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n    const w = this.width = this.maxWidth - padding.width;\n    const h = this.height = this.maxHeight - padding.height;\n    this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n    this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n    this.drawingArea = Math.floor(Math.min(w, h) / 2);\n  }\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(false);\n\n    this.min = isFinite(min) && !isNaN(min) ? min : 0;\n    this.max = isFinite(max) && !isNaN(max) ? max : 0;\n\n    // Common base implementation to handle min, max, beginAtZero\n    this.handleTickRangeOptions();\n  }\n\n  /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n\t */\n  computeTickLimit() {\n    return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n  }\n\n  generateTickLabels(ticks) {\n    LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n\n    // Point labels\n    this._pointLabels = this.getLabels()\n      .map((value, index) => {\n        const label = callCallback(this.options.pointLabels.callback, [value, index], this);\n        return label || label === 0 ? label : '';\n      })\n      .filter((v, i) => this.chart.getDataVisibility(i));\n  }\n\n  fit() {\n    const opts = this.options;\n\n    if (opts.display && opts.pointLabels.display) {\n      fitWithPointLabels(this);\n    } else {\n      this.setCenterPoint(0, 0, 0, 0);\n    }\n  }\n\n  setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n    this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n    this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n    this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n  }\n\n  getIndexAngle(index) {\n    const angleMultiplier = TAU / (this._pointLabels.length || 1);\n    const startAngle = this.options.startAngle || 0;\n\n    return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n  }\n\n  getDistanceFromCenterForValue(value) {\n    if (isNullOrUndef(value)) {\n      return NaN;\n    }\n\n    // Take into account half font size + the yPadding of the top value\n    const scalingFactor = this.drawingArea / (this.max - this.min);\n    if (this.options.reverse) {\n      return (this.max - value) * scalingFactor;\n    }\n    return (value - this.min) * scalingFactor;\n  }\n\n  getValueForDistanceFromCenter(distance) {\n    if (isNullOrUndef(distance)) {\n      return NaN;\n    }\n\n    const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n    return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n  }\n\n  getPointLabelContext(index) {\n    const pointLabels = this._pointLabels || [];\n\n    if (index >= 0 && index < pointLabels.length) {\n      const pointLabel = pointLabels[index];\n      return createPointLabelContext(this.getContext(), index, pointLabel);\n    }\n  }\n\n  getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n    const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n    return {\n      x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n      y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n      angle\n    };\n  }\n\n  getPointPositionForValue(index, value) {\n    return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n  }\n\n  getBasePosition(index) {\n    return this.getPointPositionForValue(index || 0, this.getBaseValue());\n  }\n\n  getPointLabelPosition(index) {\n    const {left, top, right, bottom} = this._pointLabelItems[index];\n    return {\n      left,\n      top,\n      right,\n      bottom,\n    };\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBackground() {\n    const {backgroundColor, grid: {circular}} = this.options;\n    if (backgroundColor) {\n      const ctx = this.ctx;\n      ctx.save();\n      ctx.beginPath();\n      pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n      ctx.closePath();\n      ctx.fillStyle = backgroundColor;\n      ctx.fill();\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawGrid() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const {angleLines, grid, border} = opts;\n    const labelCount = this._pointLabels.length;\n\n    let i, offset, position;\n\n    if (opts.pointLabels.display) {\n      drawPointLabels(this, labelCount);\n    }\n\n    if (grid.display) {\n      this.ticks.forEach((tick, index) => {\n        if (index !== 0 || (index === 0 && this.min < 0)) {\n          offset = this.getDistanceFromCenterForValue(tick.value);\n          const context = this.getContext(index);\n          const optsAtIndex = grid.setContext(context);\n          const optsAtIndexBorder = border.setContext(context);\n\n          drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n        }\n      });\n    }\n\n    if (angleLines.display) {\n      ctx.save();\n\n      for (i = labelCount - 1; i >= 0; i--) {\n        const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n        const {color, lineWidth} = optsAtIndex;\n\n        if (!lineWidth || !color) {\n          continue;\n        }\n\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = color;\n\n        ctx.setLineDash(optsAtIndex.borderDash);\n        ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n\n        offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n        position = this.getPointPosition(i, offset);\n        ctx.beginPath();\n        ctx.moveTo(this.xCenter, this.yCenter);\n        ctx.lineTo(position.x, position.y);\n        ctx.stroke();\n      }\n\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBorder() {}\n\n  /**\n\t * @protected\n\t */\n  drawLabels() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n\n    if (!tickOpts.display) {\n      return;\n    }\n\n    const startAngle = this.getIndexAngle(0);\n    let offset, width;\n\n    ctx.save();\n    ctx.translate(this.xCenter, this.yCenter);\n    ctx.rotate(startAngle);\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'middle';\n\n    this.ticks.forEach((tick, index) => {\n      if ((index === 0 && this.min >= 0) && !opts.reverse) {\n        return;\n      }\n\n      const optsAtIndex = tickOpts.setContext(this.getContext(index));\n      const tickFont = toFont(optsAtIndex.font);\n      offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n\n      if (optsAtIndex.showLabelBackdrop) {\n        ctx.font = tickFont.string;\n        width = ctx.measureText(tick.label).width;\n        ctx.fillStyle = optsAtIndex.backdropColor;\n\n        const padding = toPadding(optsAtIndex.backdropPadding);\n        ctx.fillRect(\n          -width / 2 - padding.left,\n          -offset - tickFont.size / 2 - padding.top,\n          width + padding.width,\n          tickFont.size + padding.height\n        );\n      }\n\n      renderText(ctx, tick.label, 0, -offset, tickFont, {\n        color: optsAtIndex.color,\n        strokeColor: optsAtIndex.textStrokeColor,\n        strokeWidth: optsAtIndex.textStrokeWidth,\n      });\n    });\n\n    ctx.restore();\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {}\n}\n", "import adapters from '../core/core.adapters.js';\nimport {callback as call, isFinite, isNullOrUndef, mergeIf, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toRadians, isNumber, _limitValue} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {_arrayUnique, _filterBetween, _lookup} from '../helpers/helpers.collection.js';\n\n/**\n * @typedef { import('../core/core.adapters.js').TimeUnit } Unit\n * @typedef {{common: boolean, size: number, steps?: number}} Interval\n * @typedef { import('../core/core.adapters.js').DateAdapter } DateAdapter\n */\n\n/**\n * @type {Object<Unit, Interval>}\n */\nconst INTERVALS = {\n  millisecond: {common: true, size: 1, steps: 1000},\n  second: {common: true, size: 1000, steps: 60},\n  minute: {common: true, size: 60000, steps: 60},\n  hour: {common: true, size: 3600000, steps: 24},\n  day: {common: true, size: 86400000, steps: 30},\n  week: {common: false, size: 604800000, steps: 4},\n  month: {common: true, size: 2.628e9, steps: 12},\n  quarter: {common: false, size: 7.884e9, steps: 4},\n  year: {common: true, size: 3.154e10}\n};\n\n/**\n * @type {Unit[]}\n */\nconst UNITS = /** @type Unit[] */ /* #__PURE__ */ (Object.keys(INTERVALS));\n\n/**\n * @param {number} a\n * @param {number} b\n */\nfunction sorter(a, b) {\n  return a - b;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {*} input\n * @return {number}\n */\nfunction parse(scale, input) {\n  if (isNullOrUndef(input)) {\n    return null;\n  }\n\n  const adapter = scale._adapter;\n  const {parser, round, isoWeekday} = scale._parseOpts;\n  let value = input;\n\n  if (typeof parser === 'function') {\n    value = parser(value);\n  }\n\n  // Only parse if it's not a timestamp already\n  if (!isFinite(value)) {\n    value = typeof parser === 'string'\n      ? adapter.parse(value, parser)\n      : adapter.parse(value);\n  }\n\n  if (value === null) {\n    return null;\n  }\n\n  if (round) {\n    value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n      ? adapter.startOf(value, 'isoWeek', isoWeekday)\n      : adapter.startOf(value, round);\n  }\n\n  return +value;\n}\n\n/**\n * Figures out what unit results in an appropriate number of auto-generated ticks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @param {number} capacity\n * @return {object}\n */\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n  const ilen = UNITS.length;\n\n  for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n    const interval = INTERVALS[UNITS[i]];\n    const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n\n    if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n      return UNITS[i];\n    }\n  }\n\n  return UNITS[ilen - 1];\n}\n\n/**\n * Figures out what unit to format a set of ticks with\n * @param {TimeScale} scale\n * @param {number} numTicks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @return {Unit}\n */\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n  for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n    const unit = UNITS[i];\n    if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n      return unit;\n    }\n  }\n\n  return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n\n/**\n * @param {Unit} unit\n * @return {object}\n */\nfunction determineMajorUnit(unit) {\n  for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n    if (INTERVALS[UNITS[i]].common) {\n      return UNITS[i];\n    }\n  }\n}\n\n/**\n * @param {object} ticks\n * @param {number} time\n * @param {number[]} [timestamps] - if defined, snap to these timestamps\n */\nfunction addTick(ticks, time, timestamps) {\n  if (!timestamps) {\n    ticks[time] = true;\n  } else if (timestamps.length) {\n    const {lo, hi} = _lookup(timestamps, time);\n    const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n    ticks[timestamp] = true;\n  }\n}\n\n/**\n * @param {TimeScale} scale\n * @param {object[]} ticks\n * @param {object} map\n * @param {Unit} majorUnit\n * @return {object[]}\n */\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n  const adapter = scale._adapter;\n  const first = +adapter.startOf(ticks[0].value, majorUnit);\n  const last = ticks[ticks.length - 1].value;\n  let major, index;\n\n  for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n    index = map[major];\n    if (index >= 0) {\n      ticks[index].major = true;\n    }\n  }\n  return ticks;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {number[]} values\n * @param {Unit|undefined} [majorUnit]\n * @return {object[]}\n */\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n  const ticks = [];\n  /** @type {Object<number,object>} */\n  const map = {};\n  const ilen = values.length;\n  let i, value;\n\n  for (i = 0; i < ilen; ++i) {\n    value = values[i];\n    map[value] = i;\n\n    ticks.push({\n      value,\n      major: false\n    });\n  }\n\n  // We set the major ticks separately from the above loop because calling startOf for every tick\n  // is expensive when there is a large number of ticks\n  return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\n\nexport default class TimeScale extends Scale {\n\n  static id = 'time';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    /**\n     * Scale boundary strategy (bypassed by min/max time options)\n     * - `data`: make sure data are fully visible, ticks outside are removed\n     * - `ticks`: make sure ticks are fully visible, data outside are truncated\n     * @see https://github.com/chartjs/Chart.js/pull/4556\n     * @since 2.7.0\n     */\n    bounds: 'data',\n\n    adapters: {},\n    time: {\n      parser: false, // false == a pattern string from or a custom callback that converts its argument to a timestamp\n      unit: false, // false == automatic or override with week, month, year, etc.\n      round: false, // none, or override with week, month, year, etc.\n      isoWeekday: false, // override week start day\n      minUnit: 'millisecond',\n      displayFormats: {}\n    },\n    ticks: {\n      /**\n       * Ticks generation input values:\n       * - 'auto': generates \"optimal\" ticks based on scale size and time options.\n       * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\n       * - 'labels': generates ticks from user given `data.labels` values ONLY.\n       * @see https://github.com/chartjs/Chart.js/pull/4507\n       * @since 2.7.0\n       */\n      source: 'auto',\n\n      callback: false,\n\n      major: {\n        enabled: false\n      }\n    }\n  };\n\n  /**\n\t * @param {object} props\n\t */\n  constructor(props) {\n    super(props);\n\n    /** @type {{data: number[], labels: number[], all: number[]}} */\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n\n    /** @type {Unit} */\n    this._unit = 'day';\n    /** @type {Unit=} */\n    this._majorUnit = undefined;\n    this._offsets = {};\n    this._normalized = false;\n    this._parseOpts = undefined;\n  }\n\n  init(scaleOpts, opts = {}) {\n    const time = scaleOpts.time || (scaleOpts.time = {});\n    /** @type {DateAdapter} */\n    const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n\n    adapter.init(opts);\n\n    // Backward compatibility: before introducing adapter, `displayFormats` was\n    // supposed to contain *all* unit/string pairs but this can't be resolved\n    // when loading the scale (adapters are loaded afterward), so let's populate\n    // missing formats on update\n    mergeIf(time.displayFormats, adapter.formats());\n\n    this._parseOpts = {\n      parser: time.parser,\n      round: time.round,\n      isoWeekday: time.isoWeekday\n    };\n\n    super.init(scaleOpts);\n\n    this._normalized = opts.normalized;\n  }\n\n  /**\n\t * @param {*} raw\n\t * @param {number?} [index]\n\t * @return {number}\n\t */\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    if (raw === undefined) {\n      return null;\n    }\n    return parse(this, raw);\n  }\n\n  beforeLayout() {\n    super.beforeLayout();\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n  }\n\n  determineDataLimits() {\n    const options = this.options;\n    const adapter = this._adapter;\n    const unit = options.time.unit || 'day';\n    // eslint-disable-next-line prefer-const\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n\n    /**\n\t\t * @param {object} bounds\n\t\t */\n    function _applyBounds(bounds) {\n      if (!minDefined && !isNaN(bounds.min)) {\n        min = Math.min(min, bounds.min);\n      }\n      if (!maxDefined && !isNaN(bounds.max)) {\n        max = Math.max(max, bounds.max);\n      }\n    }\n\n    // If we have user provided `min` and `max` labels / data bounds can be ignored\n    if (!minDefined || !maxDefined) {\n      // Labels are always considered, when user did not force bounds\n      _applyBounds(this._getLabelBounds());\n\n      // If `bounds` is `'ticks'` and `ticks.source` is `'labels'`,\n      // data bounds are ignored (and don't need to be determined)\n      if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n        _applyBounds(this.getMinMax(false));\n      }\n    }\n\n    min = isFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n    max = isFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n\n    // Make sure that max is strictly higher than min (required by the timeseries lookup table)\n    this.min = Math.min(min, max - 1);\n    this.max = Math.max(min + 1, max);\n  }\n\n  /**\n\t * @private\n\t */\n  _getLabelBounds() {\n    const arr = this.getLabelTimestamps();\n    let min = Number.POSITIVE_INFINITY;\n    let max = Number.NEGATIVE_INFINITY;\n\n    if (arr.length) {\n      min = arr[0];\n      max = arr[arr.length - 1];\n    }\n    return {min, max};\n  }\n\n  /**\n\t * @return {object[]}\n\t */\n  buildTicks() {\n    const options = this.options;\n    const timeOpts = options.time;\n    const tickOpts = options.ticks;\n    const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n\n    if (options.bounds === 'ticks' && timestamps.length) {\n      this.min = this._userMin || timestamps[0];\n      this.max = this._userMax || timestamps[timestamps.length - 1];\n    }\n\n    const min = this.min;\n    const max = this.max;\n\n    const ticks = _filterBetween(timestamps, min, max);\n\n    // PRIVATE\n    // determineUnitForFormatting relies on the number of ticks so we don't use it when\n    // autoSkip is enabled because we don't yet know what the final number of ticks will be\n    this._unit = timeOpts.unit || (tickOpts.autoSkip\n      ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n      : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n    this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n      : determineMajorUnit(this._unit);\n    this.initOffsets(timestamps);\n\n    if (options.reverse) {\n      ticks.reverse();\n    }\n\n    return ticksFromTimestamps(this, ticks, this._majorUnit);\n  }\n\n  afterAutoSkip() {\n    // Offsets for bar charts need to be handled with the auto skipped\n    // ticks. Once ticks have been skipped, we re-compute the offsets.\n    if (this.options.offsetAfterAutoskip) {\n      this.initOffsets(this.ticks.map(tick => +tick.value));\n    }\n  }\n\n  /**\n\t * Returns the start and end offsets from edges in the form of {start, end}\n\t * where each value is a relative width to the scale and ranges between 0 and 1.\n\t * They add extra margins on the both sides by scaling down the original scale.\n\t * Offsets are added when the `offset` option is true.\n\t * @param {number[]} timestamps\n\t * @protected\n\t */\n  initOffsets(timestamps = []) {\n    let start = 0;\n    let end = 0;\n    let first, last;\n\n    if (this.options.offset && timestamps.length) {\n      first = this.getDecimalForValue(timestamps[0]);\n      if (timestamps.length === 1) {\n        start = 1 - first;\n      } else {\n        start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n      }\n      last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n      if (timestamps.length === 1) {\n        end = last;\n      } else {\n        end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n      }\n    }\n    const limit = timestamps.length < 3 ? 0.5 : 0.25;\n    start = _limitValue(start, 0, limit);\n    end = _limitValue(end, 0, limit);\n\n    this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n  }\n\n  /**\n\t * Generates a maximum of `capacity` timestamps between min and max, rounded to the\n\t * `minor` unit using the given scale time `options`.\n\t * Important: this method can return ticks outside the min and max range, it's the\n\t * responsibility of the calling code to clamp values if needed.\n\t * @protected\n\t */\n  _generate() {\n    const adapter = this._adapter;\n    const min = this.min;\n    const max = this.max;\n    const options = this.options;\n    const timeOpts = options.time;\n    // @ts-ignore\n    const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n    const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n    const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n    const hasWeekday = isNumber(weekday) || weekday === true;\n    const ticks = {};\n    let first = min;\n    let time, count;\n\n    // For 'week' unit, handle the first day of week option\n    if (hasWeekday) {\n      first = +adapter.startOf(first, 'isoWeek', weekday);\n    }\n\n    // Align first ticks on unit\n    first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n\n    // Prevent browser from freezing in case user options request millions of milliseconds\n    if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n      throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n    }\n\n    const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n    for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n      addTick(ticks, time, timestamps);\n    }\n\n    if (time === max || options.bounds === 'ticks' || count === 1) {\n      addTick(ticks, time, timestamps);\n    }\n\n    // @ts-ignore\n    return Object.keys(ticks).sort(sorter).map(x => +x);\n  }\n\n  /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    const adapter = this._adapter;\n    const timeOpts = this.options.time;\n\n    if (timeOpts.tooltipFormat) {\n      return adapter.format(value, timeOpts.tooltipFormat);\n    }\n    return adapter.format(value, timeOpts.displayFormats.datetime);\n  }\n\n  /**\n\t * @param {number} value\n\t * @param {string|undefined} format\n\t * @return {string}\n\t */\n  format(value, format) {\n    const options = this.options;\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const fmt = format || formats[unit];\n    return this._adapter.format(value, fmt);\n  }\n\n  /**\n\t * Function to format an individual tick mark\n\t * @param {number} time\n\t * @param {number} index\n\t * @param {object[]} ticks\n\t * @param {string|undefined} [format]\n\t * @return {string}\n\t * @private\n\t */\n  _tickFormatFunction(time, index, ticks, format) {\n    const options = this.options;\n    const formatter = options.ticks.callback;\n\n    if (formatter) {\n      return call(formatter, [time, index, ticks], this);\n    }\n\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const majorUnit = this._majorUnit;\n    const minorFormat = unit && formats[unit];\n    const majorFormat = majorUnit && formats[majorUnit];\n    const tick = ticks[index];\n    const major = majorUnit && majorFormat && tick && tick.major;\n\n    return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n  }\n\n  /**\n\t * @param {object[]} ticks\n\t */\n  generateTickLabels(ticks) {\n    let i, ilen, tick;\n\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      tick.label = this._tickFormatFunction(tick.value, i, ticks);\n    }\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getDecimalForValue(value) {\n    return value === null ? NaN : (value - this.min) / (this.max - this.min);\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getPixelForValue(value) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForValue(value);\n    return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return this.min + pos * (this.max - this.min);\n  }\n\n  /**\n\t * @param {string} label\n\t * @return {{w:number, h:number}}\n\t * @private\n\t */\n  _getLabelSize(label) {\n    const ticksOpts = this.options.ticks;\n    const tickLabelWidth = this.ctx.measureText(label).width;\n    const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n    const cosRotation = Math.cos(angle);\n    const sinRotation = Math.sin(angle);\n    const tickFontSize = this._resolveTickFontOptions(0).size;\n\n    return {\n      w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n      h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n    };\n  }\n\n  /**\n\t * @param {number} exampleTime\n\t * @return {number}\n\t * @private\n\t */\n  _getLabelCapacity(exampleTime) {\n    const timeOpts = this.options.time;\n    const displayFormats = timeOpts.displayFormats;\n\n    // pick the longest format (milliseconds) for guesstimation\n    const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n    const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n    const size = this._getLabelSize(exampleLabel);\n    // subtract 1 - if offset then there's one less label than tick\n    // if not offset then one half label padding is added to each end leaving room for one less label\n    const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n    return capacity > 0 ? capacity : 1;\n  }\n\n  /**\n\t * @protected\n\t */\n  getDataTimestamps() {\n    let timestamps = this._cache.data || [];\n    let i, ilen;\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const metas = this.getMatchingVisibleMetas();\n\n    if (this._normalized && metas.length) {\n      return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n    }\n\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n    }\n\n    return (this._cache.data = this.normalize(timestamps));\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelTimestamps() {\n    const timestamps = this._cache.labels || [];\n    let i, ilen;\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const labels = this.getLabels();\n    for (i = 0, ilen = labels.length; i < ilen; ++i) {\n      timestamps.push(parse(this, labels[i]));\n    }\n\n    return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n  }\n\n  /**\n\t * @param {number[]} values\n\t * @protected\n\t */\n  normalize(values) {\n    // It seems to be somewhat faster to do sorting first\n    return _arrayUnique(values.sort(sorter));\n  }\n}\n", "import TimeScale from './scale.time.js';\nimport {_lookupByKey} from '../helpers/helpers.collection.js';\n\n/**\n * Linearly interpolates the given source `val` using the table. If value is out of bounds, values\n * at edges are used for the interpolation.\n * @param {object} table\n * @param {number} val\n * @param {boolean} [reverse] lookup time based on position instead of vice versa\n * @return {object}\n */\nfunction interpolate(table, val, reverse) {\n  let lo = 0;\n  let hi = table.length - 1;\n  let prevSource, nextSource, prevTarget, nextTarget;\n  if (reverse) {\n    if (val >= table[lo].pos && val <= table[hi].pos) {\n      ({lo, hi} = _lookupByKey(table, 'pos', val));\n    }\n    ({pos: prevSource, time: prevTarget} = table[lo]);\n    ({pos: nextSource, time: nextTarget} = table[hi]);\n  } else {\n    if (val >= table[lo].time && val <= table[hi].time) {\n      ({lo, hi} = _lookupByKey(table, 'time', val));\n    }\n    ({time: prevSource, pos: prevTarget} = table[lo]);\n    ({time: nextSource, pos: nextTarget} = table[hi]);\n  }\n\n  const span = nextSource - prevSource;\n  return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\n\nclass TimeSeriesScale extends TimeScale {\n\n  static id = 'timeseries';\n\n  /**\n   * @type {any}\n   */\n  static defaults = TimeScale.defaults;\n\n  /**\n\t * @param {object} props\n\t */\n  constructor(props) {\n    super(props);\n\n    /** @type {object[]} */\n    this._table = [];\n    /** @type {number} */\n    this._minPos = undefined;\n    /** @type {number} */\n    this._tableRange = undefined;\n  }\n\n  /**\n\t * @protected\n\t */\n  initOffsets() {\n    const timestamps = this._getTimestampsForTable();\n    const table = this._table = this.buildLookupTable(timestamps);\n    this._minPos = interpolate(table, this.min);\n    this._tableRange = interpolate(table, this.max) - this._minPos;\n    super.initOffsets(timestamps);\n  }\n\n  /**\n\t * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\n\t * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\n\t * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\n\t * extremity (left + width or top + height). Note that it would be more optimized to directly\n\t * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\n\t * to create the lookup table. The table ALWAYS contains at least two items: min and max.\n\t * @param {number[]} timestamps\n\t * @return {object[]}\n\t * @protected\n\t */\n  buildLookupTable(timestamps) {\n    const {min, max} = this;\n    const items = [];\n    const table = [];\n    let i, ilen, prev, curr, next;\n\n    for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n      curr = timestamps[i];\n      if (curr >= min && curr <= max) {\n        items.push(curr);\n      }\n    }\n\n    if (items.length < 2) {\n      // In case there is less that 2 timestamps between min and max, the scale is defined by min and max\n      return [\n        {time: min, pos: 0},\n        {time: max, pos: 1}\n      ];\n    }\n\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      next = items[i + 1];\n      prev = items[i - 1];\n      curr = items[i];\n\n      // only add points that breaks the scale linearity\n      if (Math.round((next + prev) / 2) !== curr) {\n        table.push({time: curr, pos: i / (ilen - 1)});\n      }\n    }\n    return table;\n  }\n\n  /**\n    * Generates all timestamps defined in the data.\n    * Important: this method can return ticks outside the min and max range, it's the\n    * responsibility of the calling code to clamp values if needed.\n    * @protected\n    */\n  _generate() {\n    const min = this.min;\n    const max = this.max;\n    let timestamps = super.getDataTimestamps();\n    if (!timestamps.includes(min) || !timestamps.length) {\n      timestamps.splice(0, 0, min);\n    }\n    if (!timestamps.includes(max) || timestamps.length === 1) {\n      timestamps.push(max);\n    }\n    return timestamps.sort((a, b) => a - b);\n  }\n\n  /**\n\t * Returns all timestamps\n\t * @return {number[]}\n\t * @private\n\t */\n  _getTimestampsForTable() {\n    let timestamps = this._cache.all || [];\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const data = this.getDataTimestamps();\n    const label = this.getLabelTimestamps();\n    if (data.length && label.length) {\n      // If combining labels and data (data might not contain all labels),\n      // we need to recheck uniqueness and sort\n      timestamps = this.normalize(data.concat(label));\n    } else {\n      timestamps = data.length ? data : label;\n    }\n    timestamps = this._cache.all = timestamps;\n\n    return timestamps;\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getDecimalForValue(value) {\n    return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n  }\n}\n\nexport default TimeSeriesScale;\n", "export * from './controllers/index.js';\nexport * from './core/index.js';\nexport * from './elements/index.js';\nexport * from './platform/index.js';\nexport * from './plugins/index.js';\nexport * from './scales/index.js';\n\nimport * as controllers from './controllers/index.js';\nimport * as elements from './elements/index.js';\nimport * as plugins from './plugins/index.js';\nimport * as scales from './scales/index.js';\n\nexport {\n  controllers,\n  elements,\n  plugins,\n  scales,\n};\n\nexport const registerables = [\n  controllers,\n  elements,\n  plugins,\n  scales,\n];\n", "import {Chart, registerables} from '../dist/chart.js';\n\nChart.register(...registerables);\n\nexport * from '../dist/chart.js';\nexport default Chart;\n", "import { Controller } from \"@hotwired/stimulus\"\nimport Chart from 'chart.js/auto'\n\n// Connects to data-controller=\"admin--firmware-graphing\"\nexport default class extends Controller {\n  static targets = [ \"onlinePanelFirmwareStatsGraph\" ]\n\n  connect() {\n    fetch('onlinePanelFirmwareStatisticsGraphData',\n          { method: 'get', headers: { 'Content-Type': 'application/json;charset=utf-8'} })\n      .then(response => response.json())\n      .then(responseData => {\n        this.firmwareChart = this.buildGraph(\n          this.onlinePanelFirmwareStatsGraphTarget,\n          responseData,\n          ['Online Panels']\n        );\n      })\n      .catch(err => {})\n  }\n\n  buildGraph(target, data, labels) {\n    return new Chart(\n      target,\n      {\n        type: 'line',\n        data: {\n          labels: data.map(row => row.version),\n          datasets: [\n            {\n              label: labels[0],\n              data: data,\n              parsing: {\n                xAxisKey: 'version',\n                yAxisKey: 'panel_count'\n              }\n            }\n          ]\n        },\n        interaction: {\n          mode: 'nearest',\n          axis: 'x',\n          intersect: false\n        },\n        options: {\n          locale: i18n.locale\n        }\n      }\n    )\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport * as bootstrap from \"bootstrap\"\nimport * as datepicker from 'bootstrap-datepicker' // TODO: Find a date picker alternative that isnt jQuery\nimport AutoNumeric from 'autonumeric'\n\n// Connects to data-controller=\"admin--invoicing\"\nexport default class extends Controller {\n  static targets = [\n    \"invoicePaymentAmount\", \"invoicePaymentDate\",\n    \"invoicePaymentComment\", \"confirmPaymentModal\", \"confirmAdditionalPaymentModal\",\n    \"confirmPaymentAmount\", \"confirmPaymentDate\", \"confirmPaymentComment\",\n    \"confirmPaymentAmountInput\", \"confirmPaymentDateInput\", \"confirmPaymentCommentInput\",\n    \"confirmAdditionalPaymentAmount\", \"confirmAdditionalPaymentDate\", \"confirmAdditionalPaymentComment\",\n    \"confirmAdditionalPaymentAmountInput\", \"confirmAdditionalPaymentDateInput\", \"confirmAdditionalPaymentCommentInput\",\n    \"removeSiteFromInvoiceModal\", \"removeSiteFromInvoiceDetails\",\n    \"removeSiteFromInvoiceSerialInput\", \"removeSiteFromInvoiceResetSiteInput\",\n    \"removePlanOptionFromInvoiceModal\", \"removePlanOptionFromInvoiceDetails\",\n    \"removePlanOptionFromInvoiceSerialInput\", \"removePlanOptionFromInvoiceOptionInput\"\n  ]\n\n  olderInvoiceYears = [ \"year_2016\", \"year_2017\", \"year_2018\",\n                        \"year_2019\" ]\n\n  connect() {\n    if (this.hasInvoicePaymentAmountTarget) {\n      if (!AutoNumeric.test(this.invoicePaymentAmountTarget)) {\n        const options = {\n          digitGroupSeparator        : ',',\n          decimalCharacter           : '.',\n          decimalCharacterAlternative: '.',\n          currencySymbol             : '$',\n          currencySymbolPlacement    : AutoNumeric.options.currencySymbolPlacement.prefix,\n          roundingMethod             : AutoNumeric.options.roundingMethod.halfUpSymmetric,\n          minimumValue : 0\n        };\n        new AutoNumeric(this.invoicePaymentAmountTarget, options);\n      }\n    }\n    if (this.hasInvoicePaymentDateTarget) {\n      $('.date').datepicker({\n          format: \"dd/mm/yyyy\",\n          endDate: \"Today\",\n          autoclose: true,\n          todayBtn: \"linked\",\n          todayHighlight: true\n        })\n    }\n  }\n\n  confirmPayment(event) {\n    this.confirmPaymentAmountTarget.innerHTML = this.invoicePaymentAmountTarget.value\n    this.confirmPaymentDateTarget.innerHTML = this.invoicePaymentDateTarget.value\n    this.confirmPaymentCommentTarget.innerHTML = this.invoicePaymentCommentTarget.value\n    this.confirmPaymentAmountInputTarget.value = this.invoicePaymentAmountTarget.value\n    this.confirmPaymentDateInputTarget.value = this.invoicePaymentDateTarget.value\n    this.confirmPaymentCommentInputTarget.value = this.invoicePaymentCommentTarget.value\n    if (!this.confirmPaymentModal) {\n      this.confirmPaymentModal = new bootstrap.Modal(this.confirmPaymentModalTarget, { keyboard: false });\n    }\n    if (this.confirmPaymentModal) {\n      this.confirmPaymentModal.show()\n    }\n  }\n\n  confirmAdditionalPayment(event) {\n    this.confirmAdditionalPaymentAmountTarget.innerHTML = this.invoicePaymentAmountTarget.value\n    this.confirmAdditionalPaymentDateTarget.innerHTML = this.invoicePaymentDateTarget.value\n    this.confirmAdditionalPaymentCommentTarget.innerHTML = this.invoicePaymentCommentTarget.value\n    this.confirmAdditionalPaymentAmountInputTarget.value = this.invoicePaymentAmountTarget.value\n    this.confirmAdditionalPaymentDateInputTarget.value = this.invoicePaymentDateTarget.value\n    this.confirmAdditionalPaymentCommentInputTarget.value = this.invoicePaymentCommentTarget.value\n    if (!this.confirmAdditionalPaymentModal) {\n      this.confirmAdditionalPaymentModal = new bootstrap.Modal(this.confirmAdditionalPaymentModalTarget, { keyboard: false });\n    }\n    if (this.confirmAdditionalPaymentModal) {\n      this.confirmAdditionalPaymentModal.show()\n    }\n  }\n\n  deleteSiteFromInvoice(event) {\n    this.removeSiteFromInvoiceDetailsTarget.innerHTML = event.params['siteSerial'] + ' - ' + event.params['sitePlan']\n    this.removeSiteFromInvoiceSerialInputTarget.value = event.params['siteSerial']\n    if (!this.removeSiteFromInvoiceModal) {\n      this.removeSiteFromInvoiceModal = new bootstrap.Modal(this.removeSiteFromInvoiceModalTarget, { keyboard: false });\n    }\n    if (this.removeSiteFromInvoiceModal) {\n      this.removeSiteFromInvoiceModal.show()\n    }\n  }\n\n  deletePlanOptionFromInvoice(event) {\n    this.removePlanOptionFromInvoiceDetailsTarget.innerHTML = event.params['siteSerial'] + ' - ' + event.params['planOptionName']\n    this.removePlanOptionFromInvoiceSerialInputTarget.value = event.params['siteSerial']\n    this.removePlanOptionFromInvoiceOptionInputTarget.value = event.params['planOptionId']\n    if (!this.removePlanOptionFromInvoiceModal) {\n      this.removePlanOptionFromInvoiceModal = new bootstrap.Modal(this.removePlanOptionFromInvoiceModalTarget, { keyboard: false });\n    }\n    if (this.removePlanOptionFromInvoiceModal) {\n      this.removePlanOptionFromInvoiceModal.show()\n    }\n  }\n\n  resetSitePlanSettings(event) {\n    this.removeSiteFromInvoiceResetSiteInputTarget.value = event.target.checked\n  }\n\n  toggleOlderInvoiceYears(event) {\n    Array.from(document.querySelectorAll('div[id^=\"year_\"]')).filter(yearDiv => {\n      if (this.olderInvoiceYears.includes(yearDiv.id)) {\n        yearDiv.classList.toggle('d-none')\n      }\n    })\n  }\n}\n", "// these aren't really private, but nor are they really useful to document\n\n/**\n * @private\n */\nclass LuxonError extends Error {}\n\n/**\n * @private\n */\nexport class InvalidDateTimeError extends LuxonError {\n  constructor(reason) {\n    super(`Invalid DateTime: ${reason.toMessage()}`);\n  }\n}\n\n/**\n * @private\n */\nexport class InvalidIntervalError extends LuxonError {\n  constructor(reason) {\n    super(`Invalid Interval: ${reason.toMessage()}`);\n  }\n}\n\n/**\n * @private\n */\nexport class InvalidDurationError extends LuxonError {\n  constructor(reason) {\n    super(`Invalid Duration: ${reason.toMessage()}`);\n  }\n}\n\n/**\n * @private\n */\nexport class ConflictingSpecificationError extends LuxonError {}\n\n/**\n * @private\n */\nexport class InvalidUnitError extends LuxonError {\n  constructor(unit) {\n    super(`Invalid unit ${unit}`);\n  }\n}\n\n/**\n * @private\n */\nexport class InvalidArgumentError extends LuxonError {}\n\n/**\n * @private\n */\nexport class ZoneIsAbstractError extends LuxonError {\n  constructor() {\n    super(\"Zone is an abstract class\");\n  }\n}\n", "/**\n * @private\n */\n\nconst n = \"numeric\",\n  s = \"short\",\n  l = \"long\";\n\nexport const DATE_SHORT = {\n  year: n,\n  month: n,\n  day: n,\n};\n\nexport const DATE_MED = {\n  year: n,\n  month: s,\n  day: n,\n};\n\nexport const DATE_MED_WITH_WEEKDAY = {\n  year: n,\n  month: s,\n  day: n,\n  weekday: s,\n};\n\nexport const DATE_FULL = {\n  year: n,\n  month: l,\n  day: n,\n};\n\nexport const DATE_HUGE = {\n  year: n,\n  month: l,\n  day: n,\n  weekday: l,\n};\n\nexport const TIME_SIMPLE = {\n  hour: n,\n  minute: n,\n};\n\nexport const TIME_WITH_SECONDS = {\n  hour: n,\n  minute: n,\n  second: n,\n};\n\nexport const TIME_WITH_SHORT_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: s,\n};\n\nexport const TIME_WITH_LONG_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: l,\n};\n\nexport const TIME_24_SIMPLE = {\n  hour: n,\n  minute: n,\n  hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SECONDS = {\n  hour: n,\n  minute: n,\n  second: n,\n  hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SHORT_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  hourCycle: \"h23\",\n  timeZoneName: s,\n};\n\nexport const TIME_24_WITH_LONG_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  hourCycle: \"h23\",\n  timeZoneName: l,\n};\n\nexport const DATETIME_SHORT = {\n  year: n,\n  month: n,\n  day: n,\n  hour: n,\n  minute: n,\n};\n\nexport const DATETIME_SHORT_WITH_SECONDS = {\n  year: n,\n  month: n,\n  day: n,\n  hour: n,\n  minute: n,\n  second: n,\n};\n\nexport const DATETIME_MED = {\n  year: n,\n  month: s,\n  day: n,\n  hour: n,\n  minute: n,\n};\n\nexport const DATETIME_MED_WITH_SECONDS = {\n  year: n,\n  month: s,\n  day: n,\n  hour: n,\n  minute: n,\n  second: n,\n};\n\nexport const DATETIME_MED_WITH_WEEKDAY = {\n  year: n,\n  month: s,\n  day: n,\n  weekday: s,\n  hour: n,\n  minute: n,\n};\n\nexport const DATETIME_FULL = {\n  year: n,\n  month: l,\n  day: n,\n  hour: n,\n  minute: n,\n  timeZoneName: s,\n};\n\nexport const DATETIME_FULL_WITH_SECONDS = {\n  year: n,\n  month: l,\n  day: n,\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: s,\n};\n\nexport const DATETIME_HUGE = {\n  year: n,\n  month: l,\n  day: n,\n  weekday: l,\n  hour: n,\n  minute: n,\n  timeZoneName: l,\n};\n\nexport const DATETIME_HUGE_WITH_SECONDS = {\n  year: n,\n  month: l,\n  day: n,\n  weekday: l,\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: l,\n};\n", "import { ZoneIsAbstractError } from \"./errors.js\";\n\n/**\n * @interface\n */\nexport default class Zone {\n  /**\n   * The type of zone\n   * @abstract\n   * @type {string}\n   */\n  get type() {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * The name of this zone.\n   * @abstract\n   * @type {string}\n   */\n  get name() {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * The IANA name of this zone.\n   * Defaults to `name` if not overwritten by a subclass.\n   * @abstract\n   * @type {string}\n   */\n  get ianaName() {\n    return this.name;\n  }\n\n  /**\n   * Returns whether the offset is known to be fixed for the whole year.\n   * @abstract\n   * @type {boolean}\n   */\n  get isUniversal() {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Returns the offset's common name (such as EST) at the specified timestamp\n   * @abstract\n   * @param {number} ts - Epoch milliseconds for which to get the name\n   * @param {Object} opts - Options to affect the format\n   * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n   * @param {string} opts.locale - What locale to return the offset name in.\n   * @return {string}\n   */\n  offsetName(ts, opts) {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Returns the offset's value as a string\n   * @abstract\n   * @param {number} ts - Epoch milliseconds for which to get the offset\n   * @param {string} format - What style of offset to return.\n   *                          Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n   * @return {string}\n   */\n  formatOffset(ts, format) {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Return the offset in minutes for this zone at the specified timestamp.\n   * @abstract\n   * @param {number} ts - Epoch milliseconds for which to compute the offset\n   * @return {number}\n   */\n  offset(ts) {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Return whether this Zone is equal to another zone\n   * @abstract\n   * @param {Zone} otherZone - the zone to compare\n   * @return {boolean}\n   */\n  equals(otherZone) {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Return whether this Zone is valid.\n   * @abstract\n   * @type {boolean}\n   */\n  get isValid() {\n    throw new ZoneIsAbstractError();\n  }\n}\n", "import { formatOffset, parseZoneInfo } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * Represents the local zone for this JavaScript environment.\n * @implements {Zone}\n */\nexport default class SystemZone extends Zone {\n  /**\n   * Get a singleton instance of the local zone\n   * @return {SystemZone}\n   */\n  static get instance() {\n    if (singleton === null) {\n      singleton = new SystemZone();\n    }\n    return singleton;\n  }\n\n  /** @override **/\n  get type() {\n    return \"system\";\n  }\n\n  /** @override **/\n  get name() {\n    return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n  }\n\n  /** @override **/\n  get isUniversal() {\n    return false;\n  }\n\n  /** @override **/\n  offsetName(ts, { format, locale }) {\n    return parseZoneInfo(ts, format, locale);\n  }\n\n  /** @override **/\n  formatOffset(ts, format) {\n    return formatOffset(this.offset(ts), format);\n  }\n\n  /** @override **/\n  offset(ts) {\n    return -new Date(ts).getTimezoneOffset();\n  }\n\n  /** @override **/\n  equals(otherZone) {\n    return otherZone.type === \"system\";\n  }\n\n  /** @override **/\n  get isValid() {\n    return true;\n  }\n}\n", "import { formatOffset, parseZoneInfo, isUndefined, objToLocalTS } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nconst dtfCache = new Map();\nfunction makeDTF(zoneName) {\n  let dtf = dtfCache.get(zoneName);\n  if (dtf === undefined) {\n    dtf = new Intl.DateTimeFormat(\"en-US\", {\n      hour12: false,\n      timeZone: zoneName,\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\",\n      era: \"short\",\n    });\n    dtfCache.set(zoneName, dtf);\n  }\n  return dtf;\n}\n\nconst typeToPos = {\n  year: 0,\n  month: 1,\n  day: 2,\n  era: 3,\n  hour: 4,\n  minute: 5,\n  second: 6,\n};\n\nfunction hackyOffset(dtf, date) {\n  const formatted = dtf.format(date).replace(/\\u200E/g, \"\"),\n    parsed = /(\\d+)\\/(\\d+)\\/(\\d+) (AD|BC),? (\\d+):(\\d+):(\\d+)/.exec(formatted),\n    [, fMonth, fDay, fYear, fadOrBc, fHour, fMinute, fSecond] = parsed;\n  return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond];\n}\n\nfunction partsOffset(dtf, date) {\n  const formatted = dtf.formatToParts(date);\n  const filled = [];\n  for (let i = 0; i < formatted.length; i++) {\n    const { type, value } = formatted[i];\n    const pos = typeToPos[type];\n\n    if (type === \"era\") {\n      filled[pos] = value;\n    } else if (!isUndefined(pos)) {\n      filled[pos] = parseInt(value, 10);\n    }\n  }\n  return filled;\n}\n\nconst ianaZoneCache = new Map();\n/**\n * A zone identified by an IANA identifier, like America/New_York\n * @implements {Zone}\n */\nexport default class IANAZone extends Zone {\n  /**\n   * @param {string} name - Zone name\n   * @return {IANAZone}\n   */\n  static create(name) {\n    let zone = ianaZoneCache.get(name);\n    if (zone === undefined) {\n      ianaZoneCache.set(name, (zone = new IANAZone(name)));\n    }\n    return zone;\n  }\n\n  /**\n   * Reset local caches. Should only be necessary in testing scenarios.\n   * @return {void}\n   */\n  static resetCache() {\n    ianaZoneCache.clear();\n    dtfCache.clear();\n  }\n\n  /**\n   * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that.\n   * @param {string} s - The string to check validity on\n   * @example IANAZone.isValidSpecifier(\"America/New_York\") //=> true\n   * @example IANAZone.isValidSpecifier(\"Sport~~blorp\") //=> false\n   * @deprecated For backward compatibility, this forwards to isValidZone, better use `isValidZone()` directly instead.\n   * @return {boolean}\n   */\n  static isValidSpecifier(s) {\n    return this.isValidZone(s);\n  }\n\n  /**\n   * Returns whether the provided string identifies a real zone\n   * @param {string} zone - The string to check\n   * @example IANAZone.isValidZone(\"America/New_York\") //=> true\n   * @example IANAZone.isValidZone(\"Fantasia/Castle\") //=> false\n   * @example IANAZone.isValidZone(\"Sport~~blorp\") //=> false\n   * @return {boolean}\n   */\n  static isValidZone(zone) {\n    if (!zone) {\n      return false;\n    }\n    try {\n      new Intl.DateTimeFormat(\"en-US\", { timeZone: zone }).format();\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  constructor(name) {\n    super();\n    /** @private **/\n    this.zoneName = name;\n    /** @private **/\n    this.valid = IANAZone.isValidZone(name);\n  }\n\n  /**\n   * The type of zone. `iana` for all instances of `IANAZone`.\n   * @override\n   * @type {string}\n   */\n  get type() {\n    return \"iana\";\n  }\n\n  /**\n   * The name of this zone (i.e. the IANA zone name).\n   * @override\n   * @type {string}\n   */\n  get name() {\n    return this.zoneName;\n  }\n\n  /**\n   * Returns whether the offset is known to be fixed for the whole year:\n   * Always returns false for all IANA zones.\n   * @override\n   * @type {boolean}\n   */\n  get isUniversal() {\n    return false;\n  }\n\n  /**\n   * Returns the offset's common name (such as EST) at the specified timestamp\n   * @override\n   * @param {number} ts - Epoch milliseconds for which to get the name\n   * @param {Object} opts - Options to affect the format\n   * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n   * @param {string} opts.locale - What locale to return the offset name in.\n   * @return {string}\n   */\n  offsetName(ts, { format, locale }) {\n    return parseZoneInfo(ts, format, locale, this.name);\n  }\n\n  /**\n   * Returns the offset's value as a string\n   * @override\n   * @param {number} ts - Epoch milliseconds for which to get the offset\n   * @param {string} format - What style of offset to return.\n   *                          Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n   * @return {string}\n   */\n  formatOffset(ts, format) {\n    return formatOffset(this.offset(ts), format);\n  }\n\n  /**\n   * Return the offset in minutes for this zone at the specified timestamp.\n   * @override\n   * @param {number} ts - Epoch milliseconds for which to compute the offset\n   * @return {number}\n   */\n  offset(ts) {\n    if (!this.valid) return NaN;\n    const date = new Date(ts);\n\n    if (isNaN(date)) return NaN;\n\n    const dtf = makeDTF(this.name);\n    let [year, month, day, adOrBc, hour, minute, second] = dtf.formatToParts\n      ? partsOffset(dtf, date)\n      : hackyOffset(dtf, date);\n\n    if (adOrBc === \"BC\") {\n      year = -Math.abs(year) + 1;\n    }\n\n    // because we're using hour12 and https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat\n    const adjustedHour = hour === 24 ? 0 : hour;\n\n    const asUTC = objToLocalTS({\n      year,\n      month,\n      day,\n      hour: adjustedHour,\n      minute,\n      second,\n      millisecond: 0,\n    });\n\n    let asTS = +date;\n    const over = asTS % 1000;\n    asTS -= over >= 0 ? over : 1000 + over;\n    return (asUTC - asTS) / (60 * 1000);\n  }\n\n  /**\n   * Return whether this Zone is equal to another zone\n   * @override\n   * @param {Zone} otherZone - the zone to compare\n   * @return {boolean}\n   */\n  equals(otherZone) {\n    return otherZone.type === \"iana\" && otherZone.name === this.name;\n  }\n\n  /**\n   * Return whether this Zone is valid.\n   * @override\n   * @type {boolean}\n   */\n  get isValid() {\n    return this.valid;\n  }\n}\n", "import { hasLocaleWeekInfo, hasRelative, padStart, roundTo, validateWeekSettings } from \"./util.js\";\nimport * as English from \"./english.js\";\nimport Settings from \"../settings.js\";\nimport DateTime from \"../datetime.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n// todo - remap caching\n\nlet intlLFCache = {};\nfunction getCachedLF(locString, opts = {}) {\n  const key = JSON.stringify([locString, opts]);\n  let dtf = intlLFCache[key];\n  if (!dtf) {\n    dtf = new Intl.ListFormat(locString, opts);\n    intlLFCache[key] = dtf;\n  }\n  return dtf;\n}\n\nconst intlDTCache = new Map();\nfunction getCachedDTF(locString, opts = {}) {\n  const key = JSON.stringify([locString, opts]);\n  let dtf = intlDTCache.get(key);\n  if (dtf === undefined) {\n    dtf = new Intl.DateTimeFormat(locString, opts);\n    intlDTCache.set(key, dtf);\n  }\n  return dtf;\n}\n\nconst intlNumCache = new Map();\nfunction getCachedINF(locString, opts = {}) {\n  const key = JSON.stringify([locString, opts]);\n  let inf = intlNumCache.get(key);\n  if (inf === undefined) {\n    inf = new Intl.NumberFormat(locString, opts);\n    intlNumCache.set(key, inf);\n  }\n  return inf;\n}\n\nconst intlRelCache = new Map();\nfunction getCachedRTF(locString, opts = {}) {\n  const { base, ...cacheKeyOpts } = opts; // exclude `base` from the options\n  const key = JSON.stringify([locString, cacheKeyOpts]);\n  let inf = intlRelCache.get(key);\n  if (inf === undefined) {\n    inf = new Intl.RelativeTimeFormat(locString, opts);\n    intlRelCache.set(key, inf);\n  }\n  return inf;\n}\n\nlet sysLocaleCache = null;\nfunction systemLocale() {\n  if (sysLocaleCache) {\n    return sysLocaleCache;\n  } else {\n    sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale;\n    return sysLocaleCache;\n  }\n}\n\nconst intlResolvedOptionsCache = new Map();\nfunction getCachedIntResolvedOptions(locString) {\n  let opts = intlResolvedOptionsCache.get(locString);\n  if (opts === undefined) {\n    opts = new Intl.DateTimeFormat(locString).resolvedOptions();\n    intlResolvedOptionsCache.set(locString, opts);\n  }\n  return opts;\n}\n\nconst weekInfoCache = new Map();\nfunction getCachedWeekInfo(locString) {\n  let data = weekInfoCache.get(locString);\n  if (!data) {\n    const locale = new Intl.Locale(locString);\n    // browsers currently implement this as a property, but spec says it should be a getter function\n    data = \"getWeekInfo\" in locale ? locale.getWeekInfo() : locale.weekInfo;\n    // minimalDays was removed from WeekInfo: https://github.com/tc39/proposal-intl-locale-info/issues/86\n    if (!(\"minimalDays\" in data)) {\n      data = { ...fallbackWeekSettings, ...data };\n    }\n    weekInfoCache.set(locString, data);\n  }\n  return data;\n}\n\nfunction parseLocaleString(localeStr) {\n  // I really want to avoid writing a BCP 47 parser\n  // see, e.g. https://github.com/wooorm/bcp-47\n  // Instead, we'll do this:\n\n  // a) if the string has no -u extensions, just leave it alone\n  // b) if it does, use Intl to resolve everything\n  // c) if Intl fails, try again without the -u\n\n  // private subtags and unicode subtags have ordering requirements,\n  // and we're not properly parsing this, so just strip out the\n  // private ones if they exist.\n  const xIndex = localeStr.indexOf(\"-x-\");\n  if (xIndex !== -1) {\n    localeStr = localeStr.substring(0, xIndex);\n  }\n\n  const uIndex = localeStr.indexOf(\"-u-\");\n  if (uIndex === -1) {\n    return [localeStr];\n  } else {\n    let options;\n    let selectedStr;\n    try {\n      options = getCachedDTF(localeStr).resolvedOptions();\n      selectedStr = localeStr;\n    } catch (e) {\n      const smaller = localeStr.substring(0, uIndex);\n      options = getCachedDTF(smaller).resolvedOptions();\n      selectedStr = smaller;\n    }\n\n    const { numberingSystem, calendar } = options;\n    return [selectedStr, numberingSystem, calendar];\n  }\n}\n\nfunction intlConfigString(localeStr, numberingSystem, outputCalendar) {\n  if (outputCalendar || numberingSystem) {\n    if (!localeStr.includes(\"-u-\")) {\n      localeStr += \"-u\";\n    }\n\n    if (outputCalendar) {\n      localeStr += `-ca-${outputCalendar}`;\n    }\n\n    if (numberingSystem) {\n      localeStr += `-nu-${numberingSystem}`;\n    }\n    return localeStr;\n  } else {\n    return localeStr;\n  }\n}\n\nfunction mapMonths(f) {\n  const ms = [];\n  for (let i = 1; i <= 12; i++) {\n    const dt = DateTime.utc(2009, i, 1);\n    ms.push(f(dt));\n  }\n  return ms;\n}\n\nfunction mapWeekdays(f) {\n  const ms = [];\n  for (let i = 1; i <= 7; i++) {\n    const dt = DateTime.utc(2016, 11, 13 + i);\n    ms.push(f(dt));\n  }\n  return ms;\n}\n\nfunction listStuff(loc, length, englishFn, intlFn) {\n  const mode = loc.listingMode();\n\n  if (mode === \"error\") {\n    return null;\n  } else if (mode === \"en\") {\n    return englishFn(length);\n  } else {\n    return intlFn(length);\n  }\n}\n\nfunction supportsFastNumbers(loc) {\n  if (loc.numberingSystem && loc.numberingSystem !== \"latn\") {\n    return false;\n  } else {\n    return (\n      loc.numberingSystem === \"latn\" ||\n      !loc.locale ||\n      loc.locale.startsWith(\"en\") ||\n      getCachedIntResolvedOptions(loc.locale).numberingSystem === \"latn\"\n    );\n  }\n}\n\n/**\n * @private\n */\n\nclass PolyNumberFormatter {\n  constructor(intl, forceSimple, opts) {\n    this.padTo = opts.padTo || 0;\n    this.floor = opts.floor || false;\n\n    const { padTo, floor, ...otherOpts } = opts;\n\n    if (!forceSimple || Object.keys(otherOpts).length > 0) {\n      const intlOpts = { useGrouping: false, ...opts };\n      if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;\n      this.inf = getCachedINF(intl, intlOpts);\n    }\n  }\n\n  format(i) {\n    if (this.inf) {\n      const fixed = this.floor ? Math.floor(i) : i;\n      return this.inf.format(fixed);\n    } else {\n      // to match the browser's numberformatter defaults\n      const fixed = this.floor ? Math.floor(i) : roundTo(i, 3);\n      return padStart(fixed, this.padTo);\n    }\n  }\n}\n\n/**\n * @private\n */\n\nclass PolyDateFormatter {\n  constructor(dt, intl, opts) {\n    this.opts = opts;\n    this.originalZone = undefined;\n\n    let z = undefined;\n    if (this.opts.timeZone) {\n      // Don't apply any workarounds if a timeZone is explicitly provided in opts\n      this.dt = dt;\n    } else if (dt.zone.type === \"fixed\") {\n      // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like.\n      // That is why fixed-offset TZ is set to that unless it is:\n      // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT.\n      // 2. Unsupported by the browser:\n      //    - some do not support Etc/\n      //    - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata\n      const gmtOffset = -1 * (dt.offset / 60);\n      const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`;\n      if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) {\n        z = offsetZ;\n        this.dt = dt;\n      } else {\n        // Not all fixed-offset zones like Etc/+4:30 are present in tzdata so\n        // we manually apply the offset and substitute the zone as needed.\n        z = \"UTC\";\n        this.dt = dt.offset === 0 ? dt : dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n        this.originalZone = dt.zone;\n      }\n    } else if (dt.zone.type === \"system\") {\n      this.dt = dt;\n    } else if (dt.zone.type === \"iana\") {\n      this.dt = dt;\n      z = dt.zone.name;\n    } else {\n      // Custom zones can have any offset / offsetName so we just manually\n      // apply the offset and substitute the zone as needed.\n      z = \"UTC\";\n      this.dt = dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n      this.originalZone = dt.zone;\n    }\n\n    const intlOpts = { ...this.opts };\n    intlOpts.timeZone = intlOpts.timeZone || z;\n    this.dtf = getCachedDTF(intl, intlOpts);\n  }\n\n  format() {\n    if (this.originalZone) {\n      // If we have to substitute in the actual zone name, we have to use\n      // formatToParts so that the timezone can be replaced.\n      return this.formatToParts()\n        .map(({ value }) => value)\n        .join(\"\");\n    }\n    return this.dtf.format(this.dt.toJSDate());\n  }\n\n  formatToParts() {\n    const parts = this.dtf.formatToParts(this.dt.toJSDate());\n    if (this.originalZone) {\n      return parts.map((part) => {\n        if (part.type === \"timeZoneName\") {\n          const offsetName = this.originalZone.offsetName(this.dt.ts, {\n            locale: this.dt.locale,\n            format: this.opts.timeZoneName,\n          });\n          return {\n            ...part,\n            value: offsetName,\n          };\n        } else {\n          return part;\n        }\n      });\n    }\n    return parts;\n  }\n\n  resolvedOptions() {\n    return this.dtf.resolvedOptions();\n  }\n}\n\n/**\n * @private\n */\nclass PolyRelFormatter {\n  constructor(intl, isEnglish, opts) {\n    this.opts = { style: \"long\", ...opts };\n    if (!isEnglish && hasRelative()) {\n      this.rtf = getCachedRTF(intl, opts);\n    }\n  }\n\n  format(count, unit) {\n    if (this.rtf) {\n      return this.rtf.format(count, unit);\n    } else {\n      return English.formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== \"long\");\n    }\n  }\n\n  formatToParts(count, unit) {\n    if (this.rtf) {\n      return this.rtf.formatToParts(count, unit);\n    } else {\n      return [];\n    }\n  }\n}\n\nconst fallbackWeekSettings = {\n  firstDay: 1,\n  minimalDays: 4,\n  weekend: [6, 7],\n};\n\n/**\n * @private\n */\nexport default class Locale {\n  static fromOpts(opts) {\n    return Locale.create(\n      opts.locale,\n      opts.numberingSystem,\n      opts.outputCalendar,\n      opts.weekSettings,\n      opts.defaultToEN\n    );\n  }\n\n  static create(locale, numberingSystem, outputCalendar, weekSettings, defaultToEN = false) {\n    const specifiedLocale = locale || Settings.defaultLocale;\n    // the system locale is useful for human-readable strings but annoying for parsing/formatting known formats\n    const localeR = specifiedLocale || (defaultToEN ? \"en-US\" : systemLocale());\n    const numberingSystemR = numberingSystem || Settings.defaultNumberingSystem;\n    const outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;\n    const weekSettingsR = validateWeekSettings(weekSettings) || Settings.defaultWeekSettings;\n    return new Locale(localeR, numberingSystemR, outputCalendarR, weekSettingsR, specifiedLocale);\n  }\n\n  static resetCache() {\n    sysLocaleCache = null;\n    intlDTCache.clear();\n    intlNumCache.clear();\n    intlRelCache.clear();\n    intlResolvedOptionsCache.clear();\n    weekInfoCache.clear();\n  }\n\n  static fromObject({ locale, numberingSystem, outputCalendar, weekSettings } = {}) {\n    return Locale.create(locale, numberingSystem, outputCalendar, weekSettings);\n  }\n\n  constructor(locale, numbering, outputCalendar, weekSettings, specifiedLocale) {\n    const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale);\n\n    this.locale = parsedLocale;\n    this.numberingSystem = numbering || parsedNumberingSystem || null;\n    this.outputCalendar = outputCalendar || parsedOutputCalendar || null;\n    this.weekSettings = weekSettings;\n    this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);\n\n    this.weekdaysCache = { format: {}, standalone: {} };\n    this.monthsCache = { format: {}, standalone: {} };\n    this.meridiemCache = null;\n    this.eraCache = {};\n\n    this.specifiedLocale = specifiedLocale;\n    this.fastNumbersCached = null;\n  }\n\n  get fastNumbers() {\n    if (this.fastNumbersCached == null) {\n      this.fastNumbersCached = supportsFastNumbers(this);\n    }\n\n    return this.fastNumbersCached;\n  }\n\n  listingMode() {\n    const isActuallyEn = this.isEnglish();\n    const hasNoWeirdness =\n      (this.numberingSystem === null || this.numberingSystem === \"latn\") &&\n      (this.outputCalendar === null || this.outputCalendar === \"gregory\");\n    return isActuallyEn && hasNoWeirdness ? \"en\" : \"intl\";\n  }\n\n  clone(alts) {\n    if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n      return this;\n    } else {\n      return Locale.create(\n        alts.locale || this.specifiedLocale,\n        alts.numberingSystem || this.numberingSystem,\n        alts.outputCalendar || this.outputCalendar,\n        validateWeekSettings(alts.weekSettings) || this.weekSettings,\n        alts.defaultToEN || false\n      );\n    }\n  }\n\n  redefaultToEN(alts = {}) {\n    return this.clone({ ...alts, defaultToEN: true });\n  }\n\n  redefaultToSystem(alts = {}) {\n    return this.clone({ ...alts, defaultToEN: false });\n  }\n\n  months(length, format = false) {\n    return listStuff(this, length, English.months, () => {\n      // Workaround for \"ja\" locale: formatToParts does not label all parts of the month\n      // as \"month\" and for this locale there is no difference between \"format\" and \"non-format\".\n      // As such, just use format() instead of formatToParts() and take the whole string\n      const monthSpecialCase = this.intl === \"ja\" || this.intl.startsWith(\"ja-\");\n      format &= !monthSpecialCase;\n      const intl = format ? { month: length, day: \"numeric\" } : { month: length },\n        formatStr = format ? \"format\" : \"standalone\";\n      if (!this.monthsCache[formatStr][length]) {\n        const mapper = !monthSpecialCase\n          ? (dt) => this.extract(dt, intl, \"month\")\n          : (dt) => this.dtFormatter(dt, intl).format();\n        this.monthsCache[formatStr][length] = mapMonths(mapper);\n      }\n      return this.monthsCache[formatStr][length];\n    });\n  }\n\n  weekdays(length, format = false) {\n    return listStuff(this, length, English.weekdays, () => {\n      const intl = format\n          ? { weekday: length, year: \"numeric\", month: \"long\", day: \"numeric\" }\n          : { weekday: length },\n        formatStr = format ? \"format\" : \"standalone\";\n      if (!this.weekdaysCache[formatStr][length]) {\n        this.weekdaysCache[formatStr][length] = mapWeekdays((dt) =>\n          this.extract(dt, intl, \"weekday\")\n        );\n      }\n      return this.weekdaysCache[formatStr][length];\n    });\n  }\n\n  meridiems() {\n    return listStuff(\n      this,\n      undefined,\n      () => English.meridiems,\n      () => {\n        // In theory there could be aribitrary day periods. We're gonna assume there are exactly two\n        // for AM and PM. This is probably wrong, but it's makes parsing way easier.\n        if (!this.meridiemCache) {\n          const intl = { hour: \"numeric\", hourCycle: \"h12\" };\n          this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(\n            (dt) => this.extract(dt, intl, \"dayperiod\")\n          );\n        }\n\n        return this.meridiemCache;\n      }\n    );\n  }\n\n  eras(length) {\n    return listStuff(this, length, English.eras, () => {\n      const intl = { era: length };\n\n      // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates\n      // to definitely enumerate them.\n      if (!this.eraCache[length]) {\n        this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map((dt) =>\n          this.extract(dt, intl, \"era\")\n        );\n      }\n\n      return this.eraCache[length];\n    });\n  }\n\n  extract(dt, intlOpts, field) {\n    const df = this.dtFormatter(dt, intlOpts),\n      results = df.formatToParts(),\n      matching = results.find((m) => m.type.toLowerCase() === field);\n    return matching ? matching.value : null;\n  }\n\n  numberFormatter(opts = {}) {\n    // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave)\n    // (in contrast, the rest of the condition is used heavily)\n    return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts);\n  }\n\n  dtFormatter(dt, intlOpts = {}) {\n    return new PolyDateFormatter(dt, this.intl, intlOpts);\n  }\n\n  relFormatter(opts = {}) {\n    return new PolyRelFormatter(this.intl, this.isEnglish(), opts);\n  }\n\n  listFormatter(opts = {}) {\n    return getCachedLF(this.intl, opts);\n  }\n\n  isEnglish() {\n    return (\n      this.locale === \"en\" ||\n      this.locale.toLowerCase() === \"en-us\" ||\n      getCachedIntResolvedOptions(this.intl).locale.startsWith(\"en-us\")\n    );\n  }\n\n  getWeekSettings() {\n    if (this.weekSettings) {\n      return this.weekSettings;\n    } else if (!hasLocaleWeekInfo()) {\n      return fallbackWeekSettings;\n    } else {\n      return getCachedWeekInfo(this.locale);\n    }\n  }\n\n  getStartOfWeek() {\n    return this.getWeekSettings().firstDay;\n  }\n\n  getMinDaysInFirstWeek() {\n    return this.getWeekSettings().minimalDays;\n  }\n\n  getWeekendDays() {\n    return this.getWeekSettings().weekend;\n  }\n\n  equals(other) {\n    return (\n      this.locale === other.locale &&\n      this.numberingSystem === other.numberingSystem &&\n      this.outputCalendar === other.outputCalendar\n    );\n  }\n\n  toString() {\n    return `Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`;\n  }\n}\n", "import { formatOffset, signedOffset } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * A zone with a fixed offset (meaning no DST)\n * @implements {Zone}\n */\nexport default class FixedOffsetZone extends Zone {\n  /**\n   * Get a singleton instance of UTC\n   * @return {FixedOffsetZone}\n   */\n  static get utcInstance() {\n    if (singleton === null) {\n      singleton = new FixedOffsetZone(0);\n    }\n    return singleton;\n  }\n\n  /**\n   * Get an instance with a specified offset\n   * @param {number} offset - The offset in minutes\n   * @return {FixedOffsetZone}\n   */\n  static instance(offset) {\n    return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);\n  }\n\n  /**\n   * Get an instance of FixedOffsetZone from a UTC offset string, like \"UTC+6\"\n   * @param {string} s - The offset string to parse\n   * @example FixedOffsetZone.parseSpecifier(\"UTC+6\")\n   * @example FixedOffsetZone.parseSpecifier(\"UTC+06\")\n   * @example FixedOffsetZone.parseSpecifier(\"UTC-6:00\")\n   * @return {FixedOffsetZone}\n   */\n  static parseSpecifier(s) {\n    if (s) {\n      const r = s.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);\n      if (r) {\n        return new FixedOffsetZone(signedOffset(r[1], r[2]));\n      }\n    }\n    return null;\n  }\n\n  constructor(offset) {\n    super();\n    /** @private **/\n    this.fixed = offset;\n  }\n\n  /**\n   * The type of zone. `fixed` for all instances of `FixedOffsetZone`.\n   * @override\n   * @type {string}\n   */\n  get type() {\n    return \"fixed\";\n  }\n\n  /**\n   * The name of this zone.\n   * All fixed zones' names always start with \"UTC\" (plus optional offset)\n   * @override\n   * @type {string}\n   */\n  get name() {\n    return this.fixed === 0 ? \"UTC\" : `UTC${formatOffset(this.fixed, \"narrow\")}`;\n  }\n\n  /**\n   * The IANA name of this zone, i.e. `Etc/UTC` or `Etc/GMT+/-nn`\n   *\n   * @override\n   * @type {string}\n   */\n  get ianaName() {\n    if (this.fixed === 0) {\n      return \"Etc/UTC\";\n    } else {\n      return `Etc/GMT${formatOffset(-this.fixed, \"narrow\")}`;\n    }\n  }\n\n  /**\n   * Returns the offset's common name at the specified timestamp.\n   *\n   * For fixed offset zones this equals to the zone name.\n   * @override\n   */\n  offsetName() {\n    return this.name;\n  }\n\n  /**\n   * Returns the offset's value as a string\n   * @override\n   * @param {number} ts - Epoch milliseconds for which to get the offset\n   * @param {string} format - What style of offset to return.\n   *                          Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n   * @return {string}\n   */\n  formatOffset(ts, format) {\n    return formatOffset(this.fixed, format);\n  }\n\n  /**\n   * Returns whether the offset is known to be fixed for the whole year:\n   * Always returns true for all fixed offset zones.\n   * @override\n   * @type {boolean}\n   */\n  get isUniversal() {\n    return true;\n  }\n\n  /**\n   * Return the offset in minutes for this zone at the specified timestamp.\n   *\n   * For fixed offset zones, this is constant and does not depend on a timestamp.\n   * @override\n   * @return {number}\n   */\n  offset() {\n    return this.fixed;\n  }\n\n  /**\n   * Return whether this Zone is equal to another zone (i.e. also fixed and same offset)\n   * @override\n   * @param {Zone} otherZone - the zone to compare\n   * @return {boolean}\n   */\n  equals(otherZone) {\n    return otherZone.type === \"fixed\" && otherZone.fixed === this.fixed;\n  }\n\n  /**\n   * Return whether this Zone is valid:\n   * All fixed offset zones are valid.\n   * @override\n   * @type {boolean}\n   */\n  get isValid() {\n    return true;\n  }\n}\n", "import Zone from \"../zone.js\";\n\n/**\n * A zone that failed to parse. You should never need to instantiate this.\n * @implements {Zone}\n */\nexport default class InvalidZone extends Zone {\n  constructor(zoneName) {\n    super();\n    /**  @private */\n    this.zoneName = zoneName;\n  }\n\n  /** @override **/\n  get type() {\n    return \"invalid\";\n  }\n\n  /** @override **/\n  get name() {\n    return this.zoneName;\n  }\n\n  /** @override **/\n  get isUniversal() {\n    return false;\n  }\n\n  /** @override **/\n  offsetName() {\n    return null;\n  }\n\n  /** @override **/\n  formatOffset() {\n    return \"\";\n  }\n\n  /** @override **/\n  offset() {\n    return NaN;\n  }\n\n  /** @override **/\n  equals() {\n    return false;\n  }\n\n  /** @override **/\n  get isValid() {\n    return false;\n  }\n}\n", "/**\n * @private\n */\n\nimport Zone from \"../zone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport InvalidZone from \"../zones/invalidZone.js\";\n\nimport { isUndefined, isString, isNumber } from \"./util.js\";\nimport SystemZone from \"../zones/systemZone.js\";\n\nexport function normalizeZone(input, defaultZone) {\n  let offset;\n  if (isUndefined(input) || input === null) {\n    return defaultZone;\n  } else if (input instanceof Zone) {\n    return input;\n  } else if (isString(input)) {\n    const lowered = input.toLowerCase();\n    if (lowered === \"default\") return defaultZone;\n    else if (lowered === \"local\" || lowered === \"system\") return SystemZone.instance;\n    else if (lowered === \"utc\" || lowered === \"gmt\") return FixedOffsetZone.utcInstance;\n    else return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input);\n  } else if (isNumber(input)) {\n    return FixedOffsetZone.instance(input);\n  } else if (typeof input === \"object\" && \"offset\" in input && typeof input.offset === \"function\") {\n    // This is dumb, but the instanceof check above doesn't seem to really work\n    // so we're duck checking it\n    return input;\n  } else {\n    return new InvalidZone(input);\n  }\n}\n", "const numberingSystems = {\n  arab: \"[\\u0660-\\u0669]\",\n  arabext: \"[\\u06F0-\\u06F9]\",\n  bali: \"[\\u1B50-\\u1B59]\",\n  beng: \"[\\u09E6-\\u09EF]\",\n  deva: \"[\\u0966-\\u096F]\",\n  fullwide: \"[\\uFF10-\\uFF19]\",\n  gujr: \"[\\u0AE6-\\u0AEF]\",\n  hanidec: \"[〇|一|二|三|四|五|六|七|八|九]\",\n  khmr: \"[\\u17E0-\\u17E9]\",\n  knda: \"[\\u0CE6-\\u0CEF]\",\n  laoo: \"[\\u0ED0-\\u0ED9]\",\n  limb: \"[\\u1946-\\u194F]\",\n  mlym: \"[\\u0D66-\\u0D6F]\",\n  mong: \"[\\u1810-\\u1819]\",\n  mymr: \"[\\u1040-\\u1049]\",\n  orya: \"[\\u0B66-\\u0B6F]\",\n  tamldec: \"[\\u0BE6-\\u0BEF]\",\n  telu: \"[\\u0C66-\\u0C6F]\",\n  thai: \"[\\u0E50-\\u0E59]\",\n  tibt: \"[\\u0F20-\\u0F29]\",\n  latn: \"\\\\d\",\n};\n\nconst numberingSystemsUTF16 = {\n  arab: [1632, 1641],\n  arabext: [1776, 1785],\n  bali: [6992, 7001],\n  beng: [2534, 2543],\n  deva: [2406, 2415],\n  fullwide: [65296, 65303],\n  gujr: [2790, 2799],\n  khmr: [6112, 6121],\n  knda: [3302, 3311],\n  laoo: [3792, 3801],\n  limb: [6470, 6479],\n  mlym: [3430, 3439],\n  mong: [6160, 6169],\n  mymr: [4160, 4169],\n  orya: [2918, 2927],\n  tamldec: [3046, 3055],\n  telu: [3174, 3183],\n  thai: [3664, 3673],\n  tibt: [3872, 3881],\n};\n\nconst hanidecChars = numberingSystems.hanidec.replace(/[\\[|\\]]/g, \"\").split(\"\");\n\nexport function parseDigits(str) {\n  let value = parseInt(str, 10);\n  if (isNaN(value)) {\n    value = \"\";\n    for (let i = 0; i < str.length; i++) {\n      const code = str.charCodeAt(i);\n\n      if (str[i].search(numberingSystems.hanidec) !== -1) {\n        value += hanidecChars.indexOf(str[i]);\n      } else {\n        for (const key in numberingSystemsUTF16) {\n          const [min, max] = numberingSystemsUTF16[key];\n          if (code >= min && code <= max) {\n            value += code - min;\n          }\n        }\n      }\n    }\n    return parseInt(value, 10);\n  } else {\n    return value;\n  }\n}\n\n// cache of {numberingSystem: {append: regex}}\nconst digitRegexCache = new Map();\nexport function resetDigitRegexCache() {\n  digitRegexCache.clear();\n}\n\nexport function digitRegex({ numberingSystem }, append = \"\") {\n  const ns = numberingSystem || \"latn\";\n\n  let appendCache = digitRegexCache.get(ns);\n  if (appendCache === undefined) {\n    appendCache = new Map();\n    digitRegexCache.set(ns, appendCache);\n  }\n  let regex = appendCache.get(append);\n  if (regex === undefined) {\n    regex = new RegExp(`${numberingSystems[ns]}${append}`);\n    appendCache.set(append, regex);\n  }\n\n  return regex;\n}\n", "import SystemZone from \"./zones/systemZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport DateTime from \"./datetime.js\";\n\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport { validateWeekSettings } from \"./impl/util.js\";\nimport { resetDigitRegexCache } from \"./impl/digits.js\";\n\nlet now = () => Date.now(),\n  defaultZone = \"system\",\n  defaultLocale = null,\n  defaultNumberingSystem = null,\n  defaultOutputCalendar = null,\n  twoDigitCutoffYear = 60,\n  throwOnInvalid,\n  defaultWeekSettings = null;\n\n/**\n * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here.\n */\nexport default class Settings {\n  /**\n   * Get the callback for returning the current timestamp.\n   * @type {function}\n   */\n  static get now() {\n    return now;\n  }\n\n  /**\n   * Set the callback for returning the current timestamp.\n   * The function should return a number, which will be interpreted as an Epoch millisecond count\n   * @type {function}\n   * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future\n   * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time\n   */\n  static set now(n) {\n    now = n;\n  }\n\n  /**\n   * Set the default time zone to create DateTimes in. Does not affect existing instances.\n   * Use the value \"system\" to reset this value to the system's time zone.\n   * @type {string}\n   */\n  static set defaultZone(zone) {\n    defaultZone = zone;\n  }\n\n  /**\n   * Get the default time zone object currently used to create DateTimes. Does not affect existing instances.\n   * The default value is the system's time zone (the one set on the machine that runs this code).\n   * @type {Zone}\n   */\n  static get defaultZone() {\n    return normalizeZone(defaultZone, SystemZone.instance);\n  }\n\n  /**\n   * Get the default locale to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static get defaultLocale() {\n    return defaultLocale;\n  }\n\n  /**\n   * Set the default locale to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static set defaultLocale(locale) {\n    defaultLocale = locale;\n  }\n\n  /**\n   * Get the default numbering system to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static get defaultNumberingSystem() {\n    return defaultNumberingSystem;\n  }\n\n  /**\n   * Set the default numbering system to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static set defaultNumberingSystem(numberingSystem) {\n    defaultNumberingSystem = numberingSystem;\n  }\n\n  /**\n   * Get the default output calendar to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static get defaultOutputCalendar() {\n    return defaultOutputCalendar;\n  }\n\n  /**\n   * Set the default output calendar to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static set defaultOutputCalendar(outputCalendar) {\n    defaultOutputCalendar = outputCalendar;\n  }\n\n  /**\n   * @typedef {Object} WeekSettings\n   * @property {number} firstDay\n   * @property {number} minimalDays\n   * @property {number[]} weekend\n   */\n\n  /**\n   * @return {WeekSettings|null}\n   */\n  static get defaultWeekSettings() {\n    return defaultWeekSettings;\n  }\n\n  /**\n   * Allows overriding the default locale week settings, i.e. the start of the week, the weekend and\n   * how many days are required in the first week of a year.\n   * Does not affect existing instances.\n   *\n   * @param {WeekSettings|null} weekSettings\n   */\n  static set defaultWeekSettings(weekSettings) {\n    defaultWeekSettings = validateWeekSettings(weekSettings);\n  }\n\n  /**\n   * Get the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.\n   * @type {number}\n   */\n  static get twoDigitCutoffYear() {\n    return twoDigitCutoffYear;\n  }\n\n  /**\n   * Set the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.\n   * @type {number}\n   * @example Settings.twoDigitCutoffYear = 0 // all 'yy' are interpreted as 20th century\n   * @example Settings.twoDigitCutoffYear = 99 // all 'yy' are interpreted as 21st century\n   * @example Settings.twoDigitCutoffYear = 50 // '49' -> 2049; '50' -> 1950\n   * @example Settings.twoDigitCutoffYear = 1950 // interpreted as 50\n   * @example Settings.twoDigitCutoffYear = 2050 // ALSO interpreted as 50\n   */\n  static set twoDigitCutoffYear(cutoffYear) {\n    twoDigitCutoffYear = cutoffYear % 100;\n  }\n\n  /**\n   * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n   * @type {boolean}\n   */\n  static get throwOnInvalid() {\n    return throwOnInvalid;\n  }\n\n  /**\n   * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n   * @type {boolean}\n   */\n  static set throwOnInvalid(t) {\n    throwOnInvalid = t;\n  }\n\n  /**\n   * Reset Luxon's global caches. Should only be necessary in testing scenarios.\n   * @return {void}\n   */\n  static resetCaches() {\n    Locale.resetCache();\n    IANAZone.resetCache();\n    DateTime.resetCache();\n    resetDigitRegexCache();\n  }\n}\n", "export default class Invalid {\n  constructor(reason, explanation) {\n    this.reason = reason;\n    this.explanation = explanation;\n  }\n\n  toMessage() {\n    if (this.explanation) {\n      return `${this.reason}: ${this.explanation}`;\n    } else {\n      return this.reason;\n    }\n  }\n}\n", "import {\n  integerBetween,\n  isLeapYear,\n  timeObject,\n  daysInYear,\n  daysInMonth,\n  weeksInWeekYear,\n  isInteger,\n  isUndefined,\n} from \"./util.js\";\nimport Invalid from \"./invalid.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],\n  leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\nfunction unitOutOfRange(unit, value) {\n  return new Invalid(\n    \"unit out of range\",\n    `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`\n  );\n}\n\nexport function dayOfWeek(year, month, day) {\n  const d = new Date(Date.UTC(year, month - 1, day));\n\n  if (year < 100 && year >= 0) {\n    d.setUTCFullYear(d.getUTCFullYear() - 1900);\n  }\n\n  const js = d.getUTCDay();\n\n  return js === 0 ? 7 : js;\n}\n\nfunction computeOrdinal(year, month, day) {\n  return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\n}\n\nfunction uncomputeOrdinal(year, ordinal) {\n  const table = isLeapYear(year) ? leapLadder : nonLeapLadder,\n    month0 = table.findIndex((i) => i < ordinal),\n    day = ordinal - table[month0];\n  return { month: month0 + 1, day };\n}\n\nexport function isoWeekdayToLocal(isoWeekday, startOfWeek) {\n  return ((isoWeekday - startOfWeek + 7) % 7) + 1;\n}\n\n/**\n * @private\n */\n\nexport function gregorianToWeek(gregObj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n  const { year, month, day } = gregObj,\n    ordinal = computeOrdinal(year, month, day),\n    weekday = isoWeekdayToLocal(dayOfWeek(year, month, day), startOfWeek);\n\n  let weekNumber = Math.floor((ordinal - weekday + 14 - minDaysInFirstWeek) / 7),\n    weekYear;\n\n  if (weekNumber < 1) {\n    weekYear = year - 1;\n    weekNumber = weeksInWeekYear(weekYear, minDaysInFirstWeek, startOfWeek);\n  } else if (weekNumber > weeksInWeekYear(year, minDaysInFirstWeek, startOfWeek)) {\n    weekYear = year + 1;\n    weekNumber = 1;\n  } else {\n    weekYear = year;\n  }\n\n  return { weekYear, weekNumber, weekday, ...timeObject(gregObj) };\n}\n\nexport function weekToGregorian(weekData, minDaysInFirstWeek = 4, startOfWeek = 1) {\n  const { weekYear, weekNumber, weekday } = weekData,\n    weekdayOfJan4 = isoWeekdayToLocal(dayOfWeek(weekYear, 1, minDaysInFirstWeek), startOfWeek),\n    yearInDays = daysInYear(weekYear);\n\n  let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 7 + minDaysInFirstWeek,\n    year;\n\n  if (ordinal < 1) {\n    year = weekYear - 1;\n    ordinal += daysInYear(year);\n  } else if (ordinal > yearInDays) {\n    year = weekYear + 1;\n    ordinal -= daysInYear(weekYear);\n  } else {\n    year = weekYear;\n  }\n\n  const { month, day } = uncomputeOrdinal(year, ordinal);\n  return { year, month, day, ...timeObject(weekData) };\n}\n\nexport function gregorianToOrdinal(gregData) {\n  const { year, month, day } = gregData;\n  const ordinal = computeOrdinal(year, month, day);\n  return { year, ordinal, ...timeObject(gregData) };\n}\n\nexport function ordinalToGregorian(ordinalData) {\n  const { year, ordinal } = ordinalData;\n  const { month, day } = uncomputeOrdinal(year, ordinal);\n  return { year, month, day, ...timeObject(ordinalData) };\n}\n\n/**\n * Check if local week units like localWeekday are used in obj.\n * If so, validates that they are not mixed with ISO week units and then copies them to the normal week unit properties.\n * Modifies obj in-place!\n * @param obj the object values\n */\nexport function usesLocalWeekValues(obj, loc) {\n  const hasLocaleWeekData =\n    !isUndefined(obj.localWeekday) ||\n    !isUndefined(obj.localWeekNumber) ||\n    !isUndefined(obj.localWeekYear);\n  if (hasLocaleWeekData) {\n    const hasIsoWeekData =\n      !isUndefined(obj.weekday) || !isUndefined(obj.weekNumber) || !isUndefined(obj.weekYear);\n\n    if (hasIsoWeekData) {\n      throw new ConflictingSpecificationError(\n        \"Cannot mix locale-based week fields with ISO-based week fields\"\n      );\n    }\n    if (!isUndefined(obj.localWeekday)) obj.weekday = obj.localWeekday;\n    if (!isUndefined(obj.localWeekNumber)) obj.weekNumber = obj.localWeekNumber;\n    if (!isUndefined(obj.localWeekYear)) obj.weekYear = obj.localWeekYear;\n    delete obj.localWeekday;\n    delete obj.localWeekNumber;\n    delete obj.localWeekYear;\n    return {\n      minDaysInFirstWeek: loc.getMinDaysInFirstWeek(),\n      startOfWeek: loc.getStartOfWeek(),\n    };\n  } else {\n    return { minDaysInFirstWeek: 4, startOfWeek: 1 };\n  }\n}\n\nexport function hasInvalidWeekData(obj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n  const validYear = isInteger(obj.weekYear),\n    validWeek = integerBetween(\n      obj.weekNumber,\n      1,\n      weeksInWeekYear(obj.weekYear, minDaysInFirstWeek, startOfWeek)\n    ),\n    validWeekday = integerBetween(obj.weekday, 1, 7);\n\n  if (!validYear) {\n    return unitOutOfRange(\"weekYear\", obj.weekYear);\n  } else if (!validWeek) {\n    return unitOutOfRange(\"week\", obj.weekNumber);\n  } else if (!validWeekday) {\n    return unitOutOfRange(\"weekday\", obj.weekday);\n  } else return false;\n}\n\nexport function hasInvalidOrdinalData(obj) {\n  const validYear = isInteger(obj.year),\n    validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));\n\n  if (!validYear) {\n    return unitOutOfRange(\"year\", obj.year);\n  } else if (!validOrdinal) {\n    return unitOutOfRange(\"ordinal\", obj.ordinal);\n  } else return false;\n}\n\nexport function hasInvalidGregorianData(obj) {\n  const validYear = isInteger(obj.year),\n    validMonth = integerBetween(obj.month, 1, 12),\n    validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month));\n\n  if (!validYear) {\n    return unitOutOfRange(\"year\", obj.year);\n  } else if (!validMonth) {\n    return unitOutOfRange(\"month\", obj.month);\n  } else if (!validDay) {\n    return unitOutOfRange(\"day\", obj.day);\n  } else return false;\n}\n\nexport function hasInvalidTimeData(obj) {\n  const { hour, minute, second, millisecond } = obj;\n  const validHour =\n      integerBetween(hour, 0, 23) ||\n      (hour === 24 && minute === 0 && second === 0 && millisecond === 0),\n    validMinute = integerBetween(minute, 0, 59),\n    validSecond = integerBetween(second, 0, 59),\n    validMillisecond = integerBetween(millisecond, 0, 999);\n\n  if (!validHour) {\n    return unitOutOfRange(\"hour\", hour);\n  } else if (!validMinute) {\n    return unitOutOfRange(\"minute\", minute);\n  } else if (!validSecond) {\n    return unitOutOfRange(\"second\", second);\n  } else if (!validMillisecond) {\n    return unitOutOfRange(\"millisecond\", millisecond);\n  } else return false;\n}\n", "/*\n  This is just a junk drawer, containing anything used across multiple classes.\n  Because Luxon is small(ish), this should stay small and we won't worry about splitting\n  it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area.\n*/\n\nimport { InvalidArgumentError } from \"../errors.js\";\nimport Settings from \"../settings.js\";\nimport { dayOfWeek, isoWeekdayToLocal } from \"./conversions.js\";\n\n/**\n * @private\n */\n\n// TYPES\n\nexport function isUndefined(o) {\n  return typeof o === \"undefined\";\n}\n\nexport function isNumber(o) {\n  return typeof o === \"number\";\n}\n\nexport function isInteger(o) {\n  return typeof o === \"number\" && o % 1 === 0;\n}\n\nexport function isString(o) {\n  return typeof o === \"string\";\n}\n\nexport function isDate(o) {\n  return Object.prototype.toString.call(o) === \"[object Date]\";\n}\n\n// CAPABILITIES\n\nexport function hasRelative() {\n  try {\n    return typeof Intl !== \"undefined\" && !!Intl.RelativeTimeFormat;\n  } catch (e) {\n    return false;\n  }\n}\n\nexport function hasLocaleWeekInfo() {\n  try {\n    return (\n      typeof Intl !== \"undefined\" &&\n      !!Intl.Locale &&\n      (\"weekInfo\" in Intl.Locale.prototype || \"getWeekInfo\" in Intl.Locale.prototype)\n    );\n  } catch (e) {\n    return false;\n  }\n}\n\n// OBJECTS AND ARRAYS\n\nexport function maybeArray(thing) {\n  return Array.isArray(thing) ? thing : [thing];\n}\n\nexport function bestBy(arr, by, compare) {\n  if (arr.length === 0) {\n    return undefined;\n  }\n  return arr.reduce((best, next) => {\n    const pair = [by(next), next];\n    if (!best) {\n      return pair;\n    } else if (compare(best[0], pair[0]) === best[0]) {\n      return best;\n    } else {\n      return pair;\n    }\n  }, null)[1];\n}\n\nexport function pick(obj, keys) {\n  return keys.reduce((a, k) => {\n    a[k] = obj[k];\n    return a;\n  }, {});\n}\n\nexport function hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function validateWeekSettings(settings) {\n  if (settings == null) {\n    return null;\n  } else if (typeof settings !== \"object\") {\n    throw new InvalidArgumentError(\"Week settings must be an object\");\n  } else {\n    if (\n      !integerBetween(settings.firstDay, 1, 7) ||\n      !integerBetween(settings.minimalDays, 1, 7) ||\n      !Array.isArray(settings.weekend) ||\n      settings.weekend.some((v) => !integerBetween(v, 1, 7))\n    ) {\n      throw new InvalidArgumentError(\"Invalid week settings\");\n    }\n    return {\n      firstDay: settings.firstDay,\n      minimalDays: settings.minimalDays,\n      weekend: Array.from(settings.weekend),\n    };\n  }\n}\n\n// NUMBERS AND STRINGS\n\nexport function integerBetween(thing, bottom, top) {\n  return isInteger(thing) && thing >= bottom && thing <= top;\n}\n\n// x % n but takes the sign of n instead of x\nexport function floorMod(x, n) {\n  return x - n * Math.floor(x / n);\n}\n\nexport function padStart(input, n = 2) {\n  const isNeg = input < 0;\n  let padded;\n  if (isNeg) {\n    padded = \"-\" + (\"\" + -input).padStart(n, \"0\");\n  } else {\n    padded = (\"\" + input).padStart(n, \"0\");\n  }\n  return padded;\n}\n\nexport function parseInteger(string) {\n  if (isUndefined(string) || string === null || string === \"\") {\n    return undefined;\n  } else {\n    return parseInt(string, 10);\n  }\n}\n\nexport function parseFloating(string) {\n  if (isUndefined(string) || string === null || string === \"\") {\n    return undefined;\n  } else {\n    return parseFloat(string);\n  }\n}\n\nexport function parseMillis(fraction) {\n  // Return undefined (instead of 0) in these cases, where fraction is not set\n  if (isUndefined(fraction) || fraction === null || fraction === \"\") {\n    return undefined;\n  } else {\n    const f = parseFloat(\"0.\" + fraction) * 1000;\n    return Math.floor(f);\n  }\n}\n\nexport function roundTo(number, digits, rounding = \"round\") {\n  const factor = 10 ** digits;\n  switch (rounding) {\n    case \"expand\":\n      return number > 0\n        ? Math.ceil(number * factor) / factor\n        : Math.floor(number * factor) / factor;\n    case \"trunc\":\n      return Math.trunc(number * factor) / factor;\n    case \"round\":\n      return Math.round(number * factor) / factor;\n    case \"floor\":\n      return Math.floor(number * factor) / factor;\n    case \"ceil\":\n      return Math.ceil(number * factor) / factor;\n    default:\n      throw new RangeError(`Value rounding ${rounding} is out of range`);\n  }\n}\n\n// DATE BASICS\n\nexport function isLeapYear(year) {\n  return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\nexport function daysInYear(year) {\n  return isLeapYear(year) ? 366 : 365;\n}\n\nexport function daysInMonth(year, month) {\n  const modMonth = floorMod(month - 1, 12) + 1,\n    modYear = year + (month - modMonth) / 12;\n\n  if (modMonth === 2) {\n    return isLeapYear(modYear) ? 29 : 28;\n  } else {\n    return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];\n  }\n}\n\n// convert a calendar object to a local timestamp (epoch, but with the offset baked in)\nexport function objToLocalTS(obj) {\n  let d = Date.UTC(\n    obj.year,\n    obj.month - 1,\n    obj.day,\n    obj.hour,\n    obj.minute,\n    obj.second,\n    obj.millisecond\n  );\n\n  // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that\n  if (obj.year < 100 && obj.year >= 0) {\n    d = new Date(d);\n    // set the month and day again, this is necessary because year 2000 is a leap year, but year 100 is not\n    // so if obj.year is in 99, but obj.day makes it roll over into year 100,\n    // the calculations done by Date.UTC are using year 2000 - which is incorrect\n    d.setUTCFullYear(obj.year, obj.month - 1, obj.day);\n  }\n  return +d;\n}\n\n// adapted from moment.js: https://github.com/moment/moment/blob/000ac1800e620f770f4eb31b5ae908f6167b0ab2/src/lib/units/week-calendar-utils.js\nfunction firstWeekOffset(year, minDaysInFirstWeek, startOfWeek) {\n  const fwdlw = isoWeekdayToLocal(dayOfWeek(year, 1, minDaysInFirstWeek), startOfWeek);\n  return -fwdlw + minDaysInFirstWeek - 1;\n}\n\nexport function weeksInWeekYear(weekYear, minDaysInFirstWeek = 4, startOfWeek = 1) {\n  const weekOffset = firstWeekOffset(weekYear, minDaysInFirstWeek, startOfWeek);\n  const weekOffsetNext = firstWeekOffset(weekYear + 1, minDaysInFirstWeek, startOfWeek);\n  return (daysInYear(weekYear) - weekOffset + weekOffsetNext) / 7;\n}\n\nexport function untruncateYear(year) {\n  if (year > 99) {\n    return year;\n  } else return year > Settings.twoDigitCutoffYear ? 1900 + year : 2000 + year;\n}\n\n// PARSING\n\nexport function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) {\n  const date = new Date(ts),\n    intlOpts = {\n      hourCycle: \"h23\",\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n    };\n\n  if (timeZone) {\n    intlOpts.timeZone = timeZone;\n  }\n\n  const modified = { timeZoneName: offsetFormat, ...intlOpts };\n\n  const parsed = new Intl.DateTimeFormat(locale, modified)\n    .formatToParts(date)\n    .find((m) => m.type.toLowerCase() === \"timezonename\");\n  return parsed ? parsed.value : null;\n}\n\n// signedOffset('-5', '30') -> -330\nexport function signedOffset(offHourStr, offMinuteStr) {\n  let offHour = parseInt(offHourStr, 10);\n\n  // don't || this because we want to preserve -0\n  if (Number.isNaN(offHour)) {\n    offHour = 0;\n  }\n\n  const offMin = parseInt(offMinuteStr, 10) || 0,\n    offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin;\n  return offHour * 60 + offMinSigned;\n}\n\n// COERCION\n\nexport function asNumber(value) {\n  const numericValue = Number(value);\n  if (typeof value === \"boolean\" || value === \"\" || !Number.isFinite(numericValue))\n    throw new InvalidArgumentError(`Invalid unit value ${value}`);\n  return numericValue;\n}\n\nexport function normalizeObject(obj, normalizer) {\n  const normalized = {};\n  for (const u in obj) {\n    if (hasOwnProperty(obj, u)) {\n      const v = obj[u];\n      if (v === undefined || v === null) continue;\n      normalized[normalizer(u)] = asNumber(v);\n    }\n  }\n  return normalized;\n}\n\n/**\n * Returns the offset's value as a string\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n *                          Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\nexport function formatOffset(offset, format) {\n  const hours = Math.trunc(Math.abs(offset / 60)),\n    minutes = Math.trunc(Math.abs(offset % 60)),\n    sign = offset >= 0 ? \"+\" : \"-\";\n\n  switch (format) {\n    case \"short\":\n      return `${sign}${padStart(hours, 2)}:${padStart(minutes, 2)}`;\n    case \"narrow\":\n      return `${sign}${hours}${minutes > 0 ? `:${minutes}` : \"\"}`;\n    case \"techie\":\n      return `${sign}${padStart(hours, 2)}${padStart(minutes, 2)}`;\n    default:\n      throw new RangeError(`Value format ${format} is out of range for property format`);\n  }\n}\n\nexport function timeObject(obj) {\n  return pick(obj, [\"hour\", \"minute\", \"second\", \"millisecond\"]);\n}\n", "import * as Formats from \"./formats.js\";\nimport { pick } from \"./util.js\";\n\nfunction stringify(obj) {\n  return JSON.stringify(obj, Object.keys(obj).sort());\n}\n\n/**\n * @private\n */\n\nexport const monthsLong = [\n  \"January\",\n  \"February\",\n  \"March\",\n  \"April\",\n  \"May\",\n  \"June\",\n  \"July\",\n  \"August\",\n  \"September\",\n  \"October\",\n  \"November\",\n  \"December\",\n];\n\nexport const monthsShort = [\n  \"Jan\",\n  \"Feb\",\n  \"Mar\",\n  \"Apr\",\n  \"May\",\n  \"Jun\",\n  \"Jul\",\n  \"Aug\",\n  \"Sep\",\n  \"Oct\",\n  \"Nov\",\n  \"Dec\",\n];\n\nexport const monthsNarrow = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];\n\nexport function months(length) {\n  switch (length) {\n    case \"narrow\":\n      return [...monthsNarrow];\n    case \"short\":\n      return [...monthsShort];\n    case \"long\":\n      return [...monthsLong];\n    case \"numeric\":\n      return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\n    case \"2-digit\":\n      return [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"];\n    default:\n      return null;\n  }\n}\n\nexport const weekdaysLong = [\n  \"Monday\",\n  \"Tuesday\",\n  \"Wednesday\",\n  \"Thursday\",\n  \"Friday\",\n  \"Saturday\",\n  \"Sunday\",\n];\n\nexport const weekdaysShort = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\nexport const weekdaysNarrow = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\n\nexport function weekdays(length) {\n  switch (length) {\n    case \"narrow\":\n      return [...weekdaysNarrow];\n    case \"short\":\n      return [...weekdaysShort];\n    case \"long\":\n      return [...weekdaysLong];\n    case \"numeric\":\n      return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"];\n    default:\n      return null;\n  }\n}\n\nexport const meridiems = [\"AM\", \"PM\"];\n\nexport const erasLong = [\"Before Christ\", \"Anno Domini\"];\n\nexport const erasShort = [\"BC\", \"AD\"];\n\nexport const erasNarrow = [\"B\", \"A\"];\n\nexport function eras(length) {\n  switch (length) {\n    case \"narrow\":\n      return [...erasNarrow];\n    case \"short\":\n      return [...erasShort];\n    case \"long\":\n      return [...erasLong];\n    default:\n      return null;\n  }\n}\n\nexport function meridiemForDateTime(dt) {\n  return meridiems[dt.hour < 12 ? 0 : 1];\n}\n\nexport function weekdayForDateTime(dt, length) {\n  return weekdays(length)[dt.weekday - 1];\n}\n\nexport function monthForDateTime(dt, length) {\n  return months(length)[dt.month - 1];\n}\n\nexport function eraForDateTime(dt, length) {\n  return eras(length)[dt.year < 0 ? 0 : 1];\n}\n\nexport function formatRelativeTime(unit, count, numeric = \"always\", narrow = false) {\n  const units = {\n    years: [\"year\", \"yr.\"],\n    quarters: [\"quarter\", \"qtr.\"],\n    months: [\"month\", \"mo.\"],\n    weeks: [\"week\", \"wk.\"],\n    days: [\"day\", \"day\", \"days\"],\n    hours: [\"hour\", \"hr.\"],\n    minutes: [\"minute\", \"min.\"],\n    seconds: [\"second\", \"sec.\"],\n  };\n\n  const lastable = [\"hours\", \"minutes\", \"seconds\"].indexOf(unit) === -1;\n\n  if (numeric === \"auto\" && lastable) {\n    const isDay = unit === \"days\";\n    switch (count) {\n      case 1:\n        return isDay ? \"tomorrow\" : `next ${units[unit][0]}`;\n      case -1:\n        return isDay ? \"yesterday\" : `last ${units[unit][0]}`;\n      case 0:\n        return isDay ? \"today\" : `this ${units[unit][0]}`;\n      default: // fall through\n    }\n  }\n\n  const isInPast = Object.is(count, -0) || count < 0,\n    fmtValue = Math.abs(count),\n    singular = fmtValue === 1,\n    lilUnits = units[unit],\n    fmtUnit = narrow\n      ? singular\n        ? lilUnits[1]\n        : lilUnits[2] || lilUnits[1]\n      : singular\n      ? units[unit][0]\n      : unit;\n  return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`;\n}\n\nexport function formatString(knownFormat) {\n  // these all have the offsets removed because we don't have access to them\n  // without all the intl stuff this is backfilling\n  const filtered = pick(knownFormat, [\n      \"weekday\",\n      \"era\",\n      \"year\",\n      \"month\",\n      \"day\",\n      \"hour\",\n      \"minute\",\n      \"second\",\n      \"timeZoneName\",\n      \"hourCycle\",\n    ]),\n    key = stringify(filtered),\n    dateTimeHuge = \"EEEE, LLLL d, yyyy, h:mm a\";\n  switch (key) {\n    case stringify(Formats.DATE_SHORT):\n      return \"M/d/yyyy\";\n    case stringify(Formats.DATE_MED):\n      return \"LLL d, yyyy\";\n    case stringify(Formats.DATE_MED_WITH_WEEKDAY):\n      return \"EEE, LLL d, yyyy\";\n    case stringify(Formats.DATE_FULL):\n      return \"LLLL d, yyyy\";\n    case stringify(Formats.DATE_HUGE):\n      return \"EEEE, LLLL d, yyyy\";\n    case stringify(Formats.TIME_SIMPLE):\n      return \"h:mm a\";\n    case stringify(Formats.TIME_WITH_SECONDS):\n      return \"h:mm:ss a\";\n    case stringify(Formats.TIME_WITH_SHORT_OFFSET):\n      return \"h:mm a\";\n    case stringify(Formats.TIME_WITH_LONG_OFFSET):\n      return \"h:mm a\";\n    case stringify(Formats.TIME_24_SIMPLE):\n      return \"HH:mm\";\n    case stringify(Formats.TIME_24_WITH_SECONDS):\n      return \"HH:mm:ss\";\n    case stringify(Formats.TIME_24_WITH_SHORT_OFFSET):\n      return \"HH:mm\";\n    case stringify(Formats.TIME_24_WITH_LONG_OFFSET):\n      return \"HH:mm\";\n    case stringify(Formats.DATETIME_SHORT):\n      return \"M/d/yyyy, h:mm a\";\n    case stringify(Formats.DATETIME_MED):\n      return \"LLL d, yyyy, h:mm a\";\n    case stringify(Formats.DATETIME_FULL):\n      return \"LLLL d, yyyy, h:mm a\";\n    case stringify(Formats.DATETIME_HUGE):\n      return dateTimeHuge;\n    case stringify(Formats.DATETIME_SHORT_WITH_SECONDS):\n      return \"M/d/yyyy, h:mm:ss a\";\n    case stringify(Formats.DATETIME_MED_WITH_SECONDS):\n      return \"LLL d, yyyy, h:mm:ss a\";\n    case stringify(Formats.DATETIME_MED_WITH_WEEKDAY):\n      return \"EEE, d LLL yyyy, h:mm a\";\n    case stringify(Formats.DATETIME_FULL_WITH_SECONDS):\n      return \"LLLL d, yyyy, h:mm:ss a\";\n    case stringify(Formats.DATETIME_HUGE_WITH_SECONDS):\n      return \"EEEE, LLLL d, yyyy, h:mm:ss a\";\n    default:\n      return dateTimeHuge;\n  }\n}\n", "import * as English from \"./english.js\";\nimport * as Formats from \"./formats.js\";\nimport { padStart } from \"./util.js\";\n\nfunction stringifyTokens(splits, tokenToString) {\n  let s = \"\";\n  for (const token of splits) {\n    if (token.literal) {\n      s += token.val;\n    } else {\n      s += tokenToString(token.val);\n    }\n  }\n  return s;\n}\n\nconst macroTokenToFormatOpts = {\n  D: Formats.DATE_SHORT,\n  DD: Formats.DATE_MED,\n  DDD: Formats.DATE_FULL,\n  DDDD: Formats.DATE_HUGE,\n  t: Formats.TIME_SIMPLE,\n  tt: Formats.TIME_WITH_SECONDS,\n  ttt: Formats.TIME_WITH_SHORT_OFFSET,\n  tttt: Formats.TIME_WITH_LONG_OFFSET,\n  T: Formats.TIME_24_SIMPLE,\n  TT: Formats.TIME_24_WITH_SECONDS,\n  TTT: Formats.TIME_24_WITH_SHORT_OFFSET,\n  TTTT: Formats.TIME_24_WITH_LONG_OFFSET,\n  f: Formats.DATETIME_SHORT,\n  ff: Formats.DATETIME_MED,\n  fff: Formats.DATETIME_FULL,\n  ffff: Formats.DATETIME_HUGE,\n  F: Formats.DATETIME_SHORT_WITH_SECONDS,\n  FF: Formats.DATETIME_MED_WITH_SECONDS,\n  FFF: Formats.DATETIME_FULL_WITH_SECONDS,\n  FFFF: Formats.DATETIME_HUGE_WITH_SECONDS,\n};\n\n/**\n * @private\n */\n\nexport default class Formatter {\n  static create(locale, opts = {}) {\n    return new Formatter(locale, opts);\n  }\n\n  static parseFormat(fmt) {\n    // white-space is always considered a literal in user-provided formats\n    // the \" \" token has a special meaning (see unitForToken)\n\n    let current = null,\n      currentFull = \"\",\n      bracketed = false;\n    const splits = [];\n    for (let i = 0; i < fmt.length; i++) {\n      const c = fmt.charAt(i);\n      if (c === \"'\") {\n        // turn '' into a literal signal quote instead of just skipping the empty literal\n        if (currentFull.length > 0 || bracketed) {\n          splits.push({\n            literal: bracketed || /^\\s+$/.test(currentFull),\n            val: currentFull === \"\" ? \"'\" : currentFull,\n          });\n        }\n        current = null;\n        currentFull = \"\";\n        bracketed = !bracketed;\n      } else if (bracketed) {\n        currentFull += c;\n      } else if (c === current) {\n        currentFull += c;\n      } else {\n        if (currentFull.length > 0) {\n          splits.push({ literal: /^\\s+$/.test(currentFull), val: currentFull });\n        }\n        currentFull = c;\n        current = c;\n      }\n    }\n\n    if (currentFull.length > 0) {\n      splits.push({ literal: bracketed || /^\\s+$/.test(currentFull), val: currentFull });\n    }\n\n    return splits;\n  }\n\n  static macroTokenToFormatOpts(token) {\n    return macroTokenToFormatOpts[token];\n  }\n\n  constructor(locale, formatOpts) {\n    this.opts = formatOpts;\n    this.loc = locale;\n    this.systemLoc = null;\n  }\n\n  formatWithSystemDefault(dt, opts) {\n    if (this.systemLoc === null) {\n      this.systemLoc = this.loc.redefaultToSystem();\n    }\n    const df = this.systemLoc.dtFormatter(dt, { ...this.opts, ...opts });\n    return df.format();\n  }\n\n  dtFormatter(dt, opts = {}) {\n    return this.loc.dtFormatter(dt, { ...this.opts, ...opts });\n  }\n\n  formatDateTime(dt, opts) {\n    return this.dtFormatter(dt, opts).format();\n  }\n\n  formatDateTimeParts(dt, opts) {\n    return this.dtFormatter(dt, opts).formatToParts();\n  }\n\n  formatInterval(interval, opts) {\n    const df = this.dtFormatter(interval.start, opts);\n    return df.dtf.formatRange(interval.start.toJSDate(), interval.end.toJSDate());\n  }\n\n  resolvedOptions(dt, opts) {\n    return this.dtFormatter(dt, opts).resolvedOptions();\n  }\n\n  num(n, p = 0, signDisplay = undefined) {\n    // we get some perf out of doing this here, annoyingly\n    if (this.opts.forceSimple) {\n      return padStart(n, p);\n    }\n\n    const opts = { ...this.opts };\n\n    if (p > 0) {\n      opts.padTo = p;\n    }\n    if (signDisplay) {\n      opts.signDisplay = signDisplay;\n    }\n\n    return this.loc.numberFormatter(opts).format(n);\n  }\n\n  formatDateTimeFromString(dt, fmt) {\n    const knownEnglish = this.loc.listingMode() === \"en\",\n      useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== \"gregory\",\n      string = (opts, extract) => this.loc.extract(dt, opts, extract),\n      formatOffset = (opts) => {\n        if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {\n          return \"Z\";\n        }\n\n        return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : \"\";\n      },\n      meridiem = () =>\n        knownEnglish\n          ? English.meridiemForDateTime(dt)\n          : string({ hour: \"numeric\", hourCycle: \"h12\" }, \"dayperiod\"),\n      month = (length, standalone) =>\n        knownEnglish\n          ? English.monthForDateTime(dt, length)\n          : string(standalone ? { month: length } : { month: length, day: \"numeric\" }, \"month\"),\n      weekday = (length, standalone) =>\n        knownEnglish\n          ? English.weekdayForDateTime(dt, length)\n          : string(\n              standalone ? { weekday: length } : { weekday: length, month: \"long\", day: \"numeric\" },\n              \"weekday\"\n            ),\n      maybeMacro = (token) => {\n        const formatOpts = Formatter.macroTokenToFormatOpts(token);\n        if (formatOpts) {\n          return this.formatWithSystemDefault(dt, formatOpts);\n        } else {\n          return token;\n        }\n      },\n      era = (length) =>\n        knownEnglish ? English.eraForDateTime(dt, length) : string({ era: length }, \"era\"),\n      tokenToString = (token) => {\n        // Where possible: https://cldr.unicode.org/translation/date-time/date-time-symbols\n        switch (token) {\n          // ms\n          case \"S\":\n            return this.num(dt.millisecond);\n          case \"u\":\n          // falls through\n          case \"SSS\":\n            return this.num(dt.millisecond, 3);\n          // seconds\n          case \"s\":\n            return this.num(dt.second);\n          case \"ss\":\n            return this.num(dt.second, 2);\n          // fractional seconds\n          case \"uu\":\n            return this.num(Math.floor(dt.millisecond / 10), 2);\n          case \"uuu\":\n            return this.num(Math.floor(dt.millisecond / 100));\n          // minutes\n          case \"m\":\n            return this.num(dt.minute);\n          case \"mm\":\n            return this.num(dt.minute, 2);\n          // hours\n          case \"h\":\n            return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);\n          case \"hh\":\n            return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);\n          case \"H\":\n            return this.num(dt.hour);\n          case \"HH\":\n            return this.num(dt.hour, 2);\n          // offset\n          case \"Z\":\n            // like +6\n            return formatOffset({ format: \"narrow\", allowZ: this.opts.allowZ });\n          case \"ZZ\":\n            // like +06:00\n            return formatOffset({ format: \"short\", allowZ: this.opts.allowZ });\n          case \"ZZZ\":\n            // like +0600\n            return formatOffset({ format: \"techie\", allowZ: this.opts.allowZ });\n          case \"ZZZZ\":\n            // like EST\n            return dt.zone.offsetName(dt.ts, { format: \"short\", locale: this.loc.locale });\n          case \"ZZZZZ\":\n            // like Eastern Standard Time\n            return dt.zone.offsetName(dt.ts, { format: \"long\", locale: this.loc.locale });\n          // zone\n          case \"z\":\n            // like America/New_York\n            return dt.zoneName;\n          // meridiems\n          case \"a\":\n            return meridiem();\n          // dates\n          case \"d\":\n            return useDateTimeFormatter ? string({ day: \"numeric\" }, \"day\") : this.num(dt.day);\n          case \"dd\":\n            return useDateTimeFormatter ? string({ day: \"2-digit\" }, \"day\") : this.num(dt.day, 2);\n          // weekdays - standalone\n          case \"c\":\n            // like 1\n            return this.num(dt.weekday);\n          case \"ccc\":\n            // like 'Tues'\n            return weekday(\"short\", true);\n          case \"cccc\":\n            // like 'Tuesday'\n            return weekday(\"long\", true);\n          case \"ccccc\":\n            // like 'T'\n            return weekday(\"narrow\", true);\n          // weekdays - format\n          case \"E\":\n            // like 1\n            return this.num(dt.weekday);\n          case \"EEE\":\n            // like 'Tues'\n            return weekday(\"short\", false);\n          case \"EEEE\":\n            // like 'Tuesday'\n            return weekday(\"long\", false);\n          case \"EEEEE\":\n            // like 'T'\n            return weekday(\"narrow\", false);\n          // months - standalone\n          case \"L\":\n            // like 1\n            return useDateTimeFormatter\n              ? string({ month: \"numeric\", day: \"numeric\" }, \"month\")\n              : this.num(dt.month);\n          case \"LL\":\n            // like 01, doesn't seem to work\n            return useDateTimeFormatter\n              ? string({ month: \"2-digit\", day: \"numeric\" }, \"month\")\n              : this.num(dt.month, 2);\n          case \"LLL\":\n            // like Jan\n            return month(\"short\", true);\n          case \"LLLL\":\n            // like January\n            return month(\"long\", true);\n          case \"LLLLL\":\n            // like J\n            return month(\"narrow\", true);\n          // months - format\n          case \"M\":\n            // like 1\n            return useDateTimeFormatter\n              ? string({ month: \"numeric\" }, \"month\")\n              : this.num(dt.month);\n          case \"MM\":\n            // like 01\n            return useDateTimeFormatter\n              ? string({ month: \"2-digit\" }, \"month\")\n              : this.num(dt.month, 2);\n          case \"MMM\":\n            // like Jan\n            return month(\"short\", false);\n          case \"MMMM\":\n            // like January\n            return month(\"long\", false);\n          case \"MMMMM\":\n            // like J\n            return month(\"narrow\", false);\n          // years\n          case \"y\":\n            // like 2014\n            return useDateTimeFormatter ? string({ year: \"numeric\" }, \"year\") : this.num(dt.year);\n          case \"yy\":\n            // like 14\n            return useDateTimeFormatter\n              ? string({ year: \"2-digit\" }, \"year\")\n              : this.num(dt.year.toString().slice(-2), 2);\n          case \"yyyy\":\n            // like 0012\n            return useDateTimeFormatter\n              ? string({ year: \"numeric\" }, \"year\")\n              : this.num(dt.year, 4);\n          case \"yyyyyy\":\n            // like 000012\n            return useDateTimeFormatter\n              ? string({ year: \"numeric\" }, \"year\")\n              : this.num(dt.year, 6);\n          // eras\n          case \"G\":\n            // like AD\n            return era(\"short\");\n          case \"GG\":\n            // like Anno Domini\n            return era(\"long\");\n          case \"GGGGG\":\n            return era(\"narrow\");\n          case \"kk\":\n            return this.num(dt.weekYear.toString().slice(-2), 2);\n          case \"kkkk\":\n            return this.num(dt.weekYear, 4);\n          case \"W\":\n            return this.num(dt.weekNumber);\n          case \"WW\":\n            return this.num(dt.weekNumber, 2);\n          case \"n\":\n            return this.num(dt.localWeekNumber);\n          case \"nn\":\n            return this.num(dt.localWeekNumber, 2);\n          case \"ii\":\n            return this.num(dt.localWeekYear.toString().slice(-2), 2);\n          case \"iiii\":\n            return this.num(dt.localWeekYear, 4);\n          case \"o\":\n            return this.num(dt.ordinal);\n          case \"ooo\":\n            return this.num(dt.ordinal, 3);\n          case \"q\":\n            // like 1\n            return this.num(dt.quarter);\n          case \"qq\":\n            // like 01\n            return this.num(dt.quarter, 2);\n          case \"X\":\n            return this.num(Math.floor(dt.ts / 1000));\n          case \"x\":\n            return this.num(dt.ts);\n          default:\n            return maybeMacro(token);\n        }\n      };\n\n    return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\n  }\n\n  formatDurationFromString(dur, fmt) {\n    const invertLargest = this.opts.signMode === \"negativeLargestOnly\" ? -1 : 1;\n    const tokenToField = (token) => {\n        switch (token[0]) {\n          case \"S\":\n            return \"milliseconds\";\n          case \"s\":\n            return \"seconds\";\n          case \"m\":\n            return \"minutes\";\n          case \"h\":\n            return \"hours\";\n          case \"d\":\n            return \"days\";\n          case \"w\":\n            return \"weeks\";\n          case \"M\":\n            return \"months\";\n          case \"y\":\n            return \"years\";\n          default:\n            return null;\n        }\n      },\n      tokenToString = (lildur, info) => (token) => {\n        const mapped = tokenToField(token);\n        if (mapped) {\n          const inversionFactor =\n            info.isNegativeDuration && mapped !== info.largestUnit ? invertLargest : 1;\n          let signDisplay;\n          if (this.opts.signMode === \"negativeLargestOnly\" && mapped !== info.largestUnit) {\n            signDisplay = \"never\";\n          } else if (this.opts.signMode === \"all\") {\n            signDisplay = \"always\";\n          } else {\n            // \"auto\" and \"negative\" are the same, but \"auto\" has better support\n            signDisplay = \"auto\";\n          }\n          return this.num(lildur.get(mapped) * inversionFactor, token.length, signDisplay);\n        } else {\n          return token;\n        }\n      },\n      tokens = Formatter.parseFormat(fmt),\n      realTokens = tokens.reduce(\n        (found, { literal, val }) => (literal ? found : found.concat(val)),\n        []\n      ),\n      collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter((t) => t)),\n      durationInfo = {\n        isNegativeDuration: collapsed < 0,\n        // this relies on \"collapsed\" being based on \"shiftTo\", which builds up the object\n        // in order\n        largestUnit: Object.keys(collapsed.values)[0],\n      };\n    return stringifyTokens(tokens, tokenToString(collapsed, durationInfo));\n  }\n}\n", "import {\n  untruncateYear,\n  signedOffset,\n  parseInteger,\n  parseMillis,\n  isUndefined,\n  parseFloating,\n} from \"./util.js\";\nimport * as English from \"./english.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n/*\n * This file handles parsing for well-specified formats. Here's how it works:\n * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match.\n * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object\n * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence.\n * Extractors can take a \"cursor\" representing the offset in the match to look at. This makes it easy to combine extractors.\n * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions.\n * Some extractions are super dumb and simpleParse and fromStrings help DRY them.\n */\n\nconst ianaRegex = /[A-Za-z_+-]{1,256}(?::?\\/[A-Za-z0-9_+-]{1,256}(?:\\/[A-Za-z0-9_+-]{1,256})?)?/;\n\nfunction combineRegexes(...regexes) {\n  const full = regexes.reduce((f, r) => f + r.source, \"\");\n  return RegExp(`^${full}$`);\n}\n\nfunction combineExtractors(...extractors) {\n  return (m) =>\n    extractors\n      .reduce(\n        ([mergedVals, mergedZone, cursor], ex) => {\n          const [val, zone, next] = ex(m, cursor);\n          return [{ ...mergedVals, ...val }, zone || mergedZone, next];\n        },\n        [{}, null, 1]\n      )\n      .slice(0, 2);\n}\n\nfunction parse(s, ...patterns) {\n  if (s == null) {\n    return [null, null];\n  }\n\n  for (const [regex, extractor] of patterns) {\n    const m = regex.exec(s);\n    if (m) {\n      return extractor(m);\n    }\n  }\n  return [null, null];\n}\n\nfunction simpleParse(...keys) {\n  return (match, cursor) => {\n    const ret = {};\n    let i;\n\n    for (i = 0; i < keys.length; i++) {\n      ret[keys[i]] = parseInteger(match[cursor + i]);\n    }\n    return [ret, null, cursor + i];\n  };\n}\n\n// ISO and SQL parsing\nconst offsetRegex = /(?:([Zz])|([+-]\\d\\d)(?::?(\\d\\d))?)/;\nconst isoExtendedZone = `(?:${offsetRegex.source}?(?:\\\\[(${ianaRegex.source})\\\\])?)?`;\nconst isoTimeBaseRegex = /(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,30}))?)?)?/;\nconst isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${isoExtendedZone}`);\nconst isoTimeExtensionRegex = RegExp(`(?:[Tt]${isoTimeRegex.source})?`);\nconst isoYmdRegex = /([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/;\nconst isoWeekRegex = /(\\d{4})-?W(\\d\\d)(?:-?(\\d))?/;\nconst isoOrdinalRegex = /(\\d{4})-?(\\d{3})/;\nconst extractISOWeekData = simpleParse(\"weekYear\", \"weekNumber\", \"weekDay\");\nconst extractISOOrdinalData = simpleParse(\"year\", \"ordinal\");\nconst sqlYmdRegex = /(\\d{4})-(\\d\\d)-(\\d\\d)/; // dumbed-down version of the ISO one\nconst sqlTimeRegex = RegExp(\n  `${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`\n);\nconst sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`);\n\nfunction int(match, pos, fallback) {\n  const m = match[pos];\n  return isUndefined(m) ? fallback : parseInteger(m);\n}\n\nfunction extractISOYmd(match, cursor) {\n  const item = {\n    year: int(match, cursor),\n    month: int(match, cursor + 1, 1),\n    day: int(match, cursor + 2, 1),\n  };\n\n  return [item, null, cursor + 3];\n}\n\nfunction extractISOTime(match, cursor) {\n  const item = {\n    hours: int(match, cursor, 0),\n    minutes: int(match, cursor + 1, 0),\n    seconds: int(match, cursor + 2, 0),\n    milliseconds: parseMillis(match[cursor + 3]),\n  };\n\n  return [item, null, cursor + 4];\n}\n\nfunction extractISOOffset(match, cursor) {\n  const local = !match[cursor] && !match[cursor + 1],\n    fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]),\n    zone = local ? null : FixedOffsetZone.instance(fullOffset);\n  return [{}, zone, cursor + 3];\n}\n\nfunction extractIANAZone(match, cursor) {\n  const zone = match[cursor] ? IANAZone.create(match[cursor]) : null;\n  return [{}, zone, cursor + 1];\n}\n\n// ISO time parsing\n\nconst isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`);\n\n// ISO duration parsing\n\nconst isoDuration =\n  /^-?P(?:(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)Y)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)W)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)D)?(?:T(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)H)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20})(?:[.,](-?\\d{1,20}))?S)?)?)$/;\n\nfunction extractISODuration(match) {\n  const [s, yearStr, monthStr, weekStr, dayStr, hourStr, minuteStr, secondStr, millisecondsStr] =\n    match;\n\n  const hasNegativePrefix = s[0] === \"-\";\n  const negativeSeconds = secondStr && secondStr[0] === \"-\";\n\n  const maybeNegate = (num, force = false) =>\n    num !== undefined && (force || (num && hasNegativePrefix)) ? -num : num;\n\n  return [\n    {\n      years: maybeNegate(parseFloating(yearStr)),\n      months: maybeNegate(parseFloating(monthStr)),\n      weeks: maybeNegate(parseFloating(weekStr)),\n      days: maybeNegate(parseFloating(dayStr)),\n      hours: maybeNegate(parseFloating(hourStr)),\n      minutes: maybeNegate(parseFloating(minuteStr)),\n      seconds: maybeNegate(parseFloating(secondStr), secondStr === \"-0\"),\n      milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds),\n    },\n  ];\n}\n\n// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York\n// and not just that we're in -240 *right now*. But since I don't think these are used that often\n// I'm just going to ignore that\nconst obsOffsets = {\n  GMT: 0,\n  EDT: -4 * 60,\n  EST: -5 * 60,\n  CDT: -5 * 60,\n  CST: -6 * 60,\n  MDT: -6 * 60,\n  MST: -7 * 60,\n  PDT: -7 * 60,\n  PST: -8 * 60,\n};\n\nfunction fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n  const result = {\n    year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),\n    month: English.monthsShort.indexOf(monthStr) + 1,\n    day: parseInteger(dayStr),\n    hour: parseInteger(hourStr),\n    minute: parseInteger(minuteStr),\n  };\n\n  if (secondStr) result.second = parseInteger(secondStr);\n  if (weekdayStr) {\n    result.weekday =\n      weekdayStr.length > 3\n        ? English.weekdaysLong.indexOf(weekdayStr) + 1\n        : English.weekdaysShort.indexOf(weekdayStr) + 1;\n  }\n\n  return result;\n}\n\n// RFC 2822/5322\nconst rfc2822 =\n  /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;\n\nfunction extractRFC2822(match) {\n  const [\n      ,\n      weekdayStr,\n      dayStr,\n      monthStr,\n      yearStr,\n      hourStr,\n      minuteStr,\n      secondStr,\n      obsOffset,\n      milOffset,\n      offHourStr,\n      offMinuteStr,\n    ] = match,\n    result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n\n  let offset;\n  if (obsOffset) {\n    offset = obsOffsets[obsOffset];\n  } else if (milOffset) {\n    offset = 0;\n  } else {\n    offset = signedOffset(offHourStr, offMinuteStr);\n  }\n\n  return [result, new FixedOffsetZone(offset)];\n}\n\nfunction preprocessRFC2822(s) {\n  // Remove comments and folding whitespace and replace multiple-spaces with a single space\n  return s\n    .replace(/\\([^()]*\\)|[\\n\\t]/g, \" \")\n    .replace(/(\\s\\s+)/g, \" \")\n    .trim();\n}\n\n// http date\n\nconst rfc1123 =\n    /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n  rfc850 =\n    /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n  ascii =\n    /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;\n\nfunction extractRFC1123Or850(match) {\n  const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match,\n    result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n  return [result, FixedOffsetZone.utcInstance];\n}\n\nfunction extractASCII(match) {\n  const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match,\n    result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n  return [result, FixedOffsetZone.utcInstance];\n}\n\nconst isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);\nconst isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);\nconst isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);\nconst isoTimeCombinedRegex = combineRegexes(isoTimeRegex);\n\nconst extractISOYmdTimeAndOffset = combineExtractors(\n  extractISOYmd,\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\nconst extractISOWeekTimeAndOffset = combineExtractors(\n  extractISOWeekData,\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\nconst extractISOOrdinalDateAndTime = combineExtractors(\n  extractISOOrdinalData,\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\nconst extractISOTimeAndOffset = combineExtractors(\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\n\n/*\n * @private\n */\n\nexport function parseISODate(s) {\n  return parse(\n    s,\n    [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n    [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset],\n    [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime],\n    [isoTimeCombinedRegex, extractISOTimeAndOffset]\n  );\n}\n\nexport function parseRFC2822Date(s) {\n  return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n}\n\nexport function parseHTTPDate(s) {\n  return parse(\n    s,\n    [rfc1123, extractRFC1123Or850],\n    [rfc850, extractRFC1123Or850],\n    [ascii, extractASCII]\n  );\n}\n\nexport function parseISODuration(s) {\n  return parse(s, [isoDuration, extractISODuration]);\n}\n\nconst extractISOTimeOnly = combineExtractors(extractISOTime);\n\nexport function parseISOTimeOnly(s) {\n  return parse(s, [isoTimeOnly, extractISOTimeOnly]);\n}\n\nconst sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);\nconst sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);\n\nconst extractISOTimeOffsetAndIANAZone = combineExtractors(\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\n\nexport function parseSQL(s) {\n  return parse(\n    s,\n    [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n    [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]\n  );\n}\n", "import { InvalidArgumentError, InvalidDurationError, InvalidUnitError } from \"./errors.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Locale from \"./impl/locale.js\";\nimport { parseISODuration, parseISOTimeOnly } from \"./impl/regexParser.js\";\nimport {\n  asNumber,\n  hasOwnProperty,\n  isNumber,\n  isUndefined,\n  normalizeObject,\n  roundTo,\n} from \"./impl/util.js\";\nimport Settings from \"./settings.js\";\nimport DateTime from \"./datetime.js\";\n\nconst INVALID = \"Invalid Duration\";\n\n// unit conversion constants\nexport const lowOrderMatrix = {\n    weeks: {\n      days: 7,\n      hours: 7 * 24,\n      minutes: 7 * 24 * 60,\n      seconds: 7 * 24 * 60 * 60,\n      milliseconds: 7 * 24 * 60 * 60 * 1000,\n    },\n    days: {\n      hours: 24,\n      minutes: 24 * 60,\n      seconds: 24 * 60 * 60,\n      milliseconds: 24 * 60 * 60 * 1000,\n    },\n    hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1000 },\n    minutes: { seconds: 60, milliseconds: 60 * 1000 },\n    seconds: { milliseconds: 1000 },\n  },\n  casualMatrix = {\n    years: {\n      quarters: 4,\n      months: 12,\n      weeks: 52,\n      days: 365,\n      hours: 365 * 24,\n      minutes: 365 * 24 * 60,\n      seconds: 365 * 24 * 60 * 60,\n      milliseconds: 365 * 24 * 60 * 60 * 1000,\n    },\n    quarters: {\n      months: 3,\n      weeks: 13,\n      days: 91,\n      hours: 91 * 24,\n      minutes: 91 * 24 * 60,\n      seconds: 91 * 24 * 60 * 60,\n      milliseconds: 91 * 24 * 60 * 60 * 1000,\n    },\n    months: {\n      weeks: 4,\n      days: 30,\n      hours: 30 * 24,\n      minutes: 30 * 24 * 60,\n      seconds: 30 * 24 * 60 * 60,\n      milliseconds: 30 * 24 * 60 * 60 * 1000,\n    },\n\n    ...lowOrderMatrix,\n  },\n  daysInYearAccurate = 146097.0 / 400,\n  daysInMonthAccurate = 146097.0 / 4800,\n  accurateMatrix = {\n    years: {\n      quarters: 4,\n      months: 12,\n      weeks: daysInYearAccurate / 7,\n      days: daysInYearAccurate,\n      hours: daysInYearAccurate * 24,\n      minutes: daysInYearAccurate * 24 * 60,\n      seconds: daysInYearAccurate * 24 * 60 * 60,\n      milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000,\n    },\n    quarters: {\n      months: 3,\n      weeks: daysInYearAccurate / 28,\n      days: daysInYearAccurate / 4,\n      hours: (daysInYearAccurate * 24) / 4,\n      minutes: (daysInYearAccurate * 24 * 60) / 4,\n      seconds: (daysInYearAccurate * 24 * 60 * 60) / 4,\n      milliseconds: (daysInYearAccurate * 24 * 60 * 60 * 1000) / 4,\n    },\n    months: {\n      weeks: daysInMonthAccurate / 7,\n      days: daysInMonthAccurate,\n      hours: daysInMonthAccurate * 24,\n      minutes: daysInMonthAccurate * 24 * 60,\n      seconds: daysInMonthAccurate * 24 * 60 * 60,\n      milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000,\n    },\n    ...lowOrderMatrix,\n  };\n\n// units ordered by size\nconst orderedUnits = [\n  \"years\",\n  \"quarters\",\n  \"months\",\n  \"weeks\",\n  \"days\",\n  \"hours\",\n  \"minutes\",\n  \"seconds\",\n  \"milliseconds\",\n];\n\nconst reverseUnits = orderedUnits.slice(0).reverse();\n\n// clone really means \"create another instance just like this one, but with these changes\"\nfunction clone(dur, alts, clear = false) {\n  // deep merge for vals\n  const conf = {\n    values: clear ? alts.values : { ...dur.values, ...(alts.values || {}) },\n    loc: dur.loc.clone(alts.loc),\n    conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy,\n    matrix: alts.matrix || dur.matrix,\n  };\n  return new Duration(conf);\n}\n\nfunction durationToMillis(matrix, vals) {\n  let sum = vals.milliseconds ?? 0;\n  for (const unit of reverseUnits.slice(1)) {\n    if (vals[unit]) {\n      sum += vals[unit] * matrix[unit][\"milliseconds\"];\n    }\n  }\n  return sum;\n}\n\n// NB: mutates parameters\nfunction normalizeValues(matrix, vals) {\n  // the logic below assumes the overall value of the duration is positive\n  // if this is not the case, factor is used to make it so\n  const factor = durationToMillis(matrix, vals) < 0 ? -1 : 1;\n\n  orderedUnits.reduceRight((previous, current) => {\n    if (!isUndefined(vals[current])) {\n      if (previous) {\n        const previousVal = vals[previous] * factor;\n        const conv = matrix[current][previous];\n\n        // if (previousVal < 0):\n        // lower order unit is negative (e.g. { years: 2, days: -2 })\n        // normalize this by reducing the higher order unit by the appropriate amount\n        // and increasing the lower order unit\n        // this can never make the higher order unit negative, because this function only operates\n        // on positive durations, so the amount of time represented by the lower order unit cannot\n        // be larger than the higher order unit\n        // else:\n        // lower order unit is positive (e.g. { years: 2, days: 450 } or { years: -2, days: 450 })\n        // in this case we attempt to convert as much as possible from the lower order unit into\n        // the higher order one\n        //\n        // Math.floor takes care of both of these cases, rounding away from 0\n        // if previousVal < 0 it makes the absolute value larger\n        // if previousVal >= it makes the absolute value smaller\n        const rollUp = Math.floor(previousVal / conv);\n        vals[current] += rollUp * factor;\n        vals[previous] -= rollUp * conv * factor;\n      }\n      return current;\n    } else {\n      return previous;\n    }\n  }, null);\n\n  // try to convert any decimals into smaller units if possible\n  // for example for { years: 2.5, days: 0, seconds: 0 } we want to get { years: 2, days: 182, hours: 12 }\n  orderedUnits.reduce((previous, current) => {\n    if (!isUndefined(vals[current])) {\n      if (previous) {\n        const fraction = vals[previous] % 1;\n        vals[previous] -= fraction;\n        vals[current] += fraction * matrix[previous][current];\n      }\n      return current;\n    } else {\n      return previous;\n    }\n  }, null);\n}\n\n// Remove all properties with a value of 0 from an object\nfunction removeZeroes(vals) {\n  const newVals = {};\n  for (const [key, value] of Object.entries(vals)) {\n    if (value !== 0) {\n      newVals[key] = value;\n    }\n  }\n  return newVals;\n}\n\n/**\n * A Duration object represents a period of time, like \"2 months\" or \"1 day, 1 hour\". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime#plus} to add a Duration object to a DateTime, producing another DateTime.\n *\n * Here is a brief overview of commonly used methods and getters in Duration:\n *\n * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}.\n * * **Unit values** See the {@link Duration#years}, {@link Duration#months}, {@link Duration#weeks}, {@link Duration#days}, {@link Duration#hours}, {@link Duration#minutes}, {@link Duration#seconds}, {@link Duration#milliseconds} accessors.\n * * **Configuration** See  {@link Duration#locale} and {@link Duration#numberingSystem} accessors.\n * * **Transformation** To create new Durations out of old ones use {@link Duration#plus}, {@link Duration#minus}, {@link Duration#normalize}, {@link Duration#set}, {@link Duration#reconfigure}, {@link Duration#shiftTo}, and {@link Duration#negate}.\n * * **Output** To convert the Duration into other representations, see {@link Duration#as}, {@link Duration#toISO}, {@link Duration#toFormat}, and {@link Duration#toJSON}\n *\n * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.\n */\nexport default class Duration {\n  /**\n   * @private\n   */\n  constructor(config) {\n    const accurate = config.conversionAccuracy === \"longterm\" || false;\n    let matrix = accurate ? accurateMatrix : casualMatrix;\n\n    if (config.matrix) {\n      matrix = config.matrix;\n    }\n\n    /**\n     * @access private\n     */\n    this.values = config.values;\n    /**\n     * @access private\n     */\n    this.loc = config.loc || Locale.create();\n    /**\n     * @access private\n     */\n    this.conversionAccuracy = accurate ? \"longterm\" : \"casual\";\n    /**\n     * @access private\n     */\n    this.invalid = config.invalid || null;\n    /**\n     * @access private\n     */\n    this.matrix = matrix;\n    /**\n     * @access private\n     */\n    this.isLuxonDuration = true;\n  }\n\n  /**\n   * Create Duration from a number of milliseconds.\n   * @param {number} count of milliseconds\n   * @param {Object} opts - options for parsing\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @return {Duration}\n   */\n  static fromMillis(count, opts) {\n    return Duration.fromObject({ milliseconds: count }, opts);\n  }\n\n  /**\n   * Create a Duration from a JavaScript object with keys like 'years' and 'hours'.\n   * If this object is empty then a zero milliseconds duration is returned.\n   * @param {Object} obj - the object to create the DateTime from\n   * @param {number} obj.years\n   * @param {number} obj.quarters\n   * @param {number} obj.months\n   * @param {number} obj.weeks\n   * @param {number} obj.days\n   * @param {number} obj.hours\n   * @param {number} obj.minutes\n   * @param {number} obj.seconds\n   * @param {number} obj.milliseconds\n   * @param {Object} [opts=[]] - options for creating this Duration\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n   * @param {string} [opts.matrix=Object] - the custom conversion system to use\n   * @return {Duration}\n   */\n  static fromObject(obj, opts = {}) {\n    if (obj == null || typeof obj !== \"object\") {\n      throw new InvalidArgumentError(\n        `Duration.fromObject: argument expected to be an object, got ${\n          obj === null ? \"null\" : typeof obj\n        }`\n      );\n    }\n\n    return new Duration({\n      values: normalizeObject(obj, Duration.normalizeUnit),\n      loc: Locale.fromObject(opts),\n      conversionAccuracy: opts.conversionAccuracy,\n      matrix: opts.matrix,\n    });\n  }\n\n  /**\n   * Create a Duration from DurationLike.\n   *\n   * @param {Object | number | Duration} durationLike\n   * One of:\n   * - object with keys like 'years' and 'hours'.\n   * - number representing milliseconds\n   * - Duration instance\n   * @return {Duration}\n   */\n  static fromDurationLike(durationLike) {\n    if (isNumber(durationLike)) {\n      return Duration.fromMillis(durationLike);\n    } else if (Duration.isDuration(durationLike)) {\n      return durationLike;\n    } else if (typeof durationLike === \"object\") {\n      return Duration.fromObject(durationLike);\n    } else {\n      throw new InvalidArgumentError(\n        `Unknown duration argument ${durationLike} of type ${typeof durationLike}`\n      );\n    }\n  }\n\n  /**\n   * Create a Duration from an ISO 8601 duration string.\n   * @param {string} text - text to parse\n   * @param {Object} opts - options for parsing\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n   * @param {string} [opts.matrix=Object] - the preset conversion system to use\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n   * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }\n   * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }\n   * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }\n   * @return {Duration}\n   */\n  static fromISO(text, opts) {\n    const [parsed] = parseISODuration(text);\n    if (parsed) {\n      return Duration.fromObject(parsed, opts);\n    } else {\n      return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n    }\n  }\n\n  /**\n   * Create a Duration from an ISO 8601 time string.\n   * @param {string} text - text to parse\n   * @param {Object} opts - options for parsing\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n   * @param {string} [opts.matrix=Object] - the conversion system to use\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n   * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 }\n   * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @return {Duration}\n   */\n  static fromISOTime(text, opts) {\n    const [parsed] = parseISOTimeOnly(text);\n    if (parsed) {\n      return Duration.fromObject(parsed, opts);\n    } else {\n      return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n    }\n  }\n\n  /**\n   * Create an invalid Duration.\n   * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent\n   * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n   * @return {Duration}\n   */\n  static invalid(reason, explanation = null) {\n    if (!reason) {\n      throw new InvalidArgumentError(\"need to specify a reason the Duration is invalid\");\n    }\n\n    const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n    if (Settings.throwOnInvalid) {\n      throw new InvalidDurationError(invalid);\n    } else {\n      return new Duration({ invalid });\n    }\n  }\n\n  /**\n   * @private\n   */\n  static normalizeUnit(unit) {\n    const normalized = {\n      year: \"years\",\n      years: \"years\",\n      quarter: \"quarters\",\n      quarters: \"quarters\",\n      month: \"months\",\n      months: \"months\",\n      week: \"weeks\",\n      weeks: \"weeks\",\n      day: \"days\",\n      days: \"days\",\n      hour: \"hours\",\n      hours: \"hours\",\n      minute: \"minutes\",\n      minutes: \"minutes\",\n      second: \"seconds\",\n      seconds: \"seconds\",\n      millisecond: \"milliseconds\",\n      milliseconds: \"milliseconds\",\n    }[unit ? unit.toLowerCase() : unit];\n\n    if (!normalized) throw new InvalidUnitError(unit);\n\n    return normalized;\n  }\n\n  /**\n   * Check if an object is a Duration. Works across context boundaries\n   * @param {object} o\n   * @return {boolean}\n   */\n  static isDuration(o) {\n    return (o && o.isLuxonDuration) || false;\n  }\n\n  /**\n   * Get  the locale of a Duration, such 'en-GB'\n   * @type {string}\n   */\n  get locale() {\n    return this.isValid ? this.loc.locale : null;\n  }\n\n  /**\n   * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration\n   *\n   * @type {string}\n   */\n  get numberingSystem() {\n    return this.isValid ? this.loc.numberingSystem : null;\n  }\n\n  /**\n   * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:\n   * * `S` for milliseconds\n   * * `s` for seconds\n   * * `m` for minutes\n   * * `h` for hours\n   * * `d` for days\n   * * `w` for weeks\n   * * `M` for months\n   * * `y` for years\n   * Notes:\n   * * Add padding by repeating the token, e.g. \"yy\" pads the years to two digits, \"hhhh\" pads the hours out to four digits\n   * * Tokens can be escaped by wrapping with single quotes.\n   * * The duration will be converted to the set of units in the format string using {@link Duration#shiftTo} and the Durations's conversion accuracy setting.\n   * @param {string} fmt - the format string\n   * @param {Object} opts - options\n   * @param {boolean} [opts.floor=true] - floor numerical values\n   * @param {'negative'|'all'|'negativeLargestOnly'} [opts.signMode=negative] - How to handle signs\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"y d s\") //=> \"1 6 2\"\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"yy dd sss\") //=> \"01 06 002\"\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"M S\") //=> \"12 518402000\"\n   * @example Duration.fromObject({ days: 6, seconds: 2 }).toFormat(\"d s\", { signMode: \"all\" }) //=> \"+6 +2\"\n   * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat(\"d s\", { signMode: \"all\" }) //=> \"-6 -2\"\n   * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat(\"d s\", { signMode: \"negativeLargestOnly\" }) //=> \"-6 2\"\n   * @return {string}\n   */\n  toFormat(fmt, opts = {}) {\n    // reverse-compat since 1.2; we always round down now, never up, and we do it by default\n    const fmtOpts = {\n      ...opts,\n      floor: opts.round !== false && opts.floor !== false,\n    };\n    return this.isValid\n      ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt)\n      : INVALID;\n  }\n\n  /**\n   * Returns a string representation of a Duration with all units included.\n   * To modify its behavior, use `listStyle` and any Intl.NumberFormat option, though `unitDisplay` is especially relevant.\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#options\n   * @param {Object} opts - Formatting options. Accepts the same keys as the options parameter of the native `Intl.NumberFormat` constructor, as well as `listStyle`.\n   * @param {string} [opts.listStyle='narrow'] - How to format the merged list. Corresponds to the `style` property of the options parameter of the native `Intl.ListFormat` constructor.\n   * @param {boolean} [opts.showZeros=true] - Show all units previously used by the duration even if they are zero\n   * @example\n   * ```js\n   * var dur = Duration.fromObject({ months: 1, weeks: 0, hours: 5, minutes: 6 })\n   * dur.toHuman() //=> '1 month, 0 weeks, 5 hours, 6 minutes'\n   * dur.toHuman({ listStyle: \"long\" }) //=> '1 month, 0 weeks, 5 hours, and 6 minutes'\n   * dur.toHuman({ unitDisplay: \"short\" }) //=> '1 mth, 0 wks, 5 hr, 6 min'\n   * dur.toHuman({ showZeros: false }) //=> '1 month, 5 hours, 6 minutes'\n   * ```\n   */\n  toHuman(opts = {}) {\n    if (!this.isValid) return INVALID;\n\n    const showZeros = opts.showZeros !== false;\n\n    const l = orderedUnits\n      .map((unit) => {\n        const val = this.values[unit];\n        if (isUndefined(val) || (val === 0 && !showZeros)) {\n          return null;\n        }\n        return this.loc\n          .numberFormatter({ style: \"unit\", unitDisplay: \"long\", ...opts, unit: unit.slice(0, -1) })\n          .format(val);\n      })\n      .filter((n) => n);\n\n    return this.loc\n      .listFormatter({ type: \"conjunction\", style: opts.listStyle || \"narrow\", ...opts })\n      .format(l);\n  }\n\n  /**\n   * Returns a JavaScript object with this Duration's values.\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }\n   * @return {Object}\n   */\n  toObject() {\n    if (!this.isValid) return {};\n    return { ...this.values };\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this Duration.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n   * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'\n   * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'\n   * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'\n   * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'\n   * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'\n   * @return {string}\n   */\n  toISO() {\n    // we could use the formatter, but this is an easier way to get the minimum string\n    if (!this.isValid) return null;\n\n    let s = \"P\";\n    if (this.years !== 0) s += this.years + \"Y\";\n    if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + \"M\";\n    if (this.weeks !== 0) s += this.weeks + \"W\";\n    if (this.days !== 0) s += this.days + \"D\";\n    if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0)\n      s += \"T\";\n    if (this.hours !== 0) s += this.hours + \"H\";\n    if (this.minutes !== 0) s += this.minutes + \"M\";\n    if (this.seconds !== 0 || this.milliseconds !== 0)\n      // this will handle \"floating point madness\" by removing extra decimal places\n      // https://stackoverflow.com/questions/588004/is-floating-point-math-broken\n      s += roundTo(this.seconds + this.milliseconds / 1000, 3) + \"S\";\n    if (s === \"P\") s += \"T0S\";\n    return s;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day.\n   * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n   * @param {Object} opts - options\n   * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n   * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n   * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000'\n   * @return {string}\n   */\n  toISOTime(opts = {}) {\n    if (!this.isValid) return null;\n\n    const millis = this.toMillis();\n    if (millis < 0 || millis >= 86400000) return null;\n\n    opts = {\n      suppressMilliseconds: false,\n      suppressSeconds: false,\n      includePrefix: false,\n      format: \"extended\",\n      ...opts,\n      includeOffset: false,\n    };\n\n    const dateTime = DateTime.fromMillis(millis, { zone: \"UTC\" });\n    return dateTime.toISOTime(opts);\n  }\n\n  /**\n   * Returns an ISO 8601 representation of this Duration appropriate for use in JSON.\n   * @return {string}\n   */\n  toJSON() {\n    return this.toISO();\n  }\n\n  /**\n   * Returns an ISO 8601 representation of this Duration appropriate for use in debugging.\n   * @return {string}\n   */\n  toString() {\n    return this.toISO();\n  }\n\n  /**\n   * Returns a string representation of this Duration appropriate for the REPL.\n   * @return {string}\n   */\n  [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n    if (this.isValid) {\n      return `Duration { values: ${JSON.stringify(this.values)} }`;\n    } else {\n      return `Duration { Invalid, reason: ${this.invalidReason} }`;\n    }\n  }\n\n  /**\n   * Returns an milliseconds value of this Duration.\n   * @return {number}\n   */\n  toMillis() {\n    if (!this.isValid) return NaN;\n\n    return durationToMillis(this.matrix, this.values);\n  }\n\n  /**\n   * Returns an milliseconds value of this Duration. Alias of {@link toMillis}\n   * @return {number}\n   */\n  valueOf() {\n    return this.toMillis();\n  }\n\n  /**\n   * Make this Duration longer by the specified amount. Return a newly-constructed Duration.\n   * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   * @return {Duration}\n   */\n  plus(duration) {\n    if (!this.isValid) return this;\n\n    const dur = Duration.fromDurationLike(duration),\n      result = {};\n\n    for (const k of orderedUnits) {\n      if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {\n        result[k] = dur.get(k) + this.get(k);\n      }\n    }\n\n    return clone(this, { values: result }, true);\n  }\n\n  /**\n   * Make this Duration shorter by the specified amount. Return a newly-constructed Duration.\n   * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   * @return {Duration}\n   */\n  minus(duration) {\n    if (!this.isValid) return this;\n\n    const dur = Duration.fromDurationLike(duration);\n    return this.plus(dur.negate());\n  }\n\n  /**\n   * Scale this Duration by the specified amount. Return a newly-constructed Duration.\n   * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.\n   * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 }\n   * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === \"hours\" ? x * 2 : x) //=> { hours: 2, minutes: 30 }\n   * @return {Duration}\n   */\n  mapUnits(fn) {\n    if (!this.isValid) return this;\n    const result = {};\n    for (const k of Object.keys(this.values)) {\n      result[k] = asNumber(fn(this.values[k], k));\n    }\n    return clone(this, { values: result }, true);\n  }\n\n  /**\n   * Get the value of unit.\n   * @param {string} unit - a unit such as 'minute' or 'day'\n   * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2\n   * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0\n   * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3\n   * @return {number}\n   */\n  get(unit) {\n    return this[Duration.normalizeUnit(unit)];\n  }\n\n  /**\n   * \"Set\" the values of specified units. Return a newly-constructed Duration.\n   * @param {Object} values - a mapping of units to numbers\n   * @example dur.set({ years: 2017 })\n   * @example dur.set({ hours: 8, minutes: 30 })\n   * @return {Duration}\n   */\n  set(values) {\n    if (!this.isValid) return this;\n\n    const mixed = { ...this.values, ...normalizeObject(values, Duration.normalizeUnit) };\n    return clone(this, { values: mixed });\n  }\n\n  /**\n   * \"Set\" the locale and/or numberingSystem.  Returns a newly-constructed Duration.\n   * @example dur.reconfigure({ locale: 'en-GB' })\n   * @return {Duration}\n   */\n  reconfigure({ locale, numberingSystem, conversionAccuracy, matrix } = {}) {\n    const loc = this.loc.clone({ locale, numberingSystem });\n    const opts = { loc, matrix, conversionAccuracy };\n    return clone(this, opts);\n  }\n\n  /**\n   * Return the length of the duration in the specified unit.\n   * @param {string} unit - a unit such as 'minutes' or 'days'\n   * @example Duration.fromObject({years: 1}).as('days') //=> 365\n   * @example Duration.fromObject({years: 1}).as('months') //=> 12\n   * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5\n   * @return {number}\n   */\n  as(unit) {\n    return this.isValid ? this.shiftTo(unit).get(unit) : NaN;\n  }\n\n  /**\n   * Reduce this Duration to its canonical representation in its current units.\n   * Assuming the overall value of the Duration is positive, this means:\n   * - excessive values for lower-order units are converted to higher-order units (if possible, see first and second example)\n   * - negative lower-order units are converted to higher order units (there must be such a higher order unit, otherwise\n   *   the overall value would be negative, see third example)\n   * - fractional values for higher-order units are converted to lower-order units (if possible, see fourth example)\n   *\n   * If the overall value is negative, the result of this method is equivalent to `this.negate().normalize().negate()`.\n   * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }\n   * @example Duration.fromObject({ days: 5000 }).normalize().toObject() //=> { days: 5000 }\n   * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }\n   * @example Duration.fromObject({ years: 2.5, days: 0, hours: 0 }).normalize().toObject() //=> { years: 2, days: 182, hours: 12 }\n   * @return {Duration}\n   */\n  normalize() {\n    if (!this.isValid) return this;\n    const vals = this.toObject();\n    normalizeValues(this.matrix, vals);\n    return clone(this, { values: vals }, true);\n  }\n\n  /**\n   * Rescale units to its largest representation\n   * @example Duration.fromObject({ milliseconds: 90000 }).rescale().toObject() //=> { minutes: 1, seconds: 30 }\n   * @return {Duration}\n   */\n  rescale() {\n    if (!this.isValid) return this;\n    const vals = removeZeroes(this.normalize().shiftToAll().toObject());\n    return clone(this, { values: vals }, true);\n  }\n\n  /**\n   * Convert this Duration into its representation in a different set of units.\n   * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }\n   * @return {Duration}\n   */\n  shiftTo(...units) {\n    if (!this.isValid) return this;\n\n    if (units.length === 0) {\n      return this;\n    }\n\n    units = units.map((u) => Duration.normalizeUnit(u));\n\n    const built = {},\n      accumulated = {},\n      vals = this.toObject();\n    let lastUnit;\n\n    for (const k of orderedUnits) {\n      if (units.indexOf(k) >= 0) {\n        lastUnit = k;\n\n        let own = 0;\n\n        // anything we haven't boiled down yet should get boiled to this unit\n        for (const ak in accumulated) {\n          own += this.matrix[ak][k] * accumulated[ak];\n          accumulated[ak] = 0;\n        }\n\n        // plus anything that's already in this unit\n        if (isNumber(vals[k])) {\n          own += vals[k];\n        }\n\n        // only keep the integer part for now in the hopes of putting any decimal part\n        // into a smaller unit later\n        const i = Math.trunc(own);\n        built[k] = i;\n        accumulated[k] = (own * 1000 - i * 1000) / 1000;\n\n        // otherwise, keep it in the wings to boil it later\n      } else if (isNumber(vals[k])) {\n        accumulated[k] = vals[k];\n      }\n    }\n\n    // anything leftover becomes the decimal for the last unit\n    // lastUnit must be defined since units is not empty\n    for (const key in accumulated) {\n      if (accumulated[key] !== 0) {\n        built[lastUnit] +=\n          key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n      }\n    }\n\n    normalizeValues(this.matrix, built);\n    return clone(this, { values: built }, true);\n  }\n\n  /**\n   * Shift this Duration to all available units.\n   * Same as shiftTo(\"years\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\")\n   * @return {Duration}\n   */\n  shiftToAll() {\n    if (!this.isValid) return this;\n    return this.shiftTo(\n      \"years\",\n      \"months\",\n      \"weeks\",\n      \"days\",\n      \"hours\",\n      \"minutes\",\n      \"seconds\",\n      \"milliseconds\"\n    );\n  }\n\n  /**\n   * Return the negative of this Duration.\n   * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }\n   * @return {Duration}\n   */\n  negate() {\n    if (!this.isValid) return this;\n    const negated = {};\n    for (const k of Object.keys(this.values)) {\n      negated[k] = this.values[k] === 0 ? 0 : -this.values[k];\n    }\n    return clone(this, { values: negated }, true);\n  }\n\n  /**\n   * Removes all units with values equal to 0 from this Duration.\n   * @example Duration.fromObject({ years: 2, days: 0, hours: 0, minutes: 0 }).removeZeros().toObject() //=> { years: 2 }\n   * @return {Duration}\n   */\n  removeZeros() {\n    if (!this.isValid) return this;\n    const vals = removeZeroes(this.values);\n    return clone(this, { values: vals }, true);\n  }\n\n  /**\n   * Get the years.\n   * @type {number}\n   */\n  get years() {\n    return this.isValid ? this.values.years || 0 : NaN;\n  }\n\n  /**\n   * Get the quarters.\n   * @type {number}\n   */\n  get quarters() {\n    return this.isValid ? this.values.quarters || 0 : NaN;\n  }\n\n  /**\n   * Get the months.\n   * @type {number}\n   */\n  get months() {\n    return this.isValid ? this.values.months || 0 : NaN;\n  }\n\n  /**\n   * Get the weeks\n   * @type {number}\n   */\n  get weeks() {\n    return this.isValid ? this.values.weeks || 0 : NaN;\n  }\n\n  /**\n   * Get the days.\n   * @type {number}\n   */\n  get days() {\n    return this.isValid ? this.values.days || 0 : NaN;\n  }\n\n  /**\n   * Get the hours.\n   * @type {number}\n   */\n  get hours() {\n    return this.isValid ? this.values.hours || 0 : NaN;\n  }\n\n  /**\n   * Get the minutes.\n   * @type {number}\n   */\n  get minutes() {\n    return this.isValid ? this.values.minutes || 0 : NaN;\n  }\n\n  /**\n   * Get the seconds.\n   * @return {number}\n   */\n  get seconds() {\n    return this.isValid ? this.values.seconds || 0 : NaN;\n  }\n\n  /**\n   * Get the milliseconds.\n   * @return {number}\n   */\n  get milliseconds() {\n    return this.isValid ? this.values.milliseconds || 0 : NaN;\n  }\n\n  /**\n   * Returns whether the Duration is invalid. Invalid durations are returned by diff operations\n   * on invalid DateTimes or Intervals.\n   * @return {boolean}\n   */\n  get isValid() {\n    return this.invalid === null;\n  }\n\n  /**\n   * Returns an error code if this Duration became invalid, or null if the Duration is valid\n   * @return {string}\n   */\n  get invalidReason() {\n    return this.invalid ? this.invalid.reason : null;\n  }\n\n  /**\n   * Returns an explanation of why this Duration became invalid, or null if the Duration is valid\n   * @type {string}\n   */\n  get invalidExplanation() {\n    return this.invalid ? this.invalid.explanation : null;\n  }\n\n  /**\n   * Equality check\n   * Two Durations are equal iff they have the same units and the same values for each unit.\n   * @param {Duration} other\n   * @return {boolean}\n   */\n  equals(other) {\n    if (!this.isValid || !other.isValid) {\n      return false;\n    }\n\n    if (!this.loc.equals(other.loc)) {\n      return false;\n    }\n\n    function eq(v1, v2) {\n      // Consider 0 and undefined as equal\n      if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0;\n      return v1 === v2;\n    }\n\n    for (const u of orderedUnits) {\n      if (!eq(this.values[u], other.values[u])) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\n", "import DateTime, { friendlyDateTime } from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Settings from \"./settings.js\";\nimport { InvalidArgumentError, InvalidIntervalError } from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport * as Formats from \"./impl/formats.js\";\n\nconst INVALID = \"Invalid Interval\";\n\n// checks if the start is equal to or before the end\nfunction validateStartEnd(start, end) {\n  if (!start || !start.isValid) {\n    return Interval.invalid(\"missing or invalid start\");\n  } else if (!end || !end.isValid) {\n    return Interval.invalid(\"missing or invalid end\");\n  } else if (end < start) {\n    return Interval.invalid(\n      \"end before start\",\n      `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`\n    );\n  } else {\n    return null;\n  }\n}\n\n/**\n * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them.\n *\n * Here is a brief overview of the most commonly used methods and getters in Interval:\n *\n * * **Creation** To create an Interval, use {@link Interval.fromDateTimes}, {@link Interval.after}, {@link Interval.before}, or {@link Interval.fromISO}.\n * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end.\n * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}.\n * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval.merge}, {@link Interval.xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}.\n * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs}\n * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toLocaleString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}.\n */\nexport default class Interval {\n  /**\n   * @private\n   */\n  constructor(config) {\n    /**\n     * @access private\n     */\n    this.s = config.start;\n    /**\n     * @access private\n     */\n    this.e = config.end;\n    /**\n     * @access private\n     */\n    this.invalid = config.invalid || null;\n    /**\n     * @access private\n     */\n    this.isLuxonInterval = true;\n  }\n\n  /**\n   * Create an invalid Interval.\n   * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent\n   * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n   * @return {Interval}\n   */\n  static invalid(reason, explanation = null) {\n    if (!reason) {\n      throw new InvalidArgumentError(\"need to specify a reason the Interval is invalid\");\n    }\n\n    const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n    if (Settings.throwOnInvalid) {\n      throw new InvalidIntervalError(invalid);\n    } else {\n      return new Interval({ invalid });\n    }\n  }\n\n  /**\n   * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end.\n   * @param {DateTime|Date|Object} start\n   * @param {DateTime|Date|Object} end\n   * @return {Interval}\n   */\n  static fromDateTimes(start, end) {\n    const builtStart = friendlyDateTime(start),\n      builtEnd = friendlyDateTime(end);\n\n    const validateError = validateStartEnd(builtStart, builtEnd);\n\n    if (validateError == null) {\n      return new Interval({\n        start: builtStart,\n        end: builtEnd,\n      });\n    } else {\n      return validateError;\n    }\n  }\n\n  /**\n   * Create an Interval from a start DateTime and a Duration to extend to.\n   * @param {DateTime|Date|Object} start\n   * @param {Duration|Object|number} duration - the length of the Interval.\n   * @return {Interval}\n   */\n  static after(start, duration) {\n    const dur = Duration.fromDurationLike(duration),\n      dt = friendlyDateTime(start);\n    return Interval.fromDateTimes(dt, dt.plus(dur));\n  }\n\n  /**\n   * Create an Interval from an end DateTime and a Duration to extend backwards to.\n   * @param {DateTime|Date|Object} end\n   * @param {Duration|Object|number} duration - the length of the Interval.\n   * @return {Interval}\n   */\n  static before(end, duration) {\n    const dur = Duration.fromDurationLike(duration),\n      dt = friendlyDateTime(end);\n    return Interval.fromDateTimes(dt.minus(dur), dt);\n  }\n\n  /**\n   * Create an Interval from an ISO 8601 string.\n   * Accepts `<start>/<end>`, `<start>/<duration>`, and `<duration>/<end>` formats.\n   * @param {string} text - the ISO string to parse\n   * @param {Object} [opts] - options to pass {@link DateTime#fromISO} and optionally {@link Duration#fromISO}\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @return {Interval}\n   */\n  static fromISO(text, opts) {\n    const [s, e] = (text || \"\").split(\"/\", 2);\n    if (s && e) {\n      let start, startIsValid;\n      try {\n        start = DateTime.fromISO(s, opts);\n        startIsValid = start.isValid;\n      } catch (e) {\n        startIsValid = false;\n      }\n\n      let end, endIsValid;\n      try {\n        end = DateTime.fromISO(e, opts);\n        endIsValid = end.isValid;\n      } catch (e) {\n        endIsValid = false;\n      }\n\n      if (startIsValid && endIsValid) {\n        return Interval.fromDateTimes(start, end);\n      }\n\n      if (startIsValid) {\n        const dur = Duration.fromISO(e, opts);\n        if (dur.isValid) {\n          return Interval.after(start, dur);\n        }\n      } else if (endIsValid) {\n        const dur = Duration.fromISO(s, opts);\n        if (dur.isValid) {\n          return Interval.before(end, dur);\n        }\n      }\n    }\n    return Interval.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n  }\n\n  /**\n   * Check if an object is an Interval. Works across context boundaries\n   * @param {object} o\n   * @return {boolean}\n   */\n  static isInterval(o) {\n    return (o && o.isLuxonInterval) || false;\n  }\n\n  /**\n   * Returns the start of the Interval\n   * @type {DateTime}\n   */\n  get start() {\n    return this.isValid ? this.s : null;\n  }\n\n  /**\n   * Returns the end of the Interval. This is the first instant which is not part of the interval\n   * (Interval is half-open).\n   * @type {DateTime}\n   */\n  get end() {\n    return this.isValid ? this.e : null;\n  }\n\n  /**\n   * Returns the last DateTime included in the interval (since end is not part of the interval)\n   * @type {DateTime}\n   */\n  get lastDateTime() {\n    return this.isValid ? (this.e ? this.e.minus(1) : null) : null;\n  }\n\n  /**\n   * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'.\n   * @type {boolean}\n   */\n  get isValid() {\n    return this.invalidReason === null;\n  }\n\n  /**\n   * Returns an error code if this Interval is invalid, or null if the Interval is valid\n   * @type {string}\n   */\n  get invalidReason() {\n    return this.invalid ? this.invalid.reason : null;\n  }\n\n  /**\n   * Returns an explanation of why this Interval became invalid, or null if the Interval is valid\n   * @type {string}\n   */\n  get invalidExplanation() {\n    return this.invalid ? this.invalid.explanation : null;\n  }\n\n  /**\n   * Returns the length of the Interval in the specified unit.\n   * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in.\n   * @return {number}\n   */\n  length(unit = \"milliseconds\") {\n    return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN;\n  }\n\n  /**\n   * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part.\n   * Unlike {@link Interval#length} this counts sections of the calendar, not periods of time, e.g. specifying 'day'\n   * asks 'what dates are included in this interval?', not 'how many days long is this interval?'\n   * @param {string} [unit='milliseconds'] - the unit of time to count.\n   * @param {Object} opts - options\n   * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; this operation will always use the locale of the start DateTime\n   * @return {number}\n   */\n  count(unit = \"milliseconds\", opts) {\n    if (!this.isValid) return NaN;\n    const start = this.start.startOf(unit, opts);\n    let end;\n    if (opts?.useLocaleWeeks) {\n      end = this.end.reconfigure({ locale: start.locale });\n    } else {\n      end = this.end;\n    }\n    end = end.startOf(unit, opts);\n    return Math.floor(end.diff(start, unit).get(unit)) + (end.valueOf() !== this.end.valueOf());\n  }\n\n  /**\n   * Returns whether this Interval's start and end are both in the same unit of time\n   * @param {string} unit - the unit of time to check sameness on\n   * @return {boolean}\n   */\n  hasSame(unit) {\n    return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false;\n  }\n\n  /**\n   * Return whether this Interval has the same start and end DateTimes.\n   * @return {boolean}\n   */\n  isEmpty() {\n    return this.s.valueOf() === this.e.valueOf();\n  }\n\n  /**\n   * Return whether this Interval's start is after the specified DateTime.\n   * @param {DateTime} dateTime\n   * @return {boolean}\n   */\n  isAfter(dateTime) {\n    if (!this.isValid) return false;\n    return this.s > dateTime;\n  }\n\n  /**\n   * Return whether this Interval's end is before the specified DateTime.\n   * @param {DateTime} dateTime\n   * @return {boolean}\n   */\n  isBefore(dateTime) {\n    if (!this.isValid) return false;\n    return this.e <= dateTime;\n  }\n\n  /**\n   * Return whether this Interval contains the specified DateTime.\n   * @param {DateTime} dateTime\n   * @return {boolean}\n   */\n  contains(dateTime) {\n    if (!this.isValid) return false;\n    return this.s <= dateTime && this.e > dateTime;\n  }\n\n  /**\n   * \"Sets\" the start and/or end dates. Returns a newly-constructed Interval.\n   * @param {Object} values - the values to set\n   * @param {DateTime} values.start - the starting DateTime\n   * @param {DateTime} values.end - the ending DateTime\n   * @return {Interval}\n   */\n  set({ start, end } = {}) {\n    if (!this.isValid) return this;\n    return Interval.fromDateTimes(start || this.s, end || this.e);\n  }\n\n  /**\n   * Split this Interval at each of the specified DateTimes\n   * @param {...DateTime} dateTimes - the unit of time to count.\n   * @return {Array}\n   */\n  splitAt(...dateTimes) {\n    if (!this.isValid) return [];\n    const sorted = dateTimes\n        .map(friendlyDateTime)\n        .filter((d) => this.contains(d))\n        .sort((a, b) => a.toMillis() - b.toMillis()),\n      results = [];\n    let { s } = this,\n      i = 0;\n\n    while (s < this.e) {\n      const added = sorted[i] || this.e,\n        next = +added > +this.e ? this.e : added;\n      results.push(Interval.fromDateTimes(s, next));\n      s = next;\n      i += 1;\n    }\n\n    return results;\n  }\n\n  /**\n   * Split this Interval into smaller Intervals, each of the specified length.\n   * Left over time is grouped into a smaller interval\n   * @param {Duration|Object|number} duration - The length of each resulting interval.\n   * @return {Array}\n   */\n  splitBy(duration) {\n    const dur = Duration.fromDurationLike(duration);\n\n    if (!this.isValid || !dur.isValid || dur.as(\"milliseconds\") === 0) {\n      return [];\n    }\n\n    let { s } = this,\n      idx = 1,\n      next;\n\n    const results = [];\n    while (s < this.e) {\n      const added = this.start.plus(dur.mapUnits((x) => x * idx));\n      next = +added > +this.e ? this.e : added;\n      results.push(Interval.fromDateTimes(s, next));\n      s = next;\n      idx += 1;\n    }\n\n    return results;\n  }\n\n  /**\n   * Split this Interval into the specified number of smaller intervals.\n   * @param {number} numberOfParts - The number of Intervals to divide the Interval into.\n   * @return {Array}\n   */\n  divideEqually(numberOfParts) {\n    if (!this.isValid) return [];\n    return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);\n  }\n\n  /**\n   * Return whether this Interval overlaps with the specified Interval\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  overlaps(other) {\n    return this.e > other.s && this.s < other.e;\n  }\n\n  /**\n   * Return whether this Interval's end is adjacent to the specified Interval's start.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  abutsStart(other) {\n    if (!this.isValid) return false;\n    return +this.e === +other.s;\n  }\n\n  /**\n   * Return whether this Interval's start is adjacent to the specified Interval's end.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  abutsEnd(other) {\n    if (!this.isValid) return false;\n    return +other.e === +this.s;\n  }\n\n  /**\n   * Returns true if this Interval fully contains the specified Interval, specifically if the intersect (of this Interval and the other Interval) is equal to the other Interval; false otherwise.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  engulfs(other) {\n    if (!this.isValid) return false;\n    return this.s <= other.s && this.e >= other.e;\n  }\n\n  /**\n   * Return whether this Interval has the same start and end as the specified Interval.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  equals(other) {\n    if (!this.isValid || !other.isValid) {\n      return false;\n    }\n\n    return this.s.equals(other.s) && this.e.equals(other.e);\n  }\n\n  /**\n   * Return an Interval representing the intersection of this Interval and the specified Interval.\n   * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.\n   * Returns null if the intersection is empty, meaning, the intervals don't intersect.\n   * @param {Interval} other\n   * @return {Interval}\n   */\n  intersection(other) {\n    if (!this.isValid) return this;\n    const s = this.s > other.s ? this.s : other.s,\n      e = this.e < other.e ? this.e : other.e;\n\n    if (s >= e) {\n      return null;\n    } else {\n      return Interval.fromDateTimes(s, e);\n    }\n  }\n\n  /**\n   * Return an Interval representing the union of this Interval and the specified Interval.\n   * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals.\n   * @param {Interval} other\n   * @return {Interval}\n   */\n  union(other) {\n    if (!this.isValid) return this;\n    const s = this.s < other.s ? this.s : other.s,\n      e = this.e > other.e ? this.e : other.e;\n    return Interval.fromDateTimes(s, e);\n  }\n\n  /**\n   * Merge an array of Intervals into an equivalent minimal set of Intervals.\n   * Combines overlapping and adjacent Intervals.\n   * The resulting array will contain the Intervals in ascending order, that is, starting with the earliest Interval\n   * and ending with the latest.\n   *\n   * @param {Array} intervals\n   * @return {Array}\n   */\n  static merge(intervals) {\n    const [found, final] = intervals\n      .sort((a, b) => a.s - b.s)\n      .reduce(\n        ([sofar, current], item) => {\n          if (!current) {\n            return [sofar, item];\n          } else if (current.overlaps(item) || current.abutsStart(item)) {\n            return [sofar, current.union(item)];\n          } else {\n            return [sofar.concat([current]), item];\n          }\n        },\n        [[], null]\n      );\n    if (final) {\n      found.push(final);\n    }\n    return found;\n  }\n\n  /**\n   * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals.\n   * @param {Array} intervals\n   * @return {Array}\n   */\n  static xor(intervals) {\n    let start = null,\n      currentCount = 0;\n    const results = [],\n      ends = intervals.map((i) => [\n        { time: i.s, type: \"s\" },\n        { time: i.e, type: \"e\" },\n      ]),\n      flattened = Array.prototype.concat(...ends),\n      arr = flattened.sort((a, b) => a.time - b.time);\n\n    for (const i of arr) {\n      currentCount += i.type === \"s\" ? 1 : -1;\n\n      if (currentCount === 1) {\n        start = i.time;\n      } else {\n        if (start && +start !== +i.time) {\n          results.push(Interval.fromDateTimes(start, i.time));\n        }\n\n        start = null;\n      }\n    }\n\n    return Interval.merge(results);\n  }\n\n  /**\n   * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.\n   * @param {...Interval} intervals\n   * @return {Array}\n   */\n  difference(...intervals) {\n    return Interval.xor([this].concat(intervals))\n      .map((i) => this.intersection(i))\n      .filter((i) => i && !i.isEmpty());\n  }\n\n  /**\n   * Returns a string representation of this Interval appropriate for debugging.\n   * @return {string}\n   */\n  toString() {\n    if (!this.isValid) return INVALID;\n    return `[${this.s.toISO()} – ${this.e.toISO()})`;\n  }\n\n  /**\n   * Returns a string representation of this Interval appropriate for the REPL.\n   * @return {string}\n   */\n  [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n    if (this.isValid) {\n      return `Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`;\n    } else {\n      return `Interval { Invalid, reason: ${this.invalidReason} }`;\n    }\n  }\n\n  /**\n   * Returns a localized string representing this Interval. Accepts the same options as the\n   * Intl.DateTimeFormat constructor and any presets defined by Luxon, such as\n   * {@link DateTime.DATE_FULL} or {@link DateTime.TIME_SIMPLE}. The exact behavior of this method\n   * is browser-specific, but in general it will return an appropriate representation of the\n   * Interval in the assigned locale. Defaults to the system's locale if no locale has been\n   * specified.\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n   * @param {Object} [formatOpts=DateTime.DATE_SHORT] - Either a DateTime preset or\n   * Intl.DateTimeFormat constructor options.\n   * @param {Object} opts - Options to override the configuration of the start DateTime.\n   * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(); //=> 11/7/2022 – 11/8/2022\n   * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL); //=> November 7 – 8, 2022\n   * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL, { locale: 'fr-FR' }); //=> 7–8 novembre 2022\n   * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString(DateTime.TIME_SIMPLE); //=> 6:00 – 8:00 PM\n   * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> Mon, Nov 07, 6:00 – 8:00 p\n   * @return {string}\n   */\n  toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n    return this.isValid\n      ? Formatter.create(this.s.loc.clone(opts), formatOpts).formatInterval(this)\n      : INVALID;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this Interval.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @param {Object} opts - The same options as {@link DateTime#toISO}\n   * @return {string}\n   */\n  toISO(opts) {\n    if (!this.isValid) return INVALID;\n    return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of date of this Interval.\n   * The time components are ignored.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @return {string}\n   */\n  toISODate() {\n    if (!this.isValid) return INVALID;\n    return `${this.s.toISODate()}/${this.e.toISODate()}`;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of time of this Interval.\n   * The date components are ignored.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @param {Object} opts - The same options as {@link DateTime#toISO}\n   * @return {string}\n   */\n  toISOTime(opts) {\n    if (!this.isValid) return INVALID;\n    return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`;\n  }\n\n  /**\n   * Returns a string representation of this Interval formatted according to the specified format\n   * string. **You may not want this.** See {@link Interval#toLocaleString} for a more flexible\n   * formatting tool.\n   * @param {string} dateFormat - The format string. This string formats the start and end time.\n   * See {@link DateTime#toFormat} for details.\n   * @param {Object} opts - Options.\n   * @param {string} [opts.separator =  ' – '] - A separator to place between the start and end\n   * representations.\n   * @return {string}\n   */\n  toFormat(dateFormat, { separator = \" – \" } = {}) {\n    if (!this.isValid) return INVALID;\n    return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`;\n  }\n\n  /**\n   * Return a Duration representing the time spanned by this interval.\n   * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration.\n   * @param {Object} opts - options that affect the creation of the Duration\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 }\n   * @return {Duration}\n   */\n  toDuration(unit, opts) {\n    if (!this.isValid) {\n      return Duration.invalid(this.invalidReason);\n    }\n    return this.e.diff(this.s, unit, opts);\n  }\n\n  /**\n   * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes\n   * @param {function} mapFn\n   * @return {Interval}\n   * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC())\n   * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 }))\n   */\n  mapEndpoints(mapFn) {\n    return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e));\n  }\n}\n", "import DateTime from \"./datetime.js\";\nimport Settings from \"./settings.js\";\nimport Locale from \"./impl/locale.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nimport { hasLocaleWeekInfo, hasRelative } from \"./impl/util.js\";\n\n/**\n * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.\n */\nexport default class Info {\n  /**\n   * Return whether the specified zone contains a DST.\n   * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.\n   * @return {boolean}\n   */\n  static hasDST(zone = Settings.defaultZone) {\n    const proto = DateTime.now().setZone(zone).set({ month: 12 });\n\n    return !zone.isUniversal && proto.offset !== proto.set({ month: 6 }).offset;\n  }\n\n  /**\n   * Return whether the specified zone is a valid IANA specifier.\n   * @param {string} zone - Zone to check\n   * @return {boolean}\n   */\n  static isValidIANAZone(zone) {\n    return IANAZone.isValidZone(zone);\n  }\n\n  /**\n   * Converts the input into a {@link Zone} instance.\n   *\n   * * If `input` is already a Zone instance, it is returned unchanged.\n   * * If `input` is a string containing a valid time zone name, a Zone instance\n   *   with that name is returned.\n   * * If `input` is a string that doesn't refer to a known time zone, a Zone\n   *   instance with {@link Zone#isValid} == false is returned.\n   * * If `input is a number, a Zone instance with the specified fixed offset\n   *   in minutes is returned.\n   * * If `input` is `null` or `undefined`, the default zone is returned.\n   * @param {string|Zone|number} [input] - the value to be converted\n   * @return {Zone}\n   */\n  static normalizeZone(input) {\n    return normalizeZone(input, Settings.defaultZone);\n  }\n\n  /**\n   * Get the weekday on which the week starts according to the given locale.\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @returns {number} the start of the week, 1 for Monday through 7 for Sunday\n   */\n  static getStartOfWeek({ locale = null, locObj = null } = {}) {\n    return (locObj || Locale.create(locale)).getStartOfWeek();\n  }\n\n  /**\n   * Get the minimum number of days necessary in a week before it is considered part of the next year according\n   * to the given locale.\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @returns {number}\n   */\n  static getMinimumDaysInFirstWeek({ locale = null, locObj = null } = {}) {\n    return (locObj || Locale.create(locale)).getMinDaysInFirstWeek();\n  }\n\n  /**\n   * Get the weekdays, which are considered the weekend according to the given locale\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @returns {number[]} an array of weekdays, 1 for Monday through 7 for Sunday\n   */\n  static getWeekendWeekdays({ locale = null, locObj = null } = {}) {\n    // copy the array, because we cache it internally\n    return (locObj || Locale.create(locale)).getWeekendDays().slice();\n  }\n\n  /**\n   * Return an array of standalone month names.\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n   * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @param {string} [opts.outputCalendar='gregory'] - the calendar\n   * @example Info.months()[0] //=> 'January'\n   * @example Info.months('short')[0] //=> 'Jan'\n   * @example Info.months('numeric')[0] //=> '1'\n   * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'\n   * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١'\n   * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I'\n   * @return {Array}\n   */\n  static months(\n    length = \"long\",\n    { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n  ) {\n    return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length);\n  }\n\n  /**\n   * Return an array of format month names.\n   * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that\n   * changes the string.\n   * See {@link Info#months}\n   * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @param {string} [opts.outputCalendar='gregory'] - the calendar\n   * @return {Array}\n   */\n  static monthsFormat(\n    length = \"long\",\n    { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n  ) {\n    return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true);\n  }\n\n  /**\n   * Return an array of standalone week names.\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n   * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @example Info.weekdays()[0] //=> 'Monday'\n   * @example Info.weekdays('short')[0] //=> 'Mon'\n   * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'\n   * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين'\n   * @return {Array}\n   */\n  static weekdays(length = \"long\", { locale = null, numberingSystem = null, locObj = null } = {}) {\n    return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length);\n  }\n\n  /**\n   * Return an array of format week names.\n   * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that\n   * changes the string.\n   * See {@link Info#weekdays}\n   * @param {string} [length='long'] - the length of the month representation, such as \"narrow\", \"short\", \"long\".\n   * @param {Object} opts - options\n   * @param {string} [opts.locale=null] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @return {Array}\n   */\n  static weekdaysFormat(\n    length = \"long\",\n    { locale = null, numberingSystem = null, locObj = null } = {}\n  ) {\n    return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true);\n  }\n\n  /**\n   * Return an array of meridiems.\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @example Info.meridiems() //=> [ 'AM', 'PM' ]\n   * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ]\n   * @return {Array}\n   */\n  static meridiems({ locale = null } = {}) {\n    return Locale.create(locale).meridiems();\n  }\n\n  /**\n   * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.\n   * @param {string} [length='short'] - the length of the era representation, such as \"short\" or \"long\".\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @example Info.eras() //=> [ 'BC', 'AD' ]\n   * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]\n   * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ]\n   * @return {Array}\n   */\n  static eras(length = \"short\", { locale = null } = {}) {\n    return Locale.create(locale, null, \"gregory\").eras(length);\n  }\n\n  /**\n   * Return the set of available features in this environment.\n   * Some features of Luxon are not available in all environments. For example, on older browsers, relative time formatting support is not available. Use this function to figure out if that's the case.\n   * Keys:\n   * * `relative`: whether this environment supports relative time formatting\n   * * `localeWeek`: whether this environment supports different weekdays for the start of the week based on the locale\n   * @example Info.features() //=> { relative: false, localeWeek: true }\n   * @return {Object}\n   */\n  static features() {\n    return { relative: hasRelative(), localeWeek: hasLocaleWeekInfo() };\n  }\n}\n", "import Duration from \"../duration.js\";\n\nfunction dayDiff(earlier, later) {\n  const utcDayStart = (dt) => dt.toUTC(0, { keepLocalTime: true }).startOf(\"day\").valueOf(),\n    ms = utcDayStart(later) - utcDayStart(earlier);\n  return Math.floor(Duration.fromMillis(ms).as(\"days\"));\n}\n\nfunction highOrderDiffs(cursor, later, units) {\n  const differs = [\n    [\"years\", (a, b) => b.year - a.year],\n    [\"quarters\", (a, b) => b.quarter - a.quarter + (b.year - a.year) * 4],\n    [\"months\", (a, b) => b.month - a.month + (b.year - a.year) * 12],\n    [\n      \"weeks\",\n      (a, b) => {\n        const days = dayDiff(a, b);\n        return (days - (days % 7)) / 7;\n      },\n    ],\n    [\"days\", dayDiff],\n  ];\n\n  const results = {};\n  const earlier = cursor;\n  let lowestOrder, highWater;\n\n  /* This loop tries to diff using larger units first.\n     If we overshoot, we backtrack and try the next smaller unit.\n     \"cursor\" starts out at the earlier timestamp and moves closer and closer to \"later\"\n     as we use smaller and smaller units.\n     highWater keeps track of where we would be if we added one more of the smallest unit,\n     this is used later to potentially convert any difference smaller than the smallest higher order unit\n     into a fraction of that smallest higher order unit\n  */\n  for (const [unit, differ] of differs) {\n    if (units.indexOf(unit) >= 0) {\n      lowestOrder = unit;\n\n      results[unit] = differ(cursor, later);\n      highWater = earlier.plus(results);\n\n      if (highWater > later) {\n        // we overshot the end point, backtrack cursor by 1\n        results[unit]--;\n        cursor = earlier.plus(results);\n\n        // if we are still overshooting now, we need to backtrack again\n        // this happens in certain situations when diffing times in different zones,\n        // because this calculation ignores time zones\n        if (cursor > later) {\n          // keep the \"overshot by 1\" around as highWater\n          highWater = cursor;\n          // backtrack cursor by 1\n          results[unit]--;\n          cursor = earlier.plus(results);\n        }\n      } else {\n        cursor = highWater;\n      }\n    }\n  }\n\n  return [cursor, results, highWater, lowestOrder];\n}\n\nexport default function (earlier, later, units, opts) {\n  let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units);\n\n  const remainingMillis = later - cursor;\n\n  const lowerOrderUnits = units.filter(\n    (u) => [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"].indexOf(u) >= 0\n  );\n\n  if (lowerOrderUnits.length === 0) {\n    if (highWater < later) {\n      highWater = cursor.plus({ [lowestOrder]: 1 });\n    }\n\n    if (highWater !== cursor) {\n      results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n    }\n  }\n\n  const duration = Duration.fromObject(results, opts);\n\n  if (lowerOrderUnits.length > 0) {\n    return Duration.fromMillis(remainingMillis, opts)\n      .shiftTo(...lowerOrderUnits)\n      .plus(duration);\n  } else {\n    return duration;\n  }\n}\n", "import { parseMillis, isUndefined, untruncateYear, signedOffset, hasOwnProperty } from \"./util.js\";\nimport Formatter from \"./formatter.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport DateTime from \"../datetime.js\";\nimport { digitRegex, parseDigits } from \"./digits.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst MISSING_FTP = \"missing Intl.DateTimeFormat.formatToParts support\";\n\nfunction intUnit(regex, post = (i) => i) {\n  return { regex, deser: ([s]) => post(parseDigits(s)) };\n}\n\nconst NBSP = String.fromCharCode(160);\nconst spaceOrNBSP = `[ ${NBSP}]`;\nconst spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, \"g\");\n\nfunction fixListRegex(s) {\n  // make dots optional and also make them literal\n  // make space and non breakable space characters interchangeable\n  return s.replace(/\\./g, \"\\\\.?\").replace(spaceOrNBSPRegExp, spaceOrNBSP);\n}\n\nfunction stripInsensitivities(s) {\n  return s\n    .replace(/\\./g, \"\") // ignore dots that were made optional\n    .replace(spaceOrNBSPRegExp, \" \") // interchange space and nbsp\n    .toLowerCase();\n}\n\nfunction oneOf(strings, startIndex) {\n  if (strings === null) {\n    return null;\n  } else {\n    return {\n      regex: RegExp(strings.map(fixListRegex).join(\"|\")),\n      deser: ([s]) =>\n        strings.findIndex((i) => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex,\n    };\n  }\n}\n\nfunction offset(regex, groups) {\n  return { regex, deser: ([, h, m]) => signedOffset(h, m), groups };\n}\n\nfunction simple(regex) {\n  return { regex, deser: ([s]) => s };\n}\n\nfunction escapeToken(value) {\n  return value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n}\n\n/**\n * @param token\n * @param {Locale} loc\n */\nfunction unitForToken(token, loc) {\n  const one = digitRegex(loc),\n    two = digitRegex(loc, \"{2}\"),\n    three = digitRegex(loc, \"{3}\"),\n    four = digitRegex(loc, \"{4}\"),\n    six = digitRegex(loc, \"{6}\"),\n    oneOrTwo = digitRegex(loc, \"{1,2}\"),\n    oneToThree = digitRegex(loc, \"{1,3}\"),\n    oneToSix = digitRegex(loc, \"{1,6}\"),\n    oneToNine = digitRegex(loc, \"{1,9}\"),\n    twoToFour = digitRegex(loc, \"{2,4}\"),\n    fourToSix = digitRegex(loc, \"{4,6}\"),\n    literal = (t) => ({ regex: RegExp(escapeToken(t.val)), deser: ([s]) => s, literal: true }),\n    unitate = (t) => {\n      if (token.literal) {\n        return literal(t);\n      }\n      switch (t.val) {\n        // era\n        case \"G\":\n          return oneOf(loc.eras(\"short\"), 0);\n        case \"GG\":\n          return oneOf(loc.eras(\"long\"), 0);\n        // years\n        case \"y\":\n          return intUnit(oneToSix);\n        case \"yy\":\n          return intUnit(twoToFour, untruncateYear);\n        case \"yyyy\":\n          return intUnit(four);\n        case \"yyyyy\":\n          return intUnit(fourToSix);\n        case \"yyyyyy\":\n          return intUnit(six);\n        // months\n        case \"M\":\n          return intUnit(oneOrTwo);\n        case \"MM\":\n          return intUnit(two);\n        case \"MMM\":\n          return oneOf(loc.months(\"short\", true), 1);\n        case \"MMMM\":\n          return oneOf(loc.months(\"long\", true), 1);\n        case \"L\":\n          return intUnit(oneOrTwo);\n        case \"LL\":\n          return intUnit(two);\n        case \"LLL\":\n          return oneOf(loc.months(\"short\", false), 1);\n        case \"LLLL\":\n          return oneOf(loc.months(\"long\", false), 1);\n        // dates\n        case \"d\":\n          return intUnit(oneOrTwo);\n        case \"dd\":\n          return intUnit(two);\n        // ordinals\n        case \"o\":\n          return intUnit(oneToThree);\n        case \"ooo\":\n          return intUnit(three);\n        // time\n        case \"HH\":\n          return intUnit(two);\n        case \"H\":\n          return intUnit(oneOrTwo);\n        case \"hh\":\n          return intUnit(two);\n        case \"h\":\n          return intUnit(oneOrTwo);\n        case \"mm\":\n          return intUnit(two);\n        case \"m\":\n          return intUnit(oneOrTwo);\n        case \"q\":\n          return intUnit(oneOrTwo);\n        case \"qq\":\n          return intUnit(two);\n        case \"s\":\n          return intUnit(oneOrTwo);\n        case \"ss\":\n          return intUnit(two);\n        case \"S\":\n          return intUnit(oneToThree);\n        case \"SSS\":\n          return intUnit(three);\n        case \"u\":\n          return simple(oneToNine);\n        case \"uu\":\n          return simple(oneOrTwo);\n        case \"uuu\":\n          return intUnit(one);\n        // meridiem\n        case \"a\":\n          return oneOf(loc.meridiems(), 0);\n        // weekYear (k)\n        case \"kkkk\":\n          return intUnit(four);\n        case \"kk\":\n          return intUnit(twoToFour, untruncateYear);\n        // weekNumber (W)\n        case \"W\":\n          return intUnit(oneOrTwo);\n        case \"WW\":\n          return intUnit(two);\n        // weekdays\n        case \"E\":\n        case \"c\":\n          return intUnit(one);\n        case \"EEE\":\n          return oneOf(loc.weekdays(\"short\", false), 1);\n        case \"EEEE\":\n          return oneOf(loc.weekdays(\"long\", false), 1);\n        case \"ccc\":\n          return oneOf(loc.weekdays(\"short\", true), 1);\n        case \"cccc\":\n          return oneOf(loc.weekdays(\"long\", true), 1);\n        // offset/zone\n        case \"Z\":\n        case \"ZZ\":\n          return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2);\n        case \"ZZZ\":\n          return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2);\n        // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing\n        // because we don't have any way to figure out what they are\n        case \"z\":\n          return simple(/[a-z_+-/]{1,256}?/i);\n        // this special-case \"token\" represents a place where a macro-token expanded into a white-space literal\n        // in this case we accept any non-newline white-space\n        case \" \":\n          return simple(/[^\\S\\n\\r]/);\n        default:\n          return literal(t);\n      }\n    };\n\n  const unit = unitate(token) || {\n    invalidReason: MISSING_FTP,\n  };\n\n  unit.token = token;\n\n  return unit;\n}\n\nconst partTypeStyleToTokenVal = {\n  year: {\n    \"2-digit\": \"yy\",\n    numeric: \"yyyyy\",\n  },\n  month: {\n    numeric: \"M\",\n    \"2-digit\": \"MM\",\n    short: \"MMM\",\n    long: \"MMMM\",\n  },\n  day: {\n    numeric: \"d\",\n    \"2-digit\": \"dd\",\n  },\n  weekday: {\n    short: \"EEE\",\n    long: \"EEEE\",\n  },\n  dayperiod: \"a\",\n  dayPeriod: \"a\",\n  hour12: {\n    numeric: \"h\",\n    \"2-digit\": \"hh\",\n  },\n  hour24: {\n    numeric: \"H\",\n    \"2-digit\": \"HH\",\n  },\n  minute: {\n    numeric: \"m\",\n    \"2-digit\": \"mm\",\n  },\n  second: {\n    numeric: \"s\",\n    \"2-digit\": \"ss\",\n  },\n  timeZoneName: {\n    long: \"ZZZZZ\",\n    short: \"ZZZ\",\n  },\n};\n\nfunction tokenForPart(part, formatOpts, resolvedOpts) {\n  const { type, value } = part;\n\n  if (type === \"literal\") {\n    const isSpace = /^\\s+$/.test(value);\n    return {\n      literal: !isSpace,\n      val: isSpace ? \" \" : value,\n    };\n  }\n\n  const style = formatOpts[type];\n\n  // The user might have explicitly specified hour12 or hourCycle\n  // if so, respect their decision\n  // if not, refer back to the resolvedOpts, which are based on the locale\n  let actualType = type;\n  if (type === \"hour\") {\n    if (formatOpts.hour12 != null) {\n      actualType = formatOpts.hour12 ? \"hour12\" : \"hour24\";\n    } else if (formatOpts.hourCycle != null) {\n      if (formatOpts.hourCycle === \"h11\" || formatOpts.hourCycle === \"h12\") {\n        actualType = \"hour12\";\n      } else {\n        actualType = \"hour24\";\n      }\n    } else {\n      // tokens only differentiate between 24 hours or not,\n      // so we do not need to check hourCycle here, which is less supported anyways\n      actualType = resolvedOpts.hour12 ? \"hour12\" : \"hour24\";\n    }\n  }\n  let val = partTypeStyleToTokenVal[actualType];\n  if (typeof val === \"object\") {\n    val = val[style];\n  }\n\n  if (val) {\n    return {\n      literal: false,\n      val,\n    };\n  }\n\n  return undefined;\n}\n\nfunction buildRegex(units) {\n  const re = units.map((u) => u.regex).reduce((f, r) => `${f}(${r.source})`, \"\");\n  return [`^${re}$`, units];\n}\n\nfunction match(input, regex, handlers) {\n  const matches = input.match(regex);\n\n  if (matches) {\n    const all = {};\n    let matchIndex = 1;\n    for (const i in handlers) {\n      if (hasOwnProperty(handlers, i)) {\n        const h = handlers[i],\n          groups = h.groups ? h.groups + 1 : 1;\n        if (!h.literal && h.token) {\n          all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));\n        }\n        matchIndex += groups;\n      }\n    }\n    return [matches, all];\n  } else {\n    return [matches, {}];\n  }\n}\n\nfunction dateTimeFromMatches(matches) {\n  const toField = (token) => {\n    switch (token) {\n      case \"S\":\n        return \"millisecond\";\n      case \"s\":\n        return \"second\";\n      case \"m\":\n        return \"minute\";\n      case \"h\":\n      case \"H\":\n        return \"hour\";\n      case \"d\":\n        return \"day\";\n      case \"o\":\n        return \"ordinal\";\n      case \"L\":\n      case \"M\":\n        return \"month\";\n      case \"y\":\n        return \"year\";\n      case \"E\":\n      case \"c\":\n        return \"weekday\";\n      case \"W\":\n        return \"weekNumber\";\n      case \"k\":\n        return \"weekYear\";\n      case \"q\":\n        return \"quarter\";\n      default:\n        return null;\n    }\n  };\n\n  let zone = null;\n  let specificOffset;\n  if (!isUndefined(matches.z)) {\n    zone = IANAZone.create(matches.z);\n  }\n\n  if (!isUndefined(matches.Z)) {\n    if (!zone) {\n      zone = new FixedOffsetZone(matches.Z);\n    }\n    specificOffset = matches.Z;\n  }\n\n  if (!isUndefined(matches.q)) {\n    matches.M = (matches.q - 1) * 3 + 1;\n  }\n\n  if (!isUndefined(matches.h)) {\n    if (matches.h < 12 && matches.a === 1) {\n      matches.h += 12;\n    } else if (matches.h === 12 && matches.a === 0) {\n      matches.h = 0;\n    }\n  }\n\n  if (matches.G === 0 && matches.y) {\n    matches.y = -matches.y;\n  }\n\n  if (!isUndefined(matches.u)) {\n    matches.S = parseMillis(matches.u);\n  }\n\n  const vals = Object.keys(matches).reduce((r, k) => {\n    const f = toField(k);\n    if (f) {\n      r[f] = matches[k];\n    }\n\n    return r;\n  }, {});\n\n  return [vals, zone, specificOffset];\n}\n\nlet dummyDateTimeCache = null;\n\nfunction getDummyDateTime() {\n  if (!dummyDateTimeCache) {\n    dummyDateTimeCache = DateTime.fromMillis(1555555555555);\n  }\n\n  return dummyDateTimeCache;\n}\n\nfunction maybeExpandMacroToken(token, locale) {\n  if (token.literal) {\n    return token;\n  }\n\n  const formatOpts = Formatter.macroTokenToFormatOpts(token.val);\n  const tokens = formatOptsToTokens(formatOpts, locale);\n\n  if (tokens == null || tokens.includes(undefined)) {\n    return token;\n  }\n\n  return tokens;\n}\n\nexport function expandMacroTokens(tokens, locale) {\n  return Array.prototype.concat(...tokens.map((t) => maybeExpandMacroToken(t, locale)));\n}\n\n/**\n * @private\n */\n\nexport class TokenParser {\n  constructor(locale, format) {\n    this.locale = locale;\n    this.format = format;\n    this.tokens = expandMacroTokens(Formatter.parseFormat(format), locale);\n    this.units = this.tokens.map((t) => unitForToken(t, locale));\n    this.disqualifyingUnit = this.units.find((t) => t.invalidReason);\n\n    if (!this.disqualifyingUnit) {\n      const [regexString, handlers] = buildRegex(this.units);\n      this.regex = RegExp(regexString, \"i\");\n      this.handlers = handlers;\n    }\n  }\n\n  explainFromTokens(input) {\n    if (!this.isValid) {\n      return { input, tokens: this.tokens, invalidReason: this.invalidReason };\n    } else {\n      const [rawMatches, matches] = match(input, this.regex, this.handlers),\n        [result, zone, specificOffset] = matches\n          ? dateTimeFromMatches(matches)\n          : [null, null, undefined];\n      if (hasOwnProperty(matches, \"a\") && hasOwnProperty(matches, \"H\")) {\n        throw new ConflictingSpecificationError(\n          \"Can't include meridiem when specifying 24-hour format\"\n        );\n      }\n      return {\n        input,\n        tokens: this.tokens,\n        regex: this.regex,\n        rawMatches,\n        matches,\n        result,\n        zone,\n        specificOffset,\n      };\n    }\n  }\n\n  get isValid() {\n    return !this.disqualifyingUnit;\n  }\n\n  get invalidReason() {\n    return this.disqualifyingUnit ? this.disqualifyingUnit.invalidReason : null;\n  }\n}\n\nexport function explainFromTokens(locale, input, format) {\n  const parser = new TokenParser(locale, format);\n  return parser.explainFromTokens(input);\n}\n\nexport function parseFromTokens(locale, input, format) {\n  const { result, zone, specificOffset, invalidReason } = explainFromTokens(locale, input, format);\n  return [result, zone, specificOffset, invalidReason];\n}\n\nexport function formatOptsToTokens(formatOpts, locale) {\n  if (!formatOpts) {\n    return null;\n  }\n\n  const formatter = Formatter.create(locale, formatOpts);\n  const df = formatter.dtFormatter(getDummyDateTime());\n  const parts = df.formatToParts();\n  const resolvedOpts = df.resolvedOptions();\n  return parts.map((p) => tokenForPart(p, formatOpts, resolvedOpts));\n}\n", "import Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Settings from \"./settings.js\";\nimport Info from \"./info.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport {\n  isUndefined,\n  maybeArray,\n  isDate,\n  isNumber,\n  bestBy,\n  daysInMonth,\n  daysInYear,\n  isLeapYear,\n  weeksInWeekYear,\n  normalizeObject,\n  roundTo,\n  objToLocalTS,\n  padStart,\n} from \"./impl/util.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport diff from \"./impl/diff.js\";\nimport { parseRFC2822Date, parseISODate, parseHTTPDate, parseSQL } from \"./impl/regexParser.js\";\nimport {\n  parseFromTokens,\n  explainFromTokens,\n  formatOptsToTokens,\n  expandMacroTokens,\n  TokenParser,\n} from \"./impl/tokenParser.js\";\nimport {\n  gregorianToWeek,\n  weekToGregorian,\n  gregorianToOrdinal,\n  ordinalToGregorian,\n  hasInvalidGregorianData,\n  hasInvalidWeekData,\n  hasInvalidOrdinalData,\n  hasInvalidTimeData,\n  usesLocalWeekValues,\n  isoWeekdayToLocal,\n} from \"./impl/conversions.js\";\nimport * as Formats from \"./impl/formats.js\";\nimport {\n  InvalidArgumentError,\n  ConflictingSpecificationError,\n  InvalidUnitError,\n  InvalidDateTimeError,\n} from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid DateTime\";\nconst MAX_DATE = 8.64e15;\n\nfunction unsupportedZone(zone) {\n  return new Invalid(\"unsupported zone\", `the zone \"${zone.name}\" is not supported`);\n}\n\n// we cache week data on the DT object and this intermediates the cache\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedWeekData(dt) {\n  if (dt.weekData === null) {\n    dt.weekData = gregorianToWeek(dt.c);\n  }\n  return dt.weekData;\n}\n\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedLocalWeekData(dt) {\n  if (dt.localWeekData === null) {\n    dt.localWeekData = gregorianToWeek(\n      dt.c,\n      dt.loc.getMinDaysInFirstWeek(),\n      dt.loc.getStartOfWeek()\n    );\n  }\n  return dt.localWeekData;\n}\n\n// clone really means, \"make a new object with these modifications\". all \"setters\" really use this\n// to create a new object while only changing some of the properties\nfunction clone(inst, alts) {\n  const current = {\n    ts: inst.ts,\n    zone: inst.zone,\n    c: inst.c,\n    o: inst.o,\n    loc: inst.loc,\n    invalid: inst.invalid,\n  };\n  return new DateTime({ ...current, ...alts, old: current });\n}\n\n// find the right offset a given local time. The o input is our guess, which determines which\n// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)\nfunction fixOffset(localTS, o, tz) {\n  // Our UTC time is just a guess because our offset is just a guess\n  let utcGuess = localTS - o * 60 * 1000;\n\n  // Test whether the zone matches the offset for this ts\n  const o2 = tz.offset(utcGuess);\n\n  // If so, offset didn't change and we're done\n  if (o === o2) {\n    return [utcGuess, o];\n  }\n\n  // If not, change the ts by the difference in the offset\n  utcGuess -= (o2 - o) * 60 * 1000;\n\n  // If that gives us the local time we want, we're done\n  const o3 = tz.offset(utcGuess);\n  if (o2 === o3) {\n    return [utcGuess, o2];\n  }\n\n  // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time\n  return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];\n}\n\n// convert an epoch timestamp into a calendar object with the given offset\nfunction tsToObj(ts, offset) {\n  ts += offset * 60 * 1000;\n\n  const d = new Date(ts);\n\n  return {\n    year: d.getUTCFullYear(),\n    month: d.getUTCMonth() + 1,\n    day: d.getUTCDate(),\n    hour: d.getUTCHours(),\n    minute: d.getUTCMinutes(),\n    second: d.getUTCSeconds(),\n    millisecond: d.getUTCMilliseconds(),\n  };\n}\n\n// convert a calendar object to a epoch timestamp\nfunction objToTS(obj, offset, zone) {\n  return fixOffset(objToLocalTS(obj), offset, zone);\n}\n\n// create a new DT instance by adding a duration, adjusting for DSTs\nfunction adjustTime(inst, dur) {\n  const oPre = inst.o,\n    year = inst.c.year + Math.trunc(dur.years),\n    month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3,\n    c = {\n      ...inst.c,\n      year,\n      month,\n      day:\n        Math.min(inst.c.day, daysInMonth(year, month)) +\n        Math.trunc(dur.days) +\n        Math.trunc(dur.weeks) * 7,\n    },\n    millisToAdd = Duration.fromObject({\n      years: dur.years - Math.trunc(dur.years),\n      quarters: dur.quarters - Math.trunc(dur.quarters),\n      months: dur.months - Math.trunc(dur.months),\n      weeks: dur.weeks - Math.trunc(dur.weeks),\n      days: dur.days - Math.trunc(dur.days),\n      hours: dur.hours,\n      minutes: dur.minutes,\n      seconds: dur.seconds,\n      milliseconds: dur.milliseconds,\n    }).as(\"milliseconds\"),\n    localTS = objToLocalTS(c);\n\n  let [ts, o] = fixOffset(localTS, oPre, inst.zone);\n\n  if (millisToAdd !== 0) {\n    ts += millisToAdd;\n    // that could have changed the offset by going over a DST, but we want to keep the ts the same\n    o = inst.zone.offset(ts);\n  }\n\n  return { ts, o };\n}\n\n// helper useful in turning the results of parsing into real dates\n// by handling the zone options\nfunction parseDataToDateTime(parsed, parsedZone, opts, format, text, specificOffset) {\n  const { setZone, zone } = opts;\n  if ((parsed && Object.keys(parsed).length !== 0) || parsedZone) {\n    const interpretationZone = parsedZone || zone,\n      inst = DateTime.fromObject(parsed, {\n        ...opts,\n        zone: interpretationZone,\n        specificOffset,\n      });\n    return setZone ? inst : inst.setZone(zone);\n  } else {\n    return DateTime.invalid(\n      new Invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ${format}`)\n    );\n  }\n}\n\n// if you want to output a technical format (e.g. RFC 2822), this helper\n// helps handle the details\nfunction toTechFormat(dt, format, allowZ = true) {\n  return dt.isValid\n    ? Formatter.create(Locale.create(\"en-US\"), {\n        allowZ,\n        forceSimple: true,\n      }).formatDateTimeFromString(dt, format)\n    : null;\n}\n\nfunction toISODate(o, extended, precision) {\n  const longFormat = o.c.year > 9999 || o.c.year < 0;\n  let c = \"\";\n  if (longFormat && o.c.year >= 0) c += \"+\";\n  c += padStart(o.c.year, longFormat ? 6 : 4);\n  if (precision === \"year\") return c;\n  if (extended) {\n    c += \"-\";\n    c += padStart(o.c.month);\n    if (precision === \"month\") return c;\n    c += \"-\";\n  } else {\n    c += padStart(o.c.month);\n    if (precision === \"month\") return c;\n  }\n  c += padStart(o.c.day);\n  return c;\n}\n\nfunction toISOTime(\n  o,\n  extended,\n  suppressSeconds,\n  suppressMilliseconds,\n  includeOffset,\n  extendedZone,\n  precision\n) {\n  let showSeconds = !suppressSeconds || o.c.millisecond !== 0 || o.c.second !== 0,\n    c = \"\";\n  switch (precision) {\n    case \"day\":\n    case \"month\":\n    case \"year\":\n      break;\n    default:\n      c += padStart(o.c.hour);\n      if (precision === \"hour\") break;\n      if (extended) {\n        c += \":\";\n        c += padStart(o.c.minute);\n        if (precision === \"minute\") break;\n        if (showSeconds) {\n          c += \":\";\n          c += padStart(o.c.second);\n        }\n      } else {\n        c += padStart(o.c.minute);\n        if (precision === \"minute\") break;\n        if (showSeconds) {\n          c += padStart(o.c.second);\n        }\n      }\n      if (precision === \"second\") break;\n      if (showSeconds && (!suppressMilliseconds || o.c.millisecond !== 0)) {\n        c += \".\";\n        c += padStart(o.c.millisecond, 3);\n      }\n  }\n\n  if (includeOffset) {\n    if (o.isOffsetFixed && o.offset === 0 && !extendedZone) {\n      c += \"Z\";\n    } else if (o.o < 0) {\n      c += \"-\";\n      c += padStart(Math.trunc(-o.o / 60));\n      c += \":\";\n      c += padStart(Math.trunc(-o.o % 60));\n    } else {\n      c += \"+\";\n      c += padStart(Math.trunc(o.o / 60));\n      c += \":\";\n      c += padStart(Math.trunc(o.o % 60));\n    }\n  }\n\n  if (extendedZone) {\n    c += \"[\" + o.zone.ianaName + \"]\";\n  }\n  return c;\n}\n\n// defaults for unspecified units in the supported calendars\nconst defaultUnitValues = {\n    month: 1,\n    day: 1,\n    hour: 0,\n    minute: 0,\n    second: 0,\n    millisecond: 0,\n  },\n  defaultWeekUnitValues = {\n    weekNumber: 1,\n    weekday: 1,\n    hour: 0,\n    minute: 0,\n    second: 0,\n    millisecond: 0,\n  },\n  defaultOrdinalUnitValues = {\n    ordinal: 1,\n    hour: 0,\n    minute: 0,\n    second: 0,\n    millisecond: 0,\n  };\n\n// Units in the supported calendars, sorted by bigness\nconst orderedUnits = [\"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"millisecond\"],\n  orderedWeekUnits = [\n    \"weekYear\",\n    \"weekNumber\",\n    \"weekday\",\n    \"hour\",\n    \"minute\",\n    \"second\",\n    \"millisecond\",\n  ],\n  orderedOrdinalUnits = [\"year\", \"ordinal\", \"hour\", \"minute\", \"second\", \"millisecond\"];\n\n// standardize case and plurality in units\nfunction normalizeUnit(unit) {\n  const normalized = {\n    year: \"year\",\n    years: \"year\",\n    month: \"month\",\n    months: \"month\",\n    day: \"day\",\n    days: \"day\",\n    hour: \"hour\",\n    hours: \"hour\",\n    minute: \"minute\",\n    minutes: \"minute\",\n    quarter: \"quarter\",\n    quarters: \"quarter\",\n    second: \"second\",\n    seconds: \"second\",\n    millisecond: \"millisecond\",\n    milliseconds: \"millisecond\",\n    weekday: \"weekday\",\n    weekdays: \"weekday\",\n    weeknumber: \"weekNumber\",\n    weeksnumber: \"weekNumber\",\n    weeknumbers: \"weekNumber\",\n    weekyear: \"weekYear\",\n    weekyears: \"weekYear\",\n    ordinal: \"ordinal\",\n  }[unit.toLowerCase()];\n\n  if (!normalized) throw new InvalidUnitError(unit);\n\n  return normalized;\n}\n\nfunction normalizeUnitWithLocalWeeks(unit) {\n  switch (unit.toLowerCase()) {\n    case \"localweekday\":\n    case \"localweekdays\":\n      return \"localWeekday\";\n    case \"localweeknumber\":\n    case \"localweeknumbers\":\n      return \"localWeekNumber\";\n    case \"localweekyear\":\n    case \"localweekyears\":\n      return \"localWeekYear\";\n    default:\n      return normalizeUnit(unit);\n  }\n}\n\n// cache offsets for zones based on the current timestamp when this function is\n// first called. When we are handling a datetime from components like (year,\n// month, day, hour) in a time zone, we need a guess about what the timezone\n// offset is so that we can convert into a UTC timestamp. One way is to find the\n// offset of now in the zone. The actual date may have a different offset (for\n// example, if we handle a date in June while we're in December in a zone that\n// observes DST), but we can check and adjust that.\n//\n// When handling many dates, calculating the offset for now every time is\n// expensive. It's just a guess, so we can cache the offset to use even if we\n// are right on a time change boundary (we'll just correct in the other\n// direction). Using a timestamp from first read is a slight optimization for\n// handling dates close to the current date, since those dates will usually be\n// in the same offset (we could set the timestamp statically, instead). We use a\n// single timestamp for all zones to make things a bit more predictable.\n//\n// This is safe for quickDT (used by local() and utc()) because we don't fill in\n// higher-order units from tsNow (as we do in fromObject, this requires that\n// offset is calculated from tsNow).\n/**\n * @param {Zone} zone\n * @return {number}\n */\nfunction guessOffsetForZone(zone) {\n  if (zoneOffsetTs === undefined) {\n    zoneOffsetTs = Settings.now();\n  }\n\n  // Do not cache anything but IANA zones, because it is not safe to do so.\n  // Guessing an offset which is not present in the zone can cause wrong results from fixOffset\n  if (zone.type !== \"iana\") {\n    return zone.offset(zoneOffsetTs);\n  }\n  const zoneName = zone.name;\n  let offsetGuess = zoneOffsetGuessCache.get(zoneName);\n  if (offsetGuess === undefined) {\n    offsetGuess = zone.offset(zoneOffsetTs);\n    zoneOffsetGuessCache.set(zoneName, offsetGuess);\n  }\n  return offsetGuess;\n}\n\n// this is a dumbed down version of fromObject() that runs about 60% faster\n// but doesn't do any validation, makes a bunch of assumptions about what units\n// are present, and so on.\nfunction quickDT(obj, opts) {\n  const zone = normalizeZone(opts.zone, Settings.defaultZone);\n  if (!zone.isValid) {\n    return DateTime.invalid(unsupportedZone(zone));\n  }\n\n  const loc = Locale.fromObject(opts);\n\n  let ts, o;\n\n  // assume we have the higher-order units\n  if (!isUndefined(obj.year)) {\n    for (const u of orderedUnits) {\n      if (isUndefined(obj[u])) {\n        obj[u] = defaultUnitValues[u];\n      }\n    }\n\n    const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n    if (invalid) {\n      return DateTime.invalid(invalid);\n    }\n\n    const offsetProvis = guessOffsetForZone(zone);\n    [ts, o] = objToTS(obj, offsetProvis, zone);\n  } else {\n    ts = Settings.now();\n  }\n\n  return new DateTime({ ts, zone, loc, o });\n}\n\nfunction diffRelative(start, end, opts) {\n  const round = isUndefined(opts.round) ? true : opts.round,\n    rounding = isUndefined(opts.rounding) ? \"trunc\" : opts.rounding,\n    format = (c, unit) => {\n      c = roundTo(c, round || opts.calendary ? 0 : 2, opts.calendary ? \"round\" : rounding);\n      const formatter = end.loc.clone(opts).relFormatter(opts);\n      return formatter.format(c, unit);\n    },\n    differ = (unit) => {\n      if (opts.calendary) {\n        if (!end.hasSame(start, unit)) {\n          return end.startOf(unit).diff(start.startOf(unit), unit).get(unit);\n        } else return 0;\n      } else {\n        return end.diff(start, unit).get(unit);\n      }\n    };\n\n  if (opts.unit) {\n    return format(differ(opts.unit), opts.unit);\n  }\n\n  for (const unit of opts.units) {\n    const count = differ(unit);\n    if (Math.abs(count) >= 1) {\n      return format(count, unit);\n    }\n  }\n  return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]);\n}\n\nfunction lastOpts(argList) {\n  let opts = {},\n    args;\n  if (argList.length > 0 && typeof argList[argList.length - 1] === \"object\") {\n    opts = argList[argList.length - 1];\n    args = Array.from(argList).slice(0, argList.length - 1);\n  } else {\n    args = Array.from(argList);\n  }\n  return [opts, args];\n}\n\n/**\n * Timestamp to use for cached zone offset guesses (exposed for test)\n */\nlet zoneOffsetTs;\n/**\n * Cache for zone offset guesses (exposed for test).\n *\n * This optimizes quickDT via guessOffsetForZone to avoid repeated calls of\n * zone.offset().\n */\nconst zoneOffsetGuessCache = new Map();\n\n/**\n * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.\n *\n * A DateTime comprises of:\n * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch.\n * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone).\n * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`.\n *\n * Here is a brief overview of the most commonly used functionality it provides:\n *\n * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime.local}, {@link DateTime.utc}, and (most flexibly) {@link DateTime.fromObject}. To create one from a standard string format, use {@link DateTime.fromISO}, {@link DateTime.fromHTTP}, and {@link DateTime.fromRFC2822}. To create one from a custom string format, use {@link DateTime.fromFormat}. To create one from a native JS date, use {@link DateTime.fromJSDate}.\n * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month},\n * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors.\n * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors.\n * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors.\n * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}.\n * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#toJSDate}.\n *\n * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation.\n */\nexport default class DateTime {\n  /**\n   * @access private\n   */\n  constructor(config) {\n    const zone = config.zone || Settings.defaultZone;\n\n    let invalid =\n      config.invalid ||\n      (Number.isNaN(config.ts) ? new Invalid(\"invalid input\") : null) ||\n      (!zone.isValid ? unsupportedZone(zone) : null);\n    /**\n     * @access private\n     */\n    this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\n\n    let c = null,\n      o = null;\n    if (!invalid) {\n      const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);\n\n      if (unchanged) {\n        [c, o] = [config.old.c, config.old.o];\n      } else {\n        // If an offset has been passed and we have not been called from\n        // clone(), we can trust it and avoid the offset calculation.\n        const ot = isNumber(config.o) && !config.old ? config.o : zone.offset(this.ts);\n        c = tsToObj(this.ts, ot);\n        invalid = Number.isNaN(c.year) ? new Invalid(\"invalid input\") : null;\n        c = invalid ? null : c;\n        o = invalid ? null : ot;\n      }\n    }\n\n    /**\n     * @access private\n     */\n    this._zone = zone;\n    /**\n     * @access private\n     */\n    this.loc = config.loc || Locale.create();\n    /**\n     * @access private\n     */\n    this.invalid = invalid;\n    /**\n     * @access private\n     */\n    this.weekData = null;\n    /**\n     * @access private\n     */\n    this.localWeekData = null;\n    /**\n     * @access private\n     */\n    this.c = c;\n    /**\n     * @access private\n     */\n    this.o = o;\n    /**\n     * @access private\n     */\n    this.isLuxonDateTime = true;\n  }\n\n  // CONSTRUCT\n\n  /**\n   * Create a DateTime for the current instant, in the system's time zone.\n   *\n   * Use Settings to override these default values if needed.\n   * @example DateTime.now().toISO() //~> now in the ISO format\n   * @return {DateTime}\n   */\n  static now() {\n    return new DateTime({});\n  }\n\n  /**\n   * Create a local DateTime\n   * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used\n   * @param {number} [month=1] - The month, 1-indexed\n   * @param {number} [day=1] - The day of the month, 1-indexed\n   * @param {number} [hour=0] - The hour of the day, in 24-hour time\n   * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n   * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n   * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n   * @example DateTime.local()                                  //~> now\n   * @example DateTime.local({ zone: \"America/New_York\" })      //~> now, in US east coast time\n   * @example DateTime.local(2017)                              //~> 2017-01-01T00:00:00\n   * @example DateTime.local(2017, 3)                           //~> 2017-03-01T00:00:00\n   * @example DateTime.local(2017, 3, 12, { locale: \"fr\" })     //~> 2017-03-12T00:00:00, with a French locale\n   * @example DateTime.local(2017, 3, 12, 5)                    //~> 2017-03-12T05:00:00\n   * @example DateTime.local(2017, 3, 12, 5, { zone: \"utc\" })   //~> 2017-03-12T05:00:00, in UTC\n   * @example DateTime.local(2017, 3, 12, 5, 45)                //~> 2017-03-12T05:45:00\n   * @example DateTime.local(2017, 3, 12, 5, 45, 10)            //~> 2017-03-12T05:45:10\n   * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765)       //~> 2017-03-12T05:45:10.765\n   * @return {DateTime}\n   */\n  static local() {\n    const [opts, args] = lastOpts(arguments),\n      [year, month, day, hour, minute, second, millisecond] = args;\n    return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n  }\n\n  /**\n   * Create a DateTime in UTC\n   * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used\n   * @param {number} [month=1] - The month, 1-indexed\n   * @param {number} [day=1] - The day of the month\n   * @param {number} [hour=0] - The hour of the day, in 24-hour time\n   * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n   * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n   * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n   * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance\n   * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance\n   * @param {string} [options.weekSettings] - the week settings to set on the resulting DateTime instance\n   * @example DateTime.utc()                                              //~> now\n   * @example DateTime.utc(2017)                                          //~> 2017-01-01T00:00:00Z\n   * @example DateTime.utc(2017, 3)                                       //~> 2017-03-01T00:00:00Z\n   * @example DateTime.utc(2017, 3, 12)                                   //~> 2017-03-12T00:00:00Z\n   * @example DateTime.utc(2017, 3, 12, 5)                                //~> 2017-03-12T05:00:00Z\n   * @example DateTime.utc(2017, 3, 12, 5, 45)                            //~> 2017-03-12T05:45:00Z\n   * @example DateTime.utc(2017, 3, 12, 5, 45, { locale: \"fr\" })          //~> 2017-03-12T05:45:00Z with a French locale\n   * @example DateTime.utc(2017, 3, 12, 5, 45, 10)                        //~> 2017-03-12T05:45:10Z\n   * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: \"fr\" }) //~> 2017-03-12T05:45:10.765Z with a French locale\n   * @return {DateTime}\n   */\n  static utc() {\n    const [opts, args] = lastOpts(arguments),\n      [year, month, day, hour, minute, second, millisecond] = args;\n\n    opts.zone = FixedOffsetZone.utcInstance;\n    return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n  }\n\n  /**\n   * Create a DateTime from a JavaScript Date object. Uses the default zone.\n   * @param {Date} date - a JavaScript Date object\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n   * @return {DateTime}\n   */\n  static fromJSDate(date, options = {}) {\n    const ts = isDate(date) ? date.valueOf() : NaN;\n    if (Number.isNaN(ts)) {\n      return DateTime.invalid(\"invalid input\");\n    }\n\n    const zoneToUse = normalizeZone(options.zone, Settings.defaultZone);\n    if (!zoneToUse.isValid) {\n      return DateTime.invalid(unsupportedZone(zoneToUse));\n    }\n\n    return new DateTime({\n      ts: ts,\n      zone: zoneToUse,\n      loc: Locale.fromObject(options),\n    });\n  }\n\n  /**\n   * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n   * @param {number} milliseconds - a number of milliseconds since 1970 UTC\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n   * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n   * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance\n   * @return {DateTime}\n   */\n  static fromMillis(milliseconds, options = {}) {\n    if (!isNumber(milliseconds)) {\n      throw new InvalidArgumentError(\n        `fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`\n      );\n    } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {\n      // this isn't perfect because we can still end up out of range because of additional shifting, but it's a start\n      return DateTime.invalid(\"Timestamp out of range\");\n    } else {\n      return new DateTime({\n        ts: milliseconds,\n        zone: normalizeZone(options.zone, Settings.defaultZone),\n        loc: Locale.fromObject(options),\n      });\n    }\n  }\n\n  /**\n   * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n   * @param {number} seconds - a number of seconds since 1970 UTC\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n   * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n   * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance\n   * @return {DateTime}\n   */\n  static fromSeconds(seconds, options = {}) {\n    if (!isNumber(seconds)) {\n      throw new InvalidArgumentError(\"fromSeconds requires a numerical input\");\n    } else {\n      return new DateTime({\n        ts: seconds * 1000,\n        zone: normalizeZone(options.zone, Settings.defaultZone),\n        loc: Locale.fromObject(options),\n      });\n    }\n  }\n\n  /**\n   * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults.\n   * @param {Object} obj - the object to create the DateTime from\n   * @param {number} obj.year - a year, such as 1987\n   * @param {number} obj.month - a month, 1-12\n   * @param {number} obj.day - a day of the month, 1-31, depending on the month\n   * @param {number} obj.ordinal - day of the year, 1-365 or 366\n   * @param {number} obj.weekYear - an ISO week year\n   * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year\n   * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday\n   * @param {number} obj.localWeekYear - a week year, according to the locale\n   * @param {number} obj.localWeekNumber - a week number, between 1 and 52 or 53, depending on the year, according to the locale\n   * @param {number} obj.localWeekday - a weekday, 1-7, where 1 is the first and 7 is the last day of the week, according to the locale\n   * @param {number} obj.hour - hour of the day, 0-23\n   * @param {number} obj.minute - minute of the hour, 0-59\n   * @param {number} obj.second - second of the minute, 0-59\n   * @param {number} obj.millisecond - millisecond of the second, 0-999\n   * @param {Object} opts - options for creating this DateTime\n   * @param {string|Zone} [opts.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone()\n   * @param {string} [opts.locale='system\\'s locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n   * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'\n   * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01'\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }),\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' })\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' })\n   * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13'\n   * @example DateTime.fromObject({ localWeekYear: 2022, localWeekNumber: 1, localWeekday: 1 }, { locale: \"en-US\" }).toISODate() //=> '2021-12-26'\n   * @return {DateTime}\n   */\n  static fromObject(obj, opts = {}) {\n    obj = obj || {};\n    const zoneToUse = normalizeZone(opts.zone, Settings.defaultZone);\n    if (!zoneToUse.isValid) {\n      return DateTime.invalid(unsupportedZone(zoneToUse));\n    }\n\n    const loc = Locale.fromObject(opts);\n    const normalized = normalizeObject(obj, normalizeUnitWithLocalWeeks);\n    const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, loc);\n\n    const tsNow = Settings.now(),\n      offsetProvis = !isUndefined(opts.specificOffset)\n        ? opts.specificOffset\n        : zoneToUse.offset(tsNow),\n      containsOrdinal = !isUndefined(normalized.ordinal),\n      containsGregorYear = !isUndefined(normalized.year),\n      containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n      containsGregor = containsGregorYear || containsGregorMD,\n      definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n    // cases:\n    // just a weekday -> this week's instance of that weekday, no worries\n    // (gregorian data or ordinal) + (weekYear or weekNumber) -> error\n    // (gregorian month or day) + ordinal -> error\n    // otherwise just use weeks or ordinals or gregorian, depending on what's specified\n\n    if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n      throw new ConflictingSpecificationError(\n        \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n      );\n    }\n\n    if (containsGregorMD && containsOrdinal) {\n      throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n    }\n\n    const useWeekData = definiteWeekDef || (normalized.weekday && !containsGregor);\n\n    // configure ourselves to deal with gregorian dates or week stuff\n    let units,\n      defaultValues,\n      objNow = tsToObj(tsNow, offsetProvis);\n    if (useWeekData) {\n      units = orderedWeekUnits;\n      defaultValues = defaultWeekUnitValues;\n      objNow = gregorianToWeek(objNow, minDaysInFirstWeek, startOfWeek);\n    } else if (containsOrdinal) {\n      units = orderedOrdinalUnits;\n      defaultValues = defaultOrdinalUnitValues;\n      objNow = gregorianToOrdinal(objNow);\n    } else {\n      units = orderedUnits;\n      defaultValues = defaultUnitValues;\n    }\n\n    // set default values for missing stuff\n    let foundFirst = false;\n    for (const u of units) {\n      const v = normalized[u];\n      if (!isUndefined(v)) {\n        foundFirst = true;\n      } else if (foundFirst) {\n        normalized[u] = defaultValues[u];\n      } else {\n        normalized[u] = objNow[u];\n      }\n    }\n\n    // make sure the values we have are in range\n    const higherOrderInvalid = useWeekData\n        ? hasInvalidWeekData(normalized, minDaysInFirstWeek, startOfWeek)\n        : containsOrdinal\n        ? hasInvalidOrdinalData(normalized)\n        : hasInvalidGregorianData(normalized),\n      invalid = higherOrderInvalid || hasInvalidTimeData(normalized);\n\n    if (invalid) {\n      return DateTime.invalid(invalid);\n    }\n\n    // compute the actual time\n    const gregorian = useWeekData\n        ? weekToGregorian(normalized, minDaysInFirstWeek, startOfWeek)\n        : containsOrdinal\n        ? ordinalToGregorian(normalized)\n        : normalized,\n      [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse),\n      inst = new DateTime({\n        ts: tsFinal,\n        zone: zoneToUse,\n        o: offsetFinal,\n        loc,\n      });\n\n    // gregorian data + weekday serves only to validate\n    if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {\n      return DateTime.invalid(\n        \"mismatched weekday\",\n        `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`\n      );\n    }\n\n    if (!inst.isValid) {\n      return DateTime.invalid(inst.invalid);\n    }\n\n    return inst;\n  }\n\n  /**\n   * Create a DateTime from an ISO 8601 string\n   * @param {string} text - the ISO string\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone\n   * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance\n   * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance\n   * @param {string} [opts.weekSettings] - the week settings to set on the resulting DateTime instance\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123')\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'})\n   * @example DateTime.fromISO('2016-W05-4')\n   * @return {DateTime}\n   */\n  static fromISO(text, opts = {}) {\n    const [vals, parsedZone] = parseISODate(text);\n    return parseDataToDateTime(vals, parsedZone, opts, \"ISO 8601\", text);\n  }\n\n  /**\n   * Create a DateTime from an RFC 2822 string\n   * @param {string} text - the RFC 2822 string\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n   * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n   * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')\n   * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600')\n   * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')\n   * @return {DateTime}\n   */\n  static fromRFC2822(text, opts = {}) {\n    const [vals, parsedZone] = parseRFC2822Date(text);\n    return parseDataToDateTime(vals, parsedZone, opts, \"RFC 2822\", text);\n  }\n\n  /**\n   * Create a DateTime from an HTTP header date\n   * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n   * @param {string} text - the HTTP header date\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n   * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods.\n   * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n   * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')\n   * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')\n   * @example DateTime.fromHTTP('Sun Nov  6 08:49:37 1994')\n   * @return {DateTime}\n   */\n  static fromHTTP(text, opts = {}) {\n    const [vals, parsedZone] = parseHTTPDate(text);\n    return parseDataToDateTime(vals, parsedZone, opts, \"HTTP\", opts);\n  }\n\n  /**\n   * Create a DateTime from an input string and format string.\n   * Defaults to en-US if no locale has been specified, regardless of the system's locale. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens).\n   * @param {string} text - the string to parse\n   * @param {string} fmt - the format the string is expected to be in (see the link below for the formats)\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n   * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n   * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n   * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @return {DateTime}\n   */\n  static fromFormat(text, fmt, opts = {}) {\n    if (isUndefined(text) || isUndefined(fmt)) {\n      throw new InvalidArgumentError(\"fromFormat requires an input string and a format\");\n    }\n\n    const { locale = null, numberingSystem = null } = opts,\n      localeToUse = Locale.fromOpts({\n        locale,\n        numberingSystem,\n        defaultToEN: true,\n      }),\n      [vals, parsedZone, specificOffset, invalid] = parseFromTokens(localeToUse, text, fmt);\n    if (invalid) {\n      return DateTime.invalid(invalid);\n    } else {\n      return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text, specificOffset);\n    }\n  }\n\n  /**\n   * @deprecated use fromFormat instead\n   */\n  static fromString(text, fmt, opts = {}) {\n    return DateTime.fromFormat(text, fmt, opts);\n  }\n\n  /**\n   * Create a DateTime from a SQL date, time, or datetime\n   * Defaults to en-US if no locale has been specified, regardless of the system's locale\n   * @param {string} text - the string to parse\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n   * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n   * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n   * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @example DateTime.fromSQL('2017-05-15')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true })\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' })\n   * @example DateTime.fromSQL('09:12:34.342')\n   * @return {DateTime}\n   */\n  static fromSQL(text, opts = {}) {\n    const [vals, parsedZone] = parseSQL(text);\n    return parseDataToDateTime(vals, parsedZone, opts, \"SQL\", text);\n  }\n\n  /**\n   * Create an invalid DateTime.\n   * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent.\n   * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n   * @return {DateTime}\n   */\n  static invalid(reason, explanation = null) {\n    if (!reason) {\n      throw new InvalidArgumentError(\"need to specify a reason the DateTime is invalid\");\n    }\n\n    const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n    if (Settings.throwOnInvalid) {\n      throw new InvalidDateTimeError(invalid);\n    } else {\n      return new DateTime({ invalid });\n    }\n  }\n\n  /**\n   * Check if an object is an instance of DateTime. Works across context boundaries\n   * @param {object} o\n   * @return {boolean}\n   */\n  static isDateTime(o) {\n    return (o && o.isLuxonDateTime) || false;\n  }\n\n  /**\n   * Produce the format string for a set of options\n   * @param formatOpts\n   * @param localeOpts\n   * @returns {string}\n   */\n  static parseFormatForOpts(formatOpts, localeOpts = {}) {\n    const tokenList = formatOptsToTokens(formatOpts, Locale.fromObject(localeOpts));\n    return !tokenList ? null : tokenList.map((t) => (t ? t.val : null)).join(\"\");\n  }\n\n  /**\n   * Produce the the fully expanded format token for the locale\n   * Does NOT quote characters, so quoted tokens will not round trip correctly\n   * @param fmt\n   * @param localeOpts\n   * @returns {string}\n   */\n  static expandFormat(fmt, localeOpts = {}) {\n    const expanded = expandMacroTokens(Formatter.parseFormat(fmt), Locale.fromObject(localeOpts));\n    return expanded.map((t) => t.val).join(\"\");\n  }\n\n  static resetCache() {\n    zoneOffsetTs = undefined;\n    zoneOffsetGuessCache.clear();\n  }\n\n  // INFO\n\n  /**\n   * Get the value of unit.\n   * @param {string} unit - a unit such as 'minute' or 'day'\n   * @example DateTime.local(2017, 7, 4).get('month'); //=> 7\n   * @example DateTime.local(2017, 7, 4).get('day'); //=> 4\n   * @return {number}\n   */\n  get(unit) {\n    return this[unit];\n  }\n\n  /**\n   * Returns whether the DateTime is valid. Invalid DateTimes occur when:\n   * * The DateTime was created from invalid calendar information, such as the 13th month or February 30\n   * * The DateTime was created by an operation on another invalid date\n   * @type {boolean}\n   */\n  get isValid() {\n    return this.invalid === null;\n  }\n\n  /**\n   * Returns an error code if this DateTime is invalid, or null if the DateTime is valid\n   * @type {string}\n   */\n  get invalidReason() {\n    return this.invalid ? this.invalid.reason : null;\n  }\n\n  /**\n   * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid\n   * @type {string}\n   */\n  get invalidExplanation() {\n    return this.invalid ? this.invalid.explanation : null;\n  }\n\n  /**\n   * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime\n   *\n   * @type {string}\n   */\n  get locale() {\n    return this.isValid ? this.loc.locale : null;\n  }\n\n  /**\n   * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime\n   *\n   * @type {string}\n   */\n  get numberingSystem() {\n    return this.isValid ? this.loc.numberingSystem : null;\n  }\n\n  /**\n   * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime\n   *\n   * @type {string}\n   */\n  get outputCalendar() {\n    return this.isValid ? this.loc.outputCalendar : null;\n  }\n\n  /**\n   * Get the time zone associated with this DateTime.\n   * @type {Zone}\n   */\n  get zone() {\n    return this._zone;\n  }\n\n  /**\n   * Get the name of the time zone.\n   * @type {string}\n   */\n  get zoneName() {\n    return this.isValid ? this.zone.name : null;\n  }\n\n  /**\n   * Get the year\n   * @example DateTime.local(2017, 5, 25).year //=> 2017\n   * @type {number}\n   */\n  get year() {\n    return this.isValid ? this.c.year : NaN;\n  }\n\n  /**\n   * Get the quarter\n   * @example DateTime.local(2017, 5, 25).quarter //=> 2\n   * @type {number}\n   */\n  get quarter() {\n    return this.isValid ? Math.ceil(this.c.month / 3) : NaN;\n  }\n\n  /**\n   * Get the month (1-12).\n   * @example DateTime.local(2017, 5, 25).month //=> 5\n   * @type {number}\n   */\n  get month() {\n    return this.isValid ? this.c.month : NaN;\n  }\n\n  /**\n   * Get the day of the month (1-30ish).\n   * @example DateTime.local(2017, 5, 25).day //=> 25\n   * @type {number}\n   */\n  get day() {\n    return this.isValid ? this.c.day : NaN;\n  }\n\n  /**\n   * Get the hour of the day (0-23).\n   * @example DateTime.local(2017, 5, 25, 9).hour //=> 9\n   * @type {number}\n   */\n  get hour() {\n    return this.isValid ? this.c.hour : NaN;\n  }\n\n  /**\n   * Get the minute of the hour (0-59).\n   * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30\n   * @type {number}\n   */\n  get minute() {\n    return this.isValid ? this.c.minute : NaN;\n  }\n\n  /**\n   * Get the second of the minute (0-59).\n   * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52\n   * @type {number}\n   */\n  get second() {\n    return this.isValid ? this.c.second : NaN;\n  }\n\n  /**\n   * Get the millisecond of the second (0-999).\n   * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654\n   * @type {number}\n   */\n  get millisecond() {\n    return this.isValid ? this.c.millisecond : NaN;\n  }\n\n  /**\n   * Get the week year\n   * @see https://en.wikipedia.org/wiki/ISO_week_date\n   * @example DateTime.local(2014, 12, 31).weekYear //=> 2015\n   * @type {number}\n   */\n  get weekYear() {\n    return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;\n  }\n\n  /**\n   * Get the week number of the week year (1-52ish).\n   * @see https://en.wikipedia.org/wiki/ISO_week_date\n   * @example DateTime.local(2017, 5, 25).weekNumber //=> 21\n   * @type {number}\n   */\n  get weekNumber() {\n    return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;\n  }\n\n  /**\n   * Get the day of the week.\n   * 1 is Monday and 7 is Sunday\n   * @see https://en.wikipedia.org/wiki/ISO_week_date\n   * @example DateTime.local(2014, 11, 31).weekday //=> 4\n   * @type {number}\n   */\n  get weekday() {\n    return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;\n  }\n\n  /**\n   * Returns true if this date is on a weekend according to the locale, false otherwise\n   * @returns {boolean}\n   */\n  get isWeekend() {\n    return this.isValid && this.loc.getWeekendDays().includes(this.weekday);\n  }\n\n  /**\n   * Get the day of the week according to the locale.\n   * 1 is the first day of the week and 7 is the last day of the week.\n   * If the locale assigns Sunday as the first day of the week, then a date which is a Sunday will return 1,\n   * @returns {number}\n   */\n  get localWeekday() {\n    return this.isValid ? possiblyCachedLocalWeekData(this).weekday : NaN;\n  }\n\n  /**\n   * Get the week number of the week year according to the locale. Different locales assign week numbers differently,\n   * because the week can start on different days of the week (see localWeekday) and because a different number of days\n   * is required for a week to count as the first week of a year.\n   * @returns {number}\n   */\n  get localWeekNumber() {\n    return this.isValid ? possiblyCachedLocalWeekData(this).weekNumber : NaN;\n  }\n\n  /**\n   * Get the week year according to the locale. Different locales assign week numbers (and therefor week years)\n   * differently, see localWeekNumber.\n   * @returns {number}\n   */\n  get localWeekYear() {\n    return this.isValid ? possiblyCachedLocalWeekData(this).weekYear : NaN;\n  }\n\n  /**\n   * Get the ordinal (meaning the day of the year)\n   * @example DateTime.local(2017, 5, 25).ordinal //=> 145\n   * @type {number|DateTime}\n   */\n  get ordinal() {\n    return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;\n  }\n\n  /**\n   * Get the human readable short month name, such as 'Oct'.\n   * Defaults to the system's locale if no locale has been specified\n   * @example DateTime.local(2017, 10, 30).monthShort //=> Oct\n   * @type {string}\n   */\n  get monthShort() {\n    return this.isValid ? Info.months(\"short\", { locObj: this.loc })[this.month - 1] : null;\n  }\n\n  /**\n   * Get the human readable long month name, such as 'October'.\n   * Defaults to the system's locale if no locale has been specified\n   * @example DateTime.local(2017, 10, 30).monthLong //=> October\n   * @type {string}\n   */\n  get monthLong() {\n    return this.isValid ? Info.months(\"long\", { locObj: this.loc })[this.month - 1] : null;\n  }\n\n  /**\n   * Get the human readable short weekday, such as 'Mon'.\n   * Defaults to the system's locale if no locale has been specified\n   * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon\n   * @type {string}\n   */\n  get weekdayShort() {\n    return this.isValid ? Info.weekdays(\"short\", { locObj: this.loc })[this.weekday - 1] : null;\n  }\n\n  /**\n   * Get the human readable long weekday, such as 'Monday'.\n   * Defaults to the system's locale if no locale has been specified\n   * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday\n   * @type {string}\n   */\n  get weekdayLong() {\n    return this.isValid ? Info.weekdays(\"long\", { locObj: this.loc })[this.weekday - 1] : null;\n  }\n\n  /**\n   * Get the UTC offset of this DateTime in minutes\n   * @example DateTime.now().offset //=> -240\n   * @example DateTime.utc().offset //=> 0\n   * @type {number}\n   */\n  get offset() {\n    return this.isValid ? +this.o : NaN;\n  }\n\n  /**\n   * Get the short human name for the zone's current offset, for example \"EST\" or \"EDT\".\n   * Defaults to the system's locale if no locale has been specified\n   * @type {string}\n   */\n  get offsetNameShort() {\n    if (this.isValid) {\n      return this.zone.offsetName(this.ts, {\n        format: \"short\",\n        locale: this.locale,\n      });\n    } else {\n      return null;\n    }\n  }\n\n  /**\n   * Get the long human name for the zone's current offset, for example \"Eastern Standard Time\" or \"Eastern Daylight Time\".\n   * Defaults to the system's locale if no locale has been specified\n   * @type {string}\n   */\n  get offsetNameLong() {\n    if (this.isValid) {\n      return this.zone.offsetName(this.ts, {\n        format: \"long\",\n        locale: this.locale,\n      });\n    } else {\n      return null;\n    }\n  }\n\n  /**\n   * Get whether this zone's offset ever changes, as in a DST.\n   * @type {boolean}\n   */\n  get isOffsetFixed() {\n    return this.isValid ? this.zone.isUniversal : null;\n  }\n\n  /**\n   * Get whether the DateTime is in a DST.\n   * @type {boolean}\n   */\n  get isInDST() {\n    if (this.isOffsetFixed) {\n      return false;\n    } else {\n      return (\n        this.offset > this.set({ month: 1, day: 1 }).offset ||\n        this.offset > this.set({ month: 5 }).offset\n      );\n    }\n  }\n\n  /**\n   * Get those DateTimes which have the same local time as this DateTime, but a different offset from UTC\n   * in this DateTime's zone. During DST changes local time can be ambiguous, for example\n   * `2023-10-29T02:30:00` in `Europe/Berlin` can have offset `+01:00` or `+02:00`.\n   * This method will return both possible DateTimes if this DateTime's local time is ambiguous.\n   * @returns {DateTime[]}\n   */\n  getPossibleOffsets() {\n    if (!this.isValid || this.isOffsetFixed) {\n      return [this];\n    }\n    const dayMs = 86400000;\n    const minuteMs = 60000;\n    const localTS = objToLocalTS(this.c);\n    const oEarlier = this.zone.offset(localTS - dayMs);\n    const oLater = this.zone.offset(localTS + dayMs);\n\n    const o1 = this.zone.offset(localTS - oEarlier * minuteMs);\n    const o2 = this.zone.offset(localTS - oLater * minuteMs);\n    if (o1 === o2) {\n      return [this];\n    }\n    const ts1 = localTS - o1 * minuteMs;\n    const ts2 = localTS - o2 * minuteMs;\n    const c1 = tsToObj(ts1, o1);\n    const c2 = tsToObj(ts2, o2);\n    if (\n      c1.hour === c2.hour &&\n      c1.minute === c2.minute &&\n      c1.second === c2.second &&\n      c1.millisecond === c2.millisecond\n    ) {\n      return [clone(this, { ts: ts1 }), clone(this, { ts: ts2 })];\n    }\n    return [this];\n  }\n\n  /**\n   * Returns true if this DateTime is in a leap year, false otherwise\n   * @example DateTime.local(2016).isInLeapYear //=> true\n   * @example DateTime.local(2013).isInLeapYear //=> false\n   * @type {boolean}\n   */\n  get isInLeapYear() {\n    return isLeapYear(this.year);\n  }\n\n  /**\n   * Returns the number of days in this DateTime's month\n   * @example DateTime.local(2016, 2).daysInMonth //=> 29\n   * @example DateTime.local(2016, 3).daysInMonth //=> 31\n   * @type {number}\n   */\n  get daysInMonth() {\n    return daysInMonth(this.year, this.month);\n  }\n\n  /**\n   * Returns the number of days in this DateTime's year\n   * @example DateTime.local(2016).daysInYear //=> 366\n   * @example DateTime.local(2013).daysInYear //=> 365\n   * @type {number}\n   */\n  get daysInYear() {\n    return this.isValid ? daysInYear(this.year) : NaN;\n  }\n\n  /**\n   * Returns the number of weeks in this DateTime's year\n   * @see https://en.wikipedia.org/wiki/ISO_week_date\n   * @example DateTime.local(2004).weeksInWeekYear //=> 53\n   * @example DateTime.local(2013).weeksInWeekYear //=> 52\n   * @type {number}\n   */\n  get weeksInWeekYear() {\n    return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;\n  }\n\n  /**\n   * Returns the number of weeks in this DateTime's local week year\n   * @example DateTime.local(2020, 6, {locale: 'en-US'}).weeksInLocalWeekYear //=> 52\n   * @example DateTime.local(2020, 6, {locale: 'de-DE'}).weeksInLocalWeekYear //=> 53\n   * @type {number}\n   */\n  get weeksInLocalWeekYear() {\n    return this.isValid\n      ? weeksInWeekYear(\n          this.localWeekYear,\n          this.loc.getMinDaysInFirstWeek(),\n          this.loc.getStartOfWeek()\n        )\n      : NaN;\n  }\n\n  /**\n   * Returns the resolved Intl options for this DateTime.\n   * This is useful in understanding the behavior of formatting methods\n   * @param {Object} opts - the same options as toLocaleString\n   * @return {Object}\n   */\n  resolvedLocaleOptions(opts = {}) {\n    const { locale, numberingSystem, calendar } = Formatter.create(\n      this.loc.clone(opts),\n      opts\n    ).resolvedOptions(this);\n    return { locale, numberingSystem, outputCalendar: calendar };\n  }\n\n  // TRANSFORM\n\n  /**\n   * \"Set\" the DateTime's zone to UTC. Returns a newly-constructed DateTime.\n   *\n   * Equivalent to {@link DateTime#setZone}('utc')\n   * @param {number} [offset=0] - optionally, an offset from UTC in minutes\n   * @param {Object} [opts={}] - options to pass to `setZone()`\n   * @return {DateTime}\n   */\n  toUTC(offset = 0, opts = {}) {\n    return this.setZone(FixedOffsetZone.instance(offset), opts);\n  }\n\n  /**\n   * \"Set\" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime.\n   *\n   * Equivalent to `setZone('local')`\n   * @return {DateTime}\n   */\n  toLocal() {\n    return this.setZone(Settings.defaultZone);\n  }\n\n  /**\n   * \"Set\" the DateTime's zone to specified zone. Returns a newly-constructed DateTime.\n   *\n   * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link DateTime#plus}. You may wish to use {@link DateTime#toLocal} and {@link DateTime#toUTC} which provide simple convenience wrappers for commonly used zones.\n   * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link DateTime#Zone} class.\n   * @param {Object} opts - options\n   * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this.\n   * @return {DateTime}\n   */\n  setZone(zone, { keepLocalTime = false, keepCalendarTime = false } = {}) {\n    zone = normalizeZone(zone, Settings.defaultZone);\n    if (zone.equals(this.zone)) {\n      return this;\n    } else if (!zone.isValid) {\n      return DateTime.invalid(unsupportedZone(zone));\n    } else {\n      let newTS = this.ts;\n      if (keepLocalTime || keepCalendarTime) {\n        const offsetGuess = zone.offset(this.ts);\n        const asObj = this.toObject();\n        [newTS] = objToTS(asObj, offsetGuess, zone);\n      }\n      return clone(this, { ts: newTS, zone });\n    }\n  }\n\n  /**\n   * \"Set\" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime.\n   * @param {Object} properties - the properties to set\n   * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' })\n   * @return {DateTime}\n   */\n  reconfigure({ locale, numberingSystem, outputCalendar } = {}) {\n    const loc = this.loc.clone({ locale, numberingSystem, outputCalendar });\n    return clone(this, { loc });\n  }\n\n  /**\n   * \"Set\" the locale. Returns a newly-constructed DateTime.\n   * Just a convenient alias for reconfigure({ locale })\n   * @example DateTime.local(2017, 5, 25).setLocale('en-GB')\n   * @return {DateTime}\n   */\n  setLocale(locale) {\n    return this.reconfigure({ locale });\n  }\n\n  /**\n   * \"Set\" the values of specified units. Returns a newly-constructed DateTime.\n   * You can only set units with this method; for \"setting\" metadata, see {@link DateTime#reconfigure} and {@link DateTime#setZone}.\n   *\n   * This method also supports setting locale-based week units, i.e. `localWeekday`, `localWeekNumber` and `localWeekYear`.\n   * They cannot be mixed with ISO-week units like `weekday`.\n   * @param {Object} values - a mapping of units to numbers\n   * @example dt.set({ year: 2017 })\n   * @example dt.set({ hour: 8, minute: 30 })\n   * @example dt.set({ weekday: 5 })\n   * @example dt.set({ year: 2005, ordinal: 234 })\n   * @return {DateTime}\n   */\n  set(values) {\n    if (!this.isValid) return this;\n\n    const normalized = normalizeObject(values, normalizeUnitWithLocalWeeks);\n    const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, this.loc);\n\n    const settingWeekStuff =\n        !isUndefined(normalized.weekYear) ||\n        !isUndefined(normalized.weekNumber) ||\n        !isUndefined(normalized.weekday),\n      containsOrdinal = !isUndefined(normalized.ordinal),\n      containsGregorYear = !isUndefined(normalized.year),\n      containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n      containsGregor = containsGregorYear || containsGregorMD,\n      definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n    if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n      throw new ConflictingSpecificationError(\n        \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n      );\n    }\n\n    if (containsGregorMD && containsOrdinal) {\n      throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n    }\n\n    let mixed;\n    if (settingWeekStuff) {\n      mixed = weekToGregorian(\n        { ...gregorianToWeek(this.c, minDaysInFirstWeek, startOfWeek), ...normalized },\n        minDaysInFirstWeek,\n        startOfWeek\n      );\n    } else if (!isUndefined(normalized.ordinal)) {\n      mixed = ordinalToGregorian({ ...gregorianToOrdinal(this.c), ...normalized });\n    } else {\n      mixed = { ...this.toObject(), ...normalized };\n\n      // if we didn't set the day but we ended up on an overflow date,\n      // use the last day of the right month\n      if (isUndefined(normalized.day)) {\n        mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);\n      }\n    }\n\n    const [ts, o] = objToTS(mixed, this.o, this.zone);\n    return clone(this, { ts, o });\n  }\n\n  /**\n   * Add a period of time to this DateTime and return the resulting DateTime\n   *\n   * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between.\n   * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   * @example DateTime.now().plus(123) //~> in 123 milliseconds\n   * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes\n   * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow\n   * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday\n   * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min\n   * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min\n   * @return {DateTime}\n   */\n  plus(duration) {\n    if (!this.isValid) return this;\n    const dur = Duration.fromDurationLike(duration);\n    return clone(this, adjustTime(this, dur));\n  }\n\n  /**\n   * Subtract a period of time to this DateTime and return the resulting DateTime\n   * See {@link DateTime#plus}\n   * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   @return {DateTime}\n   */\n  minus(duration) {\n    if (!this.isValid) return this;\n    const dur = Duration.fromDurationLike(duration).negate();\n    return clone(this, adjustTime(this, dur));\n  }\n\n  /**\n   * \"Set\" this DateTime to the beginning of a unit of time.\n   * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n   * @param {Object} opts - options\n   * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n   * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01'\n   * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01'\n   * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays\n   * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00'\n   * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00'\n   * @return {DateTime}\n   */\n  startOf(unit, { useLocaleWeeks = false } = {}) {\n    if (!this.isValid) return this;\n\n    const o = {},\n      normalizedUnit = Duration.normalizeUnit(unit);\n    switch (normalizedUnit) {\n      case \"years\":\n        o.month = 1;\n      // falls through\n      case \"quarters\":\n      case \"months\":\n        o.day = 1;\n      // falls through\n      case \"weeks\":\n      case \"days\":\n        o.hour = 0;\n      // falls through\n      case \"hours\":\n        o.minute = 0;\n      // falls through\n      case \"minutes\":\n        o.second = 0;\n      // falls through\n      case \"seconds\":\n        o.millisecond = 0;\n        break;\n      case \"milliseconds\":\n        break;\n      // no default, invalid units throw in normalizeUnit()\n    }\n\n    if (normalizedUnit === \"weeks\") {\n      if (useLocaleWeeks) {\n        const startOfWeek = this.loc.getStartOfWeek();\n        const { weekday } = this;\n        if (weekday < startOfWeek) {\n          o.weekNumber = this.weekNumber - 1;\n        }\n        o.weekday = startOfWeek;\n      } else {\n        o.weekday = 1;\n      }\n    }\n\n    if (normalizedUnit === \"quarters\") {\n      const q = Math.ceil(this.month / 3);\n      o.month = (q - 1) * 3 + 1;\n    }\n\n    return this.set(o);\n  }\n\n  /**\n   * \"Set\" this DateTime to the end (meaning the last millisecond) of a unit of time\n   * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n   * @param {Object} opts - options\n   * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n   * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00'\n   * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00'\n   * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays\n   * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00'\n   * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00'\n   * @return {DateTime}\n   */\n  endOf(unit, opts) {\n    return this.isValid\n      ? this.plus({ [unit]: 1 })\n          .startOf(unit, opts)\n          .minus(1)\n      : this;\n  }\n\n  // OUTPUT\n\n  /**\n   * Returns a string representation of this DateTime formatted according to the specified format string.\n   * **You may not want this.** See {@link DateTime#toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens).\n   * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n   * @param {string} fmt - the format string\n   * @param {Object} opts - opts to override the configuration options on this DateTime\n   * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22'\n   * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22'\n   * @example DateTime.now().toFormat('yyyy LLL dd', { locale: \"fr\" }) //=> '2017 avr. 22'\n   * @example DateTime.now().toFormat(\"HH 'hours and' mm 'minutes'\") //=> '20 hours and 55 minutes'\n   * @return {string}\n   */\n  toFormat(fmt, opts = {}) {\n    return this.isValid\n      ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt)\n      : INVALID;\n  }\n\n  /**\n   * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`.\n   * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation\n   * of the DateTime in the assigned locale.\n   * Defaults to the system's locale if no locale has been specified\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n   * @param formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options\n   * @param {Object} opts - opts to override the configuration options on this DateTime\n   * @example DateTime.now().toLocaleString(); //=> 4/20/2017\n   * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'\n   * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'\n   * @example DateTime.now().toLocaleString(DateTime.DATE_FULL, { locale: 'fr' }); //=> '28 août 2022'\n   * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM'\n   * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM'\n   * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20'\n   * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM'\n   * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }); //=> '11:32'\n   * @return {string}\n   */\n  toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n    return this.isValid\n      ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this)\n      : INVALID;\n  }\n\n  /**\n   * Returns an array of format \"parts\", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output.\n   * Defaults to the system's locale if no locale has been specified\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts\n   * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`.\n   * @example DateTime.now().toLocaleParts(); //=> [\n   *                                   //=>   { type: 'day', value: '25' },\n   *                                   //=>   { type: 'literal', value: '/' },\n   *                                   //=>   { type: 'month', value: '05' },\n   *                                   //=>   { type: 'literal', value: '/' },\n   *                                   //=>   { type: 'year', value: '1982' }\n   *                                   //=> ]\n   */\n  toLocaleParts(opts = {}) {\n    return this.isValid\n      ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this)\n      : [];\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime\n   * @param {Object} opts - options\n   * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n   * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @param {boolean} [opts.extendedZone=false] - add the time zone format extension\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'years', 'months', 'days', 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0.\n   * @example DateTime.utc(1983, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'\n   * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00'\n   * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'\n   * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400'\n   * @example DateTime.now().toISO({ precision: 'day' }) //=> '2017-04-22Z'\n   * @example DateTime.now().toISO({ precision: 'minute' }) //=> '2017-04-22T20:47Z'\n   * @return {string|null}\n   */\n  toISO({\n    format = \"extended\",\n    suppressSeconds = false,\n    suppressMilliseconds = false,\n    includeOffset = true,\n    extendedZone = false,\n    precision = \"milliseconds\",\n  } = {}) {\n    if (!this.isValid) {\n      return null;\n    }\n\n    precision = normalizeUnit(precision);\n    const ext = format === \"extended\";\n\n    let c = toISODate(this, ext, precision);\n    if (orderedUnits.indexOf(precision) >= 3) c += \"T\";\n    c += toISOTime(\n      this,\n      ext,\n      suppressSeconds,\n      suppressMilliseconds,\n      includeOffset,\n      extendedZone,\n      precision\n    );\n    return c;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime's date component\n   * @param {Object} opts - options\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @param {string} [opts.precision='day'] - truncate output to desired precision: 'years', 'months', or 'days'.\n   * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'\n   * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'\n   * @example DateTime.utc(1982, 5, 25).toISODate({ precision: 'month' }) //=> '1982-05'\n   * @return {string|null}\n   */\n  toISODate({ format = \"extended\", precision = \"day\" } = {}) {\n    if (!this.isValid) {\n      return null;\n    }\n    return toISODate(this, format === \"extended\", normalizeUnit(precision));\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime's week date\n   * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2'\n   * @return {string}\n   */\n  toISOWeekDate() {\n    return toTechFormat(this, \"kkkk-'W'WW-c\");\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime's time component\n   * @param {Object} opts - options\n   * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n   * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @param {boolean} [opts.extendedZone=true] - add the time zone format extension\n   * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0.\n   * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z'\n   * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z'\n   * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z'\n   * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z'\n   * @example DateTime.utc().set({ hour: 7, minute: 34, second: 56 }).toISOTime({ precision: 'minute' }) //=> '07:34Z'\n   * @return {string}\n   */\n  toISOTime({\n    suppressMilliseconds = false,\n    suppressSeconds = false,\n    includeOffset = true,\n    includePrefix = false,\n    extendedZone = false,\n    format = \"extended\",\n    precision = \"milliseconds\",\n  } = {}) {\n    if (!this.isValid) {\n      return null;\n    }\n\n    precision = normalizeUnit(precision);\n    let c = includePrefix && orderedUnits.indexOf(precision) >= 3 ? \"T\" : \"\";\n    return (\n      c +\n      toISOTime(\n        this,\n        format === \"extended\",\n        suppressSeconds,\n        suppressMilliseconds,\n        includeOffset,\n        extendedZone,\n        precision\n      )\n    );\n  }\n\n  /**\n   * Returns an RFC 2822-compatible string representation of this DateTime\n   * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000'\n   * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400'\n   * @return {string}\n   */\n  toRFC2822() {\n    return toTechFormat(this, \"EEE, dd LLL yyyy HH:mm:ss ZZZ\", false);\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for use in HTTP headers. The output is always expressed in GMT.\n   * Specifically, the string conforms to RFC 1123.\n   * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n   * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT'\n   * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT'\n   * @return {string}\n   */\n  toHTTP() {\n    return toTechFormat(this.toUTC(), \"EEE, dd LLL yyyy HH:mm:ss 'GMT'\");\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for use in SQL Date\n   * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13'\n   * @return {string|null}\n   */\n  toSQLDate() {\n    if (!this.isValid) {\n      return null;\n    }\n    return toISODate(this, true);\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for use in SQL Time\n   * @param {Object} opts - options\n   * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n   * @example DateTime.utc().toSQL() //=> '05:15:16.345'\n   * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00'\n   * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345'\n   * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York'\n   * @return {string}\n   */\n  toSQLTime({ includeOffset = true, includeZone = false, includeOffsetSpace = true } = {}) {\n    let fmt = \"HH:mm:ss.SSS\";\n\n    if (includeZone || includeOffset) {\n      if (includeOffsetSpace) {\n        fmt += \" \";\n      }\n      if (includeZone) {\n        fmt += \"z\";\n      } else if (includeOffset) {\n        fmt += \"ZZ\";\n      }\n    }\n\n    return toTechFormat(this, fmt, true);\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for use in SQL DateTime\n   * @param {Object} opts - options\n   * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n   * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z'\n   * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00'\n   * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000'\n   * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York'\n   * @return {string}\n   */\n  toSQL(opts = {}) {\n    if (!this.isValid) {\n      return null;\n    }\n\n    return `${this.toSQLDate()} ${this.toSQLTime(opts)}`;\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for debugging\n   * @return {string}\n   */\n  toString() {\n    return this.isValid ? this.toISO() : INVALID;\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for the REPL.\n   * @return {string}\n   */\n  [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n    if (this.isValid) {\n      return `DateTime { ts: ${this.toISO()}, zone: ${this.zone.name}, locale: ${this.locale} }`;\n    } else {\n      return `DateTime { Invalid, reason: ${this.invalidReason} }`;\n    }\n  }\n\n  /**\n   * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime#toMillis}\n   * @return {number}\n   */\n  valueOf() {\n    return this.toMillis();\n  }\n\n  /**\n   * Returns the epoch milliseconds of this DateTime.\n   * @return {number}\n   */\n  toMillis() {\n    return this.isValid ? this.ts : NaN;\n  }\n\n  /**\n   * Returns the epoch seconds (including milliseconds in the fractional part) of this DateTime.\n   * @return {number}\n   */\n  toSeconds() {\n    return this.isValid ? this.ts / 1000 : NaN;\n  }\n\n  /**\n   * Returns the epoch seconds (as a whole number) of this DateTime.\n   * @return {number}\n   */\n  toUnixInteger() {\n    return this.isValid ? Math.floor(this.ts / 1000) : NaN;\n  }\n\n  /**\n   * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON.\n   * @return {string}\n   */\n  toJSON() {\n    return this.toISO();\n  }\n\n  /**\n   * Returns a BSON serializable equivalent to this DateTime.\n   * @return {Date}\n   */\n  toBSON() {\n    return this.toJSDate();\n  }\n\n  /**\n   * Returns a JavaScript object with this DateTime's year, month, day, and so on.\n   * @param opts - options for generating the object\n   * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n   * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 }\n   * @return {Object}\n   */\n  toObject(opts = {}) {\n    if (!this.isValid) return {};\n\n    const base = { ...this.c };\n\n    if (opts.includeConfig) {\n      base.outputCalendar = this.outputCalendar;\n      base.numberingSystem = this.loc.numberingSystem;\n      base.locale = this.loc.locale;\n    }\n    return base;\n  }\n\n  /**\n   * Returns a JavaScript Date equivalent to this DateTime.\n   * @return {Date}\n   */\n  toJSDate() {\n    return new Date(this.isValid ? this.ts : NaN);\n  }\n\n  // COMPARE\n\n  /**\n   * Return the difference between two DateTimes as a Duration.\n   * @param {DateTime} otherDateTime - the DateTime to compare this one to\n   * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration.\n   * @param {Object} opts - options that affect the creation of the Duration\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @example\n   * var i1 = DateTime.fromISO('1982-05-25T09:45'),\n   *     i2 = DateTime.fromISO('1983-10-14T10:30');\n   * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 }\n   * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 }\n   * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 }\n   * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 }\n   * @return {Duration}\n   */\n  diff(otherDateTime, unit = \"milliseconds\", opts = {}) {\n    if (!this.isValid || !otherDateTime.isValid) {\n      return Duration.invalid(\"created by diffing an invalid DateTime\");\n    }\n\n    const durOpts = { locale: this.locale, numberingSystem: this.numberingSystem, ...opts };\n\n    const units = maybeArray(unit).map(Duration.normalizeUnit),\n      otherIsLater = otherDateTime.valueOf() > this.valueOf(),\n      earlier = otherIsLater ? this : otherDateTime,\n      later = otherIsLater ? otherDateTime : this,\n      diffed = diff(earlier, later, units, durOpts);\n\n    return otherIsLater ? diffed.negate() : diffed;\n  }\n\n  /**\n   * Return the difference between this DateTime and right now.\n   * See {@link DateTime#diff}\n   * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration\n   * @param {Object} opts - options that affect the creation of the Duration\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @return {Duration}\n   */\n  diffNow(unit = \"milliseconds\", opts = {}) {\n    return this.diff(DateTime.now(), unit, opts);\n  }\n\n  /**\n   * Return an Interval spanning between this DateTime and another DateTime\n   * @param {DateTime} otherDateTime - the other end point of the Interval\n   * @return {Interval|DateTime}\n   */\n  until(otherDateTime) {\n    return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;\n  }\n\n  /**\n   * Return whether this DateTime is in the same unit of time as another DateTime.\n   * Higher-order units must also be identical for this function to return `true`.\n   * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link DateTime#setZone} to convert one of the dates if needed.\n   * @param {DateTime} otherDateTime - the other DateTime\n   * @param {string} unit - the unit of time to check sameness on\n   * @param {Object} opts - options\n   * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; only the locale of this DateTime is used\n   * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day\n   * @return {boolean}\n   */\n  hasSame(otherDateTime, unit, opts) {\n    if (!this.isValid) return false;\n\n    const inputMs = otherDateTime.valueOf();\n    const adjustedToZone = this.setZone(otherDateTime.zone, { keepLocalTime: true });\n    return (\n      adjustedToZone.startOf(unit, opts) <= inputMs && inputMs <= adjustedToZone.endOf(unit, opts)\n    );\n  }\n\n  /**\n   * Equality check\n   * Two DateTimes are equal if and only if they represent the same millisecond, have the same zone and location, and are both valid.\n   * To compare just the millisecond values, use `+dt1 === +dt2`.\n   * @param {DateTime} other - the other DateTime\n   * @return {boolean}\n   */\n  equals(other) {\n    return (\n      this.isValid &&\n      other.isValid &&\n      this.valueOf() === other.valueOf() &&\n      this.zone.equals(other.zone) &&\n      this.loc.equals(other.loc)\n    );\n  }\n\n  /**\n   * Returns a string representation of a this time relative to now, such as \"in two days\". Can only internationalize if your\n   * platform supports Intl.RelativeTimeFormat. Rounds towards zero by default.\n   * @param {Object} options - options that affect the output\n   * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n   * @param {string} [options.style=\"long\"] - the style of units, must be \"long\", \"short\", or \"narrow\"\n   * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", or \"seconds\"\n   * @param {boolean} [options.round=true] - whether to round the numbers in the output.\n   * @param {string} [options.rounding=\"trunc\"] - rounding method to use when rounding the numbers in the output. Can be \"trunc\" (toward zero), \"expand\" (away from zero), \"round\", \"floor\", or \"ceil\".\n   * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding.\n   * @param {string} options.locale - override the locale of this DateTime\n   * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n   * @example DateTime.now().plus({ days: 1 }).toRelative() //=> \"in 1 day\"\n   * @example DateTime.now().setLocale(\"es\").toRelative({ days: 1 }) //=> \"dentro de 1 día\"\n   * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: \"fr\" }) //=> \"dans 23 heures\"\n   * @example DateTime.now().minus({ days: 2 }).toRelative() //=> \"2 days ago\"\n   * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: \"hours\" }) //=> \"48 hours ago\"\n   * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> \"1.5 days ago\"\n   */\n  toRelative(options = {}) {\n    if (!this.isValid) return null;\n    const base = options.base || DateTime.fromObject({}, { zone: this.zone }),\n      padding = options.padding ? (this < base ? -options.padding : options.padding) : 0;\n    let units = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\n    let unit = options.unit;\n    if (Array.isArray(options.unit)) {\n      units = options.unit;\n      unit = undefined;\n    }\n    return diffRelative(base, this.plus(padding), {\n      ...options,\n      numeric: \"always\",\n      units,\n      unit,\n    });\n  }\n\n  /**\n   * Returns a string representation of this date relative to today, such as \"yesterday\" or \"next month\".\n   * Only internationalizes on platforms that supports Intl.RelativeTimeFormat.\n   * @param {Object} options - options that affect the output\n   * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n   * @param {string} options.locale - override the locale of this DateTime\n   * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", or \"days\"\n   * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n   * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> \"tomorrow\"\n   * @example DateTime.now().setLocale(\"es\").plus({ days: 1 }).toRelative() //=> \"\"mañana\"\n   * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: \"fr\" }) //=> \"demain\"\n   * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> \"2 days ago\"\n   */\n  toRelativeCalendar(options = {}) {\n    if (!this.isValid) return null;\n\n    return diffRelative(options.base || DateTime.fromObject({}, { zone: this.zone }), this, {\n      ...options,\n      numeric: \"auto\",\n      units: [\"years\", \"months\", \"days\"],\n      calendary: true,\n    });\n  }\n\n  /**\n   * Return the min of several date times\n   * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum\n   * @return {DateTime} the min DateTime, or undefined if called with no argument\n   */\n  static min(...dateTimes) {\n    if (!dateTimes.every(DateTime.isDateTime)) {\n      throw new InvalidArgumentError(\"min requires all arguments be DateTimes\");\n    }\n    return bestBy(dateTimes, (i) => i.valueOf(), Math.min);\n  }\n\n  /**\n   * Return the max of several date times\n   * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum\n   * @return {DateTime} the max DateTime, or undefined if called with no argument\n   */\n  static max(...dateTimes) {\n    if (!dateTimes.every(DateTime.isDateTime)) {\n      throw new InvalidArgumentError(\"max requires all arguments be DateTimes\");\n    }\n    return bestBy(dateTimes, (i) => i.valueOf(), Math.max);\n  }\n\n  // MISC\n\n  /**\n   * Explain how a string would be parsed by fromFormat()\n   * @param {string} text - the string to parse\n   * @param {string} fmt - the format the string is expected to be in (see description)\n   * @param {Object} options - options taken by fromFormat()\n   * @return {Object}\n   */\n  static fromFormatExplain(text, fmt, options = {}) {\n    const { locale = null, numberingSystem = null } = options,\n      localeToUse = Locale.fromOpts({\n        locale,\n        numberingSystem,\n        defaultToEN: true,\n      });\n    return explainFromTokens(localeToUse, text, fmt);\n  }\n\n  /**\n   * @deprecated use fromFormatExplain instead\n   */\n  static fromStringExplain(text, fmt, options = {}) {\n    return DateTime.fromFormatExplain(text, fmt, options);\n  }\n\n  /**\n   * Build a parser for `fmt` using the given locale. This parser can be passed\n   * to {@link DateTime.fromFormatParser} to a parse a date in this format. This\n   * can be used to optimize cases where many dates need to be parsed in a\n   * specific format.\n   *\n   * @param {String} fmt - the format the string is expected to be in (see\n   * description)\n   * @param {Object} options - options used to set locale and numberingSystem\n   * for parser\n   * @returns {TokenParser} - opaque object to be used\n   */\n  static buildFormatParser(fmt, options = {}) {\n    const { locale = null, numberingSystem = null } = options,\n      localeToUse = Locale.fromOpts({\n        locale,\n        numberingSystem,\n        defaultToEN: true,\n      });\n    return new TokenParser(localeToUse, fmt);\n  }\n\n  /**\n   * Create a DateTime from an input string and format parser.\n   *\n   * The format parser must have been created with the same locale as this call.\n   *\n   * @param {String} text - the string to parse\n   * @param {TokenParser} formatParser - parser from {@link DateTime.buildFormatParser}\n   * @param {Object} opts - options taken by fromFormat()\n   * @returns {DateTime}\n   */\n  static fromFormatParser(text, formatParser, opts = {}) {\n    if (isUndefined(text) || isUndefined(formatParser)) {\n      throw new InvalidArgumentError(\n        \"fromFormatParser requires an input string and a format parser\"\n      );\n    }\n    const { locale = null, numberingSystem = null } = opts,\n      localeToUse = Locale.fromOpts({\n        locale,\n        numberingSystem,\n        defaultToEN: true,\n      });\n\n    if (!localeToUse.equals(formatParser.locale)) {\n      throw new InvalidArgumentError(\n        `fromFormatParser called with a locale of ${localeToUse}, ` +\n          `but the format parser was created for ${formatParser.locale}`\n      );\n    }\n\n    const { result, zone, specificOffset, invalidReason } = formatParser.explainFromTokens(text);\n\n    if (invalidReason) {\n      return DateTime.invalid(invalidReason);\n    } else {\n      return parseDataToDateTime(\n        result,\n        zone,\n        opts,\n        `format ${formatParser.format}`,\n        text,\n        specificOffset\n      );\n    }\n  }\n\n  // FORMAT PRESETS\n\n  /**\n   * {@link DateTime#toLocaleString} format like 10/14/1983\n   * @type {Object}\n   */\n  static get DATE_SHORT() {\n    return Formats.DATE_SHORT;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Oct 14, 1983'\n   * @type {Object}\n   */\n  static get DATE_MED() {\n    return Formats.DATE_MED;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Fri, Oct 14, 1983'\n   * @type {Object}\n   */\n  static get DATE_MED_WITH_WEEKDAY() {\n    return Formats.DATE_MED_WITH_WEEKDAY;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'October 14, 1983'\n   * @type {Object}\n   */\n  static get DATE_FULL() {\n    return Formats.DATE_FULL;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Tuesday, October 14, 1983'\n   * @type {Object}\n   */\n  static get DATE_HUGE() {\n    return Formats.DATE_HUGE;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get TIME_SIMPLE() {\n    return Formats.TIME_SIMPLE;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get TIME_WITH_SECONDS() {\n    return Formats.TIME_WITH_SECONDS;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get TIME_WITH_SHORT_OFFSET() {\n    return Formats.TIME_WITH_SHORT_OFFSET;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get TIME_WITH_LONG_OFFSET() {\n    return Formats.TIME_WITH_LONG_OFFSET;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30', always 24-hour.\n   * @type {Object}\n   */\n  static get TIME_24_SIMPLE() {\n    return Formats.TIME_24_SIMPLE;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23', always 24-hour.\n   * @type {Object}\n   */\n  static get TIME_24_WITH_SECONDS() {\n    return Formats.TIME_24_WITH_SECONDS;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23 EDT', always 24-hour.\n   * @type {Object}\n   */\n  static get TIME_24_WITH_SHORT_OFFSET() {\n    return Formats.TIME_24_WITH_SHORT_OFFSET;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour.\n   * @type {Object}\n   */\n  static get TIME_24_WITH_LONG_OFFSET() {\n    return Formats.TIME_24_WITH_LONG_OFFSET;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_SHORT() {\n    return Formats.DATETIME_SHORT;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_SHORT_WITH_SECONDS() {\n    return Formats.DATETIME_SHORT_WITH_SECONDS;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_MED() {\n    return Formats.DATETIME_MED;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_MED_WITH_SECONDS() {\n    return Formats.DATETIME_MED_WITH_SECONDS;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_MED_WITH_WEEKDAY() {\n    return Formats.DATETIME_MED_WITH_WEEKDAY;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_FULL() {\n    return Formats.DATETIME_FULL;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_FULL_WITH_SECONDS() {\n    return Formats.DATETIME_FULL_WITH_SECONDS;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_HUGE() {\n    return Formats.DATETIME_HUGE;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_HUGE_WITH_SECONDS() {\n    return Formats.DATETIME_HUGE_WITH_SECONDS;\n  }\n}\n\n/**\n * @private\n */\nexport function friendlyDateTime(dateTimeish) {\n  if (DateTime.isDateTime(dateTimeish)) {\n    return dateTimeish;\n  } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {\n    return DateTime.fromJSDate(dateTimeish);\n  } else if (dateTimeish && typeof dateTimeish === \"object\") {\n    return DateTime.fromObject(dateTimeish);\n  } else {\n    throw new InvalidArgumentError(\n      `Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`\n    );\n  }\n}\n", "import DateTime from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Info from \"./info.js\";\nimport Zone from \"./zone.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport InvalidZone from \"./zones/invalidZone.js\";\nimport SystemZone from \"./zones/systemZone.js\";\nimport Settings from \"./settings.js\";\n\nconst VERSION = \"3.7.2\";\n\nexport {\n  VERSION,\n  DateTime,\n  Duration,\n  Interval,\n  Info,\n  Zone,\n  FixedOffsetZone,\n  IANAZone,\n  InvalidZone,\n  SystemZone,\n  Settings,\n};\n", "/*!\n * chartjs-adapter-luxon v1.3.1\n * https://www.chartjs.org\n * (c) 2023 chartjs-adapter-luxon Contributors\n * Released under the MIT license\n */\nimport { _adapters } from 'chart.js';\nimport { DateTime } from 'luxon';\n\nconst FORMATS = {\n  datetime: DateTime.DATETIME_MED_WITH_SECONDS,\n  millisecond: 'h:mm:ss.SSS a',\n  second: DateTime.TIME_WITH_SECONDS,\n  minute: DateTime.TIME_SIMPLE,\n  hour: {hour: 'numeric'},\n  day: {day: 'numeric', month: 'short'},\n  week: 'DD',\n  month: {month: 'short', year: 'numeric'},\n  quarter: \"'Q'q - yyyy\",\n  year: {year: 'numeric'}\n};\n\n_adapters._date.override({\n  _id: 'luxon', // DEBUG\n\n  /**\n   * @private\n   */\n  _create: function(time) {\n    return DateTime.fromMillis(time, this.options);\n  },\n\n  init(chartOptions) {\n    if (!this.options.locale) {\n      this.options.locale = chartOptions.locale;\n    }\n  },\n\n  formats: function() {\n    return FORMATS;\n  },\n\n  parse: function(value, format) {\n    const options = this.options;\n\n    const type = typeof value;\n    if (value === null || type === 'undefined') {\n      return null;\n    }\n\n    if (type === 'number') {\n      value = this._create(value);\n    } else if (type === 'string') {\n      if (typeof format === 'string') {\n        value = DateTime.fromFormat(value, format, options);\n      } else {\n        value = DateTime.fromISO(value, options);\n      }\n    } else if (value instanceof Date) {\n      value = DateTime.fromJSDate(value, options);\n    } else if (type === 'object' && !(value instanceof DateTime)) {\n      value = DateTime.fromObject(value, options);\n    }\n\n    return value.isValid ? value.valueOf() : null;\n  },\n\n  format: function(time, format) {\n    const datetime = this._create(time);\n    return typeof format === 'string'\n      ? datetime.toFormat(format)\n      : datetime.toLocaleString(format);\n  },\n\n  add: function(time, amount, unit) {\n    const args = {};\n    args[unit] = amount;\n    return this._create(time).plus(args).valueOf();\n  },\n\n  diff: function(max, min, unit) {\n    return this._create(max).diff(this._create(min)).as(unit).valueOf();\n  },\n\n  startOf: function(time, unit, weekday) {\n    if (unit === 'isoWeek') {\n      weekday = Math.trunc(Math.min(Math.max(0, weekday), 6));\n      const dateTime = this._create(time);\n      return dateTime.minus({days: (dateTime.weekday - weekday + 7) % 7}).startOf('day').valueOf();\n    }\n    return unit ? this._create(time).startOf(unit).valueOf() : time;\n  },\n\n  endOf: function(time, unit) {\n    return this._create(time).endOf(unit).valueOf();\n  }\n});\n", "/*!\n* chartjs-plugin-zoom v2.2.0\n* https://www.chartjs.org/chartjs-plugin-zoom/2.2.0/\n * (c) 2016-2024 chartjs-plugin-zoom Contributors\n * Released under the MIT License\n */\nimport Hammer from 'hammerjs';\nimport { each, valueOrDefault, almostEquals, callback, sign, getRelativePosition, _isPointInArea } from 'chart.js/helpers';\n\nconst getModifierKey = opts => opts && opts.enabled && opts.modifierKey;\nconst keyPressed = (key, event) => key && event[key + 'Key'];\nconst keyNotPressed = (key, event) => key && !event[key + 'Key'];\nfunction directionEnabled(mode, dir, chart) {\n  if (mode === undefined) {\n    return true;\n  } else if (typeof mode === 'string') {\n    return mode.indexOf(dir) !== -1;\n  } else if (typeof mode === 'function') {\n    return mode({chart}).indexOf(dir) !== -1;\n  }\n  return false;\n}\nfunction directionsEnabled(mode, chart) {\n  if (typeof mode === 'function') {\n    mode = mode({chart});\n  }\n  if (typeof mode === 'string') {\n    return {x: mode.indexOf('x') !== -1, y: mode.indexOf('y') !== -1};\n  }\n  return {x: false, y: false};\n}\nfunction debounce(fn, delay) {\n  let timeout;\n  return function() {\n    clearTimeout(timeout);\n    timeout = setTimeout(fn, delay);\n    return delay;\n  };\n}\nfunction getScaleUnderPoint({x, y}, chart) {\n  const scales = chart.scales;\n  const scaleIds = Object.keys(scales);\n  for (let i = 0; i < scaleIds.length; i++) {\n    const scale = scales[scaleIds[i]];\n    if (y >= scale.top && y <= scale.bottom && x >= scale.left && x <= scale.right) {\n      return scale;\n    }\n  }\n  return null;\n}\nfunction getEnabledScalesByPoint(options, point, chart) {\n  const {mode = 'xy', scaleMode, overScaleMode} = options || {};\n  const scale = getScaleUnderPoint(point, chart);\n  const enabled = directionsEnabled(mode, chart);\n  const scaleEnabled = directionsEnabled(scaleMode, chart);\n  if (overScaleMode) {\n    const overScaleEnabled = directionsEnabled(overScaleMode, chart);\n    for (const axis of ['x', 'y']) {\n      if (overScaleEnabled[axis]) {\n        scaleEnabled[axis] = enabled[axis];\n        enabled[axis] = false;\n      }\n    }\n  }\n  if (scale && scaleEnabled[scale.axis]) {\n    return [scale];\n  }\n  const enabledScales = [];\n  each(chart.scales, function(scaleItem) {\n    if (enabled[scaleItem.axis]) {\n      enabledScales.push(scaleItem);\n    }\n  });\n  return enabledScales;\n}\n\nconst chartStates = new WeakMap();\nfunction getState(chart) {\n  let state = chartStates.get(chart);\n  if (!state) {\n    state = {\n      originalScaleLimits: {},\n      updatedScaleLimits: {},\n      handlers: {},\n      panDelta: {},\n      dragging: false,\n      panning: false\n    };\n    chartStates.set(chart, state);\n  }\n  return state;\n}\nfunction removeState(chart) {\n  chartStates.delete(chart);\n}\n\nfunction zoomDelta(val, min, range, newRange) {\n  const minPercent = Math.max(0, Math.min(1, (val - min) / range || 0));\n  const maxPercent = 1 - minPercent;\n  return {\n    min: newRange * minPercent,\n    max: newRange * maxPercent\n  };\n}\nfunction getValueAtPoint(scale, point) {\n  const pixel = scale.isHorizontal() ? point.x : point.y;\n  return scale.getValueForPixel(pixel);\n}\nfunction linearZoomDelta(scale, zoom, center) {\n  const range = scale.max - scale.min;\n  const newRange = range * (zoom - 1);\n  const centerValue = getValueAtPoint(scale, center);\n  return zoomDelta(centerValue, scale.min, range, newRange);\n}\nfunction logarithmicZoomRange(scale, zoom, center) {\n  const centerValue = getValueAtPoint(scale, center);\n  if (centerValue === undefined) {\n    return {min: scale.min, max: scale.max};\n  }\n  const logMin = Math.log10(scale.min);\n  const logMax = Math.log10(scale.max);\n  const logCenter = Math.log10(centerValue);\n  const logRange = logMax - logMin;\n  const newLogRange = logRange * (zoom - 1);\n  const delta = zoomDelta(logCenter, logMin, logRange, newLogRange);\n  return {\n    min: Math.pow(10, logMin + delta.min),\n    max: Math.pow(10, logMax - delta.max),\n  };\n}\nfunction getScaleLimits(scale, limits) {\n  return limits && (limits[scale.id] || limits[scale.axis]) || {};\n}\nfunction getLimit(state, scale, scaleLimits, prop, fallback) {\n  let limit = scaleLimits[prop];\n  if (limit === 'original') {\n    const original = state.originalScaleLimits[scale.id][prop];\n    limit = valueOrDefault(original.options, original.scale);\n  }\n  return valueOrDefault(limit, fallback);\n}\nfunction linearRange(scale, pixel0, pixel1) {\n  const v0 = scale.getValueForPixel(pixel0);\n  const v1 = scale.getValueForPixel(pixel1);\n  return {\n    min: Math.min(v0, v1),\n    max: Math.max(v0, v1)\n  };\n}\nfunction fixRange(range, {min, max, minLimit, maxLimit}, originalLimits) {\n  const offset = (range - max + min) / 2;\n  min -= offset;\n  max += offset;\n  const origMin = originalLimits.min.options ?? originalLimits.min.scale;\n  const origMax = originalLimits.max.options ?? originalLimits.max.scale;\n  const epsilon = range / 1e6;\n  if (almostEquals(min, origMin, epsilon)) {\n    min = origMin;\n  }\n  if (almostEquals(max, origMax, epsilon)) {\n    max = origMax;\n  }\n  if (min < minLimit) {\n    min = minLimit;\n    max = Math.min(minLimit + range, maxLimit);\n  } else if (max > maxLimit) {\n    max = maxLimit;\n    min = Math.max(maxLimit - range, minLimit);\n  }\n  return {min, max};\n}\nfunction updateRange(scale, {min, max}, limits, zoom = false) {\n  const state = getState(scale.chart);\n  const {options: scaleOpts} = scale;\n  const scaleLimits = getScaleLimits(scale, limits);\n  const {minRange = 0} = scaleLimits;\n  const minLimit = getLimit(state, scale, scaleLimits, 'min', -Infinity);\n  const maxLimit = getLimit(state, scale, scaleLimits, 'max', Infinity);\n  if (zoom === 'pan' && (min < minLimit || max > maxLimit)) {\n    return true;\n  }\n  const scaleRange = scale.max - scale.min;\n  const range = zoom ? Math.max(max - min, minRange) : scaleRange;\n  if (zoom && range === minRange && scaleRange <= minRange) {\n    return true;\n  }\n  const newRange = fixRange(range, {min, max, minLimit, maxLimit}, state.originalScaleLimits[scale.id]);\n  scaleOpts.min = newRange.min;\n  scaleOpts.max = newRange.max;\n  state.updatedScaleLimits[scale.id] = newRange;\n  return scale.parse(newRange.min) !== scale.min || scale.parse(newRange.max) !== scale.max;\n}\nfunction zoomNumericalScale(scale, zoom, center, limits) {\n  const delta = linearZoomDelta(scale, zoom, center);\n  const newRange = {min: scale.min + delta.min, max: scale.max - delta.max};\n  return updateRange(scale, newRange, limits, true);\n}\nfunction zoomLogarithmicScale(scale, zoom, center, limits) {\n  const newRange = logarithmicZoomRange(scale, zoom, center);\n  return updateRange(scale, newRange, limits, true);\n}\nfunction zoomRectNumericalScale(scale, from, to, limits) {\n  updateRange(scale, linearRange(scale, from, to), limits, true);\n}\nconst integerChange = (v) => v === 0 || isNaN(v) ? 0 : v < 0 ? Math.min(Math.round(v), -1) : Math.max(Math.round(v), 1);\nfunction existCategoryFromMaxZoom(scale) {\n  const labels = scale.getLabels();\n  const maxIndex = labels.length - 1;\n  if (scale.min > 0) {\n    scale.min -= 1;\n  }\n  if (scale.max < maxIndex) {\n    scale.max += 1;\n  }\n}\nfunction zoomCategoryScale(scale, zoom, center, limits) {\n  const delta = linearZoomDelta(scale, zoom, center);\n  if (scale.min === scale.max && zoom < 1) {\n    existCategoryFromMaxZoom(scale);\n  }\n  const newRange = {min: scale.min + integerChange(delta.min), max: scale.max - integerChange(delta.max)};\n  return updateRange(scale, newRange, limits, true);\n}\nfunction scaleLength(scale) {\n  return scale.isHorizontal() ? scale.width : scale.height;\n}\nfunction panCategoryScale(scale, delta, limits) {\n  const labels = scale.getLabels();\n  const lastLabelIndex = labels.length - 1;\n  let {min, max} = scale;\n  const range = Math.max(max - min, 1);\n  const stepDelta = Math.round(scaleLength(scale) / Math.max(range, 10));\n  const stepSize = Math.round(Math.abs(delta / stepDelta));\n  let applied;\n  if (delta < -stepDelta) {\n    max = Math.min(max + stepSize, lastLabelIndex);\n    min = range === 1 ? max : max - range;\n    applied = max === lastLabelIndex;\n  } else if (delta > stepDelta) {\n    min = Math.max(0, min - stepSize);\n    max = range === 1 ? min : min + range;\n    applied = min === 0;\n  }\n  return updateRange(scale, {min, max}, limits) || applied;\n}\nconst OFFSETS = {\n  second: 500,\n  minute: 30 * 1000,\n  hour: 30 * 60 * 1000,\n  day: 12 * 60 * 60 * 1000,\n  week: 3.5 * 24 * 60 * 60 * 1000,\n  month: 15 * 24 * 60 * 60 * 1000,\n  quarter: 60 * 24 * 60 * 60 * 1000,\n  year: 182 * 24 * 60 * 60 * 1000\n};\nfunction panNumericalScale(scale, delta, limits, pan = false) {\n  const {min: prevStart, max: prevEnd, options} = scale;\n  const round = options.time && options.time.round;\n  const offset = OFFSETS[round] || 0;\n  const newMin = scale.getValueForPixel(scale.getPixelForValue(prevStart + offset) - delta);\n  const newMax = scale.getValueForPixel(scale.getPixelForValue(prevEnd + offset) - delta);\n  if (isNaN(newMin) || isNaN(newMax)) {\n    return true;\n  }\n  return updateRange(scale, {min: newMin, max: newMax}, limits, pan ? 'pan' : false);\n}\nfunction panNonLinearScale(scale, delta, limits) {\n  return panNumericalScale(scale, delta, limits, true);\n}\nconst zoomFunctions = {\n  category: zoomCategoryScale,\n  default: zoomNumericalScale,\n  logarithmic: zoomLogarithmicScale,\n};\nconst zoomRectFunctions = {\n  default: zoomRectNumericalScale,\n};\nconst panFunctions = {\n  category: panCategoryScale,\n  default: panNumericalScale,\n  logarithmic: panNonLinearScale,\n  timeseries: panNonLinearScale,\n};\n\nfunction shouldUpdateScaleLimits(scale, originalScaleLimits, updatedScaleLimits) {\n  const {id, options: {min, max}} = scale;\n  if (!originalScaleLimits[id] || !updatedScaleLimits[id]) {\n    return true;\n  }\n  const previous = updatedScaleLimits[id];\n  return previous.min !== min || previous.max !== max;\n}\nfunction removeMissingScales(limits, scales) {\n  each(limits, (opt, key) => {\n    if (!scales[key]) {\n      delete limits[key];\n    }\n  });\n}\nfunction storeOriginalScaleLimits(chart, state) {\n  const {scales} = chart;\n  const {originalScaleLimits, updatedScaleLimits} = state;\n  each(scales, function(scale) {\n    if (shouldUpdateScaleLimits(scale, originalScaleLimits, updatedScaleLimits)) {\n      originalScaleLimits[scale.id] = {\n        min: {scale: scale.min, options: scale.options.min},\n        max: {scale: scale.max, options: scale.options.max},\n      };\n    }\n  });\n  removeMissingScales(originalScaleLimits, scales);\n  removeMissingScales(updatedScaleLimits, scales);\n  return originalScaleLimits;\n}\nfunction doZoom(scale, amount, center, limits) {\n  const fn = zoomFunctions[scale.type] || zoomFunctions.default;\n  callback(fn, [scale, amount, center, limits]);\n}\nfunction doZoomRect(scale, from, to, limits) {\n  const fn = zoomRectFunctions[scale.type] || zoomRectFunctions.default;\n  callback(fn, [scale, from, to, limits]);\n}\nfunction getCenter(chart) {\n  const ca = chart.chartArea;\n  return {\n    x: (ca.left + ca.right) / 2,\n    y: (ca.top + ca.bottom) / 2,\n  };\n}\nfunction zoom(chart, amount, transition = 'none', trigger = 'api') {\n  const {x = 1, y = 1, focalPoint = getCenter(chart)} = typeof amount === 'number' ? {x: amount, y: amount} : amount;\n  const state = getState(chart);\n  const {options: {limits, zoom: zoomOptions}} = state;\n  storeOriginalScaleLimits(chart, state);\n  const xEnabled = x !== 1;\n  const yEnabled = y !== 1;\n  const enabledScales = getEnabledScalesByPoint(zoomOptions, focalPoint, chart);\n  each(enabledScales || chart.scales, function(scale) {\n    if (scale.isHorizontal() && xEnabled) {\n      doZoom(scale, x, focalPoint, limits);\n    } else if (!scale.isHorizontal() && yEnabled) {\n      doZoom(scale, y, focalPoint, limits);\n    }\n  });\n  chart.update(transition);\n  callback(zoomOptions.onZoom, [{chart, trigger}]);\n}\nfunction zoomRect(chart, p0, p1, transition = 'none', trigger = 'api') {\n  const state = getState(chart);\n  const {options: {limits, zoom: zoomOptions}} = state;\n  const {mode = 'xy'} = zoomOptions;\n  storeOriginalScaleLimits(chart, state);\n  const xEnabled = directionEnabled(mode, 'x', chart);\n  const yEnabled = directionEnabled(mode, 'y', chart);\n  each(chart.scales, function(scale) {\n    if (scale.isHorizontal() && xEnabled) {\n      doZoomRect(scale, p0.x, p1.x, limits);\n    } else if (!scale.isHorizontal() && yEnabled) {\n      doZoomRect(scale, p0.y, p1.y, limits);\n    }\n  });\n  chart.update(transition);\n  callback(zoomOptions.onZoom, [{chart, trigger}]);\n}\nfunction zoomScale(chart, scaleId, range, transition = 'none', trigger = 'api') {\n  const state = getState(chart);\n  storeOriginalScaleLimits(chart, state);\n  const scale = chart.scales[scaleId];\n  updateRange(scale, range, undefined, true);\n  chart.update(transition);\n  callback(state.options.zoom?.onZoom, [{chart, trigger}]);\n}\nfunction resetZoom(chart, transition = 'default') {\n  const state = getState(chart);\n  const originalScaleLimits = storeOriginalScaleLimits(chart, state);\n  each(chart.scales, function(scale) {\n    const scaleOptions = scale.options;\n    if (originalScaleLimits[scale.id]) {\n      scaleOptions.min = originalScaleLimits[scale.id].min.options;\n      scaleOptions.max = originalScaleLimits[scale.id].max.options;\n    } else {\n      delete scaleOptions.min;\n      delete scaleOptions.max;\n    }\n    delete state.updatedScaleLimits[scale.id];\n  });\n  chart.update(transition);\n  callback(state.options.zoom.onZoomComplete, [{chart}]);\n}\nfunction getOriginalRange(state, scaleId) {\n  const original = state.originalScaleLimits[scaleId];\n  if (!original) {\n    return;\n  }\n  const {min, max} = original;\n  return valueOrDefault(max.options, max.scale) - valueOrDefault(min.options, min.scale);\n}\nfunction getZoomLevel(chart) {\n  const state = getState(chart);\n  let min = 1;\n  let max = 1;\n  each(chart.scales, function(scale) {\n    const origRange = getOriginalRange(state, scale.id);\n    if (origRange) {\n      const level = Math.round(origRange / (scale.max - scale.min) * 100) / 100;\n      min = Math.min(min, level);\n      max = Math.max(max, level);\n    }\n  });\n  return min < 1 ? min : max;\n}\nfunction panScale(scale, delta, limits, state) {\n  const {panDelta} = state;\n  const storedDelta = panDelta[scale.id] || 0;\n  if (sign(storedDelta) === sign(delta)) {\n    delta += storedDelta;\n  }\n  const fn = panFunctions[scale.type] || panFunctions.default;\n  if (callback(fn, [scale, delta, limits])) {\n    panDelta[scale.id] = 0;\n  } else {\n    panDelta[scale.id] = delta;\n  }\n}\nfunction pan(chart, delta, enabledScales, transition = 'none') {\n  const {x = 0, y = 0} = typeof delta === 'number' ? {x: delta, y: delta} : delta;\n  const state = getState(chart);\n  const {options: {pan: panOptions, limits}} = state;\n  const {onPan} = panOptions || {};\n  storeOriginalScaleLimits(chart, state);\n  const xEnabled = x !== 0;\n  const yEnabled = y !== 0;\n  each(enabledScales || chart.scales, function(scale) {\n    if (scale.isHorizontal() && xEnabled) {\n      panScale(scale, x, limits, state);\n    } else if (!scale.isHorizontal() && yEnabled) {\n      panScale(scale, y, limits, state);\n    }\n  });\n  chart.update(transition);\n  callback(onPan, [{chart}]);\n}\nfunction getInitialScaleBounds(chart) {\n  const state = getState(chart);\n  storeOriginalScaleLimits(chart, state);\n  const scaleBounds = {};\n  for (const scaleId of Object.keys(chart.scales)) {\n    const {min, max} = state.originalScaleLimits[scaleId] || {min: {}, max: {}};\n    scaleBounds[scaleId] = {min: min.scale, max: max.scale};\n  }\n  return scaleBounds;\n}\nfunction getZoomedScaleBounds(chart) {\n  const state = getState(chart);\n  const scaleBounds = {};\n  for (const scaleId of Object.keys(chart.scales)) {\n    scaleBounds[scaleId] = state.updatedScaleLimits[scaleId];\n  }\n  return scaleBounds;\n}\nfunction isZoomedOrPanned(chart) {\n  const scaleBounds = getInitialScaleBounds(chart);\n  for (const scaleId of Object.keys(chart.scales)) {\n    const {min: originalMin, max: originalMax} = scaleBounds[scaleId];\n    if (originalMin !== undefined && chart.scales[scaleId].min !== originalMin) {\n      return true;\n    }\n    if (originalMax !== undefined && chart.scales[scaleId].max !== originalMax) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction isZoomingOrPanning(chart) {\n  const state = getState(chart);\n  return state.panning || state.dragging;\n}\n\nconst clamp = (x, from, to) => Math.min(to, Math.max(from, x));\nfunction removeHandler(chart, type) {\n  const {handlers} = getState(chart);\n  const handler = handlers[type];\n  if (handler && handler.target) {\n    handler.target.removeEventListener(type, handler);\n    delete handlers[type];\n  }\n}\nfunction addHandler(chart, target, type, handler) {\n  const {handlers, options} = getState(chart);\n  const oldHandler = handlers[type];\n  if (oldHandler && oldHandler.target === target) {\n    return;\n  }\n  removeHandler(chart, type);\n  handlers[type] = (event) => handler(chart, event, options);\n  handlers[type].target = target;\n  const passive = type === 'wheel' ? false : undefined;\n  target.addEventListener(type, handlers[type], {passive});\n}\nfunction mouseMove(chart, event) {\n  const state = getState(chart);\n  if (state.dragStart) {\n    state.dragging = true;\n    state.dragEnd = event;\n    chart.update('none');\n  }\n}\nfunction keyDown(chart, event) {\n  const state = getState(chart);\n  if (!state.dragStart || event.key !== 'Escape') {\n    return;\n  }\n  removeHandler(chart, 'keydown');\n  state.dragging = false;\n  state.dragStart = state.dragEnd = null;\n  chart.update('none');\n}\nfunction getPointPosition(event, chart) {\n  if (event.target !== chart.canvas) {\n    const canvasArea = chart.canvas.getBoundingClientRect();\n    return {\n      x: event.clientX - canvasArea.left,\n      y: event.clientY - canvasArea.top,\n    };\n  }\n  return getRelativePosition(event, chart);\n}\nfunction zoomStart(chart, event, zoomOptions) {\n  const {onZoomStart, onZoomRejected} = zoomOptions;\n  if (onZoomStart) {\n    const point = getPointPosition(event, chart);\n    if (callback(onZoomStart, [{chart, event, point}]) === false) {\n      callback(onZoomRejected, [{chart, event}]);\n      return false;\n    }\n  }\n}\nfunction mouseDown(chart, event) {\n  if (chart.legend) {\n    const point = getRelativePosition(event, chart);\n    if (_isPointInArea(point, chart.legend)) {\n      return;\n    }\n  }\n  const state = getState(chart);\n  const {pan: panOptions, zoom: zoomOptions = {}} = state.options;\n  if (\n    event.button !== 0 ||\n    keyPressed(getModifierKey(panOptions), event) ||\n    keyNotPressed(getModifierKey(zoomOptions.drag), event)\n  ) {\n    return callback(zoomOptions.onZoomRejected, [{chart, event}]);\n  }\n  if (zoomStart(chart, event, zoomOptions) === false) {\n    return;\n  }\n  state.dragStart = event;\n  addHandler(chart, chart.canvas.ownerDocument, 'mousemove', mouseMove);\n  addHandler(chart, window.document, 'keydown', keyDown);\n}\nfunction applyAspectRatio({begin, end}, aspectRatio) {\n  let width = end.x - begin.x;\n  let height = end.y - begin.y;\n  const ratio = Math.abs(width / height);\n  if (ratio > aspectRatio) {\n    width = Math.sign(width) * Math.abs(height * aspectRatio);\n  } else if (ratio < aspectRatio) {\n    height = Math.sign(height) * Math.abs(width / aspectRatio);\n  }\n  end.x = begin.x + width;\n  end.y = begin.y + height;\n}\nfunction applyMinMaxProps(rect, chartArea, points, {min, max, prop}) {\n  rect[min] = clamp(Math.min(points.begin[prop], points.end[prop]), chartArea[min], chartArea[max]);\n  rect[max] = clamp(Math.max(points.begin[prop], points.end[prop]), chartArea[min], chartArea[max]);\n}\nfunction getRelativePoints(chart, pointEvents, maintainAspectRatio) {\n  const points = {\n    begin: getPointPosition(pointEvents.dragStart, chart),\n    end: getPointPosition(pointEvents.dragEnd, chart),\n  };\n  if (maintainAspectRatio) {\n    const aspectRatio = chart.chartArea.width / chart.chartArea.height;\n    applyAspectRatio(points, aspectRatio);\n  }\n  return points;\n}\nfunction computeDragRect(chart, mode, pointEvents, maintainAspectRatio) {\n  const xEnabled = directionEnabled(mode, 'x', chart);\n  const yEnabled = directionEnabled(mode, 'y', chart);\n  const {top, left, right, bottom, width: chartWidth, height: chartHeight} = chart.chartArea;\n  const rect = {top, left, right, bottom};\n  const points = getRelativePoints(chart, pointEvents, maintainAspectRatio && xEnabled && yEnabled);\n  if (xEnabled) {\n    applyMinMaxProps(rect, chart.chartArea, points, {min: 'left', max: 'right', prop: 'x'});\n  }\n  if (yEnabled) {\n    applyMinMaxProps(rect, chart.chartArea, points, {min: 'top', max: 'bottom', prop: 'y'});\n  }\n  const width = rect.right - rect.left;\n  const height = rect.bottom - rect.top;\n  return {\n    ...rect,\n    width,\n    height,\n    zoomX: xEnabled && width ? 1 + ((chartWidth - width) / chartWidth) : 1,\n    zoomY: yEnabled && height ? 1 + ((chartHeight - height) / chartHeight) : 1\n  };\n}\nfunction mouseUp(chart, event) {\n  const state = getState(chart);\n  if (!state.dragStart) {\n    return;\n  }\n  removeHandler(chart, 'mousemove');\n  const {mode, onZoomComplete, drag: {threshold = 0, maintainAspectRatio}} = state.options.zoom;\n  const rect = computeDragRect(chart, mode, {dragStart: state.dragStart, dragEnd: event}, maintainAspectRatio);\n  const distanceX = directionEnabled(mode, 'x', chart) ? rect.width : 0;\n  const distanceY = directionEnabled(mode, 'y', chart) ? rect.height : 0;\n  const distance = Math.sqrt(distanceX * distanceX + distanceY * distanceY);\n  state.dragStart = state.dragEnd = null;\n  if (distance <= threshold) {\n    state.dragging = false;\n    chart.update('none');\n    return;\n  }\n  zoomRect(chart, {x: rect.left, y: rect.top}, {x: rect.right, y: rect.bottom}, 'zoom', 'drag');\n  state.dragging = false;\n  state.filterNextClick = true;\n  callback(onZoomComplete, [{chart}]);\n}\nfunction wheelPreconditions(chart, event, zoomOptions) {\n  if (keyNotPressed(getModifierKey(zoomOptions.wheel), event)) {\n    callback(zoomOptions.onZoomRejected, [{chart, event}]);\n    return;\n  }\n  if (zoomStart(chart, event, zoomOptions) === false) {\n    return;\n  }\n  if (event.cancelable) {\n    event.preventDefault();\n  }\n  if (event.deltaY === undefined) {\n    return;\n  }\n  return true;\n}\nfunction wheel(chart, event) {\n  const {handlers: {onZoomComplete}, options: {zoom: zoomOptions}} = getState(chart);\n  if (!wheelPreconditions(chart, event, zoomOptions)) {\n    return;\n  }\n  const rect = event.target.getBoundingClientRect();\n  const speed = zoomOptions.wheel.speed;\n  const percentage = event.deltaY >= 0 ? 2 - 1 / (1 - speed) : 1 + speed;\n  const amount = {\n    x: percentage,\n    y: percentage,\n    focalPoint: {\n      x: event.clientX - rect.left,\n      y: event.clientY - rect.top\n    }\n  };\n  zoom(chart, amount, 'zoom', 'wheel');\n  callback(onZoomComplete, [{chart}]);\n}\nfunction addDebouncedHandler(chart, name, handler, delay) {\n  if (handler) {\n    getState(chart).handlers[name] = debounce(() => callback(handler, [{chart}]), delay);\n  }\n}\nfunction addListeners(chart, options) {\n  const canvas = chart.canvas;\n  const {wheel: wheelOptions, drag: dragOptions, onZoomComplete} = options.zoom;\n  if (wheelOptions.enabled) {\n    addHandler(chart, canvas, 'wheel', wheel);\n    addDebouncedHandler(chart, 'onZoomComplete', onZoomComplete, 250);\n  } else {\n    removeHandler(chart, 'wheel');\n  }\n  if (dragOptions.enabled) {\n    addHandler(chart, canvas, 'mousedown', mouseDown);\n    addHandler(chart, canvas.ownerDocument, 'mouseup', mouseUp);\n  } else {\n    removeHandler(chart, 'mousedown');\n    removeHandler(chart, 'mousemove');\n    removeHandler(chart, 'mouseup');\n    removeHandler(chart, 'keydown');\n  }\n}\nfunction removeListeners(chart) {\n  removeHandler(chart, 'mousedown');\n  removeHandler(chart, 'mousemove');\n  removeHandler(chart, 'mouseup');\n  removeHandler(chart, 'wheel');\n  removeHandler(chart, 'click');\n  removeHandler(chart, 'keydown');\n}\n\nfunction createEnabler(chart, state) {\n  return function(recognizer, event) {\n    const {pan: panOptions, zoom: zoomOptions = {}} = state.options;\n    if (!panOptions || !panOptions.enabled) {\n      return false;\n    }\n    const srcEvent = event && event.srcEvent;\n    if (!srcEvent) {\n      return true;\n    }\n    if (!state.panning && event.pointerType === 'mouse' && (\n      keyNotPressed(getModifierKey(panOptions), srcEvent) || keyPressed(getModifierKey(zoomOptions.drag), srcEvent))\n    ) {\n      callback(panOptions.onPanRejected, [{chart, event}]);\n      return false;\n    }\n    return true;\n  };\n}\nfunction pinchAxes(p0, p1) {\n  const pinchX = Math.abs(p0.clientX - p1.clientX);\n  const pinchY = Math.abs(p0.clientY - p1.clientY);\n  const p = pinchX / pinchY;\n  let x, y;\n  if (p > 0.3 && p < 1.7) {\n    x = y = true;\n  } else if (pinchX > pinchY) {\n    x = true;\n  } else {\n    y = true;\n  }\n  return {x, y};\n}\nfunction handlePinch(chart, state, e) {\n  if (state.scale) {\n    const {center, pointers} = e;\n    const zoomPercent = 1 / state.scale * e.scale;\n    const rect = e.target.getBoundingClientRect();\n    const pinch = pinchAxes(pointers[0], pointers[1]);\n    const mode = state.options.zoom.mode;\n    const amount = {\n      x: pinch.x && directionEnabled(mode, 'x', chart) ? zoomPercent : 1,\n      y: pinch.y && directionEnabled(mode, 'y', chart) ? zoomPercent : 1,\n      focalPoint: {\n        x: center.x - rect.left,\n        y: center.y - rect.top\n      }\n    };\n    zoom(chart, amount, 'zoom', 'pinch');\n    state.scale = e.scale;\n  }\n}\nfunction startPinch(chart, state, event) {\n  if (state.options.zoom.pinch.enabled) {\n    const point = getRelativePosition(event, chart);\n    if (callback(state.options.zoom.onZoomStart, [{chart, event, point}]) === false) {\n      state.scale = null;\n      callback(state.options.zoom.onZoomRejected, [{chart, event}]);\n    } else {\n      state.scale = 1;\n    }\n  }\n}\nfunction endPinch(chart, state, e) {\n  if (state.scale) {\n    handlePinch(chart, state, e);\n    state.scale = null;\n    callback(state.options.zoom.onZoomComplete, [{chart}]);\n  }\n}\nfunction handlePan(chart, state, e) {\n  const delta = state.delta;\n  if (delta) {\n    state.panning = true;\n    pan(chart, {x: e.deltaX - delta.x, y: e.deltaY - delta.y}, state.panScales);\n    state.delta = {x: e.deltaX, y: e.deltaY};\n  }\n}\nfunction startPan(chart, state, event) {\n  const {enabled, onPanStart, onPanRejected} = state.options.pan;\n  if (!enabled) {\n    return;\n  }\n  const rect = event.target.getBoundingClientRect();\n  const point = {\n    x: event.center.x - rect.left,\n    y: event.center.y - rect.top\n  };\n  if (callback(onPanStart, [{chart, event, point}]) === false) {\n    return callback(onPanRejected, [{chart, event}]);\n  }\n  state.panScales = getEnabledScalesByPoint(state.options.pan, point, chart);\n  state.delta = {x: 0, y: 0};\n  handlePan(chart, state, event);\n}\nfunction endPan(chart, state) {\n  state.delta = null;\n  if (state.panning) {\n    state.panning = false;\n    state.filterNextClick = true;\n    callback(state.options.pan.onPanComplete, [{chart}]);\n  }\n}\nconst hammers = new WeakMap();\nfunction startHammer(chart, options) {\n  const state = getState(chart);\n  const canvas = chart.canvas;\n  const {pan: panOptions, zoom: zoomOptions} = options;\n  const mc = new Hammer.Manager(canvas);\n  if (zoomOptions && zoomOptions.pinch.enabled) {\n    mc.add(new Hammer.Pinch());\n    mc.on('pinchstart', (e) => startPinch(chart, state, e));\n    mc.on('pinch', (e) => handlePinch(chart, state, e));\n    mc.on('pinchend', (e) => endPinch(chart, state, e));\n  }\n  if (panOptions && panOptions.enabled) {\n    mc.add(new Hammer.Pan({\n      threshold: panOptions.threshold,\n      enable: createEnabler(chart, state)\n    }));\n    mc.on('panstart', (e) => startPan(chart, state, e));\n    mc.on('panmove', (e) => handlePan(chart, state, e));\n    mc.on('panend', () => endPan(chart, state));\n  }\n  hammers.set(chart, mc);\n}\nfunction stopHammer(chart) {\n  const mc = hammers.get(chart);\n  if (mc) {\n    mc.remove('pinchstart');\n    mc.remove('pinch');\n    mc.remove('pinchend');\n    mc.remove('panstart');\n    mc.remove('pan');\n    mc.remove('panend');\n    mc.destroy();\n    hammers.delete(chart);\n  }\n}\nfunction hammerOptionsChanged(oldOptions, newOptions) {\n  const {pan: oldPan, zoom: oldZoom} = oldOptions;\n  const {pan: newPan, zoom: newZoom} = newOptions;\n  if (oldZoom?.zoom?.pinch?.enabled !== newZoom?.zoom?.pinch?.enabled) {\n    return true;\n  }\n  if (oldPan?.enabled !== newPan?.enabled) {\n    return true;\n  }\n  if (oldPan?.threshold !== newPan?.threshold) {\n    return true;\n  }\n  return false;\n}\n\nvar version = \"2.2.0\";\n\nfunction draw(chart, caller, options) {\n  const dragOptions = options.zoom.drag;\n  const {dragStart, dragEnd} = getState(chart);\n  if (dragOptions.drawTime !== caller || !dragEnd) {\n    return;\n  }\n  const {left, top, width, height} = computeDragRect(chart, options.zoom.mode, {dragStart, dragEnd}, dragOptions.maintainAspectRatio);\n  const ctx = chart.ctx;\n  ctx.save();\n  ctx.beginPath();\n  ctx.fillStyle = dragOptions.backgroundColor || 'rgba(225,225,225,0.3)';\n  ctx.fillRect(left, top, width, height);\n  if (dragOptions.borderWidth > 0) {\n    ctx.lineWidth = dragOptions.borderWidth;\n    ctx.strokeStyle = dragOptions.borderColor || 'rgba(225,225,225)';\n    ctx.strokeRect(left, top, width, height);\n  }\n  ctx.restore();\n}\nvar plugin = {\n  id: 'zoom',\n  version,\n  defaults: {\n    pan: {\n      enabled: false,\n      mode: 'xy',\n      threshold: 10,\n      modifierKey: null,\n    },\n    zoom: {\n      wheel: {\n        enabled: false,\n        speed: 0.1,\n        modifierKey: null\n      },\n      drag: {\n        enabled: false,\n        drawTime: 'beforeDatasetsDraw',\n        modifierKey: null\n      },\n      pinch: {\n        enabled: false\n      },\n      mode: 'xy',\n    }\n  },\n  start: function(chart, _args, options) {\n    const state = getState(chart);\n    state.options = options;\n    if (Object.prototype.hasOwnProperty.call(options.zoom, 'enabled')) {\n      console.warn('The option `zoom.enabled` is no longer supported. Please use `zoom.wheel.enabled`, `zoom.drag.enabled`, or `zoom.pinch.enabled`.');\n    }\n    if (Object.prototype.hasOwnProperty.call(options.zoom, 'overScaleMode')\n      || Object.prototype.hasOwnProperty.call(options.pan, 'overScaleMode')) {\n      console.warn('The option `overScaleMode` is deprecated. Please use `scaleMode` instead (and update `mode` as desired).');\n    }\n    if (Hammer) {\n      startHammer(chart, options);\n    }\n    chart.pan = (delta, panScales, transition) => pan(chart, delta, panScales, transition);\n    chart.zoom = (args, transition) => zoom(chart, args, transition);\n    chart.zoomRect = (p0, p1, transition) => zoomRect(chart, p0, p1, transition);\n    chart.zoomScale = (id, range, transition) => zoomScale(chart, id, range, transition);\n    chart.resetZoom = (transition) => resetZoom(chart, transition);\n    chart.getZoomLevel = () => getZoomLevel(chart);\n    chart.getInitialScaleBounds = () => getInitialScaleBounds(chart);\n    chart.getZoomedScaleBounds = () => getZoomedScaleBounds(chart);\n    chart.isZoomedOrPanned = () => isZoomedOrPanned(chart);\n    chart.isZoomingOrPanning = () => isZoomingOrPanning(chart);\n  },\n  beforeEvent(chart, {event}) {\n    if (isZoomingOrPanning(chart)) {\n      return false;\n    }\n    if (event.type === 'click' || event.type === 'mouseup') {\n      const state = getState(chart);\n      if (state.filterNextClick) {\n        state.filterNextClick = false;\n        return false;\n      }\n    }\n  },\n  beforeUpdate: function(chart, args, options) {\n    const state = getState(chart);\n    const previousOptions = state.options;\n    state.options = options;\n    if (hammerOptionsChanged(previousOptions, options)) {\n      stopHammer(chart);\n      startHammer(chart, options);\n    }\n    addListeners(chart, options);\n  },\n  beforeDatasetsDraw(chart, _args, options) {\n    draw(chart, 'beforeDatasetsDraw', options);\n  },\n  afterDatasetsDraw(chart, _args, options) {\n    draw(chart, 'afterDatasetsDraw', options);\n  },\n  beforeDraw(chart, _args, options) {\n    draw(chart, 'beforeDraw', options);\n  },\n  afterDraw(chart, _args, options) {\n    draw(chart, 'afterDraw', options);\n  },\n  stop: function(chart) {\n    removeListeners(chart);\n    if (Hammer) {\n      stopHammer(chart);\n    }\n    removeState(chart);\n  },\n  panFunctions,\n  zoomFunctions,\n  zoomRectFunctions,\n};\n\nexport { plugin as default, pan, resetZoom, zoom, zoomRect, zoomScale };\n", "import { Controller } from \"@hotwired/stimulus\"\nimport Chart from 'chart.js/auto'\nimport 'chartjs-adapter-luxon'\nimport zoomPlugin from 'chartjs-plugin-zoom'\nChart.register(zoomPlugin);\n\n// Connects to data-controller=\"admin--invoicing-graphing\"\nexport default class extends Controller {\n  static targets = [\n    \"invoicingStatsGraph\"\n  ]\n\n  connect() {\n    fetch('invoicingStatisticsGraphData',\n          { method: 'get', headers: { 'Content-Type': 'application/json;charset=utf-8'} })\n      .then(response => response.json())\n      .then(responseData => {\n        responseData.forEach(row => {\n          row.created = Date.parse(row.year + '-' + row.month + '-' + '01')\n        });\n        this.invoicingChart = this.buildGraph(\n          this.invoicingStatsGraphTarget,\n          responseData,\n          [\n            'Invoices', 'Invoiced Sites', 'Sites with First Invoice',\n            'iFob Control Monthly', 'Reporting Lite Monthly',\n            'Reporting Lite Plus Monthly', 'Back to Base SIM Monthly',\n            'Reporting Lite Plus SIM Monthly',\n            'iFob Control Yearly', 'Reporting Lite Yearly',\n            'Reporting Lite Plus Yearly', 'Back to Base SIM Yearly',\n            'Reporting Lite Plus SIM Yearly',\n            'iFob Control Pay Once',\n          ],\n          [\n            'total_invoices', 'total_invoiced_sites', 'total_initial_site_invoice',\n            'total_sites_on_plan_1_monthly', 'total_sites_on_plan_2_monthly',\n            'total_sites_on_plan_3_monthly', 'total_sites_on_plan_4_monthly',\n            'total_sites_on_plan_5_monthly',\n            'total_sites_on_plan_1_yearly', 'total_sites_on_plan_2_yearly',\n            'total_sites_on_plan_3_yearly', 'total_sites_on_plan_4_yearly',\n            'total_sites_on_plan_5_yearly',\n            'total_sites_on_ifob_unlimited',\n          ]\n        );\n      })\n      .catch(err => {})\n  }\n\n  buildGraph(target, data, labels, yAxisDataKeys) {\n    var datasets = []\n    labels.forEach((key, index) => {\n      datasets.push({\n        label: labels[index],\n        data: data,\n        parsing: {\n          xAxisKey: 'created',\n          yAxisKey: yAxisDataKeys[index]\n        },\n        radius: 0,\n      })\n    })\n    return new Chart(\n      target,\n      {\n        type: 'line',\n        data: {\n          labels: data.map(row => row.created),\n          datasets: datasets\n        },\n        options: {\n          locale: i18n.locale,\n          animation: false,\n          parsing: false,\n          interaction: {\n            mode: 'point',\n            axis: 'xy',\n            intersect: false\n          },\n          scales: {\n            x: {\n              type: 'time',\n              time: {\n                unit: 'month'\n              },\n              ticks: {\n                major: {\n                  enabled: true\n                },\n                font: function(context) {\n                  if (context.tick && context.tick.major) {\n                    return {\n                      weight: 'bold',\n                    };\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    )\n  }\n}\n\n", "import { Controller } from \"@hotwired/stimulus\"\nimport Chart from 'chart.js/auto'\n\n// Connects to data-controller=\"admin--online-status-graphing\"\nexport default class extends Controller {\n  static targets = [\n    \"onlineStatsGraph\",\n    \"onlineTypesSplitStatsGraph\",\n    \"onlineTypesCellularBreakdownStatsGraph\",\n    \"ethernetOnlineStatsGraph\",\n    \"wifiOnlineStatsGraph\",\n    \"cellularOnlineStatsGraph\",\n    \"ethernetAndCellularEthernetOnlineStatsGraph\",\n    \"ethernetAndCellularCellularOnlineStatsGraph\",\n    \"ethernetAndCellularBothOnlineStatsGraph\",\n    \"wifiAndCellularWifiOnlineStatsGraph\",\n    \"wifiAndCellularCellularOnlineStatsGraph\",\n    \"wifiAndCellularBothOnlineStatsGraph\",\n  ]\n\n  connect() {\n    fetch('panelsOnlineStatisticsGraphData',\n          { method: 'get', headers: { 'Content-Type': 'application/json;charset=utf-8'} })\n      .then(response => response.json())\n      .then(responseData => {\n        this.onlineStatsChart = this.buildGraph(\n          this.onlineStatsGraphTarget,\n          [responseData['online'], responseData['offline'], responseData['pollfail']],\n          ['Online Panels', 'Offline Panels', 'Poll Fail Panels'],\n        );\n        this.onlineTypesSplitStatsChart = this.buildGraph(\n          this.onlineTypesSplitStatsGraphTarget,\n          [responseData['ethernet_total'], responseData['wifi_total'],\n           responseData['cellular_total'],\n           responseData['ethernet_and_public_cellular_total'] + \n            responseData['ethernet_and_3g_myalarm_cellular_total'] +\n            responseData['ethernet_and_myalarm_cellular_total'],\n           responseData['wifi_and_public_cellular_total'] +\n             responseData['wifi_and_3g_myalarm_cellular_total'] +\n             responseData['wifi_and_myalarm_cellular_total']],\n          ['Ethernet Panels', 'WiFi Panels', 'Cellular Panels',\n           'Ethernet and Cellular Panels', 'WiFi and Cellular Panels'],\n        );\n        this.onlineTypesCellularBreakdownStatsChart = this.buildGraph(\n          this.onlineTypesCellularBreakdownStatsGraphTarget,\n          [responseData['public_cellular_total'], responseData['3g_myalarm_cellular_total'], responseData['myalarm_cellular_total']],\n          ['Public Cellular Panels', '3G MyAlarm Cellular Panels', 'MyAlarm Cellular Panels'],\n        );\n        this.ethernetStatsChart = this.buildGraph(\n          this.ethernetOnlineStatsGraphTarget,\n          [responseData['ethernet_online'], responseData['ethernet_offline'], responseData['ethernet_pollfail']],\n          ['Ethernet Online Panels', 'Ethernet Offline Panels', 'Ethernet Poll Fail Panels'],\n        );\n        this.wifiStatsChart = this.buildGraph(\n          this.wifiOnlineStatsGraphTarget,\n          [responseData['wifi_online'], responseData['wifi_offline'], responseData['wifi_pollfail']],\n          ['WiFi Online Panels', 'WiFi Offline Panels', 'WiFi Poll Fail Panels'],\n        );\n        this.cellularStatsChart = this.buildGraph(\n          this.cellularOnlineStatsGraphTarget,\n          [responseData['cellular_online'], responseData['cellular_offline'], responseData['cellular_pollfail']],\n          ['Cellular Online Panels', 'Cellular Offline Panels', 'Cellular Poll Fail Panels'],\n        );\n        this.ethernetAndCellularEthernetStatsChart = this.buildGraph(\n          this.ethernetAndCellularEthernetOnlineStatsGraphTarget,\n          [\n            responseData['ethernet_and_public_cellular_eth_online'] +\n            responseData['ethernet_and_3g_myalarm_cellular_eth_online'] +\n            responseData['ethernet_and_myalarm_cellular_eth_online'],\n            responseData['ethernet_and_public_cellular_eth_offline'] +\n            responseData['ethernet_and_3g_myalarm_cellular_eth_offline'] +\n            responseData['ethernet_and_myalarm_cellular_eth_offline'],\n            responseData['ethernet_and_public_cellular_eth_pollfail'] +\n            responseData['ethernet_and_3g_myalarm_cellular_eth_pollfail'] +\n            responseData['ethernet_and_myalarm_cellular_eth_pollfail']\n          ],\n          ['Ethernet and Cellular - Ethernet Path Online Panels', 'Ethernet and Cellular - Ethernet Path Offline Panels', 'Ethernet and Cellular - Ethernet Path Poll Fail Panels'],\n        );\n        this.ethernetAndCellularCellularStatsChart = this.buildGraph(\n          this.ethernetAndCellularCellularOnlineStatsGraphTarget,\n          [\n            responseData['ethernet_and_public_cellular_cellular_online'] +\n            responseData['ethernet_and_3g_myalarm_cellular_cellular_online'] +\n            responseData['ethernet_and_myalarm_cellular_cellular_online'],\n            responseData['ethernet_and_public_cellular_cellular_offline'] +\n            responseData['ethernet_and_3g_myalarm_cellular_cellular_offline'] +\n            responseData['ethernet_and_myalarm_cellular_cellular_offline'],\n            responseData['ethernet_and_public_cellular_cellular_pollfail'] +\n            responseData['ethernet_and_3g_myalarm_cellular_cellular_pollfail'] +\n            responseData['ethernet_and_myalarm_cellular_cellular_pollfail']\n          ],\n          ['Ethernet and Cellular - Cellular Path Online Panels', 'Ethernet and Cellular - Cellular Path Offline Panels', 'Ethernet and Cellular - Cellular Path Poll Fail Panels'],\n        );\n        this.ethernetAndCellularBothStatsChart = this.buildGraph(\n          this.ethernetAndCellularBothOnlineStatsGraphTarget,\n          [\n            responseData['ethernet_and_public_cellular_both_online'] +\n            responseData['ethernet_and_3g_myalarm_cellular_both_online'] +\n            responseData['ethernet_and_myalarm_cellular_both_online'],\n            responseData['ethernet_and_public_cellular_both_offline'] +\n            responseData['ethernet_and_3g_myalarm_cellular_both_offline'] +\n            responseData['ethernet_and_myalarm_cellular_both_offline'],\n            responseData['ethernet_and_public_cellular_both_pollfail'] +\n            responseData['ethernet_and_3g_myalarm_cellular_both_pollfail'] +\n            responseData['ethernet_and_myalarm_cellular_both_pollfail']\n          ],\n          ['Ethernet and Cellular - Both Online Panels', 'Ethernet and Cellular - Both Offline Panels', 'Ethernet and Cellular - Both Poll Fail Panels'],\n        );\n        this.wifiAndCellularEthernetStatsChart = this.buildGraph(\n          this.wifiAndCellularWifiOnlineStatsGraphTarget,\n          [\n            responseData['wifi_and_public_cellular_eth_online'] +\n            responseData['wifi_and_myalarm_cellular_eth_online'] +\n            responseData['wifi_and_myalarm_cellular_eth_online'],\n            responseData['wifi_and_public_cellular_eth_offline'] +\n            responseData['wifi_and_3g_myalarm_cellular_eth_offline'] +\n            responseData['wifi_and_myalarm_cellular_eth_offline'],\n            responseData['wifi_and_public_cellular_eth_pollfail'] +\n            responseData['wifi_and_3g_myalarm_cellular_eth_pollfail'] +\n            responseData['wifi_and_myalarm_cellular_eth_pollfail']\n          ],\n          ['WiFi and Cellular - Ethernet Path Online Panels', 'WiFi and Cellular - Ethernet Path Offline Panels', 'WiFi and Cellular - Ethernet Path Poll Fail Panels'],\n        );\n        this.wifiAndCellularCellularStatsChart = this.buildGraph(\n          this.wifiAndCellularCellularOnlineStatsGraphTarget,\n          [\n            responseData['wifi_and_public_cellular_cellular_online'] +\n            responseData['wifi_and_3g_myalarm_cellular_cellular_online'] +\n            responseData['wifi_and_myalarm_cellular_cellular_online'],\n            responseData['wifi_and_public_cellular_cellular_offline'] +\n            responseData['wifi_and_3g_myalarm_cellular_cellular_offline'] +\n            responseData['wifi_and_myalarm_cellular_cellular_offline'],\n            responseData['wifi_and_public_cellular_cellular_pollfail'] +\n            responseData['wifi_and_3g_myalarm_cellular_cellular_pollfail'] +\n            responseData['wifi_and_myalarm_cellular_cellular_pollfail']\n          ],\n          ['WiFi and Cellular - Cellular Path Online Panels', 'WiFi and Cellular - Cellular Path Offline Panels', 'WiFi and Cellular - Cellular Path Poll Fail Panels'],\n        );\n        this.wifiAndCellularBothStatsChart = this.buildGraph(\n          this.wifiAndCellularBothOnlineStatsGraphTarget,\n          [\n            responseData['wifi_and_public_cellular_both_online'] +\n            responseData['wifi_and_3g_myalarm_cellular_both_online'] +\n            responseData['wifi_and_myalarm_cellular_both_online'],\n            responseData['wifi_and_public_cellular_both_offline'] +\n            responseData['wifi_and_3g_myalarm_cellular_both_offline'] +\n            responseData['wifi_and_myalarm_cellular_both_offline'],\n            responseData['wifi_and_public_cellular_both_pollfail'] +\n            responseData['wifi_and_3g_myalarm_cellular_both_pollfail'] +\n            responseData['wifi_and_myalarm_cellular_both_pollfail']\n          ],\n          ['WiFi and Cellular - Both Online Panels', 'WiFi and Cellular - Both Offline Panels', 'WiFi and Cellular - Both Poll Fail Panels'],\n        );\n      })\n      .catch(err => { console.log(err); })\n  }\n\n  buildGraph(target, data, labels) {\n    return new Chart(\n      target,\n      {\n        type: 'pie',\n        data: {\n          labels: labels,\n          datasets: [\n            {\n              data: data,\n              hoverOffset: 4\n            }\n          ]\n        }\n      }\n    )\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport Chart from 'chart.js/auto'\nimport 'chartjs-adapter-luxon'\nimport zoomPlugin from 'chartjs-plugin-zoom'\nChart.register(zoomPlugin);\n\n// Connects to data-controller=\"admin--packet-graphing\"\nexport default class extends Controller {\n  static values = {\n    serverName: String,\n    graphDuration: Number,\n  }\n  static targets = [\n    \"pollsGraph\", \"packetsGraph\", \"cpuGraph\", \"delayGraph\", \"udpGraph\",\n    \"udpErrorsGraph\", \"panelsOnlineGraph\", \"queueGraph\", \"memoryPhysUsageGraph\",\n    \"memoryUsageGraph\", \"baseStationReportingGraph\", \"timeUpdatesGraph\",\n    \"durationChoice\", \"serverChoice\"\n  ]\n\n  showGraphsForServer(event) {\n    this.serverNameValue = event.params['serverName'];\n    if (this.hasServerChoiceTarget) {\n      this.serverChoiceTarget.querySelectorAll('.btn.active').forEach(element => element.classList.remove('active'))\n    }\n    event.target.classList.add('active')\n    this.buildAllGraphs();\n  }\n\n  rebuildGraphsWithNewDuration(event) {\n    this.graphDurationValue = event.params['graphDuration']\n    if (this.hasDurationChoiceTarget) {\n      this.durationChoiceTarget.querySelectorAll('.btn-outline-primary.active').forEach(element => element.classList.remove('active'))\n    }\n    event.target.classList.add('active')\n    this.buildAllGraphs();\n  }\n\n  buildAllGraphs() {\n    fetch('packetStatisticsGraphData/' + this.serverNameValue + '/' + this.graphDurationValue,\n          { method: 'get', headers: { 'Content-Type': 'application/json;charset=utf-8'} })\n      .then(response => response.json())\n      .then(responseData => {\n        if (this.charts) {\n          this.charts.forEach(chart => {\n            this.refreshChart(chart, responseData);\n          })\n        } else {\n          this.charts = [];\n          this.charts.push(this.buildPollsGraph(responseData));\n          this.charts.push(this.buildPacketsGraph(responseData));\n          this.charts.push(this.buildCpuGraph(responseData));\n          this.charts.push(this.buildDelayGraph(responseData));\n          this.charts.push(this.buildUdpGraph(responseData));\n          this.charts.push(this.buildUdpErrorsGraph(responseData));\n          this.charts.push(this.buildPanelsOnlineGraph(responseData));\n          this.charts.push(this.buildQueueGraph(responseData));\n          this.charts.push(this.buildMemoryPhysUsageGraph(responseData));\n          this.charts.push(this.buildMemoryUsageGraph(responseData));\n          this.charts.push(this.buildBaseStationReportingGraph(responseData));\n          this.charts.push(this.buildTimeUpdatesGraph(responseData));\n        }\n      })\n      .catch(err => {})\n  }\n\n  buildPollsGraph(data) {\n    return this.buildGraph(\n      this.pollsGraphTarget,\n      data,\n      [\n        'Poll Packets IN', 'Poll Packets OUT', 'Skinny Poll Packets IN'\n      ],\n      [\n        'packets_poll', 'packets_out_poll', 'packets_skinny_poll'\n      ],\n      [\n        '', '', ''\n      ]\n    );\n  }\n\n  buildPacketsGraph(data) {\n    return this.buildGraph(\n      this.packetsGraphTarget,\n      data,\n      [\n        'Packets In', 'Packets Out', 'Packets Forwarded', 'In Queue Count'\n      ],\n      [\n        'packets_in', 'packets_out', 'packets_forwarded', 'in_queue_count'\n      ],\n      [\n        '', '', ''\n      ]\n    );\n  }\n\n  buildCpuGraph(data) {\n    return this.buildGraph(\n      this.cpuGraphTarget,\n      data,\n      [\n        'CPU Load 1 Min', 'CPU Load 5 Min', 'CPU Load 15 Min'\n      ],\n      [\n        'cpu_average_1_min', 'cpu_average_5_min', 'cpu_average_15_min'\n      ],\n      [\n        '', '', ''\n      ]\n    );\n  }\n\n  buildDelayGraph(data) {\n    return this.buildGraph(\n      this.delayGraphTarget,\n      data,\n      [\n        'Packet Out Delay'\n      ],\n      [\n        'packet_out_delay'\n      ],\n      [\n        '', '', ''\n      ]\n    );\n  }\n\n  buildUdpGraph(data) {\n    return this.buildGraph(\n      this.udpGraphTarget,\n      data,\n      [\n        'UDP In Datagrams', 'UDP Out Datagrams'\n      ],\n      [\n        'udp_in_datagrams', 'udp_out_datagrams'\n      ],\n      [\n        '', '', ''\n      ]\n    );\n  }\n\n  buildUdpErrorsGraph(data) {\n    return this.buildGraph(\n      this.udpErrorsGraphTarget,\n      data,\n      [\n        'UDP No Port Datagrams', 'UDP In Errors', 'UDP Receive Buffer Errors', 'UDP In Checksum Errors'\n      ],\n      [\n        'udp_no_ports', 'udp_in_errors', 'udp_receive_buffer_errors', 'udp_in_checksum_errors'\n      ],\n      [\n        '', '', ''\n      ]\n    );\n  }\n\n  buildPanelsOnlineGraph(data) {\n    return this.buildGraph(\n      this.panelsOnlineGraphTarget,\n      data,\n      [\n        'Panels Online', 'Poll Reply Queue Count', 'Panel Cache Count'\n      ],\n      [\n        'panels_online', 'poll_reply_queue_count', 'panel_cache_count'\n      ],\n      [\n        '', '', ''\n      ]\n    );\n  }\n\n  buildQueueGraph(data) {\n    return this.buildGraph(\n      this.queueGraphTarget,\n      data,\n      [\n        'Reply Queue Count', 'App Sessions Active', 'SLK Sessions Active'\n      ],\n      [\n        'reply_queue_count', 'apps_sessions_active', 'solutionlink_sessions_active'\n      ],\n      [\n        '', '', ''\n      ]\n    );\n  }\n\n  buildMemoryPhysUsageGraph(data) {\n    return this.buildGraph(\n      this.memoryPhysUsageGraphTarget,\n      data,\n      [\n        'Memory Physical KiB'\n      ],\n      [\n        'memory_physical_kib'\n      ],\n      [\n        '', '', ''\n      ]\n    );\n  }\n\n  buildMemoryUsageGraph(data) {\n    return this.buildGraph(\n      this.memoryUsageGraphTarget,\n      data,\n      [\n        'Memory Pages'\n      ],\n      [\n        'memory_pages'\n      ],\n      [\n        '', '', ''\n      ]\n    );\n  }\n\n  buildBaseStationReportingGraph(data) {\n    return this.buildGraph(\n      this.baseStationReportingGraphTarget,\n      data,\n      [\n        'CID Sent',\n        'CSV Sent (TCP)',\n        'CSV Sent (UDP)',\n        'CSV Failed',\n        'SIA Sent (TCP)',\n        'SIA Sent (UDP)',\n        'SIA Retries',\n        'SIA Failed',\n        'MVR Sent',\n        'MVR Retries to Relay',\n        'MVR Retries',\n        'MVR Failed',\n      ],\n      [\n        'cid_queued',\n        'csv_reports_sent_tcp',\n        'csv_reports_sent_udp',\n        'csv_reports_failed',\n        'sia_reports_sent_tcp',\n        'sia_reports_sent_udp',\n        'sia_reports_retry',\n        'sia_report_failed',\n        'mvr_reports_sent',\n        'mvr_reports_relay_retry',\n        'mvr_reports_retry',\n        'mvr_reports_fail',\n      ],\n      [\n        '', '', ''\n      ]\n    );\n  }\n\n  buildTimeUpdatesGraph(data) {\n    return this.buildGraph(\n      this.timeUpdatesGraphTarget,\n      data,\n      [\n        'Time Updates Scheduled',\n        'Time Updates Requested',\n        'Time Updates Denied',\n        'Time Zone API Calls OK',\n        'Time Zone API Calls Fail'\n      ],\n      [\n        'time_update_scheduled',\n        'time_update_requested',\n        'time_update_denied',\n        'timezone_api_calls_ok',\n        'timezone_api_calls_fail'\n      ],\n      [\n        '', '', ''\n      ]\n    );\n  }\n\n  refreshChart(chart, data) {\n    chart.data.datasets.forEach(dataset => {\n      dataset.data = data;\n    })\n    chart.update();\n  }\n\n  buildDatasetsFromData(labels, data, yAxisDataKeys, colours) {\n    var datasets = []\n    labels.forEach((key, index) => {\n      datasets.push({\n        label: labels[index],\n        data: data,\n        parsing: {\n          xAxisKey: 'source_time_',\n          yAxisKey: yAxisDataKeys[index]\n        },\n        borderColor: colours[index],\n        backgroundColor: colours[index],\n        radius: 0,\n        borderWidth: 1,\n      })\n    })\n    return datasets\n  }\n\n  buildGraph(target, data, labels, yAxisDataKeys, colours) {\n    return new Chart(\n      target,\n      {\n        type: 'line',\n        data: {\n          labels: data.map(row => new Date(row.source_time_)),\n          datasets: this.buildDatasetsFromData(labels, data, yAxisDataKeys, colours)\n        },\n        options: {\n          locale: i18n.locale,\n          animation: false,\n          parsing: false,\n          interaction: {\n            mode: 'nearest',\n            axis: 'x',\n            intersect: false\n          },\n          plugins: {\n            decimation: {\n              enabled: false,\n              algorithm: 'min-max',\n            },\n            zoom: {\n              pan: {\n                enabled: true,\n                mode: 'x',\n                modifierKey: 'ctrl',\n              },\n              zoom: {\n                drag: {\n                  enabled: true\n                },\n                mode: 'x',\n              },\n            }\n          },\n          scales: {\n            x: {\n              type: 'time',\n              ticks: {\n                maxRotation: 0,\n                autoSkip: true,\n                major: {\n                  enabled: true\n                },\n                font: function(context) {\n                  if (context.tick && context.tick.major) {\n                    return {\n                      weight: 'bold',\n                    };\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    )\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"admin--pending-installers\"\nexport default class extends Controller {\n  static targets = [\n    \"pendingInstallerNoteInstallerInfo\", \"pendingInstallerNoteInstallerID\",\n    \"pendingInstallerNotesList\", \"showPendingInstallerNotesInstallerInfo\",\n    \"approvePendingInstallerName\", \"approveDeniedPendingInstallerName\",\n    \"approvePendingInstallerButton\", \"approveDeniedPendingInstallerButton\",\n  ]\n  connect() {\n  }\n\n  addNote(event) {\n    if (this.hasPendingInstallerNoteInstallerInfoTarget) {\n      this.pendingInstallerNoteInstallerIDTarget.value = event.params['installerId']\n      this.pendingInstallerNoteInstallerInfoTarget.innerHTML = event.params['installerName']\n    }\n  }\n\n  showPendingInstallerNotes(events) {\n    if (this.hasPendingInstallerNotesListTarget) {\n      this.showPendingInstallerNotesInstallerInfoTarget.innerHTML = event.params['installerName']\n      // TODO: See if we can get the route from a param\n      fetch('pendingInstallerNotes/' + event.params['installerId'], { method: 'get', headers: { 'Content-Type': 'application/json;charset=utf-8'} })\n        .then(response => response.json())\n        .then(responseData => {\n          this.pendingInstallerNotesListTarget.querySelectorAll('tr').forEach(element => element.remove())\n          var rowPos = 0\n          responseData.forEach(note => {\n            var row = this.pendingInstallerNotesListTarget.insertRow(rowPos)\n            row.insertCell().innerHTML = note.note\n            row.insertCell().innerHTML = note.admin_username\n            row.insertCell().innerHTML = new Date(note.created).toLocaleString()\n            rowPos++\n          })\n        })\n        .catch(err => {})\n    }\n  }\n\n  approvePendingInstaller(event) {\n    if (this.hasApprovePendingInstallerNameTarget) {\n      this.approvePendingInstallerNameTarget.innerHTML = event.params['installerName']\n      this.approvePendingInstallerButtonTarget.href = '/admin/approveInstaller/' + event.params['installerId']\n    }\n  }\n\n  approvePreviouslyDeniedInstaller(event) {\n    if (this.hasApproveDeniedPendingInstallerNameTarget) {\n      this.approveDeniedPendingInstallerNameTarget.innerHTML = event.params['installerName']\n      this.approveDeniedPendingInstallerButtonTarget.href = '/admin/approveInstaller/' + event.params['installerId']\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport Chart from 'chart.js/auto'\nimport 'chartjs-adapter-luxon'\nimport zoomPlugin from 'chartjs-plugin-zoom'\nChart.register(zoomPlugin);\n\n// Connects to data-controller=\"admin--plans-graphing\"\nexport default class extends Controller {\n  static values = {\n    dataUrl: String,\n  };\n  static targets = [\n    \"onlineStatesStatsGraph\", \"connectionPathStatsGraph\", \"basePlanStatsGraph\",\n    \"basePlanOptionStatsGraph\",\n    \"ifobControlStatsGraph\", \"reportingLiteStatsGraph\", \"reportingLiteExtrasStatsGraph\",\n    \"reportingLitePlusStatsGraph\", \"reportingLitePlusExtrasStatsGraph\",\n    \"backToBaseStatsGraph\", \"backToBaseExtrasStatsGraph\",\n    \"reportingLitePlusSimStatsGraph\", \"reportingLitePlusSimExtrasStatsGraph\",\n  ]\n\n  connect() {\n    if (this.hasDataUrlValue) {\n      fetch(this.dataUrlValue,\n            { method: 'get', headers: { 'Content-Type': 'application/json;charset=utf-8'} })\n        .then(response => response.json())\n        .then(responseData => {\n          this.panelsOnlineChart = this.buildOnlineStatsGraphs(responseData);\n          this.connectionStatsChart = this.buildConnectionStatsGraphs(responseData);\n          this.basePlansChart = this.buildBasePlanStatsGraphs(responseData);\n          this.basePlanOptionsChart = this.buildBasePlanOptionStatsGraphs(responseData);\n          this.ifobControlPlansChart = this.buildIfobControlStatsGraphs(responseData);\n          this.reportingLitePlanChart = this.buildReportingLiteStatsGraphs(responseData);\n          this.reportingLitePlanExtrasChart = this.buildReportingLiteWithPlanOptionsStatsGraphs(responseData);\n          this.reportingLitePlusPlanChart = this.buildReportingLitePlusStatsGraphs(responseData);\n          this.reportingLitePlusPlanExtrasChart = this.buildReportingLitePlusWithPlanOptionsStatsGraphs(responseData);\n          this.backToBasePlanChart = this.buildBackToBaseStatsGraphs(responseData);\n          this.backToBasePlanExtrasChart = this.buildBackToBaseWithPlanOptionsStatsGraphs(responseData);\n          this.reportingLitePlusSimPlanChart = this.buildReportingLitePlusSimStatsGraphs(responseData);\n          this.reportingLitePlusSimPlanExtrasChart = this.buildReportingLitePlusSimWithPlanOptionsStatsGraphs(responseData);\n        })\n        .catch(err => { console.log(err);})\n    }\n  }\n\n  buildOnlineStatsGraphs(data) {\n    return this.buildGraph(\n      this.onlineStatesStatsGraphTarget,\n      data,\n      [\n        'Online Panels', 'Offline Panels', 'Panels in Poll Fail'\n      ],\n      [\n        'online_panels', 'offline_panels', 'pollfail_panels'\n      ],\n      [\n        'green', 'orange', 'red'\n      ]\n    );\n  }\n\n  buildConnectionStatsGraphs(data) {\n    return this.buildGraph(\n      this.connectionPathStatsGraphTarget,\n      data,\n      [\n        'Ethernet/WiFi Panels', 'Cellular Panels', 'Ethernet/WiFi + Cellular Panels'\n      ],\n      [\n        'ethernet_panels', 'cellular_panels', 'ethernet_and_cellular_panels'\n      ],\n      [\n        '', '', ''\n      ]\n    );\n  }\n\n  buildBasePlanStatsGraphs(data) {\n    return this.buildGraph(\n      this.basePlanStatsGraphTarget,\n      data,\n      [\n        'No Plan Panels', 'iFob Control Panels', 'Reporting Lite Panels',\n        'Reporting Lite Plus Panels', 'Back to Base SIM Panels', 'Reporting Lite Plus SIM Panels'\n      ],\n      [\n        'no_plan_panels', 'ifob_control_panels', 'reporting_lite_panels',\n        'reporting_lite_plus_panels', 'back_to_base_panels', 'reporting_lite_plus_sim_panels'\n      ],\n      [\n        '', '', ''\n      ]\n    );\n  }\n\n  buildBasePlanOptionStatsGraphs(data) {\n    return this.buildGraph(\n      this.basePlanOptionStatsGraphTarget,\n      data,\n      [\n        'No Plan Option Panels', 'Twenty Minute Poll Fail Panels', 'Advanced Personal Reporting Panels',\n        'Dual SIM Panels', 'Additional Mobile Users and Personal Reporting Rules Panels', 'Emergency Voice Panels'\n      ],\n      [\n        'no_plan_option_panels', 'one_hour_pollfail_panels', 'adv_personal_rules_panels',\n        'dual_sim_panels', 'extra_users_and_personal_rules_panels', 'emergency_voice_panels'\n      ],\n      [\n        '', '', ''\n      ]\n    );\n  }\n\n  buildIfobControlStatsGraphs(data) {\n    return this.buildGraph(\n      this.ifobControlStatsGraphTarget,\n      data,\n      [\n        'iFob Control Monthly', 'iFob Control Yearly', 'iFob Control Pay Once', 'Upgraded from iFob Control Pay Once'\n      ],\n      [\n        'ifob_control_monthly_panels', 'ifob_control_yearly_panels', 'ifob_control_unlimited_panels', 'ifob_control_unlimited_upgraded_panels'\n      ],\n      [\n        '', '', ''\n      ]\n    );\n  }\n\n  buildReportingLiteStatsGraphs(data) {\n    return this.buildGraph(\n      this.reportingLiteStatsGraphTarget,\n      data,\n      [\n        'Reporting Lite Monthly', 'Reporting Lite Yearly'\n      ],\n      [\n        'reporting_lite_monthly_panels', 'reporting_lite_yearly_panels'\n      ],\n      [\n        '', '', ''\n      ]\n    );\n  }\n\n  buildReportingLiteWithPlanOptionsStatsGraphs(data) {\n    return this.buildGraph(\n      this.reportingLiteExtrasStatsGraphTarget,\n      data,\n      [\n        'Reporting Lite - Twenty Minute Poll Fail', 'Reporting Lite - Advanced Personal Reporting',\n        'Reporting Lite - Additional Mobile Users and Personal Reporting Rules'\n      ],\n      [\n        'reporting_lite_with_one_hour_pollfail_panels', 'reporting_lite_with_adv_personal_rules_panels',\n        'reporting_lite_with_extra_users_and_personal_rules_panels',\n      ],\n      [\n        '', '', ''\n      ]\n    );\n  }\n\n  buildReportingLitePlusStatsGraphs(data) {\n    return this.buildGraph(\n      this.reportingLitePlusStatsGraphTarget,\n      data,\n      [\n        'Reporting Lite Plus Monthly', 'Reporting Lite Plus Yearly'\n      ],\n      [\n        'reporting_lite_plus_monthly_panels', 'reporting_lite_plus_yearly_panels'\n      ],\n      [\n        '', '', ''\n      ]\n    );\n  }\n\n  buildReportingLitePlusWithPlanOptionsStatsGraphs(data) {\n    return this.buildGraph(\n      this.reportingLitePlusExtrasStatsGraphTarget,\n      data,\n      [\n        'Reporting Lite Plus - Twenty Minute Poll Fail', 'Reporting Lite Plus - Advanced Personal Reporting',\n        'Reporting Lite Plus - Additional Mobile Users and Personal Reporting Rules',\n        'Reporting Lite Plus - Emergency Voice'\n      ],\n      [\n        'reporting_lite_plus_with_one_hour_pollfail_panels', 'reporting_lite_plus_with_adv_personal_rules_panels',\n        'reporting_lite_plus_with_extra_users_and_personal_rules_panels',\n        'reporting_lite_plus_with_emergency_voice_panels'\n      ],\n      [\n        '', '', ''\n      ]\n    );\n  }\n\n  buildBackToBaseStatsGraphs(data) {\n    return this.buildGraph(\n      this.backToBaseStatsGraphTarget,\n      data,\n      [\n        'Back to Base Monthly', 'Back to Base Yearly'\n      ],\n      [\n        'back_to_base_monthly_panels', 'back_to_base_yearly_panels'\n      ],\n      [\n        '', '', ''\n      ]\n    );\n  }\n\n  buildBackToBaseWithPlanOptionsStatsGraphs(data) {\n    return this.buildGraph(\n      this.backToBaseExtrasStatsGraphTarget,\n      data,\n      [\n        'Back to Base SIM -  Twenty Minute Poll Fail', 'Back to Base SIM - Dual SIM'\n      ],\n      [\n        'back_to_base_with_one_hour_pollfail_panels', 'back_to_base_with_dualsim_panels'\n      ],\n      [\n        '', '', ''\n      ]\n    );\n  }\n\n  buildReportingLitePlusSimStatsGraphs(data) {\n    return this.buildGraph(\n      this.reportingLitePlusSimStatsGraphTarget,\n      data,\n      [\n        'Reporting Lite Plus SIM Monthly', 'Reporting Lite Plus SIM Yearly'\n      ],\n      [\n        'reporting_lite_plus_sim_monthly_panels', 'reporting_lite_plus_sim_yearly_panels'\n      ],\n      [\n        '', '', ''\n      ]\n    );\n  }\n\n  buildReportingLitePlusSimWithPlanOptionsStatsGraphs(data) {\n    return this.buildGraph(\n      this.reportingLitePlusSimExtrasStatsGraphTarget,\n      data,\n      [\n        'Reporting Lite Plus SIM - Twenty Minute Poll Fail',\n        'Reporting Lite Plus SIM - Advanced Personal Reporting',\n        'Reporting Lite Plus SIM - Dual SIM',\n        'Reporting Lite Plus SIM - Additional Mobile Users and Personal Reporting Rules',\n        'Reporting Lite Plus SIM - Emergency Voice'\n      ],\n      [\n        'reporting_lite_plus_sim_with_one_hour_pollfail_panels',\n        'reporting_lite_plus_sim_with_adv_personal_rules_panels',\n        'reporting_lite_plus_sim_with_dualsim_panels',\n        'reporting_lite_plus_sim_with_extra_users_and_personal_rules_panels',\n        'reporting_lite_plus_sim_with_emergency_voice_panels'\n      ],\n      [\n        '', '', ''\n      ]\n    );\n  }\n\n  buildGraph(target, data, labels, yAxisDataKeys, colours) {\n    var datasets = []\n    labels.forEach((key, index) => {\n      datasets.push({\n        label: labels[index],\n        data: data,\n        parsing: {\n          xAxisKey: 'created',\n          yAxisKey: yAxisDataKeys[index]\n        },\n        borderColor: colours[index],\n        backgroundColor: colours[index]\n      })\n    })\n    return new Chart(\n      target,\n      {\n        type: 'line',\n        data: {\n          labels: data.map(row => new Date(row.created)),\n          datasets: datasets\n        },\n        options: {\n          locale: i18n.locale,\n          interaction: {\n            mode: 'point',\n            axis: 'xy',\n            intersect: false\n          },\n          scales: {\n            x: {\n              type: 'time',\n              time: {\n                unit: 'day'\n              },\n              ticks: {\n                major: {\n                  enabled: true\n                },\n                font: function(context) {\n                  if (context.tick && context.tick.major) {\n                    return {\n                      weight: 'bold',\n                    };\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    )\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport Chart from 'chart.js/auto'\nimport 'chartjs-adapter-luxon'\nimport zoomPlugin from 'chartjs-plugin-zoom'\nChart.register(zoomPlugin);\n\n// Connects to data-controller=\"admin--sia-graphing\"\nexport default class extends Controller {\n  static values = {\n    graphDuration: Number,\n    connectionDataEndpoint: String,\n    connectionGraphNames: Array,\n    noConnectionData: String,\n  }\n  static targets = [\n    \"connectionGraph\", \"connectionGraphHolder\"\n  ]\n\n  rebuildGraphsWithNewDuration(event) {\n    document.querySelectorAll('.btn-outline-primary.active').forEach(element => element.classList.remove('active'))\n    event.target.classList.add('active')\n    this.connectionDataEndpointValue = event.params['connectionDataEndpoint']\n    this.graphDurationValue = event.params['graphDuration']\n    this.refreshGraph()\n  }\n\n  connectionGraphTargetConnected() {\n    this.refreshGraph();\n  }\n\n  resetChartZoom() {\n    if (!this.connectionChart) {\n      return;\n    }\n    this.connectionChart.resetZoom();\n  }\n\n  refreshGraph() {\n    fetch(this.connectionDataEndpointValue,\n          { method: 'get', headers: { 'Content-Type': 'application/json;charset=utf-8'} })\n      .then(response => response.json())\n      .then(responseData => {\n        if (!responseData) {\n          var div = document.createElement('div')\n          var h3 = document.createElement('h3')\n          div.classList.add('text-center')\n          h3.innerHTML = this.noConnectionDataValue\n          div.appendChild(h3)\n          this.connectionGraphHolderTarget.appendChild(div);\n          this.connectionChart.destroy();\n          this.connectionChart = null;\n          return;\n        }\n        if (this.connectionChart) {\n          this.refreshChartData(this.connectionChart, responseData);\n        } else {\n          this.connectionChart = this.buildGraph(\n            this.connectionGraphHolderTarget,\n            this.connectionGraphTarget,\n            [this.connectionGraphNamesValue],\n            responseData,\n            'coral',\n            'orange'\n          );\n        }\n      })\n      .catch(err => { })\n  }\n\n  refreshChartData(chart, data) {\n    var firstDate = new Date(Date.now() - (this.graphDurationValue * 60 * 1000));\n    chart.data.datasets[0].data = data;\n    chart.data.labels = data.map(row => new Date(row.created));\n    chart.options.scales.x.min = firstDate;\n    chart.update();\n  }\n\n  buildGraph(holder, target, labels, signalData, signalDataColour, signalDataOutlineColour) {\n    holder.childNodes.forEach(child => {\n      if (child.nodeName != 'CANVAS') {\n        holder.removeChild(child)\n      }\n    });\n    return this.buildLineGraph(target, signalData, labels, signalDataColour, signalDataOutlineColour);\n  }\n\n  buildLineGraph(target, data, labels, signalDataColour, signalDataOutlineColour) {\n    var firstDate = new Date(Date.now() - (this.graphDurationValue * 60 * 1000));\n    return new Chart(\n      target,\n      {\n        type: 'line',\n        data: {\n          labels: data.map(row => new Date(row.poll_time)),\n          datasets: [\n            {\n              label: labels[0],\n              data: data,\n              parsing: {\n                xAxisKey: 'created',\n                yAxisKey: 'status'\n              },\n              spanGaps: false,\n              borderColor: signalDataColour,\n              backgroundColor: signalDataOutlineColour,\n              tension: 0\n            }\n          ]\n        },\n        options: {\n          locale: i18n.locale,\n          scales: {\n            x: {\n              min: firstDate,\n              max: new Date(),\n              type: 'time',\n              ticks: {\n                maxRotation: 0,\n                autoskip: false,\n                major: {\n                  enabled: true\n                },\n                font: function(context) {\n                  if (context.tick && context.tick.major) {\n                    return {\n                      weight: 'bold',\n                    };\n                  }\n                }\n              }\n            },\n            y: {\n              min: 0,\n              max: 2\n            }\n          },\n          interaction: {\n            mode: 'nearest',\n            axis: 'x',\n            intersect: false\n          },\n          plugins: {\n            zoom: {\n              pan: {\n                enabled: true,\n                mode: 'x',\n                modifierKey: 'ctrl',\n              },\n              zoom: {\n                drag: {\n                  enabled: true\n                },\n                mode: 'x',\n              },\n            }\n          },\n        }\n      }\n    )\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport Chart from 'chart.js/auto'\nimport 'chartjs-adapter-luxon'\nimport zoomPlugin from 'chartjs-plugin-zoom'\nChart.register(zoomPlugin);\n\n// Connects to data-controller=\"admin--signal-graphing\"\nexport default class extends Controller {\n  static values = {\n    siteSerial: Number,\n    graphDuration: Number,\n    missingPollGap: Number,\n    wifiGraphNames: Array,\n    cellularGraphNames: Array,\n    noWifiSignalData: String,\n    noCellularSignalData: String,\n    signalStrengthGuidelineLabel: String,\n  }\n  static targets = [\n    \"wifiSignalStrengthGraph\", \"cellularSignalStrengthGraph\",\n    \"wifiSignalStrengthGraphHolder\", \"cellularSignalStrengthGraphHolder\",\n    \"wifiSignalStrengthGraphResetButton\", \"cellularSignalStrengthGraphResetButton\",\n    \"durationChoice\", \"missingPollGapChoice\"\n  ]\n\n  rebuildGraphsWithNewDuration(event) {\n    this.graphDurationValue = event.params['graphDuration']\n    this.durationChoiceTarget.querySelectorAll('.btn-outline-primary.active').forEach(element => element.classList.remove('active'))\n    event.target.classList.add('active')\n    this.graphDurationValue = event.params['graphDuration']\n    this.refreshWifiGraph()\n    this.refreshCellularGraph()\n  }\n\n  rebuildGraphsWithNewMissingPollGap(event) {\n    this.missingPollGapChoiceTarget.querySelectorAll('.btn-outline-primary.active').forEach(element => element.classList.remove('active'))\n    event.target.classList.add('active')\n    this.missingPollGapValue = event.params['missingPollGap']\n    this.refreshWifiGraph()\n    this.refreshCellularGraph()\n  }\n\n  wifiSignalStrengthGraphTargetConnected() {\n    this.refreshWifiGraph();\n  }\n\n  cellularSignalStrengthGraphTargetConnected() {\n    this.refreshCellularGraph();\n  }\n\n  resetWifiChartZoom() {\n    if (!this.wifiChart) {\n      return;\n    }\n    this.wifiChart.resetZoom();\n  }\n\n  resetCellularChartZoom() {\n    if (!this.cellularChart) {\n      return;\n    }\n    this.cellularChart.resetZoom();\n  }\n\n  refreshWifiGraph() {\n    fetch('/admin/wifiSignalStrengthHistoryGraphData/' + this.siteSerialValue + '/' + this.graphDurationValue + '/' + this.missingPollGapValue,\n          { method: 'get', headers: { 'Content-Type': 'application/json;charset=utf-8'} })\n      .then(response => response.json())\n      .then(responseData => {\n        if (!responseData) {\n          this.wifiSignalStrengthGraphHolderTarget.querySelectorAll('div').forEach(element => {\n            this.wifiSignalStrengthGraphHolderTarget.removeChild(element);\n          });\n          var div = document.createElement('div')\n          var h3 = document.createElement('h3')\n          div.classList.add('text-center')\n          h3.innerHTML = this.noWifiSignalDataValue\n          div.appendChild(h3)\n          this.wifiSignalStrengthGraphResetButtonTarget.classList.add('d-none');\n          this.wifiSignalStrengthGraphHolderTarget.prepend(div);\n          if (this.wifiChart) {\n            this.wifiChart.destroy();\n            this.wifiChart = null;\n          }\n          return;\n        }\n        this.wifiSignalStrengthGraphResetButtonTarget.classList.remove('d-none');\n        if (this.wifiChart) {\n          this.refreshChartData(this.wifiChart, responseData);\n        } else {\n          this.wifiChart = this.buildGraph(\n            this.wifiSignalStrengthGraphHolderTarget,\n            this.wifiSignalStrengthGraphTarget,\n            [this.wifiGraphNamesValue, this.signalStrengthGuidelineLabelValue],\n            responseData,\n            'coral',\n            'orange'\n          );\n        }\n      })\n      .catch(err => { })\n  }\n\n  refreshCellularGraph() {\n    fetch('/admin/cellularSignalStrengthHistoryGraphData/' + this.siteSerialValue + '/' + this.graphDurationValue + '/' + this.missingPollGapValue,\n          { method: 'get', headers: { 'Content-Type': 'application/json;charset=utf-8'} })\n      .then(response => response.json())\n      .then(responseData => {\n        if (!responseData) {\n          this.cellularSignalStrengthGraphHolderTarget.querySelectorAll('div').forEach(element => {\n            this.cellularSignalStrengthGraphHolderTarget.removeChild(element);\n          });\n          var div = document.createElement('div')\n          var h3 = document.createElement('h3')\n          div.classList.add('text-center')\n          h3.innerHTML = this.noCellularSignalDataValue\n          div.appendChild(h3)\n          this.cellularSignalStrengthGraphResetButtonTarget.classList.add('d-none');\n          this.cellularSignalStrengthGraphHolderTarget.prepend(div);\n          if (this.cellularChart) {\n            this.cellularChart.destroy();\n            this.cellularChart = null;\n          }\n          return;\n        }\n        this.cellularSignalStrengthGraphResetButtonTarget.classList.remove('d-none');\n        if (this.cellularChart) {\n          this.refreshChartData(this.cellularChart, responseData);\n        } else {\n          this.cellularChart = this.buildGraph(\n            this.cellularSignalStrengthGraphHolderTarget,\n            this.cellularSignalStrengthGraphTarget,\n            [this.cellularGraphNamesValue, this.signalStrengthGuidelineLabelValue],\n            responseData,\n            'steelblue',\n            'lightskyblue'\n          );\n        }\n      })\n      .catch(err => { })\n  }\n\n  refreshChartData(chart, data) {\n    var firstDate = new Date(Date.now() - (this.graphDurationValue * 60 * 1000));\n    chart.data.datasets[0].data = data;\n    chart.data.labels = data.map(row => new Date(row.poll_time));\n    chart.data.datasets[1].data = [{ poll_time: firstDate, signal: '-90' }, { poll_time: new Date(), signal: '-90'}];\n    chart.options.scales.x.min = firstDate;\n    chart.update();\n  }\n\n  buildGraph(holder, target, labels, signalData, signalDataColour, signalDataOutlineColour) {\n    holder.querySelectorAll('div').forEach(element => {\n      holder.removeChild(element);\n    });\n    return this.buildLineGraph(target, signalData, labels, signalDataColour, signalDataOutlineColour);\n  }\n\n  buildLineGraph(target, data, labels, signalDataColour, signalDataOutlineColour) {\n    var firstDate = new Date(Date.now() - (this.graphDurationValue * 60 * 1000));\n    var dodgySignalLineData = [{ poll_time: firstDate, signal: '-90' }, { poll_time: new Date(), signal: '-90'}]\n    return new Chart(\n      target,\n      {\n        type: 'line',\n        data: {\n          labels: data.map(row => new Date(row.poll_time)),\n          datasets: [\n            {\n              label: labels[0],\n              data: data,\n              parsing: {\n                xAxisKey: 'poll_time',\n                yAxisKey: 'signal'\n              },\n              spanGaps: false,\n              borderColor: signalDataColour,\n              backgroundColor: signalDataOutlineColour,\n              tension: 0,\n              radius: 0,\n              borderWidth: 1.2,\n            },\n            {\n              label: labels[1],\n              data: dodgySignalLineData,\n              parsing: {\n                xAxisKey: 'poll_time',\n                yAxisKey: 'signal'\n              },\n              pointStyle: false,\n              pointHitRadius: 0,\n              pointHoverRadius: 0,\n              pointRadius: 0,\n              borderDash: [10,8],\n              borderWidth: 1,\n              spanGaps: true,\n              borderColor: 'rgb(255,0,0)',\n              backgroundColor: 'rgb(252,143,143)',\n            }\n          ]\n        },\n        options: {\n          locale: i18n.locale,\n          animation: false,\n          parsing: false,\n          scales: {\n            x: {\n              min: firstDate,\n              max: new Date(),\n              type: 'time',\n              ticks: {\n                maxRotation: 0,\n                autoskip: false,\n                major: {\n                  enabled: true\n                },\n                font: function(context) {\n                  if (context.tick && context.tick.major) {\n                    return {\n                      weight: 'bold',\n                    };\n                  }\n                }\n              }\n            },\n            y: {\n              min: -140,\n              max: 0\n            }\n          },\n          interaction: {\n            mode: 'nearest',\n            axis: 'x',\n            intersect: false\n          },\n          plugins: {\n            zoom: {\n              pan: {\n                enabled: true,\n                mode: 'x',\n                modifierKey: 'ctrl',\n              },\n              zoom: {\n                drag: {\n                  enabled: true\n                },\n                mode: 'x',\n              },\n            }\n          },\n        }\n      }\n    )\n  }\n}\n\n", "import { Controller } from \"@hotwired/stimulus\"\nimport * as bootstrap from \"bootstrap\"\n\n// Connects to data-controller=\"admin--sites\"\nexport default class extends Controller {\n  static targets = [\n    \"sitesTable\",\n    \"deleteRuleModal\", \"deleteRuleModalSubmit\",\n    \"reportingOldTemplateId\", \"reportingOldProfileRoute\", \"reportingOldTemplateSelect\"\n  ]\n\n  deletePersonalReportingRule(event) {\n    this.deleteRuleModalSubmitTarget.setAttribute('href', event.params['submitLink']);\n    if (!this.deleteRuleModal) {\n      this.deleteRuleModal = new bootstrap.Modal(this.deleteRuleModalTarget, { keyboard: false });\n    }\n    if (this.deleteRuleModal) {\n      this.deleteRuleModal.show()\n    }\n  }\n\n  showHistoryDetails(event) {\n    document.querySelectorAll('.history-details').forEach(element => element.classList.toggle('d-none'))\n  }\n\n  openSite(event) {\n    Turbo.visit(event.params['link'])\n  }\n\n  searchSites(event) {\n    if (this.hasSitesTableTarget) {\n      var searchText = event.target.value\n      if (searchText == \"\") {\n        Array.from(this.sitesTableTarget.querySelectorAll('tbody > tr')).filter(row => {\n          row.classList.remove('d-none')\n        })\n        return\n      }\n      Array.from(this.sitesTableTarget.querySelectorAll('tbody > tr')).filter(row => {\n        var rowMatched = false\n        row.querySelectorAll('td').forEach(rowColumn => {\n          if (!rowMatched && rowColumn.innerHTML.toLowerCase().indexOf(searchText.toLowerCase()) >= 0) {\n            rowMatched = true\n          }\n        })\n        if (rowMatched) {\n          row.classList.remove('d-none')\n        } else {\n          row.classList.add('d-none')\n        }\n      })\n    }\n  }\n\n  setupReportingTemplateMigration(event) {\n    if (this.hasReportingOldTemplateIdTarget) {\n      this.reportingOldTemplateIdTarget.value = event.params['oldTemplate']\n    }\n    if (this.hasReportingOldProfileRouteTarget) {\n      this.reportingOldProfileRouteTarget.value = event.params['oldProfileRoute']\n    }\n    if (this.hasReportingOldTemplateSelectTarget) {\n      this.reportingOldTemplateSelectTarget.value = event.params['oldTemplate']\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"call-trigger-row\"\nexport default class extends Controller {\n  static targets = [\"actionIndex\"]\n\n  // Action indexes available per action object selection value, e.g.\n  // { \"1\": [1, ..., 16], \"2\": [1, ..., 40] }.\n  static values = { actionIndexes: Object }\n\n  actionObjectChange(event) {\n    this.repopulateActionIndex(event.currentTarget.value)\n  }\n\n  repopulateActionIndex(actionObjectValue) {\n    const select = this.actionIndexTarget\n    const previous = select.value\n    const indexes = this.actionIndexesValue[actionObjectValue] || []\n\n    select.innerHTML = ''\n    select.add(new Option('-', '')) // blank so a real index must be chosen\n    indexes.forEach(index => {\n      const option = new Option(index, index)\n      if (String(index) === previous) { option.selected = true }\n      select.add(option)\n    })\n    // A real action requires an index; no action object means no index needed.\n    select.required = indexes.length > 0\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport 'daterangepicker'\n\n// Connects to data-controller=\"call-triggers\"\nexport default class extends Controller {\n  static values = {\n    pickerStrings: Object,\n    pickerDayNames: Array,\n    pickerMonthNames: Array,\n  }\n  static targets = [\n    \"defaultPinText\",\n    \"defaultPinIcon\",\n    \"validStartRangePicker\",\n    \"validFinishRangePicker\",\n    \"clientTimeZone\",\n    \"changeSaveButtonColor\",\n    \"searchInput\",\n    \"callTriggersTable\",\n    \"deleteTriggerId\",\n    \"deleteTriggerName\",\n  ]\n\n  connect() {\n    this.reportClientTimeZone();\n    this.showScheduleInLocalTime();\n    this.setupDateRangePicker();\n  }\n\n  reportClientTimeZone() {\n    if (!this.hasClientTimeZoneTarget) return;\n    this.clientTimeZoneTarget.value = Intl.DateTimeFormat().resolvedOptions().timeZone;\n  }\n\n  showScheduleInLocalTime() {\n    this.scheduleFields.forEach(field => {\n      const utc = field.dataset.scheduleUtc;\n      if (utc) field.value = this.formatLocal(new Date(utc));\n    })\n  }\n\n  formatLocal(date) {\n    const pad = (number) => String(number).padStart(2, '0');\n    return `${pad(date.getDate())}/${pad(date.getMonth() + 1)}/${date.getFullYear()} ` +\n           `${pad(date.getHours())}:${pad(date.getMinutes())}`;\n  }\n\n  setupDateRangePicker() {\n    this.scheduleFields.forEach(field => {\n      $(field).daterangepicker(this.dateRangePickerOptions());\n      $(field).on('apply.daterangepicker', function(ev, picker) {\n        $(this).val(picker.endDate.format('DD/MM/YYYY HH:mm'));\n      })\n      $(field).on('cancel.daterangepicker', function() {\n        $(this).val('');\n      })\n    })\n  }\n\n  dateRangePickerOptions() {\n    return {\n      'autoUpdateInput': false,\n      'singleDatePicker': true,\n      \"timePicker\": true,\n      \"timePicker24Hour\": true,\n      \"timePickerIncrement\": 5,\n      \"locale\": {\n        \"format\": \"DD/MM/YYYY HH:mm\",\n        \"separator\": \" - \",\n        \"applyLabel\": this.pickerStringsValue['apply'],\n        \"cancelLabel\": this.pickerStringsValue['cancel'],\n        \"customRangeLabel\": this.pickerStringsValue['custom'],\n        \"weekLabel\": \"W\",\n        \"daysOfWeek\": this.pickerDayNamesValue,\n        \"monthNames\": this.pickerMonthNamesValue,\n        \"firstDay\": 0\n      },\n      \"linkedCalendars\": false,\n      \"opens\": \"start\",\n      \"minDate\": \"01/01/1991 00:00\",\n      \"alwaysShowCalendars\": true\n    }\n  }\n\n  get scheduleFields() {\n    return [\n      this.hasValidStartRangePickerTarget && this.validStartRangePickerTarget,\n      this.hasValidFinishRangePickerTarget && this.validFinishRangePickerTarget\n    ].filter(Boolean)\n  }\n\n  showHideDefaultPassword() {\n    const input = this.defaultPinTextTarget;\n    const type = input.type === \"password\" ? \"text\" : \"password\"; // Toggle type between text and password\n    input.type = type;\n\n    const icon = this.defaultPinIconTarget;\n    if (type === \"password\") {\n      icon.classList.remove(\"fa-eye\");\n      icon.classList.add(\"fa-eye-slash\");\n    } else {\n      icon.classList.remove(\"fa-eye-slash\");\n      icon.classList.add(\"fa-eye\");\n    }\n  }\n\n  toggleSaveButtonColor() {\n    const hasValue = this.defaultPinTextTarget.value.trim().length > 0;\n    const saveButton = this.changeSaveButtonColorTarget;\n\n    saveButton.classList.toggle('btn-primary', hasValue);\n    saveButton.classList.toggle('btn-light', !hasValue);\n\n    if (hasValue) {\n      saveButton.removeAttribute('disabled');\n    } else {\n      saveButton.setAttribute('disabled', 'disabled');\n    }\n  }\n\n  prepareDelete({ params: { id, name, url } }) {\n    this.deleteTriggerIdTarget.textContent = id;\n    this.deleteTriggerNameTarget.textContent = name;\n    this.deleteUrl = url;\n  }\n\n  confirmDelete() {\n    if (this.deleteUrl) window.location.href = this.deleteUrl;\n  }\n\n  searchCallTriggers(event) {\n    var searchText = event.target.value.toLowerCase().trim()\n    const table = this.callTriggersTableTarget\n    const rows = Array.from(table.querySelectorAll('tbody > tr'))\n\n    if (searchText == '') {\n      rows.forEach(row => row.classList.remove('d-none'))\n      return\n    }\n\n    rows.forEach(row => {\n      const cellsText = Array.from(row.querySelectorAll('td'))\n        .map(td => td.textContent.toLowerCase())\n        .join(' ')\n      if (cellsText.includes(searchText)) {\n        row.classList.remove('d-none')\n      } else {\n        row.classList.add('d-none')\n      }\n    })\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"camera-configuration\"\nexport default class extends Controller {\n  static targets = [\n    \"masterUserCheckbox\"\n  ];\n\n  connect() {\n  }\n\n  cameraMasterCheckboxCheck(event) {\n    this.masterUserCheckboxTargets.forEach((masterUserCheckbox) => {\n\n      if (masterUserCheckbox !== event.target){\n        masterUserCheckbox.checked = false;\n      }\n\n    });\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"checkout\"\nexport default class extends Controller {\n  static values = {\n    shippingMethods: Array\n  }\n  static targets = [\n    \"billingAddressDiv\",\n    \"billingAddressInputField\",\n    \"shippingSelectCard\",\n    \"shippingUnselectedError\",\n    \"itemQuantity\",\n    \"itemCost\",\n    \"itemDeleteButton\",\n    \"editCartButton\",\n    \"saveCartButton\",\n    \"subtotalCost\",\n    \"taxCost\",\n    \"shippingCost\",\n    \"totalCost\",\n    \"checkoutItemRow\",\n    \"cartSavedMessage\",\n    \"quantityZeroError\",\n    \"checkoutSubmit\",\n    \"deliveryCountry\",\n    \"billingCountry\"\n  ]\n\n  currentShippingMethod = '';\n  cart_cookie_name = 'myalarm_store_cart';\n  isCartEmpty = false;\n  isSavedCartAnimating = false;\n\n  connect() {\n    this.calculateCost();\n  }\n\n  toggleSameAsDelivery(event) {\n    if(event.target.checked) {\n      this.billingAddressDivTarget.classList.add('hide');\n      this.disableBillingAddressFields();\n\n    } else {\n      this.billingAddressDivTarget.classList.remove('hide');\n      this.enableBillingAddressFields();\n    }\n  }\n\n  disableBillingAddressFields() {\n    // Sets the fields as disabled after a delay, so that they don't visually change to greyed-out until hidden.\n    // Looks strange otherwise\n    setTimeout(() => {\n      this.billingAddressInputFieldTargets.forEach (field => {\n        field.disabled = true;\n      });\n    }, 400); //400 milliseconds of delay\n  }\n\n  enableBillingAddressFields(){\n    this.billingAddressInputFieldTargets.forEach (field => {\n      field.disabled = false;\n    });\n  }\n\n  validate(event) {\n    // Check if user has selected shipping option\n    let checked = this.shippingSelectCardTargets.some(shippingSelectCard => shippingSelectCard.checked);\n    if (!checked) {\n      event.preventDefault(); // Prevent form submission\n      this.shippingUnselectedErrorTarget.classList.remove(\"d-none\");\n      this.shippingUnselectedErrorTarget.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n    } else {\n      this.shippingUnselectedErrorTarget.classList.add(\"d-none\");\n    }\n\n    // Prevent form submission if user has any items with quantity 0 in the cart\n    if (this.isCartEmpty) {\n      event.preventDefault(); // Prevent form submission\n      this.quantityZeroErrorTarget.classList.remove(\"d-none\");\n      this.quantityZeroErrorTarget.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n    } else {\n      this.quantityZeroErrorTarget.classList.add(\"d-none\");\n    }\n  }\n\n  updateQuantityInput(event) {\n    var showSavedText = true;\n\n    const maxLimit = 25;\n    const quantityField = event.target;\n  \n    let value = quantityField.value;\n  \n    // This is a text field, so remove any character that is not a digit (0-9)\n    value = value.replace(/[^\\d]/g, '');\n\n    // 3 Digit limit\n    if (value.length > 3) {\n      value = value.slice(0, 3);\n      showSavedText = false;\n    }\n    let parsedValue = parseInt(value, 10);\n\n    // This means if Not-a-Number (or if you delete all the numbers from the field) it defaults to 0.\n    if (isNaN(parsedValue)) {\n      parsedValue = 0;\n    }\n    if (parsedValue > maxLimit) {\n      parsedValue = maxLimit;\n      showSavedText = false;\n    }\n    if (parsedValue < 0){\n      parsedValue = 0;\n      showSavedText = false;\n    } \n    quantityField.value = parsedValue;\n\n    this.calculateCost();\n    if (showSavedText) this.updateCart();\n  }\n\n  updateCart() {\n    var cart = this.getCartFromCookie();\n    if (!cart) return;\n\n    this.isCartEmpty = false;\n\n    this.itemQuantityTargets.forEach(field => {\n      const currItemCode = field.dataset.itemCode;\n      const selectedCartItem = cart.find(item => item.code == currItemCode);\n      selectedCartItem.quantity = field.value;\n\n      const quantity = (parseInt(selectedCartItem.quantity), 10);\n      if (quantity < 1) {\n        this.isCartEmpty = true;\n      }\n    });\n    this.saveCartToCookie(cart);\n    this.showCartSavedMessage();\n  }\n\n  selectShipping(event) {\n    const shippingMethodId = event.target.id;\n    var countryCode;\n    var cost = 0;\n    if (this.hasBillingCountryTarget && this.billingCountryTarget.value != '') {\n      countryCode = this.billingCountryTarget.value;\n    } else {\n      countryCode = this.deliveryCountryTarget.value;\n    }\n    \n    if (shippingMethodId === 'cardStandardShipping') {\n      this.currentShippingMethod = 'standard';\n    } else if (shippingMethodId === 'cardExpressShipping') {\n      this.currentShippingMethod = 'express';\n    }\n    if (this.currentShippingMethod == '') {\n      return\n    }\n    var method = this.shippingMethodsValue.find( sm => sm['method'] == this.currentShippingMethod && sm['country_code'] == countryCode);\n    cost = method['cost']\n    // This should work even if in NZD, as it's just formatting using a $ sign. \n    this.shippingCostTarget.textContent =\n      `${(cost / 100).toLocaleString('en-AU', { style: 'currency', currency: 'AUD' })}`;\n    this.calculateCost();\n    this.checkoutSubmitTarget.disabled = false;\n  }\n\n  calculateCost() {\n    var total = 0.0;\n\n    this.itemQuantityTargets.forEach(item => {\n\n      const quantity = item.value;\n      if (!quantity) {\n        return;\n      }\n\n      const parts = item.name.split('][');\n      const itemName = parts[0].replace('[', '');\n      const itemPriceString = item.dataset.itemPrice;\n      if (!itemPriceString) {\n        return;\n      }\n\n      var itemCost = parseFloat(item.dataset.itemPrice, 10);\n      const itemTotal = itemCost * quantity;\n      total += itemTotal;\n\n      const itemCostLabel = this.itemCostTargets.find(x => x.id.startsWith(itemName));\n      if (!itemCostLabel) {\n        return;\n      }\n      itemCostLabel.textContent = itemTotal.toLocaleString('en-AU', { \n        style: 'currency', \n        currency: 'AUD',\n        maximumFractionDigits: 0  \n      });\n    });\n\n    const subtotal = total;\n    this.subtotalCostTarget.textContent = subtotal.toLocaleString('en-AU', { \n      style: 'currency', \n      currency: 'AUD',\n      minimumFractionDigits: 2, \n      maximumFractionDigits: 2  \n    });\n\n    const shippingCost = parseFloat(this.shippingCostTarget.textContent.trim().replace(\"$\", \"\"));\n    if (shippingCost){\n      total += shippingCost;\n    } \n\n    const taxPercentage = this.element.dataset.taxPercentage // This is provided by the ruby controller based on country\n    const tax = total * taxPercentage; \n    this.taxCostTarget.textContent = tax.toLocaleString('en-AU', { \n      style: 'currency', \n      currency: 'AUD',\n      minimumFractionDigits: 2, \n      maximumFractionDigits: 2  \n    });\n\n    total += tax;\n    this.totalCostTarget.textContent = total.toLocaleString('en-AU', { \n      style: 'currency', \n      currency: 'AUD',\n      minimumFractionDigits: 2, \n      maximumFractionDigits: 2  \n    });\n  }\n\n  deleteButton(event) {\n    var cart = this.getCartFromCookie();\n    if (!cart) return;\n\n    const currItemCode = event.currentTarget.dataset.itemCode;\n    cart = cart.filter(item => item.code !== currItemCode);\n    this.saveCartToCookie(cart);\n\n    const itemIndex = event.currentTarget.dataset.itemIndex;\n    const divToDelete = this.checkoutItemRowTargets.find(row => row.id === `${itemIndex}_row`);\n    divToDelete.remove();\n    this.calculateCost();\n    this.showCartSavedMessage();\n    event.preventDefault();\n  }\n\n  getIndexFromitemIndex(itemIndex) {\n    parseInt(itemIndex.match(/\\d+/)[0], 10) - 1;\n  }\n\n  getCartFromCookie() {\n    const cookies = document.cookie.split('; ');\n    for (let cookie of cookies) {\n        const [key, value] = cookie.split('=');\n        if (key === this.cart_cookie_name) {\n          const valueWithSpaces = value.replace(/\\+/g, ' ');\n          const cartData = JSON.parse(decodeURIComponent(valueWithSpaces));\n          return cartData;\n        }\n    }\n    return null;\n  }\n\n  saveCartToCookie(cart) {\n    if (cart.length > 0) {\n      const cartJson = JSON.stringify(cart);\n      const encodedCart = encodeURIComponent(cartJson);\n      const expiryDate = new Date();\n      expiryDate.setDate(expiryDate.getDate() + 2);\n      document.cookie = `${this.cart_cookie_name}=${encodedCart}; expires=${expiryDate.toUTCString()}; path=/`;\n    } else {\n      // If cart is empty, delete cookie and then reload page, which will redirect the user away from the cart.\n      document.cookie = `${this.cart_cookie_name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`;\n      location.reload();\n    }\n  }\n\n  restrictEnterKey(event) {\n    if (event.key === 'Enter') {\n      event.preventDefault(); // Prevent form submission\n    }\n  }\n  \n  showCartSavedMessage() {\n    if (this.isSavedCartAnimating) return;\n  \n    const message = this.cartSavedMessageTarget;\n    this.isSavedCartAnimating = true;\n  \n    // Fade in\n    message.classList.remove(\"opacity-0\");\n    message.classList.add(\"show\");\n  \n    // Wait for 1 second before fading out\n    setTimeout(() => {\n      message.classList.remove(\"show\");\n      message.classList.add(\"opacity-0\");\n  \n      setTimeout(() => {\n        this.isSavedCartAnimating = false;\n      }, 300);\n    }, 1000); // Set how long the message lasts for in milliseconds\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"admin--documentation\"\nexport default class extends Controller {\n  static targets = [\n    'addGroupForm', 'addGroupButton', 'addEntityForm', 'addEntityButton'\n  ]\n\n  connect() {\n  }\n\n  showAddGroupForm() {\n    if (this.hasAddGroupFormTarget) {\n      this.addGroupFormTarget.classList.remove('d-none');\n      this.addGroupButtonTarget.classList.add('d-none');\n    }\n  }\n\n  showAddEntityForm(event) {\n    event.target.classList.add('d-none');\n    var groupId = event.params['groupId']\n    document.getElementById('addEntityForm_' + groupId).classList.remove('d-none');\n  }\n\n  showEditEntityForm(event) {\n    event.target.classList.add('disabled');\n    var groupId = event.params['groupId']\n    var entityId = event.params['entityId']\n    document.getElementById('editEntityForm_' + groupId + '_' + entityId).classList.remove('d-none');\n  }\n\n  hideEditEntityForm(event) {\n    var groupId = event.params['groupId']\n    var entityId = event.params['entityId']\n    document.getElementById('editEntityButton_' + groupId + '_' + entityId).classList.remove('disabled');\n    document.getElementById('editEntityForm_' + groupId + '_' + entityId).classList.add('d-none');\n  }\n\n  showEditGroupForm(event) {\n    event.target.classList.add('disabled');\n    var groupId = event.params['groupId']\n    document.getElementById('editGroupForm_' + groupId).classList.remove('d-none');\n  }\n\n  hideEditGroupForm(event) {\n    var groupId = event.params['groupId']\n    document.getElementById('editGroupButton_' + groupId).classList.remove('disabled');\n    document.getElementById('editGroupForm_' + groupId).classList.add('d-none');\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"file-upload\"\nexport default class extends Controller {\n  static targets = [\"dropzone\", \"fileInput\"]\n  static values = {\n    allowedFileTypes: Array,\n    programmingUpload: Boolean\n  }\n\n  connect() {\n    this.dropzoneTarget.addEventListener(\"dragover\", (e) => {\n      e.preventDefault()\n      this.dropzoneTarget.classList.add(\"bg-light\")\n    })\n\n    this.dropzoneTarget.addEventListener(\"dragleave\", () => {\n      this.dropzoneTarget.classList.remove(\"bg-light\")\n    })\n\n    this.dropzoneTarget.addEventListener(\"drop\", (e) => {\n      e.preventDefault()\n      const file = e.dataTransfer.files[0]\n\n      // Check if the file is a CSV\n      if (file) {\n        if (!this.fileTypeAllowed(file)) {\n          return\n        }\n\n        this.fileInputTarget.files = e.dataTransfer.files\n        this.dropzoneTarget.textContent = file.name\n      }\n    })\n\n    // Add click event to open file browser\n    this.dropzoneTarget.addEventListener(\"click\", () => {\n      this.fileInputTarget.click()\n    })\n\n    // Optional: update dropzone text when file selected via browse\n    this.fileInputTarget.addEventListener(\"change\", (e) => {\n      const file = e.target.files[0]\n      if (file) {\n        if (!this.fileTypeAllowed(file)) {\n          return\n        }\n        this.dropzoneTarget.textContent = file.name\n      }\n    })\n  }\n\n  // Guards the form submit: a hidden file input that was never filled sends a\n  // part with filename=\"\", which Rack discards entirely, so the server sees no\n  // params at all. Stop it here instead. `required` is not an option - the\n  // input is `d-none`, and browsers refuse to submit a form with an invalid\n  // control they cannot focus.\n  submit(event) {\n    if (this.fileInputTarget.files.length > 0) {\n      return\n    }\n\n    event.preventDefault()\n    this.showErrorMessage(\"Please choose a file to upload!\")\n  }\n\n  showErrorMessage(message) {\n    const flashMessageElement = document.querySelector('.flash_message')\n    if (flashMessageElement) {\n      flashMessageElement.textContent = message\n      flashMessageElement.classList.add('visible', 'alert', 'alert-danger')\n\n      // Hide the flash message after 3 seconds\n      setTimeout(() => {\n        flashMessageElement.textContent = \"\"\n        flashMessageElement.classList.remove('visible', 'alert', 'alert-danger')\n      }, 3000)\n    }\n  }\n\n  fileTypeAllowed(file) {\n    if (this.programmingUploadValue && file.type === '') {\n      const ext = file.name.split(\".\").pop().toLowerCase();\n      if (ext != 'slx' && ext != 'vlx') {\n        this.showErrorMessage(\"Only SLX/VLX files are allowed!\")\n        return false\n      }\n    } else if (!this.allowedFileTypesValue.includes(file.type)) {\n      this.showErrorMessage(\"Only CSV files are allowed!\")\n      this.dropzoneTarget.classList.remove(\"bg-light\")\n      return false\n    }\n    return true\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport Chart from 'chart.js/auto'\nimport 'chartjs-adapter-luxon'\nimport zoomPlugin from 'chartjs-plugin-zoom'\nChart.register(zoomPlugin);\n\n// Connects to data-controller=\"graphing\"\nexport default class extends Controller {\n  static values = {\n    graphDuration: Number,\n    wifiDataEndpoint: String,\n    cellularDataEndpoint: String,\n    wifiGraphNames: Array,\n    cellularGraphNames: Array,\n    noWifiSignalData: String,\n    noCellularSignalData: String,\n    signalStrengthGuidelineLabel: String,\n  }\n  static targets = [\n    \"wifiSignalStrengthGraph\", \"cellularSignalStrengthGraph\",\n    \"wifiSignalStrengthGraphHolder\", \"cellularSignalStrengthGraphHolder\",\n    \"wifiSignalStrengthGraphResetButton\", \"cellularSignalStrengthGraphResetButton\"\n  ]\n\n  rebuildGraphsWithNewDuration(event) {\n    document.querySelectorAll('.btn-outline-primary.active').forEach(element => element.classList.remove('active'))\n    event.target.classList.add('active')\n    this.wifiDataEndpointValue = event.params['wifiDataEndpoint']\n    this.cellularDataEndpointValue = event.params['cellularDataEndpoint']\n    this.graphDurationValue = event.params['graphDuration']\n    this.refreshWifiGraph()\n    this.refreshCellularGraph()\n  }\n\n  wifiSignalStrengthGraphTargetConnected() {\n    this.refreshWifiGraph();\n  }\n\n  cellularSignalStrengthGraphTargetConnected() {\n    this.refreshCellularGraph();\n  }\n\n  resetWifiChartZoom() {\n    if (!this.wifiChart) {\n      return;\n    }\n    this.wifiChart.resetZoom();\n  }\n\n  resetCellularChartZoom() {\n    if (!this.cellularChart) {\n      return;\n    }\n    this.cellularChart.resetZoom();\n  }\n\n  refreshWifiGraph() {\n    fetch(this.wifiDataEndpointValue,\n          { method: 'get', headers: { 'Content-Type': 'application/json;charset=utf-8'} })\n      .then(response => response.json())\n      .then(responseData => {\n        if (!responseData) {\n          this.wifiSignalStrengthGraphHolderTarget.querySelectorAll('div').forEach(element => {\n            this.wifiSignalStrengthGraphHolderTarget.removeChild(element);\n          });\n          var div = document.createElement('div')\n          var h3 = document.createElement('h3')\n          div.classList.add('text-center')\n          h3.innerHTML = this.noWifiSignalDataValue\n          div.appendChild(h3)\n          this.wifiSignalStrengthGraphResetButtonTarget.classList.add('d-none');\n          this.wifiSignalStrengthGraphHolderTarget.prepend(div);\n          if (this.wifiChart) {\n            this.wifiChart.destroy();\n            this.wifiChart = null;\n          }\n          return;\n        }\n        this.wifiSignalStrengthGraphResetButtonTarget.classList.remove('d-none');\n        if (this.wifiChart) {\n          this.refreshChartData(this.wifiChart, responseData);\n        } else {\n          this.wifiChart = this.buildGraph(\n            this.wifiSignalStrengthGraphHolderTarget,\n            this.wifiSignalStrengthGraphTarget,\n            [this.wifiGraphNamesValue, this.signalStrengthGuidelineLabelValue],\n            responseData,\n            'coral',\n            'orange'\n          );\n        }\n      })\n      .catch(err => { })\n  }\n\n  refreshCellularGraph() {\n    fetch(this.cellularDataEndpointValue,\n          { method: 'get', headers: { 'Content-Type': 'application/json;charset=utf-8'} })\n      .then(response => response.json())\n      .then(responseData => {\n        if (!responseData) {\n          this.cellularSignalStrengthGraphHolderTarget.querySelectorAll('div').forEach(element => {\n            this.cellularSignalStrengthGraphHolderTarget.removeChild(element);\n          });\n          var div = document.createElement('div')\n          var h3 = document.createElement('h3')\n          div.classList.add('text-center')\n          h3.innerHTML = this.noCellularSignalDataValue\n          div.appendChild(h3)\n          this.cellularSignalStrengthGraphResetButtonTarget.classList.add('d-none');\n          this.cellularSignalStrengthGraphHolderTarget.prepend(div);\n          if (this.cellularChart) {\n            this.cellularChart.destroy();\n            this.cellularChart = null;\n          }\n          return;\n        }\n        this.cellularSignalStrengthGraphResetButtonTarget.classList.remove('d-none');\n        if (this.cellularChart) {\n          this.refreshChartData(this.cellularChart, responseData);\n        } else {\n          this.cellularChart = this.buildGraph(\n            this.cellularSignalStrengthGraphHolderTarget,\n            this.cellularSignalStrengthGraphTarget,\n            [this.cellularGraphNamesValue, this.signalStrengthGuidelineLabelValue],\n            responseData,\n            'steelblue',\n            'lightskyblue'\n          );\n        }\n      })\n      .catch(err => { })\n  }\n\n  refreshChartData(chart, data) {\n    var firstDate = new Date(Date.now() - (this.graphDurationValue * 60 * 1000));\n    chart.data.datasets[0].data = data;\n    chart.data.labels = data.map(row => new Date(row.poll_time));\n    chart.data.datasets[1].data = [{ poll_time: firstDate, signal: '-90' }, { poll_time: new Date(), signal: '-90'}];\n    chart.options.scales.x.min = firstDate;\n    chart.update();\n  }\n\n  buildGraph(holder, target, labels, signalData, signalDataColour, signalDataOutlineColour) {\n    holder.querySelectorAll('div').forEach(element => {\n      holder.removeChild(element);\n    });\n    return this.buildLineGraph(target, signalData, labels, signalDataColour, signalDataOutlineColour);\n  }\n\n  buildLineGraph(target, data, labels, signalDataColour, signalDataOutlineColour) {\n    var firstDate = new Date(Date.now() - (this.graphDurationValue * 60 * 1000));\n    var dodgySignalLineData = [{ poll_time: firstDate, signal: '-90' }, { poll_time: new Date(), signal: '-90'}]\n    return new Chart(\n      target,\n      {\n        type: 'line',\n        data: {\n          labels: data.map(row => new Date(row.poll_time)),\n          datasets: [\n            {\n              label: labels[0],\n              data: data,\n              parsing: {\n                xAxisKey: 'poll_time',\n                yAxisKey: 'signal'\n              },\n              spanGaps: false,\n              borderColor: signalDataColour,\n              backgroundColor: signalDataOutlineColour,\n              tension: 0,\n              radius: 0,\n              borderWidth: 1.2,\n            },\n            {\n              label: labels[1],\n              data: dodgySignalLineData,\n              parsing: {\n                xAxisKey: 'poll_time',\n                yAxisKey: 'signal'\n              },\n              pointStyle: false,\n              pointHitRadius: 0,\n              pointHoverRadius: 0,\n              pointRadius: 0,\n              borderDash: [10,8],\n              borderWidth: 1,\n              spanGaps: true,\n              borderColor: 'rgb(255,0,0)',\n              backgroundColor: 'rgb(252,143,143)',\n            }\n          ]\n        },\n        options: {\n          locale: i18n.locale,\n          animation: false,\n          parsing: false,\n          scales: {\n            x: {\n              min: firstDate,\n              max: new Date(),\n              type: 'time',\n              ticks: {\n                maxRotation: 0,\n                autoskip: false,\n                major: {\n                  enabled: true\n                },\n                font: function(context) {\n                  if (context.tick && context.tick.major) {\n                    return {\n                      weight: 'bold',\n                    };\n                  }\n                }\n              }\n            },\n            y: {\n              min: -140,\n              max: 0\n            }\n          },\n          interaction: {\n            mode: 'nearest',\n            axis: 'x',\n            intersect: false\n          },\n          plugins: {\n            zoom: {\n              pan: {\n                enabled: true,\n                mode: 'x',\n                modifierKey: 'ctrl',\n              },\n              zoom: {\n                drag: {\n                  enabled: true\n                },\n                mode: 'x',\n              },\n            }\n          },\n        }\n      }\n    )\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// How prominent an in-region geocoding match has to be, relative to the best\n// worldwide one, before we prefer it. Restricting a search to the countries we\n// serve can only ever return a local match, which for a famous overseas place\n// is junk - \"London\" matches Ranana, NZ. Comparing Nominatim's `importance`\n// scores keeps genuine local places (Roma, Queensland scores 0.49 of Roma,\n// Italy) while sending London to England (0.31)\nconst REGION_PREFERENCE = 0.4\n\n// Connects to data-controller=\"installer-search\"\nexport default class extends Controller {\n  static values = {\n    webServType: String,\n  }\n  static targets = [ \"mapContainer\" ]\n\n  installersLoaded(event) {\n    this.installers = event.detail.installers\n    var sortedInstallers = this.installers.sort(this.sortInstallersBySiteCount)\n    this.loadInstallerInfoPanel(sortedInstallers)\n  }\n\n  boundsChanged(event) {\n    this.updateInstallersShown(event.detail)\n  }\n\n  async searchForInstallers(event) {\n    event.preventDefault()\n    var query = document.querySelector('#storeLocator').value\n    await this.updateMapLocation(query)\n    return false;\n  }\n\n  // Countries served by this server. Geocoding prefers these, but will look\n  // worldwide when the local match is a poor one - see bestMatch\n  get countryCodes() {\n    return this.webServTypeValue == 'europe_production' ? 'it,gr' : 'au,nz'\n  }\n\n  zoomOnInstaller(event) {\n    this.dispatch('installerSelected', { detail: { id: event.params['installer'] }, target: this.mapContainerTarget })\n  }\n\n  loadInstallerInfoPanel(installers) {\n    if (document.getElementById('storeList')) {\n      document.getElementById('panel').removeChild(document.getElementById('storeList'))\n    }\n    if (installers.length == 0) {\n      if (document.querySelector('#no-myalarm-stores')) {\n        document.querySelector('#no-myalarm-stores').classList.remove('d-none')\n      }\n      return;\n    } else {\n      if (document.querySelector('#no-myalarm-stores')) {\n        document.querySelector('#no-myalarm-stores').classList.add('d-none')\n      }\n    }\n    var installersList = document.createElement('ul')\n    installersList.setAttribute('class', 'store-list')\n    installersList.setAttribute('id', 'storeList')\n    document.getElementById('panel').appendChild(installersList)\n    installers.forEach(function(installer) {\n      var newInstallerListHolder = document.createElement('li')\n      newInstallerListHolder.setAttribute('class', 'store')\n      var newInstallerHolder = document.createElement('div')\n      newInstallerHolder.setAttribute('id', 'installer-' + installer['properties']['id']) //TODO: Don't use SQL ID\n      newInstallerHolder.setAttribute('data-action', 'click->installer-search#zoomOnInstaller') //TODO: Don't use SQL ID\n      newInstallerHolder.setAttribute('data-installer-search-installer-param', installer['properties']['id']) //TODO: Don't use SQL ID\n      newInstallerHolder.setAttribute('class', 'store')\n      var newInstallerHTML = \"\";\n      if (installer['properties'].hasOwnProperty('logo') && installer['properties']['logo'] !== null && installer['properties']['logo'].trim().length != 0) {\n        newInstallerHTML += \"<div class='logoHold inline'>\";\n        newInstallerHTML += \"<img class='logo' src='\" + installer['properties']['logo'] + \"' />\";\n        newInstallerHTML += \"</div>\"\n        newInstallerHTML += \"<div class='installerInfo inline'>\";\n      } else {\n        newInstallerHTML += \"<div class='installerInfo'>\";\n      }\n      newInstallerHTML += \"<div class='title'>\" + installer['properties']['company_name'] + \"</div>\";\n      newInstallerHTML += \"<div class='address'>\" + installer['properties']['city'] + \" \" + installer['properties']['state'] + \"</div>\";\n      if (installer['properties']['phone'] !== null && installer['properties']['phone'].trim().length != 0) {\n        newInstallerHTML += \"<div class='phone'>Phone: \" + installer['properties']['phone'] + \"</div>\";\n      }\n      if (installer['properties']['email'] !== null && installer['properties']['email'].trim().length != 0) {\n        newInstallerHTML += \"<div class='email'>Email: \" + installer['properties']['email'] + \"</div>\";\n      }\n      if (installer['properties']['website'] !== null && installer['properties']['website'].trim().length != 0) {\n        newInstallerHTML += \"<div class='website'>Website: <a href='https://\" + installer['properties']['website'] + \"'>\" + installer['properties']['website'] + \"</a></div>\";\n      }\n      newInstallerHolder.innerHTML = newInstallerHTML;\n      newInstallerListHolder.appendChild(newInstallerHolder)\n      document.getElementById('storeList').appendChild(newInstallerListHolder)\n    })\n  }\n\n  async updateMapLocation(newLocation) {\n    var result = await this.bestMatch(newLocation)\n    if (!result) return\n    var location = { lat: parseFloat(result.lat), lng: parseFloat(result.lon) }\n    this.dispatch('locationSearched', { detail: location, target: this.mapContainerTarget })\n  }\n\n  // Pick between the best match in the countries we serve and the best match\n  // worldwide, favouring the local one unless it is far less prominent\n  async bestMatch(place) {\n    var regional = await this.geocode(place, this.countryCodes)\n    var worldwide = await this.geocode(place)\n    if (!regional) return worldwide\n    if (!worldwide) return regional\n    return this.importance(regional) >= this.importance(worldwide) * REGION_PREFERENCE ? regional : worldwide\n  }\n\n  // Look up a place name, optionally restricted to a comma separated list of\n  // country codes. Returns the best match, or null when there is none. Requests\n  // are sequential to stay within Nominatim's one-per-second usage policy\n  async geocode(place, countryCodes) {\n    var url = 'https://nominatim.openstreetmap.org/search?format=json&limit=1&q=' + encodeURIComponent(place)\n    if (countryCodes) url += '&countrycodes=' + countryCodes\n    var response = await fetch(url)\n    var results = await response.json()\n    return results.length === 0 ? null : results[0]\n  }\n\n  importance(result) {\n    return parseFloat(result.importance) || 0\n  }\n\n  updateInstallersShown(bounds) {\n    var installersInRange = this.installers.filter(installer => {\n      var [lng, lat] = installer['geometry']['coordinates']\n      return lat >= bounds.south && lat <= bounds.north && lng >= bounds.west && lng <= bounds.east\n    })\n    var sortedInstallers = installersInRange.sort(this.sortInstallersBySiteCount)\n    this.loadInstallerInfoPanel(sortedInstallers)\n  }\n\n    /**\n   * Installers who have more sites that are online on a plan are sorted to be\n   * first.\n   * */\n  sortInstallersBySiteCount(a, b) {\n    if (a['properties']['sites_count'] < b['properties']['sites_count']) {\n      return 1;\n    } else if (a['properties']['sites_count'] > b['properties']['sites_count']) {\n      return -1;\n    }\n    return 0\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"installer-users--account-recovery\"\nexport default class extends Controller {\n  static targets = [\n    \"header\", \"mobileForm\", \"emailForm\",\n    \"mobilePhone\", \"email\", \"formCaptchaAndSubmit\",\n    \"customerNumberInput\", \"emailInput\", \"mobilePhoneInput\", \"recoverUsernameButton\",\n    \"submitForm\"\n  ]\n\n  showAccountRecoveryWithEmail() {\n    this.emailFormTarget.classList.remove('d-none')\n    this.mobileFormTarget.classList.add('d-none')\n  }\n\n  showAccountRecoveryWithMobile() {\n    this.emailFormTarget.classList.add('d-none')\n    this.mobileFormTarget.classList.remove('d-none')\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport * as bootstrap from \"bootstrap\"\n\n// Connects to data-controller=\"sites\"\nexport default class extends Controller {\n  static targets = [ \"changeLanguageForm\" ]\n\n  connect() {\n      this.conformInputBoxLabelWidth();\n      this.setupSortableTable()\n      this.setupToolTips()\n  }\n\n  conformInputBoxLabelWidth() {\n    // Set all input box label widths that are not inside a modal to the width of the longest label on the page\n    if(document.querySelector(\n      '.input-group > .input-group-prepend > .input-group-text:not(.modal .input-group > .input-group-prepend > .input-group-text)'\n    )){\n      var collapsed = document.querySelectorAll('.collapse');\n      collapsed.forEach(element => { element.style.display = 'block' });\n      var dNone = document.querySelectorAll('.d-none');\n      dNone.forEach(element => { element.classList.remove('d-none') })\n      document.querySelectorAll(\n        '.input-group > .input-group-prepend > .input-group-text:not(.modal .input-group > .input-group-prepend > .input-group-text)'\n      ).forEach(element => element.style.width = '');\n\n      var mWidth = 0;\n      var inputs = document.querySelectorAll(\n        '.input-group > .input-group-prepend > .input-group-text:not(.modal .input-group > .input-group-prepend > .input-group-text)'\n      )\n      inputs.forEach(element => {\n        var tWidth = element.offsetWidth;\n        if (Number(mWidth) < Number(tWidth)) {\n          mWidth = tWidth;\n        }\n      });\n\n      document.querySelectorAll(\n        '.input-group > .input-group-prepend > .input-group-text:not(.no-resize .modal .input-group > .input-group-prepend > .input-group-text)'\n      ).forEach(element => element.style.width = mWidth + 'px');\n      document.querySelectorAll(\n        '.input-group > .input-group-prepend > .input-group-text:not(.modal .input-group > .input-group-prepend > .input-group-text'\n      ).forEach(element => element.style.display = 'block');\n      document.querySelectorAll(\n        '.input-group > .input-group-prepend > .input-group-text:not(.modal .input-group > .input-group-prepend > .input-group-text'\n      ).forEach(element => element.style.textAlign = 'right');\n      collapsed.forEach(element => { element.style.display = '' });\n      dNone.forEach(element => { element.classList.add('d-none') })\n    }\n\n    // Set all input box label widths inside each modal to the width of the longest label in that modal\n    if(document.querySelector('.input-group > .input-group-prepend > .input-group-text')){\n\n        var modals = document.querySelectorAll('.modal');\n\n        modals.forEach(modal => {\n\n          var collapsed = modal.querySelectorAll('.collapse');\n          collapsed.forEach(element => { element.style.display = 'block' });\n          var dNone = modal.querySelectorAll('.d-none');\n          dNone.forEach(element => { element.classList.remove('d-none') });\n\n          modal.style.display = 'block';\n\n          modal.querySelectorAll('.input-group > .input-group-prepend > .input-group-text').forEach(element => element.style.width = '');\n  \n          var mWidth = 0;\n          var inputs = document.querySelectorAll('.input-group > .input-group-prepend > .input-group-text')\n          inputs.forEach(element => {\n            var tWidth = element.offsetWidth;\n            if (Number(mWidth) < Number(tWidth)) {\n              mWidth = tWidth;\n            }\n          });\n    \n          modal.querySelectorAll('.input-group > .input-group-prepend > .input-group-text:not(.no-resize)')\n            .forEach(element => element.style.width = mWidth + 'px');\n          modal.querySelectorAll('.input-group > .input-group-prepend > .input-group-text')\n            .forEach(element => element.style.display = 'block');\n          modal.querySelectorAll('.input-group > .input-group-prepend > .input-group-text')\n            .forEach(element => element.style.textAlign = 'right');\n          collapsed.forEach(element => { element.style.display = '' });\n          dNone.forEach(element => { element.classList.add('d-none') })\n          modal.style.display = 'none';\n        })\n      }\n  }\n\n  setupSortableTable() {\n    if (document.querySelector('table[data-sortable]')) {\n      // These double falses are to trick sortable into thinking it needs to initiate on turbo load\n      sorttable.init.done = false;\n      sorttable.init();\n    }\n  }\n\n  setupToolTips() {\n    var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle=\"tooltip\"]'))\n    var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {\n      return new bootstrap.Tooltip(tooltipTriggerEl)\n    })\n  }\n\n  changeLanguage(event) {\n    if (this.hasChangeLanguageFormTarget) {\n      this.changeLanguageFormTarget.submit();\n    }\n  }\n}\n", "// app/javascript/controllers/map_controller.js\nimport { Controller } from \"@hotwired/stimulus\"\nimport L from \"leaflet\"\nimport \"leaflet.fullscreen\"\n\nexport default class extends Controller {\n  static values = {\n    lat: { type: Number, default: -33.769935 },\n    lng: { type: Number, default: 150.945954 },\n    zoom: { type: Number, default: 13 },\n    // [[south, west], [north, east]] - takes precedence over lat/lng/zoom when\n    // the region to show is wider than a single sensible centre point\n    bounds: { type: Array, default: [] },\n    iconUrl: String,\n    iconRetinaUrl: String,\n    shadowUrl: String\n  }\n\n  connect() {\n    this.markersById = {}\n\n    // initialize the leaflet map with fullscreen control\n    this.map = L.map(this.element, {\n      fullscreenControl: true,\n      fullscreenControlOptions: {\n        position: \"topleft\"\n      }\n    })\n\n    if (this.boundsValue.length === 2) {\n      this.map.fitBounds(this.boundsValue)\n    } else {\n      this.map.setView([this.latValue, this.lngValue], this.zoomValue)\n    }\n\n    // add the OpenStreetMap tile layer to the map\n    L.tileLayer(\"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\", {\n      maxZoom: 19,\n      attribution: \"&copy; OpenStreetMap contributors\"\n    }).addTo(this.map)\n\n    // define the custom icon for the markers\n    this.icon = L.icon({\n      iconUrl: this.iconUrlValue,\n      iconRetinaUrl: this.iconRetinaUrlValue,\n      shadowUrl: this.shadowUrlValue,\n      iconSize: [25, 41],\n      iconAnchor: [12, 41],\n      popupAnchor: [1, -34]\n    })\n\n    // Listen for map movement and dispatch boundsChanged event\n    this.map.on(\"moveend\", () => {\n      const bounds = this.map.getBounds()\n      this.dispatch(\"boundsChanged\", {\n        detail: {\n          south: bounds.getSouth(),\n          west: bounds.getWest(),\n          north: bounds.getNorth(),\n          east: bounds.getEast()\n        }\n      })\n    })\n\n    // Load the installers onto the map after initializing it\n    this.loadInstallers()\n  }\n\n  // Disconnect the controller and clean up the map instance\n  disconnect() {\n    if (this.map) {\n      this.map.remove()\n      this.map = null\n    }\n  }\n\n  // Load the installers onto the map from the server\n  async loadInstallers() {\n    const response = await fetch(\"/installersList\", { headers: { \"Content-Type\": \"application/json;charset=utf-8\" } })\n    const installersJSON = await response.json()\n    if (!installersJSON.features) return\n\n    L.geoJSON(installersJSON, {\n      pointToLayer: (_feature, latlng) => L.marker(latlng, { icon: this.icon }),\n      onEachFeature: (feature, layer) => {\n        this.markersById[feature.properties.id] = layer\n        layer.bindPopup(this.popupContent(feature.properties))\n      }\n    }).addTo(this.map)\n\n    this.dispatch(\"installersLoaded\", { detail: { installers: installersJSON.features } })\n\n    // Centre on the user's location if they permit it. This runs after the dispatch\n    // above so the installer list is populated before the resulting moveend fires\n    // boundsChanged. Denied or failed lookups are a silent no-op, leaving the\n    // default view in place.\n    this.map.locate({ setView: true, maxZoom: 11 })\n  }\n\n  // Generate the HTML content for the popup of a marker based on its properties\n  popupContent(properties) {\n    let content = \"<div class='store'>\"\n    if (properties.logo && properties.logo.trim().length !== 0) {\n      content += \"<div class='logoHold inline'>\"\n      content += \"<img class='logo' src='\" + properties.logo + \"' />\"\n      content += \"</div><div class='installerInfo inline'>\"\n    }\n    content += \"<div class='title'>\" + properties.company_name + \"</div>\"\n    content += \"<div class='address'>\" + properties.city + \" \" + properties.state + \"</div>\"\n    if (properties.phone && properties.phone.trim().length !== 0) {\n      content += \"<div class='phone'>Phone: \" + properties.phone + \"</div>\"\n    }\n    if (properties.email && properties.email.trim().length !== 0) {\n      content += \"<div class='email'>Email: \" + properties.email + \"</div>\"\n    }\n    if (properties.website && properties.website.trim().length !== 0) {\n      content += \"<div class='website'>Website: <a href='https://\" + properties.website + \"'>\" + properties.website + \"</a></div>\"\n    }\n    content += \"</div>\"\n    return content\n  }\n\n  // Focus the map on a specific installer by its ID\n  focusInstaller(event) {\n    const marker = this.markersById[event.detail.id]\n    if (!marker) return\n    this.map.setView(marker.getLatLng(), 13)\n    marker.openPopup()\n  }\n\n  // Focus the map on a specific location by its latitude and longitude\n  focusLocation(event) {\n    const { lat, lng } = event.detail\n    this.map.setView([lat, lng], 13)\n  }\n}\n", "/*!\n * leaflet.fullscreen\n * (c) Bruno B.; MIT License\n * https://github.com/brunob/leaflet.fullscreen\n */\n/*! GENERATED FILE - DO NOT EDIT DIRECTLY. Edit files in src/ and run 'npm run build' */\nimport { Control, DomEvent, Map } from 'leaflet';\n\nif (typeof document === 'undefined') {\n\tconsole.warn('\"window.document\" is undefined; leaflet.fullscreen requires this object to access the DOM');\n}\n\nconst nativeAPI = (() => {\n\tconst methodMap = [\n\t\t// Standard\n\t\t[\n\t\t\t'requestFullscreen',\n\t\t\t'exitFullscreen',\n\t\t\t'fullscreenElement',\n\t\t\t'fullscreenEnabled',\n\t\t\t'fullscreenchange',\n\t\t\t'fullscreenerror'\n\t\t],\n\t\t// New WebKit\n\t\t[\n\t\t\t'webkitRequestFullscreen',\n\t\t\t'webkitExitFullscreen',\n\t\t\t'webkitFullscreenElement',\n\t\t\t'webkitFullscreenEnabled',\n\t\t\t'webkitfullscreenchange',\n\t\t\t'webkitfullscreenerror'\n\t\t]\n\t];\n\n\tconst baseList = methodMap[0];\n\tconst ret = {};\n\n\tfor (const methodList of methodMap) {\n\t\tif (methodList[1] in document) {\n\t\t\tfor (let i = 0; i < methodList.length; i++) {\n\t\t\t\tret[baseList[i]] = methodList[i];\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t}\n\n\treturn false;\n})();\n\nconst eventNameMap = {\n\tchange: nativeAPI.fullscreenchange,\n\terror: nativeAPI.fullscreenerror,\n};\n\nconst fullscreenAPI = {\n\t// Request fullscreen for a specific element\n\tasync request(element, options) {\n\t\telement = element || document.documentElement;\n\t\tconst requestMethod = nativeAPI.requestFullscreen;\n\n\t\tawait this._callNative(() => {\n\t\t\treturn element[requestMethod](options);\n\t\t});\n\t},\n\t// Exit fullscreen mode\n\tasync exit() {\n\t\tif (!this.isFullscreen) {\n\t\t\treturn;\n\t\t}\n\t\tconst exitMethod = nativeAPI.exitFullscreen;\n\n\t\tawait this._callNative(() => {\n\t\t\treturn document[exitMethod]();\n\t\t});\n\t},\n\t// Helper to handle browser differences (Promise vs Event)\n\tasync _callNative(action) {\n\t\tconst result = action();\n\n\t\t// Modern browsers return a Promise from requestFullscreen/exitFullscreen\n\t\tif (result instanceof Promise) {\n\t\t\tawait result;\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback for Safari < 16.4 (March 2023) which doesn't return a Promise\n\t\tawait new Promise((resolve) => {\n\t\t\tconst listener = () => {\n\t\t\t\tthis.off('change', listener);\n\t\t\t\tresolve();\n\t\t\t};\n\t\t\tthis.on('change', listener);\n\t\t});\n\t},\n\t// Add event listener for fullscreen changes\n\ton(event, callback) {\n\t\tconst eventName = eventNameMap[event];\n\t\tif (eventName) {\n\t\t\tdocument.addEventListener(eventName, callback);\n\t\t}\n\t},\n\t// Remove event listener\n\toff(event, callback) {\n\t\tconst eventName = eventNameMap[event];\n\t\tif (eventName) {\n\t\t\tdocument.removeEventListener(eventName, callback);\n\t\t}\n\t},\n\tnativeAPI: nativeAPI\n};\n\nObject.defineProperties(fullscreenAPI, {\n\tisFullscreen: {\n\t\tget() {\n\t\t\treturn Boolean(document[nativeAPI.fullscreenElement]);\n\t\t}\n\t},\n\tisEnabled: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\t// Coerce to boolean in case of old WebKit\n\t\t\treturn Boolean(document[nativeAPI.fullscreenEnabled]);\n\t\t}\n\t}\n});\n\nconst FullScreen = Control.extend({\n\toptions: {\n\t\tposition: 'topleft',\n\t\ttitle: 'Full Screen',\n\t\ttitleCancel: 'Exit Full Screen',\n\t\tforceSeparateButton: false,\n\t\tforcePseudoFullscreen: false,\n\t\tfullscreenElement: false\n\t},\n\n\t_screenfull: fullscreenAPI,\n\n\tonAdd(map) {\n\t\tlet className = 'leaflet-control-zoom-fullscreen';\n\t\tlet container;\n\t\tlet content = '';\n\n\t\tif (map.zoomControl && !this.options.forceSeparateButton) {\n\t\t\tcontainer = map.zoomControl._container;\n\t\t} else {\n\t\t\tcontainer = document.createElement('div');\n\t\t\tcontainer.className = 'leaflet-bar';\n\t\t}\n\n\t\tif (this.options.content) {\n\t\t\tcontent = this.options.content;\n\t\t} else {\n\t\t\tclassName += ' leaflet-fullscreen-icon';\n\t\t}\n\n\t\tthis._createButton(this.options.title, className, content, container, this.toggleFullScreen, this);\n\t\tthis._map.fullscreenControl = this;\n\n\t\tthis._map.on('enterFullscreen exitFullscreen', this._toggleState, this);\n\n\t\treturn container;\n\t},\n\n\tonRemove() {\n\t\tDomEvent\n\t\t\t.off(this.link, 'click', DomEvent.stop)\n\t\t\t.off(this.link, 'click', this.toggleFullScreen, this);\n\n\t\tif (this._screenfull.isEnabled) {\n\t\t\tDomEvent\n\t\t\t\t.off(document, this._screenfull.nativeAPI.fullscreenchange, DomEvent.stop)\n\t\t\t\t.off(document, this._screenfull.nativeAPI.fullscreenchange, this._handleFullscreenChange, this);\n\t\t}\n\t},\n\n\t_createButton(title, className, content, container, fn, context) {\n\t\tthis.link = document.createElement('a');\n\t\tthis.link.className = className;\n\t\tcontainer.appendChild(this.link);\n\t\tthis.link.href = '#';\n\t\tthis.link.title = title;\n\t\tthis.link.innerHTML = content;\n\n\t\tthis.link.setAttribute('role', 'button');\n\t\tthis.link.setAttribute('aria-label', title);\n\n\t\tDomEvent.disableClickPropagation(container);\n\n\t\tDomEvent\n\t\t\t.on(this.link, 'click', DomEvent.stop)\n\t\t\t.on(this.link, 'click', fn, context);\n\n\t\tif (this._screenfull.isEnabled) {\n\t\t\tDomEvent\n\t\t\t\t.on(document, this._screenfull.nativeAPI.fullscreenchange, DomEvent.stop)\n\t\t\t\t.on(document, this._screenfull.nativeAPI.fullscreenchange, this._handleFullscreenChange, context);\n\t\t}\n\n\t\treturn this.link;\n\t},\n\n\tasync toggleFullScreen() {\n\t\tconst map = this._map;\n\t\tconst { fullscreenElement, forcePseudoFullscreen } = this.options;\n\n\t\t// Target element: use custom element if provided, otherwise the map container\n\t\tconst container = fullscreenElement || map.getContainer();\n\n\t\t// Check if we should use the native Fullscreen API\n\t\tconst useNative = this._screenfull.isEnabled && !forcePseudoFullscreen;\n\n\t\tif (map._isFullscreen) {\n\t\t\t// --- EXIT FULLSCREEN ---\n\n\t\t\t// Set flag to prevent the 'fullscreenchange' listener from firing a duplicate exit event\n\t\t\tmap._exitFired = true;\n\n\t\t\tif (useNative) {\n\t\t\t\tawait this._screenfull.exit();\n\t\t\t} else {\n\t\t\t\tcontainer.classList.remove('leaflet-pseudo-fullscreen');\n\t\t\t}\n\n\t\t\tmap.invalidateSize();\n\t\t\tmap._isFullscreen = false;\n\t\t\tmap.fire('exitFullscreen');\n\t\t} else {\n\t\t\t// --- ENTER FULLSCREEN ---\n\n\t\t\tmap._exitFired = false;\n\n\t\t\tif (useNative) {\n\t\t\t\tawait this._screenfull.request(container);\n\t\t\t} else {\n\t\t\t\tcontainer.classList.add('leaflet-pseudo-fullscreen');\n\t\t\t}\n\n\t\t\tmap.invalidateSize();\n\t\t\tmap._isFullscreen = true;\n\t\t\tmap.fire('enterFullscreen');\n\t\t}\n\t},\n\n\t_toggleState() {\n\t\tconst { title, titleCancel } = this.options;\n\t\tconst isFullscreen = this._map._isFullscreen;\n\n\t\t// Update Title & Aria Label\n\t\tthis.link.title = isFullscreen ? titleCancel : title;\n\t\tthis.link.setAttribute('aria-label', this.link.title);\n\t\tthis.link.setAttribute('aria-pressed', isFullscreen.toString());\n\n\t\t// Update Icon Class\n\t\tthis.link.classList.toggle('leaflet-fullscreen-on', isFullscreen);\n\t},\n\n\t_handleFullscreenChange() {\n\t\tconst map = this._map;\n\n\t\t// Check if fullscreen was exited via browser (ESC key or browser UI)\n\t\t// and we didn't trigger the exit ourselves\n\t\tconst wasExitedExternally = !this._screenfull.isFullscreen && map._isFullscreen && !map._exitFired;\n\n\t\tif (wasExitedExternally) {\n\t\t\t// Sync internal state with browser state\n\t\t\tmap._exitFired = true;\n\t\t\tmap._isFullscreen = false;\n\n\t\t\t// Notify listeners and adjust map size\n\t\t\tmap.fire('exitFullscreen');\n\t\t\tmap.invalidateSize();\n\t\t}\n\t}\n});\n\nMap.include({\n\ttoggleFullscreen() {\n\t\tthis.fullscreenControl.toggleFullScreen();\n\t}\n});\n\nMap.mergeOptions({\n\tfullscreenControl: false\n});\n\nMap.addInitHook(function() {\n\tif (this.options.fullscreenControl) {\n\t\tthis.addControl(new FullScreen(this.options.fullscreenControlOptions));\n\t}\n});\n\nexport { FullScreen, FullScreen as default };\n", "import { Controller } from \"@hotwired/stimulus\"\nimport * as bootstrap from \"bootstrap\"\n\n// Connects to data-controller=\"mobiles\"\nexport default class extends Controller {\n  static targets = [\n    \"mobilesTable\", \"mobilesFormSubmit\", \"formDeleteMobileIndex\",\n    \"deleteMobileIndex\", \"deleteMobileName\", \"deleteMobileModal\",\n    \"reRegisterMobileModal\", \"formReRegisterMobileIndex\",\n    \"reRegisterMobileIndex\", \"reRegisterMobileName\", \"reRegisterMobileModal\",\n    \"resetQuarantineIndex\", \"resetQuarantineName\", \"resetQuarantineModal\",\n    \"resetQuarantineSubmit\", \"newCodeModal\"\n  ]\n\n  connect() {\n    if (this.hasMobilesTableTarget) {\n      this.setup()\n    }\n    if (this.hasNewCodeModalTarget) {\n      if (!this.newCodeModal) {\n        this.newCodeModal = new bootstrap.Modal(this.newCodeModalTarget, { keyboard: false });\n      }\n      if (this.newCodeModal) {\n        this.newCodeModal.show()\n      }\n    }\n  }\n\n  setup() {\n\n  }\n\n  setupNewMobileRow(event) {\n    if (document.getElementById(event.target.id).value.length > 0) {\n      var mobileIndex = event.params['mobileIndex']\n      document.getElementById('pmb' + mobileIndex + '_wifi_only').checked = false\n      document.getElementById('pmb' + mobileIndex + '_pin_always').checked = false\n      document.getElementById('pmb' + mobileIndex + '_confirm_all').checked = false\n      document.getElementById('pmb' + mobileIndex + '_panic_visible').checked = true\n      document.getElementById('pmb' + mobileIndex + '_panic_silent').checked = false\n      document.getElementById('pmb' + mobileIndex + '_control_outputs').checked = true\n      document.getElementById('pmb' + mobileIndex + '_control_doors').checked = true\n      document.getElementById('pmb' + mobileIndex + '_bypass_zones').checked = true\n      document.getElementById('pmb' + mobileIndex + '_see_history').checked = true\n      document.getElementById('pmb' + mobileIndex + '_get_code').classList.remove('d-none')\n    } else if (document.getElementById(event.target.id).value.length == 0) {\n      var mobileIndex = event.params['mobileIndex']\n      document.getElementById('pmb' + mobileIndex + '_wifi_only').checked = false\n      document.getElementById('pmb' + mobileIndex + '_pin_always').checked = false\n      document.getElementById('pmb' + mobileIndex + '_confirm_all').checked = false\n      document.getElementById('pmb' + mobileIndex + '_panic_visible').checked = false\n      document.getElementById('pmb' + mobileIndex + '_panic_silent').checked = false\n      document.getElementById('pmb' + mobileIndex + '_control_outputs').checked = false\n      document.getElementById('pmb' + mobileIndex + '_control_doors').checked = false\n      document.getElementById('pmb' + mobileIndex + '_bypass_zones').checked = false\n      document.getElementById('pmb' + mobileIndex + '_see_history').checked = false\n      document.getElementById('pmb' + mobileIndex + '_get_code').classList.add('d-none')\n    }\n  }\n\n  deleteMobile(event) {\n    var mobileIndex = event.params['mobileIndex']\n    var mobileName = event.params['mobileName']\n    if (this.hasDeleteMobileIndexTarget) {\n      this.deleteMobileIndexTarget.innerHTML = mobileIndex\n      this.deleteMobileNameTarget.innerHTML = mobileName\n      this.formDeleteMobileIndexTarget.value = mobileIndex\n      if (!this.deleteMobileModal) {\n        this.deleteMobileModal = new bootstrap.Modal(this.deleteMobileModalTarget, { keyboard: false });\n      }\n      if (this.deleteMobileModal) {\n        this.deleteMobileModal.show()\n      }\n    }\n  }\n\n  reRegisterMobile(event) {\n    var mobileIndex = event.params['mobileIndex']\n    var mobileName = event.params['mobileName']\n    if (this.hasReRegisterMobileIndexTarget) {\n      this.reRegisterMobileIndexTarget.innerHTML = mobileIndex\n      this.reRegisterMobileNameTarget.innerHTML = mobileName\n      this.formReRegisterMobileIndexTarget.value = mobileIndex\n      if (!this.reRegisterMobileModal) {\n        this.reRegisterMobileModal = new bootstrap.Modal(this.reRegisterMobileModalTarget, { keyboard: false });\n      }\n      if (this.reRegisterMobileModal) {\n        this.reRegisterMobileModal.show()\n      }\n    }\n  }\n\n  resetMobileQuarantine(event) {\n    var siteSerial = event.params['siteSerial']\n    var mobileIndex = event.params['mobileIndex']\n    var mobileName = event.params['mobileName']\n    if (this.hasResetQuarantineIndexTarget) {\n      this.resetQuarantineIndexTarget.innerHTML = mobileIndex\n      this.resetQuarantineNameTarget.innerHTML = mobileName\n      this.resetQuarantineSubmitTarget.href = '/mobiles/' + siteSerial +'/resetQuarantine/' + mobileIndex\n      if (!this.resetQuarantineModal) {\n        this.resetQuarantineModal = new bootstrap.Modal(this.resetQuarantineModalTarget, { keyboard: false });\n      }\n      if (this.resetQuarantineModal) {\n        this.resetQuarantineModal.show()\n      }\n    }\n  }\n\n  newAppCode(event) {\n    var mobileIndex = event.params['mobileIndex']\n    var newCode =  Math.floor((Math.random() * (999999 - 100000) + 100000));\n    if (document.getElementById('pmb' + mobileIndex + '_registration_code')) {\n      document.getElementById('pmb' + mobileIndex + '_registration_code').value = newCode\n    } else if (document.getElementById('mb' + mobileIndex + '_registration_code')) {\n      document.getElementById('mb' + mobileIndex + '_registration_code').value = newCode\n    } else {\n      return;\n    }\n    if (this.hasMobilesFormSubmitTarget) {\n      this.mobilesFormSubmitTarget.click()\n    }\n  }\n}\n", "var adapters = {\n  logger: typeof console !== \"undefined\" ? console : undefined,\n  WebSocket: typeof WebSocket !== \"undefined\" ? WebSocket : undefined\n};\n\nvar logger = {\n  log(...messages) {\n    if (this.enabled) {\n      messages.push(Date.now());\n      adapters.logger.log(\"[ActionCable]\", ...messages);\n    }\n  }\n};\n\nconst now = () => (new Date).getTime();\n\nconst secondsSince = time => (now() - time) / 1e3;\n\nclass ConnectionMonitor {\n  constructor(connection) {\n    this.visibilityDidChange = this.visibilityDidChange.bind(this);\n    this.connection = connection;\n    this.reconnectAttempts = 0;\n  }\n  start() {\n    if (!this.isRunning()) {\n      this.startedAt = now();\n      delete this.stoppedAt;\n      this.startPolling();\n      addEventListener(\"visibilitychange\", this.visibilityDidChange);\n      logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`);\n    }\n  }\n  stop() {\n    if (this.isRunning()) {\n      this.stoppedAt = now();\n      this.stopPolling();\n      removeEventListener(\"visibilitychange\", this.visibilityDidChange);\n      logger.log(\"ConnectionMonitor stopped\");\n    }\n  }\n  isRunning() {\n    return this.startedAt && !this.stoppedAt;\n  }\n  recordMessage() {\n    this.pingedAt = now();\n  }\n  recordConnect() {\n    this.reconnectAttempts = 0;\n    delete this.disconnectedAt;\n    logger.log(\"ConnectionMonitor recorded connect\");\n  }\n  recordDisconnect() {\n    this.disconnectedAt = now();\n    logger.log(\"ConnectionMonitor recorded disconnect\");\n  }\n  startPolling() {\n    this.stopPolling();\n    this.poll();\n  }\n  stopPolling() {\n    clearTimeout(this.pollTimeout);\n  }\n  poll() {\n    this.pollTimeout = setTimeout((() => {\n      this.reconnectIfStale();\n      this.poll();\n    }), this.getPollInterval());\n  }\n  getPollInterval() {\n    const {staleThreshold: staleThreshold, reconnectionBackoffRate: reconnectionBackoffRate} = this.constructor;\n    const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10));\n    const jitterMax = this.reconnectAttempts === 0 ? 1 : reconnectionBackoffRate;\n    const jitter = jitterMax * Math.random();\n    return staleThreshold * 1e3 * backoff * (1 + jitter);\n  }\n  reconnectIfStale() {\n    if (this.connectionIsStale()) {\n      logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`);\n      this.reconnectAttempts++;\n      if (this.disconnectedRecently()) {\n        logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`);\n      } else {\n        logger.log(\"ConnectionMonitor reopening\");\n        this.connection.reopen();\n      }\n    }\n  }\n  get refreshedAt() {\n    return this.pingedAt ? this.pingedAt : this.startedAt;\n  }\n  connectionIsStale() {\n    return secondsSince(this.refreshedAt) > this.constructor.staleThreshold;\n  }\n  disconnectedRecently() {\n    return this.disconnectedAt && secondsSince(this.disconnectedAt) < this.constructor.staleThreshold;\n  }\n  visibilityDidChange() {\n    if (document.visibilityState === \"visible\") {\n      setTimeout((() => {\n        if (this.connectionIsStale() || !this.connection.isOpen()) {\n          logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`);\n          this.connection.reopen();\n        }\n      }), 200);\n    }\n  }\n}\n\nConnectionMonitor.staleThreshold = 6;\n\nConnectionMonitor.reconnectionBackoffRate = .15;\n\nvar INTERNAL = {\n  message_types: {\n    welcome: \"welcome\",\n    disconnect: \"disconnect\",\n    ping: \"ping\",\n    confirmation: \"confirm_subscription\",\n    rejection: \"reject_subscription\"\n  },\n  disconnect_reasons: {\n    unauthorized: \"unauthorized\",\n    invalid_request: \"invalid_request\",\n    server_restart: \"server_restart\",\n    remote: \"remote\"\n  },\n  default_mount_path: \"/cable\",\n  protocols: [ \"actioncable-v1-json\", \"actioncable-unsupported\" ]\n};\n\nconst {message_types: message_types, protocols: protocols} = INTERNAL;\n\nconst supportedProtocols = protocols.slice(0, protocols.length - 1);\n\nconst indexOf = [].indexOf;\n\nclass Connection {\n  constructor(consumer) {\n    this.open = this.open.bind(this);\n    this.consumer = consumer;\n    this.subscriptions = this.consumer.subscriptions;\n    this.monitor = new ConnectionMonitor(this);\n    this.disconnected = true;\n  }\n  send(data) {\n    if (this.isOpen()) {\n      this.webSocket.send(JSON.stringify(data));\n      return true;\n    } else {\n      return false;\n    }\n  }\n  open() {\n    if (this.isActive()) {\n      logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`);\n      return false;\n    } else {\n      const socketProtocols = [ ...protocols, ...this.consumer.subprotocols || [] ];\n      logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`);\n      if (this.webSocket) {\n        this.uninstallEventHandlers();\n      }\n      this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols);\n      this.installEventHandlers();\n      this.monitor.start();\n      return true;\n    }\n  }\n  close({allowReconnect: allowReconnect} = {\n    allowReconnect: true\n  }) {\n    if (!allowReconnect) {\n      this.monitor.stop();\n    }\n    if (this.isOpen()) {\n      return this.webSocket.close();\n    }\n  }\n  reopen() {\n    logger.log(`Reopening WebSocket, current state is ${this.getState()}`);\n    if (this.isActive()) {\n      try {\n        return this.close();\n      } catch (error) {\n        logger.log(\"Failed to reopen WebSocket\", error);\n      } finally {\n        logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`);\n        setTimeout(this.open, this.constructor.reopenDelay);\n      }\n    } else {\n      return this.open();\n    }\n  }\n  getProtocol() {\n    if (this.webSocket) {\n      return this.webSocket.protocol;\n    }\n  }\n  isOpen() {\n    return this.isState(\"open\");\n  }\n  isActive() {\n    return this.isState(\"open\", \"connecting\");\n  }\n  triedToReconnect() {\n    return this.monitor.reconnectAttempts > 0;\n  }\n  isProtocolSupported() {\n    return indexOf.call(supportedProtocols, this.getProtocol()) >= 0;\n  }\n  isState(...states) {\n    return indexOf.call(states, this.getState()) >= 0;\n  }\n  getState() {\n    if (this.webSocket) {\n      for (let state in adapters.WebSocket) {\n        if (adapters.WebSocket[state] === this.webSocket.readyState) {\n          return state.toLowerCase();\n        }\n      }\n    }\n    return null;\n  }\n  installEventHandlers() {\n    for (let eventName in this.events) {\n      const handler = this.events[eventName].bind(this);\n      this.webSocket[`on${eventName}`] = handler;\n    }\n  }\n  uninstallEventHandlers() {\n    for (let eventName in this.events) {\n      this.webSocket[`on${eventName}`] = function() {};\n    }\n  }\n}\n\nConnection.reopenDelay = 500;\n\nConnection.prototype.events = {\n  message(event) {\n    if (!this.isProtocolSupported()) {\n      return;\n    }\n    const {identifier: identifier, message: message, reason: reason, reconnect: reconnect, type: type} = JSON.parse(event.data);\n    this.monitor.recordMessage();\n    switch (type) {\n     case message_types.welcome:\n      if (this.triedToReconnect()) {\n        this.reconnectAttempted = true;\n      }\n      this.monitor.recordConnect();\n      return this.subscriptions.reload();\n\n     case message_types.disconnect:\n      logger.log(`Disconnecting. Reason: ${reason}`);\n      return this.close({\n        allowReconnect: reconnect\n      });\n\n     case message_types.ping:\n      return null;\n\n     case message_types.confirmation:\n      this.subscriptions.confirmSubscription(identifier);\n      if (this.reconnectAttempted) {\n        this.reconnectAttempted = false;\n        return this.subscriptions.notify(identifier, \"connected\", {\n          reconnected: true\n        });\n      } else {\n        return this.subscriptions.notify(identifier, \"connected\", {\n          reconnected: false\n        });\n      }\n\n     case message_types.rejection:\n      return this.subscriptions.reject(identifier);\n\n     default:\n      return this.subscriptions.notify(identifier, \"received\", message);\n    }\n  },\n  open() {\n    logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`);\n    this.disconnected = false;\n    if (!this.isProtocolSupported()) {\n      logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\");\n      return this.close({\n        allowReconnect: false\n      });\n    }\n  },\n  close(event) {\n    logger.log(\"WebSocket onclose event\");\n    if (this.disconnected) {\n      return;\n    }\n    this.disconnected = true;\n    this.monitor.recordDisconnect();\n    return this.subscriptions.notifyAll(\"disconnected\", {\n      willAttemptReconnect: this.monitor.isRunning()\n    });\n  },\n  error() {\n    logger.log(\"WebSocket onerror event\");\n  }\n};\n\nconst extend = function(object, properties) {\n  if (properties != null) {\n    for (let key in properties) {\n      const value = properties[key];\n      object[key] = value;\n    }\n  }\n  return object;\n};\n\nclass Subscription {\n  constructor(consumer, params = {}, mixin) {\n    this.consumer = consumer;\n    this.identifier = JSON.stringify(params);\n    extend(this, mixin);\n  }\n  perform(action, data = {}) {\n    data.action = action;\n    return this.send(data);\n  }\n  send(data) {\n    return this.consumer.send({\n      command: \"message\",\n      identifier: this.identifier,\n      data: JSON.stringify(data)\n    });\n  }\n  unsubscribe() {\n    return this.consumer.subscriptions.remove(this);\n  }\n}\n\nclass SubscriptionGuarantor {\n  constructor(subscriptions) {\n    this.subscriptions = subscriptions;\n    this.pendingSubscriptions = [];\n  }\n  guarantee(subscription) {\n    if (this.pendingSubscriptions.indexOf(subscription) == -1) {\n      logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`);\n      this.pendingSubscriptions.push(subscription);\n    } else {\n      logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`);\n    }\n    this.startGuaranteeing();\n  }\n  forget(subscription) {\n    logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`);\n    this.pendingSubscriptions = this.pendingSubscriptions.filter((s => s !== subscription));\n  }\n  startGuaranteeing() {\n    this.stopGuaranteeing();\n    this.retrySubscribing();\n  }\n  stopGuaranteeing() {\n    clearTimeout(this.retryTimeout);\n  }\n  retrySubscribing() {\n    this.retryTimeout = setTimeout((() => {\n      if (this.subscriptions && typeof this.subscriptions.subscribe === \"function\") {\n        this.pendingSubscriptions.map((subscription => {\n          logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`);\n          this.subscriptions.subscribe(subscription);\n        }));\n      }\n    }), 500);\n  }\n}\n\nclass Subscriptions {\n  constructor(consumer) {\n    this.consumer = consumer;\n    this.guarantor = new SubscriptionGuarantor(this);\n    this.subscriptions = [];\n  }\n  create(channelName, mixin) {\n    const channel = channelName;\n    const params = typeof channel === \"object\" ? channel : {\n      channel: channel\n    };\n    const subscription = new Subscription(this.consumer, params, mixin);\n    return this.add(subscription);\n  }\n  add(subscription) {\n    this.subscriptions.push(subscription);\n    this.consumer.ensureActiveConnection();\n    this.notify(subscription, \"initialized\");\n    this.subscribe(subscription);\n    return subscription;\n  }\n  remove(subscription) {\n    this.forget(subscription);\n    if (!this.findAll(subscription.identifier).length) {\n      this.sendCommand(subscription, \"unsubscribe\");\n    }\n    return subscription;\n  }\n  reject(identifier) {\n    return this.findAll(identifier).map((subscription => {\n      this.forget(subscription);\n      this.notify(subscription, \"rejected\");\n      return subscription;\n    }));\n  }\n  forget(subscription) {\n    this.guarantor.forget(subscription);\n    this.subscriptions = this.subscriptions.filter((s => s !== subscription));\n    return subscription;\n  }\n  findAll(identifier) {\n    return this.subscriptions.filter((s => s.identifier === identifier));\n  }\n  reload() {\n    return this.subscriptions.map((subscription => this.subscribe(subscription)));\n  }\n  notifyAll(callbackName, ...args) {\n    return this.subscriptions.map((subscription => this.notify(subscription, callbackName, ...args)));\n  }\n  notify(subscription, callbackName, ...args) {\n    let subscriptions;\n    if (typeof subscription === \"string\") {\n      subscriptions = this.findAll(subscription);\n    } else {\n      subscriptions = [ subscription ];\n    }\n    return subscriptions.map((subscription => typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined));\n  }\n  subscribe(subscription) {\n    if (this.sendCommand(subscription, \"subscribe\")) {\n      this.guarantor.guarantee(subscription);\n    }\n  }\n  confirmSubscription(identifier) {\n    logger.log(`Subscription confirmed ${identifier}`);\n    this.findAll(identifier).map((subscription => this.guarantor.forget(subscription)));\n  }\n  sendCommand(subscription, command) {\n    const {identifier: identifier} = subscription;\n    return this.consumer.send({\n      command: command,\n      identifier: identifier\n    });\n  }\n}\n\nclass Consumer {\n  constructor(url) {\n    this._url = url;\n    this.subscriptions = new Subscriptions(this);\n    this.connection = new Connection(this);\n    this.subprotocols = [];\n  }\n  get url() {\n    return createWebSocketURL(this._url);\n  }\n  send(data) {\n    return this.connection.send(data);\n  }\n  connect() {\n    return this.connection.open();\n  }\n  disconnect() {\n    return this.connection.close({\n      allowReconnect: false\n    });\n  }\n  ensureActiveConnection() {\n    if (!this.connection.isActive()) {\n      return this.connection.open();\n    }\n  }\n  addSubProtocol(subprotocol) {\n    this.subprotocols = [ ...this.subprotocols, subprotocol ];\n  }\n}\n\nfunction createWebSocketURL(url) {\n  if (typeof url === \"function\") {\n    url = url();\n  }\n  if (url && !/^wss?:/i.test(url)) {\n    const a = document.createElement(\"a\");\n    a.href = url;\n    a.href = a.href;\n    a.protocol = a.protocol.replace(\"http\", \"ws\");\n    return a.href;\n  } else {\n    return url;\n  }\n}\n\nfunction createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n  return new Consumer(url);\n}\n\nfunction getConfig(name) {\n  const element = document.head.querySelector(`meta[name='action-cable-${name}']`);\n  if (element) {\n    return element.getAttribute(\"content\");\n  }\n}\n\nexport { Connection, ConnectionMonitor, Consumer, INTERNAL, Subscription, SubscriptionGuarantor, Subscriptions, adapters, createConsumer, createWebSocketURL, getConfig, logger };\n", "// Action Cable provides the framework to deal with WebSockets in Rails.\n// You can generate new channels where WebSocket features live using the `bin/rails generate channel` command.\n\nimport { createConsumer } from \"@rails/actioncable\"\n\n// Do not load cable connection on every page load!\n// export default createConsumer()\n\n let consumer\n\nexport function getConsumer() {\n  return consumer ||= createConsumer()\n}\n\nexport function disconnectConsumer() {\n  consumer?.disconnect()\n  consumer = null\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { getConsumer, disconnectConsumer } from \"../channels/consumer\"\n\n// Connects to data-controller=\"panel-programming-import\"\nexport default class extends Controller {\n  static targets = [\n    \"jobOutput\"\n  ];\n  static values = {\n    jobId: String\n  }\n\n  connect() {\n    console.log(\"CONNECTED\");\n    this.subscription = null;\n    this.loadProgress();\n  }\n\n  disconnect() {\n    console.log(\"DISCONNECTED\");\n    this.subscription?.unsubscribe()\n    disconnectConsumer()\n  }\n\n  loadProgress() {\n    this.jobOutputTarget.innerText = \"\";\n    const channelName = \"panel_programming_import_\" + this.jobIdValue;\n    console.log(\"Loading Progress of \" + channelName);\n    this.subscription = getConsumer().subscriptions.create(\n      { channel: \"PanelProgrammingImportChannel\", job_id: this.jobIdValue },\n      {\n        received: (data) => {\n          if (data.type == \"output\") {\n            console.log(data.type + \" \" + data.line + \" \" + this.jobOutputTarget);\n            this.jobOutputTarget.innerText += data.line + \"\\n\";\n            // const last = data.line.split(\"\\r\").pop()\n            // const lines = this.jobOutputTarget.innerText.split(\"\\n\")\n            // lines[lines.length - 1] = last // data.line   // overwrite last line\n            // this.jobOutputTarget.innerText = lines.join(\"\\n\")\n            this.jobOutputTarget.scrollTop = this.jobOutputTarget.scrollHeight\n          } else if (data.type == \"done\") {\n            console.log(data.type + \" \" + data.exit_code);\n            console.log(\"DONE\");\n            this.subscription.unsubscribe();\n          }\n        }\n      }\n    );\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"panel-status-icon\"\nexport default class extends Controller {\n  static targets = [\"iconCard\"]\n\n  connect() {\n    this.conformStatusCardHeight();\n  }\n\n  conformStatusCardHeight() {\n    var maxHeight = this.iconCardTargets.reduce(\n      (max, currentIconCard) =>  Math.max(max, currentIconCard.offsetHeight), 0\n    );\n\n    this.iconCardTargets.forEach((iconCard) => {\n      iconCard.style.height = `${maxHeight}px`;\n    });\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"password-visibility\"\nexport default class extends Controller {\n  static targets = [\"input\", \"icon\"]\n\n  toggle() {\n    const isHidden = this.inputTarget.type === \"password\"\n    this.inputTarget.type = isHidden ? \"text\" : \"password\"\n\n    if (this.hasIconTarget) {\n      this.iconTarget.classList.toggle(\"fa-eye\")\n      this.iconTarget.classList.toggle(\"fa-eye-slash\")\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport braintree from 'braintree-web'\nimport { loadScript } from \"@paypal/paypal-js\";\n\n// Connects to data-controller=\"payments\"\nexport default class extends Controller {\n  connect() {\n    this.submitting = false\n    this.fetchClientToken()\n  }\n\n  // Only one payment may be submitted per page load. Without this a PayPal\n  // approval and a card submit can both POST and charge the payer twice\n  submitPayment(nonce, type, cardType = '') {\n    if (this.submitting) return\n    this.submitting = true\n    $('#payInvoiceBtn').prop('disabled', true)\n    $('#cover').removeClass('d-none')\n    $('#payment_payment_method_nonce').val(nonce)\n    $('#payment_payment_method_type').val(type)\n    $('#payment_payment_method_card_type').val(cardType)\n    document.getElementById('payment-form').submit()\n  }\n\n  fetchClientToken() {\n    fetch('/paymentsClientToken', { method: 'get', headers: { 'Content-Type': 'application/json;charset=utf-8'} })\n      .then(response => response.json())\n      .then(responseData => this.setupPaymentPage(responseData['client_token']))\n      .catch(err => {})\n  }\n\n  setupPaymentPage(clientToken) {\n    braintree.client.create({\n      authorization: clientToken,\n    }).then(client => {\n      this.setupPaypal(client)\n      this.setupHostedFields(client)\n    });\n  }\n\n  setupPaypal(client) {\n    braintree.paypalCheckout.create({\n      client: client\n    }).then(paypalCheckoutInstance => {\n      paypalCheckoutInstance.loadPayPalSDK({\n        intent: 'capture',\n        locale: $('#paypal-button').data('invoice_locale'),\n        currency: $('#paypal-button').data('invoice_currency'),\n        commit: true,\n        vault: false,\n      },(loadPayPalSDKErr) => {\n          paypal.Buttons({\n            fundingSource: paypal.FUNDING.PAYPAL,\n            // style: {\n            //   layout:  'vertical',\n            //   color:   'blue',\n            //   shape:   'rect',\n            //   label:   'paypal'\n            // },\n            onClick: (data, actions) => {\n              return this.submitting ? actions.reject() : actions.resolve()\n            },\n            createOrder: function () {\n              return paypalCheckoutInstance.createPayment({\n                flow: 'checkout',\n                amount: $('#paypal-button').data('invoice_amount'),\n                currency: $('#paypal-button').data('invoice_currency'),\n                intent: 'capture'\n              });\n            },\n            onApprove: (data) => {\n              return paypalCheckoutInstance.tokenizePayment(data).then(payload => {\n                this.submitPayment(payload.nonce, 'PayPal')\n              });\n            }\n          }).render('#paypal-button');\n      });\n    });\n  }\n\n  setupHostedFields(client) {\n    braintree.hostedFields.create({\n      client: client,\n      styles: {\n        'input': {\n          'font-size': '16pt',\n          'color': '#3A3A3A',\n          'line-height': '50px',\n          'font-family': 'monospace'\n        },\n        ':focus': {\n          'color': 'blue'\n        },\n        '.valid': {\n          'color': 'green'\n        },\n        '.invalid': {\n          'color': 'red'\n        },\n        '@media screen and (max-width: 700px)': {\n          'input': {\n            'font-size': '14pt'\n          }\n        }\n      },\n      fields: {\n        number: {\n          selector: '#card-number',\n          placeholder: 'Card Number',\n          rejectUnsupportedCards: true\n        },\n        cvv: {\n          selector: '#security-code',\n          placeholder: 'CVV'\n        },\n        expirationMonth: {\n          selector: '#expiration-month',\n          placeholder: 'MM'\n        },\n        expirationYear: {\n          selector: '#expiration-year',\n          placeholder: 'YYYY'\n        },\n      }\n    }).then(hostedFields => {\n      hostedFields.on('cardTypeChange', function (event) {\n        if (event.cards.length === 1) {\n          var iconType = document.getElementsByClassName(`icon-type-${event.cards[0].type}`)[0];\n          if (iconType) {\n            iconType.className = `icon icon-type icon-type-${event.cards[0].type}`;\n            if (event.cards[0].type === 'visa') {\n              window.validCard = true;\n              let masterCardIcon = document.getElementsByClassName('icon-type-master-card')[0];\n              let amexCardIcon = document.getElementsByClassName('icon-type-american-express')[0];\n              if (masterCardIcon) {\n                masterCardIcon.className += ' icon-type-master-card-disabled';\n              }\n              if (amexCardIcon) {\n                amexCardIcon.className += ' icon-type-american-express-disabled';\n              }\n            } else if (event.cards[0].type === 'master-card') {\n              window.validCard = true;\n              let visaCardIcon = document.getElementsByClassName('icon-type-visa')[0];\n              let amexCardIcon = document.getElementsByClassName('icon-type-american-express')[0];\n              if (visaCardIcon) {\n                visaCardIcon.className += ' icon-type-visa-disabled';\n              }\n              if (amexCardIcon) {\n                amexCardIcon.className += ' icon-type-american-express-disabled';\n              }\n            } else if (event.cards[0].type === 'american-express') {\n              window.validCard = true;\n              let masterCardIcon = document.getElementsByClassName('icon-type-master-card')[0];\n              let visaCardIcon = document.getElementsByClassName('icon-type-visa')[0];\n              if (masterCardIcon) {\n                masterCardIcon.className += ' icon-type-master-card-disabled';\n              }\n              if (visaCardIcon) {\n                visaCardIcon.className += ' icon-type-visa-disabled';\n              }\n            }\n          } else {\n            window.validCard = false;\n            let masterCardIcon = document.getElementsByClassName('icon-type-master-card')[0];\n            let amexCardIcon = document.getElementsByClassName('icon-type-american-express')[0];\n            let visaCardIcon = document.getElementsByClassName('icon-type-visa')[0];\n            if (masterCardIcon) {\n              masterCardIcon.className += ' icon-type-master-card-disabled';\n            }\n            if (amexCardIcon) {\n              amexCardIcon.className += ' icon-type-american-express-disabled';\n            }\n            if (visaCardIcon) {\n              visaCardIcon.className += ' icon-type-visa-disabled';\n            }\n          }\n        } else {\n          window.validCard = false;\n          let masterCardIcon = document.getElementsByClassName('icon-type-master-card')[0];\n          let amexCardIcon = document.getElementsByClassName('icon-type-american-express')[0];\n          let visaCardIcon = document.getElementsByClassName('icon-type-visa')[0];\n          if (masterCardIcon) {\n            masterCardIcon.className = 'icon icon-type icon-type-master-card';\n          }\n          if (amexCardIcon) {\n            amexCardIcon.className = 'icon icon-type icon-type-american-express';\n          }\n          if (visaCardIcon) {\n            visaCardIcon.className = 'icon icon-type icon-type-visa';\n          }\n        }\n      });\n      hostedFields.on('validityChange', (event) => {\n        var field = event.fields[event.emittedBy];\n\n        if (event.emittedBy === 'number') {\n          if (field.isValid) {\n            window.cardComplete = true;\n          } else {\n            window.cardComplete = false;\n          }\n        } else if (event.emittedBy === 'cvv') {\n          if (field.isValid) {\n            window.cvvComplete = true;\n          } else {\n            window.cvvComplete = false;\n          }\n        } else if (event.emittedBy === 'expirationMonth') {\n          if (field.isValid) {\n            window.expirationMonth = true;\n          } else {\n            window.expirationMonth = false;\n          }\n        } else if (event.emittedBy === 'expirationYear') {\n          if (field.isValid) {\n            window.expirationYear = true;\n          } else {\n            window.expirationYear = false;\n          }\n        }\n        if (!this.submitting && window.validCard && window.cardComplete && window.cvvComplete && window.expirationMonth && window.expirationYear) {\n          $('#payInvoiceBtn').prop('disabled', false);\n        } else {\n          $('#payInvoiceBtn').prop('disabled', true);\n        }\n      });\n      document.getElementById('payInvoiceBtn').addEventListener('click', (event) => {\n        if (this.submitting) return\n        $('#cover').removeClass('d-none');\n        hostedFields.tokenize().then(payload => {\n          this.submitPayment(payload.nonce, 'Credit Card', payload.details.cardType)\n          return true;\n        });\n      }, false);\n    });\n  }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport * as bootstrap from \"bootstrap\"\n\nconst VISIBLE_EVENTS = {\n  0: null, // EMAIL\n  1: null, // PUSH\n  2: ['zone_alarms', 'emergency_alarms'], // SMS\n  3: ['zone_alarms', 'zone_trouble', 'system_troubles', 'emergency_alarms', 'poll_fail'], // VOICE\n  4: ['zone_alarms', 'emergency_alarms'], // EMERGENCY VOICE\n}\n\n// Connects to data-controller=\"personal-reporting\"\nexport default class extends Controller {\n  static values = {\n    clientCountry: String,\n    ruleType: String,\n    ifobUnlimited: Boolean,\n  }\n  static targets = [\n    \"ruleType\", \"editRuleType\",\n    \"deletePersonalReportingRuleModal\",, \"deletePersonalReportingRuleModalType\",\n    \"deletePersonalReportingRuleModalAddress\", \"deletePersonalReportingRuleModalDeleteButton\",\n    \"emailAddress\", \"emailAddressInput\",\n    \"pushDeviceIndex\",\n    \"phoneNumber\", \"smsRuleHelp\", \"voiceRuleHelp\", \"voiceRuleOptions\", \"voiceRuleTroubleOptions\",\n    \"mobilePhoneSpan\", \"phoneSpan\",\n    \"emergencyPhoneNumber\", \"emergencyVoiceCallAddress\",\n    \"phone\", \"mobilePhone\", \"note\", \"submitForm\",\n    \"zonesAdvancedButton\", \"eventRow\",\n    \"alarmVoiceMessage\", \"alarmVoiceMessagePlayer\",\n    \"troubleVoiceMessage\", \"troubleVoiceMessagePlayer\"\n  ]\n\n  connect() {\n    if (this.hasRuleTypeTarget) {\n      this.setupReportingView(1, true)\n      this.ruleTypeTarget.value = 1;\n    }\n  }\n\n  editRuleTypeTargetConnected(target) {\n    var selectedType = 0\n    if (this.ruleTypeValue == 'email') {\n      selectedType = 0\n    } else if (this.ruleTypeValue == 'push') {\n      selectedType = 1\n    } else if (this.ruleTypeValue == 'sms') {\n      selectedType = 2\n    } else if (this.ruleTypeValue == 'voice') {\n      selectedType = 3\n    } else if (this.ruleTypeValue == 'emergency_voice') {\n      selectedType = 4\n    }\n    this.editRuleTypeTarget.value = selectedType\n    this.setupReportingView(selectedType, false)\n  }\n\n  playAlarmVoiceMessage(event) {\n    var data = JSON.stringify({ test_voice: { message: this.alarmVoiceMessageTarget.value }, authenticity_token: document.querySelectorAll('meta[name=\"csrf-token\"]')[0]['content'] })\n    fetch(event.params['alarmEndpoint'], { method: 'post', headers: { 'Content-Type': 'application/json;charset=utf-8'}, body: data})\n      .then(response => response.json())\n      .then(responseData => {\n        this.alarmVoiceMessagePlayerTarget.src = responseData['filename']\n        this.alarmVoiceMessagePlayerTarget.load()\n        this.alarmVoiceMessagePlayerTarget.pause()\n        this.alarmVoiceMessagePlayerTarget.play()\n        this.alarmVoiceMessagePlayerTarget.classList.remove('d-none')\n      })\n      .catch(err => {})\n  }\n\n  playTroubleVoiceMessage(event) {\n    var data = JSON.stringify({ test_voice: { message: this.troubleVoiceMessageTarget.value }, authenticity_token: document.querySelectorAll('meta[name=\"csrf-token\"]')[0]['content'] })\n    fetch(event.params['testEndpoint'], { method: 'post', headers: { 'Content-Type': 'application/json;charset=utf-8'}, body: data})\n      .then(response => response.json())\n      .then(responseData => {\n        this.troubleVoiceMessagePlayerTarget.src = responseData['filename']\n        this.troubleVoiceMessagePlayerTarget.load()\n        this.troubleVoiceMessagePlayerTarget.pause()\n        this.troubleVoiceMessagePlayerTarget.play()\n        this.troubleVoiceMessagePlayerTarget.classList.remove('d-none')\n      })\n      .catch(err => {})\n  }\n\n  resetAlarmVoiceMessage(event) {\n    if (this.hasAlarmVoiceMessageTarget) {\n      this.alarmVoiceMessageTarget.value = event.params['defaultMessage']\n    }\n  }\n\n  resetTroubleVoiceMessage(event) {\n    if (this.hasTroubleVoiceMessageTarget) {\n      this.troubleVoiceMessageTarget.value = event.params['defaultMessage']\n    }\n  }\n\n  deleteRule(event) {\n    if (this.hasDeletePersonalReportingRuleModalTarget) {\n      if (!this.deletePersonalReportingRuleModal) {\n        this.deletePersonalReportingRuleModal = new bootstrap.Modal(this.deletePersonalReportingRuleModalTarget, { keyboard: false });\n      }\n      if (this.deletePersonalReportingRuleModal) {\n        this.deletePersonalReportingRuleModalTypeTarget.innerHTML = event.params['type']\n        this.deletePersonalReportingRuleModalAddressTarget.innerHTML = event.params['address']\n        this.deletePersonalReportingRuleModalDeleteButtonTarget.href = event.params['deleteRoute']\n        this.deletePersonalReportingRuleModal.show()\n      }\n    }\n  }\n\n  changeReportingType(event) {\n    var selectedType = this.getSelectedOption(event)\n    this.setupReportingView(selectedType, true)\n  }\n\n  setupReportingView(selectedType, updateEvents) {\n    if (selectedType == 0) {\n      // EMAIL\n      if (this.hasEmailAddressTarget) {\n        this.emailAddressTarget.classList.remove('d-none')\n        this.emailAddressInputTarget.type = 'email'\n        this.emailAddressInputTarget.required = 'required'\n      }\n      this.resetPushInputs()\n      this.resetSmsInputs()\n      this.resetVoiceInputs()\n      this.resetEmergencyVoiceInputs()\n    } else if (selectedType == 1) {\n      // PUSH\n      this.resetEmailInputs()\n      this.resetSmsInputs()\n      this.resetVoiceInputs()\n      this.resetEmergencyVoiceInputs()\n      if (this.hasPushDeviceIndexTarget) {\n        this.pushDeviceIndexTarget.classList.remove('d-none')\n      }\n    } else if (selectedType == 2) {\n      // SMS\n      this.resetEmailInputs()\n      this.resetPushInputs()\n      this.resetVoiceInputs()\n      this.resetEmergencyVoiceInputs()\n      if (this.hasPhoneNumberTarget) {\n        const otherController = this.application.getControllerForElementAndIdentifier(this.element, 'phone')\n        if (otherController) {\n          otherController.initMobilePhone()\n        }\n        this.mobilePhoneSpanTarget.classList.remove('d-none')\n        this.mobilePhoneTarget.classList.remove('d-none')\n        this.mobilePhoneTarget.required = 'required'\n        this.noteTarget.required = 'required'\n        this.phoneNumberTarget.classList.remove('d-none')\n        this.smsRuleHelpTarget.classList.remove('d-none')\n        if (this.hasSubmitFormTarget) {\n          this.submitFormTarget.disabled = true\n        }\n      }\n    } else if (selectedType == 3) {\n      // VOICE\n      this.resetEmailInputs()\n      this.resetPushInputs()\n      this.resetSmsInputs()\n      this.resetEmergencyVoiceInputs()\n      if (this.hasPhoneNumberTarget) {\n        const otherController = this.application.getControllerForElementAndIdentifier(this.element, 'phone')\n        if (otherController) {\n          otherController.initPhone()\n        }\n        this.phoneSpanTarget.classList.remove('d-none')\n        this.phoneNumberTarget.classList.remove('d-none')\n        this.phoneTarget.classList.remove('d-none')\n        this.noteTarget.required = 'required'\n        if (this.hasVoiceRuleHelpTarget) {\n          this.voiceRuleHelpTarget.classList.remove('d-none')\n          this.voiceRuleOptionsTarget.classList.remove('d-none')\n          this.voiceRuleTroubleOptionsTarget.classList.remove('d-none')\n        }\n        if (this.hasSubmitFormTarget) {\n          this.submitFormTarget.disabled = true\n        }\n      }\n    } else if (selectedType == 4) {\n      // EMERGENCY VOICE\n      this.resetEmailInputs()\n      this.resetPushInputs()\n      this.resetSmsInputs()\n      this.resetVoiceInputs()\n      if (this.hasEmergencyPhoneNumberTarget) {\n        // emergencyPhoneNumber only exists on the add rule page\n        this.emergencyPhoneNumberTarget.classList.remove('d-none')\n      }\n      if (this.hasVoiceRuleHelpTarget) {\n        this.voiceRuleHelpTarget.classList.remove('d-none')\n        this.voiceRuleOptionsTarget.classList.remove('d-none')\n        this.voiceRuleTroubleOptionsTarget.classList.add('d-none')\n      }\n    }\n    if (updateEvents) {\n      this.updateEventChoices(selectedType)\n    }\n  }\n\n  resetEmailInputs() {\n    if (this.hasEmailAddressTarget) {\n      this.emailAddressTarget.classList.add('d-none')\n      this.emailAddressInputTarget.type = 'text'\n      this.emailAddressInputTarget.removeAttribute('required')\n    }\n  }\n\n  resetPushInputs() {\n    if (this.hasPushDeviceIndexTarget) {\n      this.pushDeviceIndexTarget.classList.add('d-none')\n    }\n  }\n\n  resetSmsInputs() {\n    if (this.hasSmsRuleHelpTarget) {\n      const otherController = this.application.getControllerForElementAndIdentifier(this.element, 'phone')\n      if (otherController) {\n        otherController.destroyMobilePhone()\n      }\n      this.mobilePhoneSpanTarget.classList.add('d-none')\n      this.mobilePhoneTarget.classList.add('d-none')\n      this.mobilePhoneTarget.removeAttribute('required')\n      this.noteTarget.removeAttribute('required')\n      this.phoneNumberTarget.classList.add('d-none')\n      this.smsRuleHelpTarget.classList.add('d-none')\n      if (this.hasSubmitFormTarget) {\n        this.submitFormTarget.disabled = false\n      }\n    }\n  }\n\n  resetVoiceInputs() {\n    if (this.hasPhoneNumberTarget) {\n      const otherController = this.application.getControllerForElementAndIdentifier(this.element, 'phone')\n      if (otherController) {\n        otherController.destroyPhone()\n      }\n      this.phoneSpanTarget.classList.add('d-none')\n      this.phoneNumberTarget.classList.add('d-none')\n      this.phoneTarget.classList.add('d-none')\n      this.noteTarget.removeAttribute('required')\n      if (this.hasVoiceRuleHelpTarget) {\n        this.voiceRuleHelpTarget.classList.add('d-none')\n      this.voiceRuleOptionsTarget.classList.add('d-none')\n      }\n      if (this.hasSubmitFormTarget) {\n        this.submitFormTarget.disabled = false\n      }\n    }\n  }\n\n  resetEmergencyVoiceInputs() {\n    if (this.hasEmergencyPhoneNumberTarget) {\n      this.emergencyPhoneNumberTarget.classList.add('d-none')\n      if (this.hasVoiceRuleHelpTarget) {\n        this.voiceRuleHelpTarget.classList.add('d-none')\n        this.voiceRuleOptionsTarget.classList.add('d-none')\n      }\n    }\n  }\n\n  updateEventChoices(selectedType) {\n    if ([0, 1].includes(selectedType)) {\n      // EMAIL, PUSH\n      document.querySelector('input#rule_zone_alarms').checked = true\n      document.querySelector('input#rule_zone_alarms').disabled = false\n      document.querySelector('input#rule_zone_normal').checked = true\n      document.querySelector('input#rule_zone_normal').disabled = false\n      document.querySelector('input#rule_zone_bypass').checked = true\n      document.querySelector('input#rule_zone_bypass').disabled = false\n      document.querySelector('input#rule_zone_trouble').checked = true\n      document.querySelector('input#rule_zone_trouble').disabled = false\n      document.querySelector('input#rule_arm_and_disarm').checked = true\n      document.querySelector('input#rule_arm_and_disarm').disabled = false\n      document.querySelector('input#rule_system_troubles').checked = true\n      document.querySelector('input#rule_system_troubles').disabled = false\n      document.querySelector('input#rule_test_reports').checked = true\n      document.querySelector('input#rule_test_reports').disabled = false\n      document.querySelector('input#rule_emergency_alarms').checked = true\n      document.querySelector('input#rule_emergency_alarms').disabled = false\n      document.querySelector('input#rule_access_events').checked = true\n      document.querySelector('input#rule_access_events').disabled = false\n      if (this.ifobUnlimitedValue) {\n        document.querySelector('input#rule_poll_fail').checked = false\n        document.querySelector('input#rule_poll_fail').disabled = true\n      } else {\n        document.querySelector('input#rule_poll_fail').checked = true\n        document.querySelector('input#rule_poll_fail').disabled = false\n      }\n      this.setRowVisibility(selectedType)\n      if (this.hasZonesAdvancedButtonTarget) {\n        this.zonesAdvancedButtonTarget.rowSpan = '4'\n      }\n    } else if (selectedType == 2) {\n      // SMS\n      document.querySelector('input#rule_zone_alarms').checked = true\n      document.querySelector('input#rule_zone_alarms').disabled = false\n      document.querySelector('input#rule_zone_normal').checked = false\n      document.querySelector('input#rule_zone_normal').disabled = true\n      document.querySelector('input#rule_zone_bypass').checked = false\n      document.querySelector('input#rule_zone_bypass').disabled = true\n      document.querySelector('input#rule_zone_trouble').checked = false\n      document.querySelector('input#rule_zone_trouble').disabled = true\n      document.querySelector('input#rule_arm_and_disarm').checked = false\n      document.querySelector('input#rule_arm_and_disarm').disabled = true\n      document.querySelector('input#rule_system_troubles').checked = false\n      document.querySelector('input#rule_system_troubles').disabled = true\n      document.querySelector('input#rule_test_reports').checked = false\n      document.querySelector('input#rule_test_reports').disabled = true\n      document.querySelector('input#rule_emergency_alarms').checked = true\n      document.querySelector('input#rule_emergency_alarms').disabled = false\n      document.querySelector('input#rule_access_events').checked = false\n      document.querySelector('input#rule_access_events').disabled = true\n      document.querySelector('input#rule_poll_fail').checked = false\n      document.querySelector('input#rule_poll_fail').disabled = true\n      this.setRowVisibility(selectedType)\n      if (this.hasZonesAdvancedButtonTarget) {\n        this.zonesAdvancedButtonTarget.rowSpan = '1'\n      }\n    } else if (selectedType == 3) {\n      // VOICE\n      document.querySelector('input#rule_zone_alarms').checked = true\n      document.querySelector('input#rule_zone_alarms').disabled = false\n      document.querySelector('input#rule_zone_normal').checked = false\n      document.querySelector('input#rule_zone_normal').disabled = true\n      document.querySelector('input#rule_zone_bypass').checked = false\n      document.querySelector('input#rule_zone_bypass').disabled = true\n      document.querySelector('input#rule_zone_trouble').checked = false\n      document.querySelector('input#rule_zone_trouble').disabled = false\n      document.querySelector('input#rule_arm_and_disarm').checked = false\n      document.querySelector('input#rule_arm_and_disarm').disabled = true\n      document.querySelector('input#rule_system_troubles').checked = false\n      document.querySelector('input#rule_system_troubles').disabled = false\n      document.querySelector('input#rule_test_reports').checked = false\n      document.querySelector('input#rule_test_reports').disabled = true\n      document.querySelector('input#rule_emergency_alarms').checked = true\n      document.querySelector('input#rule_emergency_alarms').disabled = false\n      document.querySelector('input#rule_access_events').checked = false\n      document.querySelector('input#rule_access_events').disabled = true\n      document.querySelector('input#rule_poll_fail').checked = false\n      document.querySelector('input#rule_poll_fail').disabled = false\n      this.setRowVisibility(selectedType)\n      if (this.hasZonesAdvancedButtonTarget) {\n        this.zonesAdvancedButtonTarget.rowSpan = '2'\n      }\n    } else if (selectedType == 4) {\n      // EMERGENCY VOICE\n      document.querySelector('input#rule_zone_alarms').checked = true\n      document.querySelector('input#rule_zone_alarms').disabled = false\n      document.querySelector('input#rule_zone_normal').checked = false\n      document.querySelector('input#rule_zone_normal').disabled = true\n      document.querySelector('input#rule_zone_bypass').checked = false\n      document.querySelector('input#rule_zone_bypass').disabled = true\n      document.querySelector('input#rule_zone_trouble').checked = false\n      document.querySelector('input#rule_zone_trouble').disabled = true\n      document.querySelector('input#rule_arm_and_disarm').checked = false\n      document.querySelector('input#rule_arm_and_disarm').disabled = true\n      document.querySelector('input#rule_system_troubles').checked = false\n      document.querySelector('input#rule_system_troubles').disabled = true\n      document.querySelector('input#rule_test_reports').checked = false\n      document.querySelector('input#rule_test_reports').disabled = true\n      document.querySelector('input#rule_emergency_alarms').checked = true\n      document.querySelector('input#rule_emergency_alarms').disabled = false\n      document.querySelector('input#rule_access_events').checked = false\n      document.querySelector('input#rule_access_events').disabled = true\n      document.querySelector('input#rule_poll_fail').checked = false\n      document.querySelector('input#rule_poll_fail').disabled = true\n      this.setRowVisibility(selectedType)\n      if (this.hasZonesAdvancedButtonTarget) {\n        this.zonesAdvancedButtonTarget.rowSpan = '1'\n      }\n    }\n  }\n\n  setRowVisibility(selectedType) {\n    const visible = VISIBLE_EVENTS[selectedType]\n    this.eventRowTargets.forEach(row => {\n      const event = row.dataset.event\n      if (visible == null || visible.includes(event)) {\n        row.classList.remove('d-none')\n      } else {\n        row.classList.add('d-none')\n      }\n    })\n  }\n\n  updateEmergencyVoiceAddress(event) {\n    var newAddress = this.getSelectedOption(event)\n    if (!newAddress.toString().startsWith('+')) {\n      newAddress = '+' + newAddress\n    }\n    this.emergencyVoiceCallAddressTarget.value = newAddress\n  }\n\n  resetFilterRanges(event) {\n    document.querySelectorAll('[resettableText=true]').forEach(element => element.value = '')\n    document.querySelectorAll('[resettableCheckbox=true]').forEach(element => element.checked = true)\n  }\n\n  getSelectedOption(event) {\n    return Number([...event.target.selectedOptions].map(option => option.value)[0])\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport intlTelInput from 'intl-tel-input/intlTelInputWithUtils'\n\n// Connects to data-controller=\"phone\"\nexport default class extends Controller {\n  static values = {\n    clientCountry: String,\n    webServType: String,\n    readOnly: Boolean,\n    contactIdTranslations: Array,\n    callTriggersPhoneNumbers: Object,\n    // Trigger phone number held by the call trigger being edited, 0 on the add page.\n    currentTriggerNumber: Number\n  }\n  static targets = [\n    \"phone\", \"secondaryPhone\", \"mobilePhone\", \"submitForm\",\n    \"editPage\", \"ruleType\",\n    \"primaryDestination\", \"secondaryDestination\", \"contactIdReportingPage\",\n    \"submitUpdateTemplateForm\",\n    \"accountRegistrationPage\", \"accountProfilePage\",\n    \"newCodeModal\",\n    \"callTriggersPage\",\n    \"triggerNumber\",\n    \"triggerNumberSelect\"\n  ]\n  allowedCountries = [\n    \"at\", \"au\", \"nz\", \"it\", \"gr\", \"es\", \"de\", \"nl\", \"se\", \"mt\", \"ch\", \"be\",\n    \"hk\", \"pe\", \"tw\", \"ca\", \"ie\", \"pl\", \"th\", \"cn\", \"il\", \"pt\", \"tr\", \"cy\",\n    \"sg\", \"gb\", \"dk\", \"my\", \"kr\", \"us\", \"fr\", \"mx\", \"za\"\n  ]\n  countryOrder = [\n    \"au\", \"nz\", \"it\", \"gr\"\n  ]\n\n  // initialize() {\n  //   // This is executed for edit call triggers page\n  //   if (this.hasMobilePhoneTarget && this.mobilePhoneTarget.value != '') {\n  //     this.fetchAvailableTriggerNumbers(this.mobilePhoneTarget.value)\n  //   }\n  // }\n\n  accountRegistrationPageTargetConnected(target) {\n    this.initMobilePhone()\n  }\n\n  accountProfilePageTargetConnected(target) {\n    this.initMobilePhone()\n  }\n\n  newCodeModalTargetConnected() {\n    this.initMobilePhone()\n  }\n\n  callTriggersPageTargetConnected() {\n    this.initMobilePhone()\n    // The caller number this trigger is stored with, normalised by the input so\n    // it compares equal to what the field later submits whatever format it was\n    // saved in. Empty when adding a trigger.\n    this.storedCallerNumber = this.hasMobilePhoneTarget && this.mobilePhoneTarget.value\n      ? this.mobilePhoneTargetInput.getNumber()\n      : ''\n  }\n\n  setupAppCodeSmsModal(event) {\n    this.mobilePhoneTargetInput = intlTelInput(this.mobilePhoneTarget, {\n      initialCountry: this.clientCountryValue,\n      onlyCountries: this.allowedCountries,\n      countryOrder: this.countryOrder\n    })\n    this.appCodeSmsSubmit = document.getElementById(event.params['modal']).querySelector('input[type=\"submit\"]')\n  }\n\n  editPageTargetConnected(target) {\n    if (this.hasRuleTypeTarget) {\n      if (this.ruleTypeTarget.value == 2) {\n        this.initMobilePhone()\n      } else if (this.ruleTypeTarget.value == 3 || this.ruleTypeTarget.value == 4) {\n        this.initPhone()\n      }\n    }\n  }\n\n  contactIdReportingPageTargetConnected(target) {\n    this.initContactIdPhones()\n  }\n\n  initPhone() {\n    if (this.hasPhoneTarget) {\n      this.phoneTargetInput = intlTelInput(this.phoneTarget, {\n        initialCountry: this.clientCountryValue,\n        onlyCountries: this.allowedCountries,\n        countryOrder: this.countryOrder\n      });\n    }\n  }\n\n  validateLandlineAndMobile(event) {\n    if (this.hasPhoneTarget) {\n      var validNumberType = this.phoneTargetInput.getNumberType() == intlTelInput.NUMBER_TYPE.MOBILE ||\n                            this.phoneTargetInput.getNumberType() == intlTelInput.NUMBER_TYPE.FIXED_LINE ||\n                            this.phoneTargetInput.getNumberType() == intlTelInput.NUMBER_TYPE.FIXED_LINE_OR_MOBILE\n      if (this.phoneTargetInput.isValidNumber() && validNumberType) {\n        this.phoneTarget.classList.remove('bg-unverified')\n        this.phoneTarget.classList.add('bg-verified')\n        if (this.hasSubmitFormTarget) this.submitFormTarget.disabled = false\n        if (document.getElementById(event.params['inputTarget'])) {\n          document.getElementById(event.params['inputTarget']).value = this.phoneTargetInput.getNumber()\n        }\n      } else {\n        this.phoneTarget.classList.remove('bg-verified')\n        this.phoneTarget.classList.add('bg-unverified')\n        if (this.hasSubmitFormTarget) this.submitFormTarget.disabled = true\n        if (document.getElementById(event.params['inputTarget'])) {\n          document.getElementById(event.params['inputTarget']).value = ''\n        }\n      }\n    }\n  }\n\n  destroyPhone() {\n    if (this.phoneTargetInput) {\n      this.phoneTargetInput.destroy()\n      this.phoneTargetInput = null\n    }\n  }\n\n  initMobilePhone() {\n    if (this.hasMobilePhoneTarget) {\n      this.mobilePhoneTargetInput = intlTelInput(this.mobilePhoneTarget, {\n        initialCountry: this.clientCountryValue,\n        onlyCountries: this.allowedCountries,\n        countryOrder: this.countryOrder\n      })\n    }\n  }\n\n  validateMobilePhone(event) {\n    if (this.hasMobilePhoneTarget) {\n      var validNumberType = this.mobilePhoneTargetInput.getNumberType() == intlTelInput.NUMBER_TYPE.MOBILE ||\n                          this.mobilePhoneTargetInput.getNumberType() == intlTelInput.NUMBER_TYPE.FIXED_LINE\n      if (this.mobilePhoneTargetInput.getSelectedCountry() && this.mobilePhoneTargetInput.getSelectedCountry()['iso2'] == 'us') {\n        // Note that in the US there's no way to differentiate between fixed-line and mobile numbers, so instead it will return FIXED_LINE_OR_MOBILE.\n        // https://github.com/jackocnr/intl-tel-input\n        validNumberType = this.mobilePhoneTargetInput.getNumberType() == intlTelInput.NUMBER_TYPE.FIXED_LINE_OR_MOBILE\n      }\n      if (this.mobilePhoneTargetInput.isValidNumber() && validNumberType) {\n        this.mobilePhoneTarget.classList.remove('bg-unverified')\n        this.mobilePhoneTarget.classList.add('bg-verified')\n        if (this.hasSubmitFormTarget) this.submitFormTarget.disabled = false\n        if (document.getElementById(event.params['inputTarget'])) {\n          document.getElementById(event.params['inputTarget']).value = this.mobilePhoneTargetInput.getNumber();\n        }\n        // If validation is successful, enable trigger number targer\n        // fetch available trigger numbers for the entered mobile phone number\n        this.fetchAvailableTriggerNumbers(document.getElementById(event.params['inputTarget']).value)\n      } else {\n        // If validation fails, disable trigger number target and clear its value\n        if (this.hasTriggerNumberTarget){\n          this.pendingCallerNumber = null\n          this.triggerNumberTarget.disabled = true\n          this.triggerNumberTarget.innerHTML = ''\n        }\n\n        this.mobilePhoneTarget.classList.remove('bg-verified')\n        this.mobilePhoneTarget.classList.add('bg-unverified')\n        if (this.hasSubmitFormTarget) this.submitFormTarget.disabled = true\n        if (document.getElementById(event.params['inputTarget'])) {\n          document.getElementById(event.params['inputTarget']).value = ''\n        }\n      }\n    }\n  }\n\n  validateAppCodeSmsMobilePhone(event) {\n    var validNumberType = this.mobilePhoneTargetInput.getNumberType() == intlTelInput.NUMBER_TYPE.MOBILE ||\n                        this.mobilePhoneTargetInput.getNumberType() == intlTelInput.NUMBER_TYPE.FIXED_LINE\n    if (this.mobilePhoneTargetInput.getSelectedCountry() && this.mobilePhoneTargetInput.getSelectedCountry()['iso2'] == 'us') {\n      // Note that in the US there's no way to differentiate between fixed-line and mobile numbers, so instead it will return FIXED_LINE_OR_MOBILE.\n      // https://github.com/jackocnr/intl-tel-input\n      validNumberType = this.mobilePhoneTargetInput.getNumberType() == intlTelInput.NUMBER_TYPE.FIXED_LINE_OR_MOBILE\n    }\n    if (this.mobilePhoneTargetInput.isValidNumber() && validNumberType) {\n      event.target.classList.remove('bg-unverified')\n      event.target.classList.add('bg-verified')\n      this.appCodeSmsSubmit.disabled = false\n      if (document.getElementById(event.params['inputTarget'])) {\n        document.getElementById(event.params['inputTarget']).value = this.mobilePhoneTargetInput.getNumber()\n      }\n    } else {\n      event.target.classList.remove('bg-verified')\n      event.target.classList.add('bg-unverified')\n      this.appCodeSmsSubmit.disabled = true\n      if (document.getElementById(event.params['inputTarget'])) {\n        document.getElementById(event.params['inputTarget']).value = ''\n      }\n    }\n  }\n\n  destroyMobilePhone() {\n    if (this.mobilePhoneTargetInput) {\n      this.mobilePhoneTargetInput.destroy()\n      this.mobilePhoneTargetInput = null\n    }\n  }\n\n  initContactIdPhones() {\n    var country = 'auto'\n    if (this.hasPrimaryDestinationTarget) {\n      country = this.phoneDestinationCountry(this.hasPrimaryDestinationTarget.value)\n    }\n    this.primaryContactIdPhone = intlTelInput(this.phoneTarget, {\n      initialCountry: country,\n      onlyCountries: ['au', 'nz', 'it', 'gr'],\n      placeholderNumberType: 'FIXED_LINE',\n      allowDropdown: !this.readOnlyValue,\n    })\n    var country = 'auto'\n    if (this.hasSecondaryDestinationTarget) {\n      country = this.phoneDestinationCountry(this.hasSecondaryDestinationTarget.value)\n    }\n    this.secondaryContactIdPhone = intlTelInput(this.secondaryPhoneTarget, {\n      initialCountry: country,\n      onlyCountries: ['au', 'nz', 'it', 'gr'],\n      placeholderNumberType: 'FIXED_LINE',\n      allowDropdown: !this.readOnlyValue,\n    })\n    //this.validateContactIdPhoneNumber(this.phoneTarget, this.primaryDestinationTarget, this.primaryDestinationTarget.value);\n    //this.validateContactIdPhoneNumber(this.secondaryPhoneTarget, this.secondaryDestinationTarget, this.secondaryDestinationTarget.value);\n    //this.refreshFormSubmitAvailability();\n  }\n\n  phoneDestinationCountry(destinationValue) {\n    if (destinationValue == undefined) {\n      return 'auto'\n    }\n    if (this.hasWebServTypeValue) {\n      if (this.webServTypeValue == 'europe_production') {\n        if (destinationValue.startsWith('+39')) {\n          return 'it'\n        } else if (destinationValue.startsWith('+31')) {\n          return 'gr'\n        }\n      } else {\n        if (destinationValue.startsWith('+61')) {\n          return 'au'\n        } else if (destinationValue.startsWith('+64')) {\n          return 'nz'\n        }\n      }\n    }\n    return 'auto'\n  }\n\n  allowedContactIdCountries() {\n    if (this.hasWebServTypeValue) {\n      if (this.webServTypeValue == 'europe_production') {\n        return ['it', 'gr']\n      } else {\n        return ['au', 'nz']\n      }\n    }\n  }\n\n  refreshFormSubmitAvailability() {\n    if (this.phoneTarget.classList.contains('bg-verified') &&\n      this.secondaryPhoneTarget.classList.contains('bg-verified')) {\n      if (this.hasSubmitUpdateTemplateFormTarget) {\n        this.submitUpdateTemplateFormTarget.disabled = false;\n      }\n      this.submitFormTarget.disabled = false;\n    } else {\n      if (this.hasSubmitUpdateTemplateFormTarget) {\n        this.submitUpdateTemplateFormTarget.disabled = true;\n      }\n      this.submitFormTarget.disabled = true;\n    }\n  }\n\n  validateOutgoingContactIdPhoneNumber(event) {\n    var numberEntry = event.target.value\n    var formTarget;\n    if (event.target.dataset['phoneTarget'] == 'phone') {\n      numberEntry = this.primaryContactIdPhone.getNumber()\n      formTarget = this.primaryDestinationTarget;\n    } else if (event.target.dataset['phoneTarget'] == 'secondaryPhone') {\n      numberEntry = this.secondaryContactIdPhone.getNumber()\n      formTarget = this.secondaryDestinationTarget;\n    } else {\n      return false\n    }\n    var result = this.validateContactIdPhoneNumber(event.target, formTarget, numberEntry);\n    this.refreshFormSubmitAvailability();\n    return result;\n  }\n\n  validateContactIdPhoneNumber(visualTarget, formEntryTarget, numberEntry) {\n    const auAreaCodes = ['2', '3', '7', '8']\n    const nzAreaCodes = ['3', '4', '6', '7', '9']\n    const elAreaCodes = ['21', '22', '23', '24', '25', '26', '27', '28']\n    var i = 0;\n    var len = numberEntry.length;\n    var countryCode = '';\n    var areaCode = '';\n    var phoneNumber = '';\n    var result = false;\n    while (i < len) {\n      if (i < 3 && countryCode.length < 2 && !(i == 0 && numberEntry[i] == '+')) {\n        countryCode = countryCode + numberEntry[i];\n      } else if (countryCode == '61') {\n        if (areaCode.length == 0) {\n          areaCode = areaCode + numberEntry[i];\n        } else {\n          phoneNumber = phoneNumber + numberEntry[i];\n          if (phoneNumber.length == 8 && $.inArray(areaCode, auAreaCodes) > -1) {\n            if (!(phoneNumber[0] == '1' && phoneNumber[1] == '3')) {\n              result = true\n            }\n          } else if (phoneNumber.length == 9 && numberEntry[3] == '1' && numberEntry[4] == '3') {\n            result = (this.contactIdTranslationsValue.indexOf(numberEntry) > -1)\n          } else if (phoneNumber.length == 7 && numberEntry[3] == '1' && numberEntry[4] == '3' && numberEntry[5] == '4' && numberEntry[6] == '5') {\n            result = (this.contactIdTranslationsValue.indexOf(numberEntry) > -1)\n          }\n        }\n      } else if (countryCode == '64') {\n        if (areaCode.length == 0) {\n          areaCode = areaCode + numberEntry[i];\n        } else {\n          phoneNumber = phoneNumber + numberEntry[i];\n          if (phoneNumber.length == 7 && $.inArray(areaCode, nzAreaCodes) > -1) {\n            result = true\n          }\n        }\n      } else if (countryCode == '39') {\n        if (areaCode.length < 2) {\n          areaCode = areaCode + numberEntry[i];\n        } else {\n          phoneNumber = phoneNumber + numberEntry[i];\n          if (areaCode.length == 2 && phoneNumber.length >= 5 && phoneNumber.length <= 10) {\n            result = true;\n          }\n        }\n      } else if (countryCode == '30') {\n        if (areaCode.length < 2) {\n          areaCode = areaCode + numberEntry[i];\n        } else {\n          phoneNumber = phoneNumber + numberEntry[i];\n          if (areaCode.length == 2 && phoneNumber.length == 8 && $.inArray(areaCode, elAreaCodes) > -1) {\n            result = true;\n          }\n        }\n      }\n      i++;\n    }\n    if (result) {\n      visualTarget.classList.remove('bg-unverified');\n      visualTarget.classList.add('bg-verified');\n      formEntryTarget.value = numberEntry;\n    } else {\n      visualTarget.classList.remove('bg-verified');\n      visualTarget.classList.add('bg-unverified');\n      formEntryTarget.value = '';\n    }\n    return result;\n  }\n\n  async fetchAvailableTriggerNumbers(callerPhoneNumber) {\n    if (!this.hasTriggerNumberTarget) return\n\n    this.pendingCallerNumber = callerPhoneNumber\n\n    try {\n      const response = await fetch(\n        `/callTriggers/search/${encodeURIComponent(callerPhoneNumber)}`,\n        { headers: { 'Accept': 'application/json' } }\n      )\n      if (this.pendingCallerNumber !== callerPhoneNumber) return\n\n      if (!response.ok) {\n        this.triggerNumberTarget.innerHTML = ''\n        console.error('Failed to fetch available trigger numbers:', response.statusText)\n        return\n      }\n\n      const data = await response.json()\n      if (this.pendingCallerNumber !== callerPhoneNumber) return\n\n      this.populateTriggerNumbers(data.trigger_numbers, callerPhoneNumber)\n    } catch (error) {\n      console.error('Failed to fetch available trigger numbers:', error)\n    }\n  }\n\n  populateTriggerNumbers(triggerNumbers, callerPhoneNumber) {\n    const select = this.triggerNumberTarget\n    const own = this.ownTriggerNumber(callerPhoneNumber)\n    const numbers = own && !triggerNumbers.includes(own)\n      ? [...triggerNumbers, own].sort((a, b) => a - b)\n      : triggerNumbers\n    // Keep the number on show selected, falling back to this trigger's own once\n    // an invalid caller number has emptied the select.\n    const selected = select.value || String(own || '')\n\n    select.innerHTML = ''\n    numbers.forEach(number => {\n      const option = new Option(this.triggerNumberLabel(number), number)\n      option.selected = String(number) === selected\n      select.add(option)\n    })\n    select.disabled = numbers.length === 0\n  }\n\n  // A trigger number is only available when it is not already paired with the\n  // caller, so the search leaves out the one the trigger being edited holds.\n  // Offer that number back while the caller number is still the stored one,\n  // otherwise correcting another field would silently move the trigger off it.\n  // Once the caller number changes it is a different pair, taken by whichever\n  // trigger owns it, so it must not be selectable.\n  ownTriggerNumber(callerPhoneNumber) {\n    if (!this.currentTriggerNumberValue) return null\n    return callerPhoneNumber === this.storedCallerNumber ? this.currentTriggerNumberValue : null\n  }\n\n  // Trigger numbers are shown to the installer as TNxx, keyed by that label in\n  // the phone numbers value.\n  triggerNumberLabel(triggerNumber) {\n    for (const [label, id] of Object.entries(this.callTriggersPhoneNumbersValue)) {\n      if (id == triggerNumber) return label\n    }\n    return String(triggerNumber)\n  }\n\n  getAvailableTriggerNumbers(event) {\n    // remove d-none from form.select.trigger_phone_number\n    if (this.hasTriggerNumberSelectTarget) {\n      this.triggerNumberSelectTarget.classList.remove('d-none')\n    }\n    // add d-none to form.text_field.trigger_phone_number\n    if (this.hasTriggerNumberTarget) {\n      this.triggerNumberTarget.classList.add('d-none')\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"plans\"\nexport default class extends Controller {\n  listPlansPlanSelected(event) {\n    document.querySelectorAll('.accordion-button-white').forEach(element => {\n      if (element.dataset['plansPlanParam'] != event.params['plan']) {\n        if (!element.classList.contains('collapsed')) {\n          element.click()\n        }\n      }\n    })\n  }\n}\n", "// packages/core/src/js/data.ts\nvar rawCountryData = [\n  [\n    \"af\",\n    // Afghanistan\n    \"93\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ax\",\n    // \u00C5land Islands (AKA Aland Islands)\n    \"358\",\n    1,\n    [\"18\", \"4\", \"50\"],\n    // (4 and 50 are mobile ranges shared with FI)\n    // NOTE: https://en.wikipedia.org/wiki/Telephone%20numbers%20in%20%C3%85land says some 4XXX ranges (e.g. 4570) are specific to AX, but LPN doesn't respect this (https://libphonenumber.appspot.com/phonenumberparser?number=%2B3584570123456 says region=FI) so we won't either. Also it's too much of a maintenance burden to keep track of. Keep the 4 area code range here so that if the user selects AX and types this kind of number, we wont change the flag to FI. Whereas if they type a FI-only range then we will.\n    \"0\"\n  ],\n  [\n    \"al\",\n    // Albania\n    \"355\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"dz\",\n    // Algeria\n    \"213\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"as\",\n    // American Samoa\n    \"1\",\n    5,\n    [\"684\"],\n    \"1\"\n  ],\n  [\n    \"ad\",\n    // Andorra\n    \"376\"\n  ],\n  [\n    \"ao\",\n    // Angola\n    \"244\"\n  ],\n  [\n    \"ai\",\n    // Anguilla\n    \"1\",\n    6,\n    [\"264\"],\n    \"1\"\n  ],\n  [\n    \"ag\",\n    // Antigua and Barbuda\n    \"1\",\n    7,\n    [\"268\"],\n    \"1\"\n  ],\n  [\n    \"ar\",\n    // Argentina\n    \"54\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"am\",\n    // Armenia\n    \"374\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"aw\",\n    // Aruba\n    \"297\"\n  ],\n  [\n    \"ac\",\n    // Ascension Island\n    \"247\"\n  ],\n  [\n    \"au\",\n    // Australia\n    \"61\",\n    0,\n    [\"4\"],\n    // (mobile range shared with CX and CC)\n    \"0\"\n  ],\n  [\n    \"at\",\n    // Austria\n    \"43\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"az\",\n    // Azerbaijan\n    \"994\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"bs\",\n    // Bahamas\n    \"1\",\n    8,\n    [\"242\"],\n    \"1\"\n  ],\n  [\n    \"bh\",\n    // Bahrain\n    \"973\"\n  ],\n  [\n    \"bd\",\n    // Bangladesh\n    \"880\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"bb\",\n    // Barbados\n    \"1\",\n    9,\n    [\"246\"],\n    \"1\"\n  ],\n  [\n    \"by\",\n    // Belarus\n    \"375\",\n    0,\n    null,\n    \"8\"\n  ],\n  [\n    \"be\",\n    // Belgium\n    \"32\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"bz\",\n    // Belize\n    \"501\"\n  ],\n  [\n    \"bj\",\n    // Benin\n    \"229\"\n  ],\n  [\n    \"bm\",\n    // Bermuda\n    \"1\",\n    10,\n    [\"441\"],\n    \"1\"\n  ],\n  [\n    \"bt\",\n    // Bhutan\n    \"975\"\n  ],\n  [\n    \"bo\",\n    // Bolivia\n    \"591\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ba\",\n    // Bosnia and Herzegovina\n    \"387\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"bw\",\n    // Botswana\n    \"267\"\n  ],\n  [\n    \"br\",\n    // Brazil\n    \"55\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"io\",\n    // British Indian Ocean Territory\n    \"246\"\n  ],\n  [\n    \"vg\",\n    // British Virgin Islands\n    \"1\",\n    11,\n    [\"284\"],\n    \"1\"\n  ],\n  [\n    \"bn\",\n    // Brunei\n    \"673\"\n  ],\n  [\n    \"bg\",\n    // Bulgaria\n    \"359\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"bf\",\n    // Burkina Faso\n    \"226\"\n  ],\n  [\n    \"bi\",\n    // Burundi\n    \"257\"\n  ],\n  [\n    \"kh\",\n    // Cambodia\n    \"855\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"cm\",\n    // Cameroon\n    \"237\"\n  ],\n  [\n    \"ca\",\n    // Canada\n    \"1\",\n    1,\n    [\n      \"204\",\n      \"226\",\n      \"236\",\n      \"249\",\n      \"250\",\n      \"257\",\n      \"263\",\n      \"289\",\n      \"306\",\n      \"343\",\n      \"354\",\n      \"365\",\n      \"367\",\n      \"368\",\n      \"382\",\n      \"403\",\n      \"416\",\n      \"418\",\n      \"428\",\n      \"431\",\n      \"437\",\n      \"438\",\n      \"450\",\n      \"468\",\n      \"474\",\n      \"506\",\n      \"514\",\n      \"519\",\n      \"548\",\n      \"579\",\n      \"581\",\n      \"584\",\n      \"587\",\n      \"604\",\n      \"613\",\n      \"639\",\n      \"647\",\n      \"672\",\n      \"683\",\n      \"705\",\n      \"709\",\n      \"742\",\n      \"753\",\n      \"778\",\n      \"780\",\n      \"782\",\n      \"807\",\n      \"819\",\n      \"825\",\n      \"867\",\n      \"873\",\n      \"879\",\n      \"902\",\n      \"905\",\n      \"942\"\n    ],\n    \"1\"\n  ],\n  [\n    \"cv\",\n    // Cape Verde\n    \"238\"\n  ],\n  [\n    \"bq\",\n    // Caribbean Netherlands\n    \"599\",\n    1,\n    [\"3\", \"4\", \"7\"]\n  ],\n  [\n    \"ky\",\n    // Cayman Islands\n    \"1\",\n    12,\n    [\"345\"],\n    \"1\"\n  ],\n  [\n    \"cf\",\n    // Central African Republic\n    \"236\"\n  ],\n  [\n    \"td\",\n    // Chad\n    \"235\"\n  ],\n  [\n    \"cl\",\n    // Chile\n    \"56\"\n  ],\n  [\n    \"cn\",\n    // China\n    \"86\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"cx\",\n    // Christmas Island\n    \"61\",\n    2,\n    [\"4\", \"89164\"],\n    // (4 is a mobile range shared with AU and CC)\n    \"0\"\n  ],\n  [\n    \"cc\",\n    // Cocos (Keeling) Islands\n    \"61\",\n    1,\n    [\"4\", \"89162\"],\n    // (4 is a mobile range shared with AU and CX)\n    \"0\"\n  ],\n  [\n    \"co\",\n    // Colombia\n    \"57\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"km\",\n    // Comoros\n    \"269\"\n  ],\n  [\n    \"cg\",\n    // Congo (Brazzaville)\n    \"242\"\n  ],\n  [\n    \"cd\",\n    // Congo (Kinshasa)\n    \"243\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ck\",\n    // Cook Islands\n    \"682\"\n  ],\n  [\n    \"cr\",\n    // Costa Rica\n    \"506\"\n  ],\n  [\n    \"ci\",\n    // C\u00F4te d'Ivoire\n    \"225\"\n  ],\n  [\n    \"hr\",\n    // Croatia\n    \"385\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"cu\",\n    // Cuba\n    \"53\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"cw\",\n    // Cura\u00E7ao\n    \"599\",\n    0\n  ],\n  [\n    \"cy\",\n    // Cyprus\n    \"357\"\n  ],\n  [\n    \"cz\",\n    // Czech Republic\n    \"420\"\n  ],\n  [\n    \"dk\",\n    // Denmark\n    \"45\"\n  ],\n  [\n    \"dj\",\n    // Djibouti\n    \"253\"\n  ],\n  [\n    \"dm\",\n    // Dominica\n    \"1\",\n    13,\n    [\"767\"],\n    \"1\"\n  ],\n  [\n    \"do\",\n    // Dominican Republic\n    \"1\",\n    2,\n    [\"809\", \"829\", \"849\"],\n    \"1\"\n  ],\n  [\n    \"ec\",\n    // Ecuador\n    \"593\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"eg\",\n    // Egypt\n    \"20\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"sv\",\n    // El Salvador\n    \"503\"\n  ],\n  [\n    \"gq\",\n    // Equatorial Guinea\n    \"240\"\n  ],\n  [\n    \"er\",\n    // Eritrea\n    \"291\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ee\",\n    // Estonia\n    \"372\"\n  ],\n  [\n    \"sz\",\n    // Eswatini\n    \"268\"\n  ],\n  [\n    \"et\",\n    // Ethiopia\n    \"251\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"fk\",\n    // Falkland Islands (Malvinas)\n    \"500\"\n  ],\n  [\n    \"fo\",\n    // Faroe Islands\n    \"298\"\n  ],\n  [\n    \"fj\",\n    // Fiji\n    \"679\"\n  ],\n  [\n    \"fi\",\n    // Finland\n    \"358\",\n    0,\n    [\"4\", \"50\"],\n    // (mobile ranges shared with AX)\n    \"0\"\n  ],\n  [\n    \"fr\",\n    // France\n    \"33\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"gf\",\n    // French Guiana\n    \"594\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"pf\",\n    // French Polynesia\n    \"689\"\n  ],\n  [\n    \"ga\",\n    // Gabon\n    \"241\"\n  ],\n  [\n    \"gm\",\n    // Gambia\n    \"220\"\n  ],\n  [\n    \"ge\",\n    // Georgia\n    \"995\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"de\",\n    // Germany\n    \"49\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"gh\",\n    // Ghana\n    \"233\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"gi\",\n    // Gibraltar\n    \"350\"\n  ],\n  [\n    \"gr\",\n    // Greece\n    \"30\"\n  ],\n  [\n    \"gl\",\n    // Greenland\n    \"299\"\n  ],\n  [\n    \"gd\",\n    // Grenada\n    \"1\",\n    14,\n    [\"473\"],\n    \"1\"\n  ],\n  [\n    \"gp\",\n    // Guadeloupe\n    \"590\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"gu\",\n    // Guam\n    \"1\",\n    15,\n    [\"671\"],\n    \"1\"\n  ],\n  [\n    \"gt\",\n    // Guatemala\n    \"502\"\n  ],\n  [\n    \"gg\",\n    // Guernsey\n    \"44\",\n    1,\n    //* Only 79111 and 79117 belong to GG - the rest of 7911 is GB (e.g. 79110).\n    [\"1481\", \"7781\", \"7839\", \"79111\", \"79117\"],\n    \"0\"\n  ],\n  [\n    \"gn\",\n    // Guinea\n    \"224\"\n  ],\n  [\n    \"gw\",\n    // Guinea-Bissau\n    \"245\"\n  ],\n  [\n    \"gy\",\n    // Guyana\n    \"592\"\n  ],\n  [\n    \"ht\",\n    // Haiti\n    \"509\"\n  ],\n  [\n    \"hn\",\n    // Honduras\n    \"504\"\n  ],\n  [\n    \"hk\",\n    // Hong Kong SAR China\n    \"852\"\n  ],\n  [\n    \"hu\",\n    // Hungary\n    \"36\",\n    0,\n    null,\n    \"06\"\n  ],\n  [\n    \"is\",\n    // Iceland\n    \"354\"\n  ],\n  [\n    \"in\",\n    // India\n    \"91\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"id\",\n    // Indonesia\n    \"62\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ir\",\n    // Iran\n    \"98\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"iq\",\n    // Iraq\n    \"964\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ie\",\n    // Ireland\n    \"353\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"im\",\n    // Isle of Man\n    \"44\",\n    2,\n    [\"1624\", \"74576\", \"7524\", \"7624\", \"7924\"],\n    \"0\"\n  ],\n  [\n    \"il\",\n    // Israel\n    \"972\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"it\",\n    // Italy\n    \"39\",\n    0,\n    [\"3\"]\n    // (mobile range shared with VA)\n  ],\n  [\n    \"jm\",\n    // Jamaica\n    \"1\",\n    4,\n    [\"658\", \"876\"],\n    \"1\"\n  ],\n  [\n    \"jp\",\n    // Japan\n    \"81\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"je\",\n    // Jersey\n    \"44\",\n    3,\n    //* Only 77003/77007/77008 belong to JE - the rest of 7700 is GB (e.g. 77001).\n    [\"1534\", \"7509\", \"77003\", \"77007\", \"77008\", \"7797\", \"7829\", \"7937\"],\n    \"0\"\n  ],\n  [\n    \"jo\",\n    // Jordan\n    \"962\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"kz\",\n    // Kazakhstan\n    \"7\",\n    1,\n    [\"33\", \"7\"],\n    // (33 is shared with RU)\n    \"8\"\n  ],\n  [\n    \"ke\",\n    // Kenya\n    \"254\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ki\",\n    // Kiribati\n    \"686\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"xk\",\n    // Kosovo\n    \"383\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"kw\",\n    // Kuwait\n    \"965\"\n  ],\n  [\n    \"kg\",\n    // Kyrgyzstan\n    \"996\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"la\",\n    // Laos\n    \"856\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"lv\",\n    // Latvia\n    \"371\"\n  ],\n  [\n    \"lb\",\n    // Lebanon\n    \"961\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ls\",\n    // Lesotho\n    \"266\"\n  ],\n  [\n    \"lr\",\n    // Liberia\n    \"231\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ly\",\n    // Libya\n    \"218\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"li\",\n    // Liechtenstein\n    \"423\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"lt\",\n    // Lithuania\n    \"370\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"lu\",\n    // Luxembourg\n    \"352\"\n  ],\n  [\n    \"mo\",\n    // Macao SAR China\n    \"853\"\n  ],\n  [\n    \"mg\",\n    // Madagascar\n    \"261\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"mw\",\n    // Malawi\n    \"265\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"my\",\n    // Malaysia\n    \"60\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"mv\",\n    // Maldives\n    \"960\"\n  ],\n  [\n    \"ml\",\n    // Mali\n    \"223\"\n  ],\n  [\n    \"mt\",\n    // Malta\n    \"356\"\n  ],\n  [\n    \"mh\",\n    // Marshall Islands\n    \"692\",\n    0,\n    null,\n    \"1\"\n  ],\n  [\n    \"mq\",\n    // Martinique\n    \"596\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"mr\",\n    // Mauritania\n    \"222\"\n  ],\n  [\n    \"mu\",\n    // Mauritius\n    \"230\"\n  ],\n  [\n    \"yt\",\n    // Mayotte\n    \"262\",\n    1,\n    [\"2689\", \"269\", \"639\", \"7093\"],\n    \"0\"\n  ],\n  [\n    \"mx\",\n    // Mexico\n    \"52\"\n  ],\n  [\n    \"fm\",\n    // Micronesia\n    \"691\"\n  ],\n  [\n    \"md\",\n    // Moldova\n    \"373\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"mc\",\n    // Monaco\n    \"377\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"mn\",\n    // Mongolia\n    \"976\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"me\",\n    // Montenegro\n    \"382\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ms\",\n    // Montserrat\n    \"1\",\n    16,\n    [\"664\"],\n    \"1\"\n  ],\n  [\n    \"ma\",\n    // Morocco\n    \"212\",\n    0,\n    [\"6\", \"7\"],\n    // (mobile ranges shared with EH)\n    \"0\"\n  ],\n  [\n    \"mz\",\n    // Mozambique\n    \"258\"\n  ],\n  [\n    \"mm\",\n    // Myanmar (Burma)\n    \"95\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"na\",\n    // Namibia\n    \"264\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"nr\",\n    // Nauru\n    \"674\"\n  ],\n  [\n    \"np\",\n    // Nepal\n    \"977\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"nl\",\n    // Netherlands\n    \"31\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"nc\",\n    // New Caledonia\n    \"687\"\n  ],\n  [\n    \"nz\",\n    // New Zealand\n    \"64\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ni\",\n    // Nicaragua\n    \"505\"\n  ],\n  [\n    \"ne\",\n    // Niger\n    \"227\"\n  ],\n  [\n    \"ng\",\n    // Nigeria\n    \"234\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"nu\",\n    // Niue\n    \"683\"\n  ],\n  [\n    \"nf\",\n    // Norfolk Island\n    \"672\"\n  ],\n  [\n    \"kp\",\n    // North Korea\n    \"850\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"mk\",\n    // North Macedonia\n    \"389\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"mp\",\n    // Northern Mariana Islands\n    \"1\",\n    17,\n    [\"670\"],\n    \"1\"\n  ],\n  [\n    \"no\",\n    // Norway\n    \"47\",\n    0,\n    [\"4\", \"9\"]\n    // (mobile ranges shared with SJ)\n  ],\n  [\n    \"om\",\n    // Oman\n    \"968\"\n  ],\n  [\n    \"pk\",\n    // Pakistan\n    \"92\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"pw\",\n    // Palau\n    \"680\"\n  ],\n  [\n    \"ps\",\n    // Palestinian Territories\n    \"970\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"pa\",\n    // Panama\n    \"507\"\n  ],\n  [\n    \"pg\",\n    // Papua New Guinea\n    \"675\"\n  ],\n  [\n    \"py\",\n    // Paraguay\n    \"595\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"pe\",\n    // Peru\n    \"51\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ph\",\n    // Philippines\n    \"63\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"pl\",\n    // Poland\n    \"48\"\n  ],\n  [\n    \"pt\",\n    // Portugal\n    \"351\"\n  ],\n  [\n    \"pr\",\n    // Puerto Rico\n    \"1\",\n    3,\n    [\"787\", \"939\"],\n    \"1\"\n  ],\n  [\n    \"qa\",\n    // Qatar\n    \"974\"\n  ],\n  [\n    \"re\",\n    // R\u00E9union\n    \"262\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ro\",\n    // Romania\n    \"40\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ru\",\n    // Russia\n    \"7\",\n    0,\n    [\"33\"],\n    // (shared with KZ)\n    \"8\"\n  ],\n  [\n    \"rw\",\n    // Rwanda\n    \"250\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ws\",\n    // Samoa\n    \"685\"\n  ],\n  [\n    \"sm\",\n    // San Marino\n    \"378\"\n  ],\n  [\n    \"st\",\n    // S\u00E3o Tom\u00E9 & Pr\u00EDncipe\n    \"239\"\n  ],\n  [\n    \"sa\",\n    // Saudi Arabia\n    \"966\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"sn\",\n    // Senegal\n    \"221\"\n  ],\n  [\n    \"rs\",\n    // Serbia\n    \"381\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"sc\",\n    // Seychelles\n    \"248\"\n  ],\n  [\n    \"sl\",\n    // Sierra Leone\n    \"232\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"sg\",\n    // Singapore\n    \"65\"\n  ],\n  [\n    \"sx\",\n    // Sint Maarten\n    \"1\",\n    21,\n    [\"721\"],\n    \"1\"\n  ],\n  [\n    \"sk\",\n    // Slovakia\n    \"421\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"si\",\n    // Slovenia\n    \"386\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"sb\",\n    // Solomon Islands\n    \"677\"\n  ],\n  [\n    \"so\",\n    // Somalia\n    \"252\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"za\",\n    // South Africa\n    \"27\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"kr\",\n    // South Korea\n    \"82\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ss\",\n    // South Sudan\n    \"211\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"es\",\n    // Spain\n    \"34\"\n  ],\n  [\n    \"lk\",\n    // Sri Lanka\n    \"94\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"bl\",\n    // St. Barth\u00E9lemy\n    \"590\",\n    1,\n    null,\n    \"0\"\n  ],\n  [\n    \"sh\",\n    // St. Helena\n    \"290\"\n  ],\n  [\n    \"kn\",\n    // St. Kitts & Nevis\n    \"1\",\n    18,\n    [\"869\"],\n    \"1\"\n  ],\n  [\n    \"lc\",\n    // St. Lucia\n    \"1\",\n    19,\n    [\"758\"],\n    \"1\"\n  ],\n  [\n    \"mf\",\n    // St. Martin\n    \"590\",\n    2,\n    null,\n    \"0\"\n  ],\n  [\n    \"pm\",\n    // St. Pierre & Miquelon\n    \"508\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"vc\",\n    // St. Vincent & Grenadines\n    \"1\",\n    20,\n    [\"784\"],\n    \"1\"\n  ],\n  [\n    \"sd\",\n    // Sudan\n    \"249\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"sr\",\n    // Suriname\n    \"597\"\n  ],\n  [\n    \"sj\",\n    // Svalbard & Jan Mayen\n    \"47\",\n    1,\n    [\"4\", \"79\", \"9\"]\n    // (4 and 9 are mobile ranges shared with NO)\n  ],\n  [\n    \"se\",\n    // Sweden\n    \"46\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ch\",\n    // Switzerland\n    \"41\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"sy\",\n    // Syria\n    \"963\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"tw\",\n    // Taiwan\n    \"886\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"tj\",\n    // Tajikistan\n    \"992\"\n  ],\n  [\n    \"tz\",\n    // Tanzania\n    \"255\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"th\",\n    // Thailand\n    \"66\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"tl\",\n    // Timor-Leste\n    \"670\"\n  ],\n  [\n    \"tg\",\n    // Togo\n    \"228\"\n  ],\n  [\n    \"tk\",\n    // Tokelau\n    \"690\"\n  ],\n  [\n    \"to\",\n    // Tonga\n    \"676\"\n  ],\n  [\n    \"tt\",\n    // Trinidad & Tobago\n    \"1\",\n    22,\n    [\"868\"],\n    \"1\"\n  ],\n  [\n    \"tn\",\n    // Tunisia\n    \"216\"\n  ],\n  [\n    \"tr\",\n    // Turkey\n    \"90\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"tm\",\n    // Turkmenistan\n    \"993\",\n    0,\n    null,\n    \"8\"\n  ],\n  [\n    \"tc\",\n    // Turks & Caicos Islands\n    \"1\",\n    23,\n    [\"649\"],\n    \"1\"\n  ],\n  [\n    \"tv\",\n    // Tuvalu\n    \"688\"\n  ],\n  [\n    \"vi\",\n    // U.S. Virgin Islands\n    \"1\",\n    24,\n    [\"340\"],\n    \"1\"\n  ],\n  [\n    \"ug\",\n    // Uganda\n    \"256\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ua\",\n    // Ukraine\n    \"380\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"ae\",\n    // United Arab Emirates\n    \"971\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"gb\",\n    // United Kingdom\n    \"44\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"us\",\n    // United States\n    \"1\",\n    0,\n    null,\n    \"1\"\n  ],\n  [\n    \"uy\",\n    // Uruguay\n    \"598\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"uz\",\n    // Uzbekistan\n    \"998\"\n  ],\n  [\n    \"vu\",\n    // Vanuatu\n    \"678\"\n  ],\n  [\n    \"va\",\n    // Vatican City\n    \"39\",\n    1,\n    [\"06698\", \"3\"]\n    // (3 is a mobile range shared with IT)\n  ],\n  [\n    \"ve\",\n    // Venezuela\n    \"58\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"vn\",\n    // Vietnam\n    \"84\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"wf\",\n    // Wallis & Futuna\n    \"681\"\n  ],\n  [\n    \"eh\",\n    // Western Sahara\n    \"212\",\n    1,\n    [\"5288\", \"5289\", \"6\", \"7\"],\n    // (6 and 7 are mobile ranges shared with MA)\n    \"0\"\n  ],\n  [\n    \"ye\",\n    // Yemen\n    \"967\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"zm\",\n    // Zambia\n    \"260\",\n    0,\n    null,\n    \"0\"\n  ],\n  [\n    \"zw\",\n    // Zimbabwe\n    \"263\",\n    0,\n    null,\n    \"0\"\n  ]\n];\nvar allCountries = [];\nfor (const c of rawCountryData) {\n  allCountries.push({\n    name: \"\",\n    // populated in the core library\n    iso2: c[0],\n    dialCode: c[1],\n    priority: c[2] || 0,\n    areaCodes: c[3] || null,\n    nationalPrefix: c[4] || null\n  });\n}\nvar iso2Set = new Set(allCountries.map((c) => c.iso2));\nvar isIso2 = (val) => iso2Set.has(val);\nvar data_default = allCountries;\n\n// packages/core/src/js/constants.ts\nvar EVENTS = {\n  OPEN_COUNTRY_SELECTOR: \"open:countryselector\",\n  CLOSE_COUNTRY_SELECTOR: \"close:countryselector\",\n  COUNTRY_CHANGE: \"countrychange\",\n  INPUT: \"input\",\n  // used for synthetic input trigger\n  STRICT_REJECT: \"strict:reject\"\n};\nvar ITI_SLOTS = [\n  \"container\",\n  \"input\",\n  \"countryContainer\",\n  \"selectedCountry\",\n  \"selectedCountryPrimary\",\n  \"selectedFlag\",\n  \"arrow\",\n  \"selectedDialCode\",\n  \"countrySelector\",\n  \"countrySelectorContainer\",\n  \"searchWrapper\",\n  \"searchIcon\",\n  \"searchInput\",\n  \"searchClear\",\n  \"countryList\",\n  \"countryListItem\",\n  \"countryListItemFlag\",\n  \"countryName\",\n  \"dialCode\",\n  \"countryCheck\",\n  \"noResults\"\n];\nvar CLASSES = {\n  HIDE: \"iti__hide\",\n  V_HIDE: \"iti__v-hide\",\n  ARROW_UP: \"iti__arrow--up\",\n  GLOBE: \"iti__globe\",\n  FLAG: \"iti__flag\",\n  LOADING: \"iti__loading\",\n  COUNTRY_ITEM: \"iti__country\",\n  HIGHLIGHT: \"iti__highlight\",\n  STRICT_REJECT_ANIMATION: \"iti__strict-reject-animation\"\n};\nvar KEYS = {\n  ARROW_UP: \"ArrowUp\",\n  ARROW_DOWN: \"ArrowDown\",\n  SPACE: \" \",\n  ENTER: \"Enter\",\n  ESC: \"Escape\",\n  TAB: \"Tab\"\n};\nvar INPUT_TYPES = {\n  PASTE: \"insertFromPaste\",\n  DELETE_FORWARD: \"deleteContentForward\"\n};\nvar REGEX = {\n  ALPHA_UNICODE: /\\p{L}/u,\n  // any kind of letter from any language\n  NON_PLUS_NUMERIC: /[^+0-9]/,\n  // chars that are NOT + or digit\n  NON_PLUS_NUMERIC_GLOBAL: /[^+0-9]/g,\n  // chars that are NOT + or digit (global)\n  HIDDEN_SEARCH_CHAR: /^[a-zA-Z\u00C0-\u00FF\u0430-\u044F\u0410-\u042F ]$/\n  // single acceptable hidden-search char\n};\nvar TIMINGS = {\n  SEARCH_DEBOUNCE_MS: 100,\n  HIDDEN_SEARCH_RESET_MS: 1e3,\n  NEXT_TICK: 0\n};\nvar LAYOUT = {\n  NARROW_VIEWPORT_WIDTH: 500,\n  // keep in sync with .iti__country-list CSS media query\n  FALLBACK_SELECTED_COUNTRY_WITH_DIAL_WIDTH: 78,\n  // px width fallback when separateDialCode enabled\n  FALLBACK_SELECTED_COUNTRY_NO_DIAL_WIDTH: 42,\n  // px width fallback when no separate dial code\n  INPUT_PADDING_EXTRA_LEFT: 6,\n  // px gap between selected country container and input text\n  DROPDOWN_MARGIN: 3,\n  // px margin between dropdown and tel input\n  FALLBACK_DROPDOWN_HEIGHT: 200\n  // px height fallback for dropdown\n};\nvar DIAL_CODE = {\n  PLUS: \"+\",\n  NANP: \"1\"\n  // North American Numbering Plan\n};\nvar E164_MAX_DIGITS = 15;\nvar UK = {\n  ISO2: \"gb\",\n  DIAL_CODE: \"44\",\n  // +44 United Kingdom\n  MOBILE_PREFIX: \"7\",\n  // UK mobile numbers start with 7 after national trunk (0) or core section\n  MOBILE_CORE_LENGTH: 10\n  // core number length (excluding dial code / national prefix) for mobiles\n};\nvar US = {\n  ISO2: \"us\",\n  DIAL_CODE: \"1\"\n  // +1 United States\n};\nvar PLACEHOLDER_POLICY = {\n  AGGRESSIVE: \"AGGRESSIVE\",\n  POLITE: \"POLITE\",\n  OFF: \"OFF\"\n};\nvar COUNTRY_SELECTOR_MODES = [\n  \"OFF\",\n  \"DROPDOWN\",\n  \"FULLSCREEN\",\n  \"AUTO\"\n];\nvar NUMBER_FORMATS = [\n  \"E164\",\n  \"INTERNATIONAL\",\n  \"NATIONAL\",\n  \"RFC3966\"\n];\nvar NUMBER_TYPES = [\n  \"FIXED_LINE\",\n  \"MOBILE\",\n  \"FIXED_LINE_OR_MOBILE\",\n  \"TOLL_FREE\",\n  \"PREMIUM_RATE\",\n  \"SHARED_COST\",\n  \"VOIP\",\n  \"PERSONAL_NUMBER\",\n  \"PAGER\",\n  \"UAN\",\n  \"VOICEMAIL\",\n  \"UNKNOWN\"\n];\nvar VALIDATION_ERRORS = [\n  \"IS_POSSIBLE\",\n  \"INVALID_COUNTRY_CODE\",\n  \"TOO_SHORT\",\n  \"TOO_LONG\",\n  \"IS_POSSIBLE_LOCAL_ONLY\",\n  \"INVALID_LENGTH\"\n];\nvar toEnumObject = (arr) => Object.fromEntries(arr.map((v) => [v, v]));\nvar NUMBER_FORMAT = toEnumObject(NUMBER_FORMATS);\nvar NUMBER_TYPE = toEnumObject(NUMBER_TYPES);\nvar VALIDATION_ERROR = toEnumObject(VALIDATION_ERRORS);\nvar COUNTRY_SELECTOR_MODE = toEnumObject(COUNTRY_SELECTOR_MODES);\nvar DATA_KEYS = {\n  // e.g. <li data-iso2=\"us\"> for country items in the country list\n  ISO2: \"iso2\",\n  DIAL_CODE: \"dialCode\",\n  // e.g. <input data-intl-tel-input-id=\"0\"> on the input element\n  INSTANCE_ID: \"intlTelInputId\"\n};\nvar ARIA = {\n  EXPANDED: \"aria-expanded\",\n  LABEL: \"aria-label\",\n  SELECTED: \"aria-selected\",\n  ACTIVE_DESCENDANT: \"aria-activedescendant\",\n  HASPOPUP: \"aria-haspopup\",\n  CONTROLS: \"aria-controls\",\n  HIDDEN: \"aria-hidden\",\n  AUTOCOMPLETE: \"aria-autocomplete\",\n  MODAL: \"aria-modal\"\n};\n\n// packages/core/src/js/locale/en.ts\nvar interfaceTranslations = {\n  selectedCountryAriaLabel: \"Change country for phone number, currently selected ${countryName} (${dialCode})\",\n  noCountrySelected: \"Select country for phone number\",\n  countryListAriaLabel: \"List of countries\",\n  searchPlaceholder: \"Search\",\n  clearSearchAriaLabel: \"Clear search\",\n  searchEmptyState: \"No results found\",\n  searchSummaryAria(count) {\n    if (count === 0) {\n      return \"No results found\";\n    }\n    if (count === 1) {\n      return \"1 result found\";\n    }\n    return `${count} results found`;\n  }\n};\nvar en_default = interfaceTranslations;\n\n// packages/core/src/js/core/options.ts\nvar mediaQuery = (q) => typeof window !== \"undefined\" && typeof window.matchMedia === \"function\" && window.matchMedia(q).matches;\nvar isNarrowViewport = () => mediaQuery(`(max-width: ${LAYOUT.NARROW_VIEWPORT_WIDTH}px)`);\nvar resolveAutoCountrySelectorMode = () => {\n  if (typeof navigator !== \"undefined\" && typeof window !== \"undefined\") {\n    const isShortViewport = mediaQuery(\"(max-height: 600px)\");\n    const isCoarsePointer = mediaQuery(\"(pointer: coarse)\");\n    if (isNarrowViewport() || isCoarsePointer && isShortViewport) {\n      return COUNTRY_SELECTOR_MODE.FULLSCREEN;\n    }\n  }\n  return COUNTRY_SELECTOR_MODE.DROPDOWN;\n};\nvar defaults = {\n  //* How the country selector is displayed. \"DROPDOWN\" vs \"FULLSCREEN\", or \"AUTO\" to decide itself, or \"OFF\".\n  countrySelectorMode: COUNTRY_SELECTOR_MODE.AUTO,\n  //* The number type to enforce during validation.\n  allowedNumberTypes: [NUMBER_TYPE.MOBILE, NUMBER_TYPE.FIXED_LINE],\n  //* Whether or not to allow extensions after the main number.\n  allowNumberExtensions: false,\n  // Allow alphanumeric \"phonewords\" (e.g. +1 800 FLOWERS) as valid numbers\n  allowPhonewords: false,\n  //* Add custom classes to the elements we generate, keyed by slot name e.g. { selectedCountry: \"rounded-l-lg\" }.\n  classNames: {},\n  //* Add a custom class to the (injected) container element.\n  containerClass: \"\",\n  //* Locale for localising country names via Intl.DisplayNames.\n  countryNameLocale: \"en\",\n  //* Override individual country names by iso2 code.\n  countryNameOverrides: {},\n  //* The order of the countries in the country list. Defaults to alphabetical.\n  countryOrder: null,\n  //* Add a country search input at the top of the country selector.\n  countrySearch: true,\n  //* Modify the auto placeholder.\n  customPlaceholder: null,\n  //* Always show the dropdown\n  dropdownAlwaysOpen: false,\n  //* Optional DOM element to append the dropdown to (used to escape ancestors with overflow:hidden, or to mount in a custom container). Only consulted in dropdown rendering; ignored when the country selector renders as a fullscreen popup.\n  dropdownParent: null,\n  //* Don't display these countries.\n  excludeCountries: null,\n  //* Fix the dropdown width to the input width (rather than being as wide as the longest country name).\n  matchDropdownWidth: true,\n  //* Format the number as the user types\n  formatAsYouType: true,\n  //* Inject hidden inputs with the names returned from this function, and on submit, populate them with the full number and selected country iso2.\n  hiddenInputs: null,\n  //* Translations for the core library UI strings e.g. search input placeholder, country names.\n  uiTranslations: {},\n  //* Initial country.\n  initialCountry: \"\",\n  //* Async lookup function used to determine the initial country (e.g. via IP). Ignored if initialCountry is set.\n  initialCountryLookup: null,\n  //* A function to load the utils script.\n  loadUtils: null,\n  //* Format used when displaying numbers (placeholder examples and stored values). One of \"E164\", \"INTERNATIONAL\", \"NATIONAL\".\n  numberDisplayFormat: NUMBER_FORMAT.INTERNATIONAL,\n  //* Display only these countries.\n  onlyCountries: null,\n  //* When to set the placeholder to an example number for the selected country: \"POLITE\" only when the input has no manually-set placeholder, \"AGGRESSIVE\" always, \"OFF\" never.\n  placeholderNumberPolicy: PLACEHOLDER_POLICY.POLITE,\n  //* Number type to use for placeholders.\n  placeholderNumberType: NUMBER_TYPE.MOBILE,\n  //* Add custom classes to the search input element.\n  searchInputClass: \"\",\n  //* Display the international dial code next to the selected flag.\n  separateDialCode: true,\n  //* When strictMode rejects a key (etc), play a short feedback animation\n  strictRejectAnimation: true,\n  //* Show flags - for both the selected country, and in the country list\n  showFlags: true,\n  //* Only allow certain chars e.g. a plus followed by numeric digits, and cap at max valid length.\n  strictMode: true\n};\nvar toString = (val) => JSON.stringify(val);\nvar isPlainObject = (val) => Boolean(val) && typeof val === \"object\" && !Array.isArray(val);\nvar isFunction = (val) => typeof val === \"function\";\nvar isElLike = (val) => {\n  if (!val || typeof val !== \"object\") {\n    return false;\n  }\n  const v = val;\n  return v.nodeType === 1 && typeof v.tagName === \"string\" && typeof v.appendChild === \"function\";\n};\nvar placeholderPolicySet = new Set(Object.values(PLACEHOLDER_POLICY));\nvar slotSet = new Set(ITI_SLOTS);\nvar warn = (message) => {\n  console.warn(`[intl-tel-input] ${message}`);\n};\nvar warnOption = (optionName, expectedType, actualValue) => {\n  warn(\n    `Option '${optionName}' must be ${expectedType}; got ${toString(actualValue)}. Ignoring.`\n  );\n};\nvar validateIso2Array = (key, value) => {\n  const expectedType = \"an array of iso2 country code strings\";\n  if (!Array.isArray(value)) {\n    warnOption(key, expectedType, value);\n    return false;\n  }\n  const valid = [];\n  for (const v of value) {\n    if (typeof v !== \"string\") {\n      warnOption(key, expectedType, value);\n      return false;\n    }\n    const lower = v.toLowerCase();\n    if (!isIso2(lower)) {\n      warn(`Invalid iso2 code in '${key}': '${v}'. Skipping.`);\n    } else {\n      valid.push(v);\n    }\n  }\n  return valid;\n};\nvar validateOptions = (customOptions) => {\n  if (customOptions === void 0) {\n    return {};\n  }\n  if (!isPlainObject(customOptions)) {\n    const error = `The second argument must be an options object; got ${toString(customOptions)}. Using defaults.`;\n    warn(error);\n    return {};\n  }\n  const validatedOptions = {};\n  for (const [key, value] of Object.entries(customOptions)) {\n    if (!Object.hasOwn(defaults, key)) {\n      warn(`Unknown option '${key}'. Ignoring.`);\n      continue;\n    }\n    switch (key) {\n      case \"allowNumberExtensions\":\n      case \"allowPhonewords\":\n      case \"countrySearch\":\n      case \"dropdownAlwaysOpen\":\n      case \"matchDropdownWidth\":\n      case \"formatAsYouType\":\n      case \"showFlags\":\n      case \"separateDialCode\":\n      case \"strictMode\":\n      case \"strictRejectAnimation\":\n        if (typeof value !== \"boolean\") {\n          warnOption(key, \"a boolean\", value);\n          break;\n        }\n        validatedOptions[key] = value;\n        break;\n      case \"countrySelectorMode\":\n        if (typeof value !== \"string\" || !COUNTRY_SELECTOR_MODES.includes(value)) {\n          warnOption(\n            \"countrySelectorMode\",\n            `one of ${COUNTRY_SELECTOR_MODES.map((m) => `\"${m}\"`).join(\", \")}`,\n            value\n          );\n          break;\n        }\n        validatedOptions[key] = value;\n        break;\n      case \"numberDisplayFormat\":\n        if (typeof value !== \"string\" || value === NUMBER_FORMAT.RFC3966 || !(value === NUMBER_FORMAT.E164 || value === NUMBER_FORMAT.INTERNATIONAL || value === NUMBER_FORMAT.NATIONAL)) {\n          warnOption(\n            \"numberDisplayFormat\",\n            'one of \"E164\", \"INTERNATIONAL\", \"NATIONAL\"',\n            value\n          );\n          break;\n        }\n        validatedOptions[key] = value;\n        break;\n      case \"placeholderNumberPolicy\":\n        if (typeof value !== \"string\" || !placeholderPolicySet.has(value)) {\n          const validPolicies = Array.from(placeholderPolicySet).join(\", \");\n          warnOption(\"placeholderNumberPolicy\", `one of ${validPolicies}`, value);\n          break;\n        }\n        validatedOptions[key] = value;\n        break;\n      case \"containerClass\":\n      case \"searchInputClass\":\n      case \"countryNameLocale\":\n        if (typeof value !== \"string\") {\n          warnOption(key, \"a string\", value);\n          break;\n        }\n        validatedOptions[key] = value;\n        break;\n      case \"classNames\": {\n        if (!isPlainObject(value)) {\n          warnOption(\"classNames\", \"an object\", value);\n          break;\n        }\n        const validSlots = {};\n        for (const [slot, slotValue] of Object.entries(value)) {\n          if (!slotSet.has(slot)) {\n            warn(\n              `Unknown slot '${slot}' in 'classNames'. Valid slots: ${ITI_SLOTS.join(\", \")}. Skipping.`\n            );\n          } else if (typeof slotValue !== \"string\") {\n            warnOption(`classNames.${slot}`, \"a string\", slotValue);\n          } else {\n            validSlots[slot] = slotValue.trim().replace(/\\s+/g, \" \");\n          }\n        }\n        validatedOptions[key] = validSlots;\n        break;\n      }\n      case \"countryOrder\": {\n        if (value === null) {\n          validatedOptions[key] = value;\n        } else {\n          const filtered = validateIso2Array(key, value);\n          if (filtered !== false) {\n            validatedOptions[key] = filtered;\n          }\n        }\n        break;\n      }\n      case \"customPlaceholder\":\n      case \"hiddenInputs\":\n      case \"initialCountryLookup\":\n      case \"loadUtils\":\n        if (value !== null && !isFunction(value)) {\n          warnOption(key, \"a function or null\", value);\n          break;\n        }\n        validatedOptions[key] = value;\n        break;\n      case \"dropdownParent\":\n        if (value !== null && !isElLike(value)) {\n          warnOption(\"dropdownParent\", \"an HTMLElement or null\", value);\n          break;\n        }\n        validatedOptions[key] = value;\n        break;\n      case \"excludeCountries\":\n      case \"onlyCountries\": {\n        if (value === null) {\n          validatedOptions[key] = value;\n        } else {\n          const filtered = validateIso2Array(key, value);\n          if (filtered !== false) {\n            validatedOptions[key] = filtered;\n          }\n        }\n        break;\n      }\n      case \"uiTranslations\":\n        if (value && !isPlainObject(value)) {\n          warnOption(\"uiTranslations\", \"an object\", value);\n          break;\n        }\n        validatedOptions[key] = value;\n        break;\n      case \"countryNameOverrides\":\n        if (value && !isPlainObject(value)) {\n          warnOption(\"countryNameOverrides\", \"an object\", value);\n          break;\n        }\n        validatedOptions[key] = value;\n        break;\n      case \"initialCountry\": {\n        if (typeof value !== \"string\") {\n          warnOption(\"initialCountry\", \"a string\", value);\n          break;\n        }\n        const lower = value.toLowerCase();\n        if (lower && !isIso2(lower)) {\n          warnOption(\"initialCountry\", \"a valid iso2 country code\", value);\n          break;\n        }\n        validatedOptions[key] = value;\n        break;\n      }\n      case \"placeholderNumberType\":\n        if (typeof value !== \"string\" || !NUMBER_TYPES.includes(value)) {\n          const validTypes = NUMBER_TYPES.join(\", \");\n          warnOption(\"placeholderNumberType\", `one of ${validTypes}`, value);\n          break;\n        }\n        validatedOptions[key] = value;\n        break;\n      case \"allowedNumberTypes\":\n        if (value !== null) {\n          if (!Array.isArray(value)) {\n            warnOption(\n              \"allowedNumberTypes\",\n              \"an array of number types or null\",\n              value\n            );\n            break;\n          }\n          let allValid = true;\n          for (const v of value) {\n            if (typeof v !== \"string\" || !NUMBER_TYPES.includes(v)) {\n              const validTypes = NUMBER_TYPES.join(\", \");\n              warnOption(\n                \"allowedNumberTypes\",\n                `an array of valid number types (${validTypes})`,\n                v\n              );\n              allValid = false;\n              break;\n            }\n          }\n          if (allValid) {\n            validatedOptions[key] = value;\n          }\n        } else {\n          validatedOptions[key] = null;\n        }\n        break;\n    }\n  }\n  return validatedOptions;\n};\nvar normaliseOptions = (o) => {\n  if (o.initialCountry) {\n    o.initialCountry = o.initialCountry.toLowerCase();\n  }\n  if (o.onlyCountries?.length) {\n    o.onlyCountries = o.onlyCountries.map((c) => c.toLowerCase());\n  }\n  if (o.excludeCountries?.length) {\n    o.excludeCountries = o.excludeCountries.map((c) => c.toLowerCase());\n  }\n  if (o.countryOrder) {\n    o.countryOrder = o.countryOrder.map((c) => c.toLowerCase());\n  }\n};\nvar applyOptionSideEffects = (o) => {\n  if (o.countrySelectorMode === COUNTRY_SELECTOR_MODE.AUTO) {\n    o.countrySelectorMode = resolveAutoCountrySelectorMode();\n  }\n  if (o.dropdownAlwaysOpen) {\n    o.countrySelectorMode = COUNTRY_SELECTOR_MODE.DROPDOWN;\n  }\n  if (o.countrySelectorMode === COUNTRY_SELECTOR_MODE.FULLSCREEN) {\n    o.matchDropdownWidth = false;\n  } else {\n    if (isNarrowViewport()) {\n      o.matchDropdownWidth = true;\n    }\n  }\n  if (o.onlyCountries?.length === 1) {\n    o.initialCountry = o.onlyCountries[0];\n  }\n  if (o.separateDialCode && o.numberDisplayFormat === NUMBER_FORMAT.NATIONAL) {\n    o.numberDisplayFormat = NUMBER_FORMAT.INTERNATIONAL;\n  }\n  if (o.countrySelectorMode !== COUNTRY_SELECTOR_MODE.OFF && !o.showFlags && !o.separateDialCode && o.numberDisplayFormat === NUMBER_FORMAT.NATIONAL) {\n    o.numberDisplayFormat = NUMBER_FORMAT.INTERNATIONAL;\n  }\n  o.uiTranslations = { ...en_default, ...o.uiTranslations };\n};\n\n// packages/core/src/js/helpers/string.ts\nvar getNumeric = (s) => s.replace(/\\D/g, \"\");\nvar normaliseString = (s = \"\") => s.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\").toLowerCase();\n\n// packages/core/src/js/helpers/dom.ts\nvar buildClassNames = (flags) => Object.keys(flags).filter((k) => Boolean(flags[k])).join(\" \");\nvar createEl = (tagName, attrs, container) => {\n  const el = document.createElement(tagName);\n  if (attrs) {\n    Object.entries(attrs).forEach(\n      ([key, value]) => el.setAttribute(key, value)\n    );\n  }\n  if (container) {\n    container.appendChild(el);\n  }\n  return el;\n};\n\n// packages/core/src/js/core/icons.ts\nvar SVG_NS = \"http://www.w3.org/2000/svg\";\nvar buildSvg = ([tag, attrs, children]) => {\n  const el = document.createElementNS(SVG_NS, tag);\n  if (attrs) {\n    for (const k in attrs) {\n      el.setAttribute(k, String(attrs[k]));\n    }\n  }\n  if (children) {\n    for (const c of children) {\n      el.appendChild(buildSvg(c));\n    }\n  }\n  return el;\n};\nvar buildSearchIcon = () => buildSvg(\n  [\"svg\", { class: \"iti__search-icon-svg\", width: 14, height: 14, viewBox: \"0 0 24 24\", focusable: \"false\", [ARIA.HIDDEN]: \"true\" }, [\n    [\"circle\", { cx: 11, cy: 11, r: 7 }],\n    [\"line\", { x1: 21, y1: 21, x2: 16.65, y2: 16.65 }]\n  ]]\n);\nvar buildClearIcon = (id) => {\n  const maskId = `iti-${id}-clear-mask`;\n  return buildSvg(\n    [\"svg\", { class: \"iti__search-clear-svg\", width: 12, height: 12, viewBox: \"0 0 16 16\", [ARIA.HIDDEN]: \"true\", focusable: \"false\" }, [\n      [\"mask\", { id: maskId, maskUnits: \"userSpaceOnUse\" }, [\n        [\"rect\", { width: 16, height: 16, fill: \"white\" }],\n        [\"path\", { d: \"M5.2 5.2 L10.8 10.8 M10.8 5.2 L5.2 10.8\", stroke: \"black\", \"stroke-linecap\": \"round\", class: \"iti__search-clear-x\" }]\n      ]],\n      [\"circle\", { cx: 8, cy: 8, r: 8, class: \"iti__search-clear-bg\", mask: `url(#${maskId})` }]\n    ]]\n  );\n};\nvar buildCheckIcon = () => buildSvg(\n  [\"svg\", { class: \"iti__country-check-svg\", width: 14, height: 14, viewBox: \"0 0 16 16\", fill: \"currentColor\", focusable: \"false\", [ARIA.HIDDEN]: \"true\" }, [\n    [\"path\", { d: \"M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-3.97-3.03a.75.75 0 0 0-1.08.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-.01-1.05z\" }]\n  ]]\n);\nvar buildGlobeIcon = () => buildSvg(\n  [\"svg\", { width: 256, height: 256, viewBox: \"0 0 512 512\", class: \"iti__globe-svg\" }, [\n    [\"path\", { d: \"M508 213a240 240 0 0 0-449-87l-2 5-2 5c-8 14-13 30-17 46a65 65 0 0 1 56 4c16-10 35-19 56-27l9-3c-6 23-10 48-10 74h-16l4 6c3 4 5 8 6 13h6c0 22 3 44 8 65l2 10-25-10-4 5 12 18 9 3 6 2 8 3 9 26 1 2 16-7h1l-5-13-1-2c24 6 49 9 75 10v26l11 10 7 7v-30l1-13c22 0 44-3 65-8l10-2-21 48-1 1a317 317 0 0 1-14 23l-21 5h-2c6 16 7 33 1 50a240 240 0 0 0 211-265m-401-56-11 6c19-44 54-79 98-98-11 20-21 44-29 69-21 6-40 15-58 23m154 182v4c-29-1-57-6-81-13-7-25-12-52-13-81h94zm0-109h-94c1-29 6-56 13-81 24-7 52-12 81-13zm0-112c-22 1-44 4-65 8l-10 2 12-30 9-17 1-2a332 332 0 0 1 13-23c13-4 26-6 40-7zm187 69 6 4c4 12 6 25 6 38v1h-68c-1-26-4-51-10-74l48 20 1 1 14 8zm-14-44 10 20c-20-11-43-21-68-29-8-25-18-49-29-69 37 16 67 44 87 78M279 49h1c13 1 27 3 39 7l14 23 1 2a343 343 0 0 1 12 26l2 5 6 16c-23-6-48-9-74-10h-1zm0 87h1c29 1 56 6 81 13 7 24 12 51 12 80v1h-94zm2 207h-2v-94h95c-1 29-6 56-13 81-24 7-51 12-80 13m86 60-20 10c11-20 21-43 29-68 25-8 48-18 68-29-16 37-43 67-77 87m87-115-7 5-16 9-2 1a337 337 0 0 1-47 21c6-24 9-49 10-75h68c0 13-2 27-6 39\" }],\n    [\"path\", { d: \"m261 428-2-2-22-21a40 40 0 0 0-32-11h-1a37 37 0 0 0-18 8l-1 1-4 2-2 2-5 4c-9-3-36-31-47-44s-32-45-34-55l3-2a151 151 0 0 0 11-9v-1a39 39 0 0 0 5-48l-3-3-11-19-3-4-5-7h-1l-3-3-4-3-5-2a35 35 0 0 0-16-3h-5c-4 1-14 5-24 11l-4 2-4 3-4 2c-9 8-17 17-18 27a380 380 0 0 0 212 259h3c12 0 25-10 36-21l10-12 6-11a39 39 0 0 0-8-40\" }]\n  ]]\n);\n\n// packages/core/src/js/core/countrySearch.ts\nvar normaliseName = (s) => normaliseString(s).replace(/[^\\p{L}]+/gu, \" \").trim();\nvar buildSearchTokens = (countries) => {\n  const tokens = /* @__PURE__ */ new Map();\n  for (const c of countries) {\n    const normalisedName = normaliseName(c.name);\n    const words = normalisedName.split(\" \").filter(Boolean);\n    const initials = words.map((w) => w[0] || \"\").join(\"\");\n    tokens.set(c.iso2, {\n      normalisedName,\n      words,\n      initials,\n      dialCodePlus: `+${c.dialCode}`\n    });\n  }\n  return tokens;\n};\nvar getMatchedCountries = (countries, searchTokens, query) => {\n  const lowerQuery = normaliseString(query);\n  const nameQuery = normaliseName(query);\n  const skipNameBuckets = lowerQuery !== \"\" && nameQuery === \"\";\n  const iso2Matches = [];\n  const nameStartsWith = [];\n  const nameContains = [];\n  const dialCodeMatches = [];\n  const dialCodeContains = [];\n  const initialsMatches = [];\n  const wordMatches = [];\n  for (const c of countries) {\n    const t = searchTokens.get(c.iso2);\n    if (c.iso2 === lowerQuery) {\n      iso2Matches.push(c);\n    } else if (!skipNameBuckets && t.normalisedName.startsWith(nameQuery)) {\n      nameStartsWith.push(c);\n    } else if (!skipNameBuckets && t.normalisedName.includes(nameQuery)) {\n      nameContains.push(c);\n    } else if (lowerQuery === c.dialCode || lowerQuery === t.dialCodePlus) {\n      dialCodeMatches.push(c);\n    } else if (t.dialCodePlus.includes(lowerQuery)) {\n      dialCodeContains.push(c);\n    } else if (t.initials.includes(lowerQuery)) {\n      initialsMatches.push(c);\n    }\n  }\n  const queryWords = nameQuery.split(\" \").filter(Boolean);\n  if (queryWords.length > 1 && iso2Matches.length === 0 && nameStartsWith.length === 0 && nameContains.length === 0) {\n    const claimed = /* @__PURE__ */ new Set([\n      ...dialCodeMatches.map((c) => c.iso2),\n      ...dialCodeContains.map((c) => c.iso2),\n      ...initialsMatches.map((c) => c.iso2)\n    ]);\n    for (const c of countries) {\n      if (claimed.has(c.iso2)) {\n        continue;\n      }\n      const t = searchTokens.get(c.iso2);\n      if (queryWords.some((qw) => t.words.some((sw) => sw.startsWith(qw)))) {\n        wordMatches.push(c);\n      }\n    }\n  }\n  const sortByPriority = (a, b) => a.priority - b.priority;\n  return [\n    ...iso2Matches,\n    ...nameStartsWith,\n    ...nameContains,\n    // priority sort is only relevant when showing multiple countries with the same dial code (that's what the priority field is used to distinguish between)\n    ...dialCodeMatches.sort(sortByPriority),\n    ...dialCodeContains.sort(sortByPriority),\n    ...initialsMatches,\n    ...wordMatches\n  ];\n};\nvar findFirstCountryStartingWith = (countries, searchTokens, query) => {\n  const nameQuery = normaliseName(query);\n  for (const c of countries) {\n    const { normalisedName } = searchTokens.get(c.iso2);\n    if (normalisedName.startsWith(nameQuery)) {\n      return c;\n    }\n  }\n  return null;\n};\n\n// packages/core/src/js/core/numerals.ts\nvar Numerals = class _Numerals {\n  #userNumeralSet;\n  //* Stateless conversion of any Arabic-Indic / Persian digits to ASCII 0-9.\n  //* Use this when you need to normalise digits without affecting any instance's tracked numeral set (e.g. for the country-search query).\n  static toAscii(str) {\n    if (!str) {\n      return \"\";\n    }\n    return str.replace(\n      /[\u0660-\u0669]/g,\n      (ch) => String.fromCharCode(48 + (ch.charCodeAt(0) - 1632))\n    ).replace(\n      /[\u06F0-\u06F9]/g,\n      (ch) => String.fromCharCode(48 + (ch.charCodeAt(0) - 1776))\n    );\n  }\n  constructor(initialValue) {\n    if (initialValue) {\n      this.#updateNumeralSet(initialValue);\n    }\n  }\n  // If any Arabic-Indic digits, then label it as that set. Same for Persian. Otherwise assume ASCII.\n  #updateNumeralSet(str) {\n    if (/[\u0660-\u0669]/.test(str)) {\n      this.#userNumeralSet = \"arabic-indic\";\n    } else if (/[\u06F0-\u06F9]/.test(str)) {\n      this.#userNumeralSet = \"persian\";\n    } else {\n      this.#userNumeralSet = \"ascii\";\n    }\n  }\n  // Denormalise ASCII 0-9 to the user's numeral set. If not yet known, return as-is.\n  // NOTE: normalise is always called before this, so it should be impossible for the numeral set to be unknown at this point.\n  denormalise(str) {\n    if (!this.#userNumeralSet || this.#userNumeralSet === \"ascii\") {\n      return str;\n    }\n    const base = this.#userNumeralSet === \"arabic-indic\" ? 1632 : 1776;\n    return str.replace(/[0-9]/g, (d) => String.fromCharCode(base + Number(d)));\n  }\n  // Normalize Eastern Arabic (U+0660-0669) and Persian/Extended Arabic-Indic (U+06F0-06F9) numerals to ASCII 0-9.\n  // Tracks the user's numeral set as a side effect so denormalise can mirror it back.\n  normalise(str) {\n    if (!str) {\n      return \"\";\n    }\n    this.#updateNumeralSet(str);\n    if (this.#userNumeralSet === \"ascii\") {\n      return str;\n    }\n    return _Numerals.toAscii(str);\n  }\n  isAscii() {\n    return !this.#userNumeralSet || this.#userNumeralSet === \"ascii\";\n  }\n};\n\n// packages/core/src/js/core/ui.ts\nvar supportsCssAnchor = typeof CSS !== \"undefined\" && typeof CSS.supports === \"function\" && CSS.supports(\"anchor-name: --x\");\nvar UI = class {\n  // private\n  #options;\n  #id;\n  #isRTL;\n  #originalPaddingLeft = \"\";\n  #countries;\n  #searchTokens;\n  #searchDebounceTimer = null;\n  #inlineDropdownHeight;\n  #cssAnchorPositioningDone = false;\n  #countryContainerEl;\n  #selectedCountryEl;\n  #selectedFlagEl;\n  #selectedDialCodeEl;\n  #arrowEl;\n  #countrySelectorEl;\n  #searchIconEl;\n  #searchInputEl;\n  #searchClearButtonEl;\n  #countryListEl;\n  #hiddenInputPhoneEl;\n  #hiddenInputCountryEl;\n  #noResultsMessageEl;\n  #searchResultsLiveRegionEl;\n  #detachedCountrySelectorEl;\n  #selectedListItemEl = null;\n  #highlightedListItemEl = null;\n  #listItemByIso2 = /* @__PURE__ */ new Map();\n  #countrySelectorAbortController = null;\n  #resizeObserver;\n  // public\n  telInputEl;\n  hadInitialPlaceholder;\n  constructor(input, options, id) {\n    input.dataset[DATA_KEYS.INSTANCE_ID] = id.toString();\n    this.telInputEl = input;\n    this.#options = options;\n    this.#id = id;\n    this.hadInitialPlaceholder = Boolean(input.getAttribute(\"placeholder\"));\n    this.#isRTL = !!this.telInputEl.closest(\"[dir=rtl]\");\n    this.#originalPaddingLeft = this.telInputEl.style.paddingLeft;\n  }\n  // Validate that the provided element is an HTMLInputElement.\n  static validateInput(input) {\n    const tagName = input?.tagName;\n    const isInputEl = Boolean(input) && typeof input === \"object\" && tagName === \"INPUT\" && typeof input.setAttribute === \"function\";\n    if (!isInputEl) {\n      const type = Object.prototype.toString.call(input);\n      throw new TypeError(\n        `The first argument must be an HTMLInputElement, not ${type}`\n      );\n    }\n  }\n  //* Append any consumer-supplied classes (via the classNames option) for the given slot to our own classes for that element.\n  #withSlotClass(slot, ourClasses) {\n    const custom = this.#options.classNames[slot];\n    return custom ? `${ourClasses} ${custom}` : ourClasses;\n  }\n  //* Generate all of the markup for the core library: the selected country overlay, and the country selector.\n  buildMarkup(countries, searchTokens) {\n    this.#countries = countries;\n    this.#searchTokens = searchTokens;\n    this.telInputEl.classList.add(\n      ...this.#withSlotClass(\"input\", \"iti__tel-input\").split(\" \")\n    );\n    if (!this.telInputEl.hasAttribute(\"type\")) {\n      this.telInputEl.setAttribute(\"type\", \"tel\");\n    }\n    if (!this.telInputEl.hasAttribute(\"autocomplete\")) {\n      this.telInputEl.setAttribute(\"autocomplete\", \"tel\");\n    }\n    if (!this.telInputEl.hasAttribute(\"inputmode\")) {\n      this.telInputEl.setAttribute(\"inputmode\", \"tel\");\n    }\n    const wrapper = this.#createWrapperAndInsert();\n    this.#buildCountryContainer(wrapper);\n    wrapper.appendChild(this.telInputEl);\n    this.#updateInputPaddingAndReveal();\n    this.#observeSelectedCountryResize();\n    this.#buildHiddenInputs(wrapper);\n    this.ensureDropdownWidthSet();\n  }\n  #createWrapperAndInsert() {\n    const { countrySelectorMode, showFlags, containerClass } = this.#options;\n    const parentClasses = buildClassNames({\n      iti: true,\n      \"iti--input-container\": true,\n      \"iti--has-country-selector\": countrySelectorMode !== COUNTRY_SELECTOR_MODE.OFF,\n      \"iti--show-flags\": showFlags,\n      \"iti--inline-country-selector\": countrySelectorMode !== COUNTRY_SELECTOR_MODE.FULLSCREEN,\n      [containerClass]: Boolean(containerClass)\n    });\n    const wrapper = createEl(\"div\", {\n      class: this.#withSlotClass(\"container\", parentClasses)\n    });\n    if (this.#isRTL) {\n      wrapper.setAttribute(\"dir\", \"ltr\");\n    }\n    this.telInputEl.before(wrapper);\n    return wrapper;\n  }\n  #buildCountryContainer(wrapper) {\n    const { countrySelectorMode, separateDialCode, showFlags } = this.#options;\n    const enableCountrySelector = countrySelectorMode !== COUNTRY_SELECTOR_MODE.OFF;\n    if (!enableCountrySelector && !showFlags && !separateDialCode) {\n      return;\n    }\n    this.#countryContainerEl = createEl(\n      \"div\",\n      // visibly hidden until we measure its width to set the input padding correctly\n      {\n        class: this.#withSlotClass(\n          \"countryContainer\",\n          `iti__country-container ${CLASSES.V_HIDE}`\n        )\n      },\n      wrapper\n    );\n    if (enableCountrySelector) {\n      this.#selectedCountryEl = createEl(\n        \"button\",\n        {\n          type: \"button\",\n          class: this.#withSlotClass(\"selectedCountry\", \"iti__selected-country\"),\n          [ARIA.EXPANDED]: \"false\",\n          [ARIA.LABEL]: this.#options.uiTranslations.noCountrySelected,\n          [ARIA.HASPOPUP]: \"dialog\",\n          [ARIA.CONTROLS]: `iti-${this.#id}__country-selector`\n        },\n        this.#countryContainerEl\n      );\n      if (this.telInputEl.disabled) {\n        this.#selectedCountryEl.setAttribute(\"disabled\", \"true\");\n      }\n    } else {\n      this.#selectedCountryEl = createEl(\n        \"div\",\n        { class: this.#withSlotClass(\"selectedCountry\", \"iti__selected-country\") },\n        this.#countryContainerEl\n      );\n    }\n    const selectedCountryPrimary = createEl(\n      \"div\",\n      {\n        class: this.#withSlotClass(\n          \"selectedCountryPrimary\",\n          \"iti__selected-country-primary\"\n        )\n      },\n      this.#selectedCountryEl\n    );\n    this.#selectedFlagEl = createEl(\n      \"div\",\n      { class: this.#withSlotClass(\"selectedFlag\", CLASSES.FLAG) },\n      selectedCountryPrimary\n    );\n    if (enableCountrySelector) {\n      this.#arrowEl = createEl(\n        \"div\",\n        {\n          class: this.#withSlotClass(\"arrow\", \"iti__arrow\"),\n          [ARIA.HIDDEN]: \"true\"\n        },\n        selectedCountryPrimary\n      );\n    }\n    if (separateDialCode) {\n      this.#selectedDialCodeEl = createEl(\n        \"div\",\n        {\n          class: this.#withSlotClass(\n            \"selectedDialCode\",\n            \"iti__selected-dial-code\"\n          )\n        },\n        this.#selectedCountryEl\n      );\n    }\n    if (enableCountrySelector) {\n      this.#buildCountrySelector();\n    }\n  }\n  ensureDropdownWidthSet() {\n    const { matchDropdownWidth, countrySelectorMode } = this.#options;\n    if (countrySelectorMode === COUNTRY_SELECTOR_MODE.OFF || !matchDropdownWidth || this.#countrySelectorEl.style.width) {\n      return;\n    }\n    const inputWidth = this.telInputEl.offsetWidth;\n    if (inputWidth > 0) {\n      this.#countrySelectorEl.style.width = `${inputWidth}px`;\n    }\n  }\n  #buildCountrySelector() {\n    const {\n      matchDropdownWidth,\n      countrySelectorMode,\n      countrySearch,\n      uiTranslations,\n      containerClass\n    } = this.#options;\n    const isFullscreen = countrySelectorMode === COUNTRY_SELECTOR_MODE.FULLSCREEN;\n    const detachedParent = this.#getDetachedParent();\n    const extraClasses = matchDropdownWidth ? \"\" : \"iti--flexible-dropdown-width\";\n    this.#countrySelectorEl = createEl(\"div\", {\n      id: `iti-${this.#id}__country-selector`,\n      class: this.#withSlotClass(\n        \"countrySelector\",\n        `iti__country-selector ${CLASSES.HIDE} ${extraClasses}`\n      ),\n      role: \"dialog\",\n      [ARIA.MODAL]: \"true\"\n    });\n    if (this.#isRTL) {\n      this.#countrySelectorEl.setAttribute(\"dir\", \"rtl\");\n    }\n    if (countrySearch) {\n      this.#buildSearchUI();\n    }\n    this.#countryListEl = createEl(\n      \"ul\",\n      {\n        class: this.#withSlotClass(\"countryList\", \"iti__country-list\"),\n        id: `iti-${this.#id}__country-listbox`,\n        role: \"listbox\",\n        [ARIA.LABEL]: uiTranslations.countryListAriaLabel\n      },\n      this.#countrySelectorEl\n    );\n    this.#appendListItems();\n    if (countrySearch) {\n      this.#updateSearchResultsA11yText();\n    }\n    if (detachedParent) {\n      const wrapperClasses = buildClassNames({\n        iti: true,\n        \"iti--detached-country-selector\": true,\n        \"iti--fullscreen-popup\": isFullscreen,\n        \"iti--inline-country-selector\": !isFullscreen,\n        [containerClass]: Boolean(containerClass)\n      });\n      this.#detachedCountrySelectorEl = createEl(\"div\", {\n        class: this.#withSlotClass(\"countrySelectorContainer\", wrapperClasses)\n      });\n      this.#detachedCountrySelectorEl.appendChild(this.#countrySelectorEl);\n    } else {\n      this.#countryContainerEl.appendChild(this.#countrySelectorEl);\n    }\n  }\n  //* Resolve the DOM element to attach the country selector to. Fullscreen always uses document.body; dropdown uses the consumer-supplied dropdownParent (if any); otherwise the country selector renders inline within the input wrapper (no detached element).\n  #getDetachedParent() {\n    const { countrySelectorMode, dropdownParent } = this.#options;\n    if (countrySelectorMode === COUNTRY_SELECTOR_MODE.FULLSCREEN) {\n      return document.body;\n    }\n    if (countrySelectorMode === COUNTRY_SELECTOR_MODE.DROPDOWN) {\n      return dropdownParent;\n    }\n    return null;\n  }\n  #buildSearchUI() {\n    const { uiTranslations, searchInputClass } = this.#options;\n    const searchWrapper = createEl(\n      \"div\",\n      { class: this.#withSlotClass(\"searchWrapper\", \"iti__search-input-wrapper\") },\n      this.#countrySelectorEl\n    );\n    this.#searchIconEl = createEl(\n      \"span\",\n      {\n        class: this.#withSlotClass(\"searchIcon\", \"iti__search-icon\"),\n        [ARIA.HIDDEN]: \"true\"\n      },\n      searchWrapper\n    );\n    this.#searchIconEl.appendChild(buildSearchIcon());\n    this.#searchInputEl = createEl(\n      \"input\",\n      {\n        id: `iti-${this.#id}__search-input`,\n        // Chrome says inputs need either a name or an id\n        type: \"search\",\n        class: this.#withSlotClass(\n          \"searchInput\",\n          `iti__search-input ${searchInputClass}`\n        ),\n        placeholder: uiTranslations.searchPlaceholder,\n        // role=combobox + aria-autocomplete=list + aria-activedescendant allows maintaining focus on the search input while allowing users to navigate search results with up/down keyboard keys\n        role: \"combobox\",\n        [ARIA.EXPANDED]: \"true\",\n        [ARIA.LABEL]: uiTranslations.searchPlaceholder,\n        [ARIA.CONTROLS]: `iti-${this.#id}__country-listbox`,\n        [ARIA.AUTOCOMPLETE]: \"list\",\n        autocomplete: \"off\"\n      },\n      searchWrapper\n    );\n    this.#searchClearButtonEl = createEl(\n      \"button\",\n      {\n        type: \"button\",\n        class: this.#withSlotClass(\n          \"searchClear\",\n          `iti__search-clear ${CLASSES.HIDE}`\n        ),\n        [ARIA.LABEL]: uiTranslations.clearSearchAriaLabel,\n        tabindex: \"-1\"\n      },\n      searchWrapper\n    );\n    this.#searchClearButtonEl.appendChild(buildClearIcon(this.#id));\n    this.#searchResultsLiveRegionEl = createEl(\n      \"span\",\n      { class: \"iti__a11y-text\" },\n      this.#countrySelectorEl\n    );\n    this.#noResultsMessageEl = createEl(\n      \"div\",\n      {\n        class: this.#withSlotClass(\"noResults\", `iti__no-results ${CLASSES.HIDE}`),\n        [ARIA.HIDDEN]: \"true\"\n        // all a11y messaging happens in this.#searchResultsLiveRegionEl\n      },\n      this.#countrySelectorEl\n    );\n    this.#noResultsMessageEl.textContent = uiTranslations.searchEmptyState ?? null;\n  }\n  #updateInputPaddingAndReveal() {\n    if (!this.#countryContainerEl) {\n      return;\n    }\n    this.#updateInputPadding();\n    this.#countryContainerEl.classList.remove(CLASSES.V_HIDE);\n  }\n  #buildHiddenInputs(wrapper) {\n    const { hiddenInputs } = this.#options;\n    if (!hiddenInputs) {\n      return;\n    }\n    const telInputName = this.telInputEl.getAttribute(\"name\") || \"\";\n    const names = hiddenInputs(telInputName);\n    if (names.phone) {\n      const existingInput = this.telInputEl.form?.querySelector(\n        `input[name=\"${names.phone}\"]`\n      );\n      if (existingInput) {\n        this.#hiddenInputPhoneEl = existingInput;\n      } else {\n        this.#hiddenInputPhoneEl = createEl(\"input\", {\n          type: \"hidden\",\n          name: names.phone\n        });\n        wrapper.appendChild(this.#hiddenInputPhoneEl);\n      }\n    }\n    if (names.country) {\n      const existingInput = this.telInputEl.form?.querySelector(\n        `input[name=\"${names.country}\"]`\n      );\n      if (existingInput) {\n        this.#hiddenInputCountryEl = existingInput;\n      } else {\n        this.#hiddenInputCountryEl = createEl(\"input\", {\n          type: \"hidden\",\n          name: names.country\n        });\n        wrapper.appendChild(this.#hiddenInputCountryEl);\n      }\n    }\n  }\n  //* For each country: add a country list item <li> to the countryList <ul> container.\n  #appendListItems() {\n    const frag = document.createDocumentFragment();\n    const liClass = this.#withSlotClass(\"countryListItem\", CLASSES.COUNTRY_ITEM);\n    for (let i = 0; i < this.#countries.length; i++) {\n      const c = this.#countries[i];\n      const listItem = createEl(\"li\", {\n        id: `iti-${this.#id}__item-${c.iso2}`,\n        class: liClass,\n        tabindex: \"-1\",\n        role: \"option\",\n        [ARIA.SELECTED]: \"false\"\n      });\n      listItem.dataset[DATA_KEYS.DIAL_CODE] = c.dialCode;\n      listItem.dataset[DATA_KEYS.ISO2] = c.iso2;\n      this.#listItemByIso2.set(c.iso2, listItem);\n      if (this.#options.showFlags) {\n        createEl(\n          \"div\",\n          {\n            class: this.#withSlotClass(\n              \"countryListItemFlag\",\n              `${CLASSES.FLAG} iti__${c.iso2}`\n            )\n          },\n          listItem\n        );\n      }\n      const nameEl = createEl(\n        \"span\",\n        { class: this.#withSlotClass(\"countryName\", \"iti__country-name\") },\n        listItem\n      );\n      nameEl.textContent = `${c.name} `;\n      const dialEl = createEl(\n        \"span\",\n        { class: this.#withSlotClass(\"dialCode\", \"iti__dial-code\") },\n        nameEl\n      );\n      if (this.#isRTL) {\n        dialEl.setAttribute(\"dir\", \"ltr\");\n      }\n      dialEl.textContent = `(+${c.dialCode})`;\n      frag.appendChild(listItem);\n    }\n    this.#countryListEl.appendChild(frag);\n  }\n  //* Update the input padding to make space for (1) the selected country/globe, (2) the arrow, and (3) the separate dial code, all of which are optional, hence handling this in the JS rather than CSS.\n  #updateInputPadding() {\n    if (this.#selectedCountryEl) {\n      const fallbackWidth = this.#options.separateDialCode ? LAYOUT.FALLBACK_SELECTED_COUNTRY_WITH_DIAL_WIDTH : LAYOUT.FALLBACK_SELECTED_COUNTRY_NO_DIAL_WIDTH;\n      const selectedCountryWidth = this.#selectedCountryEl.offsetWidth || this.#getHiddenSelectedCountryWidth() || fallbackWidth;\n      const inputPadding = selectedCountryWidth + LAYOUT.INPUT_PADDING_EXTRA_LEFT;\n      this.telInputEl.style.paddingLeft = `${inputPadding}px`;\n    }\n  }\n  //* Keep the input padding in sync when the selected country's rendered width changes \u2014 e.g. responsive font-size shifts that change the dial code text width. Skip while hidden (offsetWidth === 0) so we don't waste work or clobber the padding using a fallback constant.\n  #observeSelectedCountryResize() {\n    if (!this.#selectedCountryEl || typeof ResizeObserver === \"undefined\") {\n      return;\n    }\n    this.#resizeObserver = new ResizeObserver(() => {\n      if (this.#selectedCountryEl?.offsetWidth) {\n        this.#updateInputPadding();\n      }\n    });\n    this.#resizeObserver.observe(this.#selectedCountryEl);\n  }\n  //* When input is in a hidden container during init, we cannot calculate the selected country width.\n  //* Fix: clone the markup, make it invisible, add it to the end of the DOM, and then measure it's width.\n  //* To get the right styling to apply, all we need is a shallow clone of the container,\n  //* and then to inject a deep clone of the selectedCountryEl element.\n  //* Measures in the LOCAL document.body: appending to the local body escapes any hidden ancestor container, and the input's own frame is where intl-tel-input's styles live (so the clone lays out correctly). We deliberately do NOT escape to window.top: that only measures correctly in the rare case where the top frame also loads the library's styles, and measures wrong when it doesn't (e.g. a same-origin iframe whose outer frame lacks the styles \u2014 cf. #2178). If the local frame itself isn't laid out yet (e.g. an iframe hidden during init), this returns 0 and the caller falls back to a sane constant; the ResizeObserver in #observeSelectedCountryResize then corrects the padding once the input becomes visible.\n  #getHiddenSelectedCountryWidth() {\n    if (!this.telInputEl.parentNode) {\n      return 0;\n    }\n    const body = document.body;\n    const containerClone = this.telInputEl.parentNode.cloneNode(\n      false\n    );\n    containerClone.style.visibility = \"hidden\";\n    body.appendChild(containerClone);\n    const countryContainerClone = this.#countryContainerEl.cloneNode();\n    containerClone.appendChild(countryContainerClone);\n    const selectedCountryClone = this.#selectedCountryEl.cloneNode(\n      true\n    );\n    countryContainerClone.appendChild(selectedCountryClone);\n    const width = selectedCountryClone.offsetWidth;\n    body.removeChild(containerClone);\n    return width;\n  }\n  //* Measure the inline dropdown size once, lazily, on first open \u2014 see #getHiddenInlineDropdownSize for why measuring forces a reflow. Memoised via #inlineDropdownHeight so subsequent opens are free.\n  //* Captured for two uses: (1) on open, decide whether to position the dropdown above or below the input; (2) when countrySearch is enabled, pin the dropdown height (and, when matchDropdownWidth is disabled, width) so it doesn't jump around as the country list is filtered.\n  #ensureInlineDropdownSizeMeasured() {\n    if (this.#inlineDropdownHeight !== void 0) {\n      return;\n    }\n    const { countrySearch, matchDropdownWidth } = this.#options;\n    const { height, width } = this.#getHiddenInlineDropdownSize();\n    this.#inlineDropdownHeight = height;\n    if (countrySearch) {\n      this.#countrySelectorEl.style.height = `${height}px`;\n      if (!matchDropdownWidth && width > 0) {\n        this.#countrySelectorEl.style.width = `${width}px`;\n      }\n    }\n  }\n  // Measure the dropdown by moving it into a temporary hidden container on the body (it needs the right ancestor classes to lay out correctly). Restores it to its original position afterwards \u2014 a no-op during init (when it is still detached) but required when called lazily on first open (when it is already inserted).\n  //* Deliberately measures in the LOCAL document.body (not window.top): this runs on first open, when the input's own frame is visibly rendered and styled. Escaping to the top frame breaks when the input is inside a same-origin iframe whose outer frame lacks intl-tel-input's styles (e.g. Storybook), as the dropdown would then be measured unstyled and come out far too tall (issue #2178).\n  #getHiddenInlineDropdownSize() {\n    const body = document.body;\n    const selectorEl = this.#countrySelectorEl;\n    const originalParent = selectorEl.parentNode;\n    const originalNextSibling = selectorEl.nextSibling;\n    selectorEl.classList.remove(CLASSES.HIDE);\n    const tempContainer = createEl(\"div\", {\n      class: \"iti iti--inline-country-selector\"\n    });\n    tempContainer.appendChild(selectorEl);\n    tempContainer.style.visibility = \"hidden\";\n    body.appendChild(tempContainer);\n    const height = selectorEl.offsetHeight;\n    const width = selectorEl.offsetWidth;\n    body.removeChild(tempContainer);\n    selectorEl.classList.add(CLASSES.HIDE);\n    if (originalParent) {\n      originalParent.insertBefore(selectorEl, originalNextSibling);\n    }\n    return {\n      height: height > 0 ? height : LAYOUT.FALLBACK_DROPDOWN_HEIGHT,\n      width\n    };\n  }\n  //* Update search results text (for a11y).\n  #updateSearchResultsA11yText() {\n    const { uiTranslations } = this.#options;\n    const count = this.#countryListEl.childElementCount;\n    this.#searchResultsLiveRegionEl.textContent = uiTranslations.searchSummaryAria(count);\n  }\n  //* Country search: Filter the countries according to the search query.\n  #filterCountriesByQuery(query) {\n    let matchedCountries;\n    if (query === \"\") {\n      matchedCountries = this.#countries;\n    } else {\n      const normalisedQuery = Numerals.toAscii(query);\n      matchedCountries = getMatchedCountries(\n        this.#countries,\n        this.#searchTokens,\n        normalisedQuery\n      );\n    }\n    this.#showFilteredCountries(matchedCountries);\n  }\n  //* Pre-fill the search input with \"+\" and show all countries\n  //* (used when user types \"+\" in the phone input to open the country selector).\n  //* Explicitly focus the search input (openCountrySelector skips this when\n  //* dropdownAlwaysOpen, but here we need focus to redirect subsequent keystrokes).\n  prefillSearchWithPlus() {\n    this.#searchInputEl.value = \"+\";\n    this.#searchInputEl.focus();\n    this.#filterCountriesByQuery(\"\");\n  }\n  // Search input handlers\n  #applySearchFilter() {\n    const inputQuery = this.#searchInputEl.value.trim();\n    this.#filterCountriesByQuery(inputQuery);\n    if (this.#searchInputEl.value) {\n      this.#searchClearButtonEl.classList.remove(CLASSES.HIDE);\n    } else {\n      this.#searchClearButtonEl.classList.add(CLASSES.HIDE);\n    }\n  }\n  #handleSearchChange() {\n    if (this.#searchDebounceTimer) {\n      clearTimeout(this.#searchDebounceTimer);\n    }\n    this.#searchDebounceTimer = setTimeout(() => {\n      this.#applySearchFilter();\n      this.#searchDebounceTimer = null;\n    }, TIMINGS.SEARCH_DEBOUNCE_MS);\n  }\n  #handleSearchClear() {\n    this.#searchInputEl.value = \"\";\n    this.#searchInputEl.focus();\n    this.#applySearchFilter();\n  }\n  //* Check if a country list item element is visible within it's container (the country list), else scroll until it is.\n  #scrollCountryListToItem(element) {\n    const container = this.#countryListEl;\n    const containerRect = container.getBoundingClientRect();\n    const elementRect = element.getBoundingClientRect();\n    const offsetTop = elementRect.top - containerRect.top + container.scrollTop;\n    if (elementRect.top < containerRect.top) {\n      container.scrollTop = offsetTop;\n    } else if (elementRect.bottom > containerRect.bottom) {\n      container.scrollTop = offsetTop - containerRect.height + elementRect.height;\n    }\n  }\n  //* Remove highlighting from the previous list item and highlight the new one.\n  #highlightListItem(listItem, doScroll = true) {\n    this.#highlightedListItemEl?.classList.remove(CLASSES.HIGHLIGHT);\n    if (listItem) {\n      listItem.classList.add(CLASSES.HIGHLIGHT);\n      if (this.#options.countrySearch) {\n        const activeDescendant = listItem.getAttribute(\"id\") || \"\";\n        this.#searchInputEl.setAttribute(\n          ARIA.ACTIVE_DESCENDANT,\n          activeDescendant\n        );\n      }\n      if (doScroll) {\n        this.#scrollCountryListToItem(listItem);\n      }\n      this.#highlightedListItemEl = listItem;\n    } else {\n      this.#highlightedListItemEl = null;\n    }\n  }\n  //* Bind a form-submit listener that syncs the hidden inputs with the current phone number\n  //* and country iso2. No-op if there are no hidden inputs or the input is not in a form.\n  bindHiddenInputSubmitListener(signal, getPhone, getCountryIso2) {\n    const form = this.telInputEl.form;\n    if (!form || !this.#hiddenInputPhoneEl && !this.#hiddenInputCountryEl) {\n      return;\n    }\n    form.addEventListener(\n      \"submit\",\n      () => {\n        if (this.#hiddenInputPhoneEl) {\n          this.#hiddenInputPhoneEl.value = getPhone();\n        }\n        if (this.#hiddenInputCountryEl) {\n          this.#hiddenInputCountryEl.value = getCountryIso2();\n        }\n      },\n      { signal }\n    );\n  }\n  //* Wire up triggers that open/close the country selector: label click (focus input or swallow repeat click),\n  //* selected-country click (open), and keydown on countryContainer (open on arrow/space/enter, close on tab).\n  bindAllInitialCountrySelectorListeners(signal, onOpen, onClose) {\n    const label = this.telInputEl.closest(\"label\");\n    if (label) {\n      label.addEventListener(\n        \"click\",\n        (e) => {\n          if (!this.isCountrySelectorOpen()) {\n            this.telInputEl.focus();\n          } else {\n            e.preventDefault();\n          }\n        },\n        { signal }\n      );\n    }\n    this.#selectedCountryEl.addEventListener(\n      \"click\",\n      () => {\n        if (!this.isCountrySelectorOpen() && !this.telInputEl.disabled && !this.telInputEl.readOnly) {\n          onOpen();\n        }\n      },\n      { signal }\n    );\n    this.#countryContainerEl.addEventListener(\n      \"keydown\",\n      (e) => {\n        const openKeys = [\n          KEYS.ARROW_UP,\n          KEYS.ARROW_DOWN,\n          KEYS.SPACE,\n          KEYS.ENTER\n        ];\n        if (!this.isCountrySelectorOpen() && openKeys.includes(e.key)) {\n          e.preventDefault();\n          e.stopPropagation();\n          onOpen();\n        }\n        if (e.key === KEYS.TAB) {\n          onClose();\n        }\n      },\n      { signal }\n    );\n  }\n  //* Open the country selector: create a fresh AbortController, do the DOM work, and wire up all\n  //* open-state listeners (which invoke the caller's onSelect / onClose callbacks).\n  openCountrySelector(onSelect, onClose) {\n    const { countrySearch, dropdownAlwaysOpen } = this.#options;\n    this.#countrySelectorAbortController = new AbortController();\n    if (this.#options.countrySelectorMode !== COUNTRY_SELECTOR_MODE.FULLSCREEN) {\n      this.#ensureInlineDropdownSizeMeasured();\n    }\n    this.ensureDropdownWidthSet();\n    if (this.#detachedCountrySelectorEl) {\n      this.#injectAndPositionDetachedCountrySelector();\n    } else {\n      const positionBelow = this.#shouldPositionDropdownBelowInput();\n      const distance = this.telInputEl.offsetHeight + LAYOUT.DROPDOWN_MARGIN;\n      if (positionBelow) {\n        this.#countrySelectorEl.style.top = `${distance}px`;\n      } else {\n        this.#countrySelectorEl.style.bottom = `${distance}px`;\n      }\n    }\n    this.#countrySelectorEl.classList.remove(CLASSES.HIDE);\n    this.#selectedCountryEl.setAttribute(ARIA.EXPANDED, \"true\");\n    const itemToHighlight = this.#selectedListItemEl ?? this.#countryListEl.firstElementChild;\n    if (itemToHighlight) {\n      this.#highlightListItem(itemToHighlight);\n    }\n    if (countrySearch && !dropdownAlwaysOpen) {\n      this.#searchInputEl.focus();\n    }\n    if (this.#options.countrySelectorMode === COUNTRY_SELECTOR_MODE.FULLSCREEN && this.#detachedCountrySelectorEl && window.visualViewport) {\n      window.visualViewport.addEventListener(\n        \"resize\",\n        () => {\n          this.#adjustFullscreenPopupToViewport();\n          if (this.#highlightedListItemEl) {\n            this.#scrollCountryListToItem(this.#highlightedListItemEl);\n          }\n        },\n        { signal: this.#countrySelectorAbortController.signal }\n      );\n    }\n    this.#arrowEl.classList.add(CLASSES.ARROW_UP);\n    this.#bindCountrySelectorOpenListeners(onSelect, onClose);\n  }\n  //* Wire up all listeners needed while the country selector is open: list-item hover (highlight),\n  //* list-item click & enter key (select), click-off & escape (close), search input (filter),\n  //* (when countrySearch disabled) typed-char hidden search, and (when the country selector is in an\n  //* external container) update (fixed) position on scroll/resize.\n  #bindCountrySelectorOpenListeners(onSelect, onClose) {\n    const signal = this.#countrySelectorAbortController.signal;\n    this.#bindListItemHover(signal);\n    this.#bindListItemClick(signal, onSelect);\n    if (!this.#options.dropdownAlwaysOpen) {\n      this.#bindOutsideClickToClose(signal, onClose);\n    }\n    this.#bindCountrySelectorKeydownListener(signal, onSelect, onClose);\n    if (this.#options.countrySearch) {\n      this.#bindSearchInputListener(signal);\n    }\n    if (this.#options.countrySelectorMode === COUNTRY_SELECTOR_MODE.DROPDOWN && this.#options.dropdownParent && !supportsCssAnchor) {\n      document.addEventListener(\"scroll\", onClose, { signal, capture: true, passive: true });\n    }\n  }\n  //* When mouse over a list item, just highlight that one (so if they hit \"enter\" we know which to select).\n  #bindListItemHover(signal) {\n    this.#countryListEl.addEventListener(\n      \"mouseover\",\n      (e) => {\n        const listItem = e.target?.closest(\n          `.${CLASSES.COUNTRY_ITEM}`\n        );\n        if (listItem) {\n          this.#highlightListItem(listItem, false);\n        }\n      },\n      { signal }\n    );\n  }\n  //* Delegate clicks on the country list to the caller's onSelect callback, passing the clicked list item.\n  #bindListItemClick(signal, onSelect) {\n    this.#countryListEl.addEventListener(\n      \"click\",\n      (e) => {\n        const listItem = e.target?.closest(\n          `.${CLASSES.COUNTRY_ITEM}`\n        );\n        if (listItem) {\n          onSelect(listItem);\n        }\n      },\n      { signal }\n    );\n  }\n  //* Invoke onClickOff when the user clicks anywhere outside the country selector.\n  #bindOutsideClickToClose(signal, onClickOff) {\n    setTimeout(() => {\n      document.documentElement.addEventListener(\n        \"click\",\n        (e) => {\n          if (!this.#countrySelectorEl.contains(e.target)) {\n            onClickOff();\n          }\n        },\n        { signal }\n      );\n    }, 0);\n  }\n  //* Keyboard navigation while the country selector is open: arrow keys navigate, hidden-search keys filter,\n  //* and enter/escape invoke the caller's callbacks (which handle country selection / close).\n  //* Uses keydown rather than keypress so non-char keys (arrow, esc) fire and so holding a key repeats.\n  #bindCountrySelectorKeydownListener(signal, onEnter, onEscape) {\n    let query = \"\";\n    let queryTimer = null;\n    const handleKeydown = (e) => {\n      const allowedKeys = [\n        KEYS.ARROW_UP,\n        KEYS.ARROW_DOWN,\n        KEYS.ENTER,\n        KEYS.ESC\n      ];\n      if (allowedKeys.includes(e.key)) {\n        e.preventDefault();\n        e.stopPropagation();\n        if (e.key === KEYS.ARROW_UP || e.key === KEYS.ARROW_DOWN) {\n          this.#handleUpDownKey(e.key);\n        } else if (e.key === KEYS.ENTER && !e.isComposing) {\n          onEnter(this.#highlightedListItemEl);\n        } else if (e.key === KEYS.ESC) {\n          onEscape();\n          this.#selectedCountryEl.focus();\n        }\n      }\n      if (!this.#options.countrySearch && REGEX.HIDDEN_SEARCH_CHAR.test(e.key)) {\n        e.stopPropagation();\n        if (queryTimer) {\n          clearTimeout(queryTimer);\n        }\n        query += e.key.toLowerCase();\n        this.#searchForCountry(query);\n        queryTimer = setTimeout(() => {\n          query = \"\";\n        }, TIMINGS.HIDDEN_SEARCH_RESET_MS);\n      }\n    };\n    this.#selectedCountryEl?.addEventListener(\"keydown\", handleKeydown, { signal });\n    this.#countrySelectorEl?.addEventListener(\"keydown\", handleKeydown, { signal });\n  }\n  //* Wire up country search input listener: typing filters the list, the clear button resets it.\n  #bindSearchInputListener(signal) {\n    this.#searchInputEl.addEventListener(\n      \"input\",\n      () => this.#handleSearchChange(),\n      { signal }\n    );\n    this.#searchClearButtonEl.addEventListener(\n      \"click\",\n      () => this.#handleSearchClear(),\n      { signal }\n    );\n  }\n  //* Hidden search (countrySearch disabled): jump to the first list item whose name starts with the query.\n  #searchForCountry(query) {\n    const match = findFirstCountryStartingWith(\n      this.#countries,\n      this.#searchTokens,\n      query\n    );\n    if (match) {\n      const listItem = this.#listItemByIso2.get(match.iso2);\n      this.#highlightListItem(listItem);\n    }\n  }\n  //* Highlight the next/prev item in the list (and ensure it is visible).\n  #handleUpDownKey(key) {\n    let next = key === KEYS.ARROW_UP ? this.#highlightedListItemEl?.previousElementSibling : this.#highlightedListItemEl?.nextElementSibling;\n    if (!next && this.#countryListEl.childElementCount > 1) {\n      next = key === KEYS.ARROW_UP ? this.#countryListEl.lastElementChild : this.#countryListEl.firstElementChild;\n    }\n    if (next) {\n      this.#highlightListItem(next);\n    }\n  }\n  // Update the selected list item in the country list\n  #updateSelectedListItem(iso2) {\n    if (this.#selectedListItemEl && this.#selectedListItemEl.dataset[DATA_KEYS.ISO2] !== iso2) {\n      this.#selectedListItemEl.setAttribute(ARIA.SELECTED, \"false\");\n      this.#selectedListItemEl.querySelector(\".iti__country-check\")?.remove();\n      this.#selectedListItemEl = null;\n    }\n    if (iso2 && !this.#selectedListItemEl) {\n      const newListItem = this.#countryListEl.querySelector(\n        `[data-iso2=\"${iso2}\"]`\n      );\n      if (newListItem) {\n        newListItem.setAttribute(ARIA.SELECTED, \"true\");\n        const checkIcon = createEl(\n          \"span\",\n          {\n            class: this.#withSlotClass(\"countryCheck\", \"iti__country-check\"),\n            [ARIA.HIDDEN]: \"true\"\n          },\n          newListItem\n        );\n        checkIcon.appendChild(buildCheckIcon());\n        this.#selectedListItemEl = newListItem;\n        if (this.#options.dropdownAlwaysOpen) {\n          this.#highlightListItem(newListItem);\n        }\n      }\n    }\n  }\n  //* Country search: Filter the country list to the given array of countries.\n  #showFilteredCountries(matchedCountries) {\n    this.#countryListEl.replaceChildren();\n    let noCountriesAddedYet = true;\n    for (const c of matchedCountries) {\n      const listItem = this.#listItemByIso2.get(c.iso2);\n      if (listItem) {\n        this.#countryListEl.appendChild(listItem);\n        if (noCountriesAddedYet) {\n          this.#highlightListItem(listItem, false);\n          noCountriesAddedYet = false;\n        }\n      }\n    }\n    if (noCountriesAddedYet) {\n      this.#highlightListItem(null);\n      if (this.#noResultsMessageEl) {\n        this.#noResultsMessageEl.classList.remove(CLASSES.HIDE);\n      }\n    } else if (this.#noResultsMessageEl) {\n      this.#noResultsMessageEl.classList.add(CLASSES.HIDE);\n    }\n    this.#countryListEl.scrollTop = 0;\n    this.#updateSearchResultsA11yText();\n  }\n  // UI: Close the country selector (DOM + abort scoped listeners).\n  closeCountrySelector() {\n    const { countrySearch } = this.#options;\n    this.#countrySelectorAbortController.abort();\n    this.#countrySelectorAbortController = null;\n    this.#countrySelectorEl.classList.add(CLASSES.HIDE);\n    this.#selectedCountryEl.setAttribute(ARIA.EXPANDED, \"false\");\n    if (countrySearch) {\n      this.#searchInputEl.removeAttribute(ARIA.ACTIVE_DESCENDANT);\n      this.#searchInputEl.value = \"\";\n      this.#applySearchFilter();\n      if (this.#highlightedListItemEl) {\n        this.#highlightedListItemEl.classList.remove(CLASSES.HIGHLIGHT);\n        this.#highlightedListItemEl = null;\n      }\n    }\n    this.#arrowEl.classList.remove(CLASSES.ARROW_UP);\n    if (this.#detachedCountrySelectorEl) {\n      this.#detachedCountrySelectorEl.remove();\n      this.#detachedCountrySelectorEl.style.top = \"\";\n      this.#detachedCountrySelectorEl.style.bottom = \"\";\n      this.#detachedCountrySelectorEl.style.paddingLeft = \"\";\n      this.#detachedCountrySelectorEl.style.paddingRight = \"\";\n    } else {\n      this.#countrySelectorEl.style.top = \"\";\n      this.#countrySelectorEl.style.bottom = \"\";\n    }\n  }\n  #shouldPositionDropdownBelowInput() {\n    if (this.#options.dropdownAlwaysOpen) {\n      return true;\n    }\n    const inputPos = this.telInputEl.getBoundingClientRect();\n    const spaceAbove = inputPos.top;\n    const spaceBelow = window.innerHeight - inputPos.bottom;\n    return spaceBelow >= this.#inlineDropdownHeight || spaceBelow >= spaceAbove;\n  }\n  // inject the country selector into its detached wrapper and apply positioning styles\n  #injectAndPositionDetachedCountrySelector() {\n    const isFullscreen = this.#options.countrySelectorMode === COUNTRY_SELECTOR_MODE.FULLSCREEN;\n    const detachedParent = this.#getDetachedParent();\n    if (isFullscreen) {\n      if (window.innerWidth >= LAYOUT.NARROW_VIEWPORT_WIDTH) {\n        const inputPos = this.telInputEl.getBoundingClientRect();\n        this.#detachedCountrySelectorEl.style.paddingLeft = `${inputPos.left}px`;\n        this.#detachedCountrySelectorEl.style.paddingRight = `${window.innerWidth - inputPos.right}px`;\n      }\n    } else {\n      this.#setupCssAnchorPositioning();\n    }\n    if (!isFullscreen && !supportsCssAnchor) {\n      const inputPos = this.telInputEl.getBoundingClientRect();\n      this.#detachedCountrySelectorEl.style.left = `${inputPos.left}px`;\n      if (this.#shouldPositionDropdownBelowInput()) {\n        this.#detachedCountrySelectorEl.style.top = `${inputPos.bottom + LAYOUT.DROPDOWN_MARGIN}px`;\n      } else {\n        this.#detachedCountrySelectorEl.style.top = \"unset\";\n        this.#detachedCountrySelectorEl.style.bottom = `${window.innerHeight - inputPos.top + LAYOUT.DROPDOWN_MARGIN}px`;\n      }\n    }\n    detachedParent.appendChild(this.#detachedCountrySelectorEl);\n  }\n  //* Wire up CSS Anchor Positioning between the input and the detached country selector using a\n  //* unique anchor name per instance. Called lazily on first open (memoised) \u2014 the matching styles in\n  //* intlTelInput.css only take effect in browsers that support anchor(); elsewhere these\n  //* properties are inert. We append our name to any existing anchor-name (read via\n  //* getComputedStyle so we pick up CSS-defined values), so consumer-set anchors on the input\n  //* are preserved. Caveat: this snapshots the consumer's value once \u2014 if they later change\n  //* anchor-name via CSS (e.g. a class swap), our inline write will shadow the change.\n  #setupCssAnchorPositioning() {\n    if (this.#cssAnchorPositioningDone) {\n      return;\n    }\n    this.#cssAnchorPositioningDone = true;\n    const anchorName = `--iti-anchor-${this.#id}`;\n    const existing = getComputedStyle(this.telInputEl).anchorName;\n    this.telInputEl.style.anchorName = existing && existing !== \"none\" ? `${existing}, ${anchorName}` : anchorName;\n    this.#detachedCountrySelectorEl.style.positionAnchor = anchorName;\n  }\n  // Adjust the fullscreen popup dimensions to match the visual viewport,\n  // so it stays above the virtual keyboard on mobile devices.\n  #adjustFullscreenPopupToViewport() {\n    const vv = window.visualViewport;\n    if (!vv || !this.#detachedCountrySelectorEl) {\n      return;\n    }\n    const virtualKeyboardHeight = window.innerHeight - vv.height;\n    this.#detachedCountrySelectorEl.style.bottom = `${virtualKeyboardHeight}px`;\n  }\n  // UI: Whether the country selector is currently open (visible).\n  isCountrySelectorOpen() {\n    return !this.#countrySelectorEl.classList.contains(CLASSES.HIDE);\n  }\n  // Toggle the loading spinner on the selected flag (used during auto-country geoIP lookup).\n  setLoading(isLoading) {\n    this.#selectedFlagEl.classList.toggle(CLASSES.LOADING, isLoading);\n  }\n  //* Play the strict-reject animation (shake, or background-colour flash under prefers-reduced-motion) on the wrapper.\n  //* Called when strictMode rejects the whole input (keystroke, or whole paste).\n  //* Uses the wrapper (not the input) so any separateDialCode / country button move together with the input.\n  playStrictRejectAnimation() {\n    if (!this.#options.strictRejectAnimation) {\n      return;\n    }\n    const wrapperEl = this.telInputEl.parentElement;\n    if (!wrapperEl) {\n      return;\n    }\n    wrapperEl.classList.remove(CLASSES.STRICT_REJECT_ANIMATION);\n    void wrapperEl.offsetWidth;\n    wrapperEl.classList.add(CLASSES.STRICT_REJECT_ANIMATION);\n    wrapperEl.addEventListener(\n      \"animationend\",\n      () => wrapperEl.classList.remove(CLASSES.STRICT_REJECT_ANIMATION),\n      { once: true }\n    );\n  }\n  isLoading() {\n    return this.#selectedFlagEl.classList.contains(CLASSES.LOADING);\n  }\n  // Set the disabled state of the input and country selector.\n  setDisabled(disabled) {\n    this.telInputEl.disabled = disabled;\n    if (this.#selectedCountryEl) {\n      if (disabled) {\n        this.#selectedCountryEl.setAttribute(\"disabled\", \"true\");\n      } else {\n        this.#selectedCountryEl.removeAttribute(\"disabled\");\n      }\n    }\n  }\n  // Set the readonly state of the input and country selector.\n  setReadonly(readonly) {\n    this.telInputEl.readOnly = readonly;\n    if (this.#selectedCountryEl) {\n      if (readonly) {\n        this.#selectedCountryEl.setAttribute(\"disabled\", \"true\");\n      } else {\n        this.#selectedCountryEl.removeAttribute(\"disabled\");\n      }\n    }\n  }\n  setSelectedCountry(selectedCountry) {\n    const { countrySelectorMode, showFlags, separateDialCode, uiTranslations } = this.#options;\n    const name = selectedCountry?.name;\n    const dialCode = selectedCountry?.dialCode;\n    const iso2 = selectedCountry?.iso2 ?? \"\";\n    if (countrySelectorMode !== COUNTRY_SELECTOR_MODE.OFF) {\n      this.#updateSelectedListItem(iso2);\n    }\n    if (this.#selectedCountryEl) {\n      const flagClass = this.#withSlotClass(\n        \"selectedFlag\",\n        iso2 && showFlags ? `${CLASSES.FLAG} iti__${iso2}` : `${CLASSES.FLAG} ${CLASSES.GLOBE}`\n      );\n      let ariaLabel, title;\n      let flagContent = null;\n      if (iso2) {\n        title = name;\n        ariaLabel = uiTranslations.selectedCountryAriaLabel.replace(\"${countryName}\", name).replace(\"${dialCode}\", `+${dialCode}`);\n        if (!showFlags) {\n          flagContent = buildGlobeIcon();\n        }\n      } else {\n        title = uiTranslations.noCountrySelected;\n        ariaLabel = uiTranslations.noCountrySelected;\n        flagContent = buildGlobeIcon();\n      }\n      this.#selectedFlagEl.className = flagClass;\n      this.#selectedCountryEl.setAttribute(\"title\", title);\n      this.#selectedCountryEl.setAttribute(ARIA.LABEL, ariaLabel);\n      if (flagContent) {\n        this.#selectedFlagEl.replaceChildren(flagContent);\n      } else {\n        this.#selectedFlagEl.replaceChildren();\n      }\n    }\n    if (separateDialCode) {\n      const fullDialCode = dialCode ? `+${dialCode}` : \"\";\n      this.#selectedDialCodeEl.textContent = fullDialCode;\n      this.#updateInputPadding();\n    }\n  }\n  destroy() {\n    this.telInputEl.iti = void 0;\n    delete this.telInputEl.dataset[DATA_KEYS.INSTANCE_ID];\n    this.#resizeObserver?.disconnect();\n    this.telInputEl.style.paddingLeft = this.#originalPaddingLeft;\n    const wrapper = this.telInputEl.parentNode;\n    if (wrapper) {\n      wrapper.before(this.telInputEl);\n      wrapper.remove();\n    }\n    this.#listItemByIso2.clear();\n  }\n};\n\n// packages/core/src/js/data/country-data.ts\nvar processAllCountries = (options) => {\n  const { onlyCountries, excludeCountries } = options;\n  if (onlyCountries?.length) {\n    return data_default.filter(\n      (country) => onlyCountries.includes(country.iso2)\n    );\n  } else if (excludeCountries?.length) {\n    return data_default.filter(\n      (country) => !excludeCountries.includes(country.iso2)\n    );\n  }\n  return [...data_default];\n};\nvar generateCountryNames = (countries, options) => {\n  const { countryNameLocale, countryNameOverrides, uiTranslations } = options;\n  const bundledCountryNames = uiTranslations?.countryNames;\n  let displayNames;\n  try {\n    const hasDisplayNames = typeof Intl !== \"undefined\" && typeof Intl.DisplayNames === \"function\";\n    if (hasDisplayNames) {\n      displayNames = new Intl.DisplayNames(countryNameLocale, {\n        type: \"region\"\n      });\n    } else {\n      displayNames = null;\n    }\n  } catch (e) {\n    console.error(e);\n    displayNames = null;\n  }\n  for (const c of countries) {\n    c.name = countryNameOverrides[c.iso2] || bundledCountryNames?.[c.iso2] || displayNames?.of(c.iso2.toUpperCase()) || \"\";\n  }\n};\nvar processDialCodes = (countries) => {\n  const dialCodes = /* @__PURE__ */ new Set();\n  let dialCodeMaxLength = 0;\n  const dialCodeToIso2Map = {};\n  const addToDialCodeMap = (iso2, dialCode) => {\n    if (!iso2 || !dialCode) {\n      return;\n    }\n    if (dialCode.length > dialCodeMaxLength) {\n      dialCodeMaxLength = dialCode.length;\n    }\n    if (!Object.hasOwn(dialCodeToIso2Map, dialCode)) {\n      dialCodeToIso2Map[dialCode] = [];\n    }\n    const iso2List = dialCodeToIso2Map[dialCode];\n    if (iso2List.includes(iso2)) {\n      return;\n    }\n    iso2List.push(iso2);\n  };\n  const countriesSortedByPriority = [...countries].sort(\n    (a, b) => a.priority - b.priority\n  );\n  for (const c of countriesSortedByPriority) {\n    if (!dialCodes.has(c.dialCode)) {\n      dialCodes.add(c.dialCode);\n    }\n    for (let k = 1; k < c.dialCode.length; k++) {\n      const partialDialCode = c.dialCode.substring(0, k);\n      addToDialCodeMap(c.iso2, partialDialCode);\n    }\n    addToDialCodeMap(c.iso2, c.dialCode);\n    if (c.areaCodes) {\n      const rootIso2Code = dialCodeToIso2Map[c.dialCode][0];\n      for (const areaCode of c.areaCodes) {\n        for (let k = 1; k < areaCode.length; k++) {\n          const partialAreaCode = areaCode.substring(0, k);\n          const partialDialCode = c.dialCode + partialAreaCode;\n          addToDialCodeMap(rootIso2Code, partialDialCode);\n          addToDialCodeMap(c.iso2, partialDialCode);\n        }\n        addToDialCodeMap(c.iso2, c.dialCode + areaCode);\n      }\n    }\n  }\n  return { dialCodes, dialCodeMaxLength, dialCodeToIso2Map };\n};\nvar sortCountries = (countries, options) => {\n  const { countryOrder } = options;\n  countries.sort((a, b) => {\n    if (countryOrder) {\n      const aIndex = countryOrder.indexOf(a.iso2);\n      const bIndex = countryOrder.indexOf(b.iso2);\n      const aIndexExists = aIndex > -1;\n      const bIndexExists = bIndex > -1;\n      if (aIndexExists || bIndexExists) {\n        if (aIndexExists && bIndexExists) {\n          return aIndex - bIndex;\n        }\n        return aIndexExists ? -1 : 1;\n      }\n    }\n    return a.name.localeCompare(b.name);\n  });\n};\n\n// packages/core/src/js/data/intl-regionless.ts\nvar regionlessDialCodes = /* @__PURE__ */ new Set([\n  \"800\",\n  \"808\",\n  \"870\",\n  \"881\",\n  \"882\",\n  \"883\",\n  \"888\",\n  \"979\"\n]);\nvar hasRegionlessDialCode = (number) => {\n  const dialCode = getNumeric(number).slice(0, 3);\n  return number.startsWith(\"+\") && regionlessDialCodes.has(dialCode);\n};\n\n// packages/core/src/js/format/formatting.ts\nvar stripSeparateDialCode = (fullNumber, hasValidDialCode, separateDialCode, selectedCountry) => {\n  if (!separateDialCode || !hasValidDialCode) {\n    return fullNumber;\n  }\n  const dialCode = `+${selectedCountry.dialCode}`;\n  const start = fullNumber[dialCode.length] === \" \" || fullNumber[dialCode.length] === \"-\" ? dialCode.length + 1 : dialCode.length;\n  return fullNumber.substring(start);\n};\nvar formatNumberAsYouType = (fullNumber, telInputValue, utils, selectedCountry, separateDialCode) => {\n  const result = utils ? utils.formatNumberAsYouType(fullNumber, selectedCountry?.iso2) : fullNumber;\n  const dialCode = selectedCountry?.dialCode;\n  if (separateDialCode && telInputValue.charAt(0) !== \"+\" && result.includes(`+${dialCode}`)) {\n    const afterDialCode = result.split(`+${dialCode}`)[1] || \"\";\n    return afterDialCode.trim();\n  }\n  return result;\n};\n\n// packages/core/src/js/format/caret.ts\nvar computeNewCaretPosition = (relevantChars, formattedValue, prevCaretPos, isDeleteForwards) => {\n  if (prevCaretPos === 0 && !isDeleteForwards) {\n    return 0;\n  }\n  let relevantCharCount = 0;\n  for (let i = 0; i < formattedValue.length; i++) {\n    if (/[+0-9]/.test(formattedValue[i])) {\n      relevantCharCount++;\n    }\n    if (relevantCharCount === relevantChars && !isDeleteForwards) {\n      return i + 1;\n    }\n    if (isDeleteForwards && relevantCharCount === relevantChars + 1) {\n      return i;\n    }\n  }\n  return formattedValue.length;\n};\n\n// packages/core/src/js/data/nanp-regionless.ts\nvar regionlessNanpAreaCodes = /* @__PURE__ */ new Set([\n  \"800\",\n  \"822\",\n  \"833\",\n  \"844\",\n  \"855\",\n  \"866\",\n  \"877\",\n  \"880\",\n  \"881\",\n  \"882\",\n  \"883\",\n  \"884\",\n  \"885\",\n  \"886\",\n  \"887\",\n  \"888\",\n  \"889\"\n]);\nvar isRegionlessNanp = (number) => {\n  const numeric = getNumeric(number);\n  if (numeric.startsWith(DIAL_CODE.NANP) && numeric.length >= 4) {\n    const areaCode = numeric.substring(1, 4);\n    return regionlessNanpAreaCodes.has(areaCode);\n  }\n  return false;\n};\n\n// packages/core/src/js/intlTelInput.ts\nvar nextId = 0;\nvar ensureUtils = (methodName) => {\n  if (!intlTelInput.utils) {\n    throw new Error(\n      `intlTelInput.utils is required for ${methodName}(). See: https://intl-tel-input.com/docs/utils`\n    );\n  }\n};\nvar createDeferred = () => {\n  let resolve;\n  let reject;\n  const promise = new Promise((res, rej) => {\n    resolve = res;\n    reject = rej;\n  });\n  return { promise, resolve, reject };\n};\nvar Iti = class _Iti {\n  //* PUBLIC FIELDS - READONLY\n  //* Can't be private as it's called from intlTelInput convenience wrapper.\n  id;\n  // accessed externally via iti.promise.then(...)\n  promise;\n  //* PRIVATE FIELDS\n  #ui;\n  #options;\n  #isAndroid;\n  // country data\n  #countries;\n  #dialCodeMaxLength;\n  #dialCodeToIso2Map;\n  #dialCodes;\n  #countryByIso2;\n  #searchTokens;\n  #selectedCountry = null;\n  #maxCoreNumberLength = null;\n  #fallbackCountryIso2;\n  // is this instance still active (not destroyed)\n  #isActive = true;\n  #abortController;\n  #numerals;\n  //* Tracks whether the user has typed/pasted their own formatting chars, so AYT-formatting should back off.\n  #userOverrideFormatting = false;\n  #strictPasteSnapshot = null;\n  #autoCountryDeferred;\n  #utilsDeferred;\n  constructor(input, customOptions = {}) {\n    this.id = nextId++;\n    UI.validateInput(input);\n    const validatedOptions = validateOptions(customOptions);\n    this.#options = { ...defaults, ...validatedOptions };\n    normaliseOptions(this.#options);\n    applyOptionSideEffects(this.#options);\n    this.#ui = new UI(input, this.#options, this.id);\n    this.#isAndroid = typeof navigator !== \"undefined\" && /Android/i.test(navigator.userAgent);\n    this.#numerals = new Numerals(input.value);\n    this.promise = this.#createInitPromise(this.#options);\n    this.#countries = processAllCountries(this.#options);\n    const { dialCodes, dialCodeMaxLength, dialCodeToIso2Map } = processDialCodes(this.#countries);\n    this.#dialCodes = dialCodes;\n    this.#dialCodeMaxLength = dialCodeMaxLength;\n    this.#dialCodeToIso2Map = dialCodeToIso2Map;\n    this.#countryByIso2 = new Map(this.#countries.map((c) => [c.iso2, c]));\n    this.#init();\n  }\n  #getTelInputValue() {\n    const inputValue = this.#ui.telInputEl.value.trim();\n    return this.#numerals.normalise(inputValue);\n  }\n  #setTelInputValue(asciiValue) {\n    this.#ui.telInputEl.value = this.#numerals.denormalise(asciiValue);\n  }\n  #createInitPromise(options) {\n    const { initialCountry, initialCountryLookup, loadUtils } = options;\n    const needsAutoCountryDeferred = !initialCountry && Boolean(initialCountryLookup);\n    const needsUtilsDeferred = Boolean(loadUtils) && !intlTelInput.utils;\n    if (needsAutoCountryDeferred) {\n      this.#autoCountryDeferred = createDeferred();\n    }\n    if (needsUtilsDeferred) {\n      this.#utilsDeferred = createDeferred();\n    }\n    return Promise.all([\n      this.#autoCountryDeferred?.promise,\n      this.#utilsDeferred?.promise\n    ]).then(() => {\n    });\n  }\n  #init() {\n    this.#abortController = new AbortController();\n    this.#processCountryData();\n    this.#ui.buildMarkup(this.#countries, this.#searchTokens);\n    this.#setInitialState();\n    this.#initListeners();\n    this.#startAsyncLoads();\n    if (this.#options.dropdownAlwaysOpen) {\n      this.openCountrySelector();\n    }\n  }\n  //********************\n  //*  PRIVATE METHODS\n  //********************\n  //* Prepare all of the country data, including onlyCountries, excludeCountries, countryOrder options.\n  #processCountryData() {\n    generateCountryNames(this.#countries, this.#options);\n    sortCountries(this.#countries, this.#options);\n    this.#searchTokens = buildSearchTokens(this.#countries);\n  }\n  //* Set the initial state of the input value and the selected country by:\n  //* 1. Extracting a dial code from the given number\n  //* 2. Using explicit initialCountry\n  #setInitialState(overrideAutoCountry = false) {\n    const attributeValueRaw = this.#ui.telInputEl.getAttribute(\"value\");\n    const attributeValue = this.#numerals.normalise(attributeValueRaw ?? \"\");\n    const inputValue = this.#getTelInputValue();\n    const useAttribute = attributeValue && attributeValue.startsWith(\"+\") && (!inputValue || !inputValue.startsWith(\"+\"));\n    const value = useAttribute ? attributeValue : inputValue;\n    const dialCode = this.#getDialCode(value);\n    const isRegionlessNanpNumber = isRegionlessNanp(value);\n    const { initialCountry, initialCountryLookup } = this.#options;\n    const isAutoCountry = !initialCountry && Boolean(initialCountryLookup);\n    const resolvedInitialCountry = isAutoCountry && intlTelInput.autoCountry ? intlTelInput.autoCountry : initialCountry;\n    const doingAutoCountryLookup = isAutoCountry && !overrideAutoCountry && !intlTelInput.autoCountry;\n    const isValidInitialCountry = isIso2(resolvedInitialCountry);\n    if (dialCode) {\n      if (isRegionlessNanpNumber) {\n        if (isValidInitialCountry) {\n          this.#updateSelectedCountry(resolvedInitialCountry);\n        } else if (!doingAutoCountryLookup) {\n          this.#updateSelectedCountry(US.ISO2);\n        }\n      } else {\n        if (isValidInitialCountry) {\n          this.#updateSelectedCountry(resolvedInitialCountry);\n        }\n        this.#updateCountryFromNumber(value);\n      }\n    } else if (isValidInitialCountry) {\n      this.#updateSelectedCountry(resolvedInitialCountry);\n    } else if (!doingAutoCountryLookup) {\n      this.#updateSelectedCountry(\"\");\n    }\n    if (value) {\n      this.#updateValueFromNumber(value);\n    }\n  }\n  //* Initialise the main event listeners: input keyup, and click selected country.\n  #initListeners() {\n    this.#bindAllTelInputListeners();\n    if (this.#options.countrySelectorMode !== COUNTRY_SELECTOR_MODE.OFF) {\n      this.#ui.bindAllInitialCountrySelectorListeners(\n        this.#abortController.signal,\n        () => this.openCountrySelector(),\n        () => this.#closeCountrySelectorInternal()\n      );\n    }\n    this.#ui.bindHiddenInputSubmitListener(\n      this.#abortController.signal,\n      () => this.getNumber(),\n      () => this.#selectedCountry?.iso2 || \"\"\n    );\n  }\n  //* Init requests: utils script / initial country lookup.\n  #startAsyncLoads() {\n    if (this.#utilsDeferred) {\n      const { loadUtils } = this.#options;\n      const doAttachUtils = () => {\n        intlTelInput.attachUtils(loadUtils).catch(() => {\n        });\n      };\n      if (intlTelInput.documentReady()) {\n        doAttachUtils();\n      } else {\n        window.addEventListener(\"load\", doAttachUtils, {\n          signal: this.#abortController.signal\n        });\n      }\n    }\n    if (this.#autoCountryDeferred) {\n      if (this.#selectedCountry) {\n        this.#autoCountryDeferred.resolve();\n      } else {\n        this.#loadAutoCountry();\n      }\n    }\n  }\n  //* Perform the initial country lookup.\n  async #loadAutoCountry() {\n    if (intlTelInput.autoCountry) {\n      this.#handleAutoCountryLoaded();\n      return;\n    }\n    this.#ui.setLoading(true);\n    if (intlTelInput.startedLoadingAutoCountry) {\n      return;\n    }\n    intlTelInput.startedLoadingAutoCountry = true;\n    if (typeof this.#options.initialCountryLookup === \"function\") {\n      let timeoutId;\n      try {\n        const iso2 = await Promise.race([\n          this.#options.initialCountryLookup(),\n          new Promise((_, reject) => {\n            timeoutId = setTimeout(\n              () => reject(new Error(\"intl-tel-input: initialCountryLookup timed out after 10s\")),\n              1e4\n            );\n          })\n        ]);\n        const iso2Lower = typeof iso2 === \"string\" ? iso2.toLowerCase() : \"\";\n        if (!isIso2(iso2Lower)) {\n          intlTelInput.startedLoadingAutoCountry = false;\n          _Iti.forEachInstance(\"handleAutoCountryFailure\");\n          return;\n        }\n        intlTelInput.autoCountry = iso2Lower;\n        setTimeout(() => _Iti.forEachInstance(\"handleAutoCountryLoaded\"));\n      } catch {\n        intlTelInput.startedLoadingAutoCountry = false;\n        _Iti.forEachInstance(\"handleAutoCountryFailure\");\n      } finally {\n        if (timeoutId !== void 0) {\n          clearTimeout(timeoutId);\n        }\n      }\n    }\n  }\n  #openCountrySelectorWithPlus() {\n    this.openCountrySelector();\n    this.#ui.prefillSearchWithPlus();\n  }\n  //* Delete the character just typed (the one immediately before the caret). Used by Android workarounds where we can't preventDefault on keydown.\n  #removeJustTypedChar(inputValue) {\n    const currentCaretPos = this.#ui.telInputEl.selectionStart || 0;\n    const valueBeforeCaret = inputValue.substring(0, currentCaretPos - 1);\n    const valueAfterCaret = inputValue.substring(currentCaretPos);\n    this.#setTelInputValue(valueBeforeCaret + valueAfterCaret);\n    return currentCaretPos - 1;\n  }\n  //* Initialize the tel input listeners.\n  #bindAllTelInputListeners() {\n    this.#bindInputListener();\n    this.#bindKeydownListener();\n    this.#bindStrictPasteListener();\n  }\n  //* Android workaround for handling plus when separateDialCode enabled (as impossible to handle with keydown/keyup, for which e.key always returns \"Unidentified\", see https://stackoverflow.com/q/59584061/217866)\n  #handleAndroidPlusKey(inputValue) {\n    this.#removeJustTypedChar(inputValue);\n    this.#openCountrySelectorWithPlus();\n  }\n  //* Android strictMode workaround: the keydown-based filter can't block these because e.key is \"Unidentified\" on Android virtual keyboards, so strip them here on input.\n  #handleAndroidStrictReject(inputValue, rejectedInput) {\n    const newCaretPos = this.#removeJustTypedChar(inputValue);\n    this.#ui.telInputEl.setSelectionRange(newCaretPos, newCaretPos);\n    this.#ui.playStrictRejectAnimation();\n    this.#dispatchEvent(EVENTS.STRICT_REJECT, {\n      source: \"key\",\n      rejectedInput,\n      reason: \"invalid\"\n    });\n  }\n  //* Format the input value using libphonenumber's AYT formatter, preserving caret position (called after an input event).\n  #formatAsYouType(inputValue, isDeleteForwards) {\n    const currentCaretPos = this.#ui.telInputEl.selectionStart || 0;\n    const valueBeforeCaret = inputValue.substring(0, currentCaretPos);\n    const relevantCharsBeforeCaret = valueBeforeCaret.replace(\n      REGEX.NON_PLUS_NUMERIC_GLOBAL,\n      \"\"\n    ).length;\n    const fullNumber = this.#getFullNumber();\n    const formattedValue = formatNumberAsYouType(\n      fullNumber,\n      inputValue,\n      intlTelInput.utils,\n      this.#selectedCountry,\n      this.#options.separateDialCode\n    );\n    const newCaretPos = computeNewCaretPosition(\n      relevantCharsBeforeCaret,\n      formattedValue,\n      currentCaretPos,\n      isDeleteForwards\n    );\n    this.#setTelInputValue(formattedValue);\n    this.#ui.telInputEl.setSelectionRange(newCaretPos, newCaretPos);\n  }\n  //* If separateDialCode AND typed dial code (e.g. from paste or autofill, or from typing a dial code when countrySearch disabled), then remove the typed dial code.\n  //* Only strip when a full dial code is actually present \u2014 otherwise a lone typed \"+\" (or partial prefix) would get erased.\n  #stripTypedDialCode(inputValue) {\n    if (inputValue.startsWith(\"+\") && this.#selectedCountry && this.#getDialCode(inputValue)) {\n      const cleanNumber = stripSeparateDialCode(\n        inputValue,\n        true,\n        true,\n        this.#selectedCountry\n      );\n      this.#setTelInputValue(cleanNumber);\n    }\n  }\n  #bindInputListener() {\n    this.#userOverrideFormatting = REGEX.ALPHA_UNICODE.test(\n      this.#getTelInputValue()\n    );\n    this.#ui.telInputEl.addEventListener(\n      \"input\",\n      this.#handleInputEvent,\n      {\n        signal: this.#abortController.signal\n      }\n    );\n  }\n  //* On input event: (1) Update selected country, (2) Format-as-you-type.\n  //* Note that this fires AFTER the input is updated.\n  #handleInputEvent = (e) => {\n    const {\n      strictMode,\n      formatAsYouType,\n      separateDialCode,\n      countrySelectorMode,\n      countrySearch\n    } = this.#options;\n    const detail = e?.detail;\n    if (detail?.[\"isCountryChange\"]) {\n      return;\n    }\n    let inputValue = this.#getTelInputValue();\n    const isPaste = e?.inputType === INPUT_TYPES.PASTE;\n    const isStrictPaste = strictMode && isPaste;\n    if (this.#isAndroid && !isPaste && e?.data === \"+\" && separateDialCode && countrySelectorMode !== COUNTRY_SELECTOR_MODE.OFF && countrySearch) {\n      this.#handleAndroidPlusKey(inputValue);\n      return;\n    }\n    if (this.#isAndroid && !isPaste && strictMode && (e?.data === \" \" || e?.data === \"-\" || e?.data === \".\")) {\n      this.#handleAndroidStrictReject(inputValue, e.data);\n      return;\n    }\n    if (isStrictPaste) {\n      const didRejectPaste = this.#handleStrictPasteInputEvent();\n      if (didRejectPaste) {\n        return;\n      }\n      inputValue = this.#getTelInputValue();\n    }\n    if (this.#updateCountryFromNumber(inputValue)) {\n      this.#dispatchCountryChangeEvent();\n      this.#dispatchEvent(EVENTS.INPUT, { isCountryChange: true });\n    }\n    const isFormattingChar = !isStrictPaste && e?.data && REGEX.NON_PLUS_NUMERIC.test(e.data);\n    const isNonStrictPaste = isPaste && inputValue && !strictMode;\n    if (isFormattingChar || isNonStrictPaste) {\n      this.#userOverrideFormatting = true;\n    } else if (!REGEX.NON_PLUS_NUMERIC.test(inputValue)) {\n      this.#userOverrideFormatting = false;\n    }\n    if (formatAsYouType && !this.#userOverrideFormatting && !detail?.[\"isSetNumber\"] && this.#numerals.isAscii()) {\n      this.#formatAsYouType(\n        inputValue,\n        e?.inputType === INPUT_TYPES.DELETE_FORWARD\n      );\n    }\n    if (separateDialCode) {\n      this.#stripTypedDialCode(inputValue);\n    }\n  };\n  #bindKeydownListener() {\n    const { strictMode, separateDialCode } = this.#options;\n    if (!strictMode && !separateDialCode) {\n      return;\n    }\n    this.#ui.telInputEl.addEventListener(\"keydown\", this.#handleKeydownEvent, {\n      signal: this.#abortController.signal\n    });\n  }\n  //* On keydown event: (1) if strictMode then prevent invalid characters, (2) if separateDialCode then handle plus key\n  //* Note that this fires BEFORE the input is updated.\n  #handleKeydownEvent = (e) => {\n    const { strictMode, separateDialCode, countrySelectorMode, countrySearch } = this.#options;\n    if (!e.key || e.key.length !== 1 || e.altKey || e.ctrlKey || e.metaKey) {\n      return;\n    }\n    if (separateDialCode && countrySelectorMode !== COUNTRY_SELECTOR_MODE.OFF && countrySearch && e.key === \"+\") {\n      e.preventDefault();\n      this.#openCountrySelectorWithPlus();\n      return;\n    }\n    if (!strictMode) {\n      return;\n    }\n    const inputValue = this.#getTelInputValue();\n    const alreadyHasPlus = inputValue.startsWith(\"+\");\n    const isInitialPlus = !alreadyHasPlus && this.#ui.telInputEl.selectionStart === 0 && e.key === \"+\";\n    const normalisedKey = this.#numerals.normalise(e.key);\n    const isNumeric = /^[0-9]$/.test(normalisedKey);\n    const isAllowedChar = separateDialCode ? isNumeric : isInitialPlus || isNumeric;\n    const input = this.#ui.telInputEl;\n    const selStart = input.selectionStart;\n    const selEnd = input.selectionEnd;\n    const before = inputValue.slice(0, selStart ?? void 0);\n    const after = inputValue.slice(selEnd ?? void 0);\n    const newValue = before + normalisedKey + after;\n    const newFullNumber = this.#buildFullNumber(newValue);\n    let hasExceededMaxLength = getNumeric(newFullNumber).length > E164_MAX_DIGITS;\n    if (!hasExceededMaxLength && intlTelInput.utils && this.#maxCoreNumberLength) {\n      const coreNumber = intlTelInput.utils.getCoreNumber(\n        newFullNumber,\n        this.#selectedCountry?.iso2\n      );\n      hasExceededMaxLength = coreNumber.length > this.#maxCoreNumberLength;\n    }\n    const newCountry = this.#resolveCountryChangeFromNumber(newFullNumber);\n    const isChangingDialCode = newCountry !== null;\n    if (!isAllowedChar || hasExceededMaxLength && !isChangingDialCode && !isInitialPlus) {\n      this.#ui.playStrictRejectAnimation();\n      this.#dispatchEvent(EVENTS.STRICT_REJECT, {\n        source: \"key\",\n        rejectedInput: e.key,\n        reason: !isAllowedChar ? \"invalid\" : \"max-length\"\n      });\n      e.preventDefault();\n    }\n  };\n  #bindStrictPasteListener() {\n    if (!this.#options.strictMode) {\n      return;\n    }\n    this.#ui.telInputEl.addEventListener(\"paste\", this.#handleStrictPasteEvent, {\n      signal: this.#abortController.signal\n    });\n  }\n  // In strict mode, remember paste details before the browser inserts the pasted text.\n  // The actual sanitisation runs on the following input event so native paste stays enabled.\n  #handleStrictPasteEvent = (e) => {\n    const input = this.#ui.telInputEl;\n    const inputValue = this.#getTelInputValue();\n    this.#strictPasteSnapshot = {\n      pastedRaw: e.clipboardData?.getData(\"text\") ?? \"\",\n      value: inputValue,\n      selectionStart: input.selectionStart ?? inputValue.length,\n      selectionEnd: input.selectionEnd ?? inputValue.length\n    };\n  };\n  // Handle paste input events when strictMode is enabled by sanitising the pasted content after\n  // the browser inserts it, and rejecting it entirely if it would result in an invalid number.\n  #handleStrictPasteInputEvent() {\n    const input = this.#ui.telInputEl;\n    const pasteSnapshot = this.#strictPasteSnapshot;\n    this.#strictPasteSnapshot = null;\n    if (!pasteSnapshot) {\n      return false;\n    }\n    const pastedRaw = pasteSnapshot.pastedRaw;\n    const originalValue = pasteSnapshot.value;\n    const selStart = pasteSnapshot.selectionStart;\n    const selEnd = pasteSnapshot.selectionEnd;\n    const before = originalValue.slice(0, selStart);\n    const after = originalValue.slice(selEnd);\n    const iso2 = this.#selectedCountry?.iso2;\n    const pasted = this.#numerals.normalise(pastedRaw);\n    const initialCharSelected = selStart === 0 && selEnd > 0;\n    const allowLeadingPlus = !originalValue.startsWith(\"+\") || initialCharSelected;\n    const allowedChars = pasted.replace(REGEX.NON_PLUS_NUMERIC_GLOBAL, \"\");\n    const hasLeadingPlus = allowedChars.startsWith(\"+\");\n    const numerics = allowedChars.replace(/\\+/g, \"\");\n    const sanitised = hasLeadingPlus && allowLeadingPlus ? `+${numerics}` : numerics;\n    let newValue = before + sanitised + after;\n    let rejectReason = sanitised !== pasted ? \"invalid\" : null;\n    if (newValue.length > 30) {\n      this.#rejectStrictPasteAsTooLong(pasteSnapshot);\n      return true;\n    }\n    const excessDigits = getNumeric(this.#buildFullNumber(newValue)).length - E164_MAX_DIGITS;\n    if (excessDigits > 0) {\n      if (selEnd !== originalValue.length) {\n        this.#rejectStrictPasteAsTooLong(pasteSnapshot);\n        return true;\n      }\n      newValue = newValue.slice(0, newValue.length - excessDigits);\n      rejectReason = \"max-length\";\n    }\n    if (this.#maxCoreNumberLength && newValue.length > 5 && intlTelInput.utils) {\n      let coreNumber = intlTelInput.utils.getCoreNumber(newValue, iso2);\n      while (coreNumber.length === 0 && newValue.length > 0) {\n        newValue = newValue.slice(0, -1);\n        coreNumber = intlTelInput.utils.getCoreNumber(newValue, iso2);\n      }\n      if (!coreNumber) {\n        this.#rejectStrictPasteAsTooLong(pasteSnapshot);\n        return true;\n      }\n      if (coreNumber.length > this.#maxCoreNumberLength) {\n        if (selEnd === originalValue.length) {\n          const trimLength = coreNumber.length - this.#maxCoreNumberLength;\n          newValue = newValue.slice(0, newValue.length - trimLength);\n          rejectReason = \"max-length\";\n        } else {\n          this.#rejectStrictPasteAsTooLong(pasteSnapshot);\n          return true;\n        }\n      }\n    }\n    this.#setTelInputValue(newValue);\n    const caretPos = selStart + sanitised.length;\n    input.setSelectionRange(caretPos, caretPos);\n    if (rejectReason) {\n      if (pasted.length > 0 && sanitised.length === 0) {\n        this.#ui.playStrictRejectAnimation();\n      }\n      this.#dispatchEvent(EVENTS.STRICT_REJECT, {\n        source: \"paste\",\n        rejectedInput: pastedRaw,\n        reason: rejectReason\n      });\n    }\n    return false;\n  }\n  // Reject a paste entirely because it would exceed the max length, restoring the previous value.\n  #rejectStrictPasteAsTooLong(pasteSnapshot) {\n    this.#ui.playStrictRejectAnimation();\n    this.#dispatchEvent(EVENTS.STRICT_REJECT, {\n      source: \"paste\",\n      rejectedInput: pasteSnapshot.pastedRaw,\n      reason: \"max-length\"\n    });\n    this.#restoreValueBeforeStrictPaste(pasteSnapshot);\n  }\n  #restoreValueBeforeStrictPaste(pasteSnapshot) {\n    this.#setTelInputValue(pasteSnapshot.value);\n    this.#ui.telInputEl.setSelectionRange(\n      pasteSnapshot.selectionStart,\n      pasteSnapshot.selectionEnd\n    );\n  }\n  //* Adhere to the input's maxlength attr.\n  #truncateToMaxLength(number) {\n    const max = Number(this.#ui.telInputEl.getAttribute(\"maxlength\"));\n    return max && number.length > max ? number.substring(0, max) : number;\n  }\n  //* Trigger a custom event on the input (typed via ItiEventMap).\n  #dispatchEvent(name, detailProps = {}) {\n    const e = new CustomEvent(name, {\n      bubbles: true,\n      cancelable: true,\n      detail: detailProps\n    });\n    this.#ui.telInputEl.dispatchEvent(e);\n  }\n  //* Open the country selector. Bail if already open \u2014 otherwise the existing AbortController gets overwritten\n  //* and its listeners leak. Reachable via openCountrySelectorWithPlus when dropdownAlwaysOpen is set.\n  //* Public so consumers can programmatically open the country selector.\n  openCountrySelector() {\n    if (this.#ui.isCountrySelectorOpen()) {\n      return;\n    }\n    this.#ui.openCountrySelector(\n      (li) => this.#selectListItem(li),\n      () => this.#closeCountrySelectorInternal()\n    );\n    this.#dispatchEvent(EVENTS.OPEN_COUNTRY_SELECTOR);\n  }\n  //* Update the input's value to the given number (format first if possible)\n  //* NOTE: this is called from setInitialState, handleUtilsLoaded and setNumber.\n  #updateValueFromNumber(fullNumber) {\n    const { numberDisplayFormat, separateDialCode } = this.#options;\n    let number = fullNumber;\n    if (intlTelInput.utils && this.#selectedCountry) {\n      const isRegionless = hasRegionlessDialCode(fullNumber);\n      const preserveUserNational = !number.startsWith(\"+\") && !separateDialCode;\n      const useNational = numberDisplayFormat === NUMBER_FORMAT.NATIONAL && !isRegionless || preserveUserNational;\n      let format;\n      if (useNational) {\n        format = NUMBER_FORMAT.NATIONAL;\n      } else if (numberDisplayFormat === NUMBER_FORMAT.E164 && !isRegionless) {\n        format = NUMBER_FORMAT.E164;\n      } else {\n        format = NUMBER_FORMAT.INTERNATIONAL;\n      }\n      number = intlTelInput.utils.formatNumber(\n        number,\n        this.#selectedCountry?.iso2,\n        format\n      );\n    }\n    number = this.#prepareNumberForInput(number);\n    this.#setTelInputValue(number);\n  }\n  //* Check if need to select a new country based on the given number\n  //* Note: called from setInitialState, keyup handler, setNumber.\n  #updateCountryFromNumber(fullNumber) {\n    const iso2 = this.#resolveCountryChangeFromNumber(fullNumber);\n    if (iso2 !== null) {\n      return this.#updateSelectedCountry(iso2);\n    }\n    return false;\n  }\n  // if there is a selected country, and the number doesn't start with a dial code, then add it\n  #withDialCodePrefix(number) {\n    const dialCode = this.#selectedCountry?.dialCode;\n    const nationalPrefix = this.#selectedCountry?.nationalPrefix;\n    const alreadyHasPlus = number.startsWith(\"+\");\n    if (alreadyHasPlus || !dialCode) {\n      return number;\n    }\n    const hasPrefix = nationalPrefix && number.startsWith(nationalPrefix) && !this.#options.separateDialCode;\n    const cleanNumber = hasPrefix ? number.substring(1) : number;\n    return `+${dialCode}${cleanNumber}`;\n  }\n  //* Get the new country iso2 (or \"\" for empty/globe state) based on the input number, or return null if no change.\n  #resolveCountryChangeFromNumber(fullNumber) {\n    const plusIndex = fullNumber.indexOf(\"+\");\n    let number = plusIndex > 0 ? fullNumber.substring(plusIndex) : fullNumber;\n    const selectedIso2 = this.#selectedCountry?.iso2;\n    number = this.#withDialCodePrefix(number);\n    const dialCodeMatch = this.#getDialCode(number, true);\n    const numeric = getNumeric(number);\n    if (dialCodeMatch) {\n      const dialCodeMatchNumeric = getNumeric(dialCodeMatch);\n      const iso2Codes = this.#dialCodeToIso2Map[dialCodeMatchNumeric];\n      if (iso2Codes.length === 1) {\n        if (iso2Codes[0] === selectedIso2) {\n          return null;\n        }\n        return iso2Codes[0];\n      }\n      return this.#resolveCountryChangeFromMultiMatch(\n        iso2Codes,\n        dialCodeMatchNumeric,\n        numeric\n      );\n    } else if (number.startsWith(\"+\") && numeric.length) {\n      const currentDial = this.#selectedCountry?.dialCode || \"\";\n      if (currentDial && currentDial.startsWith(numeric)) {\n        return null;\n      }\n      if (!selectedIso2) {\n        return null;\n      }\n      return \"\";\n    } else if ((!number || number === \"+\") && !selectedIso2 && this.#fallbackCountryIso2) {\n      return this.#fallbackCountryIso2;\n    }\n    return null;\n  }\n  //* Resolve the country when multiple countries share the matched dial code.\n  #resolveCountryChangeFromMultiMatch(iso2Codes, dialCodeMatchNumeric, numeric) {\n    const selectedIso2 = this.#selectedCountry?.iso2;\n    const selectedDialCode = this.#selectedCountry?.dialCode;\n    if (!selectedIso2 && this.#fallbackCountryIso2 && iso2Codes.includes(this.#fallbackCountryIso2)) {\n      return this.#fallbackCountryIso2;\n    }\n    const isRegionlessNanpNumber = selectedDialCode === DIAL_CODE.NANP && isRegionlessNanp(numeric);\n    if (isRegionlessNanpNumber) {\n      return null;\n    }\n    const areaCodes = this.#selectedCountry?.areaCodes;\n    const priority = this.#selectedCountry?.priority;\n    if (areaCodes) {\n      const dialCodeAreaCodes = areaCodes.map(\n        (areaCode) => `${selectedDialCode}${areaCode}`\n      );\n      for (const dialCodeAreaCode of dialCodeAreaCodes) {\n        if (numeric.startsWith(dialCodeAreaCode)) {\n          return null;\n        }\n      }\n    }\n    const isMainCountry = priority === 0;\n    const hasAreaCodesButNoneMatched = areaCodes && !isMainCountry && numeric.length > dialCodeMatchNumeric.length;\n    const isValidSelection = selectedIso2 && iso2Codes.includes(selectedIso2) && !hasAreaCodesButNoneMatched;\n    const alreadySelected = selectedIso2 === iso2Codes[0];\n    if (!isValidSelection && !alreadySelected) {\n      return iso2Codes[0];\n    }\n    return null;\n  }\n  //* Update the selected country, dial code (if separateDialCode), placeholder, title, and selected list item.\n  //* Note: called from setInitialState, updateCountryFromNumber, selectListItem, setSelectedCountry.\n  #updateSelectedCountry(iso2) {\n    const prevIso2 = this.#selectedCountry?.iso2 || \"\";\n    this.#selectedCountry = iso2 ? this.#countryByIso2.get(iso2) : null;\n    if (this.#selectedCountry) {\n      this.#fallbackCountryIso2 = this.#selectedCountry.iso2;\n    }\n    this.#ui.setSelectedCountry(this.#selectedCountry);\n    this.#updatePlaceholder();\n    this.#updateMaxCoreNumberLength();\n    return prevIso2 !== iso2;\n  }\n  //* Update the maximum valid number length for the currently selected country.\n  #updateMaxCoreNumberLength() {\n    const { strictMode, placeholderNumberType, allowedNumberTypes } = this.#options;\n    if (!strictMode || !intlTelInput.utils) {\n      return;\n    }\n    const iso2 = this.#selectedCountry?.iso2;\n    if (!iso2) {\n      this.#maxCoreNumberLength = null;\n      return;\n    }\n    let exampleNumber = intlTelInput.utils.getExampleNumber(\n      iso2,\n      placeholderNumberType,\n      NUMBER_FORMAT.E164\n    );\n    let validNumber = exampleNumber;\n    while (intlTelInput.utils.isValidNumber(\n      exampleNumber,\n      iso2,\n      allowedNumberTypes\n    )) {\n      validNumber = exampleNumber;\n      exampleNumber += \"0\";\n    }\n    const coreNumber = intlTelInput.utils.getCoreNumber(validNumber, iso2);\n    this.#maxCoreNumberLength = coreNumber.length;\n    if (iso2 === \"by\") {\n      this.#maxCoreNumberLength = coreNumber.length + 1;\n    }\n  }\n  //* Update the input placeholder to an example number from the currently selected country.\n  #updatePlaceholder() {\n    const {\n      placeholderNumberPolicy,\n      placeholderNumberType,\n      numberDisplayFormat,\n      customPlaceholder\n    } = this.#options;\n    const shouldSetPlaceholder = placeholderNumberPolicy === PLACEHOLDER_POLICY.AGGRESSIVE || !this.#ui.hadInitialPlaceholder && placeholderNumberPolicy === PLACEHOLDER_POLICY.POLITE;\n    if (!intlTelInput.utils || !shouldSetPlaceholder) {\n      return;\n    }\n    let placeholder = this.#selectedCountry ? intlTelInput.utils.getExampleNumber(\n      this.#selectedCountry.iso2,\n      placeholderNumberType,\n      numberDisplayFormat\n    ) : \"\";\n    placeholder = this.#prepareNumberForInput(placeholder);\n    if (typeof customPlaceholder === \"function\") {\n      placeholder = customPlaceholder(placeholder, this.#selectedCountry);\n    }\n    this.#ui.telInputEl.setAttribute(\"placeholder\", placeholder);\n  }\n  //* Called when the user selects a list item from the country list (no-op if listItem is null).\n  #selectListItem(listItem) {\n    if (!listItem) {\n      return;\n    }\n    const iso2 = listItem.dataset[DATA_KEYS.ISO2];\n    const countryChanged = this.#updateSelectedCountry(iso2);\n    this.#closeCountrySelectorInternal();\n    const dialCode = listItem.dataset[DATA_KEYS.DIAL_CODE];\n    this.#updateDialCode(dialCode);\n    const inputValue = this.#getTelInputValue();\n    this.#updateValueFromNumber(inputValue);\n    this.#ui.telInputEl.focus();\n    if (countryChanged) {\n      this.#dispatchCountryChangeEvent();\n      this.#dispatchEvent(EVENTS.INPUT, { isCountryChange: true });\n    }\n  }\n  //* Public: close the country selector (consumer-callable; delegates to the internal helper\n  //* without the destroy-specific path).\n  closeCountrySelector() {\n    this.#closeCountrySelectorInternal();\n  }\n  //* Close the country selector and unbind any listeners. The isDestroy flag forces close even\n  //* when dropdownAlwaysOpen is set, so destroy() can fully tear down.\n  #closeCountrySelectorInternal(isDestroy) {\n    if (!this.#ui.isCountrySelectorOpen() || this.#options.dropdownAlwaysOpen && !isDestroy) {\n      return;\n    }\n    this.#ui.closeCountrySelector();\n    this.#dispatchEvent(EVENTS.CLOSE_COUNTRY_SELECTOR);\n  }\n  //* Replace any existing dial code with the new one\n  //* Note: called from selectListItem and setSelectedCountry\n  #updateDialCode(newDialCodeDigits) {\n    const inputValue = this.#getTelInputValue();\n    if (!inputValue.startsWith(\"+\")) {\n      return;\n    }\n    const newDialCode = `+${newDialCodeDigits}`;\n    const prevDialCode = this.#getDialCode(inputValue);\n    let newNumber;\n    if (prevDialCode) {\n      newNumber = inputValue.replace(prevDialCode, newDialCode);\n    } else {\n      newNumber = newDialCode;\n    }\n    this.#setTelInputValue(newNumber);\n  }\n  //* Try and extract a valid international dial code from a full telephone number.\n  //* Note: returns the raw string inc plus character and any whitespace/dots etc.\n  #getDialCode(number, includeAreaCode) {\n    if (!number.startsWith(\"+\")) {\n      return \"\";\n    }\n    let dialCode = \"\";\n    let numericChars = \"\";\n    let foundBaseDialCode = false;\n    for (let i = 0; i < number.length; i++) {\n      const c = number.charAt(i);\n      if (!/[0-9]/.test(c)) {\n        continue;\n      }\n      numericChars += c;\n      const hasMapEntry = Boolean(this.#dialCodeToIso2Map[numericChars]);\n      if (!hasMapEntry) {\n        break;\n      }\n      if (this.#dialCodes.has(numericChars)) {\n        dialCode = number.substring(0, i + 1);\n        foundBaseDialCode = true;\n        if (!includeAreaCode) {\n          break;\n        }\n      } else if (includeAreaCode && foundBaseDialCode) {\n        dialCode = number.substring(0, i + 1);\n      }\n      if (numericChars.length === this.#dialCodeMaxLength) {\n        break;\n      }\n    }\n    return dialCode;\n  }\n  //* Build a full number from an already-normalised value, adding the dial code if separateDialCode is enabled.\n  #buildFullNumber(value) {\n    const dialCode = this.#selectedCountry?.dialCode;\n    const numericValue = getNumeric(value);\n    const usePrefix = this.#options.separateDialCode && !value.startsWith(\"+\") && dialCode && numericValue;\n    return (usePrefix ? `+${dialCode}` : \"\") + value;\n  }\n  //* Get the input value as a full number, adding the dial code if separateDialCode is enabled.\n  #getFullNumber() {\n    const value = this.#getTelInputValue();\n    return this.#buildFullNumber(value);\n  }\n  //* Remove the dial code if separateDialCode is enabled also cap the length if the input has a maxlength attribute\n  #prepareNumberForInput(fullNumber) {\n    const hasValidDialCode = Boolean(this.#getDialCode(fullNumber));\n    const number = stripSeparateDialCode(\n      fullNumber,\n      hasValidDialCode,\n      this.#options.separateDialCode,\n      this.#selectedCountry\n    );\n    return this.#truncateToMaxLength(number);\n  }\n  //* Dispatch the 'countrychange' event.\n  #dispatchCountryChangeEvent() {\n    this.#dispatchEvent(EVENTS.COUNTRY_CHANGE, this.#selectedCountry ?? null);\n  }\n  //**************************\n  //*  INTERNAL METHODS\n  //**************************\n  //* Called when the initial country lookup returns.\n  #handleAutoCountryLoaded() {\n    if (!this.#autoCountryDeferred || !intlTelInput.autoCountry) {\n      return;\n    }\n    if (!this.#isActive) {\n      this.#autoCountryDeferred.resolve();\n      return;\n    }\n    const isFocused = document.activeElement === this.#ui.telInputEl;\n    const hasTypedValue = Boolean(this.#getTelInputValue());\n    if (this.#ui.isLoading() && !(isFocused && hasTypedValue)) {\n      this.setSelectedCountry(intlTelInput.autoCountry);\n    } else {\n      this.#fallbackCountryIso2 = intlTelInput.autoCountry;\n    }\n    this.#ui.setLoading(false);\n    this.#autoCountryDeferred.resolve();\n  }\n  //* Called when the initial country lookup fails or times out.\n  #handleAutoCountryFailure() {\n    if (!this.#isActive) {\n      this.#autoCountryDeferred?.reject();\n      return;\n    }\n    if (this.#ui.isLoading()) {\n      this.#setInitialState(true);\n    }\n    this.#ui.setLoading(false);\n    this.#autoCountryDeferred?.reject();\n  }\n  //* Called when the utils request completes.\n  #handleUtilsLoaded() {\n    if (!this.#isActive) {\n      this.#utilsDeferred?.resolve();\n      return;\n    }\n    if (!intlTelInput.utils) {\n      this.#utilsDeferred?.resolve();\n      return;\n    }\n    const inputValue = this.#getTelInputValue();\n    const isFocused = document.activeElement === this.#ui.telInputEl;\n    if (inputValue && !isFocused) {\n      this.#updateValueFromNumber(inputValue);\n    }\n    if (this.#selectedCountry) {\n      this.#updatePlaceholder();\n      this.#updateMaxCoreNumberLength();\n    }\n    this.#utilsDeferred?.resolve();\n  }\n  //* Called when the utils request fails or times out.\n  #handleUtilsFailure(error) {\n    if (!this.#isActive) {\n      this.#utilsDeferred?.reject(error);\n      return;\n    }\n    this.#utilsDeferred?.reject(error);\n  }\n  //********************\n  //*  PUBLIC METHODS\n  //********************\n  //* Remove core library.\n  destroy() {\n    if (!this.#isActive) {\n      return;\n    }\n    this.#isActive = false;\n    if (this.#options.countrySelectorMode !== COUNTRY_SELECTOR_MODE.OFF) {\n      this.#closeCountrySelectorInternal(true);\n    }\n    this.#abortController.abort();\n    this.#ui.destroy();\n    intlTelInput.instances.delete(String(this.id));\n  }\n  // check if the instance is still valid (not destroyed)\n  isActive() {\n    return this.#isActive;\n  }\n  //* Get the extension from the current number.\n  getExtension() {\n    if (!this.#isActive) {\n      return \"\";\n    }\n    ensureUtils(\"getExtension\");\n    return intlTelInput.utils.getExtension(\n      this.#getFullNumber(),\n      this.#selectedCountry?.iso2\n    );\n  }\n  //* Format the number to the given format (defaults to \"E164\").\n  getNumber(format) {\n    if (!this.#isActive) {\n      return \"\";\n    }\n    ensureUtils(\"getNumber\");\n    const iso2 = this.#selectedCountry?.iso2;\n    const fullNumber = this.#getFullNumber();\n    const formattedNumber = intlTelInput.utils.formatNumber(\n      fullNumber,\n      iso2,\n      format\n    );\n    return this.#numerals.denormalise(formattedNumber);\n  }\n  //* Get the type of the entered number e.g. \"FIXED_LINE\" / \"MOBILE\", or null if it can't be determined / instance is destroyed.\n  getNumberType() {\n    if (!this.#isActive) {\n      return null;\n    }\n    ensureUtils(\"getNumberType\");\n    return intlTelInput.utils.getNumberType(\n      this.#getFullNumber(),\n      this.#selectedCountry?.iso2\n    );\n  }\n  //* Get the country data for the currently selected country.\n  getSelectedCountry() {\n    return this.#selectedCountry ?? null;\n  }\n  //* Get the validation error e.g. \"TOO_SHORT\" / \"TOO_LONG\", or null if it can't be determined / instance is destroyed.\n  getValidationError() {\n    if (!this.#isActive) {\n      return null;\n    }\n    ensureUtils(\"getValidationError\");\n    const iso2 = this.#selectedCountry?.iso2;\n    return intlTelInput.utils.getValidationError(this.#getFullNumber(), iso2);\n  }\n  //* Validate the input value using number length only\n  isValidNumber() {\n    if (!this.#isActive) {\n      return null;\n    }\n    ensureUtils(\"isValidNumber\");\n    const dialCode = this.#selectedCountry?.dialCode;\n    const iso2 = this.#selectedCountry?.iso2;\n    const number = this.#getFullNumber();\n    const coreNumber = intlTelInput.utils.getCoreNumber(number, iso2);\n    if (coreNumber) {\n      if (dialCode === UK.DIAL_CODE) {\n        if (coreNumber[0] === UK.MOBILE_PREFIX && coreNumber.length !== UK.MOBILE_CORE_LENGTH) {\n          return false;\n        }\n      }\n      const hasAlphaChar = REGEX.ALPHA_UNICODE.test(number);\n      if (!hasAlphaChar && dialCode) {\n        const nationalPortion = number.startsWith(\"+\") ? number.slice(1 + dialCode.length) : number;\n        const nationalDigitCount = getNumeric(nationalPortion).length;\n        if (coreNumber.length > nationalDigitCount) {\n          return false;\n        }\n      }\n    }\n    return this.#validateNumber(\"possible\");\n  }\n  //* Validate the input value with precise validation\n  isValidNumberPrecise() {\n    if (!this.#isActive) {\n      return null;\n    }\n    ensureUtils(\"isValidNumberPrecise\");\n    return this.#validateNumber(\"precise\");\n  }\n  //* Shared internal validation logic to handle alpha character extension rules.\n  #validateNumber(mode) {\n    const { allowNumberExtensions, allowPhonewords, allowedNumberTypes } = this.#options;\n    const iso2 = this.#selectedCountry?.iso2;\n    const value = this.#getFullNumber();\n    if (!this.#selectedCountry && !hasRegionlessDialCode(value)) {\n      return false;\n    }\n    const check = mode === \"precise\" ? intlTelInput.utils.isValidNumberPrecise : intlTelInput.utils.isValidNumber;\n    if (!check(value, iso2, allowedNumberTypes)) {\n      return false;\n    }\n    if (REGEX.ALPHA_UNICODE.test(value)) {\n      const hasExtension = Boolean(\n        intlTelInput.utils.getExtension(value, iso2)\n      );\n      return hasExtension ? allowNumberExtensions : allowPhonewords;\n    }\n    return true;\n  }\n  //* Update the selected country, and update the input value accordingly.\n  setSelectedCountry(iso2) {\n    if (!this.#isActive) {\n      return;\n    }\n    const iso2Lower = iso2?.toLowerCase();\n    if (!isIso2(iso2Lower)) {\n      throw new Error(`Invalid iso2 code: '${iso2Lower}'`);\n    }\n    const currentCountry = this.#selectedCountry?.iso2;\n    const isCountryChange = iso2 && iso2Lower !== currentCountry || !iso2 && currentCountry;\n    if (!isCountryChange) {\n      return;\n    }\n    this.#updateSelectedCountry(iso2Lower);\n    this.#updateDialCode(this.#selectedCountry?.dialCode || \"\");\n    const inputValue = this.#getTelInputValue();\n    this.#updateValueFromNumber(inputValue);\n    this.#dispatchCountryChangeEvent();\n    this.#dispatchEvent(EVENTS.INPUT, { isCountryChange: true });\n  }\n  //* Set the input value and update the country.\n  setNumber(number) {\n    if (!this.#isActive) {\n      return;\n    }\n    const normalisedNumber = this.#numerals.normalise(number);\n    const countryChanged = this.#updateCountryFromNumber(normalisedNumber);\n    this.#updateValueFromNumber(normalisedNumber);\n    if (countryChanged) {\n      this.#dispatchCountryChangeEvent();\n    }\n    this.#dispatchEvent(EVENTS.INPUT, { isSetNumber: true });\n  }\n  //* Set the placeholder number type\n  setPlaceholderNumberType(type) {\n    if (!this.#isActive) {\n      return;\n    }\n    this.#options.placeholderNumberType = type;\n    this.#updatePlaceholder();\n  }\n  // Set the disabled state of the input and country selector.\n  setDisabled(disabled) {\n    if (!this.#isActive) {\n      return;\n    }\n    this.#ui.setDisabled(disabled);\n  }\n  // Set the readonly state of the input and country selector.\n  setReadonly(readonly) {\n    if (!this.#isActive) {\n      return;\n    }\n    this.#ui.setReadonly(readonly);\n  }\n  //********************\n  //*  STATIC METHODS\n  //********************\n  // Internal instance notification used by utils/initial-country loaders.\n  // Kept public so module-level helpers (e.g. attachUtils) can call it, while still allowing\n  // access to private instance methods.\n  static forEachInstance(method, ...args) {\n    const values = [...intlTelInput.instances.values()];\n    const arg = args[0];\n    values.forEach((instance) => {\n      if (!(instance instanceof _Iti)) {\n        return;\n      }\n      switch (method) {\n        case \"handleUtilsLoaded\":\n          instance.#handleUtilsLoaded();\n          break;\n        case \"handleUtilsFailure\":\n          instance.#handleUtilsFailure(arg);\n          break;\n        case \"handleAutoCountryLoaded\":\n          instance.#handleAutoCountryLoaded();\n          break;\n        case \"handleAutoCountryFailure\":\n          instance.#handleAutoCountryFailure();\n          break;\n      }\n    });\n  }\n};\nvar attachUtils = async (source) => {\n  if (intlTelInput.utils || intlTelInput.startedLoadingUtils) {\n    return null;\n  }\n  if (typeof source !== \"function\") {\n    throw new TypeError(\n      `The argument passed to attachUtils must be a function that returns a promise for the utils module, not ${typeof source}`\n    );\n  }\n  intlTelInput.startedLoadingUtils = true;\n  try {\n    const module = await source();\n    const utils = module?.default;\n    if (!utils || typeof utils !== \"object\") {\n      throw new TypeError(\n        \"The loader function passed to attachUtils did not resolve to a module object with utils as its default export.\"\n      );\n    }\n    intlTelInput.utils = utils;\n    Iti.forEachInstance(\"handleUtilsLoaded\");\n    return true;\n  } catch (error) {\n    Iti.forEachInstance(\"handleUtilsFailure\", error);\n    throw error;\n  }\n};\nvar intlTelInput = Object.assign(\n  (input, options) => {\n    const iti = new Iti(input, options);\n    intlTelInput.instances.set(String(iti.id), iti);\n    input.iti = iti;\n    return iti;\n  },\n  {\n    defaults,\n    //* Using a static var like this allows us to mock it in the tests.\n    documentReady: () => document.readyState === \"complete\",\n    //* Get the full list of all countries the library knows about.\n    getAllCountries: () => data_default,\n    //* A getter for the core library instance.\n    getInstance: (input) => {\n      const id = input.dataset[DATA_KEYS.INSTANCE_ID];\n      return id ? intlTelInput.instances.get(id) ?? null : null;\n    },\n    //* A map from instance ID to instance object.\n    instances: /* @__PURE__ */ new Map(),\n    attachUtils,\n    startedLoadingUtils: false,\n    startedLoadingAutoCountry: false,\n    version: \"29.2.3\",\n    NUMBER_FORMAT,\n    NUMBER_TYPE,\n    VALIDATION_ERROR,\n    PLACEHOLDER_POLICY,\n    COUNTRY_SELECTOR_MODE\n  }\n);\nvar intlTelInput_default = intlTelInput;\nexport {\n  COUNTRY_SELECTOR_MODE,\n  Iti,\n  NUMBER_FORMAT,\n  NUMBER_TYPE,\n  PLACEHOLDER_POLICY,\n  VALIDATION_ERROR,\n  intlTelInput_default as default\n};\n", "import { Controller } from \"@hotwired/stimulus\"\nimport intlTelInput from 'intl-tel-input'\nimport * as bootstrap from \"bootstrap\"\n\n// Connects to data-controller=\"reporting\"\nexport default class extends Controller {\n  static values = {\n    templateTypes: Array,\n    templates: Array,\n    profiles: Array,\n    language: String,\n  };\n  static targets = [\n    \"templateType\", \"deleteReportingTemplateButton\", \"deleteReportingTemplateModal\", \"greekContactIdWarningModal\",\n    \"newProfileForm\", \"submitForm\", \"submitUpdateTemplate\",\n    // contact id\n    \"contactIdOptions\", \"contactIdPrimaryPhone\", \"contactIdPrimaryDestination\", \"contactIdSecondaryPhone\", \"contactIdSecondaryDestination\",\n    \"phone\", \"secondaryPhone\", \"contactIdTypeChoice\",\n    // csv\n    \"csvOptions\", \"csvPrimaryIpAddress\", \"csvPrimaryIpPort\", \"csvSecondaryIpAddress\",\n    \"csvSecondaryIpPort\", \"csvProtocol\", \"csvProtocolChoice\", \"csvEncryption\",\n    \"csvEncryption\", \"csvUsername\", \"csvPassword\",\n    // sia\n    \"siaOptions\", \"siaPrimaryIpAddress\", \"siaPrimaryIpPort\", \"siaSecondaryIpAddress\",\n    \"siaSecondaryIpPort\", \"siaProtocol\", \"siaProtocolChoice\", \"siaEncryption\", \"siaMessageFormat\",\n    \"siaReceiverNumber\", \"siaAccountPrefix\", \"siaAddEventText\", \"siaAddTimestamp\",\n    \"siaAddEventTextHolder\", \"siaAddTimestampHolder\",\n    //  mvr\n    \"mvrOptions\", \"mvrBaseStationId\",\n    \"mvrReceiverNumber\", \"mvrLineNumber\",\n    \"mvrBaseStationIdHolder\",\n    // profile\n    \"profileTemplate\", \"profileTemplateType\", \"profileTemplateTypeFormInput\",\n    \"accountNumberHolder\", \"accountNumber\",\n    \"submitProfile\", \"accountNumberInUseAlert\", \"accountNumberInUsePanel\",\n    \"viewReportingProfilePage\", \"deleteReportingTemplateProfileButton\",\n    \"contactIdSecondaryPhoneHolder\",\n    // Template Migration\n    \"reportingOldTemplateId\", \"reportingOldProfileRoute\", \"reportingOldTemplateSelect\",\n  ];\n\n  showDeleteTemplateModal(event) {\n    if (this.hasDeleteReportingTemplateModalTarget) {\n      this.deleteReportingTemplateButtonTarget.href = event.params['deleteRoute']\n      if (!this.deleteReportingTemplateModal) {\n        this.deleteReportingTemplateModal = new bootstrap.Modal(this.deleteReportingTemplateModalTarget, { keyboard: false });\n      }\n      if (this.deleteReportingTemplateModal) {\n        this.deleteReportingTemplateModal.show()\n      }\n    }\n  }\n\n  checkGreekNewReportingProfile(event) {\n    if (this.selectedTemplate && this.selectedTemplate.type == this.templateTypesValue[0]) {\n      if (!this.greekContactIdWarningModal) {\n        this.greekContactIdWarningModal = new bootstrap.Modal(this.greekContactIdWarningModalTarget, { keyboard: false });\n      }\n      if (this.greekContactIdWarningModal) {\n        this.greekContactIdWarningModal.show();\n      }\n    } else {\n      this.submitForm(event);\n    }\n  }\n\n  submitForm(event) {\n    this.newProfileFormTarget.submit()\n  }\n\n  viewReportingProfilePageTargetConnected(target) {\n    var template = this.findSelectedTemplate(this.profileTemplateTarget.value)\n    if (template) {\n      this.selectedTemplate = template\n      this.checkValidAccountNumber()\n    }\n  }\n\n  templateTypeChanged(event) {\n    // HARD LOOKUP TO B2B_REPORTING_TYPES\n    if (this.hasSubmitUpdateTemplateFormTarget) {\n      this.submitUpdateTemplateFormTarget.disabled = false;\n    }\n    this.submitFormTarget.disabled = false;\n    if (this.getSelectedTemplateType() == 'cid') {\n      this.showContactId()\n      this.hideCsv()\n      this.hideSia()\n      this.hideMvr()\n      if (this.hasSubmitUpdateTemplateFormTarget) {\n        this.submitUpdateTemplateFormTarget.disabled = true;\n      }\n      this.submitFormTarget.disabled = true;\n    } else if (this.getSelectedTemplateType() == 'csv') {\n      this.hideContactId()\n      this.showCsv()\n      this.hideSia()\n      this.hideMvr()\n    } else if (this.getSelectedTemplateType() == 'sia') {\n      this.hideContactId()\n      this.hideCsv()\n      this.showSia()\n      this.hideMvr()\n    } else if (this.getSelectedTemplateType() == 'mvr') {\n      this.hideContactId()\n      this.hideCsv()\n      this.hideSia()\n      this.showMvr()\n    } else {\n      this.hideContactId()\n      this.hideCsv()\n      this.hideSia()\n      this.hideMvr()\n    }\n  }\n\n  findSelectedTemplate(templateId) {\n    return this.templatesValue.find(template => {\n      return template.id == templateId\n    })\n  }\n\n  checkIfAccountNumberInUse() {\n    var trimmed_profiles = this.profilesValue.filter(profile => {\n      return profile.template == this.selectedTemplate.id\n    });\n    if (trimmed_profiles) {\n      var found_profile = trimmed_profiles.find(profile => {\n        return profile.account == this.accountNumberTarget.value\n      })\n      if (found_profile) {\n        this.accountNumberTarget.classList.remove('alert-success')\n        this.accountNumberTarget.classList.remove('bg-verified')\n        this.accountNumberTarget.classList.add('alert-danger')\n        this.accountNumberTarget.classList.add('bg-unverified')\n        this.submitProfileTarget.disabled = true\n        this.accountNumberInUsePanelTarget.text = found_profile.serial\n        this.accountNumberInUsePanelTarget.href = '/reportingProfile/' + found_profile.serial\n        this.accountNumberInUseAlertTarget.classList.remove('d-none')\n        return true\n      } else {\n        this.submitProfileTarget.disabled = false\n        this.accountNumberInUseAlertTarget.classList.add('d-none')\n      }\n    }\n    return false\n  }\n\n  profileTemplateChanged(event) {\n    var template = this.findSelectedTemplate(this.profileTemplateTarget.value)\n    if (template) {\n      this.selectedTemplate = template\n      this.hideContactId()\n      this.hideCsv()\n      this.hideSia()\n      this.hideMvr()\n      // HARD LOOKUP TO B2B_REPORTING_TYPES\n      if (template.type == 'cid') {\n        this.setupContactIdTemplateForProfile(template)\n        this.profileTemplateTypeFormInputTarget.value = template.type\n        this.accountNumberHolderTarget.classList.remove('d-none')\n        if (this.hasLanguageValue && this.languageValue == 'el') {\n          this.showGreekContactIDWarning\n        }\n      } else if (template.type == 'csv') {\n        this.setupCsvTemplateForProfile(template)\n        this.profileTemplateTypeFormInputTarget.value = template.type\n        this.accountNumberHolderTarget.classList.remove('d-none')\n      } else if (template.type == 'sia') {\n        this.setupSiaTemplateForProfile(template)\n        this.profileTemplateTypeFormInputTarget.value = template.type\n        this.accountNumberHolderTarget.classList.remove('d-none')\n      } else if (template.type == 'mvr') {\n        this.setupMvrTemplateForProfile(template)\n        this.profileTemplateTypeFormInputTarget.value = template.type\n        this.accountNumberHolderTarget.classList.remove('d-none')\n      } else {\n        this.hideContactId()\n        this.hideCsv()\n        this.hideSia()\n        this.hideMvr()\n        this.profileTemplateTypeFormInputTarget.value = ''\n        this.accountNumberTarget.value = ''\n        this.accountNumberHolderTarget.classList.add('d-none')\n        this.selectedTemplate = null\n      }\n    } else {\n        this.hideContactId()\n        this.hideCsv()\n        this.hideSia()\n        this.hideMvr()\n        this.profileTemplateTypeTarget.value = -1 \n        this.profileTemplateTypeFormInputTarget.value = ''\n        this.accountNumberTarget.value = ''\n        this.accountNumberHolderTarget.classList.add('d-none')\n        this.selectedTemplate = null\n    }\n  }\n\n  deleteReportingTemplateProfile(event) {\n    if (this.hasDeleteReportingTemplateProfileButtonTarget) {\n      this.deleteReportingTemplateProfileButtonTarget.href = event.params['deleteRoute']\n      if (!this.deleteReportingTemplateModal) {\n        this.deleteReportingTemplateModal = new bootstrap.Modal(this.deleteReportingTemplateModalTarget, { keyboard: false });\n      }\n      if (this.deleteReportingTemplateModal) {\n        this.deleteReportingTemplateModal.show()\n      }\n    }\n  }\n\n  setupContactIdTemplateForProfile(template) {\n    this.profileTemplateTypeTarget.value = template.type\n    this.contactIdOptionsTarget.classList.remove('d-none')\n    this.phoneTarget.value = template.cid_primary_destination\n    this.contactIdPrimaryPhoneTarget.value = template.cid_primary_destination\n    if (template.cid_primary_destination.startsWith('+6113'))  {\n      this.contactIdSecondaryPhoneHolderTarget.classList.add('d-none')\n    } else {\n      this.contactIdSecondaryPhoneHolderTarget.classList.remove('d-none')\n      this.secondaryPhoneTarget.value = template.cid_secondary_destination\n      this.contactIdSecondaryPhoneTarget.value = template.cid_secondary_destination\n    }\n    this.phoneTarget.dispatchEvent(new Event('change'))\n  }\n\n  setupCsvTemplateForProfile(template) {\n    this.profileTemplateTypeTarget.value = template.type\n    this.csvOptionsTarget.classList.remove('d-none')\n    this.csvPrimaryIpAddressTarget.value = template.csv_primary_ip_address\n    this.csvPrimaryIpPortTarget.value = template.csv_primary_ip_port\n    this.csvSecondaryIpAddressTarget.value = template.csv_secondary_ip_address\n    this.csvSecondaryIpPortTarget.value = template.csv_secondary_ip_port\n    this.csvProtocolTarget.value = template.csv_protocol\n    if (this.hasCsvProtocolChoiceTarget) {\n      this.csvProtocolChoiceTarget.value = template.csv_protocol;\n      this.csvProtocolChoiceTarget.dispatchEvent(new Event('change'));\n    }\n    this.csvEncryptionTarget.value = template.csv_encryption\n    this.csvUsernameTarget.value = template.csv_username\n    this.csvPasswordTarget.value = template.csv_password\n    this.csvProtocolTarget.dispatchEvent(new Event('change'));\n  }\n\n  setupSiaTemplateForProfile(template) {\n    this.profileTemplateTypeTarget.value = template.type\n    this.siaOptionsTarget.classList.remove('d-none')\n    this.siaPrimaryIpAddressTarget.value = template.sia_primary_ip_address\n    this.siaPrimaryIpPortTarget.value = template.sia_primary_ip_port\n    this.siaSecondaryIpAddressTarget.value = template.sia_secondary_ip_address\n    this.siaSecondaryIpPortTarget.value = template.sia_secondary_ip_port\n    this.siaProtocolTarget.value = template.sia_protocol\n    if (this.hasSiaProtocolChoiceTarget) {\n      this.siaProtocolChoiceTarget.value = template.sia_protocol\n      this.siaProtocolChoiceTarget.dispatchEvent(new Event('change'))\n    }\n    this.siaEncryptionTarget.value = template.sia_encryption\n    this.siaMessageFormatTarget.value = template.sia_message_format\n    this.siaReceiverNumberTarget.value = template.sia_receiver_number\n    this.siaAccountPrefixTarget.value = template.sia_account_prefix\n    this.siaAddEventTextHolderTarget.classList.remove('d-none')\n    this.siaAddEventTextTarget.value = template.sia_add_event_text\n    this.siaAddEventTextTarget.checked = template.sia_add_event_text\n    this.siaAddTimestampHolderTarget.classList.remove('d-none')\n    this.siaAddTimestampTarget.value = template.sia_add_timestamp\n    this.siaAddTimestampTarget.checked = template.sia_add_timestamp\n    this.siaProtocolTarget.dispatchEvent(new Event('change'))\n    this.siaMessageFormatTarget.dispatchEvent(new Event('change'))\n  }\n\n  setupMvrTemplateForProfile(template) {\n    this.profileTemplateTypeTarget.value = template.type;\n    this.mvrOptionsTarget.classList.remove('d-none');\n    this.mvrBaseStationIdTarget.value = template.mvr_base_stations_id;\n    this.mvrReceiverNumberTarget.value = template.mvr_receiver_number;\n    this.mvrLineNumberTarget.value = template.mvr_line_number;\n  }\n\n  checkValidAccountNumber(event) {\n    var regexResult = false\n    if (this.selectedTemplate) {\n      if (this.selectedTemplate.type == 'cid' || this.selectedTemplate.type == 'csv') {\n        regexResult = /^([0-9B-Fb-f]{4})$/.test(this.accountNumberTarget.value)\n      } else {\n        regexResult = /^([0-9B-Fb-f]{3,16})$/.test(this.accountNumberTarget.value) // SIA\n      }\n    }\n    if (regexResult) {\n      if (this.checkIfAccountNumberInUse()) {\n        return\n      }\n      this.accountNumberTarget.classList.remove('alert-danger')\n      this.accountNumberTarget.classList.remove('bg-unverified')\n      this.accountNumberTarget.classList.add('alert-success')\n      this.accountNumberTarget.classList.add('bg-verified')\n    } else {\n      this.accountNumberTarget.classList.remove('alert-success')\n      this.accountNumberTarget.classList.remove('bg-verified')\n      this.accountNumberTarget.classList.add('alert-danger')\n      this.accountNumberTarget.classList.add('bg-unverified')\n    }\n  }\n\n  resetContactId() {\n    if (this.hasContactIdPrimaryPhoneTarget) {\n      this.contactIdPrimaryPhoneTarget.value = ''\n      this.contactIdSecondaryPhoneTarget.value = ''\n      this.contactIdPrimaryPhoneTarget.removeAttribute('required')\n      this.contactIdSecondaryPhoneTarget.removeAttribute('required')\n      this.phoneTarget.value = ''\n      this.secondaryPhoneTarget.value = ''\n      this.phoneTarget.removeAttribute('required')\n      this.secondaryPhoneTarget.removeAttribute('required')\n    }\n  }\n\n  resetCsv() {\n    this.csvPrimaryIpAddressTarget.value = ''\n    this.csvPrimaryIpPortTarget.value = ''\n    this.csvSecondaryIpAddressTarget.value = ''\n    this.csvSecondaryIpPortTarget.value = ''\n    this.csvProtocolTarget.value = ''\n    if (this.hasCsvProtocolChoiceTarget) {\n      this.csvProtocolChoiceTarget.value = ''\n      this.csvProtocolChoiceTarget.dispatchEvent(new Event('change'));\n    }\n    this.csvEncryptionTarget.value = ''\n    this.csvUsernameTarget.value = ''\n    this.csvPasswordTarget.value = ''\n    this.csvPrimaryIpAddressTarget.removeAttribute('required')\n    this.csvPrimaryIpPortTarget.removeAttribute('required')\n    this.csvProtocolTarget.removeAttribute('required')\n    this.csvProtocolTarget.dispatchEvent(new Event('change'));\n  }\n\n  resetSia() {\n    this.siaPrimaryIpAddressTarget.value = ''\n    this.siaPrimaryIpPortTarget.value = ''\n    this.siaSecondaryIpAddressTarget.value = ''\n    this.siaSecondaryIpPortTarget.value = ''\n    this.siaProtocolTarget.value = ''\n    this.siaEncryptionTarget.value = ''\n    this.siaMessageFormatTarget.value = ''\n    this.siaReceiverNumberTarget.value = ''\n    this.siaAccountPrefixTarget.value = ''\n    this.siaAddEventTextTarget.value = ''\n    this.siaAddTimestampTarget.value = ''\n    this.siaAddEventTextHolderTarget.classList.add('d-none')\n    this.siaAddEventTextTarget.value = ''\n    this.siaAddEventTextTarget.checked = ''\n    this.siaAddEventTextTarget.disabled = true\n    this.siaAddTimestampHolderTarget.classList.add('d-none')\n    this.siaAddTimestampTarget.value = ''\n    this.siaAddTimestampTarget.checked = ''\n    this.siaAddTimestampTarget.disabled = true\n    if (this.hasSiaProtocolChoiceTarget) {\n      this.siaProtocolChoiceTarget.value = ''\n      this.siaProtocolChoiceTarget.dispatchEvent(new Event('change'))\n    }\n    this.siaPrimaryIpAddressTarget.removeAttribute('required')\n    this.siaPrimaryIpPortTarget.removeAttribute('required')\n    this.siaProtocolTarget.removeAttribute('required')\n    this.siaProtocolTarget.dispatchEvent(new Event('change'))\n    this.siaMessageFormatTarget.removeAttribute('required')\n    this.siaMessageFormatTarget.dispatchEvent(new Event('change'))\n  }\n\n  resetMvr() {\n    this.mvrBaseStationIdTarget.value = ''\n    this.mvrReceiverNumberTarget.value = ''\n    this.mvrLineNumberTarget.value = ''\n    this.mvrBaseStationIdTarget.removeAttribute('required')\n    this.mvrBaseStationIdTarget.dispatchEvent(new Event('change'))\n  }\n\n  showContactId() {\n    if (this.hasContactIdOptionsTarget) {\n      this.contactIdOptionsTarget.classList.remove('d-none')\n    }\n    if (this.hasContactIdTypeChoiceTarget) {\n      this.contactIdTypeChoiceTarget.classList.remove('d-none')\n    }\n  }\n\n  hideContactId() {\n    if (this.hasContactIdOptionsTarget) {\n      this.contactIdOptionsTarget.classList.add('d-none')\n      if (this.hasContactIdTypeChoiceTarget) {\n        this.contactIdTypeChoiceTarget.classList.add('d-none')\n      }\n      this.contactIdPrimaryPhoneTarget.classList.add('d-none')\n      this.contactIdSecondaryPhoneTarget.classList.add('d-none')\n      this.resetContactId()\n    }\n  }\n\n  show13numberOptions() {\n    this.contactIdPrimaryPhoneTarget.classList.remove('d-none')\n    this.contactIdSecondaryPhoneTarget.classList.add('d-none')\n    this.phoneTarget.setAttribute('required', 'true')\n    this.secondaryPhoneTarget.removeAttribute('required')\n    this.contactIdPrimaryDestinationTarget.setAttribute('required', 'true')\n    this.contactIdSecondaryDestinationTarget.removeAttribute('required')\n  }\n\n  showLandlineOptions() {\n    this.contactIdPrimaryPhoneTarget.classList.remove('d-none')\n    this.contactIdSecondaryPhoneTarget.classList.remove('d-none')\n    this.phoneTarget.setAttribute('required', 'true')\n    this.secondaryPhoneTarget.setAttribute('required', 'true')\n    this.contactIdPrimaryDestinationTarget.setAttribute('required', 'true')\n    this.contactIdSecondaryDestinationTarget.setAttribute('required', 'true')\n  }\n\n  showCsv() {\n    if (this.hasCsvOptionsTarget) {\n      this.csvOptionsTarget.classList.remove('d-none')\n      this.csvPrimaryIpAddressTarget.required = true\n      this.csvPrimaryIpPortTarget.required = true\n      this.csvProtocolTarget.required = true\n    }\n  }\n\n  hideCsv() {\n    if (this.hasCsvOptionsTarget) {\n      this.csvOptionsTarget.classList.add('d-none')\n      this.resetCsv()\n    }\n  }\n\n  showSia() {\n    if (this.hasSiaOptionsTarget) {\n      this.siaOptionsTarget.classList.remove('d-none')\n      this.siaPrimaryIpAddressTarget.required = true\n      this.siaPrimaryIpPortTarget.required = true\n      this.siaProtocolTarget.required = true\n      this.siaMessageFormatTarget.required = true\n    }\n  }\n\n  updateSiaMessageFormatOptions() {\n    if (this.siaMessageFormatTarget.value == 'SIA-DCS') {\n      this.siaAddEventTextHolderTarget.classList.remove('d-none')\n      this.siaAddEventTextTarget.disabled = false\n      this.siaAddTimestampHolderTarget.classList.remove('d-none')\n      this.siaAddTimestampTarget.disabled = false\n    } else {\n      this.siaAddEventTextHolderTarget.classList.add('d-none')\n      this.siaAddEventTextTarget.value = ''\n      this.siaAddEventTextTarget.checked = ''\n      this.siaAddEventTextTarget.disabled = true\n      this.siaAddTimestampHolderTarget.classList.add('d-none')\n      this.siaAddTimestampTarget.value = ''\n      this.siaAddTimestampTarget.checked = ''\n      this.siaAddTimestampTarget.disabled = true\n    }\n  }\n\n  hideSia() {\n    if (this.hasSiaOptionsTarget) {\n      this.siaOptionsTarget.classList.add('d-none')\n      this.resetSia()\n    }\n  }\n\n  showMvr() {\n    if (this.hasMvrOptionsTarget) {\n      this.mvrOptionsTarget.classList.remove('d-none')\n      this.mvrBaseStationIdTarget.required = true\n    }\n  }\n\n  hideMvr() {\n    if (this.hasMvrOptionsTarget) {\n      this.mvrOptionsTarget.classList.add('d-none')\n      this.resetMvr()\n    }\n  }\n\n  getSelectedTemplateType() {\n    if (this.hasTemplateTypeTarget) {\n      return String([...this.templateTypeTarget.selectedOptions].map(option => option.value)[0])\n    }\n  }\n\n  setupReportingTemplateMigration(event) {\n    if (this.hasReportingOldTemplateIdTarget) {\n      this.reportingOldTemplateIdTarget.value = event.params['oldTemplate']\n    }\n    if (this.hasReportingOldProfileRouteTarget) {\n      this.reportingOldProfileRouteTarget.value = event.params['oldProfileRoute']\n    }\n    if (this.hasReportingOldTemplateSelectTarget) {\n      this.reportingOldTemplateSelectTarget.value = event.params['oldTemplate']\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport Chart from 'chart.js/auto';\n\n// Connects to data-controller=\"session-statistics\"\nexport default class extends Controller {\n  static values = {\n    dateChartTitle: String,\n    firmwareChartTitle: String,\n  }\n  static targets = [\n    'sessionStatisticsGraphByDate',\n    'sessionStatisticsGraphByFirmware',\n  ];\n\n  colorOK = 'rgba(29, 211, 109, 0.55)';\n  colorError1 = 'rgba(255, 33, 0, 0.55)';\n  colorError2 = 'rgba(230, 33, 0, 0.55)';\n  colorError3 = 'rgba(205, 33, 0, 0.55)';\n  colorError4 = 'rgba(180, 33, 0, 0.55)';\n  colorError5 = 'rgba(155, 33, 0, 0.55)';\n\n  connect() {\n    fetch('sessionStatisticsGraphData', {\n      method: 'get',\n      headers: { 'Content-Type': 'application/json;charset=utf-8' },\n    })\n      .then((response) => response.json())\n      .then((responseData) => {\n        this.sessionStatisticsChartByDate = this.buildGraph(\n          this.sessionStatisticsGraphByDateTarget,\n          responseData['statistics_by_date'],\n          'date_created',\n          this.dateChartTitleValue\n        );\n        this.sessionStatisticsChartByFirmware = this.buildGraph(\n          this.sessionStatisticsGraphByFirmwareTarget,\n          responseData['statistics_by_firmware'],\n          'panel_firmware',\n          this.firmwareChartTitleValue\n        );\n      })\n      .catch((err) => {\n        // console.log('Error getting session statistics data: ' + err);\n      });\n  }\n\n  buildGraph(target, data, columnNameKey, graphTitle) {\n    // This function assumes that the data comes in this format:\n    // [\n    //   {[columnNameKey]: '', \n    //   final_status: int, \n    //   session_count: int,\n    //   final_status_title: ''\n    //   },\n    //   {[columnNameKey]: '', \n    //   final_status: int, \n    //   session_count: int,\n    //   final_status_title: ''\n    //   },\n    // ]  \n    // There should only be one object for every unique final status, which may\n    // require data to be amalgamated beforehand.\n\n    // Format data in usable way by the chart.js\n    // Sort the dataset by column, which is defined in columnNameKey\n    let datasetsByColumn = [];\n    let finalStatusMap = new Map();\n\n    data.forEach((session) => {\n      const foundDateObject = datasetsByColumn.find(\n        (obj) => obj[columnNameKey] === session[columnNameKey]\n      );\n\n      if (foundDateObject) {\n        foundDateObject.sessionList.push(session);\n      } else {\n        let pushObj = {\n          [columnNameKey]: session[columnNameKey],\n          sessionList: [session],\n        };\n        datasetsByColumn.push(pushObj);\n      }\n\n      if (!finalStatusMap.has(session.final_status)) {\n        finalStatusMap.set(session.final_status, session.final_status_title);\n      }\n    });\n    datasetsByColumn.sort((a, b) =>\n      a[columnNameKey].localeCompare(b[columnNameKey])\n    );\n\n    let columnLabels = [];\n    let datasetsByFinalStatus = [];\n\n    // For each day, create an array of all the dates to pass to labels.\n    // For each session in a day, check if there is an object with the correct\n    // status in formattedDataset\n\n    let finalStatusIterator = finalStatusMap.entries();\n\n    for (let [key, value] of finalStatusIterator) {\n      let statusDataSet = {\n        label: value,\n        final_status: key,\n        data: [],\n      };\n\n      switch (key) {\n        case 1:\n          statusDataSet.backgroundColor = this.colorOK;\n          break;\n\n        case 18:\n          statusDataSet.backgroundColor = this.colorError1;\n          break;\n\n        case 8:\n          statusDataSet.backgroundColor = this.colorError2;\n          break;\n\n        case 14:\n          statusDataSet.backgroundColor = this.colorError3;\n          break;\n\n        default:\n          statusDataSet.backgroundColor = this.colorError4;\n      }\n\n      datasetsByFinalStatus.push(statusDataSet);\n    }\n\n    datasetsByColumn.forEach((columnObject) => {\n      // Counts how many sessions in each day\n      let totalDailySessions = 0;\n\n      // Initilises each section of data with 0 to be overwritten later if the\n      // final status appears in sessions in that day\n      datasetsByFinalStatus.forEach((dataset) => {\n        dataset.data.push(0);\n      });\n\n      columnObject.sessionList.forEach((session) => {\n        totalDailySessions += session.session_count;\n\n        const foundObjWithStatus = datasetsByFinalStatus.find(\n          (obj) => obj.final_status === session.final_status\n        );\n\n        // If there is an object with the correct status in formattedDataset,\n        // replace the previously initialised 0 with correct session count.\n        if (foundObjWithStatus) {\n          foundObjWithStatus.data[foundObjWithStatus.data.length - 1] =\n            session.session_count;\n        }\n        // If not, add an object with the correct status in formattedDataset\n        // else {\n        //   console.log(\"Error: Couldn't find FinalStatus parent object.\");\n        // }\n      });\n\n      // Add session count to be below column name\n      columnLabels.push([columnObject[columnNameKey], 'Total: ' + totalDailySessions]);\n\n      // Calculate the percentage that each final_status appeared\n      columnObject.percentagesByStatus = new Map();\n\n      columnObject.sessionList.forEach((session) => {\n        columnObject.percentagesByStatus.set(\n          session.final_status,\n          session.session_count / totalDailySessions\n        );\n      });\n    });\n\n    // Move the OK sessions to the bottom of the bar graph\n    const sessionToMove = datasetsByFinalStatus.find(\n      (obj) => obj.final_status === 1\n    );\n    if (sessionToMove) {\n      datasetsByFinalStatus.splice(datasetsByFinalStatus.indexOf(sessionToMove), 1);\n      datasetsByFinalStatus.unshift(sessionToMove);\n    }\n\n    // Rename the labels\n    datasetsByFinalStatus.forEach((element) => {\n      if (element.final_status != 1) {\n        element.label = 'ERROR - ' + element.label;\n      }\n    });\n\n    return new Chart(target, {\n      type: 'bar',\n      data: {\n        labels: columnLabels,\n        datasets: datasetsByFinalStatus,\n      },\n      interaction: {\n        mode: 'nearest',\n        axis: 'x',\n        intersect: false,\n      },\n      options: {\n        scales: {\n          x: { stacked: true },\n          y: { stacked: true },\n        },\n        plugins: {\n          tooltip: {\n            callbacks: {\n              // Add percentage to the mouse over tooltip\n              label: function (context) {\n                let foundColumnObjects = [];\n\n                // Find the correct column object which contains the percentage list\n                datasetsByColumn.forEach(column => {\n                  if (context.label.includes(column[columnNameKey]))\n                    foundColumnObjects.push(column);\n                })\n                const foundColumnObject = foundColumnObjects[0];\n\n                if (foundColumnObject) {\n                  let percentage =\n                    foundColumnObject.percentagesByStatus.get(\n                      context.dataset.final_status\n                    ) * 100;\n                  percentage = percentage.toFixed(1) + '%';\n\n                  return (\n                    context.dataset.label +\n                    ': ' +\n                    context.raw +\n                    ' (' +\n                    percentage +\n                    ')'\n                  );\n                } else {\n                  return context.label;\n                }\n              },\n            },\n          },\n          title: {\n            display: true,\n            text: graphTitle,\n            font: {\n              size: 24,\n            },\n          },\n        },\n        locale: i18n.locale,\n      },\n    });\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport * as daterangepicker from 'daterangepicker'\n\nconst NEVER_EXPIRES_DATE = '01/01/2100'\nconst FORMAT = 'DD/MM/YYYY'\n\n// Connects to data-controller=\"site-programming--expiry-date\"\nexport default class extends Controller {\n  static values = {\n    neverExpires: String,\n    dayNames: Array,\n    monthNames: Array\n  }\n  static targets = [ 'display', 'hiddenInput' ]\n\n  connect() {\n    const value = this.hiddenInputTarget.value\n    const neverExpires = !value || value === NEVER_EXPIRES_DATE\n\n    this.displayTarget.value = neverExpires ? this.neverExpiresValue : value\n\n    // autoUpdateInput is off so the picker doesn't overwrite \"Never Expires\" with a date on load\n    $(this.displayTarget).daterangepicker({\n      singleDatePicker: true,\n      autoApply: true,\n      autoUpdateInput: false,\n      startDate: neverExpires ? new Date() : value,\n      locale: {\n        format: FORMAT,\n        daysOfWeek: this.dayNamesValue,\n        monthNames: this.monthNamesValue,\n        firstDay: 0\n      }\n    })\n\n    $(this.displayTarget).on('apply.daterangepicker', (ev, picker) => {\n      const date = picker.startDate.format(FORMAT)\n\n      this.hiddenInputTarget.value = date\n      this.displayTarget.value = date\n    })\n  }\n\n  // A blank expiry is saved as the panel's never-expires date\n  setNeverExpires(event) {\n    event.preventDefault()\n\n    this.hiddenInputTarget.value = ''\n    this.displayTarget.value = this.neverExpiresValue\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\n// Connects to data-controller='site-programming--output-type-picker'\n// Shows and enables only the event assignment field for the selected output type\nexport default class extends Controller {\n  static targets = [\n    'entityRow'\n  ]\n\n  static values = {\n    typeMap: Object,\n    currentType: String\n  }\n\n  connect() {\n    this.showRowForCurrentType(this.currentTypeValue)\n  }\n\n  // Listens for site-programming--searchable-select:change from the output type field\n  outputTypeChanged(event) {\n    const outputType = this.typeMapValue[event.detail.value] || ''\n    this.showRowForCurrentType(outputType)\n  }\n\n  showRowForCurrentType(outputType) {\n    // Rows are fieldsets, so disabling a hidden row keeps its fields out of\n    // validation and the submitted form\n    this.entityRowTargets.forEach(row => {\n      const matches = row.dataset.entityType === outputType\n      row.classList.toggle('d-none', !matches)\n      row.disabled = !matches\n    })\n  }\n}", "import { Controller } from '@hotwired/stimulus'\n\n// Connects to data-controller='site-programming--searchable-select'\n// Searchable single-select dropdown for choosing a value from a large available list,\n// with an additional hidden field so the form submits like a normal select.\n// The top match is highlighted while typing; arrow keys move the highlight and\n// Enter/Tab commit it. Typing clears the chosen value, so text that hasn't been\n// committed to an option is flagged invalid rather than submitted.\n// Setting the hidden field from script doesn't fire `change`, so a\n// `site-programming--searchable-select:change` event (detail: { value }) is\n// dispatched whenever the chosen value changes.\nexport default class extends Controller {\n  static targets = [\n    'input',\n    'hiddenField',\n    'list',\n    'option'\n  ]\n\n  static values = { invalidMessage: String }\n\n  filter(event) {\n    const query = event.target.value.toLowerCase().trim()\n\n    this.setValue('')\n    this.inputTarget.setCustomValidity(query === '' ? '' : this.invalidMessageValue)\n\n    this.optionTargets.forEach(option => {\n      const matches = query === '' || option.textContent.toLowerCase().includes(query)\n      option.classList.toggle('d-none', !matches)\n    })\n\n    this.open()\n    this.highlight(query === '' ? null : this.visibleOptions[0])\n  }\n\n  navigate(event) {\n    switch (event.key) {\n      case 'ArrowDown':\n        event.preventDefault()\n        this.open()\n        this.move(1)\n        break\n      case 'ArrowUp':\n        event.preventDefault()\n        this.open()\n        this.move(-1)\n        break\n      case 'Enter':\n        // Keep Enter from submitting the form while the list is open\n        if (!this.isOpen) return\n\n        event.preventDefault()\n        if (this.activeOption) this.choose(this.activeOption)\n        break\n      case 'Tab':\n        // Let focus move on as normal, but commit the highlighted choice first\n        if (this.isOpen && this.activeOption) this.choose(this.activeOption)\n        this.close()\n        break\n    }\n  }\n\n  open() {\n    this.listTarget.classList.remove('d-none')\n  }\n\n  close() {\n    this.listTarget.classList.add('d-none')\n  }\n\n  closeOnClickOutside(event) {\n    if (!this.element.contains(event.target)) this.close()\n  }\n\n  select(event) {\n    this.choose(event.currentTarget)\n  }\n\n  // Private\n\n  choose(option) {\n    const index = option.getAttribute(`data-${this.identifier}-index-param`)\n    const label = option.getAttribute(`data-${this.identifier}-label-param`)\n\n    this.setValue(index)\n    this.inputTarget.value = label\n    this.inputTarget.setCustomValidity('')\n    this.highlight(option)\n    this.close()\n  }\n\n  setValue(value) {\n    if (this.hiddenFieldTarget.value === value) return\n\n    this.hiddenFieldTarget.value = value\n    this.dispatch('change', { detail: { value } })\n  }\n\n  move(step) {\n    const options = this.visibleOptions\n    if (options.length === 0) return\n\n    const current = options.indexOf(this.activeOption)\n    const next = current === -1 ? (step > 0 ? 0 : options.length - 1) : (current + step + options.length) % options.length\n    this.highlight(options[next])\n  }\n\n  highlight(option) {\n    this.optionTargets.forEach(o => o.classList.toggle('active', o === option))\n    this.activeOption = option\n    option?.scrollIntoView({ block: 'nearest' })\n  }\n\n  get visibleOptions() {\n    return this.optionTargets.filter(option => !option.classList.contains('d-none'))\n  }\n\n  get isOpen() {\n    return !this.listTarget.classList.contains('d-none')\n  }\n}\n", "// Created by Prabesh Pokharel on 25/09/2025\n// Copyright Digiflex Pty Ltd 2025\n\nimport { Controller } from '@hotwired/stimulus'\n\n// Connects to data-controller='site-programming'\nexport default class extends Controller {\n  static targets = [\n    'areaSummary', \n    'modalObjectsRow', 'pageInfo', 'prevBtn', 'nextBtn',\n    'doorsTable', 'doorSummary', 'checkedSelection',\n    'areaSearch', 'doorSearch', 'areasTable'\n  ]\n  static values = {\n    page: { type: Number, default: 1 },\n    pageSize: { type: Number, default: 8 }\n  }\n\n  initialize() {\n    // if(this.checkedSelectionTarget.name.includes('area_selection')){\n    //   alert('true')\n    // }\n    // alert(this.checkedSelectionTarget.name)\n  }\n\n  connect() {\n    this.renderPage()\n  }\n\n  // highlight row when checkbox toggled\n  toggleActiveUserRow(event) {\n    const row = event.target.closest('tr')\n    if (!row) return\n    if (event.target.checked) {\n      row.classList.add('table-active')\n    } else {\n      row.classList.remove('table-active')\n    }\n  }\n\n  searchSites(event) {\n    const q = event.target.value.toLowerCase().trim()\n    const tableName = event.params.table\n\n    const rows = this._rows(tableName)\n    if (!q) {\n      rows.forEach(row => row.classList.remove('d-none'))\n      return\n    }\n\n    rows.forEach(row => {\n      const cellsText = Array.from(row.querySelectorAll('td'))\n        .map(td => td.textContent.toLowerCase())\n        .join(' ')\n      if (cellsText.includes(q)) {\n        row.classList.remove('d-none')\n      } else {\n        row.classList.add('d-none')\n      }\n    })\n  }\n\n  // helper function for search sites\n  _rows(tableName) {\n    const table = this[`${tableName}Target`]\n    return Array.from(table.querySelectorAll('tbody > tr'))\n  }\n\n  assignSelection(event) {\n    // Pause fo Now\n    event.preventDefault();\n    const buttonName = event.params.button\n    // alert(buttonName)\n    const checkboxes = Array.isArray(this.checkedSelectionTargets) ? this.checkedSelectionTargets : [this.checkedSelectionTarget].flat();\n    const checkedSelections = checkboxes.filter(cb => cb.checked && cb.dataset.selectionModel === buttonName);\n\n    const summaryTarget = this[`${buttonName}Target`];\n    if (!summaryTarget) return;\n\n    summaryTarget.innerHTML = '';\n\n    checkedSelections.forEach(cb => {\n      const chip = document.createElement('span');\n      chip.className = 'badge bg-secondary me-1 mb-1';\n      chip.textContent = cb.dataset.selectionName || `Selection #${cb.value}`;\n      summaryTarget.appendChild(chip);\n    });\n  }\n\n   // pagination controls\n  nextPage() {\n    if (this.pageValue < this.totalPages) {\n      this.pageValue++\n      this.renderPage()\n    }\n  }\n\n  prevPage() {\n    if (this.pageValue > 1) {\n      this.pageValue--\n      this.renderPage()\n    }\n  }\n\n  // render current page of area rows\n  renderPage() {\n    const rows = this.modalObjectsRowTargets\n    const total = rows.length\n    const size = this.pageSizeValue\n    const startIndex = (this.pageValue - 1) * size\n    const endIndex = startIndex + size\n\n    rows.forEach((row, idx) => {\n      row.style.display = (idx >= startIndex && idx < endIndex) ? '' : 'none'\n    })\n\n    // Update page info text\n    const shownStart = total === 0 ? 0 : startIndex + 1\n    const shownEnd = Math.min(endIndex, total)\n    if (this.hasPageInfoTarget) {\n      this.pageInfoTarget.textContent = `${shownStart}\u2013${shownEnd} of ${total}`\n    }\n\n    // Button disabled states\n    const onFirst = this.pageValue <= 1\n    const onLast = this.pageValue >= this.totalPages\n\n    if (this.hasPrevBtnTarget) this.prevBtnTarget.disabled = onFirst\n    if (this.hasNextBtnTarget) this.nextBtnTarget.disabled = onLast\n  }\n\n  get totalPages() {\n    const total = this.modalObjectsRowTargets.length\n    const size = this.pageSizeValue || 1\n    return Math.max(1, Math.ceil(total / size))\n  }\n\n  numberOnlyEntry(event) {\n    if (event.charCode < 48 || event.charCode > 57) {\n      event.preventDefault()\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport * as daterangepicker from 'daterangepicker' // TODO: Find a date picker alternative that isnt jQuery\n\n// Connects to data-controller=\"sites--history\"\nexport default class extends Controller {\n  static values = {\n    pickerStrings: Object,\n    pickerDayNames: Array,\n    pickerMonthNames: Array,\n    pickerDateStart: String,\n    pickerDateEnd: String,\n    pickerHasTime: Boolean\n  }\n  static targets = [ \"dateRangePicker\", \"submitSearch\" ]\n  connect() {\n    this.setupDateRangePicker();\n  }\n\n  clearSearchableText(event) {\n    document.querySelectorAll('.clearable_text').forEach(element => element.value = '')\n  }\n\n  clearAllCheckboxes(event) {\n    this.updateAllCheckboxes(false)\n  }\n\n  checkAllCheckboxes(event) {\n    this.updateAllCheckboxes(true)\n  }\n\n  updateAllCheckboxes(checkedValue) {\n    document.querySelectorAll('.checkable').forEach(element => element.checked = checkedValue)\n  }\n\n  rangeCheck(event) {\n    var ID_RANGE = '[0-9]{1,3}'\n    var SINGLE_RANGE = ID_RANGE + '(-' + ID_RANGE + ')?'\n    var MULTI_RANGE = '^' + SINGLE_RANGE + '(,' + SINGLE_RANGE + ')*$'\n    var range_regexp = new RegExp(MULTI_RANGE)\n    if (event.target.value == '' || range_regexp.test(event.target.value)) {\n      event.target.classList.remove('bg-unverified');\n      event.target.classList.add('bg-verified');\n    } else {\n      event.target.classList.remove('bg-verified');\n      event.target.classList.add('bg-unverified');\n    }\n    if (document.querySelectorAll('.bg-unverified').length != 0) {\n      this.submitSearchTarget.disabled = true\n    } else {\n      this.submitSearchTarget.disabled = false\n    }\n  }\n\n  setupDateRangePicker() {\n    if (this.hasDateRangePickerTarget) {\n      var currentTime = new Date();\n\n      var thisDay = currentTime.getDate();\n      var thisMonth = currentTime.getMonth();\n      var thisYear = currentTime.getFullYear();\n      var thisHour = currentTime.getHours();\n      var thisMinute = currentTime.getMinutes();\n\n      // Object to hold ranges with translation\n      var ourRanges = {};\n\n      var todayMinutes = new Date (thisYear,thisMonth,thisDay,thisHour,thisMinute);\n      var back24 = new Date (thisYear,thisMonth,thisDay,thisHour-24,thisMinute);\n      ourRanges[this.pickerStringsValue['last24']] = [back24, todayMinutes];\n\n      var back48 = new Date (thisYear,thisMonth,thisDay,thisHour-48,thisMinute);\n      ourRanges[this.pickerStringsValue['last48']] = [back48, todayMinutes];\n\n      var todayStart = new Date (thisYear,thisMonth,thisDay);\n      var todayEnd = new Date (thisYear,thisMonth,thisDay+1,0,0,0,-1);\n      ourRanges[this.pickerStringsValue['today']] = [todayStart, todayEnd];\n\n      var yesterdayStart = new Date (thisYear,thisMonth,thisDay-1);\n      var yesterdayEnd = new Date (thisYear,thisMonth,thisDay,0,0,0,-1);\n      ourRanges[this.pickerStringsValue['yesterday']] = [yesterdayStart, yesterdayEnd];\n\n      var monthStart = new Date (thisYear,thisMonth,1);\n      var monthEnd = new Date (thisYear,thisMonth+1,1,0,0,0,-1);\n      ourRanges[this.pickerStringsValue['this_month']] = [monthStart, monthEnd];\n\n      var yestermonthStart = new Date (thisYear,thisMonth-1,1);\n      var yestermonthEnd = new Date (thisYear,thisMonth,1,0,0,0,-1);\n      ourRanges[this.pickerStringsValue['last_month']] = [yestermonthStart, yestermonthEnd];\n\n      var yearStart = new Date (thisYear,0,1);\n      var yearEnd = new Date (thisYear+1,0,1,0,0,0,-1);\n      ourRanges[this.pickerStringsValue['this_year']] = [yearStart, yearEnd];\n\n      var yesteryearStart = new Date (thisYear-1,0,1,0,0,0,0);\n      var yesteryearEnd = new Date (thisYear,0,1,0,0,0,-1);\n      ourRanges[this.pickerStringsValue['last_year']] = [yesteryearStart, yesteryearEnd];\n\n      $('.date-range').daterangepicker({\n        \"autoApply\": true,\n        \"timePicker\": this.pickerHasTimeValue,\n        \"timePicker24Hour\": true,\n        \"timePickerIncrement\": 5,\n        \"locale\": {\n          \"format\": this.pickerHasTimeValue ? \"DD/MM/YYYY HH:mm\" : \"DD/MM/YYYY\",\n          \"separator\": \" - \",\n          \"applyLabel\": this.pickerStringsValue['apply'],\n          \"cancelLabel\": this.pickerStringsValue['cancel'],\n          \"customRangeLabel\": this.pickerStringsValue['custom'],\n          \"weekLabel\": \"W\",\n          \"daysOfWeek\": this.pickerDayNamesValue,\n          \"monthNames\": this.pickerMonthNamesValue,\n          \"firstDay\": 0\n        },\n        \"ranges\": ourRanges,\n        \"minDate\": \"01/01/1991 00:00\",\n        \"startDate\": this.pickerDateStartValue,\n        \"endDate\": this.pickerDateEndValue\n      })\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport * as bootstrap from \"bootstrap\"\n\n// Connects to data-controller=\"sites\"\nexport default class extends Controller {\n  static targets = [\n    \"newFeatureModalA\", \"newFeatureModalB\",\n    \"deleteSiteModal\", \"oldFirmwareVersionWarningModal\", \"sitesTable\",\n    \"canUseHistory\", \"canViewBaseInfoForHistory\",\n    \"canManageCallTriggers\", \"canManageCallTriggersPin\",\n    \"yearlyBilling\", \"yearlyBillingCheckbox\", \"repeatBilling\",\n    \"removeMobileUsersOption\",\n    \"planOptionCheckbox\",\n    \"radioLink\", \"planOptions\", \"planSelection\",\n    \"oneHourPollFail\", \"oneHourPollFailMonthly\", \"oneHourPollFailYearly\",\n    \"additionalMobileUsersAndPersonalReportingRules\", \"additionalMobileUsersAndPersonalReportingRulesMonthly\", \"additionalMobileUsersAndPersonalReportingRulesYearly\",\n    \"additionalCallTriggers\", \"additionalCallTriggersMonthly\", \"additionalCallTriggersYearly\",\n    \"emergencyVoiceCalls\", \"emergencyVoiceCallsMonthly\", \"emergencyVoiceCallsYearly\",\n    \"dualSims\", \"dualMyAlarmSimsMonthly\", \"dualMyAlarmSimsYearly\",\n    \"radioSerialInput\", \"hiddenRadioSerialInput\",\n    \"additionalMobileUsersAndPersonalReportingRulesCheckbox\",\n    \"additionalCallTriggersCheckbox\",\n    \"emergencyVoiceCallsCheckbox\", \"emergencyVoiceCallsModal\",\n    \"emergencyVoiceCallRegions\",\n    \"removeAdditionalUsersAndRulesModal\", \"removeAdditionalCallTriggersModal\",\n    \"suspendIfobOrPersonalReportingModal\",\n    \"suspendIfobCheckbox\", \"suspendPersonalReportingCheckbox\",\n    \"changeSiteSortOrderForm\", \"unpaidInvoiceWarningModal\",\n    \"planOptionPaymentRequiredModal\", \"planOptionPaymentRequiredEntry\", \"planOptionPaymentRequiredPayLink\",\n    \"updateSiteEditForm\",\n    \"unpaidInvoiceWarningSubmitButton\",\n    \"unpaidInvoiceChangePlanCancelInvoiceText\",\n    \"unpaidInvoiceCancelPlanCancelInvoiceText\",\n    \"unpaidInvoiceChangePlanPaymentRequiredText\",\n    \"unpaidInvoiceCancelPlanPaymentRequiredText\",\n    \"removeMobileUsersModal\",\n    \"thumbAnimation\"\n  ];\n  static values = {\n    currentPlan: Number,\n    hasIfobUnlimited: Boolean,\n    hasIfobUnlimitedBilled: Boolean,\n    hasUnpaidInvoice: Boolean,\n    paymentRequiredPlanOptions: Array,\n  };\n\n  connect() {\n    this.showNewFeatureModals();\n    this.turboLoadListener = () => this.focusPlanSelection();\n    document.addEventListener(\"turbo:load\", this.turboLoadListener);\n    this.focusPlanSelection();\n  }\n\n  disconnect() {\n    document.removeEventListener(\"turbo:load\", this.turboLoadListener);\n  }\n\n  focusPlanSelection() {\n    if (window.location.hash !== \"#planSelection\" || !this.hasPlanSelectionTarget) {\n      return;\n    }\n    if (document.documentElement.hasAttribute(\"data-turbo-preview\")) {\n      return;\n    }\n    // Below md the two columns stack, so the target sits thousands of pixels down\n    // rather than half a screen. A smooth scroll over that distance is still\n    // animating while the layout controller reflows the page, and any reflow or\n    // touch gesture cancels it and strands us at the top \u2014 so land it in one frame.\n    requestAnimationFrame(() => {\n      this.planSelectionTarget.focus({ preventScroll: true });\n      this.planSelectionTarget.scrollIntoView({ block: \"center\" });\n    });\n  }\n\n  // A Plan Option whose charge sits on an invoice that can no longer be credited\n  // cannot be taken off the site \u2014 removing it would leave the installer owing\n  // the whole charge. The server refuses these too, this just stops the trip.\n  // An option counts as being removed when its checkbox is unticked, or when it\n  // is hidden because the plan being selected does not allow it.\n  planOptionRemovalsRequiringPayment() {\n    if (!this.hasPlanOptionPaymentRequiredModalTarget) {\n      return [];\n    }\n    return this.planOptionCheckboxTargets\n      .filter(checkbox => this.paymentRequiredPlanOptionsValue.includes(checkbox.dataset.planOptionField))\n      .filter(checkbox => !checkbox.checked || checkbox.offsetParent === null)\n      .map(checkbox => checkbox.dataset.planOptionField);\n  }\n\n  checkPlanOptionRemovalsRequiringPayment() {\n    var blockedFields = this.planOptionRemovalsRequiringPayment();\n    if (blockedFields.length === 0) {\n      return false;\n    }\n    this.planOptionPaymentRequiredEntryTargets.forEach(entry => {\n      if (blockedFields.includes(entry.dataset.planOptionField)) {\n        entry.classList.remove('d-none');\n      } else {\n        entry.classList.add('d-none');\n      }\n    });\n    // Options charged on the same invoice share one Pay Now, so a link shows\n    // when any of the options it covers is being removed.\n    this.planOptionPaymentRequiredPayLinkTargets.forEach(payLink => {\n      var fields = (payLink.dataset.planOptionFields || '').split(' ');\n      if (fields.some(field => blockedFields.includes(field))) {\n        payLink.classList.remove('d-none');\n      } else {\n        payLink.classList.add('d-none');\n      }\n    });\n    if (!this.planOptionPaymentRequiredModal) {\n      this.planOptionPaymentRequiredModal = new bootstrap.Modal(this.planOptionPaymentRequiredModalTarget, { keyboard: false });\n    }\n    if (this.planOptionPaymentRequiredModal) {\n      this.planOptionPaymentRequiredModal.show();\n    }\n    return true;\n  }\n\n  // The plan warning takes precedence over the plan option one, so every path\n  // that would otherwise submit has to check the plan options on the way past.\n  submitUnlessPlanOptionPaymentRequired(event) {\n    if (this.checkPlanOptionRemovalsRequiringPayment()) {\n      return;\n    }\n    this.submitForm(event);\n  }\n\n  // Save on the plan warning submits straight to the server, so the plan option\n  // block has to be re-checked here or it becomes a way to click past it and\n  // land on the server side refusal instead.\n  submitFromUnpaidInvoiceWarning(event) {\n    if (this.planOptionRemovalsRequiringPayment().length === 0) {\n      this.submitForm(event);\n      return;\n    }\n    if (!this.unpaidInvoiceWarningModal) {\n      this.checkPlanOptionRemovalsRequiringPayment();\n      return;\n    }\n    // Swap one modal for the other rather than stacking them, which would strand\n    // a backdrop over the page.\n    this.unpaidInvoiceWarningModalTarget.addEventListener('hidden.bs.modal', () => {\n      this.checkPlanOptionRemovalsRequiringPayment();\n    }, { once: true });\n    this.unpaidInvoiceWarningModal.hide();\n  }\n\n  checkIfUnpaidSite() {\n    if (this.hasUnpaidInvoiceWarningSubmitButtonTarget) {\n      this.unpaidInvoiceWarningSubmitButtonTarget.disabled = true;\n      this.unpaidInvoiceWarningSubmitButtonTarget.classList.add('d-none');\n    }\n    if (this.hasUnpaidInvoiceCancelPlanCancelInvoiceTextTarget) {\n      this.unpaidInvoiceCancelPlanCancelInvoiceTextTarget.classList.add('d-none');\n    }\n    if (this.hasUnpaidInvoiceCancelPlanPaymentRequiredTextTarget) {\n      this.unpaidInvoiceCancelPlanPaymentRequiredTextTarget.classList.add('d-none');\n    }\n    if (this.hasUnpaidInvoiceChangePlanCancelInvoiceTextTarget) {\n      this.unpaidInvoiceChangePlanCancelInvoiceTextTarget.classList.add('d-none');\n    }\n    if (this.hasUnpaidInvoiceChangePlanPaymentRequiredTextTarget) {\n      this.unpaidInvoiceChangePlanPaymentRequiredTextTarget.classList.add('d-none');\n    }\n    if (!this.hasPlanSelectionTarget) {\n      return;\n    }\n    if (this.currentPlanValue == 1 && this.hasIfobUnlimitedValue && this.hasIfobUnlimitedBilledValue) {\n      this.submitUnlessPlanOptionPaymentRequired();\n      return;\n    }\n    var selectedPlan = this.getSelectedPlan();\n    if (this.hasUnpaidInvoiceValue) {\n      if (selectedPlan == 99 && this.currentPlanValue == 1 && this.hasIfobUnlimitedValue && !this.hasIfobUnlimitedBilledValue) {\n        // Pay Once plan, not changed\n        this.submitUnlessPlanOptionPaymentRequired();\n        return;\n      }\n      if ((selectedPlan != this.currentPlanValue) || (selectedPlan == 1 && this.hasIfobUnlimitedValue && !this.hasIfobUnlimitedBilledValue)) {\n        if (selectedPlan == 0) {\n          if (this.hasUnpaidInvoiceCancelPlanCancelInvoiceTextTarget) {\n            this.unpaidInvoiceCancelPlanCancelInvoiceTextTarget.classList.remove('d-none');\n            if (this.hasUnpaidInvoiceWarningSubmitButtonTarget) {\n              this.unpaidInvoiceWarningSubmitButtonTarget.disabled = false;\n              this.unpaidInvoiceWarningSubmitButtonTarget.classList.remove('d-none');\n            }\n          } else if (this.hasUnpaidInvoiceCancelPlanPaymentRequiredTextTarget) {\n            this.unpaidInvoiceCancelPlanPaymentRequiredTextTarget.classList.remove('d-none');\n          }\n        } else if (this.hasUnpaidInvoiceChangePlanCancelInvoiceTextTarget) {\n          this.unpaidInvoiceChangePlanCancelInvoiceTextTarget.classList.remove('d-none');\n          if (this.hasUnpaidInvoiceWarningSubmitButtonTarget) {\n            this.unpaidInvoiceWarningSubmitButtonTarget.disabled = false;\n            this.unpaidInvoiceWarningSubmitButtonTarget.classList.remove('d-none');\n          }\n        } else if (this.hasUnpaidInvoiceChangePlanPaymentRequiredTextTarget) {\n          this.unpaidInvoiceChangePlanPaymentRequiredTextTarget.classList.remove('d-none');\n        }\n        if (!this.unpaidInvoiceWarningModal) {\n          this.unpaidInvoiceWarningModal = new bootstrap.Modal(this.unpaidInvoiceWarningModalTarget, { keyboard: false });\n        }\n        if (this.unpaidInvoiceWarningModal) {\n          this.unpaidInvoiceWarningModal.show();\n        }\n        return;\n      }\n    }\n    if (this.checkPlanOptionRemovalsRequiringPayment()) {\n      return;\n    }\n    if (!this.hasUnpaidInvoiceValue && selectedPlan == 0 && this.currentPlanValue != 0) {\n      if (!this.removeMobileUsersModal) {\n        this.removeMobileUsersModal = new bootstrap.Modal(this.removeMobileUsersModalTarget, { keyboard: false });\n      }\n      if (this.removeMobileUsersModal) {\n        this.removeMobileUsersModal.show();\n        return;\n      }\n    }\n    this.submitForm();\n  }\n\n  setRemoveMobileUsersAndSubmitForm(event) {\n    if (this.hasRemoveMobileUsersOptionTarget) {\n      this.removeMobileUsersOptionTarget.value = 1\n    }\n    this.submitForm(event);\n  }\n\n  submitForm(event) {\n    if (event !== undefined && event.target.tagName === 'TEXTAREA' && event.key === 'Enter') {\n      return;\n    }\n\n    if (this.updateSiteEditFormTarget.reportValidity()) {\n      this.updateSiteEditFormTarget.submit();\n    }\n  }\n\n  canUseHistoryChanged() {\n    if (this.hasCanUseHistoryTarget && this.hasCanViewBaseInfoForHistoryTarget) {\n      if (!this.canUseHistoryTarget.checked) {\n        this.canViewBaseInfoForHistoryTarget.value = '';\n        this.canViewBaseInfoForHistoryTarget.checked = '';\n        this.canViewBaseInfoForHistoryTarget.disabled = 'true';\n      } else {\n        this.canViewBaseInfoForHistoryTarget.disabled = '';\n      }\n    }\n  }\n\n  canManageCallTriggersChanged() {\n    if (this.hasCanManageCallTriggersTarget && this.hasCanManageCallTriggersPinTarget) {\n      if (!this.canManageCallTriggersTarget.checked) {\n        this.canManageCallTriggersPinTarget.checked = false;\n      }\n    }\n  }\n\n  canManageCallTriggersPinChanged() {\n    if (this.hasCanManageCallTriggersPinTarget && this.hasCanManageCallTriggersTarget) {\n      if (this.canManageCallTriggersPinTarget.checked) {\n        this.canManageCallTriggersTarget.checked = true;\n      }\n    }\n  }\n\n  showNewFeatureModals() {\n    if (this.hasNewFeatureModalATarget) {\n      var newFeatureModalA = new bootstrap.Modal(this.newFeatureModalATarget, { keyboard: true });\n      if (newFeatureModalA) {\n        newFeatureModalA.show()\n      }\n    }\n    if (!this.hasNewFeatureModalATarget && this.hasNewFeatureModalBTarget) {\n      var newFeatureModalB = new bootstrap.Modal(this.newFeatureModalBTarget, { keyboard: true });\n      if (newFeatureModalB) {\n        newFeatureModalB.show()\n      }\n    }\n  }\n\n  showSiriAnnouncement(event) {\n    if (this.hasNewFeatureModalBTarget) {\n      var newFeatureModalB = new bootstrap.Modal(this.newFeatureModalBTarget, { keyboard: true });\n      if (newFeatureModalB) {\n        newFeatureModalB.show()\n      }\n    }\n  }\n\n  searchSites(event) {\n    if (this.hasSitesTableTarget) {\n      var searchText = event.target.value\n      if (searchText == \"\") {\n        Array.from(this.sitesTableTarget.querySelectorAll('tbody > tr')).filter(row => {\n          row.classList.remove('d-none')\n        })\n        return\n      }\n      // Array.from(document.querySelectorAll('tr[data-sites-link-param^=\"installer/site\"]')).filter(row => {\n      Array.from(this.sitesTableTarget.querySelectorAll('tbody > tr')).filter(row => {\n        var rowMatched = false\n        row.querySelectorAll('td').forEach(rowColumn => {\n          if (!rowMatched && rowColumn.innerHTML.toLowerCase().indexOf(searchText.toLowerCase()) >= 0) {\n            rowMatched = true\n          }\n        })\n        if (rowMatched) {\n          row.classList.remove('d-none')\n        } else {\n          row.classList.add('d-none')\n        }\n      })\n    }\n  }\n\n  numberOnlyEntry(event) {\n    if (event.charCode < 48 || event.charCode > 57) {\n      event.preventDefault()\n    }\n  }\n\n  openSite(event) {\n    Turbo.visit(event.params['link'])\n  }\n\n  showFirmwareWarningModal(event) {\n    if (!this.hasAdditionalMobileUsersAndPersonalReportingRulesCheckboxTarget) {\n      return;\n    }\n    if (this.additionalMobileUsersAndPersonalReportingRulesCheckboxTarget.checked && this.hasOldFirmwareVersionWarningModalTarget) {\n      var oldFirmwareVersionModal = new bootstrap.Modal(this.oldFirmwareVersionWarningModalTarget, { keyboard: false });\n      if (oldFirmwareVersionModal) {\n        oldFirmwareVersionModal.show()\n      }\n    }\n  }\n\n  showEmergencyVoiceWarningModal(event) {\n    if (!this.hasEmergencyVoiceCallsCheckboxTarget) {\n      return;\n    }\n    if (this.emergencyVoiceCallsCheckboxTarget.checked && this.hasEmergencyVoiceCallsModalTarget) {\n      var emergencyVoiceCallsModal = new bootstrap.Modal(this.emergencyVoiceCallsModalTarget, { keyboard: false });\n      if (emergencyVoiceCallsModal) {\n        emergencyVoiceCallsModal.show()\n      }\n    } else if (!this.emergencyVoiceCallsCheckboxTarget.checked) {\n      this.emergencyVoiceCallRegionsTarget.classList.add('d-none');\n    }\n  }\n\n  emergencyVoiceWarningModalAgree(event) {\n    if (!this.hasEmergencyVoiceCallRegionsTarget) {\n      return;\n    }\n    this.emergencyVoiceCallRegionsTarget.classList.remove('d-none');\n  }\n\n  emergencyVoiceWarningModalCancel(event) {\n    if (!this.hasEmergencyVoiceCallsCheckboxTarget) {\n      return;\n    }\n    this.emergencyVoiceCallsCheckboxTarget.checked = false;\n  }\n\n  showRemoveAdditionalUsersAndRulesModal(event) {\n    if (!this.hasAdditionalMobileUsersAndPersonalReportingRulesCheckboxTarget) {\n      return;\n    }\n    if (!this.additionalMobileUsersAndPersonalReportingRulesCheckboxTarget.checked && this.hasRemoveAdditionalUsersAndRulesModalTarget) {\n      if (!this.removeAdditionalUsersAndRulesModal) {\n        this.removeAdditionalUsersAndRulesModal = new bootstrap.Modal(this.removeAdditionalUsersAndRulesModalTarget, { keyboard: false });\n      }\n      if (this.removeAdditionalUsersAndRulesModal) {\n        this.removeAdditionalUsersAndRulesModal.show()\n      }\n    }\n  }\n\n  resetAdditionalUsersAndRules(event) {\n    if (!this.hasAdditionalMobileUsersAndPersonalReportingRulesCheckboxTarget) {\n      return;\n    }\n    this.additionalMobileUsersAndPersonalReportingRulesCheckboxTarget.checked = true;\n    if (this.removeAdditionalUsersAndRulesModal) {\n      this.removeAdditionalUsersAndRulesModal.hide()\n    }\n  }\n\n  showRemoveAdditionalCallTriggersModal(event) {\n    if (!this.hasAdditionalCallTriggersCheckboxTarget) {\n      return;\n    }\n    if (!this.additionalCallTriggersCheckboxTarget.checked && this.hasRemoveAdditionalCallTriggersModalTarget) {\n      if (!this.removeAdditionalCallTriggersModal) {\n        this.removeAdditionalCallTriggersModal = new bootstrap.Modal(this.removeAdditionalCallTriggersModalTarget, { keyboard: false });\n      }\n      if (this.removeAdditionalCallTriggersModal) {\n        this.removeAdditionalCallTriggersModal.show()\n      }\n    }\n  }\n\n  resetAdditionalCallTriggers(event) {\n    if (!this.hasAdditionalCallTriggersCheckboxTarget) {\n      return;\n    }\n    this.additionalCallTriggersCheckboxTarget.checked = true;\n    if (this.removeAdditionalCallTriggersModal) {\n      this.removeAdditionalCallTriggersModal.hide()\n    }\n  }\n\n  showiFobSuspensionModal(event) {\n    if (!this.hasSuspendIfobCheckboxTarget) {\n      return;\n    }\n    if (this.suspendIfobCheckboxTarget.checked) {\n        this.resetIfobSuspension = true\n        this.resetPersonalReportingSuspension = false\n        this.showIfobOrPersonalReportingSuspensionModal()\n    }\n  }\n\n  showPersonalReportingSuspensionModal(event) {\n    if (!this.hasSuspendPersonalReportingCheckboxTarget) {\n      return;\n    }\n    if (this.suspendPersonalReportingCheckboxTarget.checked) {\n        this.resetIfobSuspension = false\n        this.resetPersonalReportingSuspension = true\n        this.showIfobOrPersonalReportingSuspensionModal()\n    }\n  }\n\n  showIfobOrPersonalReportingSuspensionModal() {\n    if (this.hasSuspendIfobOrPersonalReportingModalTarget) {\n      if (!this.suspendIfobOrPersonalReportingModal) {\n        this.suspendIfobOrPersonalReportingModal = new bootstrap.Modal(this.suspendIfobOrPersonalReportingModalTarget, { keyboard: false });\n      }\n      if (this.suspendIfobOrPersonalReportingModal) {\n        this.suspendIfobOrPersonalReportingModal.show()\n      }\n    }\n  }\n\n  resetSuspension(event) {\n    if (!this.hasSuspendIfobCheckboxTarget || !this.hasSuspendPersonalReportingCheckboxTarget) {\n      return;\n    }\n    if (this.resetIfobSuspension) {\n      this.suspendIfobCheckboxTarget.checked = false\n    }\n    if (this.resetPersonalReportingSuspension) {\n      this.suspendPersonalReportingCheckboxTarget.checked = false\n    }\n    this.additionalMobileUsersAndPersonalReportingRulesCheckboxTarget.checked = true;\n    if (this.suspendIfobOrPersonalReportingModal) {\n      this.resetIfobSuspension = false\n      this.resetPersonalReportingSuspension = false\n      this.suspendIfobOrPersonalReportingModal.hide()\n    }\n  }\n\n  toggleRepeatBilling(event) {\n    if (!this.hasYearlyBillingCheckboxTarget) {\n      return;\n    }\n    if (this.yearlyBillingCheckboxTarget.checked && this.hasRepeatBillingTarget) {\n      this.repeatBillingTarget.classList.remove('d-none')\n      this.oneHourPollFailMonthlyTarget.classList.add('d-none')\n      this.oneHourPollFailYearlyTarget.classList.remove('d-none')\n      this.additionalMobileUsersAndPersonalReportingRulesMonthlyTarget.classList.add('d-none')\n      this.additionalMobileUsersAndPersonalReportingRulesYearlyTarget.classList.remove('d-none')\n      if (this.hasAdditionalCallTriggersMonthlyTarget) {\n        this.additionalCallTriggersMonthlyTarget.classList.add('d-none')\n        this.additionalCallTriggersYearlyTarget.classList.remove('d-none')\n      }\n      if (this.hasDualMyAlarmSimsMonthlyTarget) {\n        this.dualMyAlarmSimsMonthlyTarget.classList.add('d-none')\n        this.dualMyAlarmSimsYearlyTarget.classList.remove('d-none')\n      }\n      if (this.hasEmergencyVoiceCallsMonthlyTarget) {\n        this.emergencyVoiceCallsMonthlyTarget.classList.add('d-none')\n        this.emergencyVoiceCallsYearlyTarget.classList.remove('d-none')\n      }\n\n    } else {\n      this.repeatBillingTarget.classList.add('d-none')\n      this.oneHourPollFailMonthlyTarget.classList.remove('d-none')\n      this.oneHourPollFailYearlyTarget.classList.add('d-none')\n      this.additionalMobileUsersAndPersonalReportingRulesMonthlyTarget.classList.remove('d-none')\n      this.additionalMobileUsersAndPersonalReportingRulesYearlyTarget.classList.add('d-none')\n      if (this.hasAdditionalCallTriggersMonthlyTarget) {\n        this.additionalCallTriggersMonthlyTarget.classList.remove('d-none')\n        this.additionalCallTriggersYearlyTarget.classList.add('d-none')\n      }\n      if (this.hasDualMyAlarmSimsMonthlyTarget) {\n        this.dualMyAlarmSimsMonthlyTarget.classList.remove('d-none')\n        this.dualMyAlarmSimsYearlyTarget.classList.add('d-none')\n      }\n      if (this.hasEmergencyVoiceCallsMonthlyTarget) {\n        this.emergencyVoiceCallsMonthlyTarget.classList.remove('d-none')\n        this.emergencyVoiceCallsYearlyTarget.classList.add('d-none')\n      }\n    }\n  }\n\n  toggleYearlyBilling(event) {\n    if (!this.hasYearlyBillingTarget) {\n      return\n    }\n    var selectedPlan = this.getSelectedOption(event)\n    var totalPlans = event.params['totalPlans']\n    if ([1, 2, 3, 4, 5].includes(selectedPlan)) {\n      this.yearlyBillingTarget.classList.remove('d-none')\n      if ([2, 3, 4, 5].includes(selectedPlan) && this.hasPlanOptionsTarget) {\n        this.planOptionsTarget.classList.remove('d-none')\n        this.updatePlanOptions(selectedPlan, [2, 3, 4, 5])\n        this.updateReportingPlanOptions(selectedPlan, [2, 3, 4, 5])\n        this.updateCallTriggerPlanOptions(selectedPlan, [3, 5])\n        this.updateRadioPlanOptions(selectedPlan, [4, 5])\n      } else {\n        this.hideAllPlanOptions(selectedPlan)\n      }\n    } else {\n      this.yearlyBillingTarget.classList.add('d-none')\n      this.hideAllPlanOptions(selectedPlan)\n    }\n  }\n\n  hideAllPlanOptions(selectedPlan) {\n      if (this.hasPlanOptionsTarget) {\n        this.planOptionsTarget.classList.add('d-none')\n      }\n      this.updatePlanOptions(selectedPlan, []);\n      this.updateReportingPlanOptions(selectedPlan, []);\n      this.updateCallTriggerPlanOptions(selectedPlan, []);\n      this.updateRadioPlanOptions(selectedPlan, [])\n  }\n\n  updatePlanOptions(selectedPlan, planOptionSites) {\n    if (planOptionSites.includes(selectedPlan)) {\n      if (this.hasOneHourPollFailTarget) {\n        this.oneHourPollFailTarget.classList.remove('d-none')\n      }\n    } else {\n      if (this.hasOneHourPollFailTarget) {\n        this.oneHourPollFailTarget.classList.add('d-none')\n      }\n    }\n  }\n\n  updateReportingPlanOptions(selectedPlan, planOptionSites) {\n    if (planOptionSites.includes(selectedPlan)) {\n      if (this.hasAdditionalMobileUsersAndPersonalReportingRulesTarget) {\n        this.additionalMobileUsersAndPersonalReportingRulesTarget.classList.remove('d-none')\n      }\n      if (this.hasEmergencyVoiceCallsTarget) {\n        this.emergencyVoiceCallsTarget.classList.remove('d-none')\n      }\n    } else {\n      if (this.hasAdditionalMobileUsersAndPersonalReportingRulesTarget) {\n        this.additionalMobileUsersAndPersonalReportingRulesTarget.classList.add('d-none')\n      }\n      if (this.hasEmergencyVoiceCallsTarget) {\n        this.emergencyVoiceCallsTarget.classList.add('d-none')\n      }\n    }\n  }\n\n\n  updateCallTriggerPlanOptions(selectedPlan, planOptionSites) {\n    if (!this.hasAdditionalCallTriggersTarget) {\n      return;\n    }\n    if (planOptionSites.includes(selectedPlan)) {\n      this.additionalCallTriggersTarget.classList.remove('d-none')\n    } else {\n      this.additionalCallTriggersTarget.classList.add('d-none')\n    }\n  }\n\n  updateRadioPlanOptions(selectedPlan, planOptionSites) {\n    if (planOptionSites.includes(selectedPlan)) {\n      if (this.hasRadioLinkTarget) {\n        this.radioLinkTarget.classList.remove('d-none')\n      }\n      if (this.hasRadioSerialInputTarget) {\n        this.radioSerialInputTarget.required = true\n        if (this.radioSerialInputTarget.value != '') {\n          if (this.hasDualSimsTarget) {\n            this.dualSimsTarget.classList.remove('d-none')\n          }\n        }\n      } else if (this.hasHiddenRadioSerialInputTarget) {\n        if (this.hasDualSimsTarget) {\n            this.dualSimsTarget.classList.remove('d-none')\n        }\n      }\n    } else {\n      if (this.hasRadioLinkTarget) {\n        this.radioLinkTarget.classList.add('d-none')\n      }\n      if (this.hasDualSimsTarget) {\n        this.dualSimsTarget.classList.add('d-none')\n      }\n      if (this.hasRadioSerialInputTarget) {\n        this.radioSerialInputTarget.removeAttribute('required')\n      }\n    }\n  }\n\n  changeSiteSortOrdering(event) {\n    if (this.hasChangeSiteSortOrderFormTarget) {\n      this.changeSiteSortOrderFormTarget.submit();\n    }\n  }\n\n  getSelectedOption(event) {\n    return Number([...event.target.selectedOptions].map(option => option.value)[0])\n  }\n\n  getSelectedPlan() {\n    return Number([...this.planSelectionTarget.selectedOptions].map(option => option.value)[0])\n  }\n\n  delayedThumbsUpAnimation(){\n    setTimeout(() => {\n      this.thumbAnimationTarget.play();\n    }, 100);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\n// Connects to data-controller='smart-keyfob-button-function'\nexport default class extends Controller {\n  static targets = ['doorField', 'outputField', 'macroField', 'areaField']\n\n  // Mirrors AREA_INDEX_BUTTON_FUNCTIONS in SiteProgramming::PanelSmartKeyfobOptions\n  static areaFunctions = ['disarm_area', 'arm_area', 'arm_area_part_one', 'arm_area_part_two']\n\n  connect() {\n    this.toggle()\n  }\n\n  toggle() {\n    const value = this.element.querySelector('select[name*=\"button_function\"]')?.value\n\n    this.doorFieldTarget.hidden   = value !== 'operate_door'\n    this.outputFieldTarget.hidden = value !== 'operate_output'\n    this.macroFieldTarget.hidden  = value !== 'operate_macro'\n    this.areaFieldTarget.hidden   = !this.constructor.areaFunctions.includes(value)\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\n// Connects to data-controller='smart-keyfobs'\nexport default class extends Controller {\n  static targets = ['buttonRow']\n\n  showButton(event) {\n    this.buttonRowTargets.forEach(row =>\n      row.classList.toggle('d-none', row.dataset.button !== event.target.value))\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"store\"\nexport default class extends Controller {\n  static targets = [\n    \"checkoutInput\",\n    \"productForm\"\n  ];\n\n  connect() {\n  }\n\n  // Adds an item to the cart and sends the user to the all products page\n  addToCart() {\n    this.productFormTarget.submit();\n  }\n\n  // Adds an item to the cart and sends them to the cart review page\n  addToCartAndCheckout() {\n    if (this.hasCheckoutInputTarget) {\n      this.checkoutInputTarget.value = 1;\n    }\n    this.productFormTarget.submit();\n  }\n}\n", "// Created by Prabesh Pokharel on 10/10/2025\n// Copyright Digiflex Pty Ltd 2025\nimport { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"timezones\"\nexport default class extends Controller {\n  static targets = [\n    // START match SiteProgramming::PanelTimezonePeriodOptions\n    \"periodOne\", // period_one\n    \"periodTwo\", // period_two\n    \"periodThree\", // period_three\n    \"periodFour\", // period_four\n    // FINISH match SiteProgramming::PanelTimezonePeriodOptions\n    \"addButton\"\n  ]\n\n  connect() {\n    this.updateAddButton()\n  }\n\n  addPeriod(event) {\n    event.preventDefault()\n\n    const nextHidden = this.blocks().find(el => el.classList.contains(\"d-none\"))\n    if (nextHidden) {\n      nextHidden.classList.remove(\"d-none\")\n    }\n    this.updateAddButton()\n  }\n\n  removePeriod(event) {\n    event.preventDefault()\n\n    // find the period block that wrap these period button\n    const targettedBlocks = event.target.closest(\n      '[data-timezones-target=\"periodOne\"],' +\n      '[data-timezones-target=\"periodTwo\"],' +\n      '[data-timezones-target=\"periodThree\"],' +\n      '[data-timezones-target=\"periodFour\"]'\n    )\n\n    // Clear all input, select, and checkbox fields inside the block\n    if (targettedBlocks) {\n      targettedBlocks.querySelectorAll('input, select, textarea').forEach(el => {\n        if (el.type === 'checkbox') {\n          el.checked = false\n        } else {\n          el.value = ''\n        }\n      })\n    }\n\n    if (targettedBlocks && !targettedBlocks.classList.contains(\"d-none\")) {\n      // add display none\n      targettedBlocks.classList.add(\"d-none\")\n    }\n    this.updateAddButton()\n  }\n\n  clearPeriod(event) {\n    event.preventDefault()\n\n    // find the period block that wrap these period button\n    const targettedBlock = event.target.closest(\n      '[data-timezones-target=\"periodOne\"],' +\n      '[data-timezones-target=\"periodTwo\"],' +\n      '[data-timezones-target=\"periodThree\"],' +\n      '[data-timezones-target=\"periodFour\"]'\n    )\n\n    if (targettedBlock) {\n      // Clear all input, select, and checkbox fields inside the block\n      targettedBlock.querySelectorAll('input, select, textarea').forEach(el => {\n        if (el.type === 'checkbox') {\n          el.checked = false\n        } else {\n          el.value = ''\n        }\n      })\n    }\n  }\n\n  // once all the blocks are displayed, this helper will disabled the add period button\n  updateAddButton() {\n    if (!this.hasAddButtonTarget) return\n    const anyHidden = this.blocks().some(el => el.classList.contains(\"d-none\"))\n    this.addButtonTarget.disabled = !anyHidden\n  }\n\n  // check if each period target exists\n  blocks() {\n    const out = []\n    if (this.hasPeriodOneTarget) out.push(this.periodOneTarget)\n    if (this.hasPeriodTwoTarget) out.push(this.periodTwoTarget)\n    if (this.hasPeriodThreeTarget) out.push(this.periodThreeTarget)\n    if (this.hasPeriodFourTarget) out.push(this.periodFourTarget)\n    return out\n  }\n}\n", "/* ^ Magic Comment that freezes string literals by default\n Created by Prabesh Pokharel on 25/07/2025\n Copyright Digiflex Pty Ltd 2025\n*/\n\n//The FileReader interface lets web applications asynchronously read the contents of files (or raw data buffers) stored on the user's computer, \n// using File or Blob objects to specify the file or data to read.\n import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"user-image-upload\"\nexport default class extends Controller {\n  static targets = [\"input\", \"previewImage\", \"placeholder\", \"filenameLabel\", \"dropzone\", \"checkedItem\", \"activeClass\", \"fileError\"]\n\n  connect() {\n    // Add drag and drop functionality\n    this.dropzoneTarget.addEventListener(\"dragover\", (e) => {\n      e.preventDefault()\n      this.dropzoneTarget.classList.add(\"bg-light\")\n    })\n\n    this.dropzoneTarget.addEventListener(\"dragleave\", (e) => {\n      e.preventDefault()\n      this.dropzoneTarget.classList.remove(\"bg-light\")\n    })\n\n    this.dropzoneTarget.addEventListener(\"drop\", (e) => {\n      e.preventDefault()\n\n      const file = e.dataTransfer.files[0]\n      \n      if (file && this.isValidImageFile(file)) {\n        // Create a new FileList and assign it to the input\n        const dt = new DataTransfer()\n        dt.items.add(file)\n        this.inputTarget.files = dt.files\n        \n        this.previewImage(file)\n        this.dropzoneTarget.classList.add(\"border-success\")\n        this.fileErrorTarget.classList.add(\"d-none\")\n      } else if (file) {\n        this.dropzoneTarget.classList.remove(\"bg-light\")        \n        this.fileErrorTarget.classList.remove(\"d-none\")\n      }\n    })\n\n    // Handle file selection via browse\n    this.inputTarget.addEventListener(\"change\", (e) => {\n      const file = e.target.files[0]\n      if (file) {\n        if (this.isValidImageFile(file)) {\n          this.previewImage(file)\n          this.fileErrorTarget.classList.add(\"d-none\")\n        } else {\n          this.fileErrorTarget.classList.remove(\"d-none\")\n          this.clearPreview()\n        }\n      } else {\n        this.clearPreview()\n      }\n    })\n    \n  }\n\n  isValidImageFile(file) {\n    const allowedTypes = ['image/jpeg', 'image/jpg', 'image/png', 'image/gif']\n    \n    if (!allowedTypes.includes(file.type)) {\n      return false\n    }\n    \n    return true\n  }\n\n  previewImage(file) {\n    const reader = new FileReader()\n    reader.onload = (e) => {\n      this.previewImageTarget.src = e.target.result\n      this.previewImageTarget.classList.remove('d-none')\n      this.placeholderTarget.classList.add('d-none')\n      \n      if (this.hasFilenameLabelTarget) {\n        this.filenameLabelTarget.textContent = file.name\n      }\n    }\n    reader.readAsDataURL(file)\n  }\n\n  clearPreview() {\n    this.previewImageTarget.src = ''\n    this.previewImageTarget.classList.add('d-none')\n    this.placeholderTarget.classList.remove('d-none')\n    \n    if (this.hasFilenameLabelTarget) {\n      this.filenameLabelTarget.textContent = ''\n    }\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"users--account-recovery\"\nexport default class extends Controller {\n  static targets = [\n    \"header\", \"mobileForm\", \"emailForm\",\n    \"mobilePhone\", \"email\", \"formCaptchaAndSubmit\",\n    \"customerNumberInput\", \"emailInput\", \"mobilePhoneInput\", \"recoverUsernameButton\",\n    \"submitForm\"\n  ]\n\n  showAccountRecoveryWithEmail() {\n    this.emailFormTarget.classList.remove('d-none')\n    this.mobileFormTarget.classList.add('d-none')\n  }\n\n  showAccountRecoveryWithMobile() {\n    this.emailFormTarget.classList.add('d-none')\n    this.mobileFormTarget.classList.remove('d-none')\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"users--customers\"\nexport default class extends Controller {\n  connect() {\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"users--installers\"\nexport default class extends Controller {\n  static targets = [ \"registerInstallerPage\" ]\n\n  registerInstallerPageTargetConnected(target) {\n\n  }\n\n  validateLogoFile(event) {\n    var allowedExtensions = ['jpg', 'jpeg', 'gif', 'png']\n    var file = event.target.files.item(0)\n    // We only deal with one file here.\n    if (file.size > parseInt(event.params['maxFileSize'])) {\n      window.alert(event.params['tooLargeMessage'])\n      event.target.value = ''\n      return\n    }\n    if (!allowedExtensions.includes(file.name.split('.').pop())) {\n      window.alert(event.params['badFileTypeMessage'])\n      event.target.value = ''\n      return\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport * as bootstrap from \"bootstrap\"\n\n// Connects to data-controller=\"users--users\"\nexport default class extends Controller {\n  static targets = [ \"multiFactorAuthenticationEnabled\", \"multiFactorAuthenticationType\",\n                     \"migrateToCompanyAccountModal\" ]\n\n\n  toggleMultiFactorAuthentication(event) {\n    if (!this.hasMultiFactorAuthenticationEnabledTarget) {\n      return\n    }\n    this.multiFactorAuthenticationTypeTarget.disabled = this.multiFactorAuthenticationEnabledTarget.value == 0;\n  }\n\n  migrateToCompanyAccountModal() {\n    if (this.hasMigrateToCompanyAccountModalTarget) {\n      if (!this.migrateToCompanyAccountBootstrapModal) {\n        this.migrateToCompanyAccountBootstrapModal = new bootstrap.Modal(this.migrateToCompanyAccountModalTarget, { keyboard: false });\n      }\n      if (this.migrateToCompanyAccountBootstrapModal) {\n        this.migrateToCompanyAccountBootstrapModal.show()\n      }\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport * as bootstrap from \"bootstrap\"\n\n// Connects to data-controller=\"users--validations\"\nexport default class extends Controller {\n  static targets = [ \"password\", \"passwordConfirmation\", \"email\", \"emailConfirmation\", \"mobileValidationModal\" ]\n  connect() {\n    if (this.hasPasswordTarget) {\n      this.passwordTarget.classList.add('bg-unverified')\n    }\n    if (this.hasPasswordConfirmationTarget) {\n      this.passwordConfirmationTarget.classList.add('bg-unverified')\n    }\n    if (this.hasEmailConfirmationTarget) {\n      this.emailConfirmationTarget.classList.add('bg-unverified')\n    }\n  }\n\n  mobileValidationModalTargetConnected() {\n    if (!this.mobileValidationModal) {\n      this.mobileValidationModal = new bootstrap.Modal(this.mobileValidationModalTarget, { keyboard: false });\n    }\n  }\n\n  passwordKeyUp(event) {\n    if (this.passwordComplex(event.target.value)) {\n      event.target.classList.remove('bg-unverified')\n      event.target.classList.add('bg-verified')\n      event.target.setCustomValidity('')\n      this.passwordConfirmationTarget.classList.remove('bg-verified')\n      this.passwordConfirmationTarget.classList.add('bg-unverified')\n    } else {\n      event.target.classList.remove('bg-verified')\n      event.target.classList.add('bg-unverified')\n      event.target.setCustomValidity(event.params['complexity'])\n    }\n  }\n\n  passwordConfirmationKeyUp(event) {\n    if (this.passwordComplex(this.passwordTarget.value) && (this.passwordTarget.value == this.passwordConfirmationTarget.value)) {\n      this.passwordConfirmationTarget.classList.add('bg-verified')\n      this.passwordConfirmationTarget.classList.remove('bg-unverified')\n      event.target.setCustomValidity('')\n    } else {\n      this.passwordConfirmationTarget.classList.remove('bg-verified')\n      this.passwordConfirmationTarget.classList.add('bg-unverified')\n      event.target.setCustomValidity(event.params['match'])\n    }\n  }\n\n  emailConfirmationKeyUp(event) {\n    if (this.emailTarget.value != '' && this.emailTarget.value == this.emailConfirmationTarget.value) {\n      this.emailConfirmationTarget.classList.add('bg-verified')\n      this.emailConfirmationTarget.classList.remove('bg-unverified')\n      this.emailTarget.setCustomValidity('')\n      this.emailConfirmationTarget.setCustomValidity('')\n    } else {\n      this.emailConfirmationTarget.classList.remove('bg-verified')\n      this.emailConfirmationTarget.classList.add('bg-unverified')\n      event.target.setCustomValidity(event.params['match'])\n    }\n  }\n\n  // Password Helper Functions\n  hasDigits(value) {\n    return (value.match(/\\d/) ? 1 : 0);\n  }\n\n  hasAlpha(value) {\n    return (value.match(/[A-Za-z]{1}/) ? 1 : 0);\n  }\n\n  hasSymbols(value) {\n    return (value.match(/[^a-zA-Z\\d\\s:]/) ? 1 : 0);\n  }\n\n  passwordComplex(value) {\n    let score = this.hasDigits(value) + this.hasAlpha(value) + this.hasSymbols(value);\n    return value.length >= 8 && score >= 2;\n  }\n}\n", "// This file is auto-generated by ./bin/rails stimulus:manifest:update\n// Run that command whenever you add a new controller or create them with\n// ./bin/rails generate stimulus controllerName\n\nimport { application } from \"./application\"\n\nimport Admin__BankFeedAllocationController from \"./admin/bank_feed_allocation_controller\"\napplication.register(\"admin--bank-feed-allocation\", Admin__BankFeedAllocationController)\nimport Admin__BankFeedGroupCandidatesController from \"./admin/bank_feed_group_candidates_controller\"\napplication.register(\"admin--bank-feed-group-candidates\", Admin__BankFeedGroupCandidatesController)\n\nimport Admin__ContactIdController from \"./admin/contact_id_controller\"\napplication.register(\"admin--contact-id\", Admin__ContactIdController)\n\nimport Admin__ContactIdTranslationsController from \"./admin/contact_id_translations_controller\"\napplication.register(\"admin--contact-id-translations\", Admin__ContactIdTranslationsController)\n\nimport Admin__FirmwareGraphingController from \"./admin/firmware_graphing_controller\"\napplication.register(\"admin--firmware-graphing\", Admin__FirmwareGraphingController)\n\nimport Admin__InvoicingController from \"./admin/invoicing_controller\"\napplication.register(\"admin--invoicing\", Admin__InvoicingController)\n\nimport Admin__InvoicingGraphingController from \"./admin/invoicing_graphing_controller\"\napplication.register(\"admin--invoicing-graphing\", Admin__InvoicingGraphingController)\n\nimport Admin__OnlineStatusGraphingController from \"./admin/online_status_graphing_controller\"\napplication.register(\"admin--online-status-graphing\", Admin__OnlineStatusGraphingController)\n\nimport Admin__PacketGraphingController from \"./admin/packet_graphing_controller\"\napplication.register(\"admin--packet-graphing\", Admin__PacketGraphingController)\n\nimport Admin__PendingInstallersController from \"./admin/pending_installers_controller\"\napplication.register(\"admin--pending-installers\", Admin__PendingInstallersController)\n\nimport Admin__PlansGraphingController from \"./admin/plans_graphing_controller\"\napplication.register(\"admin--plans-graphing\", Admin__PlansGraphingController)\n\nimport Admin__SiaGraphingController from \"./admin/sia_graphing_controller\"\napplication.register(\"admin--sia-graphing\", Admin__SiaGraphingController)\n\nimport Admin__SignalGraphingController from \"./admin/signal_graphing_controller\"\napplication.register(\"admin--signal-graphing\", Admin__SignalGraphingController)\n\nimport Admin__SitesController from \"./admin/sites_controller\"\napplication.register(\"admin--sites\", Admin__SitesController)\n\nimport CallTriggerRowController from \"./call_trigger_row_controller\"\napplication.register(\"call-trigger-row\", CallTriggerRowController)\n\nimport CallTriggersController from \"./call_triggers_controller\"\napplication.register(\"call-triggers\", CallTriggersController)\n\nimport CameraConfigurationController from \"./camera_configuration_controller\"\napplication.register(\"camera-configuration\", CameraConfigurationController)\n\nimport CheckoutController from \"./checkout_controller\"\napplication.register(\"checkout\", CheckoutController)\n\nimport DocumentationController from \"./documentation_controller\"\napplication.register(\"documentation\", DocumentationController)\n\nimport FileUploadController from \"./file_upload_controller\"\napplication.register(\"file-upload\", FileUploadController)\n\nimport GraphingController from \"./graphing_controller\"\napplication.register(\"graphing\", GraphingController)\n\nimport InstallerSearchController from \"./installer_search_controller\"\napplication.register(\"installer-search\", InstallerSearchController)\n\nimport InstallerUsers__AccountRecoveryController from \"./installer_users/account_recovery_controller\"\napplication.register(\"installer-users--account-recovery\", InstallerUsers__AccountRecoveryController)\n\nimport LayoutController from \"./layout_controller\"\napplication.register(\"layout\", LayoutController)\n\nimport MapController from \"./map_controller\"\napplication.register(\"map\", MapController)\n\nimport MobilesController from \"./mobiles_controller\"\napplication.register(\"mobiles\", MobilesController)\n\nimport PanelProgrammingImportController from \"./panel_programming_import_controller\"\napplication.register(\"panel-programming-import\", PanelProgrammingImportController)\n\nimport PanelStatusIconController from \"./panel_status_icon_controller\"\napplication.register(\"panel-status-icon\", PanelStatusIconController)\n\nimport PasswordVisibilityController from \"./password_visibility_controller\"\napplication.register(\"password-visibility\", PasswordVisibilityController)\n\nimport PaymentsController from \"./payments_controller\"\napplication.register(\"payments\", PaymentsController)\n\nimport PersonalReportingController from \"./personal_reporting_controller\"\napplication.register(\"personal-reporting\", PersonalReportingController)\n\nimport PhoneController from \"./phone_controller\"\napplication.register(\"phone\", PhoneController)\n\nimport PlansController from \"./plans_controller\"\napplication.register(\"plans\", PlansController)\n\nimport ReportingController from \"./reporting_controller\"\napplication.register(\"reporting\", ReportingController)\n\nimport SessionStatisticsController from \"./session_statistics_controller\"\napplication.register(\"session-statistics\", SessionStatisticsController)\n\nimport SiteProgramming__ExpiryDateController from \"./site_programming/expiry_date_controller\"\napplication.register(\"site-programming--expiry-date\", SiteProgramming__ExpiryDateController)\n\nimport SiteProgramming__OutputTypePickerController from \"./site_programming/output_type_picker_controller\"\napplication.register(\"site-programming--output-type-picker\", SiteProgramming__OutputTypePickerController)\n\nimport SiteProgramming__SearchableSelectController from \"./site_programming/searchable_select_controller\"\napplication.register(\"site-programming--searchable-select\", SiteProgramming__SearchableSelectController)\n\nimport SiteProgrammingController from \"./site_programming_controller\"\napplication.register(\"site-programming\", SiteProgrammingController)\n\nimport Sites__HistoryController from \"./sites/history_controller\"\napplication.register(\"sites--history\", Sites__HistoryController)\n\nimport SitesController from \"./sites_controller\"\napplication.register(\"sites\", SitesController)\n\nimport SmartKeyfobButtonFunctionController from \"./smart_keyfob_button_function_controller\"\napplication.register(\"smart-keyfob-button-function\", SmartKeyfobButtonFunctionController)\n\nimport SmartKeyfobsController from \"./smart_keyfobs_controller\"\napplication.register(\"smart-keyfobs\", SmartKeyfobsController)\n\nimport StoreController from \"./store_controller\"\napplication.register(\"store\", StoreController)\n\nimport TimezonesController from \"./timezones_controller\"\napplication.register(\"timezones\", TimezonesController)\n\nimport UserImageUploadController from \"./user_image_upload_controller\"\napplication.register(\"user-image-upload\", UserImageUploadController)\n\nimport Users__AccountRecoveryController from \"./users/account_recovery_controller\"\napplication.register(\"users--account-recovery\", Users__AccountRecoveryController)\n\nimport Users__CustomersController from \"./users/customers_controller\"\napplication.register(\"users--customers\", Users__CustomersController)\n\nimport Users__InstallersController from \"./users/installers_controller\"\napplication.register(\"users--installers\", Users__InstallersController)\n\nimport Users__UsersController from \"./users/users_controller\"\napplication.register(\"users--users\", Users__UsersController)\n\nimport Users__ValidationsController from \"./users/validations_controller\"\napplication.register(\"users--validations\", Users__ValidationsController)\n", "/**\n* bootstrap-formhelpers.js v2.3.0 by @vincentlamanna\n* Copyright 2018 Vincent Lamanna\n* http://www.apache.org/licenses/LICENSE-2.0\n*/\nif (!jQuery) { throw new Error(\"Bootstrap Form Helpers requires jQuery\"); }\n\n/* ==========================================================\n * bootstrap-formhelpers-countries.en_US.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2012 Vincent Lamanna\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n \nvar BFHCountriesList = {\n  'AF': 'Afghanistan',\n  'AL': 'Albania',\n  'DZ': 'Algeria',\n  'AS': 'American Samoa',\n  'AD': 'Andorra',\n  'AO': 'Angola',\n  'AI': 'Anguilla',\n  'AQ': 'Antarctica',\n  'AG': 'Antigua and Barbuda',\n  'AR': 'Argentina',\n  'AM': 'Armenia',\n  'AW': 'Aruba',\n  'AU': 'Australia',\n  'AT': 'Austria',\n  'AZ': 'Azerbaijan',\n  'BH': 'Bahrain',\n  'BD': 'Bangladesh',\n  'BB': 'Barbados',\n  'BY': 'Belarus',\n  'BE': 'Belgium',\n  'BZ': 'Belize',\n  'BJ': 'Benin',\n  'BM': 'Bermuda',\n  'BT': 'Bhutan',\n  'BO': 'Bolivia',\n  'BA': 'Bosnia and Herzegovina',\n  'BW': 'Botswana',\n  'BV': 'Bouvet Island',\n  'BR': 'Brazil',\n  'IO': 'British Indian Ocean Territory',\n  'VG': 'British Virgin Islands',\n  'BN': 'Brunei',\n  'BG': 'Bulgaria',\n  'BF': 'Burkina Faso',\n  'BI': 'Burundi',\n  'CI': 'C\u00F4te d\\'Ivoire',\n  'KH': 'Cambodia',\n  'CM': 'Cameroon',\n  'CA': 'Canada',\n  'CV': 'Cape Verde',\n  'KY': 'Cayman Islands',\n  'CF': 'Central African Republic',\n  'TD': 'Chad',\n  'CL': 'Chile',\n  'CN': 'China',\n  'CX': 'Christmas Island',\n  'CC': 'Cocos (Keeling) Islands',\n  'CO': 'Colombia',\n  'KM': 'Comoros',\n  'CG': 'Congo',\n  'CK': 'Cook Islands',\n  'CR': 'Costa Rica',\n  'HR': 'Croatia',\n  'CU': 'Cuba',\n  'CY': 'Cyprus',\n  'CZ': 'Czech Republic',\n  'CD': 'Democratic Republic of the Congo',\n  'DK': 'Denmark',\n  'DJ': 'Djibouti',\n  'DM': 'Dominica',\n  'DO': 'Dominican Republic',\n  'TP': 'East Timor',\n  'EC': 'Ecuador',\n  'EG': 'Egypt',\n  'SV': 'El Salvador',\n  'GQ': 'Equatorial Guinea',\n  'ER': 'Eritrea',\n  'EE': 'Estonia',\n  'ET': 'Ethiopia',\n  'FO': 'Faeroe Islands',\n  'FK': 'Falkland Islands',\n  'FJ': 'Fiji',\n  'FI': 'Finland',\n  'MK': 'Former Yugoslav Republic of Macedonia',\n  'FR': 'France',\n  'FX': 'France, Metropolitan',\n  'GF': 'French Guiana',\n  'PF': 'French Polynesia',\n  'TF': 'French Southern Territories',\n  'GA': 'Gabon',\n  'GE': 'Georgia',\n  'DE': 'Germany',\n  'GH': 'Ghana',\n  'GI': 'Gibraltar',\n  'GR': 'Greece',\n  'GL': 'Greenland',\n  'GD': 'Grenada',\n  'GP': 'Guadeloupe',\n  'GU': 'Guam',\n  'GT': 'Guatemala',\n  'GN': 'Guinea',\n  'GW': 'Guinea-Bissau',\n  'GY': 'Guyana',\n  'HT': 'Haiti',\n  'HM': 'Heard and Mc Donald Islands',\n  'HN': 'Honduras',\n  'HK': 'Hong Kong',\n  'HU': 'Hungary',\n  'IS': 'Iceland',\n  'IN': 'India',\n  'ID': 'Indonesia',\n  'IR': 'Iran',\n  'IQ': 'Iraq',\n  'IE': 'Ireland',\n  'IL': 'Israel',\n  'IT': 'Italy',\n  'JM': 'Jamaica',\n  'JP': 'Japan',\n  'JO': 'Jordan',\n  'KZ': 'Kazakhstan',\n  'KE': 'Kenya',\n  'KI': 'Kiribati',\n  'KW': 'Kuwait',\n  'KG': 'Kyrgyzstan',\n  'LA': 'Laos',\n  'LV': 'Latvia',\n  'LB': 'Lebanon',\n  'LS': 'Lesotho',\n  'LR': 'Liberia',\n  'LY': 'Libya',\n  'LI': 'Liechtenstein',\n  'LT': 'Lithuania',\n  'LU': 'Luxembourg',\n  'MO': 'Macau',\n  'MG': 'Madagascar',\n  'MW': 'Malawi',\n  'MY': 'Malaysia',\n  'MV': 'Maldives',\n  'ML': 'Mali',\n  'MT': 'Malta',\n  'MH': 'Marshall Islands',\n  'MQ': 'Martinique',\n  'MR': 'Mauritania',\n  'MU': 'Mauritius',\n  'YT': 'Mayotte',\n  'MX': 'Mexico',\n  'FM': 'Micronesia',\n  'MD': 'Moldova',\n  'MC': 'Monaco',\n  'MN': 'Mongolia',\n  'ME': 'Montenegro',\n  'MS': 'Montserrat',\n  'MA': 'Morocco',\n  'MZ': 'Mozambique',\n  'MM': 'Myanmar',\n  'NA': 'Namibia',\n  'NR': 'Nauru',\n  'NP': 'Nepal',\n  'NL': 'Netherlands',\n  'AN': 'Netherlands Antilles',\n  'NC': 'New Caledonia',\n  'NZ': 'New Zealand',\n  'NI': 'Nicaragua',\n  'NE': 'Niger',\n  'NG': 'Nigeria',\n  'NU': 'Niue',\n  'NF': 'Norfolk Island',\n  'KP': 'North Korea',\n  'MP': 'Northern Marianas',\n  'NO': 'Norway',\n  'OM': 'Oman',\n  'PK': 'Pakistan',\n  'PW': 'Palau',\n  'PS': 'Palestine',\n  'PA': 'Panama',\n  'PG': 'Papua New Guinea',\n  'PY': 'Paraguay',\n  'PE': 'Peru',\n  'PH': 'Philippines',\n  'PN': 'Pitcairn Islands',\n  'PL': 'Poland',\n  'PT': 'Portugal',\n  'PR': 'Puerto Rico',\n  'QA': 'Qatar',\n  'RE': 'Reunion',\n  'RO': 'Romania',\n  'RU': 'Russia',\n  'RW': 'Rwanda',\n  'ST': 'S\u00E3o Tom\u00E9 and Pr\u00EDncipe',\n  'SH': 'Saint Helena',\n  'PM': 'St. Pierre and Miquelon',\n  'KN': 'Saint Kitts and Nevis',\n  'LC': 'Saint Lucia',\n  'VC': 'Saint Vincent and the Grenadines',\n  'WS': 'Samoa',\n  'SM': 'San Marino',\n  'SA': 'Saudi Arabia',\n  'SN': 'Senegal',\n  'RS': 'Serbia',\n  'SC': 'Seychelles',\n  'SL': 'Sierra Leone',\n  'SG': 'Singapore',\n  'SK': 'Slovakia',\n  'SI': 'Slovenia',\n  'SB': 'Solomon Islands',\n  'SO': 'Somalia',\n  'ZA': 'South Africa',\n  'GS': 'South Georgia and the South Sandwich Islands',\n  'KR': 'South Korea',\n  'ES': 'Spain',\n  'LK': 'Sri Lanka',\n  'SD': 'Sudan',\n  'SR': 'Suriname',\n  'SJ': 'Svalbard and Jan Mayen Islands',\n  'SZ': 'Swaziland',\n  'SE': 'Sweden',\n  'CH': 'Switzerland',\n  'SY': 'Syria',\n  'TW': 'Taiwan',\n  'TJ': 'Tajikistan',\n  'TZ': 'Tanzania',\n  'TH': 'Thailand',\n  'BS': 'The Bahamas',\n  'GM': 'The Gambia',\n  'TG': 'Togo',\n  'TK': 'Tokelau',\n  'TO': 'Tonga',\n  'TT': 'Trinidad and Tobago',\n  'TN': 'Tunisia',\n  'TR': 'Turkey',\n  'TM': 'Turkmenistan',\n  'TC': 'Turks and Caicos Islands',\n  'TV': 'Tuvalu',\n  'VI': 'US Virgin Islands',\n  'UG': 'Uganda',\n  'UA': 'Ukraine',\n  'AE': 'United Arab Emirates',\n  'GB': 'United Kingdom',\n  'US': 'United States',\n  'UM': 'United States Minor Outlying Islands',\n  'UY': 'Uruguay',\n  'UZ': 'Uzbekistan',\n  'VU': 'Vanuatu',\n  'VA': 'Vatican City',\n  'VE': 'Venezuela',\n  'VN': 'Vietnam',\n  'WF': 'Wallis and Futuna Islands',\n  'EH': 'Western Sahara',\n  'YE': 'Yemen',\n  'ZM': 'Zambia',\n  'ZW': 'Zimbabwe'\n};\n\n /* ==========================================================\n * bootstrap-formhelpers-currencies.en_US.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2013 Vincent Lamanna\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n \nvar BFHCurrenciesList = {\n  'AED':{'label':'United Arab Emirates dirham','currencyflag':'','symbol':'\u062F.\u0625'},\n  'AFN':{'label':'Afghan afghani','currencyflag':'','symbol':'\u060B'},\n  'ALL':{'label':'Albanian lek','currencyflag':'','symbol':'L'},\n  'AMD':{'label':'Armenian dram','currencyflag':'','symbol':'\u0564\u0580'},\n  'AOA':{'label':'Angolan kwanza','currencyflag':'','symbol':'Kz'},\n  'ARS':{'label':'Argentine peso','currencyflag':'','symbol':'$'},\n  'AUD':{'label':'Australian dollar','currencyflag':'AUD','symbol':'$'},\n  'AWG':{'label':'Aruban florin','currencyflag':'','symbol':'\u0192'},\n  'AZN':{'label':'Azerbaijani manat','currencyflag':'','symbol':''},\n  'BAM':{'label':'Bosnia and Herzegovina convertible mark','currencyflag':'','symbol':'KM'},\n  'BBD':{'label':'Barbadian dollar','currencyflag':'','symbol':'$'},\n  'BDT':{'label':'Bangladeshi taka','currencyflag':'','symbol':'\u09F3'},\n  'BGN':{'label':'Bulgarian lev','currencyflag':'','symbol':'\u043B\u0432'},\n  'BHD':{'label':'Bahraini dinar','currencyflag':'','symbol':'.\u062F.\u0628'},\n  'BIF':{'label':'Burundian franc','currencyflag':'','symbol':'Fr'},\n  'BMD':{'label':'Bermudian dollar','currencyflag':'','symbol':'$'},\n  'BND':{'label':'Brunei dollar','currencyflag':'','symbol':'$'},\n  'BOB':{'label':'Bolivian boliviano','currencyflag':'','symbol':'Bs'},\n  'BRL':{'label':'Brazilian real','currencyflag':'','symbol':'R$'},\n  'BSD':{'label':'Bahamian dollar','currencyflag':'','symbol':'$'},\n  'BTN':{'label':'Bhutanese ngultrum','currencyflag':'','symbol':'Nu'},\n  'BWP':{'label':'Botswana pula','currencyflag':'','symbol':'P'},\n  'BYR':{'label':'Belarusian ruble','currencyflag':'','symbol':'Br'},\n  'BZD':{'label':'Belize dollar','currencyflag':'','symbol':'$'},\n  'CAD':{'label':'Canadian dollar','currencyflag':'','symbol':'$'},\n  'CDF':{'label':'Congolese franc','currencyflag':'','symbol':'Fr'},\n  'CHF':{'label':'Swiss franc','currencyflag':'CHF','symbol':'Fr'},\n  'CLP':{'label':'Chilean peso','currencyflag':'','symbol':'$'},\n  'CNY':{'label':'Chinese yuan','currencyflag':'','symbol':'\u00A5'},\n  'COP':{'label':'Colombian peso','currencyflag':'','symbol':'$'},\n  'CRC':{'label':'Costa Rican col\u00F3n','currencyflag':'','symbol':'\u20A1'},\n  'CUP':{'label':'Cuban convertible peso','currencyflag':'','symbol':'$'},\n  'CVE':{'label':'Cape Verdean escudo','currencyflag':'','symbol':'$'},\n  'CZK':{'label':'Czech koruna','currencyflag':'','symbol':'K\u010D'},\n  'DJF':{'label':'Djiboutian franc','currencyflag':'','symbol':'Fr'},\n  'DKK':{'label':'Danish krone','currencyflag':'DKK','symbol':'kr'},\n  'DOP':{'label':'Dominican peso','currencyflag':'','symbol':'$'},\n  'DZD':{'label':'Algerian dinar','currencyflag':'','symbol':'\u062F.\u062C'},\n  'EGP':{'label':'Egyptian pound','currencyflag':'','symbol':'\u062C.\u0645'},\n  'ERN':{'label':'Eritrean nakfa','currencyflag':'','symbol':'Nfk'},\n  'ETB':{'label':'Ethiopian birr','currencyflag':'','symbol':'Br'},\n  'EUR':{'label':'Euro','currencyflag':'EUR','symbol':'\u20AC'},\n  'FJD':{'label':'Fijian dollar','currencyflag':'','symbol':'$'},\n  'FKP':{'label':'Falkland Islands pound','currencyflag':'','symbol':'\u00A3'},\n  'GBP':{'label':'British pound','currencyflag':'','symbol':'\u00A3'},\n  'GEL':{'label':'Georgian lari','currencyflag':'','symbol':'\u10DA'},\n  'GHS':{'label':'Ghana cedi','currencyflag':'','symbol':'\u20B5'},\n  'GMD':{'label':'Gambian dalasi','currencyflag':'','symbol':'D'},\n  'GNF':{'label':'Guinean franc','currencyflag':'','symbol':'Fr'},\n  'GTQ':{'label':'Guatemalan quetzal','currencyflag':'','symbol':'Q'},\n  'GYD':{'label':'Guyanese dollar','currencyflag':'','symbol':'$'},\n  'HKD':{'label':'Hong Kong dollar','currencyflag':'','symbol':'$'},\n  'HNL':{'label':'Honduran lempira','currencyflag':'','symbol':'L'},\n  'HRK':{'label':'Croatian kuna','currencyflag':'','symbol':'kn'},\n  'HTG':{'label':'Haitian gourde','currencyflag':'','symbol':'G'},\n  'HUF':{'label':'Hungarian forint','currencyflag':'','symbol':'Ft'},\n  'IDR':{'label':'Indonesian rupiah','currencyflag':'','symbol':'Rp'},\n  'ILS':{'label':'Israeli new shekel','currencyflag':'','symbol':'\u20AA'},\n  'IMP':{'label':'Manx pound','currencyflag':'','symbol':'\u00A3'},\n  'INR':{'label':'Indian rupee','currencyflag':'','symbol':''},\n  'IQD':{'label':'Iraqi dinar','currencyflag':'','symbol':'\u0639.\u062F'},\n  'IRR':{'label':'Iranian rial','currencyflag':'','symbol':'\uFDFC'},\n  'ISK':{'label':'Icelandic kr\u00F3na','currencyflag':'','symbol':'kr'},\n  'JEP':{'label':'Jersey pound','currencyflag':'','symbol':'\u00A3'},\n  'JMD':{'label':'Jamaican dollar','currencyflag':'','symbol':'$'},\n  'JOD':{'label':'Jordanian dinar','currencyflag':'','symbol':'\u062F.\u0627'},\n  'JPY':{'label':'Japanese yen','currencyflag':'','symbol':'\u00A5'},\n  'KES':{'label':'Kenyan shilling','currencyflag':'','symbol':'Sh'},\n  'KGS':{'label':'Kyrgyzstani som','currencyflag':'','symbol':'\u043B\u0432'},\n  'KHR':{'label':'Cambodian riel','currencyflag':'','symbol':'\u17DB'},\n  'KMF':{'label':'Comorian franc','currencyflag':'','symbol':'Fr'},\n  'KPW':{'label':'North Korean won','currencyflag':'','symbol':'\u20A9'},\n  'KRW':{'label':'South Korean won','currencyflag':'','symbol':'\u20A9'},\n  'KWD':{'label':'Kuwaiti dinar','currencyflag':'','symbol':'\u062F.\u0643'},\n  'KYD':{'label':'Cayman Islands dollar','currencyflag':'','symbol':'$'},\n  'KZT':{'label':'Kazakhstani tenge','currencyflag':'','symbol':'\u20B8'},\n  'LAK':{'label':'Lao kip','currencyflag':'','symbol':'\u20AD'},\n  'LBP':{'label':'Lebanese pound','currencyflag':'','symbol':'\u0644.\u0644'},\n  'LKR':{'label':'Sri Lankan rupee','currencyflag':'','symbol':'Rs'},\n  'LRD':{'label':'Liberian dollar','currencyflag':'','symbol':'$'},\n  'LSL':{'label':'Lesotho loti','currencyflag':'','symbol':'L'},\n  'LTL':{'label':'Lithuanian litas','currencyflag':'','symbol':'Lt'},\n  'LVL':{'label':'Latvian lats','currencyflag':'','symbol':'Ls'},\n  'LYD':{'label':'Libyan dinar','currencyflag':'','symbol':'\u0644.\u062F'},\n  'MAD':{'label':'Moroccan dirham','currencyflag':'','symbol':'\u062F.\u0645.'},\n  'MDL':{'label':'Moldovan leu','currencyflag':'','symbol':'L'},\n  'MGA':{'label':'Malagasy ariary','currencyflag':'','symbol':'Ar'},\n  'MKD':{'label':'Macedonian denar','currencyflag':'','symbol':'\u0434\u0435\u043D'},\n  'MMK':{'label':'Burmese kyat','currencyflag':'','symbol':'Ks'},\n  'MNT':{'label':'Mongolian t\u00F6gr\u00F6g','currencyflag':'','symbol':'\u20AE'},\n  'MOP':{'label':'Macanese pataca','currencyflag':'','symbol':'P'},\n  'MRO':{'label':'Mauritanian ouguiya','currencyflag':'','symbol':'UM'},\n  'MUR':{'label':'Mauritian rupee','currencyflag':'','symbol':'Rs'},\n  'MVR':{'label':'Maldivian rufiyaa','currencyflag':'','symbol':'.\u0783'},\n  'MWK':{'label':'Malawian kwacha','currencyflag':'','symbol':'MK'},\n  'MXN':{'label':'Mexican peso','currencyflag':'','symbol':'$'},\n  'MYR':{'label':'Malaysian ringgit','currencyflag':'','symbol':'MR'},\n  'MZN':{'label':'Mozambican metical','currencyflag':'','symbol':'MT'},\n  'NAD':{'label':'Namibian dollar','currencyflag':'','symbol':'$'},\n  'NGN':{'label':'Nigerian naira','currencyflag':'','symbol':'\u20A6'},\n  'NIO':{'label':'Nicaraguan c\u00F3rdoba','currencyflag':'','symbol':'C$'},\n  'NOK':{'label':'Norwegian krone','currencyflag':'','symbol':'kr'},\n  'NPR':{'label':'Nepalese rupee','currencyflag':'','symbol':'Rs'},\n  'NZD':{'label':'New Zealand dollar','currencyflag':'','symbol':'$'},\n  'OMR':{'label':'Omani rial','currencyflag':'','symbol':'\u0631.\u0639.'},\n  'PAB':{'label':'Panamanian balboa','currencyflag':'','symbol':'B/.'},\n  'PEN':{'label':'Peruvian nuevo sol','currencyflag':'','symbol':'S/.'},\n  'PGK':{'label':'Papua New Guinean kina','currencyflag':'','symbol':'K'},\n  'PHP':{'label':'Philippine peso','currencyflag':'','symbol':'\u20B1'},\n  'PKR':{'label':'Pakistani rupee','currencyflag':'','symbol':'Rs'},\n  'PLN':{'label':'Polish z\u0142oty','currencyflag':'','symbol':'z\u0142'},\n  'PRB':{'label':'Transnistrian ruble','currencyflag':'','symbol':'\u0440.'},\n  'PYG':{'label':'Paraguayan guaran\u00ED','currencyflag':'','symbol':'\u20B2'},\n  'QAR':{'label':'Qatari riyal','currencyflag':'','symbol':'\u0631.\u0642'},\n  'RON':{'label':'Romanian leu','currencyflag':'','symbol':'L'},\n  'RSD':{'label':'Serbian dinar','currencyflag':'','symbol':'\u0434\u0438\u043D'},\n  'RUB':{'label':'Russian ruble','currencyflag':'','symbol':'\u0440\u0443\u0431.'},\n  'RWF':{'label':'Rwandan franc','currencyflag':'','symbol':'Fr'},\n  'SAR':{'label':'Saudi riyal','currencyflag':'','symbol':'\u0631.\u0633'},\n  'SBD':{'label':'Solomon Islands dollar','currencyflag':'','symbol':'$'},\n  'SCR':{'label':'Seychellois rupee','currencyflag':'','symbol':'Rs'},\n  'SDG':{'label':'Singapore dollar','currencyflag':'','symbol':'$'},\n  'SEK':{'label':'Swedish krona','currencyflag':'','symbol':'kr'},\n  'SGD':{'label':'Singapore dollar','currencyflag':'','symbol':'$'},\n  'SHP':{'label':'Saint Helena pound','currencyflag':'','symbol':'\u00A3'},\n  'SLL':{'label':'Sierra Leonean leone','currencyflag':'','symbol':'Le'},\n  'SOS':{'label':'Somali shilling','currencyflag':'','symbol':'Sh'},\n  'SRD':{'label':'Surinamese dollar','currencyflag':'','symbol':'$'},\n  'SSP':{'label':'South Sudanese pound','currencyflag':'','symbol':'\u00A3'},\n  'STD':{'label':'S\u00E3o Tom\u00E9 and Pr\u00EDncipe dobra','currencyflag':'','symbol':'Db'},\n  'SVC':{'label':'Salvadoran col\u00F3n','currencyflag':'','symbol':'\u20A1'},\n  'SYP':{'label':'Syrian pound','currencyflag':'','symbol':'\u00A3'},\n  'SZL':{'label':'Swazi lilangeni','currencyflag':'','symbol':'L'},\n  'THB':{'label':'Thai baht','currencyflag':'','symbol':'\u0E3F'},\n  'TJS':{'label':'Tajikistani somoni','currencyflag':'','symbol':'SM'},\n  'TMT':{'label':'Turkmenistan manat','currencyflag':'','symbol':'m'},\n  'TND':{'label':'Tunisian dinar','currencyflag':'','symbol':'\u062F.\u062A'},\n  'TOP':{'label':'Tongan pa\u02BBanga','currencyflag':'','symbol':'T$'},\n  'TRY':{'label':'Turkish lira','currencyflag':'','symbol':'&#8378;'},\n  'TTD':{'label':'Trinidad and Tobago dollar','currencyflag':'','symbol':'$'},\n  'TWD':{'label':'New Taiwan dollar','currencyflag':'','symbol':'$'},\n  'TZS':{'label':'Tanzanian shilling','currencyflag':'','symbol':'Sh'},\n  'UAH':{'label':'Ukrainian hryvnia','currencyflag':'','symbol':'\u20B4'},\n  'UGX':{'label':'Ugandan shilling','currencyflag':'','symbol':'Sh'},\n  'USD':{'label':'United States dollar','currencyflag':'','symbol':'$'},\n  'UYU':{'label':'Uruguayan peso','currencyflag':'','symbol':'$'},\n  'UZS':{'label':'Uzbekistani som','currencyflag':'','symbol':'\u043B\u0432'},\n  'VEF':{'label':'Venezuelan bol\u00EDvar','currencyflag':'','symbol':'Bs F'},\n  'VND':{'label':'Vietnamese \u0111\u1ED3ng','currencyflag':'','symbol':'\u20AB'},\n  'VUV':{'label':'Vanuatu vatu','currencyflag':'','symbol':'Vt'},\n  'WST':{'label':'Samoan t\u0101l\u0101','currencyflag':'','symbol':'T'},\n  'XAF':{'label':'Central African CFA franc','currencyflag':'XAF','symbol':'Fr'},\n  'XCD':{'label':'East Caribbean dollar','currencyflag':'XCD','symbol':'$'},\n  'XOF':{'label':'West African CFA franc','currencyflag':'XOF','symbol':'Fr'},\n  'XPF':{'label':'CFP franc','currencyflag':'XPF','symbol':'Fr'},\n  'YER':{'label':'Yemeni rial','currencyflag':'','symbol':'\uFDFC'},\n  'ZAR':{'label':'South African rand','currencyflag':'ZAR','symbol':'R'},\n  'ZMW':{'label':'Zambian kwacha','currencyflag':'','symbol':'ZK'},\n  'ZWL':{'label':'Zimbabwean dollar','currencyflag':'','symbol':'$'}\n};\n\n/* ==========================================================\n * bootstrap-formhelpers-datepicker.en_US.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2012 Vincent Lamanna\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n \nvar BFHMonthsList = [\n  'January',\n  'February',\n  'March',\n  'April',\n  'May',\n  'June',\n  'July',\n  'August',\n  'September',\n  'October',\n  'November',\n  'December'\n];\n \nvar BFHDaysList = [\n  'SUN',\n  'MON',\n  'TUE',\n  'WED',\n  'THU',\n  'FRI',\n  'SAT'\n];\n \nvar BFHDayOfWeekStart = 0;\n\n/* ==========================================================\n * bootstrap-formhelpers-fonts.en_US.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2012 Vincent Lamanna\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n \nvar BFHFontsList = {\n  'Andale Mono': '\"Andale Mono\", AndaleMono, monospace',\n  'Arial': 'Arial, \"Helvetica Neue\", Helvetica, sans-serif',\n  'Arial Black': '\"Arial Black\", \"Arial Bold\", Gadget, sans-serif',\n  'Arial Narrow': '\"Arial Narrow\", Arial, sans-serif',\n  'Arial Rounded MT Bold': '\"Arial Rounded MT Bold\", \"Helvetica Rounded\", Arial, sans-serif',\n  'Avant Garde': '\"Avant Garde\", Avantgarde, \"Century Gothic\", CenturyGothic, \"AppleGothic\", sans-serif',\n  'Baskerville': 'Baskerville, \"Baskerville Old Face\", \"Hoefler Text\", Garamond, \"Times New Roman\", serif',\n  'Big Caslon': '\"Big Caslon\", \"Book Antiqua\", \"Palatino Linotype\", Georgia, serif',\n  'Bodoni MT': '\"Bodoni MT\", Didot, \"Didot LT STD\", \"Hoefler Text\", Garamond, \"Times New Roman\", serif',\n  'Book Antiqua': '\"Book Antiqua\", Palatino, \"Palatino Linotype\", \"Palatino LT STD\", Georgia, serif',\n  'Brush Script MT': '\"Brush Script MT\", cursive',\n  'Calibri': 'Calibri, Candara, Segoe, \"Segoe UI\", Optima, Arial, sans-serif',\n  'Calisto MT': '\"Calisto MT\", \"Bookman Old Style\", Bookman, \"Goudy Old Style\", Garamond, \"Hoefler Text\", \"Bitstream Charter\", Georgia, serif',\n  'Cambrio': 'Cambria, Georgia, serif',\n  'Candara': 'Candara, Calibri, Segoe, \"Segoe UI\", Optima, Arial, sans-serif',\n  'Century Gothic': '\"Century Gothic\", CenturyGothic, AppleGothic, sans-serif',\n  'Consolas': 'Consolas, monaco, monospace',\n  'Copperplate': 'Copperplate, \"Copperplate Gothic Light\", fantasy',\n  'Courier New': '\"Courier New\", Courier, \"Lucida Sans Typewriter\", \"Lucida Typewriter\", monospace',\n  'Didot': 'Didot, \"Didot LT STD\", \"Hoefler Text\", Garamond, \"Times New Roman\", serif',\n  'Franklin Gothic Medium': '\"Franklin Gothic Medium\", \"Franklin Gothic\", \"ITC Franklin Gothic\", Arial, sans-serif',\n  'Futura': 'Futura, \"Trebuchet MS\", Arial, sans-serif',\n  'Garamond': 'Garamond, Baskerville, \"Baskerville Old Face\", \"Hoefler Text\", \"Times New Roman\", serif',\n  'Geneva': 'Geneva, Tahoma, Verdana, sans-serif',\n  'Georgia': 'Georgia, Times, \"Times New Roman\", serif',\n  'Gill Sans': '\"Gill Sans\", \"Gill Sans MT\", Calibri, sans-serif',\n  'Goudy Old Style': '\"Goudy Old Style\", Garamond, \"Big Caslon\", \"Times New Roman\", serif',\n  'Helvetica': '\"Helvetica Neue\", Helvetica, Arial, sans-serif',\n  'Hoefler Text': '\"Hoefler Text\", \"Baskerville old face\", Garamond, \"Times New Roman\", serif',\n  'Impact': 'Impact, Haettenschweiler, \"Franklin Gothic Bold\", Charcoal, \"Helvetica Inserat\", \"Bitstream Vera Sans Bold\", \"Arial Black\", sans serif',\n  'Lucida Bright': '\"Lucida Bright\", Georgia, serif',\n  'Lucida Console': '\"Lucida Console\", \"Lucida Sans Typewriter\", Monaco, \"Bitstream Vera Sans Mono\", monospace',\n  'Lucida Sans Typewriter': '\"Lucida Sans Typewriter\", \"Lucida Console\", Monaco, \"Bitstream Vera Sans Mono\", monospace',\n  'Lucida Grande': '\"Lucida Grande\", \"Lucida Sans Unicode\", \"Lucida Sans\", Geneva, Verdana, sans-serif',\n  'Monaco': 'Monaco, Consolas, \"Lucida Console\", monospace',\n  'Optima': 'Optima, Segoe, \"Segoe UI\", Candara, Calibri, Arial, sans-serif',\n  'Palatino': 'Palatino, \"Palatino Linotype\", \"Palatino LT STD\", \"Book Antiqua\", Georgia, serif',\n  'Papyrus': 'Papyrus, fantasy',\n  'Perpetua': 'Perpetua, Baskerville, \"Big Caslon\", \"Palatino Linotype\", Palatino, \"URW Palladio L\", \"Nimbus Roman No9 L\", serif',\n  'Rockwell': 'Rockwell, \"Courier Bold\", Courier, Georgia, Times, \"Times New Roman\", serif',\n  'Rockwell Extra Bold': '\"Rockwell Extra Bold\", \"Rockwell Bold\", monospace',\n  'Segoe UI': '\"Segoe UI\", Frutiger, \"Frutiger Linotype',\n  'Tahoma': 'Tahoma, Verdana, Segoe, sans-serif',\n  'Times New Roman': 'TimesNewRoman, \"Times New Roman\", Times, Baskerville, Georgia, serif',\n  'Trebuchet MS': '\"Trebuchet MS\", \"Lucida Grande\", \"Lucida Sans Unicode\", \"Lucida Sans\", Tahoma, sans-serif',\n  'Verdana': 'Verdana, Geneva, sans-serif'\n};\n\n/* ==========================================================\n * bootstrap-formhelpers-fontsizes.en_US.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2012 Vincent Lamanna\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n \nvar BFHFontSizesList = {\n  '8': '8px',\n  '9': '9px',\n  '10': '10px',\n  '11': '11px',\n  '12': '12px',\n  '14': '14px',\n  '16': '16px',\n  '18': '18px',\n  '20': '20px',\n  '24': '24px',\n  '28': '28px',\n  '36': '36px',\n  '48': '48px'\n};\n\n/* ==========================================================\n * bootstrap-formhelpers-googlefonts.en_US.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2012 Vincent Lamanna\n * contributed by Aaron Collegeman, Squidoo, 2012\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\nvar BFHGoogleFontsList = {\n  'kind': 'webfonts#webfontList',\n  'items': [\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'ABeeZee',\n      'variants': [\n        'regular',\n        'italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Abel',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Abril Fatface',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Aclonica',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Acme',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Actor',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Adamina',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Advent Pro',\n      'variants': [\n        '100',\n        '200',\n        '300',\n        'regular',\n        '500',\n        '600',\n        '700'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin',\n        'greek'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Aguafina Script',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Akronim',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Aladin',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Aldrich',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Alegreya',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic',\n        '900',\n        '900italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Alegreya SC',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic',\n        '900',\n        '900italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Alex Brush',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Alfa Slab One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Alice',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Alike',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Alike Angular',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Allan',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Allerta',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Allerta Stencil',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Allura',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Almendra',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Almendra Display',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Almendra SC',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Amarante',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Amaranth',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Amatic SC',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Amethysta',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Anaheim',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Andada',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Andika',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin',\n        'cyrillic-ext'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Angkor',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'khmer'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Annie Use Your Telescope',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Anonymous Pro',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'cyrillic',\n        'greek-ext',\n        'latin-ext',\n        'latin',\n        'greek',\n        'cyrillic-ext'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Antic',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Antic Didone',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Antic Slab',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Anton',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Arapey',\n      'variants': [\n        'regular',\n        'italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Arbutus',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Arbutus Slab',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Architects Daughter',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Archivo Black',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Archivo Narrow',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Arimo',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Arizonia',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Armata',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Artifika',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Arvo',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Asap',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Asset',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Astloch',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Asul',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Atomic Age',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Aubrey',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Audiowide',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Autour One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Average',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Average Sans',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Averia Gruesa Libre',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Averia Libre',\n      'variants': [\n        '300',\n        '300italic',\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Averia Sans Libre',\n      'variants': [\n        '300',\n        '300italic',\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Averia Serif Libre',\n      'variants': [\n        '300',\n        '300italic',\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Bad Script',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Balthazar',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Bangers',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Basic',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Battambang',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'khmer'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Baumans',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Bayon',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'khmer'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Belgrano',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Belleza',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'BenchNine',\n      'variants': [\n        '300',\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Bentham',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Berkshire Swash',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Bevan',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Bigelow Rules',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Bigshot One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Bilbo',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Bilbo Swash Caps',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Bitter',\n      'variants': [\n        'regular',\n        'italic',\n        '700'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Black Ops One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Bokor',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'khmer'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Bonbon',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Boogaloo',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Bowlby One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Bowlby One SC',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Brawler',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Bree Serif',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Bubblegum Sans',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Bubbler One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Buda',\n      'variants': [\n        '300'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Buenard',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Butcherman',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Butterfly Kids',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Cabin',\n      'variants': [\n        'regular',\n        'italic',\n        '500',\n        '500italic',\n        '600',\n        '600italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Cabin Condensed',\n      'variants': [\n        'regular',\n        '500',\n        '600',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Cabin Sketch',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Caesar Dressing',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Cagliostro',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Calligraffitti',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Cambo',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Candal',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Cantarell',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Cantata One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Cantora One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Capriola',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Cardo',\n      'variants': [\n        'regular',\n        'italic',\n        '700'\n      ],\n      'subsets': [\n        'greek-ext',\n        'latin-ext',\n        'latin',\n        'greek'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Carme',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Carrois Gothic',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Carrois Gothic SC',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Carter One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Caudex',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'greek-ext',\n        'latin-ext',\n        'latin',\n        'greek'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Cedarville Cursive',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Ceviche One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Changa One',\n      'variants': [\n        'regular',\n        'italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Chango',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Chau Philomene One',\n      'variants': [\n        'regular',\n        'italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Chela One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Chelsea Market',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Chenla',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'khmer'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Cherry Cream Soda',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Cherry Swash',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Chewy',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Chicle',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Chivo',\n      'variants': [\n        'regular',\n        'italic',\n        '900',\n        '900italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Cinzel',\n      'variants': [\n        'regular',\n        '700',\n        '900'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Cinzel Decorative',\n      'variants': [\n        'regular',\n        '700',\n        '900'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Clicker Script',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Coda',\n      'variants': [\n        'regular',\n        '800'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Coda Caption',\n      'variants': [\n        '800'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Codystar',\n      'variants': [\n        '300',\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Combo',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Comfortaa',\n      'variants': [\n        '300',\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin',\n        'greek',\n        'cyrillic-ext'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Coming Soon',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Concert One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Condiment',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Content',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'khmer'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Contrail One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Convergence',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Cookie',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Copse',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Corben',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Courgette',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Cousine',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Coustard',\n      'variants': [\n        'regular',\n        '900'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Covered By Your Grace',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Crafty Girls',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Creepster',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Crete Round',\n      'variants': [\n        'regular',\n        'italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Crimson Text',\n      'variants': [\n        'regular',\n        'italic',\n        '600',\n        '600italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Croissant One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Crushed',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Cuprum',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Cutive',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Cutive Mono',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Damion',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Dancing Script',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Dangrek',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'khmer'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Dawning of a New Day',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Days One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Delius',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Delius Swash Caps',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Delius Unicase',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Della Respira',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Devonshire',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Didact Gothic',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'cyrillic',\n        'greek-ext',\n        'latin-ext',\n        'latin',\n        'greek',\n        'cyrillic-ext'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Diplomata',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Diplomata SC',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Doppio One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Dorsa',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Dosis',\n      'variants': [\n        '200',\n        '300',\n        'regular',\n        '500',\n        '600',\n        '700',\n        '800'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Dr Sugiyama',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Droid Sans',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Droid Sans Mono',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Droid Serif',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Duru Sans',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Dynalight',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'EB Garamond',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin',\n        'vietnamese',\n        'cyrillic-ext'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Eagle Lake',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Eater',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Economica',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Electrolize',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Emblema One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Emilys Candy',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Engagement',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Englebert',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Enriqueta',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Erica One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Esteban',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Euphoria Script',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Ewert',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Exo',\n      'variants': [\n        '100',\n        '100italic',\n        '200',\n        '200italic',\n        '300',\n        '300italic',\n        'regular',\n        'italic',\n        '500',\n        '500italic',\n        '600',\n        '600italic',\n        '700',\n        '700italic',\n        '800',\n        '800italic',\n        '900',\n        '900italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Expletus Sans',\n      'variants': [\n        'regular',\n        'italic',\n        '500',\n        '500italic',\n        '600',\n        '600italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Fanwood Text',\n      'variants': [\n        'regular',\n        'italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Fascinate',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Fascinate Inline',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Faster One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Fasthand',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'khmer'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Federant',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Federo',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Felipa',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Fenix',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Finger Paint',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Fjord One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Flamenco',\n      'variants': [\n        '300',\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Flavors',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Fondamento',\n      'variants': [\n        'regular',\n        'italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Fontdiner Swanky',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Forum',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin',\n        'cyrillic-ext'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Francois One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Freckle Face',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Fredericka the Great',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Fredoka One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Freehand',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'khmer'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Fresca',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Frijole',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Fugaz One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'GFS Didot',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'greek'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'GFS Neohellenic',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'greek'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Gafata',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Galdeano',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Galindo',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Gentium Basic',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Gentium Book Basic',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Geo',\n      'variants': [\n        'regular',\n        'italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Geostar',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Geostar Fill',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Germania One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Gilda Display',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Give You Glory',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Glass Antiqua',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Glegoo',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Gloria Hallelujah',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Goblin One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Gochi Hand',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Gorditas',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Goudy Bookletter 1911',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Graduate',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Gravitas One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Great Vibes',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Griffy',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Gruppo',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Gudea',\n      'variants': [\n        'regular',\n        'italic',\n        '700'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Habibi',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Hammersmith One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Hanalei',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Hanalei Fill',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Handlee',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Hanuman',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'khmer'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Happy Monkey',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Headland One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Henny Penny',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Herr Von Muellerhoff',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Holtwood One SC',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Homemade Apple',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Homenaje',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'IM Fell DW Pica',\n      'variants': [\n        'regular',\n        'italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'IM Fell DW Pica SC',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'IM Fell Double Pica',\n      'variants': [\n        'regular',\n        'italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'IM Fell Double Pica SC',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'IM Fell English',\n      'variants': [\n        'regular',\n        'italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'IM Fell English SC',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'IM Fell French Canon',\n      'variants': [\n        'regular',\n        'italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'IM Fell French Canon SC',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'IM Fell Great Primer',\n      'variants': [\n        'regular',\n        'italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'IM Fell Great Primer SC',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Iceberg',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Iceland',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Imprima',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Inconsolata',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Inder',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Indie Flower',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Inika',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Irish Grover',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Istok Web',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin',\n        'cyrillic-ext'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Italiana',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Italianno',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Jacques Francois',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Jacques Francois Shadow',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Jim Nightshade',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Jockey One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Jolly Lodger',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Josefin Sans',\n      'variants': [\n        '100',\n        '100italic',\n        '300',\n        '300italic',\n        'regular',\n        'italic',\n        '600',\n        '600italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Josefin Slab',\n      'variants': [\n        '100',\n        '100italic',\n        '300',\n        '300italic',\n        'regular',\n        'italic',\n        '600',\n        '600italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Joti One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Judson',\n      'variants': [\n        'regular',\n        'italic',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Julee',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Julius Sans One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Junge',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Jura',\n      'variants': [\n        '300',\n        'regular',\n        '500',\n        '600'\n      ],\n      'subsets': [\n        'cyrillic',\n        'greek-ext',\n        'latin-ext',\n        'latin',\n        'greek',\n        'cyrillic-ext'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Just Another Hand',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Just Me Again Down Here',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Kameron',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Karla',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Kaushan Script',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Keania One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Kelly Slab',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Kenia',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Khmer',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'khmer'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Kite One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Knewave',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Kotta One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Koulen',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'khmer'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Kranky',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Kreon',\n      'variants': [\n        '300',\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Kristi',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Krona One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'La Belle Aurore',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Lancelot',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Lato',\n      'variants': [\n        '100',\n        '100italic',\n        '300',\n        '300italic',\n        'regular',\n        'italic',\n        '700',\n        '700italic',\n        '900',\n        '900italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'League Script',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Leckerli One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Ledger',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Lekton',\n      'variants': [\n        'regular',\n        'italic',\n        '700'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Lemon',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Life Savers',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Lilita One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Limelight',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Linden Hill',\n      'variants': [\n        'regular',\n        'italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Lobster',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin',\n        'cyrillic-ext'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Lobster Two',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Londrina Outline',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Londrina Shadow',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Londrina Sketch',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Londrina Solid',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Lora',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Love Ya Like A Sister',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Loved by the King',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Lovers Quarrel',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Luckiest Guy',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Lusitana',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Lustria',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Macondo',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Macondo Swash Caps',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Magra',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Maiden Orange',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Mako',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Marcellus',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Marcellus SC',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Marck Script',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Margarine',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Marko One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Marmelad',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Marvel',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Mate',\n      'variants': [\n        'regular',\n        'italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Mate SC',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Maven Pro',\n      'variants': [\n        'regular',\n        '500',\n        '700',\n        '900'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'McLaren',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Meddon',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'MedievalSharp',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Medula One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Megrim',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Meie Script',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Merienda',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Merienda One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Merriweather',\n      'variants': [\n        '300',\n        'regular',\n        '700',\n        '900'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Metal',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'khmer'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Metal Mania',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Metamorphous',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Metrophobic',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Michroma',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Miltonian',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Miltonian Tattoo',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Miniver',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Miss Fajardose',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Modern Antiqua',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Molengo',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Molle',\n      'variants': [\n        'italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Monofett',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Monoton',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Monsieur La Doulaise',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Montaga',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Montez',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Montserrat',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Montserrat Alternates',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Montserrat Subrayada',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Moul',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'khmer'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Moulpali',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'khmer'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Mountains of Christmas',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Mouse Memoirs',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Mr Bedfort',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Mr Dafoe',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Mr De Haviland',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Mrs Saint Delafield',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Mrs Sheppards',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Muli',\n      'variants': [\n        '300',\n        '300italic',\n        'regular',\n        'italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Mystery Quest',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Neucha',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Neuton',\n      'variants': [\n        '200',\n        '300',\n        'regular',\n        'italic',\n        '700',\n        '800'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'News Cycle',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Niconne',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Nixie One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Nobile',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Nokora',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'khmer'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Norican',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Nosifer',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Nothing You Could Do',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Noticia Text',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin',\n        'vietnamese'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Nova Cut',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Nova Flat',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Nova Mono',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin',\n        'greek'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Nova Oval',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Nova Round',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Nova Script',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Nova Slim',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Nova Square',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Numans',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Nunito',\n      'variants': [\n        '300',\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Odor Mean Chey',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'khmer'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Offside',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Old Standard TT',\n      'variants': [\n        'regular',\n        'italic',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Oldenburg',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Oleo Script',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Oleo Script Swash Caps',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Open Sans',\n      'variants': [\n        '300',\n        '300italic',\n        'regular',\n        'italic',\n        '600',\n        '600italic',\n        '700',\n        '700italic',\n        '800',\n        '800italic'\n      ],\n      'subsets': [\n        'cyrillic',\n        'greek-ext',\n        'latin-ext',\n        'latin',\n        'vietnamese',\n        'greek',\n        'cyrillic-ext'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Open Sans Condensed',\n      'variants': [\n        '300',\n        '300italic',\n        '700'\n      ],\n      'subsets': [\n        'cyrillic',\n        'greek-ext',\n        'latin-ext',\n        'latin',\n        'vietnamese',\n        'greek',\n        'cyrillic-ext'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Oranienbaum',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin',\n        'cyrillic-ext'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Orbitron',\n      'variants': [\n        'regular',\n        '500',\n        '700',\n        '900'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Oregano',\n      'variants': [\n        'regular',\n        'italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Orienta',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Original Surfer',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Oswald',\n      'variants': [\n        '300',\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Over the Rainbow',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Overlock',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic',\n        '900',\n        '900italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Overlock SC',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Ovo',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Oxygen',\n      'variants': [\n        '300',\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Oxygen Mono',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'PT Mono',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin',\n        'cyrillic-ext'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'PT Sans',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'PT Sans Caption',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'PT Sans Narrow',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'PT Serif',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'PT Serif Caption',\n      'variants': [\n        'regular',\n        'italic'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Pacifico',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Paprika',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Parisienne',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Passero One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Passion One',\n      'variants': [\n        'regular',\n        '700',\n        '900'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Patrick Hand',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Patua One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Paytone One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Peralta',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Permanent Marker',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Petit Formal Script',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Petrona',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Philosopher',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Piedra',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Pinyon Script',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Pirata One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Plaster',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Play',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'cyrillic',\n        'greek-ext',\n        'latin-ext',\n        'latin',\n        'greek',\n        'cyrillic-ext'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Playball',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Playfair Display',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic',\n        '900',\n        '900italic'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Playfair Display SC',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic',\n        '900',\n        '900italic'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Podkova',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Poiret One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Poller One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Poly',\n      'variants': [\n        'regular',\n        'italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Pompiere',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Pontano Sans',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Port Lligat Sans',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Port Lligat Slab',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Prata',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Preahvihear',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'khmer'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Press Start 2P',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin',\n        'greek'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Princess Sofia',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Prociono',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Prosto One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Puritan',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Purple Purse',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Quando',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Quantico',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Quattrocento',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Quattrocento Sans',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Questrial',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Quicksand',\n      'variants': [\n        '300',\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Quintessential',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Qwigley',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Racing Sans One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Radley',\n      'variants': [\n        'regular',\n        'italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Raleway',\n      'variants': [\n        '100',\n        '200',\n        '300',\n        'regular',\n        '500',\n        '600',\n        '700',\n        '800',\n        '900'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Raleway Dots',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Rambla',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Rammetto One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Ranchers',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Rancho',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Rationale',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Redressed',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Reenie Beanie',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Revalia',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Ribeye',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Ribeye Marrow',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Righteous',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Risque',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Rochester',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Rock Salt',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Rokkitt',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Romanesco',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Ropa Sans',\n      'variants': [\n        'regular',\n        'italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Rosario',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Rosarivo',\n      'variants': [\n        'regular',\n        'italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Rouge Script',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Ruda',\n      'variants': [\n        'regular',\n        '700',\n        '900'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Rufina',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Ruge Boogie',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Ruluko',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Rum Raisin',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Ruslan Display',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin',\n        'cyrillic-ext'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Russo One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Ruthie',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Rye',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Sacramento',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Sail',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Salsa',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Sanchez',\n      'variants': [\n        'regular',\n        'italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Sancreek',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Sansita One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Sarina',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Satisfy',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Scada',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Schoolbell',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Seaweed Script',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Sevillana',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Seymour One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Shadows Into Light',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Shadows Into Light Two',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Shanti',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Share',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Share Tech',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Share Tech Mono',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Shojumaru',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Short Stack',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Siemreap',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'khmer'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Sigmar One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Signika',\n      'variants': [\n        '300',\n        'regular',\n        '600',\n        '700'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Signika Negative',\n      'variants': [\n        '300',\n        'regular',\n        '600',\n        '700'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Simonetta',\n      'variants': [\n        'regular',\n        'italic',\n        '900',\n        '900italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Sirin Stencil',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Six Caps',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Skranji',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Slackey',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Smokum',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Smythe',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Sniglet',\n      'variants': [\n        '800'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Snippet',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Snowburst One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Sofadi One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Sofia',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Sonsie One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Sorts Mill Goudy',\n      'variants': [\n        'regular',\n        'italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Source Code Pro',\n      'variants': [\n        '200',\n        '300',\n        'regular',\n        '600',\n        '700',\n        '900'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Source Sans Pro',\n      'variants': [\n        '200',\n        '200italic',\n        '300',\n        '300italic',\n        'regular',\n        'italic',\n        '600',\n        '600italic',\n        '700',\n        '700italic',\n        '900',\n        '900italic'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Special Elite',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Spicy Rice',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Spinnaker',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Spirax',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Squada One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Stalemate',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Stalinist One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Stardos Stencil',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Stint Ultra Condensed',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Stint Ultra Expanded',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Stoke',\n      'variants': [\n        '300',\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Strait',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Sue Ellen Francisco',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Sunshiney',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Supermercado One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Suwannaphum',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'khmer'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Swanky and Moo Moo',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Syncopate',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Tangerine',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Taprom',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'khmer'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Telex',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Tenor Sans',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin',\n        'cyrillic-ext'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Text Me One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'The Girl Next Door',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Tienne',\n      'variants': [\n        'regular',\n        '700',\n        '900'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Tinos',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Titan One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Titillium Web',\n      'variants': [\n        '200',\n        '200italic',\n        '300',\n        '300italic',\n        'regular',\n        'italic',\n        '600',\n        '600italic',\n        '700',\n        '700italic',\n        '900'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Trade Winds',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Trocchi',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Trochut',\n      'variants': [\n        'regular',\n        'italic',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Trykker',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Tulpen One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Ubuntu',\n      'variants': [\n        '300',\n        '300italic',\n        'regular',\n        'italic',\n        '500',\n        '500italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'cyrillic',\n        'greek-ext',\n        'latin-ext',\n        'latin',\n        'greek',\n        'cyrillic-ext'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Ubuntu Condensed',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'cyrillic',\n        'greek-ext',\n        'latin-ext',\n        'latin',\n        'greek',\n        'cyrillic-ext'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Ubuntu Mono',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'cyrillic',\n        'greek-ext',\n        'latin-ext',\n        'latin',\n        'greek',\n        'cyrillic-ext'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Ultra',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Uncial Antiqua',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Underdog',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Unica One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'UnifrakturCook',\n      'variants': [\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'UnifrakturMaguntia',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Unkempt',\n      'variants': [\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Unlock',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Unna',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'VT323',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Vampiro One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Varela',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Varela Round',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Vast Shadow',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Vibur',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Vidaloka',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Viga',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Voces',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Volkhov',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Vollkorn',\n      'variants': [\n        'regular',\n        'italic',\n        '700',\n        '700italic'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Voltaire',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Waiting for the Sunrise',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Wallpoet',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Walter Turncoat',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Warnes',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Wellfleet',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Wire One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Yanone Kaffeesatz',\n      'variants': [\n        '200',\n        '300',\n        'regular',\n        '700'\n      ],\n      'subsets': [\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Yellowtail',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Yeseva One',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'cyrillic',\n        'latin-ext',\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Yesteryear',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    },\n    {\n      'kind': 'webfonts#webfont',\n      'family': 'Zeyada',\n      'variants': [\n        'regular'\n      ],\n      'subsets': [\n        'latin'\n      ]\n    }\n  ]\n};\n\n/* ==========================================================\n * bootstrap-formhelpers-languages.en_US.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2012 Vincent Lamanna\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n \nvar BFHLanguagesList = {\n  'om': 'Afaan Oromoo',\n  'aa': 'Afaraf',\n  'af': 'Afrikaans',\n  'ak': 'Akan',\n  'an': 'aragon\u00E9s',\n  'ig': 'As\u1EE5s\u1EE5 Igbo',\n  'gn': 'Ava\u00F1e\\'\u1EBD',\n  'ae': 'avesta',\n  'ay': 'aymar aru',\n  'az': 'az\u0259rbaycan dili',\n  'id': 'Bahasa Indonesia',\n  'ms': 'bahasa Melayu',\n  'bm': 'bamanankan',\n  'jv': 'basa Jawa',\n  'su': 'Basa Sunda',\n  'bi': 'Bislama',\n  'bs': 'bosanski jezik',\n  'br': 'brezhoneg',\n  'ca': 'catal\u00E0',\n  'ch': 'Chamoru',\n  'ny': 'chiChe\u0175a',\n  'sn': 'chiShona',\n  'co': 'corsu',\n  'cy': 'Cymraeg',\n  'da': 'dansk',\n  'se': 'Davvis\u00E1megiella',\n  'de': 'Deutsch',\n  'nv': 'Din\u00E9 bizaad',\n  'et': 'eesti',\n  'na': 'Ekakair\u0169 Naoero',\n  'en': 'English',\n  'es': 'espa\u00F1ol',\n  'eo': 'Esperanto',\n  'eu': 'euskara',\n  'ee': 'E\u028Begbe',\n  'to': 'faka Tonga',\n  'mg': 'fiteny malagasy',\n  'fr': 'fran\u00E7ais',\n  'fy': 'Frysk',\n  'ff': 'Fulfulde',\n  'fo': 'f\u00F8royskt',\n  'ga': 'Gaeilge',\n  'gv': 'Gaelg',\n  'sm': 'gagana fa\\'a Samoa',\n  'gl': 'galego',\n  'sq': 'gjuha shqipe',\n  'gd': 'G\u00E0idhlig',\n  'ki': 'G\u0129k\u0169y\u0169',\n  'ha': 'Hausa',\n  'ho': 'Hiri Motu',\n  'hr': 'hrvatski jezik',\n  'io': 'Ido',\n  'rw': 'Ikinyarwanda',\n  'rn': 'Ikirundi',\n  'ia': 'Interlingua',\n  'nd': 'isiNdebele',\n  'nr': 'isiNdebele',\n  'xh': 'isiXhosa',\n  'zu': 'isiZulu',\n  'it': 'italiano',\n  'ik': 'I\u00F1upiaq',\n  'pl': 'polski',\n  'mh': 'Kajin M\u0327aje\u013C',\n  'kl': 'kalaallisut',\n  'kr': 'Kanuri',\n  'kw': 'Kernewek',\n  'kg': 'KiKongo',\n  'sw': 'Kiswahili',\n  'ht': 'Krey\u00F2l ayisyen',\n  'kj': 'Kuanyama',\n  'ku': 'Kurd\u00EE',\n  'la': 'latine',\n  'lv': 'latvie\u0161u valoda',\n  'lt': 'lietuvi\u0173 kalba',\n  'ro': 'limba rom\u00E2n\u0103',\n  'li': 'Limburgs',\n  'ln': 'Ling\u00E1la',\n  'lg': 'Luganda',\n  'lb': 'L\u00EBtzebuergesch',\n  'hu': 'magyar',\n  'mt': 'Malti',\n  'nl': 'Nederlands',\n  'no': 'Norsk',\n  'nb': 'Norsk bokm\u00E5l',\n  'nn': 'Norsk nynorsk',\n  'uz': 'O\\'zbek',\n  'oc': 'occitan',\n  'ie': 'Interlingue',\n  'hz': 'Otjiherero',\n  'ng': 'Owambo',\n  'pt': 'portugu\u00EAs',\n  'ty': 'Reo Tahiti',\n  'rm': 'rumantsch grischun',\n  'qu': 'Runa Simi',\n  'sc': 'sardu',\n  'za': 'Sa\u026F cue\u014B\u0185',\n  'st': 'Sesotho',\n  'tn': 'Setswana',\n  'ss': 'SiSwati',\n  'sl': 'slovenski jezik',\n  'sk': 'sloven\u010Dina',\n  'so': 'Soomaaliga',\n  'fi': 'suomi',\n  'sv': 'Svenska',\n  'mi': 'te reo M\u0101ori',\n  'vi': 'Ti\u1EBFng Vi\u1EC7t',\n  'lu': 'Tshiluba',\n  've': 'Tshiven\u1E13a',\n  'tw': 'Twi',\n  'tk': 'T\u00FCrkmen',\n  'tr': 'T\u00FCrk\u00E7e',\n  'ug': 'Uy\u01A3urq\u0259',\n  'vo': 'Volap\u00FCk',\n  'fj': 'vosa Vakaviti',\n  'wa': 'walon',\n  'tl': 'Wikang Tagalog',\n  'wo': 'Wollof',\n  'ts': 'Xitsonga',\n  'yo': 'Yor\u00F9b\u00E1',\n  'sg': 'y\u00E2ng\u00E2 t\u00EE s\u00E4ng\u00F6',\n  'is': '\u00CDslenska',\n  'cs': '\u010De\u0161tina',\n  'el': '\u03B5\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC',\n  'av': '\u0430\u0432\u0430\u0440 \u043C\u0430\u0446\u04C0',\n  'ab': '\u0430\u04A7\u0441\u0443\u0430 \u0431\u044B\u0437\u0448\u04D9\u0430',\n  'ba': '\u0431\u0430\u0448\u04A1\u043E\u0440\u0442 \u0442\u0435\u043B\u0435',\n  'be': '\u0431\u0435\u043B\u0430\u0440\u0443\u0441\u043A\u0430\u044F \u043C\u043E\u0432\u0430',\n  'bg': '\u0431\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438 \u0435\u0437\u0438\u043A',\n  'os': '\u0438\u0440\u043E\u043D \u00E6\u0432\u0437\u0430\u0433',\n  'kv': '\u043A\u043E\u043C\u0438 \u043A\u044B\u0432',\n  'ky': '\u041A\u044B\u0440\u0433\u044B\u0437\u0447\u0430',\n  'mk': '\u043C\u0430\u043A\u0435\u0434\u043E\u043D\u0441\u043A\u0438 \u0458\u0430\u0437\u0438\u043A',\n  'mn': '\u043C\u043E\u043D\u0433\u043E\u043B',\n  'ce': '\u043D\u043E\u0445\u0447\u0438\u0439\u043D \u043C\u043E\u0442\u0442',\n  'ru': '\u0420\u0443\u0441\u0441\u043A\u0438\u0439 \u044F\u0437\u044B\u043A',\n  'sr': '\u0441\u0440\u043F\u0441\u043A\u0438 \u0458\u0435\u0437\u0438\u043A',\n  'tt': '\u0442\u0430\u0442\u0430\u0440 \u0442\u0435\u043B\u0435',\n  'tg': '\u0442\u043E\u04B7\u0438\u043A\u04E3',\n  'uk': '\u0443\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430 \u043C\u043E\u0432\u0430',\n  'cv': '\u0447\u04D1\u0432\u0430\u0448 \u0447\u04D7\u043B\u0445\u0438',\n  'cu': '\u0469\u0437\u044B\u043A\u044A \u0441\u043B\u043E\u0432\u0463\u043D\u044C\u0441\u043A\u044A',\n  'kk': '\u049B\u0430\u0437\u0430\u049B \u0442\u0456\u043B\u0456',\n  'hy': '\u0540\u0561\u0575\u0565\u0580\u0565\u0576',\n  'yi': '\u05D9\u05D9\u05B4\u05D3\u05D9\u05E9',\n  'he': '\u05E2\u05D1\u05E8\u05D9\u05EA',\n  'ur': '\u0627\u0631\u062F\u0648',\n  'ar': '\u0627\u0644\u0639\u0631\u0628\u064A\u0629',\n  'fa': '\u0641\u0627\u0631\u0633\u06CC',\n  'ps': '\u067E\u069A\u062A\u0648',\n  'ks': '\u0915\u0936\u094D\u092E\u0940\u0930\u0940',\n  'ne': '\u0928\u0947\u092A\u093E\u0932\u0940',\n  'pi': '\u092A\u093E\u0934\u093F',\n  'bh': '\u092D\u094B\u091C\u092A\u0941\u0930\u0940',\n  'mr': '\u092E\u0930\u093E\u0920\u0940',\n  'sa': '\u0938\u0902\u0938\u094D\u0915\u0943\u0924\u092E\u094D',\n  'sd': '\u0938\u093F\u0928\u094D\u0927\u0940',\n  'hi': '\u0939\u093F\u0928\u094D\u0926\u0940',\n  'as': '\u0985\u09B8\u09AE\u09C0\u09AF\u09BC\u09BE',\n  'bn': '\u09AC\u09BE\u0982\u09B2\u09BE',\n  'pa': '\u0A2A\u0A70\u0A1C\u0A3E\u0A2C\u0A40',\n  'gu': '\u0A97\u0AC1\u0A9C\u0AB0\u0ABE\u0AA4\u0AC0',\n  'or': '\u0B13\u0B21\u0B3C\u0B3F\u0B06',\n  'ta': '\u0BA4\u0BAE\u0BBF\u0BB4\u0BCD',\n  'te': '\u0C24\u0C46\u0C32\u0C41\u0C17\u0C41',\n  'kn': '\u0C95\u0CA8\u0CCD\u0CA8\u0CA1',\n  'ml': '\u0D2E\u0D32\u0D2F\u0D3E\u0D33\u0D02',\n  'si': '\u0DC3\u0DD2\u0D82\u0DC4\u0DBD',\n  'th': '\u0E44\u0E17\u0E22',\n  'lo': '\u0E9E\u0EB2\u0EAA\u0EB2\u0EA5\u0EB2\u0EA7',\n  'bo': '\u0F56\u0F7C\u0F51\u0F0B\u0F61\u0F72\u0F42',\n  'dz': '\u0F62\u0FAB\u0F7C\u0F44\u0F0B\u0F41',\n  'my': '\u1017\u1019\u102C\u1005\u102C',\n  'ka': '\u10E5\u10D0\u10E0\u10D7\u10E3\u10DA\u10D8',\n  'ti': '\u1275\u130D\u122D\u129B',\n  'am': '\u12A0\u121B\u122D\u129B',\n  'iu': '\u1403\u14C4\u1483\u144E\u1450\u1466',\n  'oj': '\u140A\u14C2\u1511\u14C8\u142F\u14A7\u140E\u14D0',\n  'cr': '\u14C0\u1426\u1403\u152D\u140D\u140F\u1423',\n  'km': '\u1781\u17D2\u1798\u17C2\u179A',\n  'zh': '\u4E2D\u6587\u00A0(Zh\u014Dngw\u00E9n)',\n  'ja': '\u65E5\u672C\u8A9E\u00A0(\u306B\u307B\u3093\u3054)',\n  'ii': '\uA188\uA320\uA4BF Nuosuhxop',\n  'ko': '\uD55C\uAD6D\uC5B4\u00A0(\u97D3\u570B\u8A9E)'\n};\n\n/* ==========================================================\n * bootstrap-formhelpers-phone.en_US.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2012 Vincent Lamanna\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file edcept in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either edpress or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n \nvar BFHPhoneFormatList = {\n  'AF': '+93 0dd ddd dddd',\n  'AL': '+355 0dd ddd ddd',\n  'DZ': '+213 0ddd dd dd dd',\n  'AS': '+1 (ddd) ddd-dddd',\n  'AD': '+376 ddddddddd',\n  'AO': '+244 ddd ddd ddd',\n  'AI': '+1 (ddd) ddd-dddd',\n  'AQ': '+672 ddddddddd',\n  'AG': '+1 (ddd) ddd-dddd',\n  'AR': '+54 ddddddddd',\n  'AM': '+374 0dd dddddd',\n  'AW': '+297 ddd dddd',\n  'AU': '+61 ddd ddd ddd',\n  'AT': '+43 0dddd ddddddddd',\n  'AZ': '+994 ddddddddd',\n  'BH': '+973 ddddddddd',\n  'BD': '+880 ddddddddd',\n  'BB': '+1 ddddddddd',\n  'BY': '+375 ddddddddd',\n  'BE': '+32 ddddddddd',\n  'BZ': '+501 ddddddddd',\n  'BJ': '+229 ddddddddd',\n  'BM': '+1 (ddd) ddd-dddd',\n  'BT': '+975 ddddddddd',\n  'BO': '+591 ddddddddd',\n  'BA': '+387 ddddddddd',\n  'BW': '+267 ddddddddd',\n  'BV': '+0 ddddddddd',\n  'BR': '+55 ddddddddd',\n  'IO': '+0 ddddddddd',\n  'VG': '+1 (ddd) ddd-dddd',\n  'BN': '+673 ddddddddd',\n  'BG': '+359 ddddddddd',\n  'BF': '+226 ddddddddd',\n  'BI': '+257 ddddddddd',\n  'CI': '+225 ddddddddd',\n  'KH': '+855 ddddddddd',\n  'CM': '+237 ddddddddd',\n  'CA': '+1 (ddd) ddd-dddd',\n  'CV': '+238 ddddddddd',\n  'KY': '+1 (ddd) ddd-dddd',\n  'CF': '+236 ddddddddd',\n  'TD': '+235 ddddddddd',\n  'CL': '+56 ddddddddd',\n  'CN': '+86 ddddddddd',\n  'CX': '+61 ddddddddd',\n  'CC': '+61 ddddddddd',\n  'CO': '+57 ddddddddd',\n  'KM': '+269 ddddddddd',\n  'CG': '+242 ddddddddd',\n  'CK': '+682 ddddddddd',\n  'CR': '+506 ddddddddd',\n  'HR': '+385 ddddddddd',\n  'CU': '+53 ddddddddd',\n  'CY': '+357 ddddddddd',\n  'CZ': '+420 ddddddddd',\n  'CD': '+243 ddddddddd',\n  'DK': '+45 ddddddddd',\n  'DJ': '+253 ddddddddd',\n  'DM': '+1 (ddd) ddd-dddd',\n  'DO': '+1 (ddd) ddd-dddd',\n  'TL': '+670 ddddddddd',\n  'EC': '+593 ddddddddd',\n  'EG': '+20 ddddddddd',\n  'SV': '+503 ddddddddd',\n  'GQ': '+240 ddddddddd',\n  'ER': '+291 ddddddddd',\n  'EE': '+372 ddddddddd',\n  'ET': '+251 ddddddddd',\n  'FO': '+298 ddddddddd',\n  'FK': '+500 ddddddddd',\n  'FJ': '+679 ddddddddd',\n  'FI': '+358 ddddddddd',\n  'MK': '+389 ddddddddd',\n  'FR': '+33 d dd dd dd dd',\n  'GF': '+594 ddddddddd',\n  'PF': '+689 ddddddddd',\n  'TF': '+262 ddddddddd',\n  'GA': '+241 ddddddddd',\n  'GE': '+995 ddddddddd',\n  'DE': '+49 ddddddddd',\n  'GH': '+233 ddddddddd',\n  'GI': '+350 ddddddddd',\n  'GR': '+30 ddddddddd',\n  'GL': '+299 ddddddddd',\n  'GD': '+1 (ddd) ddd-dddd',\n  'GP': '+590 ddddddddd',\n  'GU': '+1 (ddd) ddd-dddd',\n  'GT': '+502 ddddddddd',\n  'GN': '+224 ddddddddd',\n  'GW': '+245 ddddddddd',\n  'GY': '+592 ddddddddd',\n  'HT': '+509 ddddddddd',\n  'HM': '+0 ddddddddd',\n  'HN': '+504 ddddddddd',\n  'HK': '+852 ddddddddd',\n  'HU': '+36 ddddddddd',\n  'IS': '+354 ddddddddd',\n  'IN': '+91 ddddddddd',\n  'ID': '+62 ddddddddd',\n  'IR': '+98 ddddddddd',\n  'IQ': '+964 ddddddddd',\n  'IE': '+353 ddddddddd',\n  'IL': '+972 ddddddddd',\n  'IT': '+39 ddddddddddd',\n  'JM': '+1 (ddd) ddd-dddd',\n  'JP': '+81 ddddddddd',\n  'JO': '+962 ddddddddd',\n  'KZ': '+7 ddddddddd',\n  'KE': '+254 ddddddddd',\n  'KI': '+686 ddddddddd',\n  'KW': '+965 ddddddddd',\n  'KG': '+996 ddddddddd',\n  'LA': '+856 ddddddddd',\n  'LV': '+371 ddddddddd',\n  'LB': '+961 ddddddddd',\n  'LS': '+266 ddddddddd',\n  'LR': '+231 ddddddddd',\n  'LY': '+218 ddddddddd',\n  'LI': '+423 ddddddddd',\n  'LT': '+370 ddddddddd',\n  'LU': '+352 ddddddddd',\n  'MO': '+853 ddddddddd',\n  'MG': '+261 ddddddddd',\n  'MW': '+265 ddddddddd',\n  'MY': '+60 ddddddddd',\n  'MV': '+960 ddddddddd',\n  'ML': '+223 ddddddddd',\n  'MT': '+356 ddddddddd',\n  'MH': '+692 ddddddddd',\n  'MQ': '+596 ddddddddd',\n  'MR': '+222 ddddddddd',\n  'MU': '+230 ddddddddd',\n  'YT': '+262 ddddddddd',\n  'MX': '+52 ddddddddd',\n  'FM': '+691 ddddddddd',\n  'MD': '+373 ddddddddd',\n  'MC': '+377 ddddddddd',\n  'MN': '+976 ddddddddd',\n  'MS': '+1 (ddd) ddd-dddd',\n  'MA': '+212 ddddddddd',\n  'MZ': '+258 ddddddddd',\n  'MM': '+95 ddddddddd',\n  'NA': '+264 ddddddddd',\n  'NR': '+674 ddddddddd',\n  'NP': '+977 ddddddddd',\n  'NL': '+31 ddddddddd',\n  'AN': '+599 ddddddddd',\n  'NC': '+687 ddddddddd',\n  'NZ': '+64 ddddddddd',\n  'NI': '+505 ddddddddd',\n  'NE': '+227 ddddddddd',\n  'NG': '+234 ddddddddd',\n  'NU': '+683 ddddddddd',\n  'NF': '+672 ddddddddd',\n  'KP': '+850 ddddddddd',\n  'MP': '+1 (ddd) ddd-dddd',\n  'NO': '+47 ddddddddd',\n  'OM': '+968 ddddddddd',\n  'PK': '+92 ddddddddd',\n  'PW': '+680 ddddddddd',\n  'PA': '+507 ddddddddd',\n  'PG': '+675 ddddddddd',\n  'PY': '+595 ddddddddd',\n  'PE': '+51 ddddddddd',\n  'PH': '+63 ddddddddd',\n  'PN': '+870 ddddddddd',\n  'PL': '+48 ddddddddd',\n  'PT': '+351 ddddddddd',\n  'PR': '+1 (ddd) ddd-dddd',\n  'QA': '+974 ddddddddd',\n  'RE': '+262 ddddddddd',\n  'RO': '+40 ddddddddd',\n  'RU': '+7 dddddddddd',\n  'RW': '+250 ddddddddd',\n  'ST': '+239 ddddddddd',\n  'SH': '+290 ddddddddd',\n  'KN': '+1 (ddd) ddd-dddd',\n  'LC': '+1 (ddd) ddd-dddd',\n  'PM': '+508 ddddddddd',\n  'VC': '+1 (ddd) ddd-dddd',\n  'WS': '+685 ddddddddd',\n  'SM': '+378 ddddddddd',\n  'SA': '+966 ddddddddd',\n  'SN': '+221 ddddddddd',\n  'SC': '+248 ddddddddd',\n  'SL': '+232 ddddddddd',\n  'SG': '+65 ddddddddd',\n  'SK': '+421 ddddddddd',\n  'SI': '+386 ddddddddd',\n  'SB': '+677 ddddddddd',\n  'SO': '+252 ddddddddd',\n  'ZA': '+27 ddddddddd',\n  'GS': '+0 ddddddddd',\n  'KR': '+82 ddddddddd',\n  'ES': '+34 ddddddddd',\n  'LK': '+94 ddddddddd',\n  'SD': '+249 ddddddddd',\n  'SR': '+597 ddddddddd',\n  'SJ': '+0 ddddddddd',\n  'SZ': '+268 ddddddddd',\n  'SE': '+46 ddddddddd',\n  'CH': '+41 ddddddddd',\n  'SY': '+963 ddddddddd',\n  'TW': '+886 ddddddddd',\n  'TJ': '+992 ddddddddd',\n  'TZ': '+255 ddddddddd',\n  'TH': '+66 ddddddddd',\n  'BS': '+1 (ddd) ddd-dddd',\n  'GM': '+220 ddddddddd',\n  'TG': '+228 ddddddddd',\n  'TK': '+690 ddddddddd',\n  'TO': '+676 ddddddddd',\n  'TT': '+1 (ddd) ddd-dddd',\n  'TN': '+216 ddddddddd',\n  'TR': '+90 ddddddddd',\n  'TM': '+993 ddddddddd',\n  'TC': '+1 (ddd) ddd-dddd',\n  'TV': '+688 ddddddddd',\n  'VI': '+1 (ddd) ddd-dddd',\n  'UG': '+256 ddddddddd',\n  'UA': '+380 ddddddddd',\n  'AE': '+971 ddddddddd',\n  'GB': '+44 (ddd) dddd dddd',\n  'US': '+1 (ddd) ddd-dddd',\n  'UM': '+0 ddddddddd',\n  'UY': '+598 ddddddddd',\n  'UZ': '+998 ddddddddd',\n  'VU': '+678 ddddddddd',\n  'VA': '+39 ddddddddd',\n  'VE': '+58 ddddddddd',\n  'VN': '+84 ddddddddd',\n  'WF': '+681 ddddddddd',\n  'EH': '+0 ddddddddd',\n  'YE': '+967 ddddddddd',\n  'YU': '+0 ddddddddd',\n  'ZM': '+260 ddddddddd',\n  'ZW': '+263 ddddddddd'\n};\n\n/* ==========================================================\n * bootstrap-formhelpers-states.en_US.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2012 Vincent Lamanna\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\nvar BFHStatesList = {\n  'AF':{\n    '1' : {'code':'BAL','name':'Balkh'},\n    '2' : {'code':'BAM','name':'Bamian'},\n    '3' : {'code':'BDG','name':'Badghis'},\n    '4' : {'code':'BDS','name':'Badakhshan'},\n    '5' : {'code':'BGL','name':'Baghlan'},\n    '6' : {'code':'FRA','name':'Farah'},\n    '7' : {'code':'FYB','name':'Faryab'},\n    '8' : {'code':'GHA','name':'Ghazni'},\n    '9' : {'code':'GHO','name':'Ghowr'},\n    '10' : {'code':'HEL','name':'Helmand'},\n    '11' : {'code':'HER','name':'Herat'},\n    '12' : {'code':'JOW','name':'Jowzjan'},\n    '13' : {'code':'KAB','name':'Kabul'},\n    '14' : {'code':'KAN','name':'Kandahar'},\n    '15' : {'code':'KAP','name':'Kapisa'},\n    '16' : {'code':'KDZ','name':'Kondoz'},\n    '17' : {'code':'KHO','name':'Khost'},\n    '18' : {'code':'KNR','name':'Konar'},\n    '19' : {'code':'LAG','name':'Laghman'},\n    '20' : {'code':'LOW','name':'Lowgar'},\n    '21' : {'code':'NAN','name':'Nangrahar'},\n    '22' : {'code':'NIM','name':'Nimruz'},\n    '23' : {'code':'NUR','name':'Nurestan'},\n    '24' : {'code':'ORU','name':'Oruzgan'},\n    '25' : {'code':'PAR','name':'Parwan'},\n    '26' : {'code':'PIA','name':'Paktia'},\n    '27' : {'code':'PKA','name':'Paktika'},\n    '28' : {'code':'SAM','name':'Samangan'},\n    '29' : {'code':'SAR','name':'Sar-e Pol'},\n    '30' : {'code':'TAK','name':'Takhar'},\n    '31' : {'code':'WAR','name':'Wardak'},\n    '32' : {'code':'ZAB','name':'Zabol'}\n  },\n  'AL':{\n    '1' : {'code':'BR','name':'Berat'},\n    '2' : {'code':'BU','name':'Bulqize'},\n    '3' : {'code':'DI','name':'Diber'},\n    '4' : {'code':'DL','name':'Delvine'},\n    '5' : {'code':'DR','name':'Durres'},\n    '6' : {'code':'DV','name':'Devoll'},\n    '7' : {'code':'EL','name':'Elbasan'},\n    '8' : {'code':'ER','name':'Kolonje'},\n    '9' : {'code':'FR','name':'Fier'},\n    '10' : {'code':'GJ','name':'Gjirokaster'},\n    '11' : {'code':'GR','name':'Gramsh'},\n    '12' : {'code':'HA','name':'Has'},\n    '13' : {'code':'KA','name':'Kavaje'},\n    '14' : {'code':'KB','name':'Kurbin'},\n    '15' : {'code':'KC','name':'Kucove'},\n    '16' : {'code':'KO','name':'Korce'},\n    '17' : {'code':'KR','name':'Kruje'},\n    '18' : {'code':'KU','name':'Kukes'},\n    '19' : {'code':'LB','name':'Librazhd'},\n    '20' : {'code':'LE','name':'Lezhe'},\n    '21' : {'code':'LU','name':'Lushnje'},\n    '22' : {'code':'MK','name':'Mallakaster'},\n    '23' : {'code':'MM','name':'Malesi e Madhe'},\n    '24' : {'code':'MR','name':'Mirdite'},\n    '25' : {'code':'MT','name':'Mat'},\n    '26' : {'code':'PG','name':'Pogradec'},\n    '27' : {'code':'PQ','name':'Peqin'},\n    '28' : {'code':'PR','name':'Permet'},\n    '29' : {'code':'PU','name':'Puke'},\n    '30' : {'code':'SH','name':'Shkoder'},\n    '31' : {'code':'SK','name':'Skrapar'},\n    '32' : {'code':'SR','name':'Sarande'},\n    '33' : {'code':'TE','name':'Tepelene'},\n    '34' : {'code':'TP','name':'Tropoje'},\n    '35' : {'code':'TR','name':'Tirane'},\n    '36' : {'code':'VL','name':'Vlore'}\n  },\n  'DZ':{\n    '1' : {'code':'ADE','name':'Ain Defla'},\n    '2' : {'code':'ADR','name':'Adrar'},\n    '3' : {'code':'ALG','name':'Alger'},\n    '4' : {'code':'ANN','name':'Annaba'},\n    '5' : {'code':'ATE','name':'Ain Temouchent'},\n    '6' : {'code':'BAT','name':'Batna'},\n    '7' : {'code':'BBA','name':'Bordj Bou Arreridj'},\n    '8' : {'code':'BEC','name':'Bechar'},\n    '9' : {'code':'BEJ','name':'Bejaia'},\n    '10' : {'code':'BIS','name':'Biskra'},\n    '11' : {'code':'BLI','name':'Blida'},\n    '12' : {'code':'BMD','name':'Boumerdes'},\n    '13' : {'code':'BOA','name':'Bouira'},\n    '14' : {'code':'CHL','name':'Chlef'},\n    '15' : {'code':'CON','name':'Constantine'},\n    '16' : {'code':'DJE','name':'Djelfa'},\n    '17' : {'code':'EBA','name':'El Bayadh'},\n    '18' : {'code':'EOU','name':'El Oued'},\n    '19' : {'code':'ETA','name':'El Tarf'},\n    '20' : {'code':'GHA','name':'Ghardaia'},\n    '21' : {'code':'GUE','name':'Guelma'},\n    '22' : {'code':'ILL','name':'Illizi'},\n    '23' : {'code':'JIJ','name':'Jijel'},\n    '24' : {'code':'KHE','name':'Khenchela'},\n    '25' : {'code':'LAG','name':'Laghouat'},\n    '26' : {'code':'MED','name':'Medea'},\n    '27' : {'code':'MIL','name':'Mila'},\n    '28' : {'code':'MOS','name':'Mostaganem'},\n    '29' : {'code':'MSI','name':'M\\'Sila'},\n    '30' : {'code':'MUA','name':'Muaskar'},\n    '31' : {'code':'NAA','name':'Naama'},\n    '32' : {'code':'OEB','name':'Oum el-Bouaghi'},\n    '33' : {'code':'ORA','name':'Oran'},\n    '34' : {'code':'OUA','name':'Ouargla'},\n    '35' : {'code':'REL','name':'Relizane'},\n    '36' : {'code':'SAH','name':'Souk Ahras'},\n    '37' : {'code':'SAI','name':'Saida'},\n    '38' : {'code':'SBA','name':'Sidi Bel Abbes'},\n    '39' : {'code':'SET','name':'Setif'},\n    '40' : {'code':'SKI','name':'Skikda'},\n    '41' : {'code':'TAM','name':'Tamanghasset'},\n    '42' : {'code':'TEB','name':'Tebessa'},\n    '43' : {'code':'TIA','name':'Tiaret'},\n    '44' : {'code':'TIN','name':'Tindouf'},\n    '45' : {'code':'TIP','name':'Tipaza'},\n    '46' : {'code':'TIS','name':'Tissemsilt'},\n    '47' : {'code':'TLE','name':'Tlemcen'},\n    '48' : {'code':'TOU','name':'Tizi Ouzou'}\n  },\n  'AS':{\n    '1' : {'code':'E','name':'Eastern'},\n    '2' : {'code':'M','name':'Manu\\'a'},\n    '3' : {'code':'R','name':'Rose Island'},\n    '4' : {'code':'S','name':'Swains Island'},\n    '5' : {'code':'W','name':'Western'}\n  },\n  'AD':{\n    '1' : {'code':'ALV','name':'Andorra la Vella'},\n    '2' : {'code':'CAN','name':'Canillo'},\n    '3' : {'code':'ENC','name':'Encamp'},\n    '4' : {'code':'ESE','name':'Escaldes-Engordany'},\n    '5' : {'code':'LMA','name':'La Massana'},\n    '6' : {'code':'ORD','name':'Ordino'},\n    '7' : {'code':'SJL','name':'Sant Juli\u00E0 de L\u00F2ria'}\n  },\n  'AO':{\n    '1' : {'code':'BGO','name':'Bengo'},\n    '2' : {'code':'BGU','name':'Benguela'},\n    '3' : {'code':'BIE','name':'Bie'},\n    '4' : {'code':'CAB','name':'Cabinda'},\n    '5' : {'code':'CCU','name':'Cuando-Cubango'},\n    '6' : {'code':'CNO','name':'Cuanza Norte'},\n    '7' : {'code':'CUS','name':'Cuanza Sul'},\n    '8' : {'code':'CNN','name':'Cunene'},\n    '9' : {'code':'HUA','name':'Huambo'},\n    '10' : {'code':'HUI','name':'Huila'},\n    '11' : {'code':'LUA','name':'Luanda'},\n    '12' : {'code':'LNO','name':'Lunda Norte'},\n    '13' : {'code':'LSU','name':'Lunda Sul'},\n    '14' : {'code':'MAL','name':'Malange'},\n    '15' : {'code':'MOX','name':'Moxico'},\n    '16' : {'code':'NAM','name':'Namibe'},\n    '17' : {'code':'UIG','name':'Uige'},\n    '18' : {'code':'ZAI','name':'Zaire'}\n  },\n  'AI':{\n    '1' : {'code':'ANG','name':'Anguillita'},\n    '2' : {'code':'ANG','name':'Anguila'},\n    '3' : {'code':'DOG','name':'Dog'},\n    '4' : {'code':'LIT','name':'Little Scrub'},\n    '5' : {'code':'PRI','name':'Prickly Pear'},\n    '6' : {'code':'SAN','name':'Sandy'},\n    '7' : {'code':'SCR','name':'Scrub'},\n    '8' : {'code':'SEA','name':'Seal'},\n    '9' : {'code':'SOM','name':'Sombrero'}\n  },\n  'AQ':{\n    '1' : {'code':'ASG','name':'Saint George'},\n    '2' : {'code':'ASH','name':'Saint Philip'},\n    '3' : {'code':'ASJ','name':'Saint John'},\n    '4' : {'code':'ASL','name':'Saint Paul'},\n    '5' : {'code':'ASM','name':'Saint Mary'},\n    '6' : {'code':'ASR','name':'Saint Peter'},\n    '7' : {'code':'BAR','name':'Barbuda'},\n    '8' : {'code':'RED','name':'Redonda'}\n  },\n  'AR':{\n    '1' : {'code':'AN','name':'Antartida e Islas del Atlantico'},\n    '2' : {'code':'BA','name':'Buenos Aires'},\n    '3' : {'code':'CA','name':'Catamarca'},\n    '4' : {'code':'CH','name':'Chaco'},\n    '5' : {'code':'CU','name':'Chubut'},\n    '6' : {'code':'CO','name':'Cordoba'},\n    '7' : {'code':'CR','name':'Corrientes'},\n    '8' : {'code':'CF','name':'Capital Federal'},\n    '9' : {'code':'ER','name':'Entre Rios'},\n    '10' : {'code':'FO','name':'Formosa'},\n    '11' : {'code':'JU','name':'Jujuy'},\n    '12' : {'code':'LP','name':'La Pampa'},\n    '13' : {'code':'LR','name':'La Rioja'},\n    '14' : {'code':'ME','name':'Mendoza'},\n    '15' : {'code':'MI','name':'Misiones'},\n    '16' : {'code':'NE','name':'Neuquen'},\n    '17' : {'code':'RN','name':'Rio Negro'},\n    '18' : {'code':'SA','name':'Salta'},\n    '19' : {'code':'SJ','name':'San Juan'},\n    '20' : {'code':'SL','name':'San Luis'},\n    '21' : {'code':'SC','name':'Santa Cruz'},\n    '22' : {'code':'SF','name':'Santa Fe'},\n    '23' : {'code':'SD','name':'Santiago del Estero'},\n    '24' : {'code':'TF','name':'Tierra del Fuego'},\n    '25' : {'code':'TU','name':'Tucuman'}\n  },\n  'AM':{\n    '1' : {'code':'AGT','name':'Aragatsotn'},\n    '2' : {'code':'ARR','name':'Ararat'},\n    '3' : {'code':'ARM','name':'Armavir'},\n    '4' : {'code':'GEG','name':'Geghark \\'unik\\''},\n    '5' : {'code':'KOT','name':'Kotayk\\''},\n    '6' : {'code':'LOR','name':'Lorri'},\n    '7' : {'code':'SHI','name':'Shirak'},\n    '8' : {'code':'SYU','name':'Syunik\\''},\n    '9' : {'code':'TAV','name':'Tavush'},\n    '10' : {'code':'VAY','name':'Vayots\\' Dzor'},\n    '11' : {'code':'YER','name':'Yerevan'}\n  },\n  'AW':{\n    '1' : {'code':'ARU','name':'Aruba'},\n    '2' : {'code':'DRU','name':'Druif Beach'},\n    '3' : {'code':'MAN','name':'Manchebo Beach'},\n    '4' : {'code':'NOO','name':'Noord'},\n    '5' : {'code':'ORA','name':'Oranjestad'},\n    '6' : {'code':'PAL','name':'Palm Beach'},\n    '7' : {'code':'ROO','name':'Rooi Thomas'},\n    '8' : {'code':'SIN','name':'Sint Nicolaas'},\n    '9' : {'code':'SIN','name':'Sint Nicolas'},\n    '10' : {'code':'WAY','name':'Wayaca'}\n  },\n  'AU':{\n    '1' : {'code':'ACT','name':'Australian Capital Territory'},\n    '2' : {'code':'NSW','name':'New South Wales'},\n    '3' : {'code':'NT','name':'Northern Territory'},\n    '4' : {'code':'QLD','name':'Queensland'},\n    '5' : {'code':'SA','name':'South Australia'},\n    '6' : {'code':'TAS','name':'Tasmania'},\n    '7' : {'code':'VIC','name':'Victoria'},\n    '8' : {'code':'WA','name':'Western Australia'}\n  },\n  'AT':{\n    '1' : {'code':'BUR','name':'Burgenland'},\n    '2' : {'code':'KAR','name':'Krnten'},\n    '3' : {'code':'NOS','name':'Nieder\u00F6esterreich'},\n    '4' : {'code':'OOS','name':'Ober\u00F6esterreich'},\n    '5' : {'code':'SAL','name':'Salzburg'},\n    '6' : {'code':'STE','name':'Steiermark'},\n    '7' : {'code':'TIR','name':'Tirol'},\n    '8' : {'code':'VOR','name':'Vorarlberg'},\n    '9' : {'code':'WIE','name':'Wien'}\n  },\n  'AZ':{\n    '1' : {'code':'AB','name':'Ali Bayramli'},\n    '2' : {'code':'ABS','name':'Abseron'},\n    '3' : {'code':'AGC','name':'AgcabAdi'},\n    '4' : {'code':'AGM','name':'Agdam'},\n    '5' : {'code':'AGS','name':'Agdas'},\n    '6' : {'code':'AGA','name':'Agstafa'},\n    '7' : {'code':'AGU','name':'Agsu'},\n    '8' : {'code':'AST','name':'Astara'},\n    '9' : {'code':'BA','name':'Baki'},\n    '10' : {'code':'BAB','name':'BabAk'},\n    '11' : {'code':'BAL','name':'BalakAn'},\n    '12' : {'code':'BAR','name':'BArdA'},\n    '13' : {'code':'BEY','name':'Beylaqan'},\n    '14' : {'code':'BIL','name':'Bilasuvar'},\n    '15' : {'code':'CAB','name':'Cabrayil'},\n    '16' : {'code':'CAL','name':'Calilabab'},\n    '17' : {'code':'CUL','name':'Culfa'},\n    '18' : {'code':'DAS','name':'Daskasan'},\n    '19' : {'code':'DAV','name':'Davaci'},\n    '20' : {'code':'FUZ','name':'Fuzuli'},\n    '21' : {'code':'GA','name':'Ganca'},\n    '22' : {'code':'GAD','name':'Gadabay'},\n    '23' : {'code':'GOR','name':'Goranboy'},\n    '24' : {'code':'GOY','name':'Goycay'},\n    '25' : {'code':'HAC','name':'Haciqabul'},\n    '26' : {'code':'IMI','name':'Imisli'},\n    '27' : {'code':'ISM','name':'Ismayilli'},\n    '28' : {'code':'KAL','name':'Kalbacar'},\n    '29' : {'code':'KUR','name':'Kurdamir'},\n    '30' : {'code':'LA','name':'Lankaran'},\n    '31' : {'code':'LAC','name':'Lacin'},\n    '32' : {'code':'LAN','name':'Lankaran'},\n    '33' : {'code':'LER','name':'Lerik'},\n    '34' : {'code':'MAS','name':'Masalli'},\n    '35' : {'code':'MI','name':'Mingacevir'},\n    '36' : {'code':'NA','name':'Naftalan'},\n    '37' : {'code':'NX','name':'Naxcivan'},\n    '38' : {'code':'NEF','name':'Neftcala'},\n    '39' : {'code':'OGU','name':'Oguz'},\n    '40' : {'code':'ORD','name':'Ordubad'},\n    '41' : {'code':'QAB','name':'Qabala'},\n    '42' : {'code':'QAX','name':'Qax'},\n    '43' : {'code':'QAZ','name':'Qazax'},\n    '44' : {'code':'QOB','name':'Qobustan'},\n    '45' : {'code':'QBA','name':'Quba'},\n    '46' : {'code':'QBI','name':'Qubadli'},\n    '47' : {'code':'QUS','name':'Qusar'},\n    '48' : {'code':'SA','name':'Saki'},\n    '49' : {'code':'SAT','name':'Saatli'},\n    '50' : {'code':'SAB','name':'Sabirabad'},\n    '51' : {'code':'SAD','name':'Sadarak'},\n    '52' : {'code':'SAH','name':'Sahbuz'},\n    '53' : {'code':'SAK','name':'Saki'},\n    '54' : {'code':'SAL','name':'Salyan'},\n    '55' : {'code':'SM','name':'Sumqayit'},\n    '56' : {'code':'SMI','name':'Samaxi'},\n    '57' : {'code':'SKR','name':'Samkir'},\n    '58' : {'code':'SMX','name':'Samux'},\n    '59' : {'code':'SAR','name':'Sarur'},\n    '60' : {'code':'SIY','name':'Siyazan'},\n    '61' : {'code':'SS','name':'Susa'},\n    '62' : {'code':'SUS','name':'Susa'},\n    '63' : {'code':'TAR','name':'Tartar'},\n    '64' : {'code':'TOV','name':'Tovuz'},\n    '65' : {'code':'UCA','name':'Ucar'},\n    '66' : {'code':'XA','name':'Xankandi'},\n    '67' : {'code':'XAC','name':'Xacmaz'},\n    '68' : {'code':'XAN','name':'Xanlar'},\n    '69' : {'code':'XIZ','name':'Xizi'},\n    '70' : {'code':'XCI','name':'Xocali'},\n    '71' : {'code':'XVD','name':'Xocavand'},\n    '72' : {'code':'YAR','name':'Yardimli'},\n    '73' : {'code':'YEV','name':'Yevlax'},\n    '74' : {'code':'ZAN','name':'Zangilan'},\n    '75' : {'code':'ZAQ','name':'Zaqatala'},\n    '76' : {'code':'ZAR','name':'Zardab'}\n  },\n  'BS':{\n    '1' : {'code':'ACK','name':'Acklins'},\n    '2' : {'code':'BER','name':'Berry Islands'},\n    '3' : {'code':'BIM','name':'Bimini'},\n    '4' : {'code':'BLK','name':'Black Point'},\n    '5' : {'code':'CAT','name':'Cat Island'},\n    '6' : {'code':'CAB','name':'Central Abaco'},\n    '7' : {'code':'CAN','name':'Central Andros'},\n    '8' : {'code':'CEL','name':'Central Eleuthera'},\n    '9' : {'code':'FRE','name':'City of Freeport'},\n    '10' : {'code':'CRO','name':'Crooked Island'},\n    '11' : {'code':'EGB','name':'East Grand Bahama'},\n    '12' : {'code':'EXU','name':'Exuma'},\n    '13' : {'code':'GRD','name':'Grand Cay'},\n    '14' : {'code':'HAR','name':'Harbour Island'},\n    '15' : {'code':'HOP','name':'Hope Town'},\n    '16' : {'code':'INA','name':'Inagua'},\n    '17' : {'code':'LNG','name':'Long Island'},\n    '18' : {'code':'MAN','name':'Mangrove Cay'},\n    '19' : {'code':'MAY','name':'Mayaguana'},\n    '20' : {'code':'MOO','name':'Moore\\'s Island'},\n    '21' : {'code':'NAB','name':'North Abaco'},\n    '22' : {'code':'NAN','name':'North Andros'},\n    '23' : {'code':'NEL','name':'North Eleuthera'},\n    '24' : {'code':'RAG','name':'Ragged Island'},\n    '25' : {'code':'RUM','name':'Rum Cay'},\n    '26' : {'code':'SAL','name':'San Salvador'},\n    '27' : {'code':'SAB','name':'South Abaco'},\n    '28' : {'code':'SAN','name':'South Andros'},\n    '29' : {'code':'SEL','name':'South Eleuthera'},\n    '30' : {'code':'SWE','name':'Spanish Wells'},\n    '31' : {'code':'WGB','name':'West Grand Bahama'}\n  },\n  'BH':{\n    '1' : {'code':'CAP','name':'Capital'},\n    '2' : {'code':'CEN','name':'Central'},\n    '3' : {'code':'MUH','name':'Muharraq'},\n    '4' : {'code':'NOR','name':'Northern'},\n    '5' : {'code':'SOU','name':'Southern'}\n  },\n  'BD':{\n    '1' : {'code':'BAR','name':'Barisal'},\n    '2' : {'code':'CHI','name':'Chittagong'},\n    '3' : {'code':'DHA','name':'Dhaka'},\n    '4' : {'code':'KHU','name':'Khulna'},\n    '5' : {'code':'RAJ','name':'Rajshahi'},\n    '6' : {'code':'SYL','name':'Sylhet'}\n  },\n  'BB':{\n    '1' : {'code':'CC','name':'Christ Church'},\n    '2' : {'code':'AND','name':'Saint Andrew'},\n    '3' : {'code':'GEO','name':'Saint George'},\n    '4' : {'code':'JAM','name':'Saint James'},\n    '5' : {'code':'JOH','name':'Saint John'},\n    '6' : {'code':'JOS','name':'Saint Joseph'},\n    '7' : {'code':'LUC','name':'Saint Lucy'},\n    '8' : {'code':'MIC','name':'Saint Michael'},\n    '9' : {'code':'PET','name':'Saint Peter'},\n    '10' : {'code':'PHI','name':'Saint Philip'},\n    '11' : {'code':'THO','name':'Saint Thomas'}\n  },\n  'BY':{\n    '1' : {'code':'BR','name':'Brestskaya (Brest)'},\n    '2' : {'code':'HO','name':'Homyel\\'skaya (Homyel\\')'},\n    '3' : {'code':'HM','name':'Horad Minsk'},\n    '4' : {'code':'HR','name':'Hrodzyenskaya (Hrodna)'},\n    '5' : {'code':'MA','name':'Mahilyowskaya (Mahilyow)'},\n    '6' : {'code':'MI','name':'Minskaya'},\n    '7' : {'code':'VI','name':'Vitsyebskaya (Vitsyebsk)'}\n  },\n  'BE':{\n    '1' : {'code':'VAN','name':'Antwerpen'},\n    '2' : {'code':'WBR','name':'Brabant Wallon'},\n    '3' : {'code':'WHT','name':'Hainaut'},\n    '4' : {'code':'WLG','name':'Liege'},\n    '5' : {'code':'VLI','name':'Limburg'},\n    '6' : {'code':'WLX','name':'Luxembourg'},\n    '7' : {'code':'WNA','name':'Namur'},\n    '8' : {'code':'VOV','name':'Oost-Vlaanderen'},\n    '9' : {'code':'VBR','name':'Vlaams Brabant'},\n    '10' : {'code':'VWV','name':'West-Vlaanderen'}\n  },\n  'BZ':{\n    '1' : {'code':'BZ','name':'Belize'},\n    '2' : {'code':'CY','name':'Cayo'},\n    '3' : {'code':'CR','name':'Corozal'},\n    '4' : {'code':'OW','name':'Orange Walk'},\n    '5' : {'code':'SC','name':'Stann Creek'},\n    '6' : {'code':'TO','name':'Toledo'}\n  },\n  'BJ':{\n    '1' : {'code':'AL','name':'Alibori'},\n    '2' : {'code':'AK','name':'Atakora'},\n    '3' : {'code':'AQ','name':'Atlantique'},\n    '4' : {'code':'BO','name':'Borgou'},\n    '5' : {'code':'CO','name':'Collines'},\n    '6' : {'code':'DO','name':'Donga'},\n    '7' : {'code':'KO','name':'Kouffo'},\n    '8' : {'code':'LI','name':'Littoral'},\n    '9' : {'code':'MO','name':'Mono'},\n    '10' : {'code':'OU','name':'Oueme'},\n    '11' : {'code':'PL','name':'Plateau'},\n    '12' : {'code':'ZO','name':'Zou'}\n  },\n  'BM':{\n    '1' : {'code':'DS','name':'Devonshire'},\n    '2' : {'code':'HC','name':'Hamilton City'},\n    '3' : {'code':'HA','name':'Hamilton'},\n    '4' : {'code':'PG','name':'Paget'},\n    '5' : {'code':'PB','name':'Pembroke'},\n    '6' : {'code':'GC','name':'Saint George City'},\n    '7' : {'code':'SG','name':'Saint George\\'s'},\n    '8' : {'code':'SA','name':'Sandys'},\n    '9' : {'code':'SM','name':'Smith\\'s'},\n    '10' : {'code':'SH','name':'Southampton'},\n    '11' : {'code':'WA','name':'Warwick'}\n  },\n  'BT':{\n    '1' : {'code':'BUM','name':'Bumthang'},\n    '2' : {'code':'CHU','name':'Chukha'},\n    '3' : {'code':'DAG','name':'Dagana'},\n    '4' : {'code':'GAS','name':'Gasa'},\n    '5' : {'code':'HAA','name':'Haa'},\n    '6' : {'code':'LHU','name':'Lhuntse'},\n    '7' : {'code':'MON','name':'Mongar'},\n    '8' : {'code':'PAR','name':'Paro'},\n    '9' : {'code':'PEM','name':'Pemagatshel'},\n    '10' : {'code':'PUN','name':'Punakha'},\n    '11' : {'code':'SJO','name':'Samdrup Jongkhar'},\n    '12' : {'code':'SAT','name':'Samtse'},\n    '13' : {'code':'SAR','name':'Sarpang'},\n    '14' : {'code':'THI','name':'Thimphu'},\n    '15' : {'code':'TRG','name':'Trashigang'},\n    '16' : {'code':'TRY','name':'Trashiyangste'},\n    '17' : {'code':'TRO','name':'Trongsa'},\n    '18' : {'code':'TSI','name':'Tsirang'},\n    '19' : {'code':'WPH','name':'Wangdue Phodrang'},\n    '20' : {'code':'ZHE','name':'Zhemgang'}\n  },\n  'BO':{\n    '1' : {'code':'BEN','name':'Beni'},\n    '2' : {'code':'CHU','name':'Chuquisaca'},\n    '3' : {'code':'COC','name':'Cochabamba'},\n    '4' : {'code':'LPZ','name':'La Paz'},\n    '5' : {'code':'ORU','name':'Oruro'},\n    '6' : {'code':'PAN','name':'Pando'},\n    '7' : {'code':'POT','name':'Potosi'},\n    '8' : {'code':'SCZ','name':'Santa Cruz'},\n    '9' : {'code':'TAR','name':'Tarija'}\n  },\n  'BA':{\n    '1' : {'code':'BRO','name':'Brcko district'},\n    '2' : {'code':'FBP','name':'Bosanskopodrinjski Kanton'},\n    '3' : {'code':'FHN','name':'Hercegovacko-neretvanski Kanton'},\n    '4' : {'code':'FPO','name':'Posavski Kanton'},\n    '5' : {'code':'FSA','name':'Kanton Sarajevo'},\n    '6' : {'code':'FSB','name':'Srednjebosanski Kanton'},\n    '7' : {'code':'FTU','name':'Tuzlanski Kanton'},\n    '8' : {'code':'FUS','name':'Unsko-Sanski Kanton'},\n    '9' : {'code':'FZA','name':'Zapadnobosanska'},\n    '10' : {'code':'FZE','name':'Zenicko-Dobojski Kanton'},\n    '11' : {'code':'FZH','name':'Zapadnohercegovacka Zupanija'},\n    '12' : {'code':'SBI','name':'Bijeljina'},\n    '13' : {'code':'SBL','name':'Banja Luka'},\n    '14' : {'code':'SDO','name':'Doboj'},\n    '15' : {'code':'SFO','name':'Foca'},\n    '16' : {'code':'SSR','name':'Sarajevo-Romanija or Sokolac'},\n    '17' : {'code':'STR','name':'Trebinje'},\n    '18' : {'code':'SVL','name':'Vlasenica'}\n  },\n  'BW':{\n    '1' : {'code':'CE','name':'Central'},\n    '2' : {'code':'GH','name':'Ghanzi'},\n    '3' : {'code':'KD','name':'Kgalagadi'},\n    '4' : {'code':'KT','name':'Kgatleng'},\n    '5' : {'code':'KW','name':'Kweneng'},\n    '6' : {'code':'NG','name':'Ngamiland'},\n    '7' : {'code':'NE','name':'North East'},\n    '8' : {'code':'NW','name':'North West'},\n    '9' : {'code':'SE','name':'South East'},\n    '10' : {'code':'SO','name':'Southern'}\n  },\n  'BR':{\n    '1' : {'code':'AC','name':'Acre'},\n    '2' : {'code':'AL','name':'Alagoas'},\n    '3' : {'code':'AP','name':'Amapa'},\n    '4' : {'code':'AM','name':'Amazonas'},\n    '5' : {'code':'BA','name':'Bahia'},\n    '6' : {'code':'CE','name':'Ceara'},\n    '7' : {'code':'DF','name':'Distrito Federal'},\n    '8' : {'code':'ES','name':'Espirito Santo'},\n    '9' : {'code':'GO','name':'Goias'},\n    '10' : {'code':'MA','name':'Maranhao'},\n    '11' : {'code':'MT','name':'Mato Grosso'},\n    '12' : {'code':'MS','name':'Mato Grosso do Sul'},\n    '13' : {'code':'MG','name':'Minas Gerais'},\n    '14' : {'code':'PA','name':'Para'},\n    '15' : {'code':'PB','name':'Paraiba'},\n    '16' : {'code':'PR','name':'Parana'},\n    '17' : {'code':'PE','name':'Pernambuco'},\n    '18' : {'code':'PI','name':'Piaui'},\n    '19' : {'code':'RJ','name':'Rio de Janeiro'},\n    '20' : {'code':'RN','name':'Rio Grande do Norte'},\n    '21' : {'code':'RS','name':'Rio Grande do Sul'},\n    '22' : {'code':'RO','name':'Rondonia'},\n    '23' : {'code':'RR','name':'Roraima'},\n    '24' : {'code':'SC','name':'Santa Catarina'},\n    '25' : {'code':'SP','name':'Sao Paulo'},\n    '26' : {'code':'SE','name':'Sergipe'},\n    '27' : {'code':'TO','name':'Tocantins'}\n  },\n  'IO':{\n    '1' : {'code':'DG','name':'Diego Garcia'},\n    '2' : {'code':'DI','name':'Danger Island'},\n    '3' : {'code':'EA','name':'Eagle Islands'},\n    '4' : {'code':'EG','name':'Egmont Islands'},\n    '5' : {'code':'NI','name':'Nelsons Island'},\n    '6' : {'code':'PB','name':'Peros Banhos'},\n    '7' : {'code':'SI','name':'Salomon Islands'},\n    '8' : {'code':'TB','name':'Three Brothers'}\n  },\n  'BN':{\n    '1' : {'code':'BEL','name':'Belait'},\n    '2' : {'code':'BRM','name':'Brunei and Muara'},\n    '3' : {'code':'TEM','name':'Temburong'},\n    '4' : {'code':'TUT','name':'Tutong'}\n  },\n  'BG':{\n    '1' : {'code':'BG-01','name':'Blagoevgrad'},\n    '2' : {'code':'BG-02','name':'Burgas'},\n    '3' : {'code':'BG-03','name':'Dobrich'},\n    '4' : {'code':'BG-04','name':'Gabrovo'},\n    '5' : {'code':'BG-05','name':'Haskovo'},\n    '6' : {'code':'BG-06','name':'Kardjali'},\n    '7' : {'code':'BG-07','name':'Kyustendil'},\n    '8' : {'code':'BG-08','name':'Lovech'},\n    '9' : {'code':'BG-09','name':'Montana'},\n    '10' : {'code':'BG-10','name':'Pazardjik'},\n    '11' : {'code':'BG-11','name':'Pernik'},\n    '12' : {'code':'BG-12','name':'Pleven'},\n    '13' : {'code':'BG-13','name':'Plovdiv'},\n    '14' : {'code':'BG-14','name':'Razgrad'},\n    '15' : {'code':'BG-15','name':'Shumen'},\n    '16' : {'code':'BG-16','name':'Silistra'},\n    '17' : {'code':'BG-17','name':'Sliven'},\n    '18' : {'code':'BG-18','name':'Smolyan'},\n    '19' : {'code':'BG-19','name':'Sofia'},\n    '20' : {'code':'BG-20','name':'Sofia - town'},\n    '21' : {'code':'BG-21','name':'Stara Zagora'},\n    '22' : {'code':'BG-22','name':'Targovishte'},\n    '23' : {'code':'BG-23','name':'Varna'},\n    '24' : {'code':'BG-24','name':'Veliko Tarnovo'},\n    '25' : {'code':'BG-25','name':'Vidin'},\n    '26' : {'code':'BG-26','name':'Vratza'},\n    '27' : {'code':'BG-27','name':'Yambol'}\n  },\n  'BF':{\n    '1' : {'code':'BAL','name':'Bale'},\n    '2' : {'code':'BAM','name':'Bam'},\n    '3' : {'code':'BAN','name':'Banwa'},\n    '4' : {'code':'BAZ','name':'Bazega'},\n    '5' : {'code':'BOR','name':'Bougouriba'},\n    '6' : {'code':'BLG','name':'Boulgou'},\n    '7' : {'code':'BOK','name':'Boulkiemde'},\n    '8' : {'code':'COM','name':'Comoe'},\n    '9' : {'code':'GAN','name':'Ganzourgou'},\n    '10' : {'code':'GNA','name':'Gnagna'},\n    '11' : {'code':'GOU','name':'Gourma'},\n    '12' : {'code':'HOU','name':'Houet'},\n    '13' : {'code':'IOA','name':'Ioba'},\n    '14' : {'code':'KAD','name':'Kadiogo'},\n    '15' : {'code':'KEN','name':'Kenedougou'},\n    '16' : {'code':'KOD','name':'Komondjari'},\n    '17' : {'code':'KOP','name':'Kompienga'},\n    '18' : {'code':'KOS','name':'Kossi'},\n    '19' : {'code':'KOL','name':'Koulpelogo'},\n    '20' : {'code':'KOT','name':'Kouritenga'},\n    '21' : {'code':'KOW','name':'Kourweogo'},\n    '22' : {'code':'LER','name':'Leraba'},\n    '23' : {'code':'LOR','name':'Loroum'},\n    '24' : {'code':'MOU','name':'Mouhoun'},\n    '25' : {'code':'NAH','name':'Nahouri'},\n    '26' : {'code':'NAM','name':'Namentenga'},\n    '27' : {'code':'NAY','name':'Nayala'},\n    '28' : {'code':'NOU','name':'Noumbiel'},\n    '29' : {'code':'OUB','name':'Oubritenga'},\n    '30' : {'code':'OUD','name':'Oudalan'},\n    '31' : {'code':'PAS','name':'Passore'},\n    '32' : {'code':'PON','name':'Poni'},\n    '33' : {'code':'SAG','name':'Sanguie'},\n    '34' : {'code':'SAM','name':'Sanmatenga'},\n    '35' : {'code':'SEN','name':'Seno'},\n    '36' : {'code':'SIS','name':'Sissili'},\n    '37' : {'code':'SOM','name':'Soum'},\n    '38' : {'code':'SOR','name':'Sourou'},\n    '39' : {'code':'TAP','name':'Tapoa'},\n    '40' : {'code':'TUY','name':'Tuy'},\n    '41' : {'code':'YAG','name':'Yagha'},\n    '42' : {'code':'YAT','name':'Yatenga'},\n    '43' : {'code':'ZIR','name':'Ziro'},\n    '44' : {'code':'ZOD','name':'Zondoma'},\n    '45' : {'code':'ZOW','name':'Zoundweogo'}\n  },\n  'BI':{\n    '1' : {'code':'BB','name':'Bubanza'},\n    '2' : {'code':'BJ','name':'Bujumbura'},\n    '3' : {'code':'BR','name':'Bururi'},\n    '4' : {'code':'CA','name':'Cankuzo'},\n    '5' : {'code':'CI','name':'Cibitoke'},\n    '6' : {'code':'GI','name':'Gitega'},\n    '7' : {'code':'KR','name':'Karuzi'},\n    '8' : {'code':'KY','name':'Kayanza'},\n    '9' : {'code':'KI','name':'Kirundo'},\n    '10' : {'code':'MA','name':'Makamba'},\n    '11' : {'code':'MU','name':'Muramvya'},\n    '12' : {'code':'MY','name':'Muyinga'},\n    '13' : {'code':'MW','name':'Mwaro'},\n    '14' : {'code':'NG','name':'Ngozi'},\n    '15' : {'code':'RT','name':'Rutana'},\n    '16' : {'code':'RY','name':'Ruyigi'}\n  },\n  'KH':{\n    '1' : {'code':'BA','name':'Battambang'},\n    '2' : {'code':'BM','name':'Banteay Meanchey'},\n    '3' : {'code':'KB','name':'Keb'},\n    '4' : {'code':'KK','name':'Kaoh Kong'},\n    '5' : {'code':'KL','name':'Kandal'},\n    '6' : {'code':'KM','name':'Kampong Cham'},\n    '7' : {'code':'KN','name':'Kampong Chhnang'},\n    '8' : {'code':'KO','name':'Kampong Som'},\n    '9' : {'code':'KP','name':'Kampot'},\n    '10' : {'code':'KR','name':'Kratie'},\n    '11' : {'code':'KT','name':'Kampong Thom'},\n    '12' : {'code':'KU','name':'Kampong Speu'},\n    '13' : {'code':'MK','name':'Mondul Kiri'},\n    '14' : {'code':'OM','name':'Oddar Meancheay'},\n    '15' : {'code':'PA','name':'Pailin'},\n    '16' : {'code':'PG','name':'Prey Veng'},\n    '17' : {'code':'PP','name':'Phnom Penh'},\n    '18' : {'code':'PR','name':'Preah Vihear'},\n    '19' : {'code':'PS','name':'Preah Seihanu (Kompong Som or Si)'},\n    '20' : {'code':'PU','name':'Pursat'},\n    '21' : {'code':'RK','name':'Ratanak Kiri'},\n    '22' : {'code':'SI','name':'Siemreap'},\n    '23' : {'code':'SR','name':'Svay Rieng'},\n    '24' : {'code':'ST','name':'Stung Treng'},\n    '25' : {'code':'TK','name':'Takeo'}\n  },\n  'CM':{\n    '1' : {'code':'ADA','name':'Adamawa (Adamaoua)'},\n    '2' : {'code':'CEN','name':'Centre'},\n    '3' : {'code':'EST','name':'East (Est)'},\n    '4' : {'code':'EXN','name':'Extr\u00EAme-Nord'},\n    '5' : {'code':'LIT','name':'Littoral'},\n    '6' : {'code':'NOR','name':'North (Nord)'},\n    '7' : {'code':'NOT','name':'Northwest (Nord-Ouest)'},\n    '8' : {'code':'OUE','name':'West (Ouest)'},\n    '9' : {'code':'SUD','name':'South (Sud)'},\n    '10' : {'code':'SOU','name':'Southwest (Sud-Ouest)'}\n  },\n  'CA':{\n    '1' : {'code':'AB','name':'Alberta'},\n    '2' : {'code':'BC','name':'British Columbia'},\n    '3' : {'code':'MB','name':'Manitoba'},\n    '4' : {'code':'NB','name':'New Brunswick'},\n    '5' : {'code':'NL','name':'Newfoundland and Labrador'},\n    '6' : {'code':'NT','name':'Northwest Territories'},\n    '7' : {'code':'NS','name':'Nova Scotia'},\n    '8' : {'code':'NU','name':'Nunavut'},\n    '9' : {'code':'ON','name':'Ontario'},\n    '10' : {'code':'PE','name':'Prince Edward Island'},\n    '11' : {'code':'QC','name':'Qu\u00E9bec'},\n    '12' : {'code':'SK','name':'Saskatchewan'},\n    '13' : {'code':'YT','name':'Yukon Territory'}\n  },\n  'CV':{\n    '1' : {'code':'BV','name':'Boa Vista'},\n    '2' : {'code':'BR','name':'Brava'},\n    '3' : {'code':'CS','name':'Calheta de Sao Miguel'},\n    '4' : {'code':'MA','name':'Maio'},\n    '5' : {'code':'MO','name':'Mosteiros'},\n    '6' : {'code':'PA','name':'Paul'},\n    '7' : {'code':'PN','name':'Porto Novo'},\n    '8' : {'code':'PR','name':'Praia'},\n    '9' : {'code':'RG','name':'Ribeira Grande'},\n    '10' : {'code':'SL','name':'Sal'},\n    '11' : {'code':'CA','name':'Santa Catarina'},\n    '12' : {'code':'CR','name':'Santa Cruz'},\n    '13' : {'code':'SD','name':'Sao Domingos'},\n    '14' : {'code':'SF','name':'Sao Filipe'},\n    '15' : {'code':'SN','name':'Sao Nicolau'},\n    '16' : {'code':'SV','name':'Sao Vicente'},\n    '17' : {'code':'TA','name':'Tarrafal'}\n  },\n  'KY':{\n    '1' : {'code':'CR','name':'Creek'},\n    '2' : {'code':'EA','name':'Eastern'},\n    '3' : {'code':'ML','name':'Midland'},\n    '4' : {'code':'ST','name':'South Town'},\n    '5' : {'code':'SP','name':'Spot Bay'},\n    '6' : {'code':'SK','name':'Stake Bay'},\n    '7' : {'code':'WD','name':'West End'},\n    '8' : {'code':'WN','name':'Western'}\n  },\n  'CF':{\n    '1' : {'code':'BAN','name':'Bangui'},\n    '2' : {'code':'BBA','name':'Bamingui-Bangoran'},\n    '3' : {'code':'BKO','name':'Basse-Kotto'},\n    '4' : {'code':'HKO','name':'Haute-Kotto'},\n    '5' : {'code':'HMB','name':'Haut-Mbomou'},\n    '6' : {'code':'KEM','name':'Kemo'},\n    '7' : {'code':'LOB','name':'Lobaye'},\n    '8' : {'code':'MBO','name':'Mbomou'},\n    '9' : {'code':'MKD','name':'Mamb\u00E9r\u00E9-Kad\u00E9\u00EF'},\n    '10' : {'code':'NGR','name':'Nana-Grebizi'},\n    '11' : {'code':'NMM','name':'Nana-Mambere'},\n    '12' : {'code':'OMP','name':'Ombella-M\\'Poko'},\n    '13' : {'code':'OPE','name':'Ouham-Pende'},\n    '14' : {'code':'OUH','name':'Ouham'},\n    '15' : {'code':'OUK','name':'Ouaka'},\n    '16' : {'code':'SMB','name':'Sangha-Mbaere'},\n    '17' : {'code':'VAK','name':'Vakaga'}\n  },\n  'TD':{\n    '1' : {'code':'BA','name':'Batha'},\n    '2' : {'code':'BI','name':'Biltine'},\n    '3' : {'code':'BE','name':'Borkou-Ennedi-Tibesti'},\n    '4' : {'code':'CB','name':'Chari-Baguirmi'},\n    '5' : {'code':'GU','name':'Guera'},\n    '6' : {'code':'KA','name':'Kanem'},\n    '7' : {'code':'LA','name':'Lac'},\n    '8' : {'code':'LC','name':'Logone Occidental'},\n    '9' : {'code':'LR','name':'Logone Oriental'},\n    '10' : {'code':'MK','name':'Mayo-Kebbi'},\n    '11' : {'code':'MC','name':'Moyen-Chari'},\n    '12' : {'code':'OU','name':'Ouaddai'},\n    '13' : {'code':'SA','name':'Salamat'},\n    '14' : {'code':'TA','name':'Tandjile'}\n  },\n  'CL':{\n    '1' : {'code':'AI','name':'Aisen del General Carlos Ibanez'},\n    '2' : {'code':'AN','name':'Antofagasta'},\n    '3' : {'code':'AR','name':'Araucania'},\n    '4' : {'code':'AT','name':'Atacama'},\n    '5' : {'code':'BI','name':'Bio-Bio'},\n    '6' : {'code':'CO','name':'Coquimbo'},\n    '7' : {'code':'LI','name':'Libertador General Bernardo O\\'Hi'},\n    '8' : {'code':'LL','name':'Los Lagos'},\n    '9' : {'code':'MA','name':'Magallanes y de la Antartica Chi'},\n    '10' : {'code':'ML','name':'Maule'},\n    '11' : {'code':'RM','name':'Region Metropolitana'},\n    '12' : {'code':'TA','name':'Tarapaca'},\n    '13' : {'code':'VS','name':'Valparaiso'}\n  },\n  'CN':{\n    '1' : {'code':'AN','name':'Anhui'},\n    '2' : {'code':'BE','name':'Beijing'},\n    '3' : {'code':'CH','name':'Chongqing'},\n    '4' : {'code':'FU','name':'Fujian'},\n    '5' : {'code':'GA','name':'Gansu'},\n    '6' : {'code':'GU','name':'Guangdong'},\n    '7' : {'code':'GX','name':'Guangxi'},\n    '8' : {'code':'GZ','name':'Guizhou'},\n    '9' : {'code':'HA','name':'Hainan'},\n    '10' : {'code':'HB','name':'Hebei'},\n    '11' : {'code':'HL','name':'Heilongjiang'},\n    '12' : {'code':'HE','name':'Henan'},\n    '13' : {'code':'HK','name':'Hong Kong'},\n    '14' : {'code':'HU','name':'Hubei'},\n    '15' : {'code':'HN','name':'Hunan'},\n    '16' : {'code':'IM','name':'Inner Mongolia'},\n    '17' : {'code':'JI','name':'Jiangsu'},\n    '18' : {'code':'JX','name':'Jiangxi'},\n    '19' : {'code':'JL','name':'Jilin'},\n    '20' : {'code':'LI','name':'Liaoning'},\n    '21' : {'code':'MA','name':'Macau'},\n    '22' : {'code':'NI','name':'Ningxia'},\n    '23' : {'code':'SH','name':'Shaanxi'},\n    '24' : {'code':'SA','name':'Shandong'},\n    '25' : {'code':'SG','name':'Shanghai'},\n    '26' : {'code':'SX','name':'Shanxi'},\n    '27' : {'code':'SI','name':'Sichuan'},\n    '28' : {'code':'TI','name':'Tianjin'},\n    '29' : {'code':'XI','name':'Xinjiang'},\n    '30' : {'code':'YU','name':'Yunnan'},\n    '31' : {'code':'ZH','name':'Zhejiang'}\n  },\n  'CC':{\n    '1' : {'code':'D','name':'Direction Island'},\n    '2' : {'code':'H','name':'Home Island'},\n    '3' : {'code':'O','name':'Horsburgh Island'},\n    '4' : {'code':'S','name':'South Island'},\n    '5' : {'code':'W','name':'West Island'}\n  },\n  'CO':{\n    '1' : {'code':'AMZ','name':'Amazonas'},\n    '2' : {'code':'ANT','name':'Antioquia'},\n    '3' : {'code':'ARA','name':'Arauca'},\n    '4' : {'code':'ATL','name':'Atlantico'},\n    '5' : {'code':'BDC','name':'Bogota D.C.'},\n    '6' : {'code':'BOL','name':'Bolivar'},\n    '7' : {'code':'BOY','name':'Boyaca'},\n    '8' : {'code':'CAL','name':'Caldas'},\n    '9' : {'code':'CAQ','name':'Caqueta'},\n    '10' : {'code':'CAS','name':'Casanare'},\n    '11' : {'code':'CAU','name':'Cauca'},\n    '12' : {'code':'CES','name':'Cesar'},\n    '13' : {'code':'CHO','name':'Choco'},\n    '14' : {'code':'COR','name':'Cordoba'},\n    '15' : {'code':'CAM','name':'Cundinamarca'},\n    '16' : {'code':'GNA','name':'Guainia'},\n    '17' : {'code':'GJR','name':'Guajira'},\n    '18' : {'code':'GVR','name':'Guaviare'},\n    '19' : {'code':'HUI','name':'Huila'},\n    '20' : {'code':'MAG','name':'Magdalena'},\n    '21' : {'code':'MET','name':'Meta'},\n    '22' : {'code':'NAR','name':'Narino'},\n    '23' : {'code':'NDS','name':'Norte de Santander'},\n    '24' : {'code':'PUT','name':'Putumayo'},\n    '25' : {'code':'QUI','name':'Quindio'},\n    '26' : {'code':'RIS','name':'Risaralda'},\n    '27' : {'code':'SAP','name':'San Andres y Providencia'},\n    '28' : {'code':'SAN','name':'Santander'},\n    '29' : {'code':'SUC','name':'Sucre'},\n    '30' : {'code':'TOL','name':'Tolima'},\n    '31' : {'code':'VDC','name':'Valle del Cauca'},\n    '32' : {'code':'VAU','name':'Vaupes'},\n    '33' : {'code':'VIC','name':'Vichada'}\n  },\n  'KM':{\n    '1' : {'code':'G','name':'Grande Comore'},\n    '2' : {'code':'A','name':'Anjouan'},\n    '3' : {'code':'M','name':'Moheli'}\n  },\n  'CG':{\n    '1' : {'code':'BO','name':'Bouenza'},\n    '2' : {'code':'BR','name':'Brazzaville'},\n    '3' : {'code':'CU','name':'Cuvette'},\n    '4' : {'code':'CO','name':'Cuvette-Ouest'},\n    '5' : {'code':'KO','name':'Kouilou'},\n    '6' : {'code':'LE','name':'Lekoumou'},\n    '7' : {'code':'LI','name':'Likouala'},\n    '8' : {'code':'NI','name':'Niari'},\n    '9' : {'code':'PL','name':'Plateaux'},\n    '10' : {'code':'PO','name':'Pool'},\n    '11' : {'code':'SA','name':'Sangha'}\n  },\n  'CK':{\n    '1' : {'code':'AI','name':'Aitutaki'},\n    '2' : {'code':'AT','name':'Atiu'},\n    '3' : {'code':'MA','name':'Manuae'},\n    '4' : {'code':'MG','name':'Mangaia'},\n    '5' : {'code':'MK','name':'Manihiki'},\n    '6' : {'code':'MT','name':'Mitiaro'},\n    '7' : {'code':'MU','name':'Mauke'},\n    '8' : {'code':'NI','name':'Nassau Island'},\n    '9' : {'code':'PA','name':'Palmerston'},\n    '10' : {'code':'PE','name':'Penrhyn'},\n    '11' : {'code':'PU','name':'Pukapuka'},\n    '12' : {'code':'RK','name':'Rakahanga'},\n    '13' : {'code':'RR','name':'Rarotonga'},\n    '14' : {'code':'SU','name':'Surwarrow'},\n    '15' : {'code':'TA','name':'Takutea'}\n  },\n  'CR':{\n    '1' : {'code':'AL','name':'Alajuela'},\n    '2' : {'code':'CA','name':'Cartago'},\n    '3' : {'code':'GU','name':'Guanacaste'},\n    '4' : {'code':'HE','name':'Heredia'},\n    '5' : {'code':'LI','name':'Limon'},\n    '6' : {'code':'PU','name':'Puntarenas'},\n    '7' : {'code':'SJ','name':'San Jose'}\n  },\n  'CI':{\n    '1' : {'code':'ABE','name':'Abengourou'},\n    '2' : {'code':'ABI','name':'Abidjan'},\n    '3' : {'code':'ABO','name':'Aboisso'},\n    '4' : {'code':'ADI','name':'Adiake'},\n    '5' : {'code':'ADZ','name':'Adzope'},\n    '6' : {'code':'AGB','name':'Agboville'},\n    '7' : {'code':'AGN','name':'Agnibilekrou'},\n    '8' : {'code':'ALE','name':'Alepe'},\n    '9' : {'code':'BOC','name':'Bocanda'},\n    '10' : {'code':'BAN','name':'Bangolo'},\n    '11' : {'code':'BEO','name':'Beoumi'},\n    '12' : {'code':'BIA','name':'Biankouma'},\n    '13' : {'code':'BDK','name':'Bondoukou'},\n    '14' : {'code':'BGN','name':'Bongouanou'},\n    '15' : {'code':'BFL','name':'Bouafle'},\n    '16' : {'code':'BKE','name':'Bouake'},\n    '17' : {'code':'BNA','name':'Bouna'},\n    '18' : {'code':'BDL','name':'Boundiali'},\n    '19' : {'code':'DKL','name':'Dabakala'},\n    '20' : {'code':'DBU','name':'Dabou'},\n    '21' : {'code':'DAL','name':'Daloa'},\n    '22' : {'code':'DAN','name':'Danane'},\n    '23' : {'code':'DAO','name':'Daoukro'},\n    '24' : {'code':'DIM','name':'Dimbokro'},\n    '25' : {'code':'DIV','name':'Divo'},\n    '26' : {'code':'DUE','name':'Duekoue'},\n    '27' : {'code':'FER','name':'Ferkessedougou'},\n    '28' : {'code':'GAG','name':'Gagnoa'},\n    '29' : {'code':'GBA','name':'Grand-Bassam'},\n    '30' : {'code':'GLA','name':'Grand-Lahou'},\n    '31' : {'code':'GUI','name':'Guiglo'},\n    '32' : {'code':'ISS','name':'Issia'},\n    '33' : {'code':'JAC','name':'Jacqueville'},\n    '34' : {'code':'KAT','name':'Katiola'},\n    '35' : {'code':'KOR','name':'Korhogo'},\n    '36' : {'code':'LAK','name':'Lakota'},\n    '37' : {'code':'MAN','name':'Man'},\n    '38' : {'code':'MKN','name':'Mankono'},\n    '39' : {'code':'MBA','name':'Mbahiakro'},\n    '40' : {'code':'ODI','name':'Odienne'},\n    '41' : {'code':'OUM','name':'Oume'},\n    '42' : {'code':'SAK','name':'Sakassou'},\n    '43' : {'code':'SPE','name':'San-Pedro'},\n    '44' : {'code':'SAS','name':'Sassandra'},\n    '45' : {'code':'SEG','name':'Seguela'},\n    '46' : {'code':'SIN','name':'Sinfra'},\n    '47' : {'code':'SOU','name':'Soubre'},\n    '48' : {'code':'TAB','name':'Tabou'},\n    '49' : {'code':'TAN','name':'Tanda'},\n    '50' : {'code':'TIE','name':'Tiebissou'},\n    '51' : {'code':'TIN','name':'Tingrela'},\n    '52' : {'code':'TIA','name':'Tiassale'},\n    '53' : {'code':'TBA','name':'Touba'},\n    '54' : {'code':'TLP','name':'Toulepleu'},\n    '55' : {'code':'TMD','name':'Toumodi'},\n    '56' : {'code':'VAV','name':'Vavoua'},\n    '57' : {'code':'YAM','name':'Yamoussoukro'},\n    '58' : {'code':'ZUE','name':'Zuenoula'}\n  },\n  'HR':{\n    '1' : {'code':'BB','name':'Bjelovar-Bilogora'},\n    '2' : {'code':'CZ','name':'City of Zagreb'},\n    '3' : {'code':'DN','name':'Dubrovnik-Neretva'},\n    '4' : {'code':'IS','name':'Istra'},\n    '5' : {'code':'KA','name':'Karlovac'},\n    '6' : {'code':'KK','name':'Koprivnica-Krizevci'},\n    '7' : {'code':'KZ','name':'Krapina-Zagorje'},\n    '8' : {'code':'LS','name':'Lika-Senj'},\n    '9' : {'code':'ME','name':'Medimurje'},\n    '10' : {'code':'OB','name':'Osijek-Baranja'},\n    '11' : {'code':'PS','name':'Pozega-Slavonia'},\n    '12' : {'code':'PG','name':'Primorje-Gorski Kotar'},\n    '13' : {'code':'SI','name':'Sibenik'},\n    '14' : {'code':'SM','name':'Sisak-Moslavina'},\n    '15' : {'code':'SB','name':'Slavonski Brod-Posavina'},\n    '16' : {'code':'SD','name':'Split-Dalmatia'},\n    '17' : {'code':'VA','name':'Varazdin'},\n    '18' : {'code':'VP','name':'Virovitica-Podravina'},\n    '19' : {'code':'VS','name':'Vukovar-Srijem'},\n    '20' : {'code':'ZK','name':'Zadar-Knin'},\n    '21' : {'code':'ZA','name':'Zagreb'}\n  },\n  'CU':{\n    '1' : {'code':'CA','name':'Camaguey'},\n    '2' : {'code':'CD','name':'Ciego de Avila'},\n    '3' : {'code':'CI','name':'Cienfuegos'},\n    '4' : {'code':'CH','name':'Ciudad de La Habana'},\n    '5' : {'code':'GR','name':'Granma'},\n    '6' : {'code':'GU','name':'Guantanamo'},\n    '7' : {'code':'HO','name':'Holguin'},\n    '8' : {'code':'IJ','name':'Isla de la Juventud'},\n    '9' : {'code':'LH','name':'La Habana'},\n    '10' : {'code':'LT','name':'Las Tunas'},\n    '11' : {'code':'MA','name':'Matanzas'},\n    '12' : {'code':'PR','name':'Pinar del Rio'},\n    '13' : {'code':'SS','name':'Sancti Spiritus'},\n    '14' : {'code':'SC','name':'Santiago de Cuba'},\n    '15' : {'code':'VC','name':'Villa Clara'}\n  },\n  'CY':{\n    '1' : {'code':'F','name':'Famagusta'},\n    '2' : {'code':'K','name':'Kyrenia'},\n    '3' : {'code':'A','name':'Larnaca'},\n    '4' : {'code':'I','name':'Limassol'},\n    '5' : {'code':'N','name':'Nicosia'},\n    '6' : {'code':'P','name':'Paphos'}\n  },\n  'CZ':{\n    '1' : {'code':'A','name':'Hlavn\u00ED m\u011Bsto Praha'},\n    '2' : {'code':'B','name':'Jihomoravsk\u00FD'},\n    '3' : {'code':'C','name':'Jiho\u010Desk\u00FD'},\n    '4' : {'code':'E','name':'Pardubick\u00FD'},\n    '5' : {'code':'H','name':'Kr\u00E1lov\u00E9hradeck\u00FD'},\n    '6' : {'code':'J','name':'Vyso\u010Dina'},\n    '7' : {'code':'K','name':'Karlovarsk\u00FD'},\n    '8' : {'code':'L','name':'Libereck\u00FD'},\n    '9' : {'code':'M','name':'Olomouck\u00FD'},\n    '10' : {'code':'P','name':'Plze\u0148sk\u00FD'},\n    '11' : {'code':'S','name':'St\u0159edo\u010Desk\u00FD'},\n    '12' : {'code':'T','name':'Moravskoslezsk\u00FD'},\n    '13' : {'code':'U','name':'\u00DAsteck\u00FD'},\n    '14' : {'code':'Z','name':'Zl\u00EDnsk\u00FD'}\n  },\n  'DK':{\n    '1' : {'code':'AR','name':'Arhus'},\n    '2' : {'code':'BH','name':'Bornholm'},\n    '3' : {'code':'CO','name':'Copenhagen'},\n    '4' : {'code':'FO','name':'Faroe Islands'},\n    '5' : {'code':'FR','name':'Frederiksborg'},\n    '6' : {'code':'FY','name':'Fyn'},\n    '7' : {'code':'KO','name':'Kobenhavn'},\n    '8' : {'code':'NO','name':'Nordjylland'},\n    '9' : {'code':'RI','name':'Ribe'},\n    '10' : {'code':'RK','name':'Ringkobing'},\n    '11' : {'code':'RO','name':'Roskilde'},\n    '12' : {'code':'SO','name':'Sonderjylland'},\n    '13' : {'code':'ST','name':'Storstrom'},\n    '14' : {'code':'VK','name':'Vejle'},\n    '15' : {'code':'VJ','name':'Vestj\u00E6lland'},\n    '16' : {'code':'VB','name':'Viborg'}\n  },\n  'DJ':{\n    '1' : {'code':'S','name':'\\'Ali Sabih'},\n    '2' : {'code':'K','name':'Dikhil'},\n    '3' : {'code':'J','name':'Djibouti'},\n    '4' : {'code':'O','name':'Obock'},\n    '5' : {'code':'T','name':'Tadjoura'}\n  },\n  'DM':{\n    '1' : {'code':'AND','name':'Saint Andrew Parish'},\n    '2' : {'code':'DAV','name':'Saint David Parish'},\n    '3' : {'code':'GEO','name':'Saint George Parish'},\n    '4' : {'code':'JOH','name':'Saint John Parish'},\n    '5' : {'code':'JOS','name':'Saint Joseph Parish'},\n    '6' : {'code':'LUK','name':'Saint Luke Parish'},\n    '7' : {'code':'MAR','name':'Saint Mark Parish'},\n    '8' : {'code':'PAT','name':'Saint Patrick Parish'},\n    '9' : {'code':'PAU','name':'Saint Paul Parish'},\n    '10' : {'code':'PET','name':'Saint Peter Parish'}\n  },\n  'DO':{\n    '1' : {'code':'DN','name':'Distrito Nacional'},\n    '2' : {'code':'AZ','name':'Azua'},\n    '3' : {'code':'BC','name':'Baoruco'},\n    '4' : {'code':'BH','name':'Barahona'},\n    '5' : {'code':'DJ','name':'Dajabon'},\n    '6' : {'code':'DU','name':'Duarte'},\n    '7' : {'code':'EL','name':'Elias Pina'},\n    '8' : {'code':'SY','name':'El Seybo'},\n    '9' : {'code':'ET','name':'Espaillat'},\n    '10' : {'code':'HM','name':'Hato Mayor'},\n    '11' : {'code':'IN','name':'Independencia'},\n    '12' : {'code':'AL','name':'La Altagracia'},\n    '13' : {'code':'RO','name':'La Romana'},\n    '14' : {'code':'VE','name':'La Vega'},\n    '15' : {'code':'MT','name':'Maria Trinidad Sanchez'},\n    '16' : {'code':'MN','name':'Monsenor Nouel'},\n    '17' : {'code':'MC','name':'Monte Cristi'},\n    '18' : {'code':'MP','name':'Monte Plata'},\n    '19' : {'code':'PD','name':'Pedernales'},\n    '20' : {'code':'PR','name':'Peravia (Bani)'},\n    '21' : {'code':'PP','name':'Puerto Plata'},\n    '22' : {'code':'SL','name':'Salcedo'},\n    '23' : {'code':'SM','name':'Samana'},\n    '24' : {'code':'SH','name':'Sanchez Ramirez'},\n    '25' : {'code':'SC','name':'San Cristobal'},\n    '26' : {'code':'JO','name':'San Jose de Ocoa'},\n    '27' : {'code':'SJ','name':'San Juan'},\n    '28' : {'code':'PM','name':'San Pedro de Macoris'},\n    '29' : {'code':'SA','name':'Santiago'},\n    '30' : {'code':'ST','name':'Santiago Rodriguez'},\n    '31' : {'code':'SD','name':'Santo Domingo'},\n    '32' : {'code':'VA','name':'Valverde'}\n  },\n  'TP':{\n    '1' : {'code':'AL','name':'Aileu'},\n    '2' : {'code':'AN','name':'Ainaro'},\n    '3' : {'code':'BA','name':'Baucau'},\n    '4' : {'code':'BO','name':'Bobonaro'},\n    '5' : {'code':'CO','name':'Cova Lima'},\n    '6' : {'code':'DI','name':'Dili'},\n    '7' : {'code':'ER','name':'Ermera'},\n    '8' : {'code':'LA','name':'Lautem'},\n    '9' : {'code':'LI','name':'Liquica'},\n    '10' : {'code':'MT','name':'Manatuto'},\n    '11' : {'code':'MF','name':'Manufahi'},\n    '12' : {'code':'OE','name':'Oecussi'},\n    '13' : {'code':'VI','name':'Viqueque'}\n  },\n  'EC':{\n    '1' : {'code':'AZU','name':'Azuay'},\n    '2' : {'code':'BOL','name':'Bolivar'},\n    '3' : {'code':'CAN','name':'Ca\u00F1ar'},\n    '4' : {'code':'CAR','name':'Carchi'},\n    '5' : {'code':'CHI','name':'Chimborazo'},\n    '6' : {'code':'COT','name':'Cotopaxi'},\n    '7' : {'code':'EOR','name':'El Oro'},\n    '8' : {'code':'ESM','name':'Esmeraldas'},\n    '9' : {'code':'GPS','name':'Gal\u00E1pagos'},\n    '10' : {'code':'GUA','name':'Guayas'},\n    '11' : {'code':'IMB','name':'Imbabura'},\n    '12' : {'code':'LOJ','name':'Loja'},\n    '13' : {'code':'LRO','name':'Los R\u00EDos'},\n    '14' : {'code':'MAN','name':'Manab\u00ED'},\n    '15' : {'code':'MSA','name':'Morona Santiago'},\n    '16' : {'code':'NAP','name':'Napo'},\n    '17' : {'code':'ORE','name':'Orellana'},\n    '18' : {'code':'PAS','name':'Pastaza'},\n    '19' : {'code':'PIC','name':'Pichincha'},\n    '20' : {'code':'SUC','name':'Sucumb\u00EDos'},\n    '21' : {'code':'TUN','name':'Tungurahua'},\n    '22' : {'code':'ZCH','name':'Zamora Chinchipe'}\n  },\n  'EG':{\n    '1' : {'code':'DHY','name':'Ad Daqahliyah'},\n    '2' : {'code':'BAM','name':'Al Bahr al Ahmar'},\n    '3' : {'code':'BHY','name':'Al Buhayrah'},\n    '4' : {'code':'FYM','name':'Al Fayyum'},\n    '5' : {'code':'GBY','name':'Al Gharbiyah'},\n    '6' : {'code':'IDR','name':'Al Iskandariyah'},\n    '7' : {'code':'IML','name':'Al Isma \\'iliyah'},\n    '8' : {'code':'JZH','name':'Al Jizah'},\n    '9' : {'code':'MFY','name':'Al Minufiyah'},\n    '10' : {'code':'MNY','name':'Al Minya'},\n    '11' : {'code':'QHR','name':'Al Qahirah'},\n    '12' : {'code':'QLY','name':'Al Qalyubiyah'},\n    '13' : {'code':'WJD','name':'Al Wadi al Jadid'},\n    '14' : {'code':'SHQ','name':'Ash Sharqiyah'},\n    '15' : {'code':'SWY','name':'As Suways'},\n    '16' : {'code':'ASW','name':'Aswan'},\n    '17' : {'code':'ASY','name':'Asyut'},\n    '18' : {'code':'BSW','name':'Bani Suwayf'},\n    '19' : {'code':'BSD','name':'Bur Sa\\'id'},\n    '20' : {'code':'DMY','name':'Dumyat'},\n    '21' : {'code':'JNS','name':'Janub Sina\\''},\n    '22' : {'code':'KSH','name':'Kafr ash Shaykh'},\n    '23' : {'code':'MAT','name':'Matruh'},\n    '24' : {'code':'QIN','name':'Qina'},\n    '25' : {'code':'SHS','name':'Shamal Sina\\''},\n    '26' : {'code':'SUH','name':'Suhaj'}\n  },\n  'SV':{\n    '1' : {'code':'AH','name':'Ahuachapan'},\n    '2' : {'code':'CA','name':'Cabanas'},\n    '3' : {'code':'CH','name':'Chalatenango'},\n    '4' : {'code':'CU','name':'Cuscatlan'},\n    '5' : {'code':'LB','name':'La Libertad'},\n    '6' : {'code':'PZ','name':'La Paz'},\n    '7' : {'code':'UN','name':'La Union'},\n    '8' : {'code':'MO','name':'Morazan'},\n    '9' : {'code':'SM','name':'San Miguel'},\n    '10' : {'code':'SS','name':'San Salvador'},\n    '11' : {'code':'SV','name':'San Vicente'},\n    '12' : {'code':'SA','name':'Santa Ana'},\n    '13' : {'code':'SO','name':'Sonsonate'},\n    '14' : {'code':'US','name':'Usulutan'}\n  },\n  'GQ':{\n    '1' : {'code':'AN','name':'Provincia Annobon'},\n    '2' : {'code':'BN','name':'Provincia Bioko Norte'},\n    '3' : {'code':'BS','name':'Provincia Bioko Sur'},\n    '4' : {'code':'CS','name':'Provincia Centro Sur'},\n    '5' : {'code':'KN','name':'Provincia Kie-Ntem'},\n    '6' : {'code':'LI','name':'Provincia Litoral'},\n    '7' : {'code':'WN','name':'Provincia Wele-Nzas'}\n  },\n  'ER':{\n    '1' : {'code':'MA','name':'Central (Maekel)'},\n    '2' : {'code':'KE','name':'Anseba (Keren)'},\n    '3' : {'code':'DK','name':'Southern Red Sea (Debub-Keih-Bah)'},\n    '4' : {'code':'SK','name':'Northern Red Sea (Semien-Keih-Ba)'},\n    '5' : {'code':'DE','name':'Southern (Debub)'},\n    '6' : {'code':'BR','name':'Gash-Barka (Barentu)'}\n  },\n  'EE':{\n    '1' : {'code':'HA','name':'Harjumaa (Tallinn)'},\n    '2' : {'code':'HI','name':'Hiiumaa (Kardla)'},\n    '3' : {'code':'IV','name':'Ida-Virumaa (Johvi)'},\n    '4' : {'code':'JA','name':'Jarvamaa (Paide)'},\n    '5' : {'code':'JO','name':'Jogevamaa (Jogeva)'},\n    '6' : {'code':'LV','name':'Laane-Virumaa (Rakvere)'},\n    '7' : {'code':'LA','name':'Laanemaa (Haapsalu)'},\n    '8' : {'code':'PA','name':'Parnumaa (Parnu)'},\n    '9' : {'code':'PO','name':'Polvamaa (Polva)'},\n    '10' : {'code':'RA','name':'Raplamaa (Rapla)'},\n    '11' : {'code':'SA','name':'Saaremaa (Kuessaare)'},\n    '12' : {'code':'TA','name':'Tartumaa (Tartu)'},\n    '13' : {'code':'VA','name':'Valgamaa (Valga)'},\n    '14' : {'code':'VI','name':'Viljandimaa (Viljandi)'},\n    '15' : {'code':'VO','name':'Vorumaa (Voru)'}\n  },\n  'ET':{\n    '1' : {'code':'AF','name':'Afar'},\n    '2' : {'code':'AH','name':'Amhara'},\n    '3' : {'code':'BG','name':'Benishangul-Gumaz'},\n    '4' : {'code':'GB','name':'Gambela'},\n    '5' : {'code':'HR','name':'Hariai'},\n    '6' : {'code':'OR','name':'Oromia'},\n    '7' : {'code':'SM','name':'Somali'},\n    '8' : {'code':'SN','name':'Southern Nations - Nationalities'},\n    '9' : {'code':'TG','name':'Tigray'},\n    '10' : {'code':'AA','name':'Addis Ababa'},\n    '11' : {'code':'DD','name':'Dire Dawa'}\n  },\n  'FO':{\n    '1' : {'code':'T\u00DBR','name':'T\u00FBrshavnar Kommuna'},\n    '2' : {'code':'KLA','name':'Klaksv\u00EDk'},\n    '3' : {'code':'RUN','name':'Runav\u00EDk'},\n    '4' : {'code':'TV\u00D8','name':'Tv\u00F8royri'},\n    '5' : {'code':'FUG','name':'Fuglafj\u00F8r\u00F0ur'},\n    '6' : {'code':'SUN','name':'Sunda Kommuna'},\n    '7' : {'code':'V\u00E1G','name':'V\u00E1gur'},\n    '8' : {'code':'NES','name':'Nes'},\n    '9' : {'code':'VES','name':'Vestmanna'},\n    '10' : {'code':'MI\u00F0','name':'Mi\u00F0v\u00E1gur'},\n    '11' : {'code':'S\u00D8R','name':'S\u00F8rv\u00E1gur'},\n    '12' : {'code':'G\u00D8T','name':'G\u00F8tu Kommuna'},\n    '13' : {'code':'SJ\u00FB','name':'Sj\u00FBvar Kommuna'},\n    '14' : {'code':'LEI','name':'Leirv\u00EDk'},\n    '15' : {'code':'SAN','name':'Sandav\u00E1gur'},\n    '16' : {'code':'HVA','name':'Hvalba'},\n    '17' : {'code':'EI\u00F0','name':'Ei\u00F0i'},\n    '18' : {'code':'KV\u00ED','name':'Kv\u00EDv\u00EDk'},\n    '19' : {'code':'SAN','name':'Sandur'},\n    '20' : {'code':'SKO','name':'Skopun'},\n    '21' : {'code':'HVA','name':'Hvannasund'},\n    '22' : {'code':'SUM','name':'Sumba'},\n    '23' : {'code':'VI\u00F0','name':'Vi\u00F0arei\u00F0i'},\n    '24' : {'code':'POR','name':'Porkeri'},\n    '25' : {'code':'SK\u00E1','name':'Sk\u00E1lav\u00EDk'},\n    '26' : {'code':'KUN','name':'Kunoy'},\n    '27' : {'code':'H\u00DAS','name':'H\u00DAsav\u00EDk'},\n    '28' : {'code':'HOV','name':'Hov'},\n    '29' : {'code':'F\u00E1M','name':'F\u00E1mjin'},\n    '30' : {'code':'FUN','name':'Funningur'},\n    '31' : {'code':'H\u00DAS','name':'H\u00DAsar'},\n    '32' : {'code':'SK\u00DA','name':'Sk\u00DAvoy'},\n    '33' : {'code':'SV\u00ED','name':'Sv\u00EDnoy'},\n    '34' : {'code':'FUG','name':'Fugloy'}\n  },\n  'FJ':{\n    '1' : {'code':'C','name':'Central Division'},\n    '2' : {'code':'E','name':'Eastern Division'},\n    '3' : {'code':'N','name':'Northern Division'},\n    '4' : {'code':'R','name':'Rotuma'},\n    '5' : {'code':'W','name':'Western Division'}\n  },\n  'FI':{\n    '1' : {'code':'AL','name':'Ahvenanmaan Laani'},\n    '2' : {'code':'ES','name':'Etela-Suomen Laani'},\n    '3' : {'code':'IS','name':'Ita-Suomen Laani'},\n    '4' : {'code':'LS','name':'Lansi-Suomen Laani'},\n    '5' : {'code':'LA','name':'Lapin Lanani'},\n    '6' : {'code':'OU','name':'Oulun Laani'}\n  },\n  'FR':{\n    '1' : {'code':'AL','name':'Alsace'},\n    '2' : {'code':'AQ','name':'Aquitaine'},\n    '3' : {'code':'AU','name':'Auvergne'},\n    '4' : {'code':'BR','name':'Brittany'},\n    '5' : {'code':'BU','name':'Burgundy'},\n    '6' : {'code':'CE','name':'Center Loire Valley'},\n    '7' : {'code':'CH','name':'Champagne'},\n    '8' : {'code':'CO','name':'Corse'},\n    '9' : {'code':'FR','name':'France Comte'},\n    '10' : {'code':'LA','name':'Languedoc Roussillon'},\n    '11' : {'code':'LI','name':'Limousin'},\n    '12' : {'code':'LO','name':'Lorraine'},\n    '13' : {'code':'MI','name':'Midi Pyrenees'},\n    '14' : {'code':'NO','name':'Nord Pas de Calais'},\n    '15' : {'code':'NR','name':'Normandy'},\n    '16' : {'code':'PA','name':'Paris / Ile de France'},\n    '17' : {'code':'PI','name':'Picardie'},\n    '18' : {'code':'PO','name':'Poitou Charente'},\n    '19' : {'code':'PR','name':'Provence'},\n    '20' : {'code':'RH','name':'Rhone Alps'},\n    '21' : {'code':'RI','name':'Riviera'},\n    '22' : {'code':'WE','name':'Western Loire Valley'}\n  },\n  'FX':{\n    '1' : {'code':'Et','name':'Etranger'},\n    '2' : {'code':'01','name':'Ain'},\n    '3' : {'code':'02','name':'Aisne'},\n    '4' : {'code':'03','name':'Allier'},\n    '5' : {'code':'04','name':'Alpes de Haute Provence'},\n    '6' : {'code':'05','name':'Hautes-Alpes'},\n    '7' : {'code':'06','name':'Alpes Maritimes'},\n    '8' : {'code':'07','name':'Ard\u00E8che'},\n    '9' : {'code':'08','name':'Ardennes'},\n    '10' : {'code':'09','name':'Ari\u00E8ge'},\n    '11' : {'code':'10','name':'Aube'},\n    '12' : {'code':'11','name':'Aude'},\n    '13' : {'code':'12','name':'Aveyron'},\n    '14' : {'code':'13','name':'Bouches du Rh\u00F4ne'},\n    '15' : {'code':'14','name':'Calvados'},\n    '16' : {'code':'15','name':'Cantal'},\n    '17' : {'code':'16','name':'Charente'},\n    '18' : {'code':'17','name':'Charente Maritime'},\n    '19' : {'code':'18','name':'Cher'},\n    '20' : {'code':'19','name':'Corr\u00E8ze'},\n    '21' : {'code':'2A','name':'Corse du Sud'},\n    '22' : {'code':'2B','name':'Haute Corse'},\n    '23' : {'code':'21','name':'C\u00F4te d\\'or'},\n    '24' : {'code':'22','name':'C\u00F4tes d\\'Armor'},\n    '25' : {'code':'23','name':'Creuse'},\n    '26' : {'code':'24','name':'Dordogne'},\n    '27' : {'code':'25','name':'Doubs'},\n    '28' : {'code':'26','name':'Dr\u00F4me'},\n    '29' : {'code':'27','name':'Eure'},\n    '30' : {'code':'28','name':'Eure et Loir'},\n    '31' : {'code':'29','name':'Finist\u00E8re'},\n    '32' : {'code':'30','name':'Gard'},\n    '33' : {'code':'31','name':'Haute Garonne'},\n    '34' : {'code':'32','name':'Gers'},\n    '35' : {'code':'33','name':'Gironde'},\n    '36' : {'code':'34','name':'H\u00E9rault'},\n    '37' : {'code':'35','name':'Ille et Vilaine'},\n    '38' : {'code':'36','name':'Indre'},\n    '39' : {'code':'37','name':'Indre et Loire'},\n    '40' : {'code':'38','name':'Is\u00E9re'},\n    '41' : {'code':'39','name':'Jura'},\n    '42' : {'code':'40','name':'Landes'},\n    '43' : {'code':'41','name':'Loir et Cher'},\n    '44' : {'code':'42','name':'Loire'},\n    '45' : {'code':'43','name':'Haute Loire'},\n    '46' : {'code':'44','name':'Loire Atlantique'},\n    '47' : {'code':'45','name':'Loiret'},\n    '48' : {'code':'46','name':'Lot'},\n    '49' : {'code':'47','name':'Lot et Garonne'},\n    '50' : {'code':'48','name':'Loz\u00E8re'},\n    '51' : {'code':'49','name':'Maine et Loire'},\n    '52' : {'code':'50','name':'Manche'},\n    '53' : {'code':'51','name':'Marne'},\n    '54' : {'code':'52','name':'Haute Marne'},\n    '55' : {'code':'53','name':'Mayenne'},\n    '56' : {'code':'54','name':'Meurthe et Moselle'},\n    '57' : {'code':'55','name':'Meuse'},\n    '58' : {'code':'56','name':'Morbihan'},\n    '59' : {'code':'57','name':'Moselle'},\n    '60' : {'code':'58','name':'Ni\u00E8vre'},\n    '61' : {'code':'59','name':'Nord'},\n    '62' : {'code':'60','name':'Oise'},\n    '63' : {'code':'61','name':'Orne'},\n    '64' : {'code':'62','name':'Pas de Calais'},\n    '65' : {'code':'63','name':'Puy de D\u00F4me'},\n    '66' : {'code':'64','name':'Pyrenees Atlantique'},\n    '67' : {'code':'65','name':'Hautes Pyrenees'},\n    '68' : {'code':'66','name':'Pyrenees Orientale'},\n    '69' : {'code':'67','name':'Bas Rhin'},\n    '70' : {'code':'68','name':'Haut Rhin'},\n    '71' : {'code':'69','name':'Rh\u00F4ne'},\n    '72' : {'code':'70','name':'Haute Sa\u00F4ne'},\n    '73' : {'code':'71','name':'Sa\u00F4ne et Loire'},\n    '74' : {'code':'72','name':'Sarthe'},\n    '75' : {'code':'73','name':'Savoie'},\n    '76' : {'code':'74','name':'Haute Savoie'},\n    '77' : {'code':'75','name':'Paris'},\n    '78' : {'code':'76','name':'Seine Martitime'},\n    '79' : {'code':'77','name':'Seine et Marne'},\n    '80' : {'code':'78','name':'Yvelines'},\n    '81' : {'code':'79','name':'Deux S\u00E8vres'},\n    '82' : {'code':'80','name':'Somme'},\n    '83' : {'code':'81','name':'Tarn'},\n    '84' : {'code':'82','name':'Tarn et Garonne'},\n    '85' : {'code':'83','name':'Var'},\n    '86' : {'code':'84','name':'Vaucluse'},\n    '87' : {'code':'85','name':'Vend\u00E9e'},\n    '88' : {'code':'86','name':'Vienne'},\n    '89' : {'code':'87','name':'Haute Vienne'},\n    '90' : {'code':'88','name':'Vosges'},\n    '91' : {'code':'89','name':'Yonne'},\n    '92' : {'code':'90','name':'Territoire de Belfort'},\n    '93' : {'code':'91','name':'Essonne'},\n    '94' : {'code':'92','name':'Hauts de Seine'},\n    '95' : {'code':'93','name':'Seine St-Denis'},\n    '96' : {'code':'94','name':'Val de Marne'},\n    '97' : {'code':'95','name':'Val d\\'oise'}\n  },\n  'GF':{\n    '1' : {'code':'AWA','name':'Awala-Yalimapo'},\n    '2' : {'code':'MAN','name':'Mana'},\n    '3' : {'code':'SAI','name':'Saint-Laurent-Du-Maroni'},\n    '4' : {'code':'APA','name':'Apatou'},\n    '5' : {'code':'GRA','name':'Grand-Santi'},\n    '6' : {'code':'PAP','name':'Papa\u00EFchton'},\n    '7' : {'code':'SA\u00DC','name':'Sa\u00DCl'},\n    '8' : {'code':'MAR','name':'Maripasoula'},\n    '9' : {'code':'CAM','name':'Camopi'},\n    '10' : {'code':'SAI','name':'Saint-Georges'},\n    '11' : {'code':'OUA','name':'Ouanary'},\n    '12' : {'code':'R\u00E9G','name':'R\u00E9gina'},\n    '13' : {'code':'ROU','name':'Roura'},\n    '14' : {'code':'SAI','name':'Saint-\u00E9lie'},\n    '15' : {'code':'IRA','name':'Iracoubo'},\n    '16' : {'code':'SIN','name':'Sinnamary'},\n    '17' : {'code':'KOU','name':'Kourou'},\n    '18' : {'code':'MAC','name':'Macouria'},\n    '19' : {'code':'MON','name':'Montsin\u00E9ry-Tonnegrande'},\n    '20' : {'code':'MAT','name':'Matoury'},\n    '21' : {'code':'CAY','name':'Cayenne'},\n    '22' : {'code':'REM','name':'Remire-Montjoly'}\n  },\n  'PF':{\n    '1' : {'code':'M','name':'Archipel des Marquises'},\n    '2' : {'code':'T','name':'Archipel des Tuamotu'},\n    '3' : {'code':'I','name':'Archipel des Tubuai'},\n    '4' : {'code':'V','name':'Iles du Vent'},\n    '5' : {'code':'S','name':'Iles Sous-le-Vent'}\n  },\n  'TF':{\n    '1' : {'code':'C','name':'Iles Crozet'},\n    '2' : {'code':'K','name':'Iles Kerguelen'},\n    '3' : {'code':'A','name':'Ile Amsterdam'},\n    '4' : {'code':'P','name':'Ile Saint-Paul'},\n    '5' : {'code':'D','name':'Adelie Land'}\n  },\n  'GA':{\n    '1' : {'code':'ES','name':'Estuaire'},\n    '2' : {'code':'HO','name':'Haut-Ogooue'},\n    '3' : {'code':'MO','name':'Moyen-Ogooue'},\n    '4' : {'code':'NG','name':'Ngounie'},\n    '5' : {'code':'NY','name':'Nyanga'},\n    '6' : {'code':'OI','name':'Ogooue-Ivindo'},\n    '7' : {'code':'OL','name':'Ogooue-Lolo'},\n    '8' : {'code':'OM','name':'Ogooue-Maritime'},\n    '9' : {'code':'WN','name':'Woleu-Ntem'}\n  },\n  'GM':{\n    '1' : {'code':'BJ','name':'Banjul'},\n    '2' : {'code':'BS','name':'Basse'},\n    '3' : {'code':'BR','name':'Brikama'},\n    '4' : {'code':'JA','name':'Janjangbure'},\n    '5' : {'code':'KA','name':'Kanifeng'},\n    '6' : {'code':'KE','name':'Kerewan'},\n    '7' : {'code':'KU','name':'Kuntaur'},\n    '8' : {'code':'MA','name':'Mansakonko'},\n    '9' : {'code':'LR','name':'Lower River'},\n    '10' : {'code':'CR','name':'Central River'},\n    '11' : {'code':'NB','name':'North Bank'},\n    '12' : {'code':'UR','name':'Upper River'},\n    '13' : {'code':'WE','name':'Western'}\n  },\n  'GE':{\n    '1' : {'code':'AB','name':'Abkhazia'},\n    '2' : {'code':'AJ','name':'Ajaria'},\n    '3' : {'code':'GU','name':'Guria'},\n    '4' : {'code':'IM','name':'Imereti'},\n    '5' : {'code':'KA','name':'Kakheti'},\n    '6' : {'code':'KK','name':'Kvemo Kartli'},\n    '7' : {'code':'MM','name':'Mtskheta-Mtianeti'},\n    '8' : {'code':'RL','name':'Racha Lechkhumi and Kvemo Svanet'},\n    '9' : {'code':'SJ','name':'Samtskhe-Javakheti'},\n    '10' : {'code':'SK','name':'Shida Kartli'},\n    '11' : {'code':'SZ','name':'Samegrelo-Zemo Svaneti'},\n    '12' : {'code':'TB','name':'Tbilisi'}\n  },\n  'DE':{\n    '1' : {'code':'BAW','name':'Baden-W\u00FCrttemberg'},\n    '2' : {'code':'BAY','name':'Bayern'},\n    '3' : {'code':'BER','name':'Berlin'},\n    '4' : {'code':'BRG','name':'Brandenburg'},\n    '5' : {'code':'BRE','name':'Bremen'},\n    '6' : {'code':'HAM','name':'Hamburg'},\n    '7' : {'code':'HES','name':'Hessen'},\n    '8' : {'code':'MEC','name':'Mecklenburg-Vorpommern'},\n    '9' : {'code':'NDS','name':'Niedersachsen'},\n    '10' : {'code':'NRW','name':'Nordrhein-Westfalen'},\n    '11' : {'code':'RHE','name':'Rheinland-Pfalz'},\n    '12' : {'code':'SAR','name':'Saarland'},\n    '13' : {'code':'SAS','name':'Sachsen'},\n    '14' : {'code':'SAC','name':'Sachsen-Anhalt'},\n    '15' : {'code':'SCN','name':'Schleswig-Holstein'},\n    '16' : {'code':'THE','name':'Th\u00FCringen'}\n  },\n  'GH':{\n    '1' : {'code':'AS','name':'Ashanti Region'},\n    '2' : {'code':'BA','name':'Brong-Ahafo Region'},\n    '3' : {'code':'CE','name':'Central Region'},\n    '4' : {'code':'EA','name':'Eastern Region'},\n    '5' : {'code':'GA','name':'Greater Accra Region'},\n    '6' : {'code':'NO','name':'Northern Region'},\n    '7' : {'code':'UE','name':'Upper East Region'},\n    '8' : {'code':'UW','name':'Upper West Region'},\n    '9' : {'code':'VO','name':'Volta Region'},\n    '10' : {'code':'WE','name':'Western Region'}\n  },\n  'GI':{\n    '1' : {'code':'EAS','name':'East Side'},\n    '2' : {'code':'NOR','name':'North District'},\n    '3' : {'code':'REC','name':'Reclamation Areas'},\n    '4' : {'code':'SAN','name':'Sandpits Area'},\n    '5' : {'code':'SOU','name':'South District'},\n    '6' : {'code':'TOW','name':'Town Area'},\n    '7' : {'code':'UPP','name':'Upper Town'},\n    '8' : {'code':'OTH','name':'Other'}\n  },\n  'GR':{\n    '1' : {'code':'AT','name':'Attica'},\n    '2' : {'code':'CN','name':'Central Greece'},\n    '3' : {'code':'CM','name':'Central Macedonia'},\n    '4' : {'code':'CR','name':'Crete'},\n    '5' : {'code':'EM','name':'East Macedonia and Thrace'},\n    '6' : {'code':'EP','name':'Epirus'},\n    '7' : {'code':'II','name':'Ionian Islands'},\n    '8' : {'code':'NA','name':'North Aegean'},\n    '9' : {'code':'PP','name':'Peloponnesos'},\n    '10' : {'code':'SA','name':'South Aegean'},\n    '11' : {'code':'TH','name':'Thessaly'},\n    '12' : {'code':'WG','name':'West Greece'},\n    '13' : {'code':'WM','name':'West Macedonia'}\n  },\n  'GL':{\n    '1' : {'code':'A','name':'Avannaa'},\n    '2' : {'code':'T','name':'Tunu'},\n    '3' : {'code':'K','name':'Kitaa'}\n  },\n  '86':{\n    '1' : {'code':'A','name':'Saint Andrew'},\n    '2' : {'code':'D','name':'Saint David'},\n    '3' : {'code':'G','name':'Saint George'},\n    '4' : {'code':'J','name':'Saint John'},\n    '5' : {'code':'M','name':'Saint Mark'},\n    '6' : {'code':'P','name':'Saint Patrick'},\n    '7' : {'code':'C','name':'Carriacou'},\n    '8' : {'code':'Q','name':'Petit Martinique'}\n  },\n  'GP':{\n    '1' : {'code':'ARR','name':'Arrondissements Of The Guadeloup'},\n    '2' : {'code':'CAN','name':'Cantons Of The Guadeloup Depart'},\n    '3' : {'code':'COM','name':'Communes Of The Guadeloup Depart'}\n  },\n  'GU':{\n    '1' : {'code':'AGA','name':'Agana Heights'},\n    '2' : {'code':'AGA','name':'Agat'},\n    '3' : {'code':'ASA','name':'Asan Maina'},\n    '4' : {'code':'BAR','name':'Barrigada'},\n    '5' : {'code':'CHA','name':'Chalan Pago Ordot'},\n    '6' : {'code':'DED','name':'Dededo'},\n    '7' : {'code':'HAG','name':'Hag\u00C5t\u00F1a'},\n    '8' : {'code':'INA','name':'Inarajan'},\n    '9' : {'code':'MAN','name':'Mangilao'},\n    '10' : {'code':'MER','name':'Merizo'},\n    '11' : {'code':'MON','name':'Mongmong Toto Maite'},\n    '12' : {'code':'PIT','name':'Piti'},\n    '13' : {'code':'SAN','name':'Santa Rita'},\n    '14' : {'code':'SIN','name':'Sinajana'},\n    '15' : {'code':'TAL','name':'Talofofo'},\n    '16' : {'code':'TAM','name':'Tamuning'},\n    '17' : {'code':'UMA','name':'Umatac'},\n    '18' : {'code':'YIG','name':'Yigo'},\n    '19' : {'code':'YON','name':'Yona'}\n  },\n  'GT':{\n    '1' : {'code':'AV','name':'Alta Verapaz'},\n    '2' : {'code':'BV','name':'Baja Verapaz'},\n    '3' : {'code':'CM','name':'Chimaltenango'},\n    '4' : {'code':'CQ','name':'Chiquimula'},\n    '5' : {'code':'PE','name':'El Peten'},\n    '6' : {'code':'PR','name':'El Progreso'},\n    '7' : {'code':'QC','name':'El Quiche'},\n    '8' : {'code':'ES','name':'Escuintla'},\n    '9' : {'code':'GU','name':'Guatemala'},\n    '10' : {'code':'HU','name':'Huehuetenango'},\n    '11' : {'code':'IZ','name':'Izabal'},\n    '12' : {'code':'JA','name':'Jalapa'},\n    '13' : {'code':'JU','name':'Jutiapa'},\n    '14' : {'code':'QZ','name':'Quetzaltenango'},\n    '15' : {'code':'RE','name':'Retalhuleu'},\n    '16' : {'code':'ST','name':'Sacatepequez'},\n    '17' : {'code':'SM','name':'San Marcos'},\n    '18' : {'code':'SR','name':'Santa Rosa'},\n    '19' : {'code':'SO','name':'Solola'},\n    '20' : {'code':'SU','name':'Suchitepequez'},\n    '21' : {'code':'TO','name':'Totonicapan'},\n    '22' : {'code':'ZA','name':'Zacapa'}\n  },\n  'GN':{\n    '1' : {'code':'CNK','name':'Conakry'},\n    '2' : {'code':'BYL','name':'Beyla'},\n    '3' : {'code':'BFA','name':'Boffa'},\n    '4' : {'code':'BOK','name':'Boke'},\n    '5' : {'code':'COY','name':'Coyah'},\n    '6' : {'code':'DBL','name':'Dabola'},\n    '7' : {'code':'DLB','name':'Dalaba'},\n    '8' : {'code':'DGR','name':'Dinguiraye'},\n    '9' : {'code':'DBR','name':'Dubreka'},\n    '10' : {'code':'FRN','name':'Faranah'},\n    '11' : {'code':'FRC','name':'Forecariah'},\n    '12' : {'code':'FRI','name':'Fria'},\n    '13' : {'code':'GAO','name':'Gaoual'},\n    '14' : {'code':'GCD','name':'Gueckedou'},\n    '15' : {'code':'KNK','name':'Kankan'},\n    '16' : {'code':'KRN','name':'Kerouane'},\n    '17' : {'code':'KND','name':'Kindia'},\n    '18' : {'code':'KSD','name':'Kissidougou'},\n    '19' : {'code':'KBA','name':'Koubia'},\n    '20' : {'code':'KDA','name':'Koundara'},\n    '21' : {'code':'KRA','name':'Kouroussa'},\n    '22' : {'code':'LAB','name':'Labe'},\n    '23' : {'code':'LLM','name':'Lelouma'},\n    '24' : {'code':'LOL','name':'Lola'},\n    '25' : {'code':'MCT','name':'Macenta'},\n    '26' : {'code':'MAL','name':'Mali'},\n    '27' : {'code':'MAM','name':'Mamou'},\n    '28' : {'code':'MAN','name':'Mandiana'},\n    '29' : {'code':'NZR','name':'Nzerekore'},\n    '30' : {'code':'PIT','name':'Pita'},\n    '31' : {'code':'SIG','name':'Siguiri'},\n    '32' : {'code':'TLM','name':'Telimele'},\n    '33' : {'code':'TOG','name':'Tougue'},\n    '34' : {'code':'YOM','name':'Yomou'}\n  },\n  'GW':{\n    '1' : {'code':'BF','name':'Bafata Region'},\n    '2' : {'code':'BB','name':'Biombo Region'},\n    '3' : {'code':'BS','name':'Bissau Region'},\n    '4' : {'code':'BL','name':'Bolama Region'},\n    '5' : {'code':'CA','name':'Cacheu Region'},\n    '6' : {'code':'GA','name':'Gabu Region'},\n    '7' : {'code':'OI','name':'Oio Region'},\n    '8' : {'code':'QU','name':'Quinara Region'},\n    '9' : {'code':'TO','name':'Tombali Region'}\n  },\n  'GY':{\n    '1' : {'code':'BW','name':'Barima-Waini'},\n    '2' : {'code':'CM','name':'Cuyuni-Mazaruni'},\n    '3' : {'code':'DM','name':'Demerara-Mahaica'},\n    '4' : {'code':'EC','name':'East Berbice-Corentyne'},\n    '5' : {'code':'EW','name':'Essequibo Islands-West Demerara'},\n    '6' : {'code':'MB','name':'Mahaica-Berbice'},\n    '7' : {'code':'PM','name':'Pomeroon-Supenaam'},\n    '8' : {'code':'PI','name':'Potaro-Siparuni'},\n    '9' : {'code':'UD','name':'Upper Demerara-Berbice'},\n    '10' : {'code':'UT','name':'Upper Takutu-Upper Essequibo'}\n  },\n  'HT':{\n    '1' : {'code':'AR','name':'Artibonite'},\n    '2' : {'code':'CE','name':'Centre'},\n    '3' : {'code':'GA','name':'Grand\\'Anse'},\n    '4' : {'code':'ND','name':'Nord'},\n    '5' : {'code':'NE','name':'Nord-Est'},\n    '6' : {'code':'NO','name':'Nord-Ouest'},\n    '7' : {'code':'OU','name':'Ouest'},\n    '8' : {'code':'SD','name':'Sud'},\n    '9' : {'code':'SE','name':'Sud-Est'}\n  },\n  'HM':{\n    '1' : {'code':'F','name':'Flat Island'},\n    '2' : {'code':'M','name':'McDonald Island'},\n    '3' : {'code':'S','name':'Shag Island'},\n    '4' : {'code':'H','name':'Heard Island'}\n  },\n  'HN':{\n    '1' : {'code':'AT','name':'Atlantida'},\n    '2' : {'code':'CH','name':'Choluteca'},\n    '3' : {'code':'CL','name':'Colon'},\n    '4' : {'code':'CM','name':'Comayagua'},\n    '5' : {'code':'CP','name':'Copan'},\n    '6' : {'code':'CR','name':'Cortes'},\n    '7' : {'code':'PA','name':'El Paraiso'},\n    '8' : {'code':'FM','name':'Francisco Morazan'},\n    '9' : {'code':'GD','name':'Gracias a Dios'},\n    '10' : {'code':'IN','name':'Intibuca'},\n    '11' : {'code':'IB','name':'Islas de la Bahia (Bay Islands)'},\n    '12' : {'code':'PZ','name':'La Paz'},\n    '13' : {'code':'LE','name':'Lempira'},\n    '14' : {'code':'OC','name':'Ocotepeque'},\n    '15' : {'code':'OL','name':'Olancho'},\n    '16' : {'code':'SB','name':'Santa Barbara'},\n    '17' : {'code':'VA','name':'Valle'},\n    '18' : {'code':'YO','name':'Yoro'}\n  },\n  'HK':{\n    '1' : {'code':'HCW','name':'Central and Western Hong Kong Is'},\n    '2' : {'code':'HEA','name':'Eastern Hong Kong Island'},\n    '3' : {'code':'HSO','name':'Southern Hong Kong Island'},\n    '4' : {'code':'HWC','name':'Wan Chai Hong Kong Island'},\n    '5' : {'code':'KKC','name':'Kowloon City Kowloon'},\n    '6' : {'code':'KKT','name':'Kwun Tong Kowloon'},\n    '7' : {'code':'KSS','name':'Sham Shui Po Kowloon'},\n    '8' : {'code':'KWT','name':'Wong Tai Sin Kowloon'},\n    '9' : {'code':'KYT','name':'Yau Tsim Mong Kowloon'},\n    '10' : {'code':'NIS','name':'Islands New Territories'},\n    '11' : {'code':'NKT','name':'Kwai Tsing New Territories'},\n    '12' : {'code':'NNO','name':'North New Territories'},\n    '13' : {'code':'NSK','name':'Sai Kung New Territories'},\n    '14' : {'code':'NST','name':'Sha Tin New Territories'},\n    '15' : {'code':'NTP','name':'Tai Po New Territories'},\n    '16' : {'code':'NTW','name':'Tsuen Wan New Territories'},\n    '17' : {'code':'NTM','name':'Tuen Mun New Territories'},\n    '18' : {'code':'NYL','name':'Yuen Long New Territories'}\n  },\n  'HU':{\n    '1' : {'code':'BK','name':'Bacs-Kiskun'},\n    '2' : {'code':'BA','name':'Baranya'},\n    '3' : {'code':'BE','name':'Bekes'},\n    '4' : {'code':'BS','name':'Bekescsaba'},\n    '5' : {'code':'BZ','name':'Borsod-Abauj-Zemplen'},\n    '6' : {'code':'BU','name':'Budapest'},\n    '7' : {'code':'CS','name':'Csongrad'},\n    '8' : {'code':'DE','name':'Debrecen'},\n    '9' : {'code':'DU','name':'Dunaujvaros'},\n    '10' : {'code':'EG','name':'Eger'},\n    '11' : {'code':'FE','name':'Fejer'},\n    '12' : {'code':'GY','name':'Gyor'},\n    '13' : {'code':'GM','name':'Gyor-Moson-Sopron'},\n    '14' : {'code':'HB','name':'Hajdu-Bihar'},\n    '15' : {'code':'HE','name':'Heves'},\n    '16' : {'code':'HO','name':'Hodmezovasarhely'},\n    '17' : {'code':'JN','name':'Jasz-Nagykun-Szolnok'},\n    '18' : {'code':'KA','name':'Kaposvar'},\n    '19' : {'code':'KE','name':'Kecskemet'},\n    '20' : {'code':'KO','name':'Komarom-Esztergom'},\n    '21' : {'code':'MI','name':'Miskolc'},\n    '22' : {'code':'NA','name':'Nagykanizsa'},\n    '23' : {'code':'NO','name':'Nograd'},\n    '24' : {'code':'NY','name':'Nyiregyhaza'},\n    '25' : {'code':'PE','name':'Pecs'},\n    '26' : {'code':'PS','name':'Pest'},\n    '27' : {'code':'SO','name':'Somogy'},\n    '28' : {'code':'SP','name':'Sopron'},\n    '29' : {'code':'SS','name':'Szabolcs-Szatmar-Bereg'},\n    '30' : {'code':'SZ','name':'Szeged'},\n    '31' : {'code':'SE','name':'Szekesfehervar'},\n    '32' : {'code':'SL','name':'Szolnok'},\n    '33' : {'code':'SM','name':'Szombathely'},\n    '34' : {'code':'TA','name':'Tatabanya'},\n    '35' : {'code':'TO','name':'Tolna'},\n    '36' : {'code':'VA','name':'Vas'},\n    '37' : {'code':'VE','name':'Veszprem'},\n    '38' : {'code':'ZA','name':'Zala'},\n    '39' : {'code':'ZZ','name':'Zalaegerszeg'}\n  },\n  'IS':{\n    '1' : {'code':'AL','name':'Austurland'},\n    '2' : {'code':'HF','name':'Hofuoborgarsvaeoi'},\n    '3' : {'code':'NE','name':'Norourland eystra'},\n    '4' : {'code':'NV','name':'Norourland vestra'},\n    '5' : {'code':'SL','name':'Suourland'},\n    '6' : {'code':'SN','name':'Suournes'},\n    '7' : {'code':'VF','name':'Vestfiroir'},\n    '8' : {'code':'VL','name':'Vesturland'}\n  },\n  'IN':{\n    '1' : {'code':'AN','name':'Andaman and Nicobar Islands'},\n    '2' : {'code':'AP','name':'Andhra Pradesh'},\n    '3' : {'code':'AR','name':'Arunachal Pradesh'},\n    '4' : {'code':'AS','name':'Assam'},\n    '5' : {'code':'BI','name':'Bihar'},\n    '6' : {'code':'CH','name':'Chandigarh'},\n    '7' : {'code':'DA','name':'Dadra and Nagar Haveli'},\n    '8' : {'code':'DM','name':'Daman and Diu'},\n    '9' : {'code':'DE','name':'Delhi'},\n    '10' : {'code':'GO','name':'Goa'},\n    '11' : {'code':'GU','name':'Gujarat'},\n    '12' : {'code':'HA','name':'Haryana'},\n    '13' : {'code':'HP','name':'Himachal Pradesh'},\n    '14' : {'code':'JA','name':'Jammu and Kashmir'},\n    '15' : {'code':'KA','name':'Karnataka'},\n    '16' : {'code':'KE','name':'Kerala'},\n    '17' : {'code':'LI','name':'Lakshadweep Islands'},\n    '18' : {'code':'MP','name':'Madhya Pradesh'},\n    '19' : {'code':'MA','name':'Maharashtra'},\n    '20' : {'code':'MN','name':'Manipur'},\n    '21' : {'code':'ME','name':'Meghalaya'},\n    '22' : {'code':'MI','name':'Mizoram'},\n    '23' : {'code':'NA','name':'Nagaland'},\n    '24' : {'code':'OR','name':'Orissa'},\n    '25' : {'code':'PO','name':'Pondicherry'},\n    '26' : {'code':'PU','name':'Punjab'},\n    '27' : {'code':'RA','name':'Rajasthan'},\n    '28' : {'code':'SI','name':'Sikkim'},\n    '29' : {'code':'TN','name':'Tamil Nadu'},\n    '30' : {'code':'TR','name':'Tripura'},\n    '31' : {'code':'UP','name':'Uttar Pradesh'},\n    '32' : {'code':'WB','name':'West Bengal'}\n  },\n  'ID':{\n    '1' : {'code':'DA','name':'Daista Aceh'},\n    '2' : {'code':'SU','name':'Sumatera Utara'},\n    '3' : {'code':'SB','name':'Sumatera Barat'},\n    '4' : {'code':'SI','name':'Riau'},\n    '5' : {'code':'JA','name':'Jambi'},\n    '6' : {'code':'SS','name':'Sumatera Selatan'},\n    '7' : {'code':'BE','name':'Bengkulu'},\n    '8' : {'code':'LA','name':'Lampung'},\n    '9' : {'code':'JK','name':'Dki Jakarta'},\n    '10' : {'code':'JB','name':'Jawa Barat'},\n    '11' : {'code':'JT','name':'Jawa Tengah'},\n    '12' : {'code':'DY','name':'Daista Yogyakarta'},\n    '13' : {'code':'JT','name':'Jawa Timur'},\n    '14' : {'code':'KB','name':'Kalimantan Barat'},\n    '15' : {'code':'KT','name':'Kalimantan Tengah'},\n    '16' : {'code':'KI','name':'Kalimantan Timur'},\n    '17' : {'code':'KS','name':'Kalimantan Selatan'},\n    '18' : {'code':'BA','name':'Bali'},\n    '19' : {'code':'NB','name':'Nusa Tenggara Barat'},\n    '20' : {'code':'NT','name':'Nusa Tenggara Timur'},\n    '21' : {'code':'SN','name':'Sulawesi Selatan'},\n    '22' : {'code':'ST','name':'Sulawesi Tengah'},\n    '23' : {'code':'SA','name':'Sulawesi Utara'},\n    '24' : {'code':'SG','name':'Sulawesi Tenggara'},\n    '25' : {'code':'MA','name':'Maluku'},\n    '26' : {'code':'MU','name':'Maluku Utara'},\n    '27' : {'code':'IJ','name':'Irian Jaya Timur'},\n    '28' : {'code':'IT','name':'Irian Jaya Tengah'},\n    '29' : {'code':'IB','name':'Irian Jawa Barat'},\n    '30' : {'code':'BT','name':'Banten'},\n    '31' : {'code':'BB','name':'Bangka Belitung'},\n    '32' : {'code':'GO','name':'Gorontalo'}\n  },\n  'IR':{\n    '1' : {'code':'ARD','name':'Ardabil'},\n    '2' : {'code':'BSH','name':'Bushehr'},\n    '3' : {'code':'CMB','name':'Chahar Mahaal and Bakhtiari'},\n    '4' : {'code':'EAZ','name':'East Azarbaijan'},\n    '5' : {'code':'EFH','name':'Esfahan'},\n    '6' : {'code':'FAR','name':'Fars'},\n    '7' : {'code':'GIL','name':'Gilan'},\n    '8' : {'code':'GLS','name':'Golestan'},\n    '9' : {'code':'HMD','name':'Hamadan'},\n    '10' : {'code':'HRM','name':'Hormozgan'},\n    '11' : {'code':'ILM','name':'Ilam'},\n    '12' : {'code':'KBA','name':'Kohkiluyeh and Buyer Ahmad'},\n    '13' : {'code':'KRB','name':'Kerman'},\n    '14' : {'code':'KRD','name':'Kurdistan'},\n    '15' : {'code':'KRM','name':'Kermanshah'},\n    '16' : {'code':'KZT','name':'Khuzestan'},\n    '17' : {'code':'LRS','name':'Lorestan'},\n    '18' : {'code':'MKZ','name':'Markazi'},\n    '19' : {'code':'MZD','name':'Mazandaran'},\n    '20' : {'code':'NKH','name':'North Khorasan'},\n    '21' : {'code':'QAZ','name':'Qazvin'},\n    '22' : {'code':'QOM','name':'Qom'},\n    '23' : {'code':'RKH','name':'Razavi Khorasan'},\n    '24' : {'code':'SBL','name':'Sistan and Baluchistan'},\n    '25' : {'code':'SKH','name':'South Khorasan'},\n    '26' : {'code':'SMN','name':'Semnan'},\n    '27' : {'code':'TEH','name':'Tehran'},\n    '28' : {'code':'WEZ','name':'West Azarbaijan'},\n    '29' : {'code':'YZD','name':'Yazd'},\n    '30' : {'code':'ZAN','name':'Zanjan'}\n  },\n  'IQ':{\n    '1' : {'code':'AB','name':'Al Anbar'},\n    '2' : {'code':'AL','name':'Arbil'},\n    '3' : {'code':'BA','name':'Al Basrah'},\n    '4' : {'code':'BB','name':'Babil'},\n    '5' : {'code':'BD','name':'Baghdad'},\n    '6' : {'code':'DH','name':'Dahuk'},\n    '7' : {'code':'DQ','name':'Dhi Qar'},\n    '8' : {'code':'DY','name':'Diyala'},\n    '9' : {'code':'KB','name':'Al Karbala'},\n    '10' : {'code':'MU','name':'Al Muthanna'},\n    '11' : {'code':'MY','name':'Maysan'},\n    '12' : {'code':'NJ','name':'An Najaf'},\n    '13' : {'code':'NN','name':'Ninawa'},\n    '14' : {'code':'QA','name':'Al Qadisyah'},\n    '15' : {'code':'SD','name':'Salah ad Din'},\n    '16' : {'code':'SL','name':'As Sulaymaniyah'},\n    '17' : {'code':'TM','name':'At Ta\\'mim'},\n    '18' : {'code':'WS','name':'Wasit'}\n  },\n  'IE':{\n    '1' : {'code':'CA','name':'Carlow'},\n    '2' : {'code':'CV','name':'Cavan'},\n    '3' : {'code':'CL','name':'Clare'},\n    '4' : {'code':'CO','name':'Cork'},\n    '5' : {'code':'DO','name':'Donegal'},\n    '6' : {'code':'DU','name':'Dublin'},\n    '7' : {'code':'GA','name':'Galway'},\n    '8' : {'code':'KE','name':'Kerry'},\n    '9' : {'code':'KI','name':'Kildare'},\n    '10' : {'code':'KL','name':'Kilkenny'},\n    '11' : {'code':'LA','name':'Laois'},\n    '12' : {'code':'LE','name':'Leitrim'},\n    '13' : {'code':'LI','name':'Limerick'},\n    '14' : {'code':'LO','name':'Longford'},\n    '15' : {'code':'LU','name':'Louth'},\n    '16' : {'code':'MA','name':'Mayo'},\n    '17' : {'code':'ME','name':'Meath'},\n    '18' : {'code':'MO','name':'Monaghan'},\n    '19' : {'code':'OF','name':'Offaly'},\n    '20' : {'code':'RO','name':'Roscommon'},\n    '21' : {'code':'SL','name':'Sligo'},\n    '22' : {'code':'TI','name':'Tipperary'},\n    '23' : {'code':'WA','name':'Waterford'},\n    '24' : {'code':'WE','name':'Westmeath'},\n    '25' : {'code':'WX','name':'Wexford'},\n    '26' : {'code':'WI','name':'Wicklow'}\n  },\n  'IL':{\n    '1' : {'code':'BS','name':'Be\\'er Sheva'},\n    '2' : {'code':'BH','name':'Bika\\'at Hayarden'},\n    '3' : {'code':'EA','name':'Eilat and Arava'},\n    '4' : {'code':'GA','name':'Galil'},\n    '5' : {'code':'HA','name':'Haifa'},\n    '6' : {'code':'JM','name':'Jehuda Mountains'},\n    '7' : {'code':'JE','name':'Jerusalem'},\n    '8' : {'code':'NE','name':'Negev'},\n    '10' : {'code':'SE','name':'Semaria'},\n    '11' : {'code':'SH','name':'Sharon'},\n    '12' : {'code':'TA','name':'Tel Aviv (Gosh Dan)'}\n  },\n  'IT':{\n    '1' : {'code':'AG','name':'Agrigento'},\n    '2' : {'code':'AL','name':'Alessandria'},\n    '3' : {'code':'AN','name':'Ancona'},\n    '4' : {'code':'AO','name':'Aosta'},\n    '5' : {'code':'AR','name':'Arezzo'},\n    '6' : {'code':'AP','name':'Ascoli Piceno'},\n    '7' : {'code':'AT','name':'Asti'},\n    '8' : {'code':'AV','name':'Avellino'},\n    '9' : {'code':'BA','name':'Bari'},\n    '10' : {'code':'BL','name':'Belluno'},\n    '11' : {'code':'BN','name':'Benevento'},\n    '12' : {'code':'BG','name':'Bergamo'},\n    '13' : {'code':'BI','name':'Biella'},\n    '14' : {'code':'BO','name':'Bologna'},\n    '15' : {'code':'BZ','name':'Bolzano'},\n    '16' : {'code':'BS','name':'Brescia'},\n    '17' : {'code':'BR','name':'Brindisi'},\n    '18' : {'code':'CA','name':'Cagliari'},\n    '19' : {'code':'CL','name':'Caltanissetta'},\n    '20' : {'code':'CB','name':'Campobasso'},\n    '21' : {'code':'CE','name':'Caserta'},\n    '22' : {'code':'CT','name':'Catania'},\n    '23' : {'code':'CZ','name':'Catanzaro'},\n    '24' : {'code':'CH','name':'Chieti'},\n    '25' : {'code':'CO','name':'Como'},\n    '26' : {'code':'CS','name':'Cosenza'},\n    '27' : {'code':'CR','name':'Cremona'},\n    '28' : {'code':'KR','name':'Crotone'},\n    '29' : {'code':'CN','name':'Cuneo'},\n    '30' : {'code':'EN','name':'Enna'},\n    '31' : {'code':'FE','name':'Ferrara'},\n    '32' : {'code':'FI','name':'Firenze'},\n    '33' : {'code':'FG','name':'Foggia'},\n    '34' : {'code':'FO','name':'Forl\u00EC'},\n    '35' : {'code':'FR','name':'Frosinone'},\n    '36' : {'code':'GE','name':'Genova'},\n    '37' : {'code':'GO','name':'Gorizia'},\n    '38' : {'code':'GR','name':'Grosseto'},\n    '39' : {'code':'IM','name':'Imperia'},\n    '40' : {'code':'IS','name':'Isernia'},\n    '41' : {'code':'AQ','name':'Aquila'},\n    '42' : {'code':'SP','name':'La Spezia'},\n    '43' : {'code':'LT','name':'Latina'},\n    '44' : {'code':'LE','name':'Lecce'},\n    '45' : {'code':'LC','name':'Lecco'},\n    '46' : {'code':'LI','name':'Livorno'},\n    '47' : {'code':'LO','name':'Lodi'},\n    '48' : {'code':'LU','name':'Lucca'},\n    '49' : {'code':'MC','name':'Macerata'},\n    '50' : {'code':'MN','name':'Mantova'},\n    '51' : {'code':'MS','name':'Massa-Carrara'},\n    '52' : {'code':'MT','name':'Matera'},\n    '53' : {'code':'ME','name':'Messina'},\n    '54' : {'code':'MI','name':'Milano'},\n    '55' : {'code':'MO','name':'Modena'},\n    '56' : {'code':'NA','name':'Napoli'},\n    '57' : {'code':'NO','name':'Novara'},\n    '58' : {'code':'NU','name':'Nuoro'},\n    '59' : {'code':'OR','name':'Oristano'},\n    '60' : {'code':'PD','name':'Padova'},\n    '61' : {'code':'PA','name':'Palermo'},\n    '62' : {'code':'PR','name':'Parma'},\n    '63' : {'code':'PG','name':'Perugia'},\n    '64' : {'code':'PV','name':'Pavia'},\n    '65' : {'code':'PU','name':'Pesaro Urbino'},\n    '66' : {'code':'PE','name':'Pescara'},\n    '67' : {'code':'PC','name':'Piacenza'},\n    '68' : {'code':'PI','name':'Pisa'},\n    '69' : {'code':'PT','name':'Pistoia'},\n    '70' : {'code':'PN','name':'Pordenone'},\n    '71' : {'code':'PZ','name':'Potenza'},\n    '72' : {'code':'PO','name':'Prato'},\n    '73' : {'code':'RG','name':'Ragusa'},\n    '74' : {'code':'RA','name':'Ravenna'},\n    '75' : {'code':'RC','name':'Reggio Calabria'},\n    '76' : {'code':'RE','name':'Reggio Emilia'},\n    '77' : {'code':'RI','name':'Rieti'},\n    '78' : {'code':'RN','name':'Rimini'},\n    '79' : {'code':'RM','name':'Roma'},\n    '80' : {'code':'RO','name':'Rovigo'},\n    '81' : {'code':'SA','name':'Salerno'},\n    '82' : {'code':'SS','name':'Sassari'},\n    '83' : {'code':'SV','name':'Savona'},\n    '84' : {'code':'SI','name':'Siena'},\n    '85' : {'code':'SR','name':'Siracusa'},\n    '86' : {'code':'SO','name':'Sondrio'},\n    '87' : {'code':'TA','name':'Taranto'},\n    '88' : {'code':'TE','name':'Teramo'},\n    '89' : {'code':'TR','name':'Terni'},\n    '90' : {'code':'TO','name':'Torino'},\n    '91' : {'code':'TP','name':'Trapani'},\n    '92' : {'code':'TN','name':'Trento'},\n    '93' : {'code':'TV','name':'Treviso'},\n    '94' : {'code':'TS','name':'Trieste'},\n    '95' : {'code':'UD','name':'Udine'},\n    '96' : {'code':'VA','name':'Varese'},\n    '97' : {'code':'VE','name':'Venezia'},\n    '98' : {'code':'VB','name':'Verbania'},\n    '99' : {'code':'VC','name':'Vercelli'},\n    '100' : {'code':'VR','name':'Verona'},\n    '101' : {'code':'VV','name':'Vibo Valentia'},\n    '102' : {'code':'VI','name':'Vicenza'},\n    '103' : {'code':'VT','name':'Viterbo'},\n    '104' : {'code':'CI','name':'Carbonia-Iglesias'},\n    '105' : {'code':'VS','name':'Medio Campidano'},\n    '106' : {'code':'OG','name':'Ogliastra'},\n    '107' : {'code':'OT','name':'Olbia-Tempio'},\n    '108' : {'code':'MB','name':'Monza e Brianza'},\n    '109' : {'code':'FM','name':'Fermo'},\n    '110' : {'code':'BT','name':'Barletta-Andria-Trani'}\n  },\n  'JM':{\n    '1' : {'code':'CLA','name':'Clarendon Parish'},\n    '2' : {'code':'HAN','name':'Hanover Parish'},\n    '3' : {'code':'KIN','name':'Kingston Parish'},\n    '4' : {'code':'MAN','name':'Manchester Parish'},\n    '5' : {'code':'POR','name':'Portland Parish'},\n    '6' : {'code':'AND','name':'Saint Andrew Parish'},\n    '7' : {'code':'ANN','name':'Saint Ann Parish'},\n    '8' : {'code':'CAT','name':'Saint Catherine Parish'},\n    '9' : {'code':'ELI','name':'Saint Elizabeth Parish'},\n    '10' : {'code':'JAM','name':'Saint James Parish'},\n    '11' : {'code':'MAR','name':'Saint Mary Parish'},\n    '12' : {'code':'THO','name':'Saint Thomas Parish'},\n    '13' : {'code':'TRL','name':'Trelawny Parish'},\n    '14' : {'code':'WML','name':'Westmoreland Parish'}\n  },\n  'JP':{\n    '1' : {'code':'AI','name':'Aichi'},\n    '2' : {'code':'AK','name':'Akita'},\n    '3' : {'code':'AO','name':'Aomori'},\n    '4' : {'code':'CH','name':'Chiba'},\n    '5' : {'code':'EH','name':'Ehime'},\n    '6' : {'code':'FK','name':'Fukui'},\n    '7' : {'code':'FU','name':'Fukuoka'},\n    '8' : {'code':'FS','name':'Fukushima'},\n    '9' : {'code':'GI','name':'Gifu'},\n    '10' : {'code':'GU','name':'Gumma'},\n    '11' : {'code':'HI','name':'Hiroshima'},\n    '12' : {'code':'HO','name':'Hokkaido'},\n    '13' : {'code':'HY','name':'Hyogo'},\n    '14' : {'code':'IB','name':'Ibaraki'},\n    '15' : {'code':'IS','name':'Ishikawa'},\n    '16' : {'code':'IW','name':'Iwate'},\n    '17' : {'code':'KA','name':'Kagawa'},\n    '18' : {'code':'KG','name':'Kagoshima'},\n    '19' : {'code':'KN','name':'Kanagawa'},\n    '20' : {'code':'KO','name':'Kochi'},\n    '21' : {'code':'KU','name':'Kumamoto'},\n    '22' : {'code':'KY','name':'Kyoto'},\n    '23' : {'code':'MI','name':'Mie'},\n    '24' : {'code':'MY','name':'Miyagi'},\n    '25' : {'code':'MZ','name':'Miyazaki'},\n    '26' : {'code':'NA','name':'Nagano'},\n    '27' : {'code':'NG','name':'Nagasaki'},\n    '28' : {'code':'NR','name':'Nara'},\n    '29' : {'code':'NI','name':'Niigata'},\n    '30' : {'code':'OI','name':'Oita'},\n    '31' : {'code':'OK','name':'Okayama'},\n    '32' : {'code':'ON','name':'Okinawa'},\n    '33' : {'code':'OS','name':'Osaka'},\n    '34' : {'code':'SA','name':'Saga'},\n    '35' : {'code':'SI','name':'Saitama'},\n    '36' : {'code':'SH','name':'Shiga'},\n    '37' : {'code':'SM','name':'Shimane'},\n    '38' : {'code':'SZ','name':'Shizuoka'},\n    '39' : {'code':'TO','name':'Tochigi'},\n    '40' : {'code':'TS','name':'Tokushima'},\n    '41' : {'code':'TK','name':'Tokyo'},\n    '42' : {'code':'TT','name':'Tottori'},\n    '43' : {'code':'TY','name':'Toyama'},\n    '44' : {'code':'WA','name':'Wakayama'},\n    '45' : {'code':'YA','name':'Yamagata'},\n    '46' : {'code':'YM','name':'Yamaguchi'},\n    '47' : {'code':'YN','name':'Yamanashi'}\n  },\n  'JO':{\n    '1' : {'code':'AM','name':'\\'Amman'},\n    '2' : {'code':'AJ','name':'Ajlun'},\n    '3' : {'code':'AA','name':'Al\\'Aqabah'},\n    '4' : {'code':'AB','name':'Al Balqa\\''},\n    '5' : {'code':'AK','name':'Al Karak'},\n    '6' : {'code':'AL','name':'Al Mafraq'},\n    '7' : {'code':'AT','name':'At Tafilah'},\n    '8' : {'code':'AZ','name':'Az Zarqa\\''},\n    '9' : {'code':'IR','name':'Irbid'},\n    '10' : {'code':'JA','name':'Jarash'},\n    '11' : {'code':'MA','name':'Ma\\'an'},\n    '12' : {'code':'MD','name':'Madaba'}\n  },\n  'KZ':{\n    '1' : {'code':'AL','name':'Almaty'},\n    '2' : {'code':'AC','name':'Almaty City'},\n    '3' : {'code':'AM','name':'Aqmola'},\n    '4' : {'code':'AQ','name':'Aqtobe'},\n    '5' : {'code':'AS','name':'Astana City'},\n    '6' : {'code':'AT','name':'Atyrau'},\n    '7' : {'code':'BA','name':'Batys Qazaqstan'},\n    '8' : {'code':'BY','name':'Bayqongyr City'},\n    '9' : {'code':'MA','name':'Mangghystau'},\n    '10' : {'code':'ON','name':'Ongtustik Qazaqstan'},\n    '11' : {'code':'PA','name':'Pavlodar'},\n    '12' : {'code':'QA','name':'Qaraghandy'},\n    '13' : {'code':'QO','name':'Qostanay'},\n    '14' : {'code':'QY','name':'Qyzylorda'},\n    '15' : {'code':'SH','name':'Shyghys Qazaqstan'},\n    '16' : {'code':'SO','name':'Soltustik Qazaqstan'},\n    '17' : {'code':'ZH','name':'Zhambyl'}\n  },\n  'KE':{\n    '1' : {'code':'CE','name':'Central'},\n    '2' : {'code':'CO','name':'Coast'},\n    '3' : {'code':'EA','name':'Eastern'},\n    '4' : {'code':'NA','name':'Nairobi Area'},\n    '5' : {'code':'NE','name':'North Eastern'},\n    '6' : {'code':'NY','name':'Nyanza'},\n    '7' : {'code':'RV','name':'Rift Valley'},\n    '8' : {'code':'WE','name':'Western'}\n  },\n  'KI':{\n    '1' : {'code':'AG','name':'Abaiang'},\n    '2' : {'code':'AM','name':'Abemama'},\n    '3' : {'code':'AK','name':'Aranuka'},\n    '4' : {'code':'AO','name':'Arorae'},\n    '5' : {'code':'BA','name':'Banaba'},\n    '6' : {'code':'BE','name':'Beru'},\n    '7' : {'code':'bT','name':'Butaritari'},\n    '8' : {'code':'KA','name':'Kanton'},\n    '9' : {'code':'KR','name':'Kiritimati'},\n    '10' : {'code':'KU','name':'Kuria'},\n    '11' : {'code':'MI','name':'Maiana'},\n    '12' : {'code':'MN','name':'Makin'},\n    '13' : {'code':'ME','name':'Marakei'},\n    '14' : {'code':'NI','name':'Nikunau'},\n    '15' : {'code':'NO','name':'Nonouti'},\n    '16' : {'code':'ON','name':'Onotoa'},\n    '17' : {'code':'TT','name':'Tabiteuea'},\n    '18' : {'code':'TR','name':'Tabuaeran'},\n    '19' : {'code':'TM','name':'Tamana'},\n    '20' : {'code':'TW','name':'Tarawa'},\n    '21' : {'code':'TE','name':'Teraina'}\n  },\n  'KP':{\n    '1' : {'code':'CHA','name':'Chagang-do'},\n    '2' : {'code':'HAB','name':'Hamgyong-bukto'},\n    '3' : {'code':'HAN','name':'Hamgyong-namdo'},\n    '4' : {'code':'HWB','name':'Hwanghae-bukto'},\n    '5' : {'code':'HWN','name':'Hwanghae-namdo'},\n    '6' : {'code':'KAN','name':'Kangwon-do'},\n    '7' : {'code':'PYB','name':'P\\'yongan-bukto'},\n    '8' : {'code':'PYN','name':'P\\'yongan-namdo'},\n    '9' : {'code':'YAN','name':'Ryanggang-do (Yanggang-do)'},\n    '10' : {'code':'NAJ','name':'Rason Directly Governed City'},\n    '11' : {'code':'PYO','name':'P\\'yongyang Special City'}\n  },\n  'KR':{\n    '1' : {'code':'CO','name':'Ch\\'ungch\\'ong-bukto'},\n    '2' : {'code':'CH','name':'Ch\\'ungch\\'ong-namdo'},\n    '3' : {'code':'CD','name':'Cheju-do'},\n    '4' : {'code':'CB','name':'Cholla-bukto'},\n    '5' : {'code':'CN','name':'Cholla-namdo'},\n    '6' : {'code':'IG','name':'Inch\\'on-gwangyoksi'},\n    '7' : {'code':'KA','name':'Kangwon-do'},\n    '8' : {'code':'KG','name':'Kwangju-gwangyoksi'},\n    '9' : {'code':'KD','name':'Kyonggi-do'},\n    '10' : {'code':'KB','name':'Kyongsang-bukto'},\n    '11' : {'code':'KN','name':'Kyongsang-namdo'},\n    '12' : {'code':'PG','name':'Pusan-gwangyoksi'},\n    '13' : {'code':'SO','name':'Soul-t\\'ukpyolsi'},\n    '14' : {'code':'TA','name':'Taegu-gwangyoksi'},\n    '15' : {'code':'TG','name':'Taejon-gwangyoksi'}\n  },\n  'KW':{\n    '1' : {'code':'AL','name':'Al\\'Asimah'},\n    '2' : {'code':'AA','name':'Al Ahmadi'},\n    '3' : {'code':'AF','name':'Al Farwaniyah'},\n    '4' : {'code':'AJ','name':'Al Jahra\\''},\n    '5' : {'code':'HA','name':'Hawalli'}\n  },\n  'KG':{\n    '1' : {'code':'GB','name':'Bishkek'},\n    '2' : {'code':'B','name':'Batken'},\n    '3' : {'code':'C','name':'Chu'},\n    '4' : {'code':'J','name':'Jalal-Abad'},\n    '5' : {'code':'N','name':'Naryn'},\n    '6' : {'code':'O','name':'Osh'},\n    '7' : {'code':'T','name':'Talas'},\n    '8' : {'code':'Y','name':'Ysyk-Kol'}\n  },\n  'LA':{\n    '1' : {'code':'VT','name':'Vientiane'},\n    '2' : {'code':'AT','name':'Attapu'},\n    '3' : {'code':'BK','name':'Bokeo'},\n    '4' : {'code':'BL','name':'Bolikhamxai'},\n    '5' : {'code':'CH','name':'Champasak'},\n    '6' : {'code':'HO','name':'Houaphan'},\n    '7' : {'code':'KH','name':'Khammouan'},\n    '8' : {'code':'LM','name':'Louang Namtha'},\n    '9' : {'code':'LP','name':'Louangphabang'},\n    '10' : {'code':'OU','name':'Oudomxai'},\n    '11' : {'code':'PH','name':'Phongsali'},\n    '12' : {'code':'SL','name':'Salavan'},\n    '13' : {'code':'SV','name':'Savannakhet'},\n    '14' : {'code':'VI','name':'Vientiane'},\n    '15' : {'code':'XA','name':'Xaignabouli'},\n    '16' : {'code':'XE','name':'Xekong'},\n    '17' : {'code':'XI','name':'Xiangkhoang'},\n    '18' : {'code':'XN','name':'Xaisomboun'}\n  },\n  'LV':{\n    '1' : {'code':'AIZ','name':'Aizkraukles Rajons'},\n    '2' : {'code':'ALU','name':'Aluksnes Rajons'},\n    '3' : {'code':'BAL','name':'Balvu Rajons'},\n    '4' : {'code':'BAU','name':'Bauskas Rajons'},\n    '5' : {'code':'CES','name':'Cesu Rajons'},\n    '6' : {'code':'DGR','name':'Daugavpils Rajons'},\n    '7' : {'code':'DOB','name':'Dobeles Rajons'},\n    '8' : {'code':'GUL','name':'Gulbenes Rajons'},\n    '9' : {'code':'JEK','name':'Jekabpils Rajons'},\n    '10' : {'code':'JGR','name':'Jelgavas Rajons'},\n    '11' : {'code':'KRA','name':'Kraslavas Rajons'},\n    '12' : {'code':'KUL','name':'Kuldigas Rajons'},\n    '13' : {'code':'LPR','name':'Liepajas Rajons'},\n    '14' : {'code':'LIM','name':'Limbazu Rajons'},\n    '15' : {'code':'LUD','name':'Ludzas Rajons'},\n    '16' : {'code':'MAD','name':'Madonas Rajons'},\n    '17' : {'code':'OGR','name':'Ogres Rajons'},\n    '18' : {'code':'PRE','name':'Preilu Rajons'},\n    '19' : {'code':'RZR','name':'Rezeknes Rajons'},\n    '20' : {'code':'RGR','name':'Rigas Rajons'},\n    '21' : {'code':'SAL','name':'Saldus Rajons'},\n    '22' : {'code':'TAL','name':'Talsu Rajons'},\n    '23' : {'code':'TUK','name':'Tukuma Rajons'},\n    '24' : {'code':'VLK','name':'Valkas Rajons'},\n    '25' : {'code':'VLM','name':'Valmieras Rajons'},\n    '26' : {'code':'VSR','name':'Ventspils Rajons'},\n    '27' : {'code':'DGV','name':'Daugavpils'},\n    '28' : {'code':'JGV','name':'Jelgava'},\n    '29' : {'code':'JUR','name':'Jurmala'},\n    '30' : {'code':'LPK','name':'Liepaja'},\n    '31' : {'code':'RZK','name':'Rezekne'},\n    '32' : {'code':'RGA','name':'Riga'},\n    '33' : {'code':'VSL','name':'Ventspils'}\n  },\n  'LB':{\n    '1' : {'code':'BIN','name':'Bint Jbeil'},\n    '2' : {'code':'HAS','name':'Hasbaya'},\n    '3' : {'code':'MAR','name':'Marjeyoun'},\n    '4' : {'code':'NAB','name':'Nabatieh'},\n    '5' : {'code':'BAA','name':'Baalbek'},\n    '6' : {'code':'HER','name':'Hermel'},\n    '7' : {'code':'RAS','name':'Rashaya'},\n    '8' : {'code':'WES','name':'Western Beqaa'},\n    '9' : {'code':'ZAH','name':'Zahle'},\n    '10' : {'code':'AKK','name':'Akkar'},\n    '11' : {'code':'BAT','name':'Batroun'},\n    '12' : {'code':'BSH','name':'Bsharri'},\n    '13' : {'code':'KOU','name':'Koura'},\n    '14' : {'code':'MIN','name':'Miniyeh-Danniyeh'},\n    '15' : {'code':'TRI','name':'Tripoli'},\n    '16' : {'code':'ZGH','name':'Zgharta'},\n    '17' : {'code':'ALE','name':'Aley'},\n    '18' : {'code':'BAA','name':'Baabda'},\n    '19' : {'code':'BYB','name':'Byblos'},\n    '20' : {'code':'CHO','name':'Chouf'},\n    '21' : {'code':'KES','name':'Kesrwan'},\n    '22' : {'code':'MAT','name':'Matn'},\n    '23' : {'code':'JEZ','name':'Jezzine'},\n    '24' : {'code':'SID','name':'Sidon'},\n    '25' : {'code':'TYR','name':'Tyre'}\n  },\n  'LS':{\n    '1' : {'code':'BE','name':'Berea'},\n    '2' : {'code':'BB','name':'Butha-Buthe'},\n    '3' : {'code':'LE','name':'Leribe'},\n    '4' : {'code':'MF','name':'Mafeteng'},\n    '5' : {'code':'MS','name':'Maseru'},\n    '6' : {'code':'MH','name':'Mohale\\'s Hoek'},\n    '7' : {'code':'MK','name':'Mokhotlong'},\n    '8' : {'code':'QN','name':'Qacha\\'s Nek'},\n    '9' : {'code':'QT','name':'Quthing'},\n    '10' : {'code':'TT','name':'Thaba-Tseka'}\n  },\n  'LR':{\n    '1' : {'code':'BI','name':'Bomi'},\n    '2' : {'code':'BG','name':'Bong'},\n    '3' : {'code':'GB','name':'Grand Bassa'},\n    '4' : {'code':'CM','name':'Grand Cape Mount'},\n    '5' : {'code':'GG','name':'Grand Gedeh'},\n    '6' : {'code':'GK','name':'Grand Kru'},\n    '7' : {'code':'LO','name':'Lofa'},\n    '8' : {'code':'MG','name':'Margibi'},\n    '9' : {'code':'ML','name':'Maryland'},\n    '10' : {'code':'MS','name':'Montserrado'},\n    '11' : {'code':'NB','name':'Nimba'},\n    '12' : {'code':'RC','name':'River Cess'},\n    '13' : {'code':'SN','name':'Sinoe'}\n  },\n  'LY':{\n    '1' : {'code':'AJ','name':'Ajdabiya'},\n    '2' : {'code':'AZ','name':'Al \\'Aziziyah'},\n    '3' : {'code':'FA','name':'Al Fatih'},\n    '4' : {'code':'JA','name':'Al Jabal al Akhdar'},\n    '5' : {'code':'JU','name':'Al Jufrah'},\n    '6' : {'code':'KH','name':'Al Khums'},\n    '7' : {'code':'KU','name':'Al Kufrah'},\n    '8' : {'code':'NK','name':'An Nuqat al Khams'},\n    '9' : {'code':'AS','name':'Ash Shati\\''},\n    '10' : {'code':'AW','name':'Awbari'},\n    '11' : {'code':'ZA','name':'Az Zawiyah'},\n    '12' : {'code':'BA','name':'Banghazi'},\n    '13' : {'code':'DA','name':'Darnah'},\n    '14' : {'code':'GD','name':'Ghadamis'},\n    '15' : {'code':'GY','name':'Gharyan'},\n    '16' : {'code':'MI','name':'Misratah'},\n    '17' : {'code':'MZ','name':'Murzuq'},\n    '18' : {'code':'SB','name':'Sabha'},\n    '19' : {'code':'SW','name':'Sawfajjin'},\n    '20' : {'code':'SU','name':'Surt'},\n    '21' : {'code':'TL','name':'Tarabulus (Tripoli)'},\n    '22' : {'code':'TH','name':'Tarhunah'},\n    '23' : {'code':'TU','name':'Tubruq'},\n    '24' : {'code':'YA','name':'Yafran'},\n    '25' : {'code':'ZL','name':'Zlitan'}\n  },\n  'LI':{\n    '1' : {'code':'V','name':'Vaduz'},\n    '2' : {'code':'A','name':'Schaan'},\n    '3' : {'code':'B','name':'Balzers'},\n    '4' : {'code':'N','name':'Triesen'},\n    '5' : {'code':'E','name':'Eschen'},\n    '6' : {'code':'M','name':'Mauren'},\n    '7' : {'code':'T','name':'Triesenberg'},\n    '8' : {'code':'R','name':'Ruggell'},\n    '9' : {'code':'G','name':'Gamprin'},\n    '10' : {'code':'L','name':'Schellenberg'},\n    '11' : {'code':'P','name':'Planken'}\n  },\n  'LT':{\n    '1' : {'code':'AL','name':'Alytus'},\n    '2' : {'code':'KA','name':'Kaunas'},\n    '3' : {'code':'KL','name':'Klaipeda'},\n    '4' : {'code':'MA','name':'Marijampole'},\n    '5' : {'code':'PA','name':'Panevezys'},\n    '6' : {'code':'SI','name':'Siauliai'},\n    '7' : {'code':'TA','name':'Taurage'},\n    '8' : {'code':'TE','name':'Telsiai'},\n    '9' : {'code':'UT','name':'Utena'},\n    '10' : {'code':'VI','name':'Vilnius'}\n  },\n  'LU':{\n    '1' : {'code':'DD','name':'Diekirch'},\n    '2' : {'code':'DC','name':'Clervaux'},\n    '3' : {'code':'DR','name':'Redange'},\n    '4' : {'code':'DV','name':'Vianden'},\n    '5' : {'code':'DW','name':'Wiltz'},\n    '6' : {'code':'GG','name':'Grevenmacher'},\n    '7' : {'code':'GE','name':'Echternach'},\n    '8' : {'code':'GR','name':'Remich'},\n    '9' : {'code':'LL','name':'Luxembourg'},\n    '10' : {'code':'LC','name':'Capellen'},\n    '11' : {'code':'LE','name':'Esch-sur-Alzette'},\n    '12' : {'code':'LM','name':'Mersch'}\n  },\n  'MO':{\n    '1' : {'code':'OLF','name':'Our Lady Fatima Parish'},\n    '2' : {'code':'ANT','name':'St. Anthony Parish'},\n    '3' : {'code':'LAZ','name':'St. Lazarus Parish'},\n    '4' : {'code':'CAT','name':'Cathedral Parish'},\n    '5' : {'code':'LAW','name':'St. Lawrence Parish'}\n  },\n  'MK':{\n    '1' : {'code':'AER','name':'Aerodrom'},\n    '2' : {'code':'ARA','name':'Ara\u010Dinovo'},\n    '3' : {'code':'BER','name':'Berovo'},\n    '4' : {'code':'BIT','name':'Bitola'},\n    '5' : {'code':'BOG','name':'Bogdanci'},\n    '6' : {'code':'BOG','name':'Bogovinje'},\n    '7' : {'code':'BOS','name':'Bosilovo'},\n    '8' : {'code':'BRV','name':'Brvenica'},\n    '9' : {'code':'BUT','name':'Butel'},\n    '10' : {'code':'\u010CAI','name':'\u010Cair'},\n    '11' : {'code':'\u010CA\u0161','name':'\u010Ca\u0161ka'},\n    '12' : {'code':'CEN','name':'Centar'},\n    '13' : {'code':'CEN','name':'Centar \u017Dupa'},\n    '14' : {'code':'\u010Ce\u0161','name':'\u010Ce\u0161inovo-Oble\u0161'},\n    '15' : {'code':'\u010CU\u010C','name':'\u010Cu\u010Der-Sandevo'},\n    '16' : {'code':'DEB','name':'Debar'},\n    '17' : {'code':'DEB','name':'Debarca'},\n    '18' : {'code':'DEL','name':'Del\u010Devo'},\n    '19' : {'code':'DEM','name':'Demir Hisar'},\n    '20' : {'code':'DEM','name':'Demir Kapija'},\n    '21' : {'code':'DOL','name':'Dolneni'},\n    '22' : {'code':'DRU','name':'Drugovo'},\n    '23' : {'code':'GAZ','name':'Gazi Baba'},\n    '24' : {'code':'GEV','name':'Gevgelija'},\n    '25' : {'code':'GJO','name':'Gjor\u010De Petrov'},\n    '26' : {'code':'GOS','name':'Gostivar'},\n    '27' : {'code':'GRA','name':'Gradsko'},\n    '28' : {'code':'ILI','name':'Ilinden'},\n    '29' : {'code':'JEG','name':'Jegunovce'},\n    '30' : {'code':'KAR','name':'Karbinci'},\n    '31' : {'code':'KAR','name':'Karpo\u0161'},\n    '32' : {'code':'KAV','name':'Kavadarci'},\n    '33' : {'code':'KI\u010C','name':'Ki\u010Devo'},\n    '34' : {'code':'KIS','name':'Kisela Voda'},\n    '35' : {'code':'KO\u010D','name':'Ko\u010Dani'},\n    '36' : {'code':'KON','name':'Kon\u010De'},\n    '37' : {'code':'KRA','name':'Kratovo'},\n    '38' : {'code':'KRI','name':'Kriva Palanka'},\n    '39' : {'code':'KRI','name':'Krivoga\u0161tani'},\n    '40' : {'code':'KRU','name':'Kru\u0161evo'},\n    '41' : {'code':'KUM','name':'Kumanovo'},\n    '42' : {'code':'LIP','name':'Lipkovo'},\n    '43' : {'code':'LOZ','name':'Lozovo'},\n    '44' : {'code':'MAK','name':'Makedonska Kamenica'},\n    '45' : {'code':'MAK','name':'Makedonski Brod'},\n    '46' : {'code':'MAV','name':'Mavrovo and Rostu\u0161a'},\n    '47' : {'code':'MOG','name':'Mogila'},\n    '48' : {'code':'NEG','name':'Negotino'},\n    '49' : {'code':'NOV','name':'Novaci'},\n    '50' : {'code':'NOV','name':'Novo Selo'},\n    '51' : {'code':'OHR','name':'Ohrid'},\n    '52' : {'code':'OSL','name':'Oslomej'},\n    '53' : {'code':'PEH','name':'Peh\u010Devo'},\n    '54' : {'code':'PET','name':'Petrovec'},\n    '55' : {'code':'PLA','name':'Plasnica'},\n    '56' : {'code':'PRI','name':'Prilep'},\n    '57' : {'code':'PRO','name':'Probi\u0161tip'},\n    '58' : {'code':'RAD','name':'Radovi\u0161'},\n    '59' : {'code':'RAN','name':'Rankovce'},\n    '60' : {'code':'RES','name':'Resen'},\n    '61' : {'code':'ROS','name':'Rosoman'},\n    '62' : {'code':'SAR','name':'Saraj'},\n    '63' : {'code':'SOP','name':'Sopi\u0161te'},\n    '64' : {'code':'STA','name':'Star Dojran'},\n    '65' : {'code':'STA','name':'Staro Nagori\u010Dane'},\n    '66' : {'code':'\u0160TI','name':'\u0160tip'},\n    '67' : {'code':'STR','name':'Struga'},\n    '68' : {'code':'STR','name':'Strumica'},\n    '69' : {'code':'STU','name':'Studeni\u010Dani'},\n    '70' : {'code':'\u0160UT','name':'\u0160uto Orizari'},\n    '71' : {'code':'SVE','name':'Sveti Nikole'},\n    '72' : {'code':'TEA','name':'Tearce'},\n    '73' : {'code':'TET','name':'Tetovo'},\n    '74' : {'code':'VAL','name':'Valandovo'},\n    '75' : {'code':'VAS','name':'Vasilevo'},\n    '76' : {'code':'VEL','name':'Veles'},\n    '77' : {'code':'VEV','name':'Vev\u010Dani'},\n    '78' : {'code':'VIN','name':'Vinica'},\n    '79' : {'code':'VRA','name':'Vrane\u0161tica'},\n    '80' : {'code':'VRA','name':'Vrap\u010Di\u0161te'},\n    '81' : {'code':'ZAJ','name':'Zajas'},\n    '82' : {'code':'ZEL','name':'Zelenikovo'},\n    '83' : {'code':'\u017DEL','name':'\u017Delino'},\n    '84' : {'code':'ZRN','name':'Zrnovci'}\n  },\n  'MG':{\n    '1' : {'code':'AN','name':'Antananarivo'},\n    '2' : {'code':'AS','name':'Antsiranana'},\n    '3' : {'code':'FN','name':'Fianarantsoa'},\n    '4' : {'code':'MJ','name':'Mahajanga'},\n    '5' : {'code':'TM','name':'Toamasina'},\n    '6' : {'code':'TL','name':'Toliara'}\n  },\n  'MW':{\n    '1' : {'code':'BLK','name':'Balaka'},\n    '2' : {'code':'BLT','name':'Blantyre'},\n    '3' : {'code':'CKW','name':'Chikwawa'},\n    '4' : {'code':'CRD','name':'Chiradzulu'},\n    '5' : {'code':'CTP','name':'Chitipa'},\n    '6' : {'code':'DDZ','name':'Dedza'},\n    '7' : {'code':'DWA','name':'Dowa'},\n    '8' : {'code':'KRG','name':'Karonga'},\n    '9' : {'code':'KSG','name':'Kasungu'},\n    '10' : {'code':'LKM','name':'Likoma'},\n    '11' : {'code':'LLG','name':'Lilongwe'},\n    '12' : {'code':'MCG','name':'Machinga'},\n    '13' : {'code':'MGC','name':'Mangochi'},\n    '14' : {'code':'MCH','name':'Mchinji'},\n    '15' : {'code':'MLJ','name':'Mulanje'},\n    '16' : {'code':'MWZ','name':'Mwanza'},\n    '17' : {'code':'MZM','name':'Mzimba'},\n    '18' : {'code':'NTU','name':'Ntcheu'},\n    '19' : {'code':'NKB','name':'Nkhata Bay'},\n    '20' : {'code':'NKH','name':'Nkhotakota'},\n    '21' : {'code':'NSJ','name':'Nsanje'},\n    '22' : {'code':'NTI','name':'Ntchisi'},\n    '23' : {'code':'PHL','name':'Phalombe'},\n    '24' : {'code':'RMP','name':'Rumphi'},\n    '25' : {'code':'SLM','name':'Salima'},\n    '26' : {'code':'THY','name':'Thyolo'},\n    '27' : {'code':'ZBA','name':'Zomba'}\n  },\n  'MY':{\n    '1' : {'code':'JHR','name':'Johor'},\n    '2' : {'code':'KDH','name':'Kedah'},\n    '3' : {'code':'KTN','name':'Kelantan'},\n    '4' : {'code':'LBN','name':'Labuan'},\n    '5' : {'code':'MLK','name':'Melaka'},\n    '6' : {'code':'NSN','name':'Negeri Sembilan'},\n    '7' : {'code':'PHG','name':'Pahang'},\n    '8' : {'code':'PRK','name':'Perak'},\n    '9' : {'code':'PLS','name':'Perlis'},\n    '10' : {'code':'PNG','name':'Pulau Pinang'},\n    '11' : {'code':'SBH','name':'Sabah'},\n    '12' : {'code':'SWK','name':'Sarawak'},\n    '13' : {'code':'SGR','name':'Selangor'},\n    '14' : {'code':'TRG','name':'Terengganu'},\n    '15' : {'code':'KUL','name':'Kuala Lumpur'}\n  },\n  'MV':{\n    '1' : {'code':'AAD','name':'Ari Atoll Dheknu'},\n    '2' : {'code':'AAU','name':'Ari Atoll Uthuru'},\n    '3' : {'code':'ADD','name':'Addu'},\n    '4' : {'code':'FAA','name':'Faadhippolhu'},\n    '5' : {'code':'FEA','name':'Felidhe Atoll'},\n    '6' : {'code':'FMU','name':'Fua Mulaku'},\n    '7' : {'code':'HAD','name':'Huvadhu Atoll Dhekunu'},\n    '8' : {'code':'HAU','name':'Huvadhu Atoll Uthuru'},\n    '9' : {'code':'HDH','name':'Hadhdhunmathi'},\n    '10' : {'code':'KLH','name':'Kolhumadulu'},\n    '11' : {'code':'MAA','name':'Male Atoll'},\n    '12' : {'code':'MAD','name':'Maalhosmadulu Dhekunu'},\n    '13' : {'code':'MAU','name':'Maalhosmadulu Uthuru'},\n    '14' : {'code':'MLD','name':'Miladhunmadulu Dhekunu'},\n    '15' : {'code':'MLU','name':'Miladhunmadulu Uthuru'},\n    '16' : {'code':'MUA','name':'Mulaku Atoll'},\n    '17' : {'code':'NAD','name':'Nilandhe Atoll Dhekunu'},\n    '18' : {'code':'NAU','name':'Nilandhe Atoll Uthuru'},\n    '19' : {'code':'THD','name':'Thiladhunmathi Dhekunu'},\n    '20' : {'code':'THU','name':'Thiladhunmathi Uthuru'}\n  },\n  'ML':{\n    '1' : {'code':'GA','name':'Gao'},\n    '2' : {'code':'KY','name':'Kayes'},\n    '3' : {'code':'KD','name':'Kidal'},\n    '4' : {'code':'KL','name':'Koulikoro'},\n    '5' : {'code':'MP','name':'Mopti'},\n    '6' : {'code':'SG','name':'Segou'},\n    '7' : {'code':'SK','name':'Sikasso'},\n    '8' : {'code':'TB','name':'Tombouctou'},\n    '9' : {'code':'CD','name':'Bamako Capital District'}\n  },\n  'MT':{\n    '1' : {'code':'ATT','name':'Attard'},\n    '2' : {'code':'BAL','name':'Balzan'},\n    '3' : {'code':'BGU','name':'Birgu'},\n    '4' : {'code':'BKK','name':'Birkirkara'},\n    '5' : {'code':'BRZ','name':'Birzebbuga'},\n    '6' : {'code':'BOR','name':'Bormla'},\n    '7' : {'code':'DIN','name':'Dingli'},\n    '8' : {'code':'FGU','name':'Fgura'},\n    '9' : {'code':'FLO','name':'Floriana'},\n    '10' : {'code':'GDJ','name':'Gudja'},\n    '11' : {'code':'GZR','name':'Gzira'},\n    '12' : {'code':'GRG','name':'Gargur'},\n    '13' : {'code':'GXQ','name':'Gaxaq'},\n    '14' : {'code':'HMR','name':'Hamrun'},\n    '15' : {'code':'IKL','name':'Iklin'},\n    '16' : {'code':'ISL','name':'Isla'},\n    '17' : {'code':'KLK','name':'Kalkara'},\n    '18' : {'code':'KRK','name':'Kirkop'},\n    '19' : {'code':'LIJ','name':'Lija'},\n    '20' : {'code':'LUQ','name':'Luqa'},\n    '21' : {'code':'MRS','name':'Marsa'},\n    '22' : {'code':'MKL','name':'Marsaskala'},\n    '23' : {'code':'MXL','name':'Marsaxlokk'},\n    '24' : {'code':'MDN','name':'Mdina'},\n    '25' : {'code':'MEL','name':'Melliea'},\n    '26' : {'code':'MGR','name':'Mgarr'},\n    '27' : {'code':'MST','name':'Mosta'},\n    '28' : {'code':'MQA','name':'Mqabba'},\n    '29' : {'code':'MSI','name':'Msida'},\n    '30' : {'code':'MTF','name':'Mtarfa'},\n    '31' : {'code':'NAX','name':'Naxxar'},\n    '32' : {'code':'PAO','name':'Paola'},\n    '33' : {'code':'PEM','name':'Pembroke'},\n    '34' : {'code':'PIE','name':'Pieta'},\n    '35' : {'code':'QOR','name':'Qormi'},\n    '36' : {'code':'QRE','name':'Qrendi'},\n    '37' : {'code':'RAB','name':'Rabat'},\n    '38' : {'code':'SAF','name':'Safi'},\n    '39' : {'code':'SGI','name':'San Giljan'},\n    '40' : {'code':'SLU','name':'Santa Lucija'},\n    '41' : {'code':'SPB','name':'San Pawl il-Bahar'},\n    '42' : {'code':'SGW','name':'San Gwann'},\n    '43' : {'code':'SVE','name':'Santa Venera'},\n    '44' : {'code':'SIG','name':'Siggiewi'},\n    '45' : {'code':'SLM','name':'Sliema'},\n    '46' : {'code':'SWQ','name':'Swieqi'},\n    '47' : {'code':'TXB','name':'Ta Xbiex'},\n    '48' : {'code':'TRX','name':'Tarxien'},\n    '49' : {'code':'VLT','name':'Valletta'},\n    '50' : {'code':'XGJ','name':'Xgajra'},\n    '51' : {'code':'ZBR','name':'Zabbar'},\n    '52' : {'code':'ZBG','name':'Zebbug'},\n    '53' : {'code':'ZJT','name':'Zejtun'},\n    '54' : {'code':'ZRQ','name':'Zurrieq'},\n    '55' : {'code':'FNT','name':'Fontana'},\n    '56' : {'code':'GHJ','name':'Ghajnsielem'},\n    '57' : {'code':'GHR','name':'Gharb'},\n    '58' : {'code':'GHS','name':'Ghasri'},\n    '59' : {'code':'KRC','name':'Kercem'},\n    '60' : {'code':'MUN','name':'Munxar'},\n    '61' : {'code':'NAD','name':'Nadur'},\n    '62' : {'code':'QAL','name':'Qala'},\n    '63' : {'code':'VIC','name':'Victoria'},\n    '64' : {'code':'SLA','name':'San Lawrenz'},\n    '65' : {'code':'SNT','name':'Sannat'},\n    '66' : {'code':'ZAG','name':'Xagra'},\n    '67' : {'code':'XEW','name':'Xewkija'},\n    '68' : {'code':'ZEB','name':'Zebbug'}\n  },\n  'MH':{\n    '1' : {'code':'ALG','name':'Ailinginae'},\n    '2' : {'code':'ALL','name':'Ailinglaplap'},\n    '3' : {'code':'ALK','name':'Ailuk'},\n    '4' : {'code':'ARN','name':'Arno'},\n    '5' : {'code':'AUR','name':'Aur'},\n    '6' : {'code':'BKR','name':'Bikar'},\n    '7' : {'code':'BKN','name':'Bikini'},\n    '8' : {'code':'BKK','name':'Bokak'},\n    '9' : {'code':'EBN','name':'Ebon'},\n    '10' : {'code':'ENT','name':'Enewetak'},\n    '11' : {'code':'EKB','name':'Erikub'},\n    '12' : {'code':'JBT','name':'Jabat'},\n    '13' : {'code':'JLT','name':'Jaluit'},\n    '14' : {'code':'JEM','name':'Jemo'},\n    '15' : {'code':'KIL','name':'Kili'},\n    '16' : {'code':'KWJ','name':'Kwajalein'},\n    '17' : {'code':'LAE','name':'Lae'},\n    '18' : {'code':'LIB','name':'Lib'},\n    '19' : {'code':'LKP','name':'Likiep'},\n    '20' : {'code':'MJR','name':'Majuro'},\n    '21' : {'code':'MLP','name':'Maloelap'},\n    '22' : {'code':'MJT','name':'Mejit'},\n    '23' : {'code':'MIL','name':'Mili'},\n    '24' : {'code':'NMK','name':'Namorik'},\n    '25' : {'code':'NAM','name':'Namu'},\n    '26' : {'code':'RGL','name':'Rongelap'},\n    '27' : {'code':'RGK','name':'Rongrik'},\n    '28' : {'code':'TOK','name':'Toke'},\n    '29' : {'code':'UJA','name':'Ujae'},\n    '30' : {'code':'UJL','name':'Ujelang'},\n    '31' : {'code':'UTK','name':'Utirik'},\n    '32' : {'code':'WTH','name':'Wotho'},\n    '33' : {'code':'WTJ','name':'Wotje'}\n  },\n  'MQ':{\n    '1' : {'code':'LAJ','name':'L\\'Ajoupa-Bouillon'},\n    '2' : {'code':'LES','name':'Les Anses-d\\'Arlet'},\n    '3' : {'code':'BAS','name':'Basse-Pointe'},\n    '4' : {'code':'BEL','name':'Bellefontaine'},\n    '5' : {'code':'LE','name':'Le Carbet'},\n    '6' : {'code':'CAS','name':'Case-Pilote'},\n    '7' : {'code':'LE','name':'Le Diamant'},\n    '8' : {'code':'DUC','name':'Ducos'},\n    '9' : {'code':'FON','name':'Fonds-Saint-Denis'},\n    '10' : {'code':'FOR','name':'Fort-De-France'},\n    '11' : {'code':'LE','name':'Le Fran\u00E7ois'},\n    '12' : {'code':'GRA','name':'Grand\\'Rivi\u00E8re'},\n    '13' : {'code':'GRO','name':'Gros-Morne'},\n    '14' : {'code':'LE','name':'Le Lamentin'},\n    '15' : {'code':'LE','name':'Le Lorrain'},\n    '16' : {'code':'MAC','name':'Macouba'},\n    '17' : {'code':'LE','name':'Le Marigot'},\n    '18' : {'code':'LE','name':'Le Marin'},\n    '19' : {'code':'LE','name':'Le Morne-Rouge'},\n    '20' : {'code':'LE','name':'Le Morne-Vert'},\n    '21' : {'code':'LE','name':'Le Pr\u00EAcheur'},\n    '22' : {'code':'RIV','name':'Rivi\u00E8re-Pilote'},\n    '23' : {'code':'RIV','name':'Rivi\u00E8re-Sal\u00E9e'},\n    '24' : {'code':'LE','name':'Le Robert'},\n    '25' : {'code':'SAI','name':'Sainte-Anne'},\n    '26' : {'code':'SAI','name':'Sainte-Luce'},\n    '27' : {'code':'SAI','name':'Sainte-Marie'},\n    '28' : {'code':'SAI','name':'Saint-Esprit'},\n    '29' : {'code':'SAI','name':'Saint-Joseph'},\n    '30' : {'code':'SAI','name':'Saint-Pierre'},\n    '31' : {'code':'SCH','name':'Sch\u0153lcher'},\n    '32' : {'code':'LA','name':'La Trinit\u00E9'},\n    '33' : {'code':'LES','name':'Les Trois-\u00CElets'},\n    '34' : {'code':'LE','name':'Le Vauclin'}\n  },\n  'MR':{\n    '1' : {'code':'AD','name':'Adrar'},\n    '2' : {'code':'AS','name':'Assaba'},\n    '3' : {'code':'BR','name':'Brakna'},\n    '4' : {'code':'DN','name':'Dakhlet Nouadhibou'},\n    '5' : {'code':'GO','name':'Gorgol'},\n    '6' : {'code':'GM','name':'Guidimaka'},\n    '7' : {'code':'HC','name':'Hodh Ech Chargui'},\n    '8' : {'code':'HG','name':'Hodh El Gharbi'},\n    '9' : {'code':'IN','name':'Inchiri'},\n    '10' : {'code':'TA','name':'Tagant'},\n    '11' : {'code':'TZ','name':'Tiris Zemmour'},\n    '12' : {'code':'TR','name':'Trarza'},\n    '13' : {'code':'NO','name':'Nouakchott'}\n  },\n  'MU':{\n    '1' : {'code':'AG','name':'Agalega Islands'},\n    '2' : {'code':'BL','name':'Black River'},\n    '3' : {'code':'BR','name':'Beau Bassin-Rose Hill'},\n    '4' : {'code':'CC','name':'Cargados Carajos Shoals (Saint B)'},\n    '5' : {'code':'CU','name':'Curepipe'},\n    '6' : {'code':'FL','name':'Flacq'},\n    '7' : {'code':'GP','name':'Grand Port'},\n    '8' : {'code':'MO','name':'Moka'},\n    '9' : {'code':'PA','name':'Pamplemousses'},\n    '10' : {'code':'PL','name':'Port Louis'},\n    '11' : {'code':'PU','name':'Port Louis'},\n    '12' : {'code':'PW','name':'Plaines Wilhems'},\n    '13' : {'code':'QB','name':'Quatre Bornes'},\n    '14' : {'code':'RO','name':'Rodrigues'},\n    '15' : {'code':'RR','name':'Riviere du Rempart'},\n    '16' : {'code':'SA','name':'Savanne'},\n    '17' : {'code':'VP','name':'Vacoas-Phoenix'}\n  },\n  'YT':{\n    '1' : {'code':'DZA','name':'Dzaoudzi'},\n    '2' : {'code':'PAM','name':'Pamandzi'},\n    '3' : {'code':'MAM','name':'Mamoudzou'},\n    '4' : {'code':'DEM','name':'Dembeni'},\n    '5' : {'code':'BAN','name':'Bandrele'},\n    '6' : {'code':'KAN','name':'Kani-K\u00E9li'},\n    '7' : {'code':'BOU','name':'Bou\u00E9ni'},\n    '8' : {'code':'CHI','name':'Chirongui'},\n    '9' : {'code':'SAD','name':'Sada'},\n    '10' : {'code':'OUA','name':'Ouangani'},\n    '11' : {'code':'CHI','name':'Chiconi'},\n    '12' : {'code':'TSI','name':'Tsingoni'},\n    '13' : {'code':'MTS','name':'M\\'Tsangamouji'},\n    '14' : {'code':'ACO','name':'Acoua'},\n    '15' : {'code':'MTS','name':'Mtsamboro'},\n    '16' : {'code':'BAN','name':'Bandraboua'},\n    '17' : {'code':'KOU','name':'Koungou'}\n  },\n  'MX':{\n    '1' : {'code':'AGU','name':'Aguascalientes'},\n    '2' : {'code':'BCN','name':'Baja California Norte'},\n    '3' : {'code':'BCS','name':'Baja California Sur'},\n    '4' : {'code':'CAM','name':'Campeche'},\n    '5' : {'code':'CHP','name':'Chiapas'},\n    '6' : {'code':'CHH','name':'Chihuahua'},\n    '7' : {'code':'COA','name':'Coahuila de Zaragoza'},\n    '8' : {'code':'COL','name':'Colima'},\n    '9' : {'code':'DIF','name':'Distrito Federal'},\n    '10' : {'code':'DUR','name':'Durango'},\n    '11' : {'code':'GUA','name':'Guanajuato'},\n    '12' : {'code':'GRO','name':'Guerrero'},\n    '13' : {'code':'HID','name':'Hidalgo'},\n    '14' : {'code':'JAL','name':'Jalisco'},\n    '15' : {'code':'MEX','name':'Mexico'},\n    '16' : {'code':'MIC','name':'Michoacan de Ocampo'},\n    '17' : {'code':'MOR','name':'Morelos'},\n    '18' : {'code':'NAY','name':'Nayarit'},\n    '19' : {'code':'NLE','name':'Nuevo Leon'},\n    '20' : {'code':'OAX','name':'Oaxaca'},\n    '21' : {'code':'PUE','name':'Puebla'},\n    '22' : {'code':'QUE','name':'Queretaro de Arteaga'},\n    '23' : {'code':'ROO','name':'Quintana Roo'},\n    '24' : {'code':'SLP','name':'San Luis Potosi'},\n    '25' : {'code':'SIN','name':'Sinaloa'},\n    '26' : {'code':'SON','name':'Sonora'},\n    '27' : {'code':'TAB','name':'Tabasco'},\n    '28' : {'code':'TAM','name':'Tamaulipas'},\n    '29' : {'code':'TLA','name':'Tlaxcala'},\n    '30' : {'code':'VER','name':'Veracruz-Llave'},\n    '31' : {'code':'YUC','name':'Yucatan'},\n    '32' : {'code':'ZAC','name':'Zacatecas'}\n  },\n  'FM':{\n    '1' : {'code':'C','name':'Chuuk'},\n    '2' : {'code':'K','name':'Kosrae'},\n    '3' : {'code':'P','name':'Pohnpei'},\n    '4' : {'code':'Y','name':'Yap'}\n  },\n  'MD':{\n    '1' : {'code':'GA','name':'Gagauzia'},\n    '2' : {'code':'CU','name':'Chisinau'},\n    '3' : {'code':'BA','name':'Balti'},\n    '4' : {'code':'CA','name':'Cahul'},\n    '5' : {'code':'ED','name':'Edinet'},\n    '6' : {'code':'LA','name':'Lapusna'},\n    '7' : {'code':'OR','name':'Orhei'},\n    '8' : {'code':'SO','name':'Soroca'},\n    '9' : {'code':'TI','name':'Tighina'},\n    '10' : {'code':'UN','name':'Ungheni'},\n    '11' : {'code':'SN','name':'St\u00E2nga Nistrului'}\n  },\n  'MC':{\n    '1' : {'code':'FV','name':'Fontvieille'},\n    '2' : {'code':'LC','name':'La Condamine'},\n    '3' : {'code':'MV','name':'Monaco-Ville'},\n    '4' : {'code':'MC','name':'Monte-Carlo'}\n  },\n  'MN':{\n    '1' : {'code':'1','name':'Ulanbaatar'},\n    '2' : {'code':'035','name':'Orhon'},\n    '3' : {'code':'037','name':'Darhan uul'},\n    '4' : {'code':'039','name':'Hentiy'},\n    '5' : {'code':'041','name':'Hovsgol'},\n    '6' : {'code':'043','name':'Hovd'},\n    '7' : {'code':'046','name':'Uvs'},\n    '8' : {'code':'047','name':'Tov'},\n    '9' : {'code':'049','name':'Selenge'},\n    '10' : {'code':'051','name':'Suhbaatar'},\n    '11' : {'code':'053','name':'Omnogovi'},\n    '12' : {'code':'055','name':'Ovorhangay'},\n    '13' : {'code':'057','name':'Dzavhan'},\n    '14' : {'code':'059','name':'DundgovL'},\n    '15' : {'code':'061','name':'Dornod'},\n    '16' : {'code':'063','name':'Dornogov'},\n    '17' : {'code':'064','name':'Govi-Sumber'},\n    '18' : {'code':'065','name':'Govi-Altay'},\n    '19' : {'code':'067','name':'Bulgan'},\n    '20' : {'code':'069','name':'Bayanhongor'},\n    '21' : {'code':'071','name':'Bayan-Olgiy'},\n    '22' : {'code':'073','name':'Arhangay'}\n  },\n  'MS':{\n    '1' : {'code':'A','name':'Saint Anthony'},\n    '2' : {'code':'G','name':'Saint Georges'},\n    '3' : {'code':'P','name':'Saint Peter'}\n  },\n  'MA':{\n    '1' : {'code':'AGD','name':'Agadir'},\n    '2' : {'code':'HOC','name':'Al Hoceima'},\n    '3' : {'code':'AZI','name':'Azilal'},\n    '4' : {'code':'BME','name':'Beni Mellal'},\n    '5' : {'code':'BSL','name':'Ben Slimane'},\n    '6' : {'code':'BLM','name':'Boulemane'},\n    '7' : {'code':'CBL','name':'Casablanca'},\n    '8' : {'code':'CHA','name':'Chaouen'},\n    '9' : {'code':'EJA','name':'El Jadida'},\n    '10' : {'code':'EKS','name':'El Kelaa des Sraghna'},\n    '11' : {'code':'ERA','name':'Er Rachidia'},\n    '12' : {'code':'ESS','name':'Essaouira'},\n    '13' : {'code':'FES','name':'Fes'},\n    '14' : {'code':'FIG','name':'Figuig'},\n    '15' : {'code':'GLM','name':'Guelmim'},\n    '16' : {'code':'IFR','name':'Ifrane'},\n    '17' : {'code':'KEN','name':'Kenitra'},\n    '18' : {'code':'KHM','name':'Khemisset'},\n    '19' : {'code':'KHN','name':'Khenifra'},\n    '20' : {'code':'KHO','name':'Khouribga'},\n    '21' : {'code':'LYN','name':'Laayoune'},\n    '22' : {'code':'LAR','name':'Larache'},\n    '23' : {'code':'MRK','name':'Marrakech'},\n    '24' : {'code':'MKN','name':'Meknes'},\n    '25' : {'code':'NAD','name':'Nador'},\n    '26' : {'code':'ORZ','name':'Ouarzazate'},\n    '27' : {'code':'OUJ','name':'Oujda'},\n    '28' : {'code':'RSA','name':'Rabat-Sale'},\n    '29' : {'code':'SAF','name':'Safi'},\n    '30' : {'code':'SET','name':'Settat'},\n    '31' : {'code':'SKA','name':'Sidi Kacem'},\n    '32' : {'code':'TGR','name':'Tangier'},\n    '33' : {'code':'TAN','name':'Tan-Tan'},\n    '34' : {'code':'TAO','name':'Taounate'},\n    '35' : {'code':'TRD','name':'Taroudannt'},\n    '36' : {'code':'TAT','name':'Tata'},\n    '37' : {'code':'TAZ','name':'Taza'},\n    '38' : {'code':'TET','name':'Tetouan'},\n    '39' : {'code':'TIZ','name':'Tiznit'},\n    '40' : {'code':'ADK','name':'Ad Dakhla'},\n    '41' : {'code':'BJD','name':'Boujdour'},\n    '42' : {'code':'ESM','name':'Es Smara'}\n  },\n  'MZ':{\n    '1' : {'code':'CD','name':'Cabo Delgado'},\n    '2' : {'code':'GZ','name':'Gaza'},\n    '3' : {'code':'IN','name':'Inhambane'},\n    '4' : {'code':'MN','name':'Manica'},\n    '5' : {'code':'MC','name':'Maputo (city)'},\n    '6' : {'code':'MP','name':'Maputo'},\n    '7' : {'code':'NA','name':'Nampula'},\n    '8' : {'code':'NI','name':'Niassa'},\n    '9' : {'code':'SO','name':'Sofala'},\n    '10' : {'code':'TE','name':'Tete'},\n    '11' : {'code':'ZA','name':'Zambezia'}\n  },\n  'MM':{\n    '1' : {'code':'AY','name':'Ayeyarwady'},\n    '2' : {'code':'BG','name':'Bago'},\n    '3' : {'code':'MG','name':'Magway'},\n    '4' : {'code':'MD','name':'Mandalay'},\n    '5' : {'code':'SG','name':'Sagaing'},\n    '6' : {'code':'TN','name':'Tanintharyi'},\n    '7' : {'code':'YG','name':'Yangon'},\n    '8' : {'code':'CH','name':'Chin State'},\n    '9' : {'code':'KC','name':'Kachin State'},\n    '10' : {'code':'KH','name':'Kayah State'},\n    '11' : {'code':'KN','name':'Kayin State'},\n    '12' : {'code':'MN','name':'Mon State'},\n    '13' : {'code':'RK','name':'Rakhine State'},\n    '14' : {'code':'SH','name':'Shan State'}\n  },\n  'NA':{\n    '1' : {'code':'CA','name':'Caprivi'},\n    '2' : {'code':'ER','name':'Erongo'},\n    '3' : {'code':'HA','name':'Hardap'},\n    '4' : {'code':'KR','name':'Karas'},\n    '5' : {'code':'KV','name':'Kavango'},\n    '6' : {'code':'KH','name':'Khomas'},\n    '7' : {'code':'KU','name':'Kunene'},\n    '8' : {'code':'OW','name':'Ohangwena'},\n    '9' : {'code':'OK','name':'Omaheke'},\n    '10' : {'code':'OT','name':'Omusati'},\n    '11' : {'code':'ON','name':'Oshana'},\n    '12' : {'code':'OO','name':'Oshikoto'},\n    '13' : {'code':'OJ','name':'Otjozondjupa'}\n  },\n  'NR':{\n    '1' : {'code':'AO','name':'Aiwo'},\n    '2' : {'code':'AA','name':'Anabar'},\n    '3' : {'code':'AT','name':'Anetan'},\n    '4' : {'code':'AI','name':'Anibare'},\n    '5' : {'code':'BA','name':'Baiti'},\n    '6' : {'code':'BO','name':'Boe'},\n    '7' : {'code':'BU','name':'Buada'},\n    '8' : {'code':'DE','name':'Denigomodu'},\n    '9' : {'code':'EW','name':'Ewa'},\n    '10' : {'code':'IJ','name':'Ijuw'},\n    '11' : {'code':'ME','name':'Meneng'},\n    '12' : {'code':'NI','name':'Nibok'},\n    '13' : {'code':'UA','name':'Uaboe'},\n    '14' : {'code':'YA','name':'Yaren'}\n  },\n  'NP':{\n    '1' : {'code':'BA','name':'Bagmati'},\n    '2' : {'code':'BH','name':'Bheri'},\n    '3' : {'code':'DH','name':'Dhawalagiri'},\n    '4' : {'code':'GA','name':'Gandaki'},\n    '5' : {'code':'JA','name':'Janakpur'},\n    '6' : {'code':'KA','name':'Karnali'},\n    '7' : {'code':'KO','name':'Kosi'},\n    '8' : {'code':'LU','name':'Lumbini'},\n    '9' : {'code':'MA','name':'Mahakali'},\n    '10' : {'code':'ME','name':'Mechi'},\n    '11' : {'code':'NA','name':'Narayani'},\n    '12' : {'code':'RA','name':'Rapti'},\n    '13' : {'code':'SA','name':'Sagarmatha'},\n    '14' : {'code':'SE','name':'Seti'}\n  },\n  'NL':{\n    '1' : {'code':'DR','name':'Drenthe'},\n    '2' : {'code':'FL','name':'Flevoland'},\n    '3' : {'code':'FR','name':'Friesland'},\n    '4' : {'code':'GE','name':'Gelderland'},\n    '5' : {'code':'GR','name':'Groningen'},\n    '6' : {'code':'LI','name':'Limburg'},\n    '7' : {'code':'NB','name':'Noord Brabant'},\n    '8' : {'code':'NH','name':'Noord Holland'},\n    '9' : {'code':'OV','name':'Overijssel'},\n    '10' : {'code':'UT','name':'Utrecht'},\n    '11' : {'code':'ZE','name':'Zeeland'},\n    '12' : {'code':'ZH','name':'Zuid Holland'}\n  },\n  'AN':{\n    '1' : {'code':'BON','name':'Bonaire'},\n    '2' : {'code':'CUR','name':'Cura\u00E7ao'},\n    '3' : {'code':'SAB','name':'Saba'},\n    '4' : {'code':'SEU','name':'Sint Eustatius'},\n    '5' : {'code':'SMA','name':'Sint Maarten'}\n  },\n  'NC':{\n    '1' : {'code':'L','name':'Iles Loyaute'},\n    '2' : {'code':'N','name':'Nord'},\n    '3' : {'code':'S','name':'Sud'}\n  },\n  'NZ':{\n    '1' : {'code':'AUK','name':'Auckland'},\n    '2' : {'code':'BOP','name':'Bay of Plenty'},\n    '3' : {'code':'CAN','name':'Canterbury'},\n    '4' : {'code':'COR','name':'Coromandel'},\n    '5' : {'code':'GIS','name':'Gisborne'},\n    '6' : {'code':'FIO','name':'Fiordland'},\n    '7' : {'code':'HKB','name':'Hawke\\'s Bay'},\n    '8' : {'code':'MBH','name':'Marlborough'},\n    '9' : {'code':'MWT','name':'Manawatu-Wanganui'},\n    '10' : {'code':'MCM','name':'Mt Cook-Mackenzie'},\n    '11' : {'code':'NSN','name':'Nelson'},\n    '12' : {'code':'NTL','name':'Northland'},\n    '13' : {'code':'OTA','name':'Otago'},\n    '14' : {'code':'STL','name':'Southland'},\n    '15' : {'code':'TKI','name':'Taranaki'},\n    '16' : {'code':'WGN','name':'Wellington'},\n    '17' : {'code':'WKO','name':'Waikato'},\n    '18' : {'code':'WAI','name':'Wairprarapa'},\n    '19' : {'code':'WTC','name':'West Coast'}\n  },\n  'NI':{\n    '1' : {'code':'AN','name':'Atlantico Norte'},\n    '2' : {'code':'AS','name':'Atlantico Sur'},\n    '3' : {'code':'BO','name':'Boaco'},\n    '4' : {'code':'CA','name':'Carazo'},\n    '5' : {'code':'CI','name':'Chinandega'},\n    '6' : {'code':'CO','name':'Chontales'},\n    '7' : {'code':'ES','name':'Esteli'},\n    '8' : {'code':'GR','name':'Granada'},\n    '9' : {'code':'JI','name':'Jinotega'},\n    '10' : {'code':'LE','name':'Leon'},\n    '11' : {'code':'MD','name':'Madriz'},\n    '12' : {'code':'MN','name':'Managua'},\n    '13' : {'code':'MS','name':'Masaya'},\n    '14' : {'code':'MT','name':'Matagalpa'},\n    '15' : {'code':'NS','name':'Nuevo Segovia'},\n    '16' : {'code':'RS','name':'Rio San Juan'},\n    '17' : {'code':'RI','name':'Rivas'}\n  },\n  'NE':{\n    '1' : {'code':'AG','name':'Agadez'},\n    '2' : {'code':'DF','name':'Diffa'},\n    '3' : {'code':'DS','name':'Dosso'},\n    '4' : {'code':'MA','name':'Maradi'},\n    '5' : {'code':'NM','name':'Niamey'},\n    '6' : {'code':'TH','name':'Tahoua'},\n    '7' : {'code':'TL','name':'Tillaberi'},\n    '8' : {'code':'ZD','name':'Zinder'}\n  },\n  'NG':{\n    '1' : {'code':'AB','name':'Abia'},\n    '2' : {'code':'CT','name':'Abuja Federal Capital Territory'},\n    '3' : {'code':'AD','name':'Adamawa'},\n    '4' : {'code':'AK','name':'Akwa Ibom'},\n    '5' : {'code':'AN','name':'Anambra'},\n    '6' : {'code':'BC','name':'Bauchi'},\n    '7' : {'code':'BY','name':'Bayelsa'},\n    '8' : {'code':'BN','name':'Benue'},\n    '9' : {'code':'BO','name':'Borno'},\n    '10' : {'code':'CR','name':'Cross River'},\n    '11' : {'code':'DE','name':'Delta'},\n    '12' : {'code':'EB','name':'Ebonyi'},\n    '13' : {'code':'ED','name':'Edo'},\n    '14' : {'code':'EK','name':'Ekiti'},\n    '15' : {'code':'EN','name':'Enugu'},\n    '16' : {'code':'GO','name':'Gombe'},\n    '17' : {'code':'IM','name':'Imo'},\n    '18' : {'code':'JI','name':'Jigawa'},\n    '19' : {'code':'KD','name':'Kaduna'},\n    '20' : {'code':'KN','name':'Kano'},\n    '21' : {'code':'KT','name':'Katsina'},\n    '22' : {'code':'KE','name':'Kebbi'},\n    '23' : {'code':'KO','name':'Kogi'},\n    '24' : {'code':'KW','name':'Kwara'},\n    '25' : {'code':'LA','name':'Lagos'},\n    '26' : {'code':'NA','name':'Nassarawa'},\n    '27' : {'code':'NI','name':'Niger'},\n    '28' : {'code':'OG','name':'Ogun'},\n    '29' : {'code':'ONG','name':'Ondo'},\n    '30' : {'code':'OS','name':'Osun'},\n    '31' : {'code':'OY','name':'Oyo'},\n    '32' : {'code':'PL','name':'Plateau'},\n    '33' : {'code':'RI','name':'Rivers'},\n    '34' : {'code':'SO','name':'Sokoto'},\n    '35' : {'code':'TA','name':'Taraba'},\n    '36' : {'code':'YO','name':'Yobe'},\n    '37' : {'code':'ZA','name':'Zamfara'}\n  },\n  'NU':{\n    '1' : {'code':'MAK','name':'Makefu'},\n    '2' : {'code':'TUA','name':'Tuapa'},\n    '3' : {'code':'NAM','name':'Namukulu'},\n    '4' : {'code':'HIK','name':'Hikutavake'},\n    '5' : {'code':'TOI','name':'Toi'},\n    '6' : {'code':'MUT','name':'Mutalau'},\n    '7' : {'code':'LAK','name':'Lakepa'},\n    '8' : {'code':'LIK','name':'Liku'},\n    '9' : {'code':'HAK','name':'Hakupu'},\n    '10' : {'code':'VAI','name':'Vaiea'},\n    '11' : {'code':'AVA','name':'Avatele'},\n    '12' : {'code':'TAM','name':'Tamakautoga'},\n    '13' : {'code':'ALO','name':'Alofi South'},\n    '14' : {'code':'ALO','name':'Alofi North'}\n  },\n  'NF':{\n    '1' : {'code':'NOR','name':'Norfolk Island'}\n  },\n  'MP':{\n    '1' : {'code':'N','name':'Northern Islands'},\n    '2' : {'code':'R','name':'Rota'},\n    '3' : {'code':'S','name':'Saipan'},\n    '4' : {'code':'T','name':'Tinian'}\n  },\n  'NO':{\n    '1' : {'code':'AK','name':'Akershus'},\n    '2' : {'code':'AA','name':'Aust-Agder'},\n    '3' : {'code':'BU','name':'Buskerud'},\n    '4' : {'code':'FM','name':'Finnmark'},\n    '5' : {'code':'HM','name':'Hedmark'},\n    '6' : {'code':'HL','name':'Hordaland'},\n    '7' : {'code':'MR','name':'M\u00F8re og Romsdal'},\n    '8' : {'code':'NL','name':'Nordland'},\n    '9' : {'code':'NT','name':'Nord-Tr\u00F8ndelag'},\n    '10' : {'code':'OP','name':'Oppland'},\n    '11' : {'code':'OL','name':'Oslo'},\n    '12' : {'code':'RL','name':'Rogaland'},\n    '13' : {'code':'SJ','name':'Sogn og Fjordane'},\n    '14' : {'code':'ST','name':'S\u00F8r-Tr\u00F8ndelag'},\n    '15' : {'code':'SV','name':'Svalbard'},\n    '16' : {'code':'TM','name':'Telemark'},\n    '17' : {'code':'TR','name':'Troms'},\n    '18' : {'code':'VA','name':'Vest-Agder'},\n    '19' : {'code':'VF','name':'Vestfold'},\n    '20' : {'code':'OF','name':'\u00D8stfold'}\n  },\n  'OM':{\n    '1' : {'code':'DA','name':'Ad Dakhiliyah'},\n    '2' : {'code':'BA','name':'Al Batinah'},\n    '3' : {'code':'WU','name':'Al Wusta'},\n    '4' : {'code':'SH','name':'Ash Sharqiyah'},\n    '5' : {'code':'ZA','name':'Az Zahirah'},\n    '6' : {'code':'MA','name':'Masqat'},\n    '7' : {'code':'MU','name':'Musandam'},\n    '8' : {'code':'ZU','name':'Zufar'}\n  },\n  'PK':{\n    '1' : {'code':'B','name':'Balochistan'},\n    '2' : {'code':'T','name':'Federally Administered Tribal Ar'},\n    '3' : {'code':'I','name':'Islamabad Capital Territory'},\n    '4' : {'code':'N','name':'North-West Frontier'},\n    '5' : {'code':'P','name':'Punjab'},\n    '6' : {'code':'S','name':'Sindh'}\n  },\n  'PW':{\n    '1' : {'code':'AM','name':'Aimeliik'},\n    '2' : {'code':'AR','name':'Airai'},\n    '3' : {'code':'AN','name':'Angaur'},\n    '4' : {'code':'HA','name':'Hatohobei'},\n    '5' : {'code':'KA','name':'Kayangel'},\n    '6' : {'code':'KO','name':'Koror'},\n    '7' : {'code':'ME','name':'Melekeok'},\n    '8' : {'code':'NA','name':'Ngaraard'},\n    '9' : {'code':'NG','name':'Ngarchelong'},\n    '10' : {'code':'ND','name':'Ngardmau'},\n    '11' : {'code':'NT','name':'Ngatpang'},\n    '12' : {'code':'NC','name':'Ngchesar'},\n    '13' : {'code':'NR','name':'Ngeremlengui'},\n    '14' : {'code':'NW','name':'Ngiwal'},\n    '15' : {'code':'PE','name':'Peleliu'},\n    '16' : {'code':'SO','name':'Sonsorol'}\n  },\n  'PA':{\n    '1' : {'code':'BT','name':'Bocas del Toro'},\n    '2' : {'code':'CH','name':'Chiriqui'},\n    '3' : {'code':'CC','name':'Cocle'},\n    '4' : {'code':'CL','name':'Colon'},\n    '5' : {'code':'DA','name':'Darien'},\n    '6' : {'code':'HE','name':'Herrera'},\n    '7' : {'code':'LS','name':'Los Santos'},\n    '8' : {'code':'PA','name':'Panama'},\n    '9' : {'code':'SB','name':'San Blas'},\n    '10' : {'code':'VG','name':'Veraguas'}\n  },\n  'PG':{\n    '1' : {'code':'BV','name':'Bougainville'},\n    '2' : {'code':'CE','name':'Central'},\n    '3' : {'code':'CH','name':'Chimbu'},\n    '4' : {'code':'EH','name':'Eastern Highlands'},\n    '5' : {'code':'EB','name':'East New Britain'},\n    '6' : {'code':'ES','name':'East Sepik'},\n    '7' : {'code':'EN','name':'Enga'},\n    '8' : {'code':'GU','name':'Gulf'},\n    '9' : {'code':'MD','name':'Madang'},\n    '10' : {'code':'MN','name':'Manus'},\n    '11' : {'code':'MB','name':'Milne Bay'},\n    '12' : {'code':'MR','name':'Morobe'},\n    '13' : {'code':'NC','name':'National Capital'},\n    '14' : {'code':'NI','name':'New Ireland'},\n    '15' : {'code':'NO','name':'Northern'},\n    '16' : {'code':'SA','name':'Sandaun'},\n    '17' : {'code':'SH','name':'Southern Highlands'},\n    '18' : {'code':'WE','name':'Western'},\n    '19' : {'code':'WH','name':'Western Highlands'},\n    '20' : {'code':'WB','name':'West New Britain'}\n  },\n  'PY':{\n    '1' : {'code':'AG','name':'Alto Paraguay'},\n    '2' : {'code':'AN','name':'Alto Parana'},\n    '3' : {'code':'AM','name':'Amambay'},\n    '4' : {'code':'AS','name':'Asuncion'},\n    '5' : {'code':'BO','name':'Boqueron'},\n    '6' : {'code':'CG','name':'Caaguazu'},\n    '7' : {'code':'CZ','name':'Caazapa'},\n    '8' : {'code':'CN','name':'Canindeyu'},\n    '9' : {'code':'CE','name':'Central'},\n    '10' : {'code':'CC','name':'Concepcion'},\n    '11' : {'code':'CD','name':'Cordillera'},\n    '12' : {'code':'GU','name':'Guaira'},\n    '13' : {'code':'IT','name':'Itapua'},\n    '14' : {'code':'MI','name':'Misiones'},\n    '15' : {'code':'NE','name':'Neembucu'},\n    '16' : {'code':'PA','name':'Paraguari'},\n    '17' : {'code':'PH','name':'Presidente Hayes'},\n    '18' : {'code':'SP','name':'San Pedro'}\n  },\n  'PE':{\n    '1' : {'code':'AM','name':'Amazonas'},\n    '2' : {'code':'AN','name':'Ancash'},\n    '3' : {'code':'AP','name':'Apurimac'},\n    '4' : {'code':'AR','name':'Arequipa'},\n    '5' : {'code':'AY','name':'Ayacucho'},\n    '6' : {'code':'CJ','name':'Cajamarca'},\n    '7' : {'code':'CL','name':'Callao'},\n    '8' : {'code':'CU','name':'Cusco'},\n    '9' : {'code':'HV','name':'Huancavelica'},\n    '10' : {'code':'HO','name':'Huanuco'},\n    '11' : {'code':'IC','name':'Ica'},\n    '12' : {'code':'JU','name':'Junin'},\n    '13' : {'code':'LD','name':'La Libertad'},\n    '14' : {'code':'LY','name':'Lambayeque'},\n    '15' : {'code':'LI','name':'Lima'},\n    '16' : {'code':'LO','name':'Loreto'},\n    '17' : {'code':'MD','name':'Madre de Dios'},\n    '18' : {'code':'MO','name':'Moquegua'},\n    '19' : {'code':'PA','name':'Pasco'},\n    '20' : {'code':'PI','name':'Piura'},\n    '21' : {'code':'PU','name':'Puno'},\n    '22' : {'code':'SM','name':'San Martin'},\n    '23' : {'code':'TA','name':'Tacna'},\n    '24' : {'code':'TU','name':'Tumbes'},\n    '25' : {'code':'UC','name':'Ucayali'}\n  },\n  'PH':{\n    '1' : {'code':'ABR','name':'Abra'},\n    '2' : {'code':'ANO','name':'Agusan del Norte'},\n    '3' : {'code':'ASU','name':'Agusan del Sur'},\n    '4' : {'code':'AKL','name':'Aklan'},\n    '5' : {'code':'ALB','name':'Albay'},\n    '6' : {'code':'ANT','name':'Antique'},\n    '7' : {'code':'APY','name':'Apayao'},\n    '8' : {'code':'AUR','name':'Aurora'},\n    '9' : {'code':'BAS','name':'Basilan'},\n    '10' : {'code':'BTA','name':'Bataan'},\n    '11' : {'code':'BTE','name':'Batanes'},\n    '12' : {'code':'BTG','name':'Batangas'},\n    '13' : {'code':'BLR','name':'Biliran'},\n    '14' : {'code':'BEN','name':'Benguet'},\n    '15' : {'code':'BOL','name':'Bohol'},\n    '16' : {'code':'BUK','name':'Bukidnon'},\n    '17' : {'code':'BUL','name':'Bulacan'},\n    '18' : {'code':'CAG','name':'Cagayan'},\n    '19' : {'code':'CNO','name':'Camarines Norte'},\n    '20' : {'code':'CSU','name':'Camarines Sur'},\n    '21' : {'code':'CAM','name':'Camiguin'},\n    '22' : {'code':'CAP','name':'Capiz'},\n    '23' : {'code':'CAT','name':'Catanduanes'},\n    '24' : {'code':'CAV','name':'Cavite'},\n    '25' : {'code':'CEB','name':'Cebu'},\n    '26' : {'code':'CMP','name':'Compostela'},\n    '27' : {'code':'DNO','name':'Davao del Norte'},\n    '28' : {'code':'DSU','name':'Davao del Sur'},\n    '29' : {'code':'DOR','name':'Davao Oriental'},\n    '30' : {'code':'ESA','name':'Eastern Samar'},\n    '31' : {'code':'GUI','name':'Guimaras'},\n    '32' : {'code':'IFU','name':'Ifugao'},\n    '33' : {'code':'INO','name':'Ilocos Norte'},\n    '34' : {'code':'ISU','name':'Ilocos Sur'},\n    '35' : {'code':'ILO','name':'Iloilo'},\n    '36' : {'code':'ISA','name':'Isabela'},\n    '37' : {'code':'KAL','name':'Kalinga'},\n    '38' : {'code':'LAG','name':'Laguna'},\n    '39' : {'code':'LNO','name':'Lanao del Norte'},\n    '40' : {'code':'LSU','name':'Lanao del Sur'},\n    '41' : {'code':'UNI','name':'La Union'},\n    '42' : {'code':'LEY','name':'Leyte'},\n    '43' : {'code':'MAG','name':'Maguindanao'},\n    '44' : {'code':'MRN','name':'Marinduque'},\n    '45' : {'code':'MSB','name':'Masbate'},\n    '46' : {'code':'MIC','name':'Mindoro Occidental'},\n    '47' : {'code':'MIR','name':'Mindoro Oriental'},\n    '48' : {'code':'MSC','name':'Misamis Occidental'},\n    '49' : {'code':'MOR','name':'Misamis Oriental'},\n    '50' : {'code':'MOP','name':'Mountain'},\n    '51' : {'code':'NOC','name':'Negros Occidental'},\n    '52' : {'code':'NOR','name':'Negros Oriental'},\n    '53' : {'code':'NCT','name':'North Cotabato'},\n    '54' : {'code':'NSM','name':'Northern Samar'},\n    '55' : {'code':'NEC','name':'Nueva Ecija'},\n    '56' : {'code':'NVZ','name':'Nueva Vizcaya'},\n    '57' : {'code':'PLW','name':'Palawan'},\n    '58' : {'code':'PMP','name':'Pampanga'},\n    '59' : {'code':'PNG','name':'Pangasinan'},\n    '60' : {'code':'QZN','name':'Quezon'},\n    '61' : {'code':'QRN','name':'Quirino'},\n    '62' : {'code':'RIZ','name':'Rizal'},\n    '63' : {'code':'ROM','name':'Romblon'},\n    '64' : {'code':'SMR','name':'Samar'},\n    '65' : {'code':'SRG','name':'Sarangani'},\n    '66' : {'code':'SQJ','name':'Siquijor'},\n    '67' : {'code':'SRS','name':'Sorsogon'},\n    '68' : {'code':'SCO','name':'South Cotabato'},\n    '69' : {'code':'SLE','name':'Southern Leyte'},\n    '70' : {'code':'SKU','name':'Sultan Kudarat'},\n    '71' : {'code':'SLU','name':'Sulu'},\n    '72' : {'code':'SNO','name':'Surigao del Norte'},\n    '73' : {'code':'SSU','name':'Surigao del Sur'},\n    '74' : {'code':'TAR','name':'Tarlac'},\n    '75' : {'code':'TAW','name':'Tawi-Tawi'},\n    '76' : {'code':'ZBL','name':'Zambales'},\n    '77' : {'code':'ZNO','name':'Zamboanga del Norte'},\n    '78' : {'code':'ZSU','name':'Zamboanga del Sur'},\n    '79' : {'code':'ZSI','name':'Zamboanga Sibugay'}\n  },\n  'PN':{\n    '1' : {'code':'PIT','name':'Pitcairn Island'}\n  },\n  'PL':{\n    '1': {'code':'DO','name':'Dolno\u015Bl\u0105skie'},\n    '2' : {'code':'KP','name':'Kujawsko-Pomorskie'},\n    '3': {'code':'LL','name':'Lubelskie'},\n    '4': {'code':'LU','name':'Lubuskie'},\n    '5': {'code':'LO','name':'\u0141\u00F3dzkie'},\n    '6': {'code':'ML','name':'Ma\u0142opolskie'},\n    '7' : {'code':'MZ','name':'Mazowieckie'},\n    '8' : {'code':'OP','name':'Opolskie'},\n    '9' : {'code':'PP','name':'Podkarpackie'},\n    '10' : {'code':'PL','name':'Podlaskie'},\n    '11' : {'code':'PM','name':'Pomorskie'},\n    '12': {'code':'SL','name':'\u015Al\u0105skie'},\n    '13': {'code':'SW','name':'\u015Awi\u0119tokrzyskie'},\n    '14': {'code':'WM','name':'Warmi\u0144sko-Mazurskie'},\n    '15' : {'code':'WP','name':'Wielkopolskie'},\n    '16' : {'code':'ZA','name':'Zachodniopomorskie'}\n  },\n  'PT':{\n    '1' : {'code':'AC','name':'A\u00E7ores'},\n    '2' : {'code':'AV','name':'Aveiro'},\n    '3' : {'code':'BE','name':'Beja'},\n    '4' : {'code':'BR','name':'Braga'},\n    '5' : {'code':'BA','name':'Bragan\u00E7a'},\n    '6' : {'code':'CB','name':'Castelo Branco'},\n    '7' : {'code':'CO','name':'Coimbra'},\n    '8' : {'code':'EV','name':'\u00E9vora'},\n    '9' : {'code':'FA','name':'Faro'},\n    '10' : {'code':'GU','name':'Guarda'},\n    '12' : {'code':'LE','name':'Leiria'},\n    '13' : {'code':'LI','name':'Lisboa'},\n    '14' : {'code':'ME','name':'Madeira'},\n    '15' : {'code':'PO','name':'Portalegre'},\n    '16' : {'code':'PR','name':'Porto'},\n    '17' : {'code':'SA','name':'Santar\u00E9m'},\n    '18' : {'code':'SE','name':'Set\u00DAbal'},\n    '19' : {'code':'VC','name':'Viana do Castelo'},\n    '20' : {'code':'VR','name':'Vila Real'},\n    '21' : {'code':'VI','name':'Viseu'}\n  },\n  'PR':{\n    '1' : {'code':'A-A','name':'A\u00F1asco'},\n    '2' : {'code':'ADJ','name':'Adjuntas'},\n    '3' : {'code':'AGU','name':'Aguada'},\n    '4' : {'code':'AGU','name':'Aguadilla'},\n    '5' : {'code':'AGU','name':'Aguas Buenas'},\n    '6' : {'code':'AIB','name':'Aibonito'},\n    '7' : {'code':'ARE','name':'Arecibo'},\n    '8' : {'code':'ARR','name':'Arroyo'},\n    '9' : {'code':'BAR','name':'Barceloneta'},\n    '10' : {'code':'BAR','name':'Barranquitas'},\n    '11' : {'code':'BAY','name':'Bayam\u00F3n'},\n    '12' : {'code':'CAB','name':'Cabo Rojo'},\n    '13' : {'code':'CAG','name':'Caguas'},\n    '14' : {'code':'CAM','name':'Camuy'},\n    '15' : {'code':'CAN','name':'Can\u00F3vanas'},\n    '16' : {'code':'CAR','name':'Carolina'},\n    '17' : {'code':'CAT','name':'Cata\u00F1o'},\n    '18' : {'code':'CAY','name':'Cayey'},\n    '19' : {'code':'CEI','name':'Ceiba'},\n    '20' : {'code':'CIA','name':'Ciales'},\n    '21' : {'code':'CID','name':'Cidra'},\n    '22' : {'code':'COA','name':'Coamo'},\n    '23' : {'code':'COM','name':'Comer\u00EDo'},\n    '24' : {'code':'COR','name':'Corozal'},\n    '25' : {'code':'CUL','name':'Culebra'},\n    '26' : {'code':'DOR','name':'Dorado'},\n    '27' : {'code':'FAJ','name':'Fajardo'},\n    '28' : {'code':'FLO','name':'Florida'},\n    '29' : {'code':'GUA','name':'Guayama'},\n    '30' : {'code':'GUA','name':'Guayanilla'},\n    '31' : {'code':'GUA','name':'Guaynabo'},\n    '32' : {'code':'GUR','name':'Gurabo'},\n    '33' : {'code':'GU\u00A1','name':'Gu\u00E1nica'},\n    '34' : {'code':'HAT','name':'Hatillo'},\n    '35' : {'code':'HOR','name':'Hormigueros'},\n    '36' : {'code':'HUM','name':'Humacao'},\n    '37' : {'code':'ISA','name':'Isabela'},\n    '38' : {'code':'JAY','name':'Jayuya'},\n    '39' : {'code':'JUA','name':'Juana D\u00EDaz'},\n    '40' : {'code':'JUN','name':'Juncos'},\n    '41' : {'code':'LAJ','name':'Lajas'},\n    '42' : {'code':'LAR','name':'Lares'},\n    '43' : {'code':'LAS','name':'Las Mar\u00EDas'},\n    '44' : {'code':'LAS','name':'Las Piedras'},\n    '45' : {'code':'LO\u00D5','name':'Lo\u00EDza'},\n    '46' : {'code':'LUQ','name':'Luquillo'},\n    '47' : {'code':'MAN','name':'Manat\u00ED'},\n    '48' : {'code':'MAR','name':'Maricao'},\n    '49' : {'code':'MAU','name':'Maunabo'},\n    '50' : {'code':'MAY','name':'Mayag\u00FCez'},\n    '51' : {'code':'MOC','name':'Moca'},\n    '52' : {'code':'MOR','name':'Morovis'},\n    '53' : {'code':'NAG','name':'Naguabo'},\n    '54' : {'code':'NAR','name':'Naranjito'},\n    '55' : {'code':'ORO','name':'Orocovis'},\n    '56' : {'code':'PAT','name':'Patillas'},\n    '57' : {'code':'PE-','name':'Pe\u00F1uelas'},\n    '58' : {'code':'PON','name':'Ponce'},\n    '59' : {'code':'QUE','name':'Quebradillas'},\n    '60' : {'code':'RIN','name':'Rinc\u00F3n'},\n    '61' : {'code':'RIO','name':'Rio Grande'},\n    '62' : {'code':'SAB','name':'Sabana Grande'},\n    '63' : {'code':'SAL','name':'Salinas'},\n    '64' : {'code':'SAN','name':'San Germ\u00E0n'},\n    '65' : {'code':'SAN','name':'San Juan'},\n    '66' : {'code':'SAN','name':'San Lorenzo'},\n    '67' : {'code':'SAN','name':'San Sebasti\u00E0n'},\n    '68' : {'code':'SAN','name':'Santa Isabel'},\n    '69' : {'code':'TOA','name':'Toa Alta'},\n    '70' : {'code':'TOA','name':'Toa Baja'},\n    '71' : {'code':'TRU','name':'Trujillo Alto'},\n    '72' : {'code':'UTU','name':'Utuado'},\n    '73' : {'code':'VEG','name':'Vega Alta'},\n    '74' : {'code':'VEG','name':'Vega Baja'},\n    '75' : {'code':'VIE','name':'Vieques'},\n    '76' : {'code':'VIL','name':'Villalba'},\n    '77' : {'code':'YAB','name':'Yabucoa'},\n    '78' : {'code':'YAU','name':'Yauco'}\n  },\n  'QA':{\n    '1' : {'code':'DW','name':'Ad Dawhah'},\n    '2' : {'code':'GW','name':'Al Ghuwayriyah'},\n    '3' : {'code':'JM','name':'Al Jumayliyah'},\n    '4' : {'code':'KR','name':'Al Khawr'},\n    '5' : {'code':'WK','name':'Al Wakrah'},\n    '6' : {'code':'RN','name':'Ar Rayyan'},\n    '7' : {'code':'JB','name':'Jarayan al Batinah'},\n    '8' : {'code':'MS','name':'Madinat ash Shamal'},\n    '9' : {'code':'UD','name':'Umm Sa\\'id'},\n    '10' : {'code':'UL','name':'Umm Salal'}\n  },\n  'RO':{\n    '1' : {'code':'AB','name':'Alba'},\n    '2' : {'code':'AR','name':'Arad'},\n    '3' : {'code':'AG','name':'Arges'},\n    '4' : {'code':'BC','name':'Bacau'},\n    '5' : {'code':'BH','name':'Bihor'},\n    '6' : {'code':'BN','name':'Bistrita-Nasaud'},\n    '7' : {'code':'BT','name':'Botosani'},\n    '8' : {'code':'BV','name':'Brasov'},\n    '9' : {'code':'BR','name':'Braila'},\n    '10' : {'code':'B','name':'Bucuresti'},\n    '11' : {'code':'BZ','name':'Buzau'},\n    '12' : {'code':'CS','name':'Caras-Severin'},\n    '13' : {'code':'CL','name':'Calarasi'},\n    '14' : {'code':'CJ','name':'Cluj'},\n    '15' : {'code':'CT','name':'Constanta'},\n    '16' : {'code':'CV','name':'Covasna'},\n    '17' : {'code':'DB','name':'Dimbovita'},\n    '18' : {'code':'DJ','name':'Dolj'},\n    '19' : {'code':'GL','name':'Galati'},\n    '20' : {'code':'GR','name':'Giurgiu'},\n    '21' : {'code':'GJ','name':'Gorj'},\n    '22' : {'code':'HR','name':'Harghita'},\n    '23' : {'code':'HD','name':'Hunedoara'},\n    '24' : {'code':'IL','name':'Ialomita'},\n    '25' : {'code':'IS','name':'Iasi'},\n    '26' : {'code':'IF','name':'Ilfov'},\n    '27' : {'code':'MM','name':'Maramures'},\n    '28' : {'code':'MH','name':'Mehedinti'},\n    '29' : {'code':'MS','name':'Mures'},\n    '30' : {'code':'NT','name':'Neamt'},\n    '31' : {'code':'OT','name':'Olt'},\n    '32' : {'code':'PH','name':'Prahova'},\n    '33' : {'code':'SM','name':'Satu-Mare'},\n    '34' : {'code':'SJ','name':'Salaj'},\n    '35' : {'code':'SB','name':'Sibiu'},\n    '36' : {'code':'SV','name':'Suceava'},\n    '37' : {'code':'TR','name':'Teleorman'},\n    '38' : {'code':'TM','name':'Timis'},\n    '39' : {'code':'TL','name':'Tulcea'},\n    '40' : {'code':'VS','name':'Vaslui'},\n    '41' : {'code':'VL','name':'Valcea'},\n    '42' : {'code':'VN','name':'Vrancea'}\n  },\n  'RU':{\n    '1' : {'code':'AB','name':'Abakan'},\n    '2' : {'code':'AG','name':'Aginskoye'},\n    '3' : {'code':'AN','name':'Anadyr'},\n    '4' : {'code':'AR','name':'Arkahangelsk'},\n    '5' : {'code':'AS','name':'Astrakhan'},\n    '6' : {'code':'BA','name':'Barnaul'},\n    '7' : {'code':'BE','name':'Belgorod'},\n    '8' : {'code':'BI','name':'Birobidzhan'},\n    '9' : {'code':'BL','name':'Blagoveshchensk'},\n    '10' : {'code':'BR','name':'Bryansk'},\n    '11' : {'code':'CH','name':'Cheboksary'},\n    '12' : {'code':'CL','name':'Chelyabinsk'},\n    '13' : {'code':'CR','name':'Cherkessk'},\n    '14' : {'code':'CI','name':'Chita'},\n    '15' : {'code':'DU','name':'Dudinka'},\n    '16' : {'code':'EL','name':'Elista'},\n    '17' : {'code':'GO','name':'Gomo-Altaysk'},\n    '18' : {'code':'GA','name':'Gorno-Altaysk'},\n    '19' : {'code':'GR','name':'Groznyy'},\n    '20' : {'code':'IR','name':'Irkutsk'},\n    '21' : {'code':'IV','name':'Ivanovo'},\n    '22' : {'code':'IZ','name':'Izhevsk'},\n    '23' : {'code':'KA','name':'Kalinigrad'},\n    '24' : {'code':'KL','name':'Kaluga'},\n    '25' : {'code':'KS','name':'Kasnodar'},\n    '26' : {'code':'KZ','name':'Kazan'},\n    '27' : {'code':'KE','name':'Kemerovo'},\n    '28' : {'code':'KH','name':'Khabarovsk'},\n    '29' : {'code':'KM','name':'Khanty-Mansiysk'},\n    '30' : {'code':'KO','name':'Kostroma'},\n    '31' : {'code':'KR','name':'Krasnodar'},\n    '32' : {'code':'KN','name':'Krasnoyarsk'},\n    '33' : {'code':'KU','name':'Kudymkar'},\n    '34' : {'code':'KG','name':'Kurgan'},\n    '35' : {'code':'KK','name':'Kursk'},\n    '36' : {'code':'KY','name':'Kyzyl'},\n    '37' : {'code':'LI','name':'Lipetsk'},\n    '38' : {'code':'MA','name':'Magadan'},\n    '39' : {'code':'MK','name':'Makhachkala'},\n    '40' : {'code':'MY','name':'Maykop'},\n    '41' : {'code':'MO','name':'Moscow'},\n    '42' : {'code':'MU','name':'Murmansk'},\n    '43' : {'code':'NA','name':'Nalchik'},\n    '44' : {'code':'NR','name':'Naryan Mar'},\n    '45' : {'code':'NZ','name':'Nazran'},\n    '46' : {'code':'NI','name':'Nizhniy Novgorod'},\n    '47' : {'code':'NO','name':'Novgorod'},\n    '48' : {'code':'NV','name':'Novosibirsk'},\n    '49' : {'code':'OM','name':'Omsk'},\n    '50' : {'code':'OR','name':'Orel'},\n    '51' : {'code':'OE','name':'Orenburg'},\n    '52' : {'code':'PA','name':'Palana'},\n    '53' : {'code':'PE','name':'Penza'},\n    '54' : {'code':'PR','name':'Perm'},\n    '55' : {'code':'PK','name':'Petropavlovsk-Kamchatskiy'},\n    '56' : {'code':'PT','name':'Petrozavodsk'},\n    '57' : {'code':'PS','name':'Pskov'},\n    '58' : {'code':'RO','name':'Rostov-na-Donu'},\n    '59' : {'code':'RY','name':'Ryazan'},\n    '60' : {'code':'SL','name':'Salekhard'},\n    '61' : {'code':'SA','name':'Samara'},\n    '62' : {'code':'SR','name':'Saransk'},\n    '63' : {'code':'SV','name':'Saratov'},\n    '64' : {'code':'SM','name':'Smolensk'},\n    '65' : {'code':'SP','name':'St. Petersburg'},\n    '66' : {'code':'ST','name':'Stavropol'},\n    '67' : {'code':'SY','name':'Syktyvkar'},\n    '68' : {'code':'TA','name':'Tambov'},\n    '69' : {'code':'TO','name':'Tomsk'},\n    '70' : {'code':'TU','name':'Tula'},\n    '71' : {'code':'TR','name':'Tura'},\n    '72' : {'code':'TV','name':'Tver'},\n    '73' : {'code':'TY','name':'Tyumen'},\n    '74' : {'code':'UF','name':'Ufa'},\n    '75' : {'code':'UL','name':'Ul\\'yanovsk'},\n    '76' : {'code':'UU','name':'Ulan-Ude'},\n    '77' : {'code':'US','name':'Ust\\'-Ordynskiy'},\n    '78' : {'code':'VL','name':'Vladikavkaz'},\n    '79' : {'code':'VA','name':'Vladimir'},\n    '80' : {'code':'VV','name':'Vladivostok'},\n    '81' : {'code':'VG','name':'Volgograd'},\n    '82' : {'code':'VD','name':'Vologda'},\n    '83' : {'code':'VO','name':'Voronezh'},\n    '84' : {'code':'VY','name':'Vyatka'},\n    '85' : {'code':'YA','name':'Yakutsk'},\n    '86' : {'code':'YR','name':'Yaroslavl'},\n    '87' : {'code':'YE','name':'Yekaterinburg'},\n    '88' : {'code':'YO','name':'Yoshkar-Ola'}\n  },\n  'RW':{\n    '1' : {'code':'BU','name':'Butare'},\n    '2' : {'code':'BY','name':'Byumba'},\n    '3' : {'code':'CY','name':'Cyangugu'},\n    '4' : {'code':'GK','name':'Gikongoro'},\n    '5' : {'code':'GS','name':'Gisenyi'},\n    '6' : {'code':'GT','name':'Gitarama'},\n    '7' : {'code':'KG','name':'Kibungo'},\n    '8' : {'code':'KY','name':'Kibuye'},\n    '9' : {'code':'KR','name':'Kigali Rurale'},\n    '10' : {'code':'KV','name':'Kigali-ville'},\n    '11' : {'code':'RU','name':'Ruhengeri'},\n    '12' : {'code':'UM','name':'Umutara'}\n  },\n  'KN':{\n    '1' : {'code':'CCN','name':'Christ Church Nichola Town'},\n    '2' : {'code':'SAS','name':'Saint Anne Sandy Point'},\n    '3' : {'code':'SGB','name':'Saint George Basseterre'},\n    '4' : {'code':'SGG','name':'Saint George Gingerland'},\n    '5' : {'code':'SJW','name':'Saint James Windward'},\n    '6' : {'code':'SJC','name':'Saint John Capesterre'},\n    '7' : {'code':'SJF','name':'Saint John Figtree'},\n    '8' : {'code':'SMC','name':'Saint Mary Cayon'},\n    '9' : {'code':'CAP','name':'Saint Paul Capesterre'},\n    '10' : {'code':'CHA','name':'Saint Paul Charlestown'},\n    '11' : {'code':'SPB','name':'Saint Peter Basseterre'},\n    '12' : {'code':'STL','name':'Saint Thomas Lowland'},\n    '13' : {'code':'STM','name':'Saint Thomas Middle Island'},\n    '14' : {'code':'TPP','name':'Trinity Palmetto Point'}\n  },\n  'LC':{\n    '1' : {'code':'AR','name':'Anse-la-Raye'},\n    '2' : {'code':'CA','name':'Castries'},\n    '3' : {'code':'CH','name':'Choiseul'},\n    '4' : {'code':'DA','name':'Dauphin'},\n    '5' : {'code':'DE','name':'Dennery'},\n    '6' : {'code':'GI','name':'Gros-Islet'},\n    '7' : {'code':'LA','name':'Laborie'},\n    '8' : {'code':'MI','name':'Micoud'},\n    '9' : {'code':'PR','name':'Praslin'},\n    '10' : {'code':'SO','name':'Soufriere'},\n    '11' : {'code':'VF','name':'Vieux-Fort'}\n  },\n  'VC':{\n    '1' : {'code':'C','name':'Charlotte'},\n    '2' : {'code':'R','name':'Grenadines'},\n    '3' : {'code':'A','name':'Saint Andrew'},\n    '4' : {'code':'D','name':'Saint David'},\n    '5' : {'code':'G','name':'Saint George'},\n    '6' : {'code':'P','name':'Saint Patrick'}\n  },\n  'WS':{\n    '1' : {'code':'AN','name':'A\\'ana'},\n    '2' : {'code':'AI','name':'Aiga-i-le-Tai'},\n    '3' : {'code':'AT','name':'Atua'},\n    '4' : {'code':'FA','name':'Fa\\'asaleleaga'},\n    '5' : {'code':'GE','name':'Gaga\\'emauga'},\n    '6' : {'code':'GF','name':'Gagaifomauga'},\n    '7' : {'code':'PA','name':'Palauli'},\n    '8' : {'code':'SA','name':'Satupa\\'itea'},\n    '9' : {'code':'TU','name':'Tuamasaga'},\n    '10' : {'code':'VF','name':'Va\\'a-o-Fonoti'},\n    '11' : {'code':'VS','name':'Vaisigano'}\n  },\n  'SM':{\n    '1' : {'code':'AC','name':'Acquaviva'},\n    '2' : {'code':'BM','name':'Borgo Maggiore'},\n    '3' : {'code':'CH','name':'Chiesanuova'},\n    '4' : {'code':'DO','name':'Domagnano'},\n    '5' : {'code':'FA','name':'Faetano'},\n    '6' : {'code':'FI','name':'Fiorentino'},\n    '7' : {'code':'MO','name':'Montegiardino'},\n    '8' : {'code':'SM','name':'Citta di San Marino'},\n    '9' : {'code':'SE','name':'Serravalle'}\n  },\n  'ST':{\n    '1' : {'code':'S','name':'Sao Tome'},\n    '2' : {'code':'P','name':'Principe'}\n  },\n  'SA':{\n    '1' : {'code':'BH','name':'Al Bahah'},\n    '2' : {'code':'HS','name':'Al Hudud ash Shamaliyah'},\n    '3' : {'code':'JF','name':'Al Jawf'},\n    '4' : {'code':'MD','name':'Al Madinah'},\n    '5' : {'code':'QS','name':'Al Qasim'},\n    '6' : {'code':'RD','name':'Ar Riyad'},\n    '7' : {'code':'AQ','name':'Ash Sharqiyah (Eastern)'},\n    '8' : {'code':'AS','name':'\\'Asir'},\n    '9' : {'code':'HL','name':'Ha\\'il'},\n    '10' : {'code':'JZ','name':'Jizan'},\n    '11' : {'code':'ML','name':'Makkah'},\n    '12' : {'code':'NR','name':'Najran'},\n    '13' : {'code':'TB','name':'Tabuk'}\n  },\n  'SN':{\n    '1' : {'code':'DA','name':'Dakar'},\n    '2' : {'code':'DI','name':'Diourbel'},\n    '3' : {'code':'FA','name':'Fatick'},\n    '4' : {'code':'KA','name':'Kaolack'},\n    '5' : {'code':'KO','name':'Kolda'},\n    '6' : {'code':'LO','name':'Louga'},\n    '7' : {'code':'MA','name':'Matam'},\n    '8' : {'code':'SL','name':'Saint-Louis'},\n    '9' : {'code':'TA','name':'Tambacounda'},\n    '10' : {'code':'TH','name':'Thies'},\n    '11' : {'code':'ZI','name':'Ziguinchor'}\n  },\n  'SC':{\n    '1' : {'code':'AP','name':'Anse aux Pins'},\n    '2' : {'code':'AB','name':'Anse Boileau'},\n    '3' : {'code':'AE','name':'Anse Etoile'},\n    '4' : {'code':'AL','name':'Anse Louis'},\n    '5' : {'code':'AR','name':'Anse Royale'},\n    '6' : {'code':'BL','name':'Baie Lazare'},\n    '7' : {'code':'BS','name':'Baie Sainte Anne'},\n    '8' : {'code':'BV','name':'Beau Vallon'},\n    '9' : {'code':'BA','name':'Bel Air'},\n    '10' : {'code':'BO','name':'Bel Ombre'},\n    '11' : {'code':'CA','name':'Cascade'},\n    '12' : {'code':'GL','name':'Glacis'},\n    '13' : {'code':'GM','name':'Grand\\' Anse (on Mahe)'},\n    '14' : {'code':'GP','name':'Grand\\' Anse (on Praslin)'},\n    '15' : {'code':'DG','name':'La Digue'},\n    '16' : {'code':'RA','name':'La Riviere Anglaise'},\n    '17' : {'code':'MB','name':'Mont Buxton'},\n    '18' : {'code':'MF','name':'Mont Fleuri'},\n    '19' : {'code':'PL','name':'Plaisance'},\n    '20' : {'code':'PR','name':'Pointe La Rue'},\n    '21' : {'code':'PG','name':'Port Glaud'},\n    '22' : {'code':'SL','name':'Saint Louis'},\n    '23' : {'code':'TA','name':'Takamaka'}\n  },\n  'SL':{\n    '1' : {'code':'E','name':'Eastern'},\n    '2' : {'code':'N','name':'Northern'},\n    '3' : {'code':'S','name':'Southern'},\n    '4' : {'code':'W','name':'Western'}\n  },\n  'SK':{\n    '1' : {'code':'BA','name':'Banskobystricky'},\n    '2' : {'code':'BR','name':'Bratislavsky'},\n    '3' : {'code':'KO','name':'Kosicky'},\n    '4' : {'code':'NI','name':'Nitriansky'},\n    '5' : {'code':'PR','name':'Presovsky'},\n    '6' : {'code':'TC','name':'Trenciansky'},\n    '7' : {'code':'TV','name':'Trnavsky'},\n    '8' : {'code':'ZI','name':'Zilinsky'}\n  },\n  'SI':{\n    '1' : {'code':'4','name':'\u0160tajerska'},\n    '2' : {'code':'2A','name':'Gorenjska'},\n    '3' : {'code':'5','name':'Prekmurje'},\n    '4' : {'code':'3','name':'Koro\u0161ka'},\n    '5' : {'code':'2B','name':'Notranjska'},\n    '6' : {'code':'1','name':'Primorska'},\n    '7' : {'code':'2C','name':'Dolenjska'},\n    '8' : {'code':'2C','name':'Bela Krajina'}\n  },\n  'SB':{\n    '1' : {'code':'CE','name':'Central'},\n    '2' : {'code':'CH','name':'Choiseul'},\n    '3' : {'code':'GC','name':'Guadalcanal'},\n    '4' : {'code':'HO','name':'Honiara'},\n    '5' : {'code':'IS','name':'Isabel'},\n    '6' : {'code':'MK','name':'Makira'},\n    '7' : {'code':'ML','name':'Malaita'},\n    '8' : {'code':'RB','name':'Rennell and Bellona'},\n    '9' : {'code':'TM','name':'Temotu'},\n    '10' : {'code':'WE','name':'Western'}\n  },\n  'SO':{\n    '1' : {'code':'AW','name':'Awdal'},\n    '2' : {'code':'BK','name':'Bakool'},\n    '3' : {'code':'BN','name':'Banaadir'},\n    '4' : {'code':'BR','name':'Bari'},\n    '5' : {'code':'BY','name':'Bay'},\n    '6' : {'code':'GA','name':'Galguduud'},\n    '7' : {'code':'GE','name':'Gedo'},\n    '8' : {'code':'HI','name':'Hiiraan'},\n    '9' : {'code':'JD','name':'Jubbada Dhexe'},\n    '10' : {'code':'JH','name':'Jubbada Hoose'},\n    '11' : {'code':'MU','name':'Mudug'},\n    '12' : {'code':'NU','name':'Nugaal'},\n    '13' : {'code':'SA','name':'Sanaag'},\n    '14' : {'code':'SD','name':'Shabeellaha Dhexe'},\n    '15' : {'code':'SH','name':'Shabeellaha Hoose'},\n    '16' : {'code':'SL','name':'Sool'},\n    '17' : {'code':'TO','name':'Togdheer'},\n    '18' : {'code':'WG','name':'Woqooyi Galbeed'}\n  },\n  'ZA':{\n    '1' : {'code':'EC','name':'Eastern Cape'},\n    '2' : {'code':'FS','name':'Free State'},\n    '3' : {'code':'GT','name':'Gauteng'},\n    '4' : {'code':'KN','name':'KwaZulu-Natal'},\n    '5' : {'code':'LP','name':'Limpopo'},\n    '6' : {'code':'MP','name':'Mpumalanga'},\n    '7' : {'code':'NW','name':'North West'},\n    '8' : {'code':'NC','name':'Northern Cape'},\n    '9' : {'code':'WC','name':'Western Cape'}\n  },\n  'ES':{\n    '1' : {'code':'CA','name':'La Coru\u00F1a'},\n    '2' : {'code':'AL','name':'\u00C1lava'},\n    '3' : {'code':'AB','name':'Albacete'},\n    '4' : {'code':'AC','name':'Alicante'},\n    '5' : {'code':'AM','name':'Almeria'},\n    '6' : {'code':'AS','name':'Asturias'},\n    '7' : {'code':'AV','name':'\u00C1vila'},\n    '8' : {'code':'BJ','name':'Badajoz'},\n    '9' : {'code':'IB','name':'Baleares'},\n    '10' : {'code':'BA','name':'Barcelona'},\n    '11' : {'code':'BU','name':'Burgos'},\n    '12' : {'code':'CC','name':'C\u00E1ceres'},\n    '13' : {'code':'CZ','name':'C\u00E1diz'},\n    '14' : {'code':'CT','name':'Cantabria'},\n    '15' : {'code':'CL','name':'Castell\u00F3n'},\n    '16' : {'code':'CE','name':'Ceuta'},\n    '17' : {'code':'CR','name':'Ciudad Real'},\n    '18' : {'code':'CD','name':'C\u00F3rdoba'},\n    '19' : {'code':'CU','name':'Cuenca'},\n    '20' : {'code':'GI','name':'Gerona'},\n    '21' : {'code':'GD','name':'Granada'},\n    '22' : {'code':'GJ','name':'Guadalajara'},\n    '23' : {'code':'GP','name':'Guip\u00FAzcoa'},\n    '24' : {'code':'HL','name':'Huelva'},\n    '25' : {'code':'HS','name':'Huesca'},\n    '26' : {'code':'JN','name':'Ja\u00E9n'},\n    '27' : {'code':'RJ','name':'La Rioja'},\n    '28' : {'code':'PM','name':'Las Palmas'},\n    '29' : {'code':'LE','name':'Le\u00F3n'},\n    '30' : {'code':'LL','name':'L\u00E9rida'},\n    '31' : {'code':'LG','name':'Lugo'},\n    '32' : {'code':'MD','name':'Madrid'},\n    '33' : {'code':'MA','name':'M\u00E1laga'},\n    '34' : {'code':'ML','name':'Melilla'},\n    '35' : {'code':'MU','name':'Murcia'},\n    '36' : {'code':'NV','name':'Navarra'},\n    '37' : {'code':'OU','name':'Ourense'},\n    '38' : {'code':'PL','name':'Palencia'},\n    '39' : {'code':'PO','name':'Pontevedra'},\n    '40' : {'code':'SL','name':'Salamanca'},\n    '41' : {'code':'SC','name':'Santa Cruz de Tenerife'},\n    '42' : {'code':'SG','name':'Segovia'},\n    '43' : {'code':'SV','name':'Sevilla'},\n    '44' : {'code':'SO','name':'Soria'},\n    '45' : {'code':'TA','name':'Tarragona'},\n    '46' : {'code':'TE','name':'Teruel'},\n    '47' : {'code':'TO','name':'Toledo'},\n    '48' : {'code':'VC','name':'Valencia'},\n    '49' : {'code':'VD','name':'Valladolid'},\n    '50' : {'code':'VZ','name':'Vizcaya'},\n    '51' : {'code':'ZM','name':'Zamora'},\n    '52' : {'code':'ZR','name':'Zaragoza'}\n  },\n  'LK':{\n    '1' : {'code':'CE','name':'Central'},\n    '2' : {'code':'EA','name':'Eastern'},\n    '3' : {'code':'NC','name':'North Central'},\n    '4' : {'code':'NO','name':'Northern'},\n    '5' : {'code':'NW','name':'North Western'},\n    '6' : {'code':'SA','name':'Sabaragamuwa'},\n    '7' : {'code':'SO','name':'Southern'},\n    '8' : {'code':'UV','name':'Uva'},\n    '9' : {'code':'WE','name':'Western'}\n  },\n  'SH':{\n    '1' : {'code':'A','name':'Ascension'},\n    '2' : {'code':'S','name':'Saint Helena'},\n    '3' : {'code':'T','name':'Tristan da Cunha'}\n  },\n  'PM':{\n    '1' : {'code':'P','name':'Saint Pierre'},\n    '2' : {'code':'M','name':'Miquelon'}\n  },\n  'SD':{\n    '1' : {'code':'ANL','name':'A\\'ali an Nil'},\n    '2' : {'code':'BAM','name':'Al Bahr al Ahmar'},\n    '3' : {'code':'BRT','name':'Al Buhayrat'},\n    '4' : {'code':'JZR','name':'Al Jazirah'},\n    '5' : {'code':'KRT','name':'Al Khartum'},\n    '6' : {'code':'QDR','name':'Al Qadarif'},\n    '7' : {'code':'WDH','name':'Al Wahdah'},\n    '8' : {'code':'ANB','name':'An Nil al Abyad'},\n    '9' : {'code':'ANZ','name':'An Nil al Azraq'},\n    '10' : {'code':'ASH','name':'Ash Shamaliyah'},\n    '11' : {'code':'BJA','name':'Bahr al Jabal'},\n    '12' : {'code':'GIS','name':'Gharb al Istiwa\\'iyah'},\n    '13' : {'code':'GBG','name':'Gharb Bahr al Ghazal'},\n    '14' : {'code':'GDA','name':'Gharb Darfur'},\n    '15' : {'code':'GKU','name':'Gharb Kurdufan'},\n    '16' : {'code':'JDA','name':'Janub Darfur'},\n    '17' : {'code':'JKU','name':'Janub Kurdufan'},\n    '18' : {'code':'JQL','name':'Junqali'},\n    '19' : {'code':'KSL','name':'Kassala'},\n    '20' : {'code':'NNL','name':'Nahr an Nil'},\n    '21' : {'code':'SBG','name':'Shamal Bahr al Ghazal'},\n    '22' : {'code':'SDA','name':'Shamal Darfur'},\n    '23' : {'code':'SKU','name':'Shamal Kurdufan'},\n    '24' : {'code':'SIS','name':'Sharq al Istiwa\\'iyah'},\n    '25' : {'code':'SNR','name':'Sinnar'},\n    '26' : {'code':'WRB','name':'Warab'}\n  },\n  'SR':{\n    '1' : {'code':'BR','name':'Brokopondo'},\n    '2' : {'code':'CM','name':'Commewijne'},\n    '3' : {'code':'CR','name':'Coronie'},\n    '4' : {'code':'MA','name':'Marowijne'},\n    '5' : {'code':'NI','name':'Nickerie'},\n    '6' : {'code':'PA','name':'Para'},\n    '7' : {'code':'PM','name':'Paramaribo'},\n    '9' : {'code':'SA','name':'Saramacca'},\n    '10' : {'code':'SI','name':'Sipaliwini'},\n    '11' : {'code':'WA','name':'Wanica'}\n  },\n  'SZ':{\n    '1' : {'code':'H','name':'Hhohho'},\n    '2' : {'code':'L','name':'Lubombo'},\n    '3' : {'code':'M','name':'Manzini'},\n    '4' : {'code':'S','name':'Shishelweni'}\n  },\n  'SE':{\n    '1' : {'code':'K','name':'Blekinge'},\n    '2' : {'code':'W','name':'Dalama'},\n    '3' : {'code':'I','name':'Gotland'},\n    '4' : {'code':'X','name':'G\u00E4vleborg'},\n    '5' : {'code':'N','name':'Halland'},\n    '6' : {'code':'Z','name':'J\u00E4mtland'},\n    '7' : {'code':'F','name':'J\u00F6nk\u00F6ping'},\n    '8' : {'code':'H','name':'Kalmar'},\n    '9' : {'code':'G','name':'Kronoberg'},\n    '10' : {'code':'BD','name':'Norrbotten'},\n    '11' : {'code':'M','name':'Sk\u00E5ne'},\n    '12' : {'code':'AB','name':'Stockholm'},\n    '13' : {'code':'D','name':'S\u00F6dermanland'},\n    '14' : {'code':'C','name':'Uppsala'},\n    '15' : {'code':'S','name':'V\u00E4rmland'},\n    '16' : {'code':'AC','name':'V\u00E4sterbotten'},\n    '17' : {'code':'Y','name':'V\u00E4sternorrland'},\n    '18' : {'code':'U','name':'V\u00E4stmanland'},\n    '19' : {'code':'O','name':'V\u00E4stra G\u00F6taland'},\n    '20' : {'code':'T','name':'\u00D6rebro'},\n    '21' : {'code':'E','name':'\u00D6sterg\u00F6tland'}\n  },\n  'CH':{\n    '1' : {'code':'AG','name':'Aargau'},\n    '2' : {'code':'AR','name':'Appenzell Ausserrhoden'},\n    '3' : {'code':'AI','name':'Appenzell Innerrhoden'},\n    '4' : {'code':'BS','name':'Basel-Stadt'},\n    '5' : {'code':'BL','name':'Basel-Landschaft'},\n    '6' : {'code':'BE','name':'Bern'},\n    '7' : {'code':'FR','name':'Fribourg'},\n    '8' : {'code':'GE','name':'Gen\u00E8ve'},\n    '9' : {'code':'GL','name':'Glarus'},\n    '10' : {'code':'GR','name':'Graub\u00FCnden'},\n    '11' : {'code':'JU','name':'Jura'},\n    '12' : {'code':'LU','name':'Lucerne'},\n    '13' : {'code':'NE','name':'Neuch\u00E2tel'},\n    '14' : {'code':'NW','name':'Nidwalden'},\n    '15' : {'code':'OW','name':'Obwalden'},\n    '16' : {'code':'SG','name':'St. Gallen'},\n    '17' : {'code':'SH','name':'Schaffhausen'},\n    '18' : {'code':'SZ','name':'Schwyz'},\n    '19' : {'code':'SO','name':'Solothurn'},\n    '20' : {'code':'TG','name':'Thurgau'},\n    '21' : {'code':'TI','name':'Ticino'},\n    '22' : {'code':'UR','name':'Uri'},\n    '23' : {'code':'VS','name':'Valais'},\n    '24' : {'code':'VD','name':'Vaud'},\n    '25' : {'code':'ZG','name':'Zug'},\n    '26' : {'code':'ZH','name':'Z\u00FCrich'}\n  },\n  'SY':{\n    '1' : {'code':'HA','name':'Al Hasakah'},\n    '2' : {'code':'LA','name':'Al Ladhiqiyah'},\n    '3' : {'code':'QU','name':'Al Qunaytirah'},\n    '4' : {'code':'RQ','name':'Ar Raqqah'},\n    '5' : {'code':'SU','name':'As Suwayda'},\n    '6' : {'code':'DA','name':'Dara'},\n    '7' : {'code':'DZ','name':'Dayr az Zawr'},\n    '8' : {'code':'DI','name':'Dimashq'},\n    '9' : {'code':'HL','name':'Halab'},\n    '10' : {'code':'HM','name':'Hamah'},\n    '11' : {'code':'HI','name':'Hims'},\n    '12' : {'code':'ID','name':'Idlib'},\n    '13' : {'code':'RD','name':'Rif Dimashq'},\n    '14' : {'code':'TA','name':'Tartus'}\n  },\n  'TW':{\n    '1' : {'code':'CH','name':'Chang-hua'},\n    '2' : {'code':'CI','name':'Chia-i'},\n    '3' : {'code':'HS','name':'Hsin-chu'},\n    '4' : {'code':'HL','name':'Hua-lien'},\n    '5' : {'code':'IL','name':'I-lan'},\n    '6' : {'code':'KH','name':'Kao-hsiung county'},\n    '7' : {'code':'KM','name':'Kin-men'},\n    '8' : {'code':'LC','name':'Lien-chiang'},\n    '9' : {'code':'ML','name':'Miao-li'},\n    '10' : {'code':'NT','name':'Nan-t\\'ou'},\n    '11' : {'code':'PH','name':'P\\'eng-hu'},\n    '12' : {'code':'PT','name':'P\\'ing-tung'},\n    '13' : {'code':'TG','name':'T\\'ai-chung'},\n    '14' : {'code':'TA','name':'T\\'ai-nan'},\n    '15' : {'code':'TP','name':'T\\'ai-pei county'},\n    '16' : {'code':'TT','name':'T\\'ai-tung'},\n    '17' : {'code':'TY','name':'T\\'ao-yuan'},\n    '18' : {'code':'YL','name':'Yun-lin'},\n    '19' : {'code':'CC','name':'Chia-i city'},\n    '20' : {'code':'CL','name':'Chi-lung'},\n    '21' : {'code':'HC','name':'Hsin-chu'},\n    '22' : {'code':'TH','name':'T\\'ai-chung'},\n    '23' : {'code':'TN','name':'T\\'ai-nan'},\n    '24' : {'code':'KC','name':'Kao-hsiung city'},\n    '25' : {'code':'TC','name':'T\\'ai-pei city'}\n  },\n  'TJ':{\n    '1' : {'code':'GB','name':'Gorno-Badakhstan'},\n    '2' : {'code':'KT','name':'Khatlon'},\n    '3' : {'code':'SU','name':'Sughd'}\n  },\n  'TZ':{\n    '1' : {'code':'AR','name':'Arusha'},\n    '2' : {'code':'DS','name':'Dar es Salaam'},\n    '3' : {'code':'DO','name':'Dodoma'},\n    '4' : {'code':'IR','name':'Iringa'},\n    '5' : {'code':'KA','name':'Kagera'},\n    '6' : {'code':'KI','name':'Kigoma'},\n    '7' : {'code':'KJ','name':'Kilimanjaro'},\n    '8' : {'code':'LN','name':'Lindi'},\n    '9' : {'code':'MY','name':'Manyara'},\n    '10' : {'code':'MR','name':'Mara'},\n    '11' : {'code':'MB','name':'Mbeya'},\n    '12' : {'code':'MO','name':'Morogoro'},\n    '13' : {'code':'MT','name':'Mtwara'},\n    '14' : {'code':'MW','name':'Mwanza'},\n    '15' : {'code':'PN','name':'Pemba North'},\n    '16' : {'code':'PS','name':'Pemba South'},\n    '17' : {'code':'PW','name':'Pwani'},\n    '18' : {'code':'RK','name':'Rukwa'},\n    '19' : {'code':'RV','name':'Ruvuma'},\n    '20' : {'code':'SH','name':'Shinyanga'},\n    '21' : {'code':'SI','name':'Singida'},\n    '22' : {'code':'TB','name':'Tabora'},\n    '23' : {'code':'TN','name':'Tanga'},\n    '24' : {'code':'ZC','name':'Zanzibar Central/South'},\n    '25' : {'code':'ZN','name':'Zanzibar North'},\n    '26' : {'code':'ZU','name':'Zanzibar Urban/West'}\n  },\n  'TH':{\n    '1' : {'code':'Amnat Charoen','name':'Amnat Charoen'},\n    '2' : {'code':'Ang Thong','name':'Ang Thong'},\n    '3' : {'code':'Ayutthaya','name':'Ayutthaya'},\n    '4' : {'code':'Bangkok','name':'Bangkok'},\n    '5' : {'code':'Buriram','name':'Buriram'},\n    '6' : {'code':'Chachoengsao','name':'Chachoengsao'},\n    '7' : {'code':'Chai Nat','name':'Chai Nat'},\n    '8' : {'code':'Chaiyaphum','name':'Chaiyaphum'},\n    '9' : {'code':'Chanthaburi','name':'Chanthaburi'},\n    '10' : {'code':'Chiang Mai','name':'Chiang Mai'},\n    '11' : {'code':'Chiang Rai','name':'Chiang Rai'},\n    '12' : {'code':'Chon Buri','name':'Chon Buri'},\n    '13' : {'code':'Chumphon','name':'Chumphon'},\n    '14' : {'code':'Kalasin','name':'Kalasin'},\n    '15' : {'code':'Kamphaeng Phet','name':'Kamphaeng Phet'},\n    '16' : {'code':'Kanchanaburi','name':'Kanchanaburi'},\n    '17' : {'code':'Khon Kaen','name':'Khon Kaen'},\n    '18' : {'code':'Krabi','name':'Krabi'},\n    '19' : {'code':'Lampang','name':'Lampang'},\n    '20' : {'code':'Lamphun','name':'Lamphun'},\n    '21' : {'code':'Loei','name':'Loei'},\n    '22' : {'code':'Lop Buri','name':'Lop Buri'},\n    '23' : {'code':'Mae Hong Son','name':'Mae Hong Son'},\n    '24' : {'code':'Maha Sarakham','name':'Maha Sarakham'},\n    '25' : {'code':'Mukdahan','name':'Mukdahan'},\n    '26' : {'code':'Nakhon Nayok','name':'Nakhon Nayok'},\n    '27' : {'code':'Nakhon Pathom','name':'Nakhon Pathom'},\n    '28' : {'code':'Nakhon Phanom','name':'Nakhon Phanom'},\n    '29' : {'code':'Nakhon Ratchasima','name':'Nakhon Ratchasima'},\n    '30' : {'code':'Nakhon Sawan','name':'Nakhon Sawan'},\n    '31' : {'code':'Nakhon Si Thammarat','name':'Nakhon Si Thammarat'},\n    '32' : {'code':'Nan','name':'Nan'},\n    '33' : {'code':'Narathiwat','name':'Narathiwat'},\n    '34' : {'code':'Nong Bua Lamphu','name':'Nong Bua Lamphu'},\n    '35' : {'code':'Nong Khai','name':'Nong Khai'},\n    '36' : {'code':'Nonthaburi','name':'Nonthaburi'},\n    '37' : {'code':'Pathum Thani','name':'Pathum Thani'},\n    '38' : {'code':'Pattani','name':'Pattani'},\n    '39' : {'code':'Phangnga','name':'Phangnga'},\n    '40' : {'code':'Phatthalung','name':'Phatthalung'},\n    '41' : {'code':'Phayao','name':'Phayao'},\n    '42' : {'code':'Phetchabun','name':'Phetchabun'},\n    '43' : {'code':'Phetchaburi','name':'Phetchaburi'},\n    '44' : {'code':'Phichit','name':'Phichit'},\n    '45' : {'code':'Phitsanulok','name':'Phitsanulok'},\n    '46' : {'code':'Phrae','name':'Phrae'},\n    '47' : {'code':'Phuket','name':'Phuket'},\n    '48' : {'code':'Prachin Buri','name':'Prachin Buri'},\n    '49' : {'code':'Prachuap Khiri Khan','name':'Prachuap Khiri Khan'},\n    '50' : {'code':'Ranong','name':'Ranong'},\n    '51' : {'code':'Ratchaburi','name':'Ratchaburi'},\n    '52' : {'code':'Rayong','name':'Rayong'},\n    '53' : {'code':'Roi Et','name':'Roi Et'},\n    '54' : {'code':'Sa Kaeo','name':'Sa Kaeo'},\n    '55' : {'code':'Sakon Nakhon','name':'Sakon Nakhon'},\n    '56' : {'code':'Samut Prakan','name':'Samut Prakan'},\n    '57' : {'code':'Samut Sakhon','name':'Samut Sakhon'},\n    '58' : {'code':'Samut Songkhram','name':'Samut Songkhram'},\n    '59' : {'code':'Sara Buri','name':'Sara Buri'},\n    '60' : {'code':'Satun','name':'Satun'},\n    '61' : {'code':'Sing Buri','name':'Sing Buri'},\n    '62' : {'code':'Sisaket','name':'Sisaket'},\n    '63' : {'code':'Songkhla','name':'Songkhla'},\n    '64' : {'code':'Sukhothai','name':'Sukhothai'},\n    '65' : {'code':'Suphan Buri','name':'Suphan Buri'},\n    '66' : {'code':'Surat Thani','name':'Surat Thani'},\n    '67' : {'code':'Surin','name':'Surin'},\n    '68' : {'code':'Tak','name':'Tak'},\n    '69' : {'code':'Trang','name':'Trang'},\n    '70' : {'code':'Trat','name':'Trat'},\n    '71' : {'code':'Ubon Ratchathani','name':'Ubon Ratchathani'},\n    '72' : {'code':'Udon Thani','name':'Udon Thani'},\n    '73' : {'code':'Uthai Thani','name':'Uthai Thani'},\n    '74' : {'code':'Uttaradit','name':'Uttaradit'},\n    '75' : {'code':'Yala','name':'Yala'},\n    '76' : {'code':'Yasothon','name':'Yasothon'}\n  },\n  'TG':{\n    '1' : {'code':'K','name':'Kara'},\n    '2' : {'code':'P','name':'Plateaux'},\n    '3' : {'code':'S','name':'Savanes'},\n    '4' : {'code':'C','name':'Centrale'},\n    '5' : {'code':'M','name':'Maritime'}\n  },\n  'TK':{\n    '1' : {'code':'A','name':'Atafu'},\n    '2' : {'code':'F','name':'Fakaofo'},\n    '3' : {'code':'N','name':'Nukunonu'}\n  },\n  'TO':{\n    '1' : {'code':'H','name':'Ha\\'apai'},\n    '2' : {'code':'T','name':'Tongatapu'},\n    '3' : {'code':'V','name':'Vava\\'u'}\n  },\n  'TT':{\n    '1' : {'code':'CT','name':'Couva/Tabaquite/Talparo'},\n    '2' : {'code':'DM','name':'Diego Martin'},\n    '3' : {'code':'MR','name':'Mayaro/Rio Claro'},\n    '4' : {'code':'PD','name':'Penal/Debe'},\n    '5' : {'code':'PT','name':'Princes Town'},\n    '6' : {'code':'SG','name':'Sangre Grande'},\n    '7' : {'code':'SL','name':'San Juan/Laventille'},\n    '8' : {'code':'SI','name':'Siparia'},\n    '9' : {'code':'TP','name':'Tunapuna/Piarco'},\n    '10' : {'code':'PS','name':'Port of Spain'},\n    '11' : {'code':'SF','name':'San Fernando'},\n    '12' : {'code':'AR','name':'Arima'},\n    '13' : {'code':'PF','name':'Point Fortin'},\n    '14' : {'code':'CH','name':'Chaguanas'},\n    '15' : {'code':'TO','name':'Tobago'}\n  },\n  'TN':{\n    '1' : {'code':'AR','name':'Ariana'},\n    '2' : {'code':'BJ','name':'Beja'},\n    '3' : {'code':'BA','name':'Ben Arous'},\n    '4' : {'code':'BI','name':'Bizerte'},\n    '5' : {'code':'GB','name':'Gabes'},\n    '6' : {'code':'GF','name':'Gafsa'},\n    '7' : {'code':'JE','name':'Jendouba'},\n    '8' : {'code':'KR','name':'Kairouan'},\n    '9' : {'code':'KS','name':'Kasserine'},\n    '10' : {'code':'KB','name':'Kebili'},\n    '11' : {'code':'KF','name':'Kef'},\n    '12' : {'code':'MH','name':'Mahdia'},\n    '13' : {'code':'MN','name':'Manouba'},\n    '14' : {'code':'ME','name':'Medenine'},\n    '15' : {'code':'MO','name':'Monastir'},\n    '16' : {'code':'NA','name':'Nabeul'},\n    '17' : {'code':'SF','name':'Sfax'},\n    '18' : {'code':'SD','name':'Sidi'},\n    '19' : {'code':'SL','name':'Siliana'},\n    '20' : {'code':'SO','name':'Sousse'},\n    '21' : {'code':'TA','name':'Tataouine'},\n    '22' : {'code':'TO','name':'Tozeur'},\n    '23' : {'code':'TU','name':'Tunis'},\n    '24' : {'code':'ZA','name':'Zaghouan'}\n  },\n  'TR':{\n    '1' : {'code':'ADA','name':'Adana'},\n    '2' : {'code':'ADI','name':'Adiyaman'},\n    '3' : {'code':'AFY','name':'Afyonkarahisar'},\n    '4' : {'code':'AGR','name':'Agri'},\n    '5' : {'code':'AKS','name':'Aksaray'},\n    '6' : {'code':'AMA','name':'Amasya'},\n    '7' : {'code':'ANK','name':'Ankara'},\n    '8' : {'code':'ANT','name':'Antalya'},\n    '9' : {'code':'ARD','name':'Ardahan'},\n    '10' : {'code':'ART','name':'Artvin'},\n    '11' : {'code':'AYI','name':'Aydin'},\n    '12' : {'code':'BAL','name':'Balikesir'},\n    '13' : {'code':'BAR','name':'Bartin'},\n    '14' : {'code':'BAT','name':'Batman'},\n    '15' : {'code':'BAY','name':'Bayburt'},\n    '16' : {'code':'BIL','name':'Bilecik'},\n    '17' : {'code':'BIN','name':'Bingol'},\n    '18' : {'code':'BIT','name':'Bitlis'},\n    '19' : {'code':'BOL','name':'Bolu'},\n    '20' : {'code':'BRD','name':'Burdur'},\n    '21' : {'code':'BRS','name':'Bursa'},\n    '22' : {'code':'CKL','name':'Canakkale'},\n    '23' : {'code':'CKR','name':'Cankiri'},\n    '24' : {'code':'COR','name':'Corum'},\n    '25' : {'code':'DEN','name':'Denizli'},\n    '26' : {'code':'DIY','name':'Diyarbakir'},\n    '27' : {'code':'DUZ','name':'Duzce'},\n    '28' : {'code':'EDI','name':'Edirne'},\n    '29' : {'code':'ELA','name':'Elazig'},\n    '30' : {'code':'EZC','name':'Erzincan'},\n    '31' : {'code':'EZR','name':'Erzurum'},\n    '32' : {'code':'ESK','name':'Eskisehir'},\n    '33' : {'code':'GAZ','name':'Gaziantep'},\n    '34' : {'code':'GIR','name':'Giresun'},\n    '35' : {'code':'GMS','name':'Gumushane'},\n    '36' : {'code':'HKR','name':'Hakkari'},\n    '37' : {'code':'HTY','name':'Hatay'},\n    '38' : {'code':'IGD','name':'Igdir'},\n    '39' : {'code':'ISP','name':'Isparta'},\n    '40' : {'code':'IST','name':'Istanbul'},\n    '41' : {'code':'IZM','name':'Izmir'},\n    '42' : {'code':'KAH','name':'Kahramanmaras'},\n    '43' : {'code':'KRB','name':'Karabuk'},\n    '44' : {'code':'KRM','name':'Karaman'},\n    '45' : {'code':'KRS','name':'Kars'},\n    '46' : {'code':'KAS','name':'Kastamonu'},\n    '47' : {'code':'KAY','name':'Kayseri'},\n    '48' : {'code':'KLS','name':'Kilis'},\n    '49' : {'code':'KRK','name':'Kirikkale'},\n    '50' : {'code':'KLR','name':'Kirklareli'},\n    '51' : {'code':'KRH','name':'Kirsehir'},\n    '52' : {'code':'KOC','name':'Kocaeli'},\n    '53' : {'code':'KON','name':'Konya'},\n    '54' : {'code':'KUT','name':'Kutahya'},\n    '55' : {'code':'MAL','name':'Malatya'},\n    '56' : {'code':'MAN','name':'Manisa'},\n    '57' : {'code':'MAR','name':'Mardin'},\n    '58' : {'code':'MER','name':'Mersin'},\n    '59' : {'code':'MUG','name':'Mugla'},\n    '60' : {'code':'MUS','name':'Mus'},\n    '61' : {'code':'NEV','name':'Nevsehir'},\n    '62' : {'code':'NIG','name':'Nigde'},\n    '63' : {'code':'ORD','name':'Ordu'},\n    '64' : {'code':'OSM','name':'Osmaniye'},\n    '65' : {'code':'RIZ','name':'Rize'},\n    '66' : {'code':'SAK','name':'Sakarya'},\n    '67' : {'code':'SAM','name':'Samsun'},\n    '68' : {'code':'SAN','name':'Sanliurfa'},\n    '69' : {'code':'SII','name':'Siirt'},\n    '70' : {'code':'SIN','name':'Sinop'},\n    '71' : {'code':'SIR','name':'Sirnak'},\n    '72' : {'code':'SIV','name':'Sivas'},\n    '73' : {'code':'TEL','name':'Tekirdag'},\n    '74' : {'code':'TOK','name':'Tokat'},\n    '75' : {'code':'TRA','name':'Trabzon'},\n    '76' : {'code':'TUN','name':'Tunceli'},\n    '77' : {'code':'USK','name':'Usak'},\n    '78' : {'code':'VAN','name':'Van'},\n    '79' : {'code':'YAL','name':'Yalova'},\n    '80' : {'code':'YOZ','name':'Yozgat'},\n    '81' : {'code':'ZON','name':'Zonguldak'}\n  },\n  'TM':{\n    '1' : {'code':'A','name':'Ahal Welayaty'},\n    '2' : {'code':'B','name':'Balkan Welayaty'},\n    '3' : {'code':'D','name':'Dashhowuz Welayaty'},\n    '4' : {'code':'L','name':'Lebap Welayaty'},\n    '5' : {'code':'M','name':'Mary Welayaty'}\n  },\n  'TC':{\n    '1' : {'code':'AC','name':'Ambergris Cays'},\n    '2' : {'code':'DC','name':'Dellis Cay'},\n    '3' : {'code':'FC','name':'French Cay'},\n    '4' : {'code':'LW','name':'Little Water Cay'},\n    '5' : {'code':'RC','name':'Parrot Cay'},\n    '6' : {'code':'PN','name':'Pine Cay'},\n    '7' : {'code':'SL','name':'Salt Cay'},\n    '8' : {'code':'GT','name':'Grand Turk'},\n    '9' : {'code':'SC','name':'South Caicos'},\n    '10' : {'code':'EC','name':'East Caicos'},\n    '11' : {'code':'MC','name':'Middle Caicos'},\n    '12' : {'code':'NC','name':'North Caicos'},\n    '13' : {'code':'PR','name':'Providenciales'},\n    '14' : {'code':'WC','name':'West Caicos'}\n  },\n  'TV':{\n    '1' : {'code':'NMG','name':'Nanumanga'},\n    '2' : {'code':'NLK','name':'Niulakita'},\n    '3' : {'code':'NTO','name':'Niutao'},\n    '4' : {'code':'FUN','name':'Funafuti'},\n    '5' : {'code':'NME','name':'Nanumea'},\n    '6' : {'code':'NUI','name':'Nui'},\n    '7' : {'code':'NFT','name':'Nukufetau'},\n    '8' : {'code':'NLL','name':'Nukulaelae'},\n    '9' : {'code':'VAI','name':'Vaitupu'}\n  },\n  'UG':{\n    '1' : {'code':'KAL','name':'Kalangala'},\n    '2' : {'code':'KMP','name':'Kampala'},\n    '3' : {'code':'KAY','name':'Kayunga'},\n    '4' : {'code':'KIB','name':'Kiboga'},\n    '5' : {'code':'LUW','name':'Luwero'},\n    '6' : {'code':'MAS','name':'Masaka'},\n    '7' : {'code':'MPI','name':'Mpigi'},\n    '8' : {'code':'MUB','name':'Mubende'},\n    '9' : {'code':'MUK','name':'Mukono'},\n    '10' : {'code':'NKS','name':'Nakasongola'},\n    '11' : {'code':'RAK','name':'Rakai'},\n    '12' : {'code':'SEM','name':'Sembabule'},\n    '13' : {'code':'WAK','name':'Wakiso'},\n    '14' : {'code':'BUG','name':'Bugiri'},\n    '15' : {'code':'BUS','name':'Busia'},\n    '16' : {'code':'IGA','name':'Iganga'},\n    '17' : {'code':'JIN','name':'Jinja'},\n    '18' : {'code':'KAB','name':'Kaberamaido'},\n    '19' : {'code':'KML','name':'Kamuli'},\n    '20' : {'code':'KPC','name':'Kapchorwa'},\n    '21' : {'code':'KTK','name':'Katakwi'},\n    '22' : {'code':'KUM','name':'Kumi'},\n    '23' : {'code':'MAY','name':'Mayuge'},\n    '24' : {'code':'MBA','name':'Mbale'},\n    '25' : {'code':'PAL','name':'Pallisa'},\n    '26' : {'code':'SIR','name':'Sironko'},\n    '27' : {'code':'SOR','name':'Soroti'},\n    '28' : {'code':'TOR','name':'Tororo'},\n    '29' : {'code':'ADJ','name':'Adjumani'},\n    '30' : {'code':'APC','name':'Apac'},\n    '31' : {'code':'ARU','name':'Arua'},\n    '32' : {'code':'GUL','name':'Gulu'},\n    '33' : {'code':'KIT','name':'Kitgum'},\n    '34' : {'code':'KOT','name':'Kotido'},\n    '35' : {'code':'LIR','name':'Lira'},\n    '36' : {'code':'MRT','name':'Moroto'},\n    '37' : {'code':'MOY','name':'Moyo'},\n    '38' : {'code':'NAK','name':'Nakapiripirit'},\n    '39' : {'code':'NEB','name':'Nebbi'},\n    '40' : {'code':'PAD','name':'Pader'},\n    '41' : {'code':'YUM','name':'Yumbe'},\n    '42' : {'code':'BUN','name':'Bundibugyo'},\n    '43' : {'code':'BSH','name':'Bushenyi'},\n    '44' : {'code':'HOI','name':'Hoima'},\n    '45' : {'code':'KBL','name':'Kabale'},\n    '46' : {'code':'KAR','name':'Kabarole'},\n    '47' : {'code':'KAM','name':'Kamwenge'},\n    '48' : {'code':'KAN','name':'Kanungu'},\n    '49' : {'code':'KAS','name':'Kasese'},\n    '50' : {'code':'KBA','name':'Kibaale'},\n    '51' : {'code':'KIS','name':'Kisoro'},\n    '52' : {'code':'KYE','name':'Kyenjojo'},\n    '53' : {'code':'MSN','name':'Masindi'},\n    '54' : {'code':'MBR','name':'Mbarara'},\n    '55' : {'code':'NTU','name':'Ntungamo'},\n    '56' : {'code':'RUK','name':'Rukungiri'}\n  },\n  'UA':{\n    '1' : {'code':'CK','name':'Cherkasy'},\n    '2' : {'code':'CH','name':'Chernihiv'},\n    '3' : {'code':'CV','name':'Chernivtsi'},\n    '4' : {'code':'CR','name':'Crimea'},\n    '5' : {'code':'DN','name':'Dnipropetrovs\\'k'},\n    '6' : {'code':'DO','name':'Donets\\'k'},\n    '7' : {'code':'IV','name':'Ivano-Frankivs\\'k'},\n    '8' : {'code':'KL','name':'Kharkiv Kherson'},\n    '9' : {'code':'KM','name':'Khmel\\'nyts\\'kyy'},\n    '10' : {'code':'KR','name':'Kirovohrad'},\n    '11' : {'code':'KV','name':'Kiev'},\n    '12' : {'code':'KY','name':'Kyyiv'},\n    '13' : {'code':'LU','name':'Luhans\\'k'},\n    '14' : {'code':'LV','name':'L\\'viv'},\n    '15' : {'code':'MY','name':'Mykolayiv'},\n    '16' : {'code':'OD','name':'Odesa'},\n    '17' : {'code':'PO','name':'Poltava'},\n    '18' : {'code':'RI','name':'Rivne'},\n    '19' : {'code':'SE','name':'Sevastopol'},\n    '20' : {'code':'SU','name':'Sumy'},\n    '21' : {'code':'TE','name':'Ternopil\\''},\n    '22' : {'code':'VI','name':'Vinnytsya'},\n    '23' : {'code':'VO','name':'Volyn\\''},\n    '24' : {'code':'ZK','name':'Zakarpattya'},\n    '25' : {'code':'ZA','name':'Zaporizhzhya'},\n    '26' : {'code':'ZH','name':'Zhytomyr'}\n  },\n  'AE':{\n    '1' : {'code':'AZ','name':'Abu Zaby'},\n    '2' : {'code':'AJ','name':'\\'Ajman'},\n    '3' : {'code':'FU','name':'Al Fujayrah'},\n    '4' : {'code':'SH','name':'Ash Shariqah'},\n    '5' : {'code':'DU','name':'Dubayy'},\n    '6' : {'code':'RK','name':'R\\'as al Khaymah'},\n    '7' : {'code':'UQ','name':'Umm al Qaywayn'}\n  },\n  'GB':{\n    '1' : {'code':'ABN','name':'Aberdeen'},\n    '2' : {'code':'ABNS','name':'Aberdeenshire'},\n    '3' : {'code':'ANG','name':'Anglesey'},\n    '4' : {'code':'AGS','name':'Angus'},\n    '5' : {'code':'ARY','name':'Argyll and Bute'},\n    '6' : {'code':'BEDS','name':'Bedfordshire'},\n    '7' : {'code':'BERKS','name':'Berkshire'},\n    '8' : {'code':'BLA','name':'Blaenau Gwent'},\n    '9' : {'code':'BRI','name':'Bridgend'},\n    '10' : {'code':'BSTL','name':'Bristol'},\n    '11' : {'code':'BUCKS','name':'Buckinghamshire'},\n    '12' : {'code':'CAE','name':'Caerphilly'},\n    '13' : {'code':'CAMBS','name':'Cambridgeshire'},\n    '14' : {'code':'CDF','name':'Cardiff'},\n    '15' : {'code':'CARM','name':'Carmarthenshire'},\n    '16' : {'code':'CDGN','name':'Ceredigion'},\n    '17' : {'code':'CHES','name':'Cheshire'},\n    '18' : {'code':'CLACK','name':'Clackmannanshire'},\n    '19' : {'code':'CON','name':'Conwy'},\n    '20' : {'code':'CORN','name':'Cornwall'},\n    '21' : {'code':'DNBG','name':'Denbighshire'},\n    '22' : {'code':'DERBY','name':'Derbyshire'},\n    '23' : {'code':'DVN','name':'Devon'},\n    '24' : {'code':'DOR','name':'Dorset'},\n    '25' : {'code':'DGL','name':'Dumfries and Galloway'},\n    '26' : {'code':'DUND','name':'Dundee'},\n    '27' : {'code':'DHM','name':'Durham'},\n    '28' : {'code':'ARYE','name':'East Ayrshire'},\n    '29' : {'code':'DUNBE','name':'East Dunbartonshire'},\n    '30' : {'code':'LOTE','name':'East Lothian'},\n    '31' : {'code':'RENE','name':'East Renfrewshire'},\n    '32' : {'code':'ERYS','name':'East Riding of Yorkshire'},\n    '33' : {'code':'SXE','name':'East Sussex'},\n    '34' : {'code':'EDIN','name':'Edinburgh'},\n    '35' : {'code':'ESX','name':'Essex'},\n    '36' : {'code':'FALK','name':'Falkirk'},\n    '37' : {'code':'FFE','name':'Fife'},\n    '38' : {'code':'FLINT','name':'Flintshire'},\n    '39' : {'code':'GLAS','name':'Glasgow'},\n    '40' : {'code':'GLOS','name':'Gloucestershire'},\n    '41' : {'code':'LDN','name':'Greater London'},\n    '42' : {'code':'MCH','name':'Greater Manchester'},\n    '43' : {'code':'GDD','name':'Gwynedd'},\n    '44' : {'code':'HANTS','name':'Hampshire'},\n    '45' : {'code':'HWR','name':'Herefordshire'},\n    '46' : {'code':'HERTS','name':'Hertfordshire'},\n    '47' : {'code':'HLD','name':'Highlands'},\n    '48' : {'code':'IVER','name':'Inverclyde'},\n    '49' : {'code':'IOW','name':'Isle of Wight'},\n    '50' : {'code':'KNT','name':'Kent'},\n    '51' : {'code':'LANCS','name':'Lancashire'},\n    '52' : {'code':'LEICS','name':'Leicestershire'},\n    '53' : {'code':'LINCS','name':'Lincolnshire'},\n    '54' : {'code':'MSY','name':'Merseyside'},\n    '55' : {'code':'MERT','name':'Merthyr Tydfil'},\n    '56' : {'code':'MLOT','name':'Midlothian'},\n    '57' : {'code':'MMOUTH','name':'Monmouthshire'},\n    '58' : {'code':'MORAY','name':'Moray'},\n    '59' : {'code':'NPRTAL','name':'Neath Port Talbot'},\n    '60' : {'code':'NEWPT','name':'Newport'},\n    '61' : {'code':'NOR','name':'Norfolk'},\n    '62' : {'code':'ARYN','name':'North Ayrshire'},\n    '63' : {'code':'LANN','name':'North Lanarkshire'},\n    '64' : {'code':'YSN','name':'North Yorkshire'},\n    '65' : {'code':'NHM','name':'Northamptonshire'},\n    '66' : {'code':'NLD','name':'Northumberland'},\n    '67' : {'code':'NOT','name':'Nottinghamshire'},\n    '68' : {'code':'ORK','name':'Orkney Islands'},\n    '69' : {'code':'OFE','name':'Oxfordshire'},\n    '70' : {'code':'PEM','name':'Pembrokeshire'},\n    '71' : {'code':'PERTH','name':'Perth and Kinross'},\n    '72' : {'code':'PWS','name':'Powys'},\n    '73' : {'code':'REN','name':'Renfrewshire'},\n    '74' : {'code':'RHON','name':'Rhondda Cynon Taff'},\n    '75' : {'code':'RUT','name':'Rutland'},\n    '76' : {'code':'BOR','name':'Scottish Borders'},\n    '77' : {'code':'SHET','name':'Shetland Islands'},\n    '78' : {'code':'SPE','name':'Shropshire'},\n    '79' : {'code':'SOM','name':'Somerset'},\n    '80' : {'code':'ARYS','name':'South Ayrshire'},\n    '81' : {'code':'LANS','name':'South Lanarkshire'},\n    '82' : {'code':'YSS','name':'South Yorkshire'},\n    '83' : {'code':'SFD','name':'Staffordshire'},\n    '84' : {'code':'STIR','name':'Stirling'},\n    '85' : {'code':'SFK','name':'Suffolk'},\n    '86' : {'code':'SRY','name':'Surrey'},\n    '87' : {'code':'SWAN','name':'Swansea'},\n    '88' : {'code':'TORF','name':'Torfaen'},\n    '89' : {'code':'TWR','name':'Tyne and Wear'},\n    '90' : {'code':'VGLAM','name':'Vale of Glamorgan'},\n    '91' : {'code':'WARKS','name':'Warwickshire'},\n    '92' : {'code':'WDUN','name':'West Dunbartonshire'},\n    '93' : {'code':'WLOT','name':'West Lothian'},\n    '94' : {'code':'WMD','name':'West Midlands'},\n    '95' : {'code':'SXW','name':'West Sussex'},\n    '96' : {'code':'YSW','name':'West Yorkshire'},\n    '97' : {'code':'WIL','name':'Western Isles'},\n    '98' : {'code':'WLT','name':'Wiltshire'},\n    '99' : {'code':'WORCS','name':'Worcestershire'},\n    '100' : {'code':'WRX','name':'Wrexham'}\n  },\n  'US':{\n    '1' : {'code':'AL','name':'Alabama'},\n    '2' : {'code':'AK','name':'Alaska'},\n    '3' : {'code':'AS','name':'American Samoa'},\n    '4' : {'code':'AZ','name':'Arizona'},\n    '5' : {'code':'AR','name':'Arkansas'},\n    '6' : {'code':'AF','name':'Armed Forces Africa'},\n    '7' : {'code':'AA','name':'Armed Forces Americas'},\n    '8' : {'code':'AC','name':'Armed Forces Canada'},\n    '9' : {'code':'AE','name':'Armed Forces Europe'},\n    '10' : {'code':'AM','name':'Armed Forces Middle East'},\n    '11' : {'code':'AP','name':'Armed Forces Pacific'},\n    '12' : {'code':'CA','name':'California'},\n    '13' : {'code':'CO','name':'Colorado'},\n    '14' : {'code':'CT','name':'Connecticut'},\n    '15' : {'code':'DE','name':'Delaware'},\n    '16' : {'code':'DC','name':'District of Columbia'},\n    '17' : {'code':'FM','name':'Federated States Of Micronesia'},\n    '18' : {'code':'FL','name':'Florida'},\n    '19' : {'code':'GA','name':'Georgia'},\n    '20' : {'code':'GU','name':'Guam'},\n    '21' : {'code':'HI','name':'Hawaii'},\n    '22' : {'code':'ID','name':'Idaho'},\n    '23' : {'code':'IL','name':'Illinois'},\n    '24' : {'code':'IN','name':'Indiana'},\n    '25' : {'code':'IA','name':'Iowa'},\n    '26' : {'code':'KS','name':'Kansas'},\n    '27' : {'code':'KY','name':'Kentucky'},\n    '28' : {'code':'LA','name':'Louisiana'},\n    '29' : {'code':'ME','name':'Maine'},\n    '30' : {'code':'MH','name':'Marshall Islands'},\n    '31' : {'code':'MD','name':'Maryland'},\n    '32' : {'code':'MA','name':'Massachusetts'},\n    '33' : {'code':'MI','name':'Michigan'},\n    '34' : {'code':'MN','name':'Minnesota'},\n    '35' : {'code':'MS','name':'Mississippi'},\n    '36' : {'code':'MO','name':'Missouri'},\n    '37' : {'code':'MT','name':'Montana'},\n    '38' : {'code':'NE','name':'Nebraska'},\n    '39' : {'code':'NV','name':'Nevada'},\n    '40' : {'code':'NH','name':'New Hampshire'},\n    '41' : {'code':'NJ','name':'New Jersey'},\n    '42' : {'code':'NM','name':'New Mexico'},\n    '43' : {'code':'NY','name':'New York'},\n    '44' : {'code':'NC','name':'North Carolina'},\n    '45' : {'code':'ND','name':'North Dakota'},\n    '46' : {'code':'MP','name':'Northern Mariana Islands'},\n    '47' : {'code':'OH','name':'Ohio'},\n    '48' : {'code':'OK','name':'Oklahoma'},\n    '49' : {'code':'OR','name':'Oregon'},\n    '50' : {'code':'PW','name':'Palau'},\n    '51' : {'code':'PA','name':'Pennsylvania'},\n    '52' : {'code':'PR','name':'Puerto Rico'},\n    '53' : {'code':'RI','name':'Rhode Island'},\n    '54' : {'code':'SC','name':'South Carolina'},\n    '55' : {'code':'SD','name':'South Dakota'},\n    '56' : {'code':'TN','name':'Tennessee'},\n    '57' : {'code':'TX','name':'Texas'},\n    '58' : {'code':'UT','name':'Utah'},\n    '59' : {'code':'VT','name':'Vermont'},\n    '60' : {'code':'VI','name':'Virgin Islands'},\n    '61' : {'code':'VA','name':'Virginia'},\n    '62' : {'code':'WA','name':'Washington'},\n    '63' : {'code':'WV','name':'West Virginia'},\n    '64' : {'code':'WI','name':'Wisconsin'},\n    '65' : {'code':'WY','name':'Wyoming'}\n  },\n  'UM':{\n    '1' : {'code':'BI','name':'Baker Island'},\n    '2' : {'code':'HI','name':'Howland Island'},\n    '3' : {'code':'JI','name':'Jarvis Island'},\n    '4' : {'code':'JA','name':'Johnston Atoll'},\n    '5' : {'code':'KR','name':'Kingman Reef'},\n    '6' : {'code':'MA','name':'Midway Atoll'},\n    '7' : {'code':'NI','name':'Navassa Island'},\n    '8' : {'code':'PA','name':'Palmyra Atoll'},\n    '9' : {'code':'WI','name':'Wake Island'}\n  },\n  'UY':{\n    '1' : {'code':'AR','name':'Artigas'},\n    '2' : {'code':'CA','name':'Canelones'},\n    '3' : {'code':'CL','name':'Cerro Largo'},\n    '4' : {'code':'CO','name':'Colonia'},\n    '5' : {'code':'DU','name':'Durazno'},\n    '6' : {'code':'FS','name':'Flores'},\n    '7' : {'code':'FA','name':'Florida'},\n    '8' : {'code':'LA','name':'Lavalleja'},\n    '9' : {'code':'MA','name':'Maldonado'},\n    '10' : {'code':'MO','name':'Montevideo'},\n    '11' : {'code':'PA','name':'Paysandu'},\n    '12' : {'code':'RN','name':'Rio Negro'},\n    '13' : {'code':'RV','name':'Rivera'},\n    '14' : {'code':'RO','name':'Rocha'},\n    '15' : {'code':'SL','name':'Salto'},\n    '16' : {'code':'SJ','name':'San Jose'},\n    '17' : {'code':'SO','name':'Soriano'},\n    '18' : {'code':'TA','name':'Tacuarembo'},\n    '19' : {'code':'TT','name':'Treinta y Tres'}\n  },\n  'UZ':{\n    '1' : {'code':'AN','name':'Andijon'},\n    '2' : {'code':'BU','name':'Buxoro'},\n    '3' : {'code':'FA','name':'Farg\\'ona'},\n    '4' : {'code':'JI','name':'Jizzax'},\n    '5' : {'code':'NG','name':'Namangan'},\n    '6' : {'code':'NW','name':'Navoiy'},\n    '7' : {'code':'QA','name':'Qashqadaryo'},\n    '8' : {'code':'QR','name':'Qoraqalpog\\'iston Republikasi'},\n    '9' : {'code':'SA','name':'Samarqand'},\n    '10' : {'code':'SI','name':'Sirdaryo'},\n    '11' : {'code':'SU','name':'Surxondaryo'},\n    '12' : {'code':'TK','name':'Toshkent City'},\n    '13' : {'code':'TO','name':'Toshkent Region'},\n    '14' : {'code':'XO','name':'Xorazm'}\n  },\n  'VU':{\n    '1' : {'code':'MA','name':'Malampa'},\n    '2' : {'code':'PE','name':'Penama'},\n    '3' : {'code':'SA','name':'Sanma'},\n    '4' : {'code':'SH','name':'Shefa'},\n    '5' : {'code':'TA','name':'Tafea'},\n    '6' : {'code':'TO','name':'Torba'}\n  },\n  'VE':{\n    '1' : {'code':'AM','name':'Amazonas'},\n    '2' : {'code':'AN','name':'Anzoategui'},\n    '3' : {'code':'AP','name':'Apure'},\n    '4' : {'code':'AR','name':'Aragua'},\n    '5' : {'code':'BA','name':'Barinas'},\n    '6' : {'code':'BO','name':'Bolivar'},\n    '7' : {'code':'CA','name':'Carabobo'},\n    '8' : {'code':'CO','name':'Cojedes'},\n    '9' : {'code':'DA','name':'Delta Amacuro'},\n    '10' : {'code':'DF','name':'Dependencias Federales'},\n    '11' : {'code':'DI','name':'Distrito Federal'},\n    '12' : {'code':'FA','name':'Falcon'},\n    '13' : {'code':'GU','name':'Guarico'},\n    '14' : {'code':'LA','name':'Lara'},\n    '15' : {'code':'ME','name':'Merida'},\n    '16' : {'code':'MI','name':'Miranda'},\n    '17' : {'code':'MO','name':'Monagas'},\n    '18' : {'code':'NE','name':'Nueva Esparta'},\n    '19' : {'code':'PO','name':'Portuguesa'},\n    '20' : {'code':'SU','name':'Sucre'},\n    '21' : {'code':'TA','name':'Tachira'},\n    '22' : {'code':'TR','name':'Trujillo'},\n    '23' : {'code':'VA','name':'Vargas'},\n    '24' : {'code':'YA','name':'Yaracuy'},\n    '25' : {'code':'ZU','name':'Zulia'}\n  },\n  'VN':{\n    '1' : {'code':'AG','name':'An Giang'},\n    '2' : {'code':'BG','name':'Bac Giang'},\n    '3' : {'code':'BK','name':'Bac Kan'},\n    '4' : {'code':'BL','name':'Bac Lieu'},\n    '5' : {'code':'BC','name':'Bac Ninh'},\n    '6' : {'code':'BR','name':'Ba Ria-Vung Tau'},\n    '7' : {'code':'BN','name':'Ben Tre'},\n    '8' : {'code':'BH','name':'Binh Dinh'},\n    '9' : {'code':'BU','name':'Binh Duong'},\n    '10' : {'code':'BP','name':'Binh Phuoc'},\n    '11' : {'code':'BT','name':'Binh Thuan'},\n    '12' : {'code':'CM','name':'Ca Mau'},\n    '13' : {'code':'CT','name':'Can Tho'},\n    '14' : {'code':'CB','name':'Cao Bang'},\n    '15' : {'code':'DL','name':'Dak Lak'},\n    '16' : {'code':'DG','name':'Dak Nong'},\n    '17' : {'code':'DN','name':'Da Nang'},\n    '18' : {'code':'DB','name':'Dien Bien'},\n    '19' : {'code':'DI','name':'Dong Nai'},\n    '20' : {'code':'DT','name':'Dong Thap'},\n    '21' : {'code':'GL','name':'Gia Lai'},\n    '22' : {'code':'HG','name':'Ha Giang'},\n    '23' : {'code':'HD','name':'Hai Duong'},\n    '24' : {'code':'HP','name':'Hai Phong'},\n    '25' : {'code':'HM','name':'Ha Nam'},\n    '26' : {'code':'HI','name':'Ha Noi'},\n    '27' : {'code':'HT','name':'Ha Tay'},\n    '28' : {'code':'HH','name':'Ha Tinh'},\n    '29' : {'code':'HB','name':'Hoa Binh'},\n    '30' : {'code':'HC','name':'Ho Chin Minh'},\n    '31' : {'code':'HU','name':'Hau Giang'},\n    '32' : {'code':'HY','name':'Hung Yen'}\n  },\n  'VI':{\n    '1' : {'code':'C','name':'Saint Croix'},\n    '2' : {'code':'J','name':'Saint John'},\n    '3' : {'code':'T','name':'Saint Thomas'}\n  },\n  'WF':{\n    '1' : {'code':'A','name':'Alo'},\n    '2' : {'code':'S','name':'Sigave'},\n    '3' : {'code':'W','name':'Wallis'}\n  },\n  'YE':{\n    '1' : {'code':'AB','name':'Abyan'},\n    '2' : {'code':'AD','name':'Adan'},\n    '3' : {'code':'AM','name':'Amran'},\n    '4' : {'code':'BA','name':'Al Bayda'},\n    '5' : {'code':'DA','name':'Ad Dali'},\n    '6' : {'code':'DH','name':'Dhamar'},\n    '7' : {'code':'HD','name':'Hadramawt'},\n    '8' : {'code':'HJ','name':'Hajjah'},\n    '9' : {'code':'HU','name':'Al Hudaydah'},\n    '10' : {'code':'IB','name':'Ibb'},\n    '11' : {'code':'JA','name':'Al Jawf'},\n    '12' : {'code':'LA','name':'Lahij'},\n    '13' : {'code':'MA','name':'Ma\\'rib'},\n    '14' : {'code':'MR','name':'Al Mahrah'},\n    '15' : {'code':'MW','name':'Al Mahwit'},\n    '16' : {'code':'SD','name':'Sa\\'dah'},\n    '17' : {'code':'SN','name':'San\\'a'},\n    '18' : {'code':'SH','name':'Shabwah'},\n    '19' : {'code':'TA','name':'Ta\\'izz'}\n  },\n  'YU':{\n    '1' : {'code':'KOS','name':'Kosovo'},\n    '2' : {'code':'MON','name':'Montenegro'},\n    '3' : {'code':'SER','name':'Serbia'},\n    '4' : {'code':'VOJ','name':'Vojvodina'}\n  },\n  'ZR':{\n    '1' : {'code':'BC','name':'Bas-Congo'},\n    '2' : {'code':'BN','name':'Bandundu'},\n    '3' : {'code':'EQ','name':'Equateur'},\n    '4' : {'code':'KA','name':'Katanga'},\n    '5' : {'code':'KE','name':'Kasai-Oriental'},\n    '6' : {'code':'KN','name':'Kinshasa'},\n    '7' : {'code':'KW','name':'Kasai-Occidental'},\n    '8' : {'code':'MA','name':'Maniema'},\n    '9' : {'code':'NK','name':'Nord-Kivu'},\n    '10' : {'code':'OR','name':'Orientale'},\n    '11' : {'code':'SK','name':'Sud-Kivu'}\n  },\n  'ZM':{\n    '1' : {'code':'CE','name':'Central'},\n    '2' : {'code':'CB','name':'Copperbelt'},\n    '3' : {'code':'EA','name':'Eastern'},\n    '4' : {'code':'LP','name':'Luapula'},\n    '5' : {'code':'LK','name':'Lusaka'},\n    '6' : {'code':'NO','name':'Northern'},\n    '7' : {'code':'NW','name':'North-Western'},\n    '8' : {'code':'SO','name':'Southern'},\n    '9' : {'code':'WE','name':'Western'}\n  },\n  'ZW':{\n    '1' : {'code':'BU','name':'Bulawayo'},\n    '2' : {'code':'HA','name':'Harare'},\n    '3' : {'code':'ML','name':'Manicaland'},\n    '4' : {'code':'MC','name':'Mashonaland Central'},\n    '5' : {'code':'ME','name':'Mashonaland East'},\n    '6' : {'code':'MW','name':'Mashonaland West'},\n    '7' : {'code':'MV','name':'Masvingo'},\n    '8' : {'code':'MN','name':'Matabeleland North'},\n    '9' : {'code':'MS','name':'Matabeleland South'},\n    '10' : {'code':'MD','name':'Midlands'}\n  }\n};\n\n/* ==========================================================\n * bootstrap-formhelpers-timepicker.en_US.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2012 Vincent Lamanna\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n \nvar BFHTimePickerDelimiter = ':';\n\nvar BFHTimePickerModes = {\n  'am': 'AM',\n  'pm': 'PM'\n};\n/* ==========================================================\n * bootstrap-formhelpers-timezones.en_US.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2012 Vincent Lamanna\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n \nvar BFHTimezonesList = {\n  'AF': {\n    'Asia/Kabul': 'Kabul'\n  },\n  'AL': {\n    'Europe/Tirane': 'Tirane'\n  },\n  'DZ': {\n    'Africa/Algiers': 'Algiers'\n  },\n  'AS': {\n    'Pacific/Pago_Pago': 'Pago Pago'\n  },\n  'AD': {\n    'Europe/Andorra': 'Andorra'\n  },\n  'AO': {\n    'Africa/Luanda': 'Luanda'\n  },\n  'AI': {\n    'America/Anguilla': 'Anguilla'\n  },\n  'AQ': {\n    'Antarctica/Casey': 'Casey',\n    'Antarctica/Davis': 'Davis',\n    'Antarctica/DumontDUrville': 'DumontDUrville',\n    'Antarctica/Macquarie': 'Macquarie',\n    'Antarctica/Mawson': 'Mawson',\n    'Antarctica/McMurdo': 'McMurdo',\n    'Antarctica/Palmer': 'Palmer',\n    'Antarctica/Rothera': 'Rothera',\n    'Antarctica/South_Pole': 'South Pole',\n    'Antarctica/Syowa': 'Syowa',\n    'Antarctica/Vostok': 'Vostok'\n  },\n  'AG': {\n    'America/Antigua': 'Antigua'\n  },\n  'AR': {\n    'America/Argentina/Buenos_Aires': 'Argentina / Buenos Aires',\n    'America/Argentina/Catamarca': 'Argentina / Catamarca',\n    'America/Argentina/Cordoba': 'Argentina / Cordoba',\n    'America/Argentina/Jujuy': 'Argentina / Jujuy',\n    'America/Argentina/La_Rioja': 'Argentina / La Rioja',\n    'America/Argentina/Mendoza': 'Argentina / Mendoza',\n    'America/Argentina/Rio_Gallegos': 'Argentina / Rio Gallegos',\n    'America/Argentina/Salta': 'Argentina / Salta',\n    'America/Argentina/San_Juan': 'Argentina / San Juan',\n    'America/Argentina/San_Luis': 'Argentina / San Luis',\n    'America/Argentina/Tucuman': 'Argentina / Tucuman',\n    'America/Argentina/Ushuaia': 'Argentina / Ushuaia'\n  },\n  'AM': {\n    'Asia/Yerevan': 'Yerevan'\n  },\n  'AW': {\n    'America/Aruba': 'Aruba'\n  },\n  'AU': {\n    'Australia/Adelaide': 'Adelaide',\n    'Australia/Brisbane': 'Brisbane',\n    'Australia/Broken_Hill': 'Broken Hill',\n    'Australia/Currie': 'Currie',\n    'Australia/Darwin': 'Darwin',\n    'Australia/Eucla': 'Eucla',\n    'Australia/Hobart': 'Hobart',\n    'Australia/Lindeman': 'Lindeman',\n    'Australia/Lord_Howe': 'Lord Howe',\n    'Australia/Melbourne': 'Melbourne',\n    'Australia/Perth': 'Perth',\n    'Australia/Sydney': 'Sydney'\n  },\n  'AT': {\n    'Europe/Vienna': 'Vienna'\n  },\n  'AZ': {\n    'Asia/Baku': 'Baku'\n  },\n  'BH': {\n    'Asia/Bahrain': 'Bahrain'\n  },\n  'BD': {\n    'Asia/Dhaka': 'Dhaka'\n  },\n  'BB': {\n    'America/Barbados': 'Barbados'\n  },\n  'BY': {\n    'Europe/Minsk': 'Minsk'\n  },\n  'BE': {\n    'Europe/Brussels': 'Brussels'\n  },\n  'BZ': {\n    'America/Belize': 'Belize'\n  },\n  'BJ': {\n    'Africa/Porto-Novo': 'Porto-Novo'\n  },\n  'BM': {\n    'Atlantic/Bermuda': 'Bermuda'\n  },\n  'BT': {\n    'Asia/Thimphu': 'Thimphu'\n  },\n  'BO': {\n    'America/La_Paz': 'La Paz'\n  },\n  'BA': {\n    'Europe/Sarajevo': 'Sarajevo'\n  },\n  'BW': {\n    'Africa/Gaborone': 'Gaborone'\n  },\n  'BR': {\n    'America/Araguaina': 'Araguaina',\n    'America/Bahia': 'Bahia',\n    'America/Belem': 'Belem',\n    'America/Boa_Vista': 'Boa Vista',\n    'America/Campo_Grande': 'Campo Grande',\n    'America/Cuiaba': 'Cuiaba',\n    'America/Eirunepe': 'Eirunepe',\n    'America/Fortaleza': 'Fortaleza',\n    'America/Maceio': 'Maceio',\n    'America/Manaus': 'Manaus',\n    'America/Noronha': 'Noronha',\n    'America/Porto_Velho': 'Porto Velho',\n    'America/Recife': 'Recife',\n    'America/Rio_Branco': 'Rio Branco',\n    'America/Santarem': 'Santarem',\n    'America/Sao_Paulo': 'Sao Paulo'\n  },\n  'VG': {\n    'America/Tortola': 'Tortola'\n  },\n  'BN': {\n    'Asia/Brunei': 'Brunei'\n  },\n  'BG': {\n    'Europe/Sofia': 'Sofia'\n  },\n  'BF': {\n    'Africa/Ouagadougou': 'Ouagadougou'\n  },\n  'BI': {\n    'Africa/Bujumbura': 'Bujumbura'\n  },\n  'CI': {\n    'Africa/Abidjan': 'Abidjan'\n  },\n  'KH': {\n    'Asia/Phnom_Penh': 'Phnom Penh'\n  },\n  'CM': {\n    'Africa/Douala': 'Douala'\n  },\n  'CA': {\n    'America/Atikokan': 'Atikokan',\n    'America/Blanc-Sablon': 'Blanc-Sablon',\n    'America/Cambridge_Bay': 'Cambridge Bay',\n    'America/Creston': 'Creston',\n    'America/Dawson': 'Dawson',\n    'America/Dawson_Creek': 'Dawson Creek',\n    'America/Edmonton': 'Edmonton',\n    'America/Glace_Bay': 'Glace Bay',\n    'America/Goose_Bay': 'Goose Bay',\n    'America/Halifax': 'Halifax',\n    'America/Inuvik': 'Inuvik',\n    'America/Iqaluit': 'Iqaluit',\n    'America/Moncton': 'Moncton',\n    'America/Montreal': 'Montreal',\n    'America/Nipigon': 'Nipigon',\n    'America/Pangnirtung': 'Pangnirtung',\n    'America/Rainy_River': 'Rainy River',\n    'America/Rankin_Inlet': 'Rankin Inlet',\n    'America/Regina': 'Regina',\n    'America/Resolute': 'Resolute',\n    'America/St_Johns': 'St Johns',\n    'America/Swift_Current': 'Swift Current',\n    'America/Thunder_Bay': 'Thunder Bay',\n    'America/Toronto': 'Toronto',\n    'America/Vancouver': 'Vancouver',\n    'America/Whitehorse': 'Whitehorse',\n    'America/Winnipeg': 'Winnipeg',\n    'America/Yellowknife': 'Yellowknife'\n  },\n  'CV': {\n    'Atlantic/Cape_Verde': 'Cape Verde'\n  },\n  'KY': {\n    'America/Cayman': 'Cayman'\n  },\n  'CF': {\n    'Africa/Bangui': 'Bangui'\n  },\n  'TD': {\n    'Africa/Ndjamena': 'Ndjamena'\n  },\n  'CL': {\n    'America/Santiago': 'Santiago',\n    'Pacific/Easter': 'Easter'\n  },\n  'CN': {\n    'Asia/Chongqing': 'Chongqing',\n    'Asia/Harbin': 'Harbin',\n    'Asia/Kashgar': 'Kashgar',\n    'Asia/Shanghai': 'Shanghai',\n    'Asia/Urumqi': 'Urumqi'\n  },\n  'CO': {\n    'America/Bogota': 'Bogota'\n  },\n  'KM': {\n    'Indian/Comoro': 'Comoro'\n  },\n  'CG': {\n    'Africa/Brazzaville': 'Brazzaville'\n  },\n  'CR': {\n    'America/Costa_Rica': 'Costa Rica'\n  },\n  'HR': {\n    'Europe/Zagreb': 'Zagreb'\n  },\n  'CU': {\n    'America/Havana': 'Havana'\n  },\n  'CY': {\n    'Asia/Nicosia': 'Nicosia'\n  },\n  'CZ': {\n    'Europe/Prague': 'Prague'\n  },\n  'CD': {\n    'Africa/Kinshasa': 'Kinshasa',\n    'Africa/Lubumbashi': 'Lubumbashi'\n  },\n  'DK': {\n    'Europe/Copenhagen': 'Copenhagen'\n  },\n  'DJ': {\n    'Africa/Djibouti': 'Djibouti'\n  },\n  'DM': {\n    'America/Dominica': 'Dominica'\n  },\n  'DO': {\n    'America/Santo_Domingo': 'Santo Domingo'\n  },\n  'TP': {\n  },\n  'EC': {\n    'America/Guayaquil': 'Guayaquil',\n    'Pacific/Galapagos': 'Galapagos'\n  },\n  'EG': {\n    'Africa/Cairo': 'Cairo'\n  },\n  'SV': {\n    'America/El_Salvador': 'El Salvador'\n  },\n  'GQ': {\n    'Africa/Malabo': 'Malabo'\n  },\n  'ER': {\n    'Africa/Asmara': 'Asmara'\n  },\n  'EE': {\n    'Europe/Tallinn': 'Tallinn'\n  },\n  'ET': {\n    'Africa/Addis_Ababa': 'Addis Ababa'\n  },\n  'FO': {\n    'Atlantic/Faroe': 'Faroe'\n  },\n  'FK': {\n    'Atlantic/Stanley': 'Stanley'\n  },\n  'FJ': {\n    'Pacific/Fiji': 'Fiji'\n  },\n  'FI': {\n    'Europe/Helsinki': 'Helsinki'\n  },\n  'MK': {\n    'Europe/Skopje': 'Skopje'\n  },\n  'FR': {\n    'Europe/Paris': 'Paris'\n  },\n  'GA': {\n    'Africa/Libreville': 'Libreville'\n  },\n  'GE': {\n    'Asia/Tbilisi': 'Tbilisi'\n  },\n  'DE': {\n    'Europe/Berlin': 'Berlin'\n  },\n  'GH': {\n    'Africa/Accra': 'Accra'\n  },\n  'GR': {\n    'Europe/Athens': 'Athens'\n  },\n  'GL': {\n    'America/Danmarkshavn': 'Danmarkshavn',\n    'America/Godthab': 'Godthab',\n    'America/Scoresbysund': 'Scoresbysund',\n    'America/Thule': 'Thule'\n  },\n  'GD': {\n    'America/Grenada': 'Grenada'\n  },\n  'GU': {\n    'Pacific/Guam': 'Guam'\n  },\n  'GT': {\n    'America/Guatemala': 'Guatemala'\n  },\n  'GN': {\n    'Africa/Conakry': 'Conakry'\n  },\n  'GW': {\n    'Africa/Bissau': 'Bissau'\n  },\n  'GY': {\n    'America/Guyana': 'Guyana'\n  },\n  'HT': {\n    'America/Port-au-Prince': 'Port-au-Prince'\n  },\n  'HN': {\n    'America/Tegucigalpa': 'Tegucigalpa'\n  },\n  'HK': {\n    'Asia/Hong_Kong': 'Hong Kong'\n  },\n  'HU': {\n    'Europe/Budapest': 'Budapest'\n  },\n  'IS': {\n    'Atlantic/Reykjavik': 'Reykjavik'\n  },\n  'IN': {\n    'Asia/Kolkata': 'Kolkata'\n  },\n  'ID': {\n    'Asia/Jakarta': 'Jakarta',\n    'Asia/Jayapura': 'Jayapura',\n    'Asia/Makassar': 'Makassar',\n    'Asia/Pontianak': 'Pontianak'\n  },\n  'IR': {\n    'Asia/Tehran': 'Tehran'\n  },\n  'IQ': {\n    'Asia/Baghdad': 'Baghdad'\n  },\n  'IE': {\n    'Europe/Dublin': 'Dublin'\n  },\n  'IL': {\n    'Asia/Jerusalem': 'Jerusalem'\n  },\n  'IT': {\n    'Europe/Rome': 'Rome'\n  },\n  'JM': {\n    'America/Jamaica': 'Jamaica'\n  },\n  'JP': {\n    'Asia/Tokyo': 'Tokyo'\n  },\n  'JO': {\n    'Asia/Amman': 'Amman'\n  },\n  'KZ': {\n    'Asia/Almaty': 'Almaty',\n    'Asia/Aqtau': 'Aqtau',\n    'Asia/Aqtobe': 'Aqtobe',\n    'Asia/Oral': 'Oral',\n    'Asia/Qyzylorda': 'Qyzylorda'\n  },\n  'KE': {\n    'Africa/Nairobi': 'Nairobi'\n  },\n  'KI': {\n    'Pacific/Enderbury': 'Enderbury',\n    'Pacific/Kiritimati': 'Kiritimati',\n    'Pacific/Tarawa': 'Tarawa'\n  },\n  'KW': {\n    'Asia/Kuwait': 'Kuwait'\n  },\n  'KG': {\n    'Asia/Bishkek': 'Bishkek'\n  },\n  'LA': {\n    'Asia/Vientiane': 'Vientiane'\n  },\n  'LV': {\n    'Europe/Riga': 'Riga'\n  },\n  'LB': {\n    'Asia/Beirut': 'Beirut'\n  },\n  'LS': {\n    'Africa/Maseru': 'Maseru'\n  },\n  'LR': {\n    'Africa/Monrovia': 'Monrovia'\n  },\n  'LY': {\n    'Africa/Tripoli': 'Tripoli'\n  },\n  'LI': {\n    'Europe/Vaduz': 'Vaduz'\n  },\n  'LT': {\n    'Europe/Vilnius': 'Vilnius'\n  },\n  'LU': {\n    'Europe/Luxembourg': 'Luxembourg'\n  },\n  'MO': {\n    'Asia/Macau': 'Macau'\n  },\n  'MG': {\n    'Indian/Antananarivo': 'Antananarivo'\n  },\n  'MW': {\n    'Africa/Blantyre': 'Blantyre'\n  },\n  'MY': {\n    'Asia/Kuala_Lumpur': 'Kuala Lumpur',\n    'Asia/Kuching': 'Kuching'\n  },\n  'MV': {\n    'Indian/Maldives': 'Maldives'\n  },\n  'ML': {\n    'Africa/Bamako': 'Bamako'\n  },\n  'MT': {\n    'Europe/Malta': 'Malta'\n  },\n  'MH': {\n    'Pacific/Kwajalein': 'Kwajalein',\n    'Pacific/Majuro': 'Majuro'\n  },\n  'MR': {\n    'Africa/Nouakchott': 'Nouakchott'\n  },\n  'MU': {\n    'Indian/Mauritius': 'Mauritius'\n  },\n  'MX': {\n    'America/Bahia_Banderas': 'Bahia Banderas',\n    'America/Cancun': 'Cancun',\n    'America/Chihuahua': 'Chihuahua',\n    'America/Hermosillo': 'Hermosillo',\n    'America/Matamoros': 'Matamoros',\n    'America/Mazatlan': 'Mazatlan',\n    'America/Merida': 'Merida',\n    'America/Mexico_City': 'Mexico City',\n    'America/Monterrey': 'Monterrey',\n    'America/Ojinaga': 'Ojinaga',\n    'America/Santa_Isabel': 'Santa Isabel',\n    'America/Tijuana': 'Tijuana'\n  },\n  'FM': {\n    'Pacific/Chuuk': 'Chuuk',\n    'Pacific/Kosrae': 'Kosrae',\n    'Pacific/Pohnpei': 'Pohnpei'\n  },\n  'MD': {\n    'Europe/Chisinau': 'Chisinau'\n  },\n  'MC': {\n    'Europe/Monaco': 'Monaco'\n  },\n  'MN': {\n    'Asia/Choibalsan': 'Choibalsan',\n    'Asia/Hovd': 'Hovd',\n    'Asia/Ulaanbaatar': 'Ulaanbaatar'\n  },\n  'ME': {\n    'Europe/Podgorica': 'Podgorica'\n  },\n  'MS': {\n    'America/Montserrat': 'Montserrat'\n  },\n  'MA': {\n    'Africa/Casablanca': 'Casablanca'\n  },\n  'MZ': {\n    'Africa/Maputo': 'Maputo'\n  },\n  'MM': {\n    'Asia/Rangoon': 'Rangoon'\n  },\n  'NA': {\n    'Africa/Windhoek': 'Windhoek'\n  },\n  'NR': {\n    'Pacific/Nauru': 'Nauru'\n  },\n  'NP': {\n    'Asia/Kathmandu': 'Kathmandu'\n  },\n  'NL': {\n    'Europe/Amsterdam': 'Amsterdam'\n  },\n  'AN': {\n  },\n  'NZ': {\n    'Pacific/Auckland': 'Auckland',\n    'Pacific/Chatham': 'Chatham'\n  },\n  'NI': {\n    'America/Managua': 'Managua'\n  },\n  'NE': {\n    'Africa/Niamey': 'Niamey'\n  },\n  'NG': {\n    'Africa/Lagos': 'Lagos'\n  },\n  'NF': {\n    'Pacific/Norfolk': 'Norfolk'\n  },\n  'KP': {\n    'Asia/Pyongyang': 'Pyongyang'\n  },\n  'MP': {\n    'Pacific/Saipan': 'Saipan'\n  },\n  'NO': {\n    'Europe/Oslo': 'Oslo'\n  },\n  'OM': {\n    'Asia/Muscat': 'Muscat'\n  },\n  'PK': {\n    'Asia/Karachi': 'Karachi'\n  },\n  'PW': {\n    'Pacific/Palau': 'Palau'\n  },\n  'PA': {\n    'America/Panama': 'Panama'\n  },\n  'PG': {\n    'Pacific/Port_Moresby': 'Port Moresby'\n  },\n  'PY': {\n    'America/Asuncion': 'Asuncion'\n  },\n  'PE': {\n    'America/Lima': 'Lima'\n  },\n  'PH': {\n    'Asia/Manila': 'Manila'\n  },\n  'PN': {\n    'Pacific/Pitcairn': 'Pitcairn'\n  },\n  'PL': {\n    'Europe/Warsaw': 'Warsaw'\n  },\n  'PT': {\n    'Atlantic/Azores': 'Azores',\n    'Atlantic/Madeira': 'Madeira',\n    'Europe/Lisbon': 'Lisbon'\n  },\n  'PR': {\n    'America/Puerto_Rico': 'Puerto Rico'\n  },\n  'QA': {\n    'Asia/Qatar': 'Qatar'\n  },\n  'RO': {\n    'Europe/Bucharest': 'Bucharest'\n  },\n  'RU': {\n    'Asia/Anadyr': 'Anadyr',\n    'Asia/Irkutsk': 'Irkutsk',\n    'Asia/Kamchatka': 'Kamchatka',\n    'Asia/Krasnoyarsk': 'Krasnoyarsk',\n    'Asia/Magadan': 'Magadan',\n    'Asia/Novokuznetsk': 'Novokuznetsk',\n    'Asia/Novosibirsk': 'Novosibirsk',\n    'Asia/Omsk': 'Omsk',\n    'Asia/Sakhalin': 'Sakhalin',\n    'Asia/Vladivostok': 'Vladivostok',\n    'Asia/Yakutsk': 'Yakutsk',\n    'Asia/Yekaterinburg': 'Yekaterinburg',\n    'Europe/Kaliningrad': 'Kaliningrad',\n    'Europe/Moscow': 'Moscow',\n    'Europe/Samara': 'Samara',\n    'Europe/Volgograd': 'Volgograd'\n  },\n  'RW': {\n    'Africa/Kigali': 'Kigali'\n  },\n  'ST': {\n    'Africa/Sao_Tome': 'Sao Tome'\n  },\n  'SH': {\n    'Atlantic/St_Helena': 'St Helena'\n  },\n  'KN': {\n    'America/St_Kitts': 'St Kitts'\n  },\n  'LC': {\n    'America/St_Lucia': 'St Lucia'\n  },\n  'VC': {\n    'America/St_Vincent': 'St Vincent'\n  },\n  'WS': {\n    'Pacific/Apia': 'Apia'\n  },\n  'SM': {\n    'Europe/San_Marino': 'San Marino'\n  },\n  'SA': {\n    'Asia/Riyadh': 'Riyadh'\n  },\n  'SN': {\n    'Africa/Dakar': 'Dakar'\n  },\n  'RS': {\n    'Europe/Belgrade': 'Belgrade'\n  },\n  'SC': {\n    'Indian/Mahe': 'Mahe'\n  },\n  'SL': {\n    'Africa/Freetown': 'Freetown'\n  },\n  'SG': {\n    'Asia/Singapore': 'Singapore'\n  },\n  'SK': {\n    'Europe/Bratislava': 'Bratislava'\n  },\n  'SI': {\n    'Europe/Ljubljana': 'Ljubljana'\n  },\n  'SB': {\n    'Pacific/Guadalcanal': 'Guadalcanal'\n  },\n  'SO': {\n    'Africa/Mogadishu': 'Mogadishu'\n  },\n  'ZA': {\n    'Africa/Johannesburg': 'Johannesburg'\n  },\n  'GS': {\n    'Atlantic/South_Georgia': 'South Georgia'\n  },\n  'KR': {\n    'Asia/Seoul': 'Seoul'\n  },\n  'ES': {\n    'Africa/Ceuta': 'Ceuta',\n    'Atlantic/Canary': 'Canary',\n    'Europe/Madrid': 'Madrid'\n  },\n  'LK': {\n    'Asia/Colombo': 'Colombo'\n  },\n  'SD': {\n    'Africa/Khartoum': 'Khartoum'\n  },\n  'SR': {\n    'America/Paramaribo': 'Paramaribo'\n  },\n  'SZ': {\n    'Africa/Mbabane': 'Mbabane'\n  },\n  'SE': {\n    'Europe/Stockholm': 'Stockholm'\n  },\n  'CH': {\n    'Europe/Zurich': 'Zurich'\n  },\n  'SY': {\n    'Asia/Damascus': 'Damascus'\n  },\n  'TW': {\n    'Asia/Taipei': 'Taipei'\n  },\n  'TJ': {\n    'Asia/Dushanbe': 'Dushanbe'\n  },\n  'TZ': {\n    'Africa/Dar_es_Salaam': 'Dar es Salaam'\n  },\n  'TH': {\n    'Asia/Bangkok': 'Bangkok'\n  },\n  'BS': {\n    'America/Nassau': 'Nassau'\n  },\n  'GM': {\n    'Africa/Banjul': 'Banjul'\n  },\n  'TG': {\n    'Africa/Lome': 'Lome'\n  },\n  'TO': {\n    'Pacific/Tongatapu': 'Tongatapu'\n  },\n  'TT': {\n    'America/Port_of_Spain': 'Port of Spain'\n  },\n  'TN': {\n    'Africa/Tunis': 'Tunis'\n  },\n  'TR': {\n    'Europe/Istanbul': 'Istanbul'\n  },\n  'TM': {\n    'Asia/Ashgabat': 'Ashgabat'\n  },\n  'TC': {\n    'America/Grand_Turk': 'Grand Turk'\n  },\n  'TV': {\n    'Pacific/Funafuti': 'Funafuti'\n  },\n  'VI': {\n    'America/St_Thomas': 'St Thomas'\n  },\n  'UG': {\n    'Africa/Kampala': 'Kampala'\n  },\n  'UA': {\n    'Europe/Kiev': 'Kiev',\n    'Europe/Simferopol': 'Simferopol',\n    'Europe/Uzhgorod': 'Uzhgorod',\n    'Europe/Zaporozhye': 'Zaporozhye'\n  },\n  'AE': {\n    'Asia/Dubai': 'Dubai'\n  },\n  'GB': {\n    'Europe/London': 'London'\n  },\n  'US': {\n    'America/Adak': 'Adak',\n    'America/Anchorage': 'Anchorage',\n    'America/Boise': 'Boise',\n    'America/Chicago': 'Chicago',\n    'America/Denver': 'Denver',\n    'America/Detroit': 'Detroit',\n    'America/Indiana/Indianapolis': 'Indiana / Indianapolis',\n    'America/Indiana/Knox': 'Indiana / Knox',\n    'America/Indiana/Marengo': 'Indiana / Marengo',\n    'America/Indiana/Petersburg': 'Indiana / Petersburg',\n    'America/Indiana/Tell_City': 'Indiana / Tell City',\n    'America/Indiana/Vevay': 'Indiana / Vevay',\n    'America/Indiana/Vincennes': 'Indiana / Vincennes',\n    'America/Indiana/Winamac': 'Indiana / Winamac',\n    'America/Juneau': 'Juneau',\n    'America/Kentucky/Louisville': 'Kentucky / Louisville',\n    'America/Kentucky/Monticello': 'Kentucky / Monticello',\n    'America/Los_Angeles': 'Los Angeles',\n    'America/Menominee': 'Menominee',\n    'America/Metlakatla': 'Metlakatla',\n    'America/New_York': 'New York',\n    'America/Nome': 'Nome',\n    'America/North_Dakota/Beulah': 'North Dakota / Beulah',\n    'America/North_Dakota/Center': 'North Dakota / Center',\n    'America/North_Dakota/New_Salem': 'North Dakota / New Salem',\n    'America/Phoenix': 'Phoenix',\n    'America/Shiprock': 'Shiprock',\n    'America/Sitka': 'Sitka',\n    'America/Yakutat': 'Yakutat',\n    'Pacific/Honolulu': 'Honolulu'\n  },\n  'UY': {\n    'America/Montevideo': 'Montevideo'\n  },\n  'UZ': {\n    'Asia/Samarkand': 'Samarkand',\n    'Asia/Tashkent': 'Tashkent'\n  },\n  'VU': {\n    'Pacific/Efate': 'Efate'\n  },\n  'VA': {\n    'Europe/Vatican': 'Vatican'\n  },\n  'VE': {\n    'America/Caracas': 'Caracas'\n  },\n  'VN': {\n    'Asia/Ho_Chi_Minh': 'Ho Chi Minh'\n  },\n  'EH': {\n    'Africa/El_Aaiun': 'El Aaiun'\n  },\n  'YE': {\n    'Asia/Aden': 'Aden'\n  },\n  'ZM': {\n    'Africa/Lusaka': 'Lusaka'\n  },\n  'ZW': {\n    'Africa/Harare': 'Harare'\n  }\n};\n\n/* ==========================================================\n * bootstrap-formhelpers-colorpicker.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2012 Vincent Lamanna\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n \n \n+function ($) {\n\n  'use strict';\n  \n  \n  /* COLORPICKER CLASS DEFINITION\n  * ========================= */\n\n  var toggle = '[data-toggle=bfh-colorpicker]',\n      BFHColorPicker = function (element, options) {\n        this.options = $.extend({}, $.fn.bfhcolorpicker.defaults, options);\n        this.$element = $(element);\n\n        this.initPopover();\n      };\n\n  BFHColorPicker.prototype = {\n\n    constructor: BFHColorPicker,\n\n    initPalette: function() {\n      var $canvas,\n          context,\n          gradient;\n          \n      $canvas = this.$element.find('canvas');\n      context = $canvas[0].getContext('2d');\n      \n      gradient = context.createLinearGradient(0, 0, $canvas.width(), 0);\n      \n      gradient.addColorStop(0,    'rgb(255, 255, 255)');\n      gradient.addColorStop(0.1,  'rgb(255,   0,   0)');\n      gradient.addColorStop(0.25, 'rgb(255,   0, 255)');\n      gradient.addColorStop(0.4,  'rgb(0,     0, 255)');\n      gradient.addColorStop(0.55, 'rgb(0,   255, 255)');\n      gradient.addColorStop(0.7,  'rgb(0,   255,   0)');\n      gradient.addColorStop(0.85, 'rgb(255, 255,   0)');\n      gradient.addColorStop(1,    'rgb(255,   0,   0)');\n      \n      context.fillStyle = gradient;\n      context.fillRect(0, 0, context.canvas.width, context.canvas.height);\n      \n      gradient = context.createLinearGradient(0, 0, 0, $canvas.height());\n      gradient.addColorStop(0,   'rgba(255, 255, 255, 1)');\n      gradient.addColorStop(0.5, 'rgba(255, 255, 255, 0)');\n      gradient.addColorStop(0.5, 'rgba(0,     0,   0, 0)');\n      gradient.addColorStop(1,   'rgba(0,     0,   0, 1)');\n      \n      context.fillStyle = gradient;\n      context.fillRect(0, 0, context.canvas.width, context.canvas.height);\n    },\n    \n    initPopover: function() {\n      var iconLeft,\n          iconRight;\n\n      iconLeft = '';\n      iconRight = '';\n      if (this.options.align === 'right') {\n        iconRight = '<span class=\"input-group-addon\"><span class=\"bfh-colorpicker-icon\"></span></span>';\n      } else {\n        iconLeft = '<span class=\"input-group-addon\"><span class=\"bfh-colorpicker-icon\"></span></span>';\n      }\n\n      this.$element.html(\n        '<div class=\"input-group bfh-colorpicker-toggle\" data-toggle=\"bfh-colorpicker\">' +\n        iconLeft +\n        '<input type=\"text\" name=\"' + this.options.name + '\" class=\"' + this.options.input + '\" placeholder=\"' + this.options.placeholder + '\" readonly>' +\n        iconRight +\n        '</div>' +\n        '<div class=\"bfh-colorpicker-popover\">' +\n        '<canvas class=\"bfh-colorpicker-palette\" width=\"384\" height=\"256\"></canvas>' +\n        '</div>'\n      );\n\n      // this.$element\n      //   .on('click.bfhcolorpicker.data-api touchstart.bfhcolorpicker.data-api', toggle, BFHColorPicker.prototype.toggle)\n      //   .on('mousedown.bfhcolorpicker.data-api', 'canvas', BFHColorPicker.prototype.mouseDown)\n      //   .on('click.bfhcolorpicker.data-api touchstart.bfhcolorpicker.data-api', '.bfh-colorpicker-popover', function() { return false; });\n      \n      this.$element\n      .on('click.bfhcolorpicker.data-api', toggle, BFHColorPicker.prototype.toggle)\n      .on('mousedown.bfhcolorpicker.data-api', 'canvas', BFHColorPicker.prototype.mouseDown)\n      .on('click.bfhcolorpicker.data-api', '.bfh-colorpicker-popover', function() { return false; });\n\n      this.initPalette();\n      \n      this.$element.val(this.options.color);\n    },\n    \n    updateVal: function(positionX, positionY) {\n      var $canvas,\n          context,\n          colorX,\n          colorY,\n          snappiness,\n          imageData,\n          newColor;\n      \n      snappiness = 5;\n      \n      $canvas = this.$element.find('canvas');\n      context = $canvas[0].getContext('2d');\n      \n      colorX = positionX - $canvas.offset().left;\n      colorY = positionY - $canvas.offset().top;\n      \n      colorX = Math.round(colorX / snappiness) * snappiness;\n      colorY = Math.round(colorY / snappiness) * snappiness;\n      \n      if (colorX < 0) {\n        colorX = 0;\n      }\n      if (colorX >= $canvas.width()) {\n        colorX = $canvas.width() - 1;\n      }\n      \n      if (colorY < 0) {\n        colorY = 0;\n      }\n      if (colorY > $canvas.height()) {\n        colorY = $canvas.height();\n      }\n      \n      imageData = context.getImageData(colorX, colorY, 1, 1);\n      newColor = rgbToHex(imageData.data[0], imageData.data[1], imageData.data[2]);\n      \n      if (newColor !== this.$element.val()) {\n        this.$element.val(newColor);\n        \n        this.$element.trigger('change.bfhcolorpicker');\n      }\n    },\n    \n    mouseDown: function(e) {\n      var $this,\n          $parent;\n      \n      $this = $(this);\n      $parent = getParent($this);\n      \n      $(document)\n        .on('mousemove.bfhcolorpicker.data-api', {colorpicker: $parent}, BFHColorPicker.prototype.mouseMove)\n        .one('mouseup.bfhcolorpicker.data-api', {colorpicker: $parent}, BFHColorPicker.prototype.mouseUp);\n    },\n    \n    mouseMove: function(e) {\n      var $this;\n      \n      $this = e.data.colorpicker;\n      \n      $this.data('bfhcolorpicker').updateVal(e.pageX, e.pageY);\n    },\n    \n    mouseUp: function(e) {\n      var $this;\n      \n      $this = e.data.colorpicker;\n      \n      $this.data('bfhcolorpicker').updateVal(e.pageX, e.pageY);\n      \n      $(document).off('mousemove.bfhcolorpicker.data-api');\n      \n      if ($this.data('bfhcolorpicker').options.close === true) {\n        clearMenus();\n      }\n    },\n\n    toggle: function (e) {\n      var $this,\n          $parent,\n          isActive;\n\n      $this = $(this);\n      $parent = getParent($this);\n\n      if ($parent.is('.disabled') || $parent.attr('disabled') !== undefined) {\n        return true;\n      }\n\n      isActive = $parent.hasClass('open');\n\n      clearMenus();\n\n      if (!isActive) {\n        $parent.trigger(e = $.Event('show.bfhcolorpicker'));\n\n        if (e.isDefaultPrevented()) {\n          return true;\n        }\n\n        $parent\n          .toggleClass('open')\n          .trigger('shown.bfhcolorpicker');\n\n        $this.focus();\n      }\n\n      return false;\n    }\n  };\n  \n  function componentToHex(c) {\n    var hex = c.toString(16);\n    return hex.length === 1 ? '0' + hex : hex;\n  }\n\n  function rgbToHex(r, g, b) {\n    return '#' + componentToHex(r) + componentToHex(g) + componentToHex(b);\n  }\n      \n  function clearMenus() {\n    var $parent;\n\n    $(toggle).each(function (e) {\n      $parent = getParent($(this));\n\n      if (!$parent.hasClass('open')) {\n        return true;\n      }\n\n      $parent.trigger(e = $.Event('hide.bfhcolorpicker'));\n\n      if (e.isDefaultPrevented()) {\n        return true;\n      }\n\n      $parent\n        .removeClass('open')\n        .trigger('hidden.bfhcolorpicker');\n    });\n  }\n\n  function getParent($this) {\n    return $this.closest('.bfh-colorpicker');\n  }\n  \n  \n  /* COLORPICKER PLUGIN DEFINITION\n   * ========================== */\n\n  var old = $.fn.bfhcolorpicker;\n\n  $.fn.bfhcolorpicker = function (option) {\n    return this.each(function () {\n      var $this,\n          data,\n          options;\n\n      $this = $(this);\n      data = $this.data('bfhcolorpicker');\n      options = typeof option === 'object' && option;\n      this.type = 'bfhcolorpicker';\n\n      if (!data) {\n        $this.data('bfhcolorpicker', (data = new BFHColorPicker(this, options)));\n      }\n      if (typeof option === 'string') {\n        data[option].call($this);\n      }\n    });\n  };\n\n  $.fn.bfhcolorpicker.Constructor = BFHColorPicker;\n\n  $.fn.bfhcolorpicker.defaults = {\n    align: 'left',\n    input: 'form-control',\n    placeholder: '',\n    name: '',\n    color: '#000000',\n    close: true\n  };\n  \n  \n  /* COLORPICKER NO CONFLICT\n   * ========================== */\n\n  $.fn.bfhcolorpicker.noConflict = function () {\n    $.fn.bfhcolorpicker = old;\n    return this;\n  };\n  \n  \n  /* COLORPICKER VALHOOKS\n   * ========================== */\n\n  var origHook;\n  if ($.valHooks.div){\n    origHook = $.valHooks.div;\n  }\n  $.valHooks.div = {\n    get: function(el) {\n      if ($(el).hasClass('bfh-colorpicker')) {\n        return $(el).find('input[type=\"text\"]').val();\n      } else if (origHook) {\n        return origHook.get(el);\n      }\n    },\n    set: function(el, val) {\n      if ($(el).hasClass('bfh-colorpicker')) {\n        $(el).find('.bfh-colorpicker-icon').css('background-color', val);\n        $(el).find('input[type=\"text\"]').val(val);\n      } else if (origHook) {\n        return origHook.set(el,val);\n      }\n    }\n  };\n  \n  \n  /* COLORPICKER DATA-API\n   * ============== */\n\n  $(document).on('turbo:load', function () {\n    $('div.bfh-colorpicker').each(function () {\n      var $colorpicker;\n\n      $colorpicker = $(this);\n\n      $colorpicker.bfhcolorpicker($colorpicker.data());\n    });\n  });\n  \n  \n  /* APPLY TO STANDARD COLORPICKER ELEMENTS\n   * =================================== */\n\n  $(document)\n    .on('click.bfhcolorpicker.data-api', clearMenus);\n\n}(window.jQuery);\n/* ==========================================================\n * bootstrap-formhelpers-countries.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2012 Vincent Lamanna\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n+function ($) {\n\n  'use strict';\n\n\n  /* COUNTRIES CLASS DEFINITION\n   * ====================== */\n\n  var BFHCountries = function (element, options) {\n    this.options = $.extend({}, $.fn.bfhcountries.defaults, options);\n    this.$element = $(element);\n\n    if (this.$element.is('select')) {\n      this.addCountries();\n    }\n\n    if (this.$element.hasClass('bfh-selectbox')) {\n      this.addBootstrapCountries();\n    }\n\n    if (this.$element.is('span')) {\n      this.displayCountry();\n    }\n  };\n\n  BFHCountries.prototype = {\n\n    constructor: BFHCountries,\n\n    getCountries: function() {\n      var country,\n          countries;\n\n      if (this.options.available) {\n        if (typeof this.options.available === 'string') {\n          countries = [];\n  \n          this.options.available = this.options.available.split(',');\n  \n          for (country in BFHCountriesList) {\n            if (BFHCountriesList.hasOwnProperty(country)) {\n              if ($.inArray(country, this.options.available) >= 0) {\n                countries[country] = BFHCountriesList[country];\n              }\n            }\n          }\n        } else {\n          countries = this.options.available;\n        }\n\n        return countries;\n      } else {\n        return BFHCountriesList;\n      }\n    },\n\n    addCountries: function () {\n      var value,\n          country,\n          countries;\n\n      value = this.options.country;\n      countries = this.getCountries();\n\n      this.$element.html('');\n\n      if (this.options.blank === true) {\n        this.$element.append('<option value=\"\"></option>');\n      }\n\n      for (country in countries) {\n        if (countries.hasOwnProperty(country)) {\n          this.$element.append('<option value=\"' + country + '\">' + countries[country] + '</option>');\n        }\n      }\n\n      this.$element.val(value);\n    },\n\n    addBootstrapCountries: function() {\n      var $input,\n          $toggle,\n          $options,\n          value,\n          country,\n          countries;\n\n      value = this.options.country;\n      $input = this.$element.find('input[type=\"hidden\"]');\n      $toggle = this.$element.find('.bfh-selectbox-option');\n      $options = this.$element.find('[role=option]');\n      countries = this.getCountries();\n\n      $options.html('');\n\n      if (this.options.blank === true) {\n        $options.append('<li><a tabindex=\"-1\" href=\"#\" data-option=\"\"></a></li>');\n      }\n\n      for (country in countries) {\n        if (countries.hasOwnProperty(country)) {\n          if (this.options.flags === true) {\n            $options.append('<li><a tabindex=\"-1\" href=\"#\" data-option=\"' + country + '\"><i class=\"glyphicon bfh-flag-' + country + '\"></i>' + countries[country] + '</a></li>');\n          } else {\n            $options.append('<li><a tabindex=\"-1\" href=\"#\" data-option=\"' + country + '\">' + countries[country] + '</a></li>');\n          }\n        }\n      }\n\n      this.$element.val(value);\n    },\n\n    displayCountry: function () {\n      var value;\n\n      value = this.options.country;\n\n      if (this.options.flags === true) {\n        this.$element.html('<i class=\"glyphicon bfh-flag-' + value + '\"></i> ' + BFHCountriesList[value]);\n      } else {\n        this.$element.html(BFHCountriesList[value]);\n      }\n    }\n\n  };\n\n\n  /* COUNTRY PLUGIN DEFINITION\n   * ======================= */\n\n  var old = $.fn.bfhcountries;\n\n  $.fn.bfhcountries = function (option) {\n    return this.each(function () {\n      var $this,\n          data,\n          options;\n\n      $this = $(this);\n      data = $this.data('bfhcountries');\n      options = typeof option === 'object' && option;\n\n      if (!data) {\n        $this.data('bfhcountries', (data = new BFHCountries(this, options)));\n      }\n      if (typeof option === 'string') {\n        data[option].call($this);\n      }\n    });\n  };\n\n  $.fn.bfhcountries.Constructor = BFHCountries;\n\n  $.fn.bfhcountries.defaults = {\n    country: '',\n    available: '',\n    flags: false,\n    blank: true\n  };\n\n\n  /* COUNTRY NO CONFLICT\n   * ========================== */\n\n  $.fn.bfhcountries.noConflict = function () {\n    $.fn.bfhcountries = old;\n    return this;\n  };\n\n\n  /* COUNTRY DATA-API\n   * ============== */\n\n  $(document).on('turbo:load', function () {\n    $('form select.bfh-countries, span.bfh-countries, div.bfh-countries').each(function () {\n      var $countries;\n\n      $countries = $(this);\n\n      if ($countries.hasClass('bfh-selectbox')) {\n        $countries.bfhselectbox($countries.data());\n      }\n      $countries.bfhcountries($countries.data());\n    });\n  });\n\n}(window.jQuery);\n\n/* ==========================================================\n * bootstrap-formhelpers-currencies.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2013 Vincent Lamanna\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n+function ($) {\n\n  'use strict';\n\n\n  /* COUNTRIES CLASS DEFINITION\n   * ====================== */\n\n  var BFHCurrencies = function (element, options) {\n    this.options = $.extend({}, $.fn.bfhcurrencies.defaults, options);\n    this.$element = $(element);\n\n    if (this.$element.is('select')) {\n      this.addCurrencies();\n    }\n\n    if (this.$element.hasClass('bfh-selectbox')) {\n      this.addBootstrapCurrencies();\n    }\n\n    if (this.$element.is('span')) {\n      this.displayCurrency();\n    }\n  };\n\n  BFHCurrencies.prototype = {\n\n    constructor: BFHCurrencies,\n\n    getCurrencies: function () {\n      var currency,\n          currencies;\n\n      if (this.options.available) {\n        currencies = [];\n\n        this.options.available = this.options.available.split(',');\n\n        for (currency in BFHCurrenciesList) {\n          if (BFHCurrenciesList.hasOwnProperty(currency)) {\n            if ($.inArray(currency, this.options.available) >= 0) {\n              currencies[currency] = BFHCurrenciesList[currency];\n            }\n          }\n        }\n\n        return currencies;\n      } else {\n        return BFHCurrenciesList;\n      }\n    },\n\n    addCurrencies: function () {\n      var value,\n          currency,\n          currencies;\n\n      value = this.options.currency;\n      currencies = this.getCurrencies();\n\n      this.$element.html('');\n\n      if (this.options.blank === true) {\n        this.$element.append('<option value=\"\"></option>');\n      }\n\n      for (currency in currencies) {\n        if (currencies.hasOwnProperty(currency)) {\n          this.$element.append('<option value=\"' + currency + '\">' + currencies[currency].label + '</option>');\n        }\n      }\n\n      this.$element.val(value);\n    },\n\n\n    addBootstrapCurrencies: function() {\n      var $input,\n          $toggle,\n          $options,\n          value,\n          currency,\n          currencies,\n          flag;\n\n      value = this.options.currency;\n      $input = this.$element.find('input[type=\"hidden\"]');\n      $toggle = this.$element.find('.bfh-selectbox-option');\n      $options = this.$element.find('[role=option]');\n      currencies = this.getCurrencies();\n\n      $options.html('');\n\n      if (this.options.blank === true) {\n        $options.append('<li><a tabindex=\"-1\" href=\"#\" data-option=\"\"></a></li>');\n      }\n\n      for (currency in currencies) {\n        if (currencies.hasOwnProperty(currency)) {\n          if (this.options.flags === true) {\n            if (currencies[currency].currencyflag) {\n              flag = currencies[currency].currencyflag;\n            } else {\n              flag = currency.substr(0,2);\n            }\n            $options.append('<li><a tabindex=\"-1\" href=\"#\" data-option=\"' + currency +  '\"><i class=\"glyphicon bfh-flag-' + flag + '\"></i>' + currencies[currency].label + '</a></li>');\n          } else {\n            $options.append('<li><a tabindex=\"-1\" href=\"#\" data-option=\"' + currency + '\">' + currencies[currency].label + '</a></li>');\n          }\n        }\n      }\n\n      this.$element.val(value);\n    },\n\n    displayCurrency: function () {\n      var value,\n          flag;\n\n      value = this.options.currency;\n\n      if (this.options.flags === true) {\n        if (BFHCurrenciesList[value].currencyflag) {\n          flag = BFHCurrenciesList[value].currencyflag;\n        } else {\n          flag = value.substr(0,2);\n        }\n        this.$element.html('<i class=\"glyphicon bfh-flag-' + flag + '\"></i> ' + BFHCurrenciesList[value].label);\n      } else {\n        this.$element.html(BFHCurrenciesList[value].label);\n      }\n    }\n\n  };\n\n\n  /* CURRENCY PLUGIN DEFINITION\n   * ======================= */\n\n  var old = $.fn.bfhcurrencies;\n\n  $.fn.bfhcurrencies = function (option) {\n    return this.each(function () {\n      var $this,\n          data,\n          options;\n\n      $this = $(this);\n      data = $this.data('bfhcurrencies');\n      options = typeof option === 'object' && option;\n\n      if (!data) {\n        $this.data('bfhcurrencies', (data = new BFHCurrencies(this, options)));\n      }\n      if (typeof option === 'string') {\n        data[option].call($this);\n      }\n    });\n  };\n\n  $.fn.bfhcurrencies.Constructor = BFHCurrencies;\n\n  $.fn.bfhcurrencies.defaults = {\n    currency: '',\n    available: '',\n    flags: false,\n    blank: true\n  };\n\n\n  /* CURRENCY NO CONFLICT\n   * ========================== */\n\n  $.fn.bfhcurrencies.noConflict = function () {\n    $.fn.bfhcurrencies = old;\n    return this;\n  };\n\n\n  /* CURRENCY DATA-API\n   * ============== */\n\n  $(document).on('turbo:load', function () {\n    $('form select.bfh-currencies, span.bfh-currencies, div.bfh-currencies').each(function () {\n      var $currencies;\n\n      $currencies = $(this);\n\n      if ($currencies.hasClass('bfh-selectbox')) {\n        $currencies.bfhselectbox($currencies.data());\n      }\n      $currencies.bfhcurrencies($currencies.data());\n    });\n  });\n\n\n}(window.jQuery);\n\n/* ==========================================================\n * bootstrap-formhelpers-datepicker.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2012 Vincent Lamanna\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n+function ($) {\n\n  'use strict';\n\n\n  /* BFHDATEPICKER CLASS DEFINITION\n   * ========================= */\n\n  var toggle = '[data-toggle=bfh-datepicker]',\n      BFHDatePicker = function (element, options) {\n        this.options = $.extend({}, $.fn.bfhdatepicker.defaults, options);\n        this.$element = $(element);\n\n        this.initCalendar();\n      };\n\n  BFHDatePicker.prototype = {\n\n    constructor: BFHDatePicker,\n\n    setDate: function() {\n      var date,\n          today,\n          format;\n\n      date = this.options.date;\n      format = this.options.format;\n\n      if (date === '' || date === 'today' || date === undefined) {\n        today = new Date();\n\n        if (date === 'today') {\n          this.$element.val(formatDate(format, today.getMonth(), today.getFullYear(), today.getDate()));\n        }\n\n        this.$element.data('month', today.getMonth());\n        this.$element.data('year', today.getFullYear());\n      } else {\n        this.$element.val(date);\n        this.$element.data('month', Number(getDatePart(format, date, 'm') - 1));\n        this.$element.data('year', Number(getDatePart(format, date, 'y')));\n      }\n    },\n\n    setDateLimit: function(date, limitPrefix) {\n      var today,\n          format;\n\n      format = this.options.format;\n\n      if (date !== '') {\n        this.$element.data(limitPrefix + 'limit', true);\n\n        if (date === 'today') {\n          today = new Date();\n\n          this.$element.data(limitPrefix + 'day', today.getDate());\n          this.$element.data(limitPrefix + 'month', today.getMonth());\n          this.$element.data(limitPrefix + 'year', today.getFullYear());\n        } else {\n          this.$element.data(limitPrefix + 'day', Number(getDatePart(format, date, 'd')));\n          this.$element.data(limitPrefix + 'month', Number(getDatePart(format, date, 'm') - 1));\n          this.$element.data(limitPrefix + 'year', Number(getDatePart(format, date, 'y')));\n        }\n      } else {\n        this.$element.data(limitPrefix + 'limit', false);\n      }\n    },\n\n    initCalendar: function() {\n      var iconLeft,\n          iconRight,\n          iconAddon;\n\n      iconLeft = '';\n      iconRight = '';\n      iconAddon = '';\n      if (this.options.icon !== '') {\n        if (this.options.align === 'right') {\n          iconRight = '<span class=\"input-group-addon\"><i class=\"' + this.options.icon + '\"></i></span>';\n        } else {\n          iconLeft = '<span class=\"input-group-addon\"><i class=\"' + this.options.icon + '\"></i></span>';\n        }\n        iconAddon = 'input-group';\n      }\n\n      this.$element.html(\n        '<div class=\"' + iconAddon + ' bfh-datepicker-toggle\" data-toggle=\"bfh-datepicker\">' +\n        iconLeft +\n        '<input type=\"text\" name=\"' + this.options.name + '\" class=\"' + this.options.input + '\" placeholder=\"' + this.options.placeholder + '\" readonly>' +\n        iconRight +\n        '</div>' +\n        '<div class=\"bfh-datepicker-calendar\">' +\n        '<table class=\"calendar table table-bordered\">' +\n        '<thead>' +\n        '<tr class=\"months-header\">' +\n        '<th class=\"month\" colspan=\"4\">' +\n        '<a class=\"previous\" href=\"#\"><i class=\"glyphicon glyphicon-chevron-left\"></i></a>' +\n        '<span></span>' +\n        '<a class=\"next\" href=\"#\"><i class=\"glyphicon glyphicon-chevron-right\"></i></a>' +\n        '</th>' +\n        '<th class=\"year\" colspan=\"3\">' +\n        '<a class=\"previous\" href=\"#\"><i class=\"glyphicon glyphicon-chevron-left\"></i></a>' +\n        '<span></span>' +\n        '<a class=\"next\" href=\"#\"><i class=\"glyphicon glyphicon-chevron-right\"></i></a>' +\n        '</th>' +\n        '</tr>' +\n        '<tr class=\"days-header\">' +\n        '</tr>' +\n        '</thead>' +\n        '<tbody>' +\n        '</tbody>' +\n        '</table>' +\n        '</div>'\n      );\n\n      this.$element\n        .on('click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api', toggle, BFHDatePicker.prototype.toggle)\n        .on('click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api', '.bfh-datepicker-calendar > table.calendar .month > .previous', BFHDatePicker.prototype.previousMonth)\n        .on('click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api', '.bfh-datepicker-calendar > table.calendar .month > .next', BFHDatePicker.prototype.nextMonth)\n        .on('click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api', '.bfh-datepicker-calendar > table.calendar .year > .previous', BFHDatePicker.prototype.previousYear)\n        .on('click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api', '.bfh-datepicker-calendar > table.calendar .year > .next', BFHDatePicker.prototype.nextYear)\n        .on('click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api', '.bfh-datepicker-calendar > table.calendar td:not(.off)', BFHDatePicker.prototype.select)\n        .on('click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api', '.bfh-datepicker-calendar > table.calendar', function() { return false; });\n\n      this.setDate();\n      this.setDateLimit(this.options.min, 'lower');\n      this.setDateLimit(this.options.max, 'higher');\n\n      this.updateCalendar();\n    },\n\n    updateCalendarHeader: function($calendar, month, year) {\n      var $daysHeader,\n          day;\n\n      $calendar.find('table > thead > tr > th.month > span').text(BFHMonthsList[month]);\n      $calendar.find('table > thead > tr > th.year > span').text(year);\n\n      $daysHeader = $calendar.find('table > thead > tr.days-header');\n      $daysHeader.html('');\n      for (day=BFHDayOfWeekStart; day < BFHDaysList.length; day=day+1) {\n        $daysHeader.append('<th>' + BFHDaysList[day] + '</th>');\n      }\n      for (day=0; day < BFHDayOfWeekStart; day=day+1) {\n        $daysHeader.append('<th>' + BFHDaysList[day] + '</th>');\n      }\n    },\n\n    checkMinDate: function(day, month, year) {\n      var lowerlimit,\n          lowerday,\n          lowermonth,\n          loweryear;\n\n      lowerlimit = this.$element.data('lowerlimit');\n\n      if (lowerlimit === true) {\n        lowerday = this.$element.data('lowerday');\n        lowermonth = this.$element.data('lowermonth');\n        loweryear = this.$element.data('loweryear');\n\n        if ((day < lowerday && month === lowermonth && year === loweryear) || (month < lowermonth && year === loweryear) || (year < loweryear)) {\n          return true;\n        }\n      }\n\n      return false;\n    },\n\n    checkMaxDate: function(day, month, year) {\n      var higherlimit,\n          higherday,\n          highermonth,\n          higheryear;\n\n      higherlimit = this.$element.data('higherlimit');\n\n      if (higherlimit === true) {\n        higherday = this.$element.data('higherday');\n        highermonth = this.$element.data('highermonth');\n        higheryear = this.$element.data('higheryear');\n\n        if ((day > higherday && month === highermonth && year === higheryear) || (month > highermonth && year === higheryear) || (year > higheryear)) {\n          return true;\n        }\n      }\n\n      return false;\n    },\n\n    checkToday: function(day, month, year) {\n      var today;\n\n      today = new Date();\n\n      if (day === today.getDate() && month === today.getMonth() && year === today.getFullYear()) {\n        return true;\n      }\n\n      return false;\n    },\n\n    updateCalendarDays: function($calendar, month, year) {\n      var $days,\n          numDaysPreviousMonth,\n          numDaysCurrentMonth,\n          firstDay,\n          lastDay,\n          row,\n          day;\n\n      $days = $calendar.find('table > tbody').html('');\n      numDaysPreviousMonth = getNumDaysInMonth(month, year);\n      numDaysCurrentMonth = getNumDaysInMonth(month + 1, year);\n      firstDay = getDayOfWeek(month, year, 1);\n      lastDay = getDayOfWeek(month, year, numDaysCurrentMonth);\n\n      row = '';\n      for (day=0; day < (firstDay - BFHDayOfWeekStart + 7) % 7; day=day+1) {\n        row += '<td class=\"off\">' + (numDaysPreviousMonth - (firstDay - BFHDayOfWeekStart + 7) % 7 + day + 1) + '</td>';\n      }\n\n      for (day=1; day <= numDaysCurrentMonth; day=day+1) {\n        if (this.checkMinDate(day, month, year)) {\n          row += '<td data-day=\"' + day + '\" class=\"off\">' + day + '</td>';\n        } else if (this.checkMaxDate(day, month, year)) {\n          row += '<td data-day=\"' + day + '\" class=\"off\">' + day + '</td>';\n        } else if (this.checkToday(day, month, year)) {\n          row += '<td data-day=\"' + day + '\" class=\"today\">' + day + '</td>';\n        } else {\n          row += '<td data-day=\"' + day + '\">' + day + '</td>';\n        }\n        if (getDayOfWeek(month, year, day) === (6 + BFHDayOfWeekStart) % 7) {\n          $days.append('<tr>' + row + '</tr>');\n          row = '';\n        }\n      }\n\n      for (day=1; day <= (7 - ((lastDay + 1 - BFHDayOfWeekStart + 7) % 7)) % 7 + 1; day=day+1) {\n        row += '<td class=\"off\">' + day + '</td>';\n        if (day === (7 - ((lastDay + 1 - BFHDayOfWeekStart + 7) % 7)) % 7) {\n          $days.append('<tr>' + row + '</tr>');\n        }\n      }\n    },\n\n    updateCalendar: function () {\n      var $calendar,\n          month,\n          year;\n\n      $calendar = this.$element.find('.bfh-datepicker-calendar');\n      month = this.$element.data('month');\n      year = this.$element.data('year');\n\n      this.updateCalendarHeader($calendar, month, year);\n      this.updateCalendarDays($calendar, month, year);\n    },\n\n    previousMonth: function () {\n      var $this,\n          $parent,\n          $datePicker;\n\n      $this = $(this);\n      $parent = getParent($this);\n\n      if (Number($parent.data('month')) === 0) {\n        $parent.data('month', 11);\n        $parent.data('year', Number($parent.data('year')) - 1);\n      } else {\n        $parent.data('month', Number($parent.data('month')) - 1);\n      }\n\n      $datePicker = $parent.data('bfhdatepicker');\n      $datePicker.updateCalendar();\n\n      return false;\n    },\n\n    nextMonth: function () {\n      var $this,\n          $parent,\n          $datePicker;\n\n      $this = $(this);\n      $parent = getParent($this);\n\n      if (Number($parent.data('month')) === 11) {\n        $parent.data('month', 0);\n        $parent.data('year', Number($parent.data('year')) + 1);\n      } else {\n        $parent.data('month', Number($parent.data('month')) + 1);\n      }\n\n      $datePicker = $parent.data('bfhdatepicker');\n      $datePicker.updateCalendar();\n\n      return false;\n    },\n\n    previousYear: function () {\n      var $this,\n          $parent,\n          $datePicker;\n\n      $this = $(this);\n      $parent = getParent($this);\n\n      $parent.data('year', Number($parent.data('year')) - 1);\n\n      $datePicker = $parent.data('bfhdatepicker');\n      $datePicker.updateCalendar();\n\n      return false;\n    },\n\n    nextYear: function () {\n      var $this,\n          $parent,\n          $datePicker;\n\n      $this = $(this);\n      $parent = getParent($this);\n\n      $parent.data('year', Number($parent.data('year')) + 1);\n\n      $datePicker = $parent.data('bfhdatepicker');\n      $datePicker.updateCalendar();\n\n      return false;\n    },\n\n    select: function (e) {\n      var $this,\n          $parent,\n          $datePicker,\n          month,\n          year,\n          day;\n\n      $this = $(this);\n\n      e.preventDefault();\n      e.stopPropagation();\n\n      $parent = getParent($this);\n      $datePicker = $parent.data('bfhdatepicker');\n      month = $parent.data('month');\n      year = $parent.data('year');\n      day = $this.data('day');\n\n      $parent.val(formatDate($datePicker.options.format, month, year, day));\n      $parent.trigger('change.bfhdatepicker');\n\n      if ($datePicker.options.close === true) {\n        clearMenus();\n      }\n    },\n\n    toggle: function (e) {\n      var $this,\n          $parent,\n          isActive;\n\n      $this = $(this);\n      $parent = getParent($this);\n\n      if ($parent.is('.disabled') || $parent.attr('disabled') !== undefined) {\n        return true;\n      }\n\n      isActive = $parent.hasClass('open');\n\n      clearMenus();\n\n      if (!isActive) {\n        $parent.trigger(e = $.Event('show.bfhdatepicker'));\n\n        if (e.isDefaultPrevented()) {\n          return true;\n        }\n\n        $parent\n          .toggleClass('open')\n          .trigger('shown.bfhdatepicker');\n\n        $this.focus();\n      }\n\n      return false;\n    }\n  };\n\n  function getNumDaysInMonth(month, year) {\n    return new Date(year, month, 0).getDate();\n  }\n\n  function getDayOfWeek(month, year, day) {\n    return new Date(year, month, day).getDay();\n  }\n\n  function formatDate(format, month, year, day) {\n    month += 1;\n    month = String(month);\n    day = String(day);\n\n    if (month.length === 1) {\n      month = '0' + month;\n    }\n    if (day.length === 1) {\n      day = '0' + day;\n    }\n\n    return format.replace('m', month).replace('y', year).replace('d', day);\n  }\n\n  function getDatePart(format, date, part) {\n    var partPositions,\n        partPosition,\n        parts;\n\n    partPositions = [\n      {'part': 'm', 'position': format.indexOf('m')},\n      {'part': 'y', 'position': format.indexOf('y')},\n      {'part': 'd', 'position': format.indexOf('d')}\n    ];\n\n    partPositions.sort(function(a, b) {return a.position - b.position;});\n\n    parts = date.match(/(\\d+)/g);\n\n    for (partPosition in partPositions) {\n      if (partPositions.hasOwnProperty(partPosition)) {\n        if (partPositions[partPosition].part === part) {\n          return Number(parts[partPosition]).toString();\n        }\n      }\n    }\n  }\n\n  function clearMenus() {\n    var $parent;\n\n    $(toggle).each(function (e) {\n      $parent = getParent($(this));\n\n      if (!$parent.hasClass('open')) {\n        return true;\n      }\n\n      $parent.trigger(e = $.Event('hide.bfhdatepicker'));\n\n      if (e.isDefaultPrevented()) {\n        return true;\n      }\n\n      $parent\n        .removeClass('open')\n        .trigger('hidden.bfhdatepicker');\n    });\n  }\n\n  function getParent($this) {\n    return $this.closest('.bfh-datepicker');\n  }\n\n\n  /* DATEPICKER PLUGIN DEFINITION\n   * ========================== */\n\n  var old = $.fn.bfhdatepicker;\n\n  $.fn.bfhdatepicker = function (option) {\n    return this.each(function () {\n      var $this,\n          data,\n          options;\n\n      $this = $(this);\n      data = $this.data('bfhdatepicker');\n      options = typeof option === 'object' && option;\n      this.type = 'bfhdatepicker';\n\n      if (!data) {\n        $this.data('bfhdatepicker', (data = new BFHDatePicker(this, options)));\n      }\n      if (typeof option === 'string') {\n        data[option].call($this);\n      }\n    });\n  };\n\n  $.fn.bfhdatepicker.Constructor = BFHDatePicker;\n\n  $.fn.bfhdatepicker.defaults = {\n    icon: 'glyphicon glyphicon-calendar',\n    align: 'left',\n    input: 'form-control',\n    placeholder: '',\n    name: '',\n    date: 'today',\n    format: 'm/d/y',\n    min: '',\n    max: '',\n    close: true\n  };\n\n\n  /* DATEPICKER NO CONFLICT\n   * ========================== */\n\n  $.fn.bfhdatepicker.noConflict = function () {\n    $.fn.bfhdatepicker = old;\n    return this;\n  };\n\n\n  /* DATEPICKER VALHOOKS\n   * ========================== */\n\n  var origHook;\n  if ($.valHooks.div){\n    origHook = $.valHooks.div;\n  }\n  $.valHooks.div = {\n    get: function(el) {\n      if ($(el).hasClass('bfh-datepicker')) {\n        return $(el).find('input[type=\"text\"]').val();\n      } else if (origHook) {\n        return origHook.get(el);\n      }\n    },\n    set: function(el, val) {\n      if ($(el).hasClass('bfh-datepicker')) {\n        $(el).find('input[type=\"text\"]').val(val);\n      } else if (origHook) {\n        return origHook.set(el,val);\n      }\n    }\n  };\n\n\n  /* DATEPICKER DATA-API\n   * ============== */\n\n  $(document).on('turbo:load', function () {\n    $('div.bfh-datepicker').each(function () {\n      var $datepicker;\n\n      $datepicker = $(this);\n\n      $datepicker.bfhdatepicker($datepicker.data());\n    });\n  });\n\n\n  /* APPLY TO STANDARD DATEPICKER ELEMENTS\n   * =================================== */\n\n  $(document)\n    .on('click.bfhdatepicker.data-api', clearMenus);\n\n}(window.jQuery);\n\n/* ==========================================================\n * bootstrap-formhelpers-fonts.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2012 Vincent Lamanna\n * contributed by Aaron Collegeman, Squidoo, 2012\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n+function ($) {\n\n  'use strict';\n\n\n  /* FONTS CLASS DEFINITION\n   * ====================== */\n\n  var BFHFonts = function (element, options) {\n    this.options = $.extend({}, $.fn.bfhfonts.defaults, options);\n    this.$element = $(element);\n\n    if (this.$element.is('select')) {\n      this.addFonts();\n    }\n\n    if (this.$element.hasClass('bfh-selectbox')) {\n      this.addBootstrapFonts();\n    }\n  };\n\n  BFHFonts.prototype = {\n\n    constructor: BFHFonts,\n\n    getFonts: function() {\n      var font,\n          fonts;\n\n      if (this.options.available) {\n        fonts = [];\n\n        this.options.available = this.options.available.split(',');\n\n        for (font in BFHFontsList) {\n          if (BFHFontsList.hasOwnProperty(font)) {\n            if ($.inArray(font, this.options.available) >= 0) {\n              fonts[font] = BFHFontsList[font];\n            }\n          }\n        }\n\n        return fonts;\n      } else {\n        return BFHFontsList;\n      }\n    },\n\n    addFonts: function () {\n      var value,\n          font,\n          fonts;\n\n      value = this.options.font;\n      fonts = this.getFonts();\n\n      this.$element.html('');\n\n      if (this.options.blank === true) {\n        this.$element.append('<option value=\"\"></option>');\n      }\n\n      for (font in fonts) {\n        if (fonts.hasOwnProperty(font)) {\n          this.$element.append('<option value=\"' + font + '\">' + font + '</option>');\n        }\n      }\n\n      this.$element.val(value);\n    },\n\n    addBootstrapFonts: function() {\n      var $input,\n          $toggle,\n          $options,\n          value,\n          font,\n          fonts;\n\n      value = this.options.font;\n      $input = this.$element.find('input[type=\"hidden\"]');\n      $toggle = this.$element.find('.bfh-selectbox-option');\n      $options = this.$element.find('[role=option]');\n      fonts = this.getFonts();\n\n      $options.html('');\n\n      if (this.options.blank === true) {\n        $options.append('<li><a tabindex=\"-1\" href=\"#\" data-option=\"\"></a></li>');\n      }\n\n      for (font in fonts) {\n        if (fonts.hasOwnProperty(font)) {\n          $options.append('<li><a tabindex=\"-1\" href=\"#\" style=\\'font-family: ' + fonts[font] + '\\' data-option=\"' + font + '\">' + font + '</a></li>');\n        }\n      }\n\n      this.$element.val(value);\n    }\n\n  };\n\n\n  /* FONTS PLUGIN DEFINITION\n   * ======================= */\n\n  var old = $.fn.bfhfonts;\n\n  $.fn.bfhfonts = function (option) {\n    return this.each(function () {\n      var $this,\n          data,\n          options;\n\n      $this = $(this);\n      data = $this.data('bfhfonts');\n      options = typeof option === 'object' && option;\n\n      if (!data) {\n        $this.data('bfhfonts', (data = new BFHFonts(this, options)));\n      }\n      if (typeof option === 'string') {\n        data[option].call($this);\n      }\n    });\n  };\n\n  $.fn.bfhfonts.Constructor = BFHFonts;\n\n  $.fn.bfhfonts.defaults = {\n    font: '',\n    available: '',\n    blank: true\n  };\n\n\n  /* FONTS NO CONFLICT\n   * ========================== */\n\n  $.fn.bfhfonts.noConflict = function () {\n    $.fn.bfhfonts = old;\n    return this;\n  };\n\n\n  /* FONTS DATA-API\n   * ============== */\n\n  $(document).on('turbo:load', function () {\n    $('form select.bfh-fonts, span.bfh-fonts, div.bfh-fonts').each(function () {\n      var $fonts;\n\n      $fonts = $(this);\n\n      if ($fonts.hasClass('bfh-selectbox')) {\n        $fonts.bfhselectbox($fonts.data());\n      }\n      $fonts.bfhfonts($fonts.data());\n    });\n  });\n\n}(window.jQuery);\n\n/* ==========================================================\n * bootstrap-formhelpers-fontsizes.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2012 Vincent Lamanna\n * contributed by Aaron Collegeman, Squidoo, 2012\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n+function ($) {\n\n  'use strict';\n\n\n  /* FONTSIZES CLASS DEFINITION\n   * ====================== */\n\n  var BFHFontSizes = function (element, options) {\n    this.options = $.extend({}, $.fn.bfhfontsizes.defaults, options);\n    this.$element = $(element);\n\n    if (this.$element.is('select')) {\n      this.addFontSizes();\n    }\n\n    if (this.$element.hasClass('bfh-selectbox')) {\n      this.addBootstrapFontSizes();\n    }\n  };\n\n  BFHFontSizes.prototype = {\n\n    constructor: BFHFontSizes,\n\n    getFontsizes: function() {\n      var fontsize,\n          fontsizes;\n\n      if (this.options.available) {\n        fontsizes = [];\n\n        this.options.available = this.options.available.split(',');\n\n        for (fontsize in BFHFontSizesList) {\n          if (BFHFontSizesList.hasOwnProperty(fontsize)) {\n            if ($.inArray(fontsize, this.options.available) >= 0) {\n              fontsizes[fontsize] = BFHFontSizesList[fontsize];\n            }\n          }\n        }\n\n        return fontsizes;\n      } else {\n        return BFHFontSizesList;\n      }\n    },\n\n    addFontSizes: function () {\n      var value,\n          fontsize,\n          fontsizes;\n\n      value = this.options.fontsize;\n      fontsizes = this.getFontsizes();\n\n      this.$element.html('');\n\n      if (this.options.blank === true) {\n        this.$element.append('<option value=\"\"></option>');\n      }\n\n      for (fontsize in fontsizes) {\n        if (fontsizes.hasOwnProperty(fontsize)) {\n          this.$element.append('<option value=\"' + fontsize + '\">' + fontsizes[fontsize] + '</option>');\n        }\n      }\n\n      this.$element.val(value);\n    },\n\n    addBootstrapFontSizes: function() {\n      var $input,\n          $toggle,\n          $options,\n          value,\n          fontsize,\n          fontsizes;\n\n      value = this.options.fontsize;\n      $input = this.$element.find('input[type=\"hidden\"]');\n      $toggle = this.$element.find('.bfh-selectbox-option');\n      $options = this.$element.find('[role=option]');\n      fontsizes = this.getFontsizes();\n\n      $options.html('');\n\n      if (this.options.blank === true) {\n        $options.append('<li><a tabindex=\"-1\" href=\"#\" data-option=\"\"></a></li>');\n      }\n\n      for (fontsize in fontsizes) {\n        if (fontsizes.hasOwnProperty(fontsize)) {\n          $options.append('<li><a tabindex=\"-1\" href=\"#\" data-option=\"' + fontsize + '\">' + fontsizes[fontsize] + '</a></li>');\n        }\n      }\n\n      this.$element.val(value);\n    }\n\n  };\n\n\n  /* FONTSIZES PLUGIN DEFINITION\n   * ======================= */\n\n  var old = $.fn.bfhfontsizes;\n\n  $.fn.bfhfontsizes = function (option) {\n    return this.each(function () {\n      var $this,\n          data,\n          options;\n\n      $this = $(this);\n      data = $this.data('bfhfontsizes');\n      options = typeof option === 'object' && option;\n\n      if (!data) {\n        $this.data('bfhfontsizes', (data = new BFHFontSizes(this, options)));\n      }\n      if (typeof option === 'string') {\n        data[option].call($this);\n      }\n    });\n  };\n\n  $.fn.bfhfontsizes.Constructor = BFHFontSizes;\n\n  $.fn.bfhfontsizes.defaults = {\n    fontsize: '',\n    available: '',\n    blank: true\n  };\n\n\n  /* FONTSIZES NO CONFLICT\n   * ========================== */\n\n  $.fn.bfhfontsizes.noConflict = function () {\n    $.fn.bfhfontsizes = old;\n    return this;\n  };\n\n\n  /* FONTSIZES DATA-API\n   * ============== */\n\n  $(document).on('turbo:load', function () {\n    $('form select.bfh-fontsizes, span.bfh-fontsizes, div.bfh-fontsizes').each(function () {\n      var $fontSizes;\n\n      $fontSizes = $(this);\n\n      if ($fontSizes.hasClass('bfh-selectbox')) {\n        $fontSizes.bfhselectbox($fontSizes.data());\n      }\n      $fontSizes.bfhfontsizes($fontSizes.data());\n    });\n  });\n\n}(window.jQuery);\n\n/* ==========================================================\n * bootstrap-formhelpers-googlefonts.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2012 Vincent Lamanna\n * contributed by Aaron Collegeman, Squidoo, 2012\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n+function ($) {\n\n  'use strict';\n\n\n  /* GOOGLE FONTS CLASS DEFINITION\n   * ====================== */\n\n  var BFHGoogleFonts = function (element, options) {\n    this.options = $.extend({}, $.fn.bfhgooglefonts.defaults, options);\n    this.$element = $(element);\n\n    if (this.$element.is('select')) {\n      this.addFonts();\n    }\n\n    if (this.$element.hasClass('bfh-selectbox')) {\n      this.addBootstrapFonts();\n    }\n  };\n\n  BFHGoogleFonts.prototype = {\n\n    constructor: BFHGoogleFonts,\n\n    getFonts: function() {\n      var font,\n          fonts;\n\n      fonts = [];\n\n      if (this.options.subset) {\n        for (font in BFHGoogleFontsList.items) {\n          if (BFHGoogleFontsList.items.hasOwnProperty(font)) {\n            if ($.inArray(this.options.subset, BFHGoogleFontsList.items[font].subsets) >= 0) {\n              fonts[BFHGoogleFontsList.items[font].family] = {\n                'info': BFHGoogleFontsList.items[font],\n                'index': parseInt(font, 10)\n              };\n            }\n          }\n        }\n      } else if (this.options.available) {\n        this.options.available = this.options.available.split(',');\n\n        for (font in BFHGoogleFontsList.items) {\n          if (BFHGoogleFontsList.items.hasOwnProperty(font)) {\n            if ($.inArray(BFHGoogleFontsList.items[font].family, this.options.available) >= 0) {\n              fonts[BFHGoogleFontsList.items[font].family] = {\n                'info': BFHGoogleFontsList.items[font],\n                'index': parseInt(font, 10)\n              };\n            }\n          }\n        }\n      } else {\n        for (font in BFHGoogleFontsList.items) {\n          if (BFHGoogleFontsList.items.hasOwnProperty(font)) {\n            fonts[BFHGoogleFontsList.items[font].family] = {\n              'info': BFHGoogleFontsList.items[font],\n              'index': parseInt(font, 10)\n            };\n          }\n        }\n      }\n\n      return fonts;\n    },\n\n    addFonts: function () {\n      var value,\n          font,\n          fonts;\n\n      value = this.options.font;\n      fonts = this.getFonts();\n\n      this.$element.html('');\n\n      if (this.options.blank === true) {\n        this.$element.append('<option value=\"\"></option>');\n      }\n\n      for (font in fonts) {\n        if (fonts.hasOwnProperty(font)) {\n          this.$element.append('<option value=\"' + fonts[font].info.family + '\">' + fonts[font].info.family + '</option>');\n        }\n      }\n\n      this.$element.val(value);\n    },\n\n    addBootstrapFonts: function() {\n      var $input,\n          $toggle,\n          $options,\n          value,\n          font,\n          fonts;\n\n      value = this.options.font;\n      $input = this.$element.find('input[type=\"hidden\"]');\n      $toggle = this.$element.find('.bfh-selectbox-option');\n      $options = this.$element.find('[role=option]');\n      fonts = this.getFonts();\n\n      $options.html('');\n\n      if (this.options.blank === true) {\n        $options.append('<li><a tabindex=\"-1\" href=\"#\" data-option=\"\" style=\"background-image: none;\"></a></li>');\n      }\n\n      for (font in fonts) {\n        if (fonts.hasOwnProperty(font)) {\n          $options.append('<li><a tabindex=\"-1\" href=\"#\" style=\"background-position: 0 -' + ((fonts[font].index * 30) - 2) + 'px;\" data-option=\"' + fonts[font].info.family + '\">' + fonts[font].info.family + '</a></li>');\n        }\n      }\n\n      this.$element.val(value);\n    }\n\n  };\n\n\n  /* GOOGLE FONTS PLUGIN DEFINITION\n   * ======================= */\n\n  var old = $.fn.bfhgooglefonts;\n\n  $.fn.bfhgooglefonts = function (option) {\n    return this.each(function () {\n      var $this,\n          data,\n          options;\n\n      $this = $(this);\n      data = $this.data('bfhgooglefonts');\n      options = typeof option === 'object' && option;\n\n      if (!data) {\n        $this.data('bfhgooglefonts', (data = new BFHGoogleFonts(this, options)));\n      }\n      if (typeof option === 'string') {\n        data[option].call($this);\n      }\n    });\n  };\n\n  $.fn.bfhgooglefonts.Constructor = BFHGoogleFonts;\n\n  $.fn.bfhgooglefonts.defaults = {\n    font: '',\n    available: '',\n    subset: '',\n    blank: true\n  };\n\n\n  /* GOOGLE FONTS NO CONFLICT\n   * ========================== */\n\n  $.fn.bfhgooglefonts.noConflict = function () {\n    $.fn.bfhgooglefonts = old;\n    return this;\n  };\n\n\n  /* GOOGLE FONTS DATA-API\n   * ============== */\n\n  $(document).on('turbo:load', function () {\n    $('form select.bfh-googlefonts, span.bfh-googlefonts, div.bfh-googlefonts').each(function () {\n      var $googleFonts;\n\n      $googleFonts = $(this);\n\n      if ($googleFonts.hasClass('bfh-selectbox')) {\n        $googleFonts.bfhselectbox($googleFonts.data());\n      }\n      $googleFonts.bfhgooglefonts($googleFonts.data());\n    });\n  });\n\n}(window.jQuery);\n\n/* ==========================================================\n * bootstrap-formhelpers-languages.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2012 Vincent Lamanna\n * Contribution 2013 Tomasz Kuter\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n+function ($) {\n\n  'use strict';\n\n\n  /* LANGUAGES CLASS DEFINITION\n   * ====================== */\n\n  var BFHLanguages = function (element, options) {\n    this.options = $.extend({}, $.fn.bfhlanguages.defaults, options);\n    this.$element = $(element);\n\n    if (this.$element.is('select')) {\n      this.addLanguages();\n    }\n\n    if (this.$element.is('span')) {\n      this.displayLanguage();\n    }\n\n    if (this.$element.hasClass('bfh-selectbox')) {\n      this.addBootstrapLanguages();\n    }\n  };\n\n  BFHLanguages.prototype = {\n\n    constructor: BFHLanguages,\n\n    getLanguages: function () {\n      var split,\n          language,\n          languages;\n\n      if (this.options.available) {\n        languages = [];\n\n        this.options.available = this.options.available.split(',');\n\n        for (language in this.options.available) {\n          if (this.options.available.hasOwnProperty(language)) {\n            if (this.options.available[language].indexOf('_') !== -1) {\n              split = this.options.available[language].split('_');\n              languages[split[0]] = {name: BFHLanguagesList[split[0]], country: split[1]};\n            } else {\n              languages[this.options.available[language]] = BFHLanguagesList[this.options.available[language]];\n            }\n          }\n        }\n\n        return languages;\n      } else {\n        return BFHLanguagesList;\n      }\n    },\n\n    addLanguages: function () {\n      var split,\n          value,\n          languages,\n          language;\n\n      value = this.options.language;\n      languages = this.getLanguages();\n\n      this.$element.html('');\n\n      if (this.options.blank === true) {\n        this.$element.append('<option value=\"\"></option>');\n      }\n\n      for (language in languages) {\n        if (languages.hasOwnProperty(language)) {\n          if (languages[language].hasOwnProperty('name')) {\n            this.$element.append('<option value=\"' + language + '_' + languages[language].country + '\">' + languages[language].name.toProperCase() + ' (' + BFHCountriesList[languages[language].country] + ')</option>');\n          } else {\n            this.$element.append('<option value=\"' + language + '\">' + languages[language].toProperCase() + '</option>');\n          }\n        }\n      }\n\n      this.$element.val(value);\n    },\n\n    addBootstrapLanguages: function() {\n      var $input,\n          $toggle,\n          $options,\n          value,\n          languages,\n          language,\n          split;\n\n      value = this.options.language;\n      $input = this.$element.find('input[type=\"hidden\"]');\n      $toggle = this.$element.find('.bfh-selectbox-option');\n      $options = this.$element.find('[role=option]');\n      languages = this.getLanguages();\n\n      $options.html('');\n\n      if (this.options.blank === true) {\n        $options.append('<li><a tabindex=\"-1\" href=\"#\" data-option=\"\"></a></li>');\n      }\n\n      for (language in languages) {\n        if (languages.hasOwnProperty(language)) {\n          if (languages[language].hasOwnProperty('name')) {\n            if (this.options.flags === true) {\n              $options.append('<li><a tabindex=\"-1\" href=\"#\" data-option=\"' + language + '_' + languages[language].country + '\"><i class=\"glyphicon bfh-flag-' + languages[language].country + '\"></i>' + languages[language].name.toProperCase() + '</a></li>');\n            } else {\n              $options.append('<li><a tabindex=\"-1\" href=\"#\" data-option=\"' + language + '_' + languages[language].country + '\">' + languages[language].name.toProperCase() + ' (' + BFHCountriesList[languages[language].country] + ')</a></li>');\n            }\n          } else {\n            $options.append('<li><a tabindex=\"-1\" href=\"#\" data-option=\"' + language + '\">' + languages[language] + '</a></li>');\n          }\n        }\n      }\n\n      this.$element.val(value);\n    },\n\n    displayLanguage: function () {\n      var value;\n\n      value = this.options.language;\n\n      if (value.indexOf('_') !== -1) {\n        value = value.split('_');\n        if (this.options.flags === true) {\n          this.$element.html('<i class=\"glyphicon bfh-flag-' + value[1] + '\"></i> ' + BFHLanguagesList[value[0]].toProperCase());\n        } else {\n          this.$element.html(BFHLanguagesList[value[0]].toProperCase() + ' (' + BFHCountriesList[value[1]] + ')');\n        }\n      } else {\n        this.$element.html(BFHLanguagesList[value].toProperCase());\n      }\n    }\n\n  };\n\n\n  /* LANGUAGES PLUGIN DEFINITION\n   * ======================= */\n\n  var old = $.fn.bfhlanguages;\n\n  $.fn.bfhlanguages = function (option) {\n    return this.each(function () {\n      var $this,\n          data,\n          options;\n\n      $this = $(this);\n      data = $this.data('bfhlanguages');\n      options = typeof option === 'object' && option;\n\n      if (!data) {\n        $this.data('bfhlanguages', (data = new BFHLanguages(this, options)));\n      }\n      if (typeof option === 'string') {\n        data[option].call($this);\n      }\n    });\n  };\n\n  $.fn.bfhlanguages.Constructor = BFHLanguages;\n\n  $.fn.bfhlanguages.defaults = {\n    language: '',\n    available: '',\n    flags: false,\n    blank: true\n  };\n\n\n  /* LANGUAGES NO CONFLICT\n   * ========================== */\n\n  $.fn.bfhlanguages.noConflict = function () {\n    $.fn.bfhlanguages = old;\n    return this;\n  };\n\n\n  /* LANGUAGES DATA-API\n   * ============== */\n\n  $(document).on('turbo:load', function () {\n    $('form select.bfh-languages, span.bfh-languages, div.bfh-languages').each(function () {\n      var $languages;\n\n      $languages = $(this);\n\n      if ($languages.hasClass('bfh-selectbox')) {\n        $languages.bfhselectbox($languages.data());\n      }\n      $languages.bfhlanguages($languages.data());\n    });\n  });\n\n\n  /* LANGUAGES HELPERS\n   * ============== */\n\n  String.prototype.toProperCase = function () {\n    return this.replace(/\\w\\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});\n  };\n\n}(window.jQuery);\n\n/* ==========================================================\n * bootstrap-formhelpers-number.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2012 Vincent Lamanna\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n+function ($) {\n\n  'use strict';\n\n\n  /* NUMBER CLASS DEFINITION\n   * ====================== */\n\n  var BFHNumber = function (element, options) {\n    this.options = $.extend({}, $.fn.bfhnumber.defaults, options);\n    this.$element = $(element);\n\n    this.initInput();\n  };\n\n  BFHNumber.prototype = {\n\n    constructor: BFHNumber,\n\n    initInput: function() {\n      var value;\n      \n      if (this.options.buttons === true) {\n        this.$element.wrap('<div class=\"input-group\"></div>');\n        this.$element.parent().append('<span class=\"input-group-addon bfh-number-btn inc\"><span class=\"glyphicon glyphicon-chevron-up\"></span></span>');\n        this.$element.parent().append('<span class=\"input-group-addon bfh-number-btn dec\"><span class=\"glyphicon glyphicon-chevron-down\"></span></span>');\n      }\n      \n      this.$element.on('change.bfhnumber.data-api', BFHNumber.prototype.change);\n        \n      if (this.options.keyboard === true) {\n        this.$element.on('keydown.bfhnumber.data-api', BFHNumber.prototype.keydown);\n      }\n      \n      if (this.options.buttons === true) {\n        this.$element.parent()\n          .on('mousedown.bfhnumber.data-api', '.inc', BFHNumber.prototype.btninc)\n          .on('mousedown.bfhnumber.data-api', '.dec', BFHNumber.prototype.btndec);\n      }\n      \n      this.formatNumber();\n    },\n    \n    keydown: function(e) {\n      var $this;\n      \n      $this = $(this).data('bfhnumber');\n      \n      if ($this.$element.is('.disabled') || $this.$element.attr('disabled') !== undefined) {\n        return true;\n      }\n      \n      switch (e.which) {\n        case 38:\n          $this.increment();\n          break;\n        case 40:\n          $this.decrement();\n          break;\n        default:\n      }\n      \n      return true;\n    },\n    \n    mouseup: function(e) {\n      var $this,\n          timer,\n          interval;\n      \n      $this = e.data.btn;\n      timer = $this.$element.data('timer');\n      interval = $this.$element.data('interval');\n      \n      clearTimeout(timer);\n      clearInterval(interval);\n    },\n    \n    btninc: function() {\n      var $this,\n          timer;\n      \n      $this = $(this).parent().find('.bfh-number').data('bfhnumber');\n      \n      if ($this.$element.is('.disabled') || $this.$element.attr('disabled') !== undefined) {\n        return true;\n      }\n      \n      $this.increment();\n      \n      timer = setTimeout(function() {\n        var interval;\n        interval = setInterval(function() {\n          $this.increment();\n        }, 80);\n        $this.$element.data('interval', interval);\n      }, 750);\n      $this.$element.data('timer', timer);\n      \n      $(document).one('mouseup', {btn: $this}, BFHNumber.prototype.mouseup);\n      \n      return true;\n    },\n    \n    btndec: function() {\n      var $this,\n          timer;\n      \n      $this = $(this).parent().find('.bfh-number').data('bfhnumber');\n      \n      if ($this.$element.is('.disabled') || $this.$element.attr('disabled') !== undefined) {\n        return true;\n      }\n      \n      $this.decrement();\n      \n      timer = setTimeout(function() {\n        var interval;\n        interval = setInterval(function() {\n          $this.decrement();\n        }, 80);\n        $this.$element.data('interval', interval);\n      }, 750);\n      $this.$element.data('timer', timer);\n      \n      $(document).one('mouseup', {btn: $this}, BFHNumber.prototype.mouseup);\n      \n      return true;\n    },\n    \n    change: function() {\n      var $this;\n\n      $this = $(this).data('bfhnumber');\n\n      if ($this.$element.is('.disabled') || $this.$element.attr('disabled') !== undefined) {\n        return true;\n      }\n\n      $this.formatNumber();\n\n      return true;\n    },\n    \n    increment: function() {\n      var value;\n      \n      value = this.getValue();\n      \n      value = value + 1;\n      \n      this.$element.val(value).change();\n    },\n    \n    decrement: function() {\n      var value;\n      \n      value = this.getValue();\n      \n      value = value - 1;\n      \n      this.$element.val(value).change();\n    },\n    \n    getValue: function() {\n      var value;\n      \n      value = this.$element.val();\n      if (value !== '-1') {\n        value = String(value).replace(/\\D/g, '');\n      }\n      if (String(value).length === 0) {\n        value = this.options.min;\n      }\n      \n      return parseInt(value);\n    },\n    \n    formatNumber: function() {\n      var value,\n          maxLength,\n          length,\n          zero;\n      \n      value = this.getValue();\n      \n      if (value > this.options.max) {\n        if (this.options.wrap === true) {\n          value = this.options.min;\n        } else {\n          value = this.options.max;\n        }\n      }\n      \n      if (value < this.options.min) {\n        if (this.options.wrap === true) {\n          value = this.options.max;\n        } else {\n          value = this.options.min;\n        }\n      }\n      \n      if (this.options.zeros === true) {\n        maxLength = String(this.options.max).length;\n        length = String(value).length;\n        for (zero=length; zero < maxLength; zero = zero + 1) {\n          value = '0' + value;\n        }\n      }\n      \n      if (value !== this.$element.val()) {\n        this.$element.val(value);\n      }\n    }\n\n  };\n\n  /* NUMBER PLUGIN DEFINITION\n   * ======================= */\n\n  var old = $.fn.bfhnumber;\n\n  $.fn.bfhnumber = function (option) {\n    return this.each(function () {\n      var $this,\n          data,\n          options;\n\n      $this = $(this);\n      data = $this.data('bfhnumber');\n      options = typeof option === 'object' && option;\n\n      if (!data) {\n        $this.data('bfhnumber', (data = new BFHNumber(this, options)));\n      }\n      if (typeof option === 'string') {\n        data[option].call($this);\n      }\n    });\n  };\n\n  $.fn.bfhnumber.Constructor = BFHNumber;\n\n  $.fn.bfhnumber.defaults = {\n    min: 0,\n    max: 9999,\n    zeros: false,\n    keyboard: true,\n    buttons: true,\n    wrap: false\n  };\n\n\n  /* NUMBER NO CONFLICT\n   * ========================== */\n\n  $.fn.bfhnumber.noConflict = function () {\n    $.fn.bfhnumber = old;\n    return this;\n  };\n\n\n  /* NUMBER DATA-API\n   * ============== */\n\n  $(document).on('turbo:load', function () {\n    $('form input[type=\"text\"].bfh-number, form input[type=\"number\"].bfh-number').each(function () {\n      var $number;\n\n      $number = $(this);\n\n      $number.bfhnumber($number.data());\n    });\n  });\n\n\n  /* APPLY TO STANDARD NUMBER ELEMENTS\n   * =================================== */\n\n\n}(window.jQuery);\n\n/* ==========================================================\n * bootstrap-formhelpers-phone.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2012 Vincent Lamanna\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n+function ($) {\n\n  'use strict';\n\n\n  /* PHONE CLASS DEFINITION\n   * ====================== */\n\n  var BFHPhone = function (element, options) {\n    this.options = $.extend({}, $.fn.bfhphone.defaults, options);\n    this.$element = $(element);\n\n    if (this.$element.is('input[type=\"text\"]') || this.$element.is('input[type=\"tel\"]')) {\n      this.addFormatter();\n    }\n\n    if (this.$element.is('span')) {\n      this.displayFormatter();\n    }\n  };\n\n  BFHPhone.prototype = {\n\n    constructor: BFHPhone,\n\n    addFormatter: function() {\n      var $country;\n\n      if (this.options.country !== '') {\n        $country = $(document).find('#' + this.options.country);\n\n        if ($country.length !== 0) {\n          this.options.format = BFHPhoneFormatList[$country.val()];\n          $country.on('change', {phone: this}, this.changeCountry);\n        } else {\n          this.options.format = BFHPhoneFormatList[this.options.country];\n        }\n      }\n      \n      this.$element.on('keyup.bfhphone.data-api', BFHPhone.prototype.change);\n\n      this.loadFormatter();\n    },\n\n    loadFormatter: function () {\n      var formattedNumber;\n\n      formattedNumber = formatNumber(this.options.format, this.$element.val());\n\n      this.$element.val(formattedNumber);\n    },\n\n    displayFormatter: function () {\n      var formattedNumber;\n\n      if (this.options.country !== '') {\n        this.options.format = BFHPhoneFormatList[this.options.country];\n      }\n\n      formattedNumber = formatNumber(this.options.format, this.options.number);\n\n      this.$element.html(formattedNumber);\n    },\n\n    changeCountry: function (e) {\n      var $this,\n          $phone;\n\n      $this = $(this);\n      $phone = e.data.phone;\n\n      $phone.$element.val(String($phone.$element.val()).replace(/\\+\\d*/g, ''));\n      $phone.options.format = BFHPhoneFormatList[$this.val()];\n\n      $phone.loadFormatter();\n    },\n\n    change: function(e) {\n      var $this,\n          cursorPosition,\n          cursorEnd,\n          formattedNumber;\n\n      $this = $(this).data('bfhphone');\n\n      if ($this.$element.is('.disabled') || $this.$element.attr('disabled') !== undefined) {\n        return true;\n      }\n\n      cursorPosition = getCursorPosition($this.$element[0]);\n\n      cursorEnd = false;\n      if (cursorPosition === $this.$element.val().length) {\n        cursorEnd = true;\n      }\n      \n      if (e.which === 8 && $this.options.format.charAt($this.$element.val().length) !== 'd') {\n        $this.$element.val(String($this.$element.val()).substring(0, $this.$element.val().length - 1));\n      }\n\n      formattedNumber = formatNumber($this.options.format, $this.$element.val());\n      \n      if (formattedNumber === $this.$element.val()) {\n        return true;\n      }\n      \n      $this.$element.val(formattedNumber);\n\n      if (cursorEnd) {\n        cursorPosition = $this.$element.val().length;\n      }\n\n      setCursorPosition($this.$element[0], cursorPosition);\n\n      return true;\n    }\n\n  };\n\n  function formatNumber(format, number) {\n    var formattedNumber,\n        indexFormat,\n        indexNumber,\n        lastCharacter;\n\n    formattedNumber = '';\n    number = String(number).replace(/\\D/g, '');\n\n    for (indexFormat = 0, indexNumber = 0; indexFormat < format.length; indexFormat = indexFormat + 1) {\n      if (/\\d/g.test(format.charAt(indexFormat))) {\n        if (format.charAt(indexFormat) === number.charAt(indexNumber)) {\n          formattedNumber += number.charAt(indexNumber);\n          indexNumber = indexNumber + 1;\n        } else {\n          formattedNumber += format.charAt(indexFormat);\n        }\n      } else if (format.charAt(indexFormat) !== 'd') {\n        if (number.charAt(indexNumber) !== '' || format.charAt(indexFormat) === '+') {\n          formattedNumber += format.charAt(indexFormat);\n        }\n      } else {\n        if (number.charAt(indexNumber) === '') {\n          formattedNumber += '';\n        } else {\n          formattedNumber += number.charAt(indexNumber);\n          indexNumber = indexNumber + 1;\n        }\n      }\n    }\n    \n    lastCharacter = format.charAt(formattedNumber.length);\n    if (lastCharacter !== 'd') {\n      formattedNumber += lastCharacter;\n    }\n\n    return formattedNumber;\n  }\n\n  function getCursorPosition($element) {\n    var position = 0,\n        selection;\n\n    if (document.selection) {\n      // IE Support\n      $element.focus();\n      selection = document.selection.createRange();\n      selection.moveStart ('character', -$element.value.length);\n      position = selection.text.length;\n    } else if ($element.selectionStart || $element.selectionStart === 0) {\n      position = $element.selectionStart;\n    }\n\n    return position;\n  }\n\n  function setCursorPosition($element, position) {\n    var selection;\n\n    if (document.selection) {\n      // IE Support\n      $element.focus ();\n      selection = document.selection.createRange();\n      selection.moveStart ('character', -$element.value.length);\n      selection.moveStart ('character', position);\n      selection.moveEnd ('character', 0);\n      selection.select ();\n    } else if ($element.selectionStart || $element.selectionStart === 0) {\n      $element.selectionStart = position;\n      $element.selectionEnd = position;\n      $element.focus ();\n    }\n  }\n\n  /* PHONE PLUGIN DEFINITION\n   * ======================= */\n\n  var old = $.fn.bfhphone;\n\n  $.fn.bfhphone = function (option) {\n    return this.each(function () {\n      var $this,\n          data,\n          options;\n\n      $this = $(this);\n      data = $this.data('bfhphone');\n      options = typeof option === 'object' && option;\n\n      if (!data) {\n        $this.data('bfhphone', (data = new BFHPhone(this, options)));\n      }\n      if (typeof option === 'string') {\n        data[option].call($this);\n      }\n    });\n  };\n\n  $.fn.bfhphone.Constructor = BFHPhone;\n\n  $.fn.bfhphone.defaults = {\n    format: '',\n    number: '',\n    country: ''\n  };\n\n\n  /* PHONE NO CONFLICT\n   * ========================== */\n\n  $.fn.bfhphone.noConflict = function () {\n    $.fn.bfhphone = old;\n    return this;\n  };\n\n\n  /* PHONE DATA-API\n   * ============== */\n\n  $(document).on('turbo:load', function () {\n    $('form input[type=\"text\"].bfh-phone, form input[type=\"tel\"].bfh-phone, span.bfh-phone').each(function () {\n      var $phone;\n\n      $phone = $(this);\n\n      $phone.bfhphone($phone.data());\n    });\n  });\n\n}(window.jQuery);\n\n/* ==========================================================\n * bootstrap-formhelpers-selectbox.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2012 Vincent Lamanna\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n+function ($) {\n\n  'use strict';\n\n\n  /* SELECTBOX CLASS DEFINITION\n   * ========================= */\n\n  var toggle = '[data-toggle=bfh-selectbox]',\n      BFHSelectBox = function (element, options) {\n        this.options = $.extend({}, $.fn.bfhselectbox.defaults, options);\n        this.$element = $(element);\n\n        this.initSelectBox();\n      };\n\n  BFHSelectBox.prototype = {\n\n    constructor: BFHSelectBox,\n\n    initSelectBox: function () {\n      var options;\n\n      options = '';\n      this.$element.find('div').each(function() {\n        options = options + '<li><a tabindex=\"-1\" href=\"#\" data-option=\"' + $(this).data('value') + '\">' + $(this).html() + '</a></li>';\n      });\n\n      this.$element.html(\n        '<input type=\"hidden\" name=\"' + this.options.name + '\" value=\"\">' +\n\t\t'<a class=\"bfh-selectbox-toggle ' + this.options.input + '\" role=\"button\" data-toggle=\"bfh-selectbox\" href=\"#\">' +\n\t\t'<span class=\"bfh-selectbox-option\"></span>' +\n\t\t'<span class=\"' + this.options.icon + ' selectbox-caret\"></span>' +\n\t\t'</a>' +\n\t\t'<div class=\"bfh-selectbox-options\">' +\n\t\t'<div role=\"listbox\">' +\n\t\t'<ul role=\"option\">' +\n\t\t'</ul>' +\n\t\t'</div>' +\n\t\t'</div>'\n      );\n\n      this.$element.find('[role=option]').html(options);\n\n      if (this.options.filter === true) {\n        this.$element.find('.bfh-selectbox-options').prepend('<div class=\"bfh-selectbox-filter-container\"><input type=\"text\" class=\"bfh-selectbox-filter form-control\"></div>');\n      }\n\n      this.$element.val(this.options.value);\n\n      this.$element\n        .on('click.bfhselectbox.data-api touchstart.bfhselectbox.data-api', toggle, BFHSelectBox.prototype.toggle)\n\t\t.on('keydown.bfhselectbox.data-api', toggle + ', [role=option]' , BFHSelectBox.prototype.keydown)\n\t\t.on('mouseenter.bfhselectbox.data-api', '[role=option] > li > a', BFHSelectBox.prototype.mouseenter)\n\t\t.on('click.bfhselectbox.data-api', '[role=option] > li > a', BFHSelectBox.prototype.select)\n\t\t.on('click.bfhselectbox.data-api', '.bfh-selectbox-filter', function () { return false; })\n\t\t.on('propertychange.bfhselectbox.data-api change.bfhselectbox.data-api input.bfhselectbox.data-api paste.bfhselectbox.data-api', '.bfh-selectbox-filter', BFHSelectBox.prototype.filter);\n    },\n\n    toggle: function (e) {\n      var $this,\n          $parent,\n          isActive;\n\n      $this = $(this);\n      $parent = getParent($this);\n\n      if ($parent.is('.disabled') || $parent.attr('disabled') !== undefined) {\n        return true;\n      }\n\n      isActive = $parent.hasClass('open');\n\n      clearMenus();\n\n      if (!isActive) {\n        $parent.trigger(e = $.Event('show.bfhselectbox'));\n\n        if (e.isDefaultPrevented()) {\n          return true;\n        }\n\n        $parent\n          .toggleClass('open')\n          .trigger('shown.bfhselectbox')\n          .find('[role=option] > li > [data-option=\"' + $parent.val() + '\"]').focus();\n      }\n\n      return false;\n    },\n\n    filter: function() {\n      var $this,\n          $parent,\n          $items;\n\n      $this = $(this);\n      $parent = getParent($this);\n\n      $items = $('[role=option] li a', $parent);\n      $items\n        .hide()\n        .filter(function() {\n          return ($(this).text().toUpperCase().indexOf($this.val().toUpperCase()) !== -1);\n        })\n        .show();\n    },\n\n    keydown: function (e) {\n      var $this,\n          $items,\n          $parent,\n          $subItems,\n          isActive,\n          index,\n          selectedIndex;\n\n      if (!/(38|40|27)/.test(e.keyCode)) {\n        return true;\n      }\n\n      $this = $(this);\n\n      e.preventDefault();\n      e.stopPropagation();\n\n      $parent = getParent($this);\n      isActive = $parent.hasClass('open');\n\n      if (!isActive || (isActive && e.keyCode === 27)) {\n        if (e.which === 27) {\n          $parent.find(toggle).focus();\n        }\n\n        return $this.click();\n      }\n\n      $items = $('[role=option] li:not(.divider) a:visible', $parent);\n\n      if (!$items.length) {\n        return true;\n      }\n\n      $('body').off('mouseenter.bfh-selectbox.data-api', '[role=option] > li > a', BFHSelectBox.prototype.mouseenter);\n      index = $items.index($items.filter(':focus'));\n\n      if (e.keyCode === 38 && index > 0) {\n        index = index - 1;\n      }\n\n      if (e.keyCode === 40 && index < $items.length - 1) {\n        index = index + 1;\n      }\n\n      if (!index) {\n        index = 0;\n      }\n\n      $items.eq(index).focus();\n      $('body').on('mouseenter.bfh-selectbox.data-api', '[role=option] > li > a', BFHSelectBox.prototype.mouseenter);\n    },\n\n    mouseenter: function () {\n      var $this;\n\n      $this = $(this);\n\n      $this.focus();\n    },\n\n    select: function (e) {\n      var $this,\n          $parent,\n          $span,\n          $input;\n\n      $this = $(this);\n\n      e.preventDefault();\n      e.stopPropagation();\n\n      if ($this.is('.disabled') || $this.attr('disabled') !== undefined) {\n        return true;\n      }\n\n      $parent = getParent($this);\n\n      $parent.val($this.data('option'));\n      $parent.trigger('change.bfhselectbox');\n\n      clearMenus();\n    }\n\n  };\n\n  function clearMenus() {\n    var $parent;\n\n    $(toggle).each(function (e) {\n      $parent = getParent($(this));\n\n      if (!$parent.hasClass('open')) {\n        return true;\n      }\n\n      $parent.trigger(e = $.Event('hide.bfhselectbox'));\n\n      if (e.isDefaultPrevented()) {\n        return true;\n      }\n\n      $parent\n        .removeClass('open')\n        .trigger('hidden.bfhselectbox');\n    });\n  }\n\n  function getParent($this) {\n    return $this.closest('.bfh-selectbox');\n  }\n\n\n  /* SELECTBOX PLUGIN DEFINITION\n   * ========================== */\n\n  var old = $.fn.bfhselectbox;\n\n  $.fn.bfhselectbox = function (option) {\n    return this.each(function () {\n      var $this,\n          data,\n          options;\n\n      $this = $(this);\n      data = $this.data('bfhselectbox');\n      options = typeof option === 'object' && option;\n      this.type = 'bfhselectbox';\n\n      if (!data) {\n        $this.data('bfhselectbox', (data = new BFHSelectBox(this, options)));\n      }\n      if (typeof option === 'string') {\n        data[option].call($this);\n      }\n    });\n  };\n\n  $.fn.bfhselectbox.Constructor = BFHSelectBox;\n\n  $.fn.bfhselectbox.defaults = {\n    icon: 'caret',\n    input: 'form-control',\n    name: '',\n    value: '',\n    filter: false\n  };\n\n\n  /* SELECTBOX NO CONFLICT\n   * ========================== */\n\n  $.fn.bfhselectbox.noConflict = function () {\n    $.fn.bfhselectbox = old;\n    return this;\n  };\n\n\n  /* SELECTBOX VALHOOKS\n   * ========================== */\n\n  var origHook;\n  if ($.valHooks.div){\n    origHook = $.valHooks.div;\n  }\n  $.valHooks.div = {\n    get: function(el) {\n      if ($(el).hasClass('bfh-selectbox')) {\n        return $(el).find('input[type=\"hidden\"]').val();\n      } else if (origHook) {\n        return origHook.get(el);\n      }\n    },\n    set: function(el, val) {\n      var $el,\n          html;\n\n      if ($(el).hasClass('bfh-selectbox')) {\n\n        $el = $(el);\n        if ($el.find('li a[data-option=\\'' + val + '\\']').length > 0) {\n          html = $el.find('li a[data-option=\\'' + val + '\\']').html();\n        } else if ($el.find('li a').length > 0) {\n          html = $el.find('li a').eq(0).html();\n        } else {\n          val = '';\n          html = '';\n        }\n\n        $el.find('input[type=\"hidden\"]').val(val);\n        $el.find('.bfh-selectbox-option').html(html);\n      } else if (origHook) {\n        return origHook.set(el,val);\n      }\n    }\n  };\n\n\n  /* SELECTBOX DATA-API\n   * ============== */\n\n  $(document).on('turbo:load', function () {\n    $('div.bfh-selectbox').each(function () {\n      var $selectbox;\n\n      $selectbox = $(this);\n\n      $selectbox.bfhselectbox($selectbox.data());\n    });\n  });\n\n\n  /* APPLY TO STANDARD SELECTBOX ELEMENTS\n   * =================================== */\n\n  $(document)\n    .on('click.bfhselectbox.data-api', clearMenus);\n\n}(window.jQuery);\n\n/* ==========================================================\n * bootstrap-formhelpers-slider.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2012 Vincent Lamanna\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n+function ($) {\n\n  'use strict';\n\n\n  /* BFHSLIDER CLASS DEFINITION\n   * ========================= */\n\n  var BFHSlider = function (element, options) {\n        this.options = $.extend({}, $.fn.bfhslider.defaults, options);\n        this.$element = $(element);\n        \n        this.initSlider();\n      };\n\n  BFHSlider.prototype = {\n\n    constructor: BFHSlider,\n\n    initSlider: function() {\n      if (this.options.value === '') {\n        this.options.value = this.options.min;\n      }\n      \n      this.$element.html(\n        '<input type=\"hidden\" name=\"' + this.options.name + '\" value=\"\">' +\n        '<div class=\"bfh-slider-handle\"><div class=\"bfh-slider-value\"></div></div>'\n      );\n      \n      this.$element.find('input[type=\"hidden\"]').val(this.options.value);\n      this.updateHandle(this.options.value);\n      \n      this.$element\n        .on('mousedown.bfhslider.data-api', BFHSlider.prototype.mouseDown);\n    },\n    \n    updateHandle: function(val) {\n      var positionX,\n          width,\n          left,\n          span;\n          \n      span = this.options.max - this.options.min;\n      width = this.$element.width();\n      left = this.$element.position().left;\n      \n      positionX = Math.round((val - this.options.min) * (width - 20) / span + left);\n      \n      this.$element.find('.bfh-slider-handle').css('left', positionX + 'px');\n      this.$element.find('.bfh-slider-value').text(val);\n    },\n    \n    updateVal: function(positionX) {\n      var width,\n          left,\n          right,\n          val,\n          span;\n      \n      span = this.options.max - this.options.min;\n      width = this.$element.width();\n      left = this.$element.offset().left;\n      right = left + width;\n      \n      if (positionX < left) {\n        positionX = left;\n      }\n      \n      if (positionX + 20 > right) {\n        positionX = right;\n      }\n      \n      val = (positionX - left) / width;\n      val = Math.ceil(val * span + this.options.min);\n      \n      if (val === this.$element.val()) {\n        return true;\n      }\n      \n      this.$element.val(val);\n      \n      this.$element.trigger('change.bfhslider');\n    },\n    \n    mouseDown: function() {\n      var $this;\n      \n      $this = $(this);\n      \n      if ($this.is('.disabled') || $this.attr('disabled') !== undefined) {\n        return true;\n      }\n      \n      $(document)\n        .on('mousemove.bfhslider.data-api', {slider: $this}, BFHSlider.prototype.mouseMove)\n        .one('mouseup.bfhslider.data-api touchend.bfhslider.data-api', {slider: $this}, BFHSlider.prototype.mouseUp);\n    },\n    \n    mouseMove: function(e) {\n      var $this;\n      \n      $this = e.data.slider;\n      \n      $this.data('bfhslider').updateVal(e.pageX);\n    },\n    \n    mouseUp: function(e) {\n      var $this;\n      \n      $this = e.data.slider;\n      \n      $this.data('bfhslider').updateVal(e.pageX);\n      \n      $(document).off('mousemove.bfhslider.data-api touchmove.bfhslider.data-api');\n    }\n  };\n\n\n  /* SLIDER PLUGIN DEFINITION\n   * ========================== */\n\n  var old = $.fn.bfhslider;\n\n  $.fn.bfhslider = function (option) {\n    return this.each(function () {\n      var $this,\n          data,\n          options;\n\n      $this = $(this);\n      data = $this.data('bfhslider');\n      options = typeof option === 'object' && option;\n      this.type = 'bfhslider';\n\n      if (!data) {\n        $this.data('bfhslider', (data = new BFHSlider(this, options)));\n      }\n      if (typeof option === 'string') {\n        data[option].call($this);\n      }\n    });\n  };\n\n  $.fn.bfhslider.Constructor = BFHSlider;\n\n  $.fn.bfhslider.defaults = {\n    name: '',\n    value: '',\n    min: 0,\n    max: 100\n  };\n\n\n  /* SLIDER NO CONFLICT\n   * ========================== */\n\n  $.fn.bfhslider.noConflict = function () {\n    $.fn.bfhslider = old;\n    return this;\n  };\n\n\n  /* SLIDER VALHOOKS\n   * ========================== */\n\n  var origHook;\n  if ($.valHooks.div){\n    origHook = $.valHooks.div;\n  }\n  $.valHooks.div = {\n    get: function(el) {\n      if ($(el).hasClass('bfh-slider')) {\n        return $(el).find('input[type=\"hidden\"]').val();\n      } else if (origHook) {\n        return origHook.get(el);\n      }\n    },\n    set: function(el, val) {\n      if ($(el).hasClass('bfh-slider')) {\n        $(el).find('input[type=\"hidden\"]').val(val);\n        $(el).data('bfhslider').updateHandle(val);\n      } else if (origHook) {\n        return origHook.set(el,val);\n      }\n    }\n  };\n\n\n  /* SLIDER DATA-API\n   * ============== */\n\n  $(document).on('turbo:load', function () {\n    $('div.bfh-slider').each(function () {\n      var $slider;\n\n      $slider = $(this);\n\n      $slider.bfhslider($slider.data());\n    });\n  });\n\n}(window.jQuery);\n\n/* ==========================================================\n * bootstrap-formhelpers-states.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2012 Vincent Lamanna\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n+function ($) {\n\n  'use strict';\n\n\n  /* STATES CLASS DEFINITION\n   * ====================== */\n\n  var BFHStates = function (element, options) {\n    this.options = $.extend({}, $.fn.bfhstates.defaults, options);\n    this.$element = $(element);\n\n    if (this.$element.is('select')) {\n      this.addStates();\n    }\n\n    if (this.$element.hasClass('bfh-selectbox')) {\n      this.addBootstrapStates();\n    }\n\n    if (this.$element.is('span')) {\n      this.displayState();\n    }\n  };\n\n  BFHStates.prototype = {\n\n    constructor: BFHStates,\n\n    addStates: function () {\n      var country,\n          $country;\n\n      country = this.options.country;\n\n      if (country !== '') {\n        $country = $(document).find('#' + country);\n\n        if ($country.length !== 0) {\n          country = $country.val();\n          $country.on('change', {state: this}, this.changeCountry);\n        }\n      }\n\n      this.loadStates(country);\n    },\n\n    loadStates: function (country) {\n      var value,\n          state;\n\n      value = this.options.state;\n\n      this.$element.html('');\n\n      if (this.options.blank === true) {\n        this.$element.append('<option value=\"\"></option>');\n      }\n\n      for (state in BFHStatesList[country]) {\n        if (BFHStatesList[country].hasOwnProperty(state)) {\n          this.$element.append('<option value=\"' + BFHStatesList[country][state].code + '\">' + BFHStatesList[country][state].name + '</option>');\n        }\n      }\n\n      this.$element.val(value);\n    },\n\n    changeCountry: function (e) {\n      var $this,\n          $state,\n          country;\n\n      $this = $(this);\n      $state = e.data.state;\n      country = $this.val();\n\n      $state.loadStates(country);\n    },\n\n    addBootstrapStates: function() {\n      var country,\n          $country;\n\n      country = this.options.country;\n\n      if (country !== '') {\n        $country = $(document).find('#' + country);\n\n        if ($country.length !== 0) {\n          country = $country.find('input[type=\"hidden\"]').val();\n          $country.on('change.bfhselectbox', {state: this}, this.changeBootstrapCountry);\n        }\n      }\n\n      this.loadBootstrapStates(country);\n    },\n\n    loadBootstrapStates: function(country) {\n      var $input,\n          $toggle,\n          $options,\n          stateCode,\n          stateName,\n          state;\n\n      stateCode = this.options.state;\n      stateName = '';\n      $input = this.$element.find('input[type=\"hidden\"]');\n      $toggle = this.$element.find('.bfh-selectbox-option');\n      $options = this.$element.find('[role=option]');\n\n      $options.html('');\n\n      if (this.options.blank === true) {\n        $options.append('<li><a tabindex=\"-1\" href=\"#\" data-option=\"\"></a></li>');\n      }\n\n      for (state in BFHStatesList[country]) {\n        if (BFHStatesList[country].hasOwnProperty(state)) {\n          $options.append('<li><a tabindex=\"-1\" href=\"#\" data-option=\"' + BFHStatesList[country][state].code + '\">' + BFHStatesList[country][state].name + '</a></li>');\n\n          if (BFHStatesList[country][state].code === stateCode) {\n            stateName = BFHStatesList[country][state].name;\n          }\n        }\n      }\n\n      this.$element.val(stateCode);\n    },\n\n    changeBootstrapCountry: function (e) {\n      var $this,\n          $state,\n          country;\n\n      $this = $(this);\n      $state = e.data.state;\n      country = $this.val();\n\n      $state.loadBootstrapStates(country);\n    },\n\n    displayState: function () {\n      var country,\n          stateCode,\n          stateName,\n          state;\n\n      country = this.options.country;\n      stateCode = this.options.state;\n      stateName = '';\n\n      for (state in BFHStatesList[country]) {\n        if (BFHStatesList[country].hasOwnProperty(state)) {\n          if (BFHStatesList[country][state].code === stateCode) {\n            stateName = BFHStatesList[country][state].name;\n            break;\n          }\n        }\n      }\n      this.$element.html(stateName);\n    }\n\n  };\n\n\n  /* STATES PLUGIN DEFINITION\n   * ======================= */\n\n  var old = $.fn.bfhstates;\n\n  $.fn.bfhstates = function (option) {\n    return this.each(function () {\n      var $this,\n          data,\n          options;\n\n      $this = $(this);\n      data = $this.data('bfhstates');\n      options = typeof option === 'object' && option;\n\n      if (!data) {\n        $this.data('bfhstates', (data = new BFHStates(this, options)));\n      }\n      if (typeof option === 'string') {\n        data[option].call($this);\n      }\n    });\n  };\n\n  $.fn.bfhstates.Constructor = BFHStates;\n\n  $.fn.bfhstates.defaults = {\n    country: '',\n    state: '',\n    blank: true\n  };\n\n\n  /* STATES NO CONFLICT\n   * ========================== */\n\n  $.fn.bfhstates.noConflict = function () {\n    $.fn.bfhstates = old;\n    return this;\n  };\n\n\n  /* STATES DATA-API\n   * ============== */\n\n  $(document).on('turbo:load', function () {\n    $('form select.bfh-states, span.bfh-states, div.bfh-states').each(function () {\n      var $states;\n\n      $states = $(this);\n\n      if ($states.hasClass('bfh-selectbox')) {\n        $states.bfhselectbox($states.data());\n      }\n      $states.bfhstates($states.data());\n    });\n  });\n\n}(window.jQuery);\n\n/* ==========================================================\n * bootstrap-formhelpers-timepicker.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2012 Vincent Lamanna\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n\n+function ($) {\n\n  'use strict';\n\n\n /* TIMEPICKER CLASS DEFINITION\n  * ========================= */\n\n  var toggle = '[data-toggle=bfh-timepicker]',\n      BFHTimePicker = function (element, options) {\n        this.options = $.extend({}, $.fn.bfhtimepicker.defaults, options);\n        this.$element = $(element);\n\n        this.initPopover();\n      };\n\n  BFHTimePicker.prototype = {\n\n    constructor: BFHTimePicker,\n\n    setTime: function() {\n      var time,\n          today,\n          timeParts,\n          hours,\n          minutes,\n          mode,\n          currentMode;\n\n      time = this.options.time;\n      mode = '';\n      currentMode = '';\n      \n      if (time === '' || time === 'now' || time === undefined) {\n        today = new Date();\n\n        hours = today.getHours();\n        minutes = today.getMinutes();\n        \n        if (this.options.mode === '12h') {\n          if (hours > 12) {\n            hours = hours - 12;\n            mode = ' ' + BFHTimePickerModes.pm;\n            currentMode = 'pm';\n          } else {\n            mode = ' ' + BFHTimePickerModes.am;\n            currentMode = 'am';\n          }\n        }\n        \n        if (time === 'now') {\n          this.$element.find('.bfh-timepicker-toggle > input[type=\"text\"]').val(formatTime(hours, minutes) + mode);\n        }\n\n        this.$element.data('hour', hours);\n        this.$element.data('minute', minutes);\n        this.$element.data('mode', currentMode);\n      } else {\n        timeParts = String(time).split(BFHTimePickerDelimiter);\n        hours = timeParts[0];\n        minutes = timeParts[1];\n        \n        if (this.options.mode === '12h') {\n          timeParts = String(minutes).split(' ');\n          minutes = timeParts[0];\n          if (timeParts[1] === BFHTimePickerModes.pm) {\n            currentMode = 'pm';\n          } else {\n            currentMode = 'am';\n          }\n        }\n        \n        this.$element.find('.bfh-timepicker-toggle > input[type=\"text\"]').val(time);\n        this.$element.data('hour', hours);\n        this.$element.data('minute', minutes);\n        this.$element.data('mode', currentMode);\n      }\n    },\n\n    initPopover: function() {\n      var iconLeft,\n          iconRight,\n          iconAddon,\n          modeAddon,\n          modeMax;\n\n      iconLeft = '';\n      iconRight = '';\n      iconAddon = '';\n      if (this.options.icon !== '') {\n        if (this.options.align === 'right') {\n          iconRight = '<span class=\"input-group-addon\"><i class=\"' + this.options.icon + '\"></i></span>';\n        } else {\n          iconLeft = '<span class=\"input-group-addon\"><i class=\"' + this.options.icon + '\"></i></span>';\n        }\n        iconAddon = 'input-group';\n      }\n      \n      modeAddon = '';\n      modeMax = '23';\n      if (this.options.mode === '12h') {\n        modeAddon = '<td>' +\n          '<div class=\"bfh-selectbox\" data-input=\"' + this.options.input + '\" data-value=\"am\">' +\n          '<div data-value=\"am\">' + BFHTimePickerModes.am + '</div>' +\n          '<div data-value=\"pm\">' + BFHTimePickerModes.pm + '</div>' +\n          '</div>';\n        modeMax = '11';\n      }\n\n      this.$element.html(\n        '<div class=\"' + iconAddon + ' bfh-timepicker-toggle\" data-toggle=\"bfh-timepicker\">' +\n        iconLeft +\n        '<input type=\"text\" name=\"' + this.options.name + '\" class=\"' + this.options.input + '\" placeholder=\"' + this.options.placeholder + '\" readonly>' +\n        iconRight +\n        '</div>' +\n        '<div class=\"bfh-timepicker-popover\">' +\n        '<table class=\"table\">' +\n        '<tbody>' +\n        '<tr>' +\n        '<td class=\"hour\">' +\n        '<input type=\"text\" class=\"' + this.options.input + ' bfh-number\"  data-min=\"0\" data-max=\"' + modeMax + '\" data-zeros=\"true\" data-wrap=\"true\">' +\n        '</td>' +\n        '<td class=\"separator\">' + BFHTimePickerDelimiter + '</td>' +\n        '<td class=\"minute\">' +\n        '<input type=\"text\" class=\"' + this.options.input + ' bfh-number\"  data-min=\"0\" data-max=\"59\" data-zeros=\"true\" data-wrap=\"true\">' +\n        '</td>' +\n        modeAddon +\n        '</tr>' +\n        '</tbody>' +\n        '</table>' +\n        '</div>'\n      );\n\n      // this.$element\n      //   .on('click.bfhtimepicker.data-api touchstart.bfhtimepicker.data-api', toggle, BFHTimePicker.prototype.toggle)\n      //   .on('click.bfhtimepicker.data-api touchstart.bfhtimepicker.data-api', '.bfh-timepicker-popover > table', function(e) { console.log(e); return false; });\n      this.$element\n        .on('click.bfhtimepicker.data-api', toggle, BFHTimePicker.prototype.toggle)\n        .on('click.bfhtimepicker.data-api', '.bfh-timepicker-popover > table', function() { return false; });\n\n      this.$element.find('.bfh-number').each(function () {\n        var $number;\n\n        $number = $(this);\n\n        $number.bfhnumber($number.data());\n        \n        $number.on('change', BFHTimePicker.prototype.change);\n      });\n      \n      this.$element.find('.bfh-selectbox').each(function() {\n        var $selectbox;\n\n        $selectbox = $(this);\n\n        $selectbox.bfhselectbox($selectbox.data());\n        \n        $selectbox.on('change.bfhselectbox', BFHTimePicker.prototype.change);\n      });\n      \n      this.setTime();\n\n      this.updatePopover();\n    },\n\n    updatePopover: function() {\n      var hour,\n          minute,\n          mode;\n\n      hour = this.$element.data('hour');\n      minute = this.$element.data('minute');\n      mode = this.$element.data('mode');\n\n      this.$element.find('.hour input[type=text]').val(hour).change();\n      this.$element.find('.minute input[type=text]').val(minute).change();\n      this.$element.find('.bfh-selectbox').val(mode);\n    },\n    \n    change: function() {\n      var $this,\n          $parent,\n          $timePicker,\n          mode;\n\n      $this = $(this);\n      $parent = getParent($this);\n      \n      $timePicker = $parent.data('bfhtimepicker');\n      \n      if ($timePicker && $timePicker !== 'undefined') {\n        mode = '';\n        if ($timePicker.options.mode === '12h') {\n          mode = ' ' + BFHTimePickerModes[$parent.find('.bfh-selectbox').val()];\n        }\n        \n        $parent.find('.bfh-timepicker-toggle > input[type=\"text\"]').val($parent.find('.hour input[type=text]').val() + BFHTimePickerDelimiter + $parent.find('.minute input[type=text]').val() + mode);\n\n        $parent.trigger('change.bfhtimepicker');\n      }\n\n      return false;\n    },\n\n    toggle: function(e) {\n      var $this,\n          $parent,\n          isActive;\n\n      $this = $(this);\n      $parent = getParent($this);\n\n      if ($parent.is('.disabled') || $parent.attr('disabled') !== undefined) {\n        return true;\n      }\n\n      isActive = $parent.hasClass('open');\n\n      clearMenus();\n\n      if (!isActive) {\n        $parent.trigger(e = $.Event('show.bfhtimepicker'));\n\n        if (e.isDefaultPrevented()) {\n          return true;\n        } \n\n        $parent\n          .toggleClass('open')\n          .trigger('shown.bfhtimepicker');\n\n        $this.focus();\n      }\n\n      return false;\n    }\n  };\n\n  function formatTime(hour, minute) {\n    hour = String(hour);\n    if (hour.length === 1) {\n      hour = '0' + hour;\n    }\n\n    minute = String(minute);\n    if (minute.length === 1) {\n      minute = '0' + minute;\n    }\n\n    return hour + BFHTimePickerDelimiter + minute;\n  }\n  \n  function clearMenus() {\n    var $parent;\n\n    $(toggle).each(function (e) {\n      $parent = getParent($(this));\n\n      if (!$parent.hasClass('open')) {\n        return true;\n      }\n\n      $parent.trigger(e = $.Event('hide.bfhtimepicker'));\n\n      if (e.isDefaultPrevented()) {\n        return true;\n      }\n\n      $parent\n        .removeClass('open')\n        .trigger('hidden.bfhtimepicker');\n    });\n  }\n\n  function getParent($this) {\n    return $this.closest('.bfh-timepicker');\n  }\n\n\n  /* TIMEPICKER PLUGIN DEFINITION\n   * ========================== */\n\n  var old = $.fn.bfhtimepicker;\n\n  $.fn.bfhtimepicker = function (option) {\n    return this.each(function () {\n      var $this,\n          data,\n          options;\n\n      $this = $(this);\n      data = $this.data('bfhtimepicker');\n      options = typeof option === 'object' && option;\n      this.type = 'bfhtimepicker';\n\n      if (!data) {\n        $this.data('bfhtimepicker', (data = new BFHTimePicker(this, options)));\n      }\n      if (typeof option === 'string') {\n        data[option].call($this);\n      }\n    });\n  };\n\n  $.fn.bfhtimepicker.Constructor = BFHTimePicker;\n\n  $.fn.bfhtimepicker.defaults = {\n    icon: 'glyphicon glyphicon-time',\n    align: 'left',\n    input: 'form-control',\n    placeholder: '',\n    name: '',\n    time: 'now',\n    mode: '24h'\n  };\n\n\n  /* TIMEPICKER NO CONFLICT\n   * ========================== */\n\n  $.fn.bfhtimepicker.noConflict = function () {\n    $.fn.bfhtimepicker = old;\n    return this;\n  };\n\n\n  /* TIMEPICKER VALHOOKS\n   * ========================== */\n\n  var origHook;\n  if ($.valHooks.div){\n    origHook = $.valHooks.div;\n  }\n  $.valHooks.div = {\n    get: function(el) {\n      if ($(el).hasClass('bfh-timepicker')) {\n        return $(el).find('.bfh-timepicker-toggle > input[type=\"text\"]').val();\n      } else if (origHook) {\n        return origHook.get(el);\n      }\n    },\n    set: function(el, val) {\n      var $timepicker;\n      if ($(el).hasClass('bfh-timepicker')) {\n        $timepicker = $(el).data('bfhtimepicker');\n        $timepicker.options.time = val;\n        $timepicker.setTime();\n        $timepicker.updatePopover();\n      } else if (origHook) {\n        return origHook.set(el,val);\n      }\n    }\n  };\n\n\n  /* TIMEPICKER DATA-API\n   * ============== */\n\n  $(document).on('turbo:load', function () {\n    $('div.bfh-timepicker').each(function () {\n      var $timepicker;\n\n      $timepicker = $(this);\n\n      $timepicker.bfhtimepicker($timepicker.data());\n    });\n  });\n\n\n  /* APPLY TO STANDARD TIMEPICKER ELEMENTS\n   * =================================== */\n\n  $(document)\n    .on('click.bfhtimepicker.data-api', clearMenus);\n\n}(window.jQuery);\n\n/* ==========================================================\n * bootstrap-formhelpers-timezones.js\n * https://github.com/vlamanna/BootstrapFormHelpers\n * ==========================================================\n * Copyright 2012 Vincent Lamanna\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n+function ($) {\n\n  'use strict';\n\n\n  /* TIMEZONES CLASS DEFINITION\n   * ====================== */\n\n  var BFHTimezones = function (element, options) {\n    this.options = $.extend({}, $.fn.bfhtimezones.defaults, options);\n    this.$element = $(element);\n\n    if (this.$element.is('select')) {\n      this.addTimezones();\n    }\n\n    if (this.$element.hasClass('bfh-selectbox')) {\n      this.addBootstrapTimezones();\n    }\n  };\n\n  BFHTimezones.prototype = {\n\n    constructor: BFHTimezones,\n\n    addTimezones: function () {\n      var country,\n          $country;\n\n      country = this.options.country;\n\n      if (country !== '') {\n        $country = $(document).find('#' + country);\n\n        if ($country.length !== 0) {\n          country = $country.val();\n          $country.on('change', {timezone: this}, this.changeCountry);\n        }\n      }\n\n      this.loadTimezones(country);\n    },\n\n    loadTimezones: function (country) {\n      var value,\n          timezone;\n\n      value = this.options.timezone;\n\n      this.$element.html('');\n\n      if (this.options.blank === true) {\n        this.$element.append('<option value=\"\"></option>');\n      }\n\n      for (timezone in BFHTimezonesList[country]) {\n        if (BFHTimezonesList[country].hasOwnProperty(timezone)) {\n          this.$element.append('<option value=\"' + timezone + '\">' + BFHTimezonesList[country][timezone] + '</option>');\n        }\n      }\n\n      this.$element.val(value);\n    },\n\n    changeCountry: function (e) {\n      var $this,\n          $timezone,\n          country;\n\n      $this = $(this);\n      $timezone = e.data.timezone;\n      country = $this.val();\n\n      $timezone.loadTimezones(country);\n    },\n\n    addBootstrapTimezones: function() {\n      var country,\n          $country;\n\n      country = this.options.country;\n\n      if (country !== '') {\n        $country = $(document).find('#' + country);\n\n        if ($country.length !== 0) {\n          country = $country.find('input[type=\"hidden\"]').val();\n          $country.on('change.bfhselectbox', {timezone: this}, this.changeBootstrapCountry);\n        }\n      }\n\n      this.loadBootstrapTimezones(country);\n    },\n\n    loadBootstrapTimezones: function(country) {\n      var $input,\n          $toggle,\n          $options,\n          value,\n          timezone;\n\n      value = this.options.timezone;\n      $input = this.$element.find('input[type=\"hidden\"]');\n      $toggle = this.$element.find('.bfh-selectbox-option');\n      $options = this.$element.find('[role=option]');\n\n      $options.html('');\n\n      if (this.options.blank === true) {\n        $options.append('<li><a tabindex=\"-1\" href=\"#\" data-option=\"\"></a></li>');\n      }\n\n      for (timezone in BFHTimezonesList[country]) {\n        if (BFHTimezonesList[country].hasOwnProperty(timezone)) {\n          $options.append('<li><a tabindex=\"-1\" href=\"#\" data-option=\"' + timezone + '\">' + BFHTimezonesList[country][timezone] + '</a></li>');\n        }\n      }\n\n      this.$element.val(value);\n    },\n\n    changeBootstrapCountry: function (e) {\n      var $this,\n          $timezone,\n          country;\n\n      $this = $(this);\n      $timezone = e.data.timezone;\n      country = $this.val();\n\n      $timezone.loadBootstrapTimezones(country);\n    }\n\n  };\n\n\n  /* TIMEZONES PLUGIN DEFINITION\n   * ======================= */\n\n  var old = $.fn.bfhtimezones;\n\n  $.fn.bfhtimezones = function (option) {\n    return this.each(function () {\n      var $this,\n          data,\n          options;\n\n      $this = $(this);\n      data = $this.data('bfhtimezones');\n      options = typeof option === 'object' && option;\n\n      if (!data) {\n        $this.data('bfhtimezones', (data = new BFHTimezones(this, options)));\n      }\n      if (typeof option === 'string') {\n        data[option].call($this);\n      }\n    });\n  };\n\n  $.fn.bfhtimezones.Constructor = BFHTimezones;\n\n  $.fn.bfhtimezones.defaults = {\n    country: '',\n    timezone: '',\n    blank: true\n  };\n\n\n  /* TIMEZONES NO CONFLICT\n   * ========================== */\n\n  $.fn.bfhtimezones.noConflict = function () {\n    $.fn.bfhtimezones = old;\n    return this;\n  };\n\n\n  /* TIMEZONES DATA-API\n   * ============== */\n\n  $(document).on('turbo:load', function () {\n    $('form select.bfh-timezones, div.bfh-timezones').each(function () {\n      var $timezones;\n\n      $timezones = $(this);\n\n      if ($timezones.hasClass('bfh-selectbox')) {\n        $timezones.bfhselectbox($timezones.data());\n      }\n      $timezones.bfhtimezones($timezones.data());\n    });\n  });\n\n}(window.jQuery);\n", "/*\n  SortTable\n  version 2\n  7th April 2007\n  Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/\n\n  Instructions:\n  Download this file\n  Add <script src=\"sorttable.js\"></script> to your HTML\n  Add class=\"sortable\" to any table you'd like to make sortable\n  Click on the headers to sort\n\n  Thanks to many, many people for contributions and suggestions.\n  Licenced as X11: http://www.kryogenix.org/code/browser/licence.html\n  This basically means: do what you want with it.\n*/\n\n/* jshint -W051, -W083, -W027 */\n\nvar stIsIE = /*@cc_on!@*/false;\n\nsorttable = {\n  init: function() {\n    // quit if this function has already been called\n    if (arguments.callee.done) return;\n    // flag this function so we don't do the same thing twice\n    arguments.callee.done = true;\n    // kill the timer\n    if (_timer) clearInterval(_timer);\n\n    if (!document.createElement || !document.getElementsByTagName) return;\n\n    sorttable.DATE_RE = /^(\\d\\d?)[\\/\\.-](\\d\\d?)[\\/\\.-]((\\d\\d)?\\d\\d)$/;\n\n    forEach(document.getElementsByTagName('table'), function(table) {\n      if (table.className.search(/\\bsortable\\b/) != -1) {\n        sorttable.makeSortable(table);\n      }\n    });\n\n  },\n\n  makeSortable: function(table) {\n    if (table.getElementsByTagName('thead').length === 0) {\n      // table doesn't have a tHead. Since it should have, create one and\n      // put the first table row in it.\n      the = document.createElement('thead');\n      the.appendChild(table.rows[0]);\n      table.insertBefore(the,table.firstChild);\n    }\n    // Safari doesn't support table.tHead, sigh\n    if (table.tHead === null) table.tHead = table.getElementsByTagName('thead')[0];\n\n    if (table.tHead.rows.length != 1) return; // can't cope with two header rows\n\n    // Sorttable v1 put rows with a class of \"sortbottom\" at the bottom (as\n    // \"total\" rows, for example). This is B&R, since what you're supposed\n    // to do is put them in a tfoot. So, if there are sortbottom rows,\n    // for backwards compatibility, move them to tfoot (creating it if needed).\n    sortbottomrows = [];\n    for (var i=0; i<table.rows.length; i++) {\n      if (table.rows[i].className.search(/\\bsortbottom\\b/) != -1) {\n        sortbottomrows[sortbottomrows.length] = table.rows[i];\n      }\n    }\n    if (sortbottomrows) {\n      if (table.tFoot === null) {\n        // table doesn't have a tfoot. Create one.\n        tfo = document.createElement('tfoot');\n        table.appendChild(tfo);\n      }\n      for (i=0; i<sortbottomrows.length; i++) {\n        tfo.appendChild(sortbottomrows[i]);\n      }\n      //delete sortbottomrows;\n    }\n\n    // work through each column and calculate its type\n    headrow = table.tHead.rows[0].cells;\n    for (i=0; i<headrow.length; i++) {\n      // manually override the type with a sorttable_type attribute\n      if (!headrow[i].className.match(/\\bsorttable_nosort\\b/)) { // skip this col\n        mtch = headrow[i].className.match(/\\bsorttable_([a-z0-9]+)\\b/);\n        if (mtch) { override = mtch[1]; }\n        if (mtch && typeof sorttable[\"sort_\"+override] == 'function') {\n          headrow[i].sorttable_sortfunction = sorttable[\"sort_\"+override];\n        } else {\n          headrow[i].sorttable_sortfunction = sorttable.guessType(table,i);\n        }\n        // make it clickable to sort\n        headrow[i].sorttable_columnindex = i;\n        headrow[i].sorttable_tbody = table.tBodies[0];\n        dean_addEvent(headrow[i],\"click\", sorttable.innerSortFunction = function(e) {\n          for (var i=0; i<headrow.length; i++) {\n            headrow[i].className = headrow[i].className.replace('text-dark', 'text-white');\n          }\n\n          if (this.className.search(/\\bsorttable_sorted\\b/) != -1) {\n            // if we're already sorted by this column, just\n            // reverse the table, which is quicker\n            sorttable.reverse(this.sorttable_tbody);\n            this.className = this.className.replace('sorttable_sorted',\n                                                    'sorttable_sorted_reverse');\n            this.className = this.className.replace('text-white',\n                                                    'text-dark');\n            this.removeChild(document.getElementById('sorttable_sortfwdind'));\n            sortrevind = document.createElement('span');\n            sortrevind.id = \"sorttable_sortrevind\";\n            sortrevind.innerHTML = stIsIE ? '&nbsp<font face=\"webdings\">5</font>' : '&nbsp;&#x25B4;';\n            this.appendChild(sortrevind);\n            return;\n          }\n          if (this.className.search(/\\bsorttable_sorted_reverse\\b/) != -1) {\n            // if we're already sorted by this column in reverse, just\n            // re-reverse the table, which is quicker\n            sorttable.reverse(this.sorttable_tbody);\n            this.className = this.className.replace('sorttable_sorted_reverse',\n                                                    'sorttable_sorted');\n            this.className = this.className.replace('text-white',\n                                                    'text-dark');\n            this.removeChild(document.getElementById('sorttable_sortrevind'));\n            sortfwdind = document.createElement('span');\n            sortfwdind.id = \"sorttable_sortfwdind\";\n            sortfwdind.innerHTML = stIsIE ? '&nbsp<font face=\"webdings\">6</font>' : '&nbsp;&#x25BE;';\n            this.appendChild(sortfwdind);\n            return;\n          }\n\n          // remove sorttable_sorted classes\n          theadrow = this.parentNode;\n          forEach(theadrow.childNodes, function(cell) {\n            if (cell.nodeType == 1) { // an element\n              cell.className = cell.className.replace('sorttable_sorted_reverse','');\n              cell.className = cell.className.replace('sorttable_sorted','');\n            }\n          });\n          sortfwdind = document.getElementById('sorttable_sortfwdind');\n          if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); }\n          sortrevind = document.getElementById('sorttable_sortrevind');\n          if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); }\n\n          this.className += ' sorttable_sorted';\n          this.className = this.className.replace('text-white', 'text-dark');\n          sortfwdind = document.createElement('span');\n          sortfwdind.id = \"sorttable_sortfwdind\";\n          sortfwdind.innerHTML = stIsIE ? '&nbsp<font face=\"webdings\">6</font>' : '&nbsp;&#x25BE;';\n          this.appendChild(sortfwdind);\n\n          // build an array to sort. This is a Schwartzian transform thing,\n          // i.e., we \"decorate\" each row with the actual sort key,\n          // sort based on the sort keys, and then put the rows back in order\n          // which is a lot faster because you only do getInnerText once per row\n          row_array = [];\n          col = this.sorttable_columnindex;\n          rows = this.sorttable_tbody.rows;\n          for (var j=0; j<rows.length; j++) {\n            row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]];\n          }\n          /* If you want a stable sort, uncomment the following line */\n          //sorttable.shaker_sort(row_array, this.sorttable_sortfunction);\n          /* and comment out this one */\n          row_array.sort(this.sorttable_sortfunction);\n\n          tb = this.sorttable_tbody;\n          for (j=0; j<row_array.length; j++) {\n            tb.appendChild(row_array[j][1]);\n          }\n\n          //delete row_array;\n        });\n      }\n    }\n  },\n\n  guessType: function(table, column) {\n    // guess the type of a column based on its first non-blank row\n    sortfn = sorttable.sort_alpha;\n    for (var i=0; i<table.tBodies[0].rows.length; i++) {\n      text = sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]);\n      if (text !== '') {\n        if (text.match(/^-?[\u00A3$\u00A4]?[\\d,.]+%?$/)) {\n          return sorttable.sort_numeric;\n        }\n        // check for a date: dd/mm/yyyy or dd/mm/yy\n        // can have / or . or - as separator\n        // can be mm/dd as well\n        possdate = text.match(sorttable.DATE_RE);\n        if (possdate) {\n          // looks like a date\n          first = parseInt(possdate[1], 10);\n          second = parseInt(possdate[2], 10);\n          if (first > 12) {\n            // definitely dd/mm\n            return sorttable.sort_ddmm;\n          } else if (second > 12) {\n            return sorttable.sort_mmdd;\n          } else {\n            // looks like a date, but we can't tell which, so assume\n            // that it's dd/mm (English imperialism!) and keep looking\n            sortfn = sorttable.sort_ddmm;\n          }\n        }\n      }\n    }\n    return sortfn;\n  },\n\n  getInnerText: function(node) {\n    // gets the text we want to use for sorting for a cell.\n    // strips leading and trailing whitespace.\n    // this is *not* a generic getInnerText function; it's special to sorttable.\n    // for example, you can override the cell text with a customkey attribute.\n    // it also gets .value for <input> fields.\n\n    if (!node) return \"\";\n\n    hasInputs = (typeof node.getElementsByTagName == 'function') &&\n                 node.getElementsByTagName('input').length;\n\n    if (node.nodeType == 1 && node.getAttribute(\"sorttable_customkey\") !== null) {\n      return node.getAttribute(\"sorttable_customkey\");\n    }\n    else if (typeof node.textContent != 'undefined' && !hasInputs) {\n      return node.textContent.replace(/^\\s+|\\s+$/g, '');\n    }\n    else if (typeof node.innerText != 'undefined' && !hasInputs) {\n      return node.innerText.replace(/^\\s+|\\s+$/g, '');\n    }\n    else if (typeof node.text != 'undefined' && !hasInputs) {\n      return node.text.replace(/^\\s+|\\s+$/g, '');\n    }\n    else {\n      switch (node.nodeType) {\n        case 3:\n          if (node.nodeName.toLowerCase() == 'input') {\n            return node.value.replace(/^\\s+|\\s+$/g, '');\n          }\n          break;\n        case 4:\n          return node.nodeValue.replace(/^\\s+|\\s+$/g, '');\n          break;\n        case 1:\n        case 11:\n          var innerText = '';\n          for (var i = 0; i < node.childNodes.length; i++) {\n            innerText += sorttable.getInnerText(node.childNodes[i]);\n          }\n          return innerText.replace(/^\\s+|\\s+$/g, '');\n          break;\n        default:\n          return '';\n      }\n    }\n  },\n\n  reverse: function(tbody) {\n    // reverse the rows in a tbody\n    newrows = [];\n    for (var i=0; i<tbody.rows.length; i++) {\n      newrows[newrows.length] = tbody.rows[i];\n    }\n    for (i=newrows.length-1; i>=0; i--) {\n       tbody.appendChild(newrows[i]);\n    }\n    //delete newrows;\n  },\n\n  /* sort functions\n     each sort function takes two parameters, a and b\n     you are comparing a[0] and b[0] */\n  sort_numeric: function(a,b) {\n    aa = parseFloat(a[0].replace(/[^0-9.-]/g,''));\n    if (isNaN(aa)) aa = 0;\n    bb = parseFloat(b[0].replace(/[^0-9.-]/g,''));\n    if (isNaN(bb)) bb = 0;\n    return aa-bb;\n  },\n  sort_alpha: function(a,b) {\n    return a[0].localeCompare(b[0]);\n    /*\n    if (a[0]==b[0]) return 0;\n    if (a[0]<b[0]) return -1;\n    return 1;\n    */\n  },\n  sort_ddmm: function(a,b) {\n    mtch = a[0].match(sorttable.DATE_RE);\n    y = mtch[3]; m = mtch[2]; d = mtch[1];\n    if (m.length == 1) m = '0'+m;\n    if (d.length == 1) d = '0'+d;\n    dt1 = y+m+d;\n    mtch = b[0].match(sorttable.DATE_RE);\n    y = mtch[3]; m = mtch[2]; d = mtch[1];\n    if (m.length == 1) m = '0'+m;\n    if (d.length == 1) d = '0'+d;\n    dt2 = y+m+d;\n    if (dt1==dt2) return 0;\n    if (dt1<dt2) return -1;\n    return 1;\n  },\n  sort_mmdd: function(a,b) {\n    mtch = a[0].match(sorttable.DATE_RE);\n    y = mtch[3]; d = mtch[2]; m = mtch[1];\n    if (m.length == 1) m = '0'+m;\n    if (d.length == 1) d = '0'+d;\n    dt1 = y+m+d;\n    mtch = b[0].match(sorttable.DATE_RE);\n    y = mtch[3]; d = mtch[2]; m = mtch[1];\n    if (m.length == 1) m = '0'+m;\n    if (d.length == 1) d = '0'+d;\n    dt2 = y+m+d;\n    if (dt1==dt2) return 0;\n    if (dt1<dt2) return -1;\n    return 1;\n  },\n\n  shaker_sort: function(list, comp_func) {\n    // A stable sort function to allow multi-level sorting of data\n    // see: http://en.wikipedia.org/wiki/Cocktail_sort\n    // thanks to Joseph Nahmias\n    var b = 0;\n    var t = list.length - 1;\n    var swap = true;\n    var q;\n\n    while(swap) {\n        swap = false;\n        for(var i = b; i < t; ++i) {\n            if ( comp_func(list[i], list[i+1]) > 0 ) {\n                q = list[i]; list[i] = list[i+1]; list[i+1] = q;\n                swap = true;\n            }\n        } // for\n        t--;\n\n        if (!swap) break;\n\n        for(i = t; i > b; --i) {\n            if ( comp_func(list[i], list[i-1]) < 0 ) {\n                q = list[i]; list[i] = list[i-1]; list[i-1] = q;\n                swap = true;\n            }\n        } // for\n        b++;\n\n    } // while(swap)\n  }\n};\n\n/* ******************************************************************\n   Supporting functions: bundled here to avoid depending on a library\n   ****************************************************************** */\n\n// Dean Edwards/Matthias Miller/John Resig\n\n/* for Mozilla/Opera9 */\nif (document.addEventListener) {\n    document.addEventListener(\"DOMContentLoaded\", sorttable.init, false);\n}\n\n/* for Internet Explorer */\n/*@cc_on @*/\n/*@if (@_win32)\n    document.write(\"<script id=__ie_onload defer src=javascript:void(0)><\\/script>\");\n    var script = document.getElementById(\"__ie_onload\");\n    script.onreadystatechange = function() {\n        if (this.readyState == \"complete\") {\n            sorttable.init(); // call the onload handler\n        }\n    };\n/*@end @*/\n\n/* for Safari */\nif (/WebKit/i.test(navigator.userAgent)) { // sniff\n    var _timer = setInterval(function() {\n        if (/loaded|complete/.test(document.readyState)) {\n            sorttable.init(); // call the onload handler\n        }\n    }, 10);\n}\n\n/* for other browsers */\nwindow.onload = sorttable.init;\n\n// written by Dean Edwards, 2005\n// with input from Tino Zijdel, Matthias Miller, Diego Perini\n\n// http://dean.edwards.name/weblog/2005/10/add-event/\n\nfunction dean_addEvent(element, type, handler) {\n\tif (element.addEventListener) {\n\t\telement.addEventListener(type, handler, false);\n\t} else {\n\t\t// assign each event handler a unique ID\n\t\tif (!handler.$$guid) handler.$$guid = dean_addEvent.guid++;\n\t\t// create a hash table of event types for the element\n\t\tif (!element.events) element.events = {};\n\t\t// create a hash table of event handlers for each element/event pair\n\t\tvar handlers = element.events[type];\n\t\tif (!handlers) {\n\t\t\thandlers = element.events[type] = {};\n\t\t\t// store the existing event handler (if there is one)\n\t\t\tif (element[\"on\" + type]) {\n\t\t\t\thandlers[0] = element[\"on\" + type];\n\t\t\t}\n\t\t}\n\t\t// store the event handler in the hash table\n\t\thandlers[handler.$$guid] = handler;\n\t\t// assign a global event handler to do all the work\n\t\telement[\"on\" + type] = handleEvent;\n\t}\n}\n// a counter used to create unique IDs\ndean_addEvent.guid = 1;\n\nfunction removeEvent(element, type, handler) {\n\tif (element.removeEventListener) {\n\t\telement.removeEventListener(type, handler, false);\n\t} else {\n\t\t// delete the event handler from the hash table\n\t\tif (element.events && element.events[type]) {\n\t\t\tdelete element.events[type][handler.$$guid];\n\t\t}\n\t}\n}\n\nfunction handleEvent(event) {\n\tvar returnValue = true;\n\t// grab the event object (IE uses a global event object)\n\tevent = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);\n\t// get a reference to the hash table of event handlers\n\tvar handlers = this.events[event.type];\n\t// execute each event handler\n\tfor (var i in handlers) {\n\t\tthis.$$handleEvent = handlers[i];\n\t\tif (this.$$handleEvent(event) === false) {\n\t\t\treturnValue = false;\n\t\t}\n\t}\n\treturn returnValue;\n}\n\nfunction fixEvent(event) {\n\t// add W3C standard event methods\n\tevent.preventDefault = fixEvent.preventDefault;\n\tevent.stopPropagation = fixEvent.stopPropagation;\n\treturn event;\n}\nfixEvent.preventDefault = function() {\n\tthis.returnValue = false;\n};\nfixEvent.stopPropagation = function() {\n  this.cancelBubble = true;\n};\n\n// Dean's forEach: http://dean.edwards.name/base/forEach.js\n/*\n\tforEach, version 1.0\n\tCopyright 2006, Dean Edwards\n\tLicense: http://www.opensource.org/licenses/mit-license.php\n*/\n\n// array-like enumeration\nif (!Array.forEach) { // mozilla already supports this\n\tArray.forEach = function(array, block, context) {\n\t\tfor (var i = 0; i < array.length; i++) {\n\t\t\tblock.call(context, array[i], i, array);\n\t\t}\n\t};\n}\n\n// generic enumeration\nFunction.prototype.forEach = function(object, block, context) {\n\tfor (var key in object) {\n\t\tif (typeof this.prototype[key] == \"undefined\") {\n\t\t\tblock.call(context, object[key], key, object);\n\t\t}\n\t}\n};\n\n// character enumeration\nString.forEach = function(string, block, context) {\n\tArray.forEach(string.split(\"\"), function(chr, index) {\n\t\tblock.call(context, chr, index, string);\n\t});\n};\n\n// globally resolve forEach enumeration\nvar forEach = function(object, block, context) {\n\tif (object) {\n\t\tvar resolve = Object; // default\n\t\tif (object instanceof Function) {\n\t\t\t// functions have a \"length\" property\n\t\t\tresolve = Function;\n\t\t} else if (object.forEach instanceof Function) {\n\t\t\t// the object implements a custom forEach method so use that\n\t\t\tobject.forEach(block, context);\n\t\t\treturn;\n\t\t} else if (typeof object == \"string\") {\n\t\t\t// the object is a string\n\t\t\tresolve = String;\n\t\t} else if (typeof object.length == \"number\") {\n\t\t\t// the object is array-like\n\t\t\tresolve = Array;\n\t\t}\n\t\tresolve.forEach(object, block, context);\n\t}\n};\n\n\n"],
  "mappings": "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D,UAAU;AAAA,QAAM,UAAU;AAAA,QAAK,UAAU;AAAA,QAAK,UAAU;AAAA,QACxD,UAAU;AAAA,QAAM,UAAU;AAAA,QAAK,UAAU;AAAA,QAAK,UAAU;AAAA,QAAK,UAAU;AAAA,QACvE,UAAU;AAAA,QAAM,UAAU;AAAA,QAAK,UAAU;AAAA,QAAK,UAAU;AAAA,QAAK,UAAU;AAAA,QACvE,UAAU;AAAA,QAAM,UAAU;AAAA,QAC1B,UAAU;AAAA,QAAM,UAAU;AAAA,QAAK,UAAU;AAAA,QACzC,UAAU;AAAA,QAAM,UAAU;AAAA,QAAK,UAAU;AAAA,QAAK,UAAU;AAAA,QAAK,UAAU;AAAA,QACvE,UAAU;AAAA,QAAM,UAAU;AAAA,QAAK,UAAU;AAAA,QAAK,UAAU;AAAA,QAAK,UAAU;AAAA,QACvE,UAAU;AAAA,QAAM,UAAU;AAAA,QAAK,UAAU;AAAA,QAAK,UAAU;AAAA,QACxD,UAAU;AAAA,QAAM,UAAU;AAAA,QAAK,UAAU;AAAA,QAAK,UAAU;AAAA,QACxD,UAAU;AAAA,QAAM,UAAU;AAAA,QAAK,UAAU;AAAA,QACzC,UAAU;AAAA,QAAM,UAAU;AAAA,QAAK,UAAU;AAAA,QACzC,UAAU;AAAA,QAAM,UAAU;AAAA,QAAK,UAAU;AAAA,QACzC,UAAU;AAAA,QAAM,UAAU;AAAA,QAAK,UAAU;AAAA,QACzC,UAAU;AAAA,QAAM,UAAU;AAAA,QAAK,UAAU;AAAA,QAAK,UAAU;AAAA,QACxD,UAAU;AAAA,QAAM,UAAU;AAAA,QAAK,UAAU;AAAA,QAAK,UAAU;AAAA,QACxD,UAAU;AAAA,QAAM,UAAU;AAAA,QAAK,UAAU;AAAA,QACzC,UAAU;AAAA,QAAM,UAAU;AAAA,QAAK,UAAU;AAAA,QACzC,UAAU;AAAA,QAAM,UAAU;AAAA,QAAK,UAAU;AAAA,QAAK,UAAU;AAAA,QAAK,UAAU;AAAA,QAAK,UAAU;AAAA,QACtF,UAAU;AAAA,QAAM,UAAU;AAAA,QAAK,UAAU;AAAA,QAAK,UAAU;AAAA,QAAK,UAAU;AAAA,QAAK,UAAU;AAAA,QACtF,UAAU;AAAA,QAAM,UAAU;AAAA,QAC1B,UAAU;AAAA,QAAM,UAAU;AAA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A,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,KAAK;AAAA,MACN;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,KAAK;AAAA,MACN;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,KAAK;AAAA,MACN;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAA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hB,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,MAAM,IAAI;AAAA,MAChB,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,MAAM,IAAI;AAAA,MAChB,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,MAAM,IAAI;AAAA,MAChB,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,MAAM,MAAM,IAAI;AAAA,MACtB,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,MAAM,IAAI;AAAA,MAChB,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,KAAK;AAAA,MACX,KAAK,CAAC,KAAK;AAAA,MACX,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,KAAK;AAAA,MACX,KAAK,CAAC,KAAK;AAAA,MACX,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,KAAK;AAAA,MACX,KAAK,CAAC,KAAK;AAAA,MACX,KAAK,CAAC,KAAK;AAAA,MACX,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,KAAK;AAAA,MACX,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,KAAK;AAAA,MACX,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,MACV,KAAK,CAAC,IAAI;AAAA,IACZ,GAAG,KAAK;AAAA,MACN,IAAI,CAAC,EAAE;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,CAAC;AAAA,MACP,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,8BAA8B,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAChZ,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,kCAAkC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,QAC5D,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC1C,CAAC,EAAE,EAAE,yBAAyB,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAAA,QACxD,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC/C,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC1C,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,CAAC;AAAA,QACxI;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAClC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,0DAA0D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;AAAA,QACtG,CAAC,EAAE,EAAE,uBAAuB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAAA,QAC1D,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACjD,CAAC,EAAE,EAAE,yBAAyB,EAAE,EAAE,EAAE,WAAW;AAAA,QAC/C,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAChD,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAChD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,sBAAsB,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,yBAAyB,YAAY,CAAC,kBAAkB,GAAG,KAAK,GAAG,CAAC,EAAE,yBAAyB,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,CAAC;AAAA,QAChO;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAChD;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;AAAA,QAChD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAClf,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG;AAAA,QAClE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,4DAA4D,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,8OAA8O,EAAE,EAAE,EAAE,YAAY,GAAG;AAAA,QAClf;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,MAAM,GAAG,OAAO,KAAK,EAAE,EAAE,oBAAoB,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAClN,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,qCAAqC,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gEAAgE,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QACzX;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,OAAO,KAAK,EAAE,EAAE,qBAAqB,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC1O,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,0DAA0D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,0GAA0G,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,6BAA6B,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QACtW;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,sBAAsB,SAAS,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,yBAAyB,YAAY,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,eAAe,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,SAAS,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC7jB,IAAI,CAAC,EAAE;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,MACP,GAAG,CAAC,EAAE,EAAE,uFAAuF,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,yCAAyC,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,8DAA8D,EAAE,EAAE,EAAE,UAAU,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,GAAG,MAAM,GAAG;AAAA,QAC3gB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,SAAS;AAAA,QACV;AAAA,MACF,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,MAAM,GAAG,OAAO,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC3N,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAClC,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,WAAW;AAAA,QAC9D,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,WAAW;AAAA,QACvC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,CAAC,CAAC;AAAA,QACrD;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,QAC5E;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,EAAE;AAAA,UACH,CAAC,GAAG,GAAG,CAAC;AAAA,QACV;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,GAAG,GAAG,CAAC;AAAA,QACV;AAAA,QACA,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,YAAY;AAAA,QACtC,CAAC,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACpD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,YAAY,MAAM,CAAC,kDAAkD,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,CAAC,GAAG;AAAA,UAC/M;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,YACE;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC,GAAG;AAAA,UAC/L;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,YACE;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA;AAAA,QACF,GAAG,CAAC,EAAE,iCAAiC,eAAe,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,iCAAiC,eAAe,CAAC,GAAG,GAAG,KAAK,CAAC;AAAA,QAChM;AAAA,UACE;AAAA,YACE;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,OAAO,EAAE,CAAC;AAAA,UAC5D,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,GAAG,KAAK;AAAA,UAC1D,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;AAAA,UAC/D,CAAC,EAAE,iCAAiC,eAAe;AAAA,YACjD;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAAA,UACD,CAAC,EAAE,iCAAiC,eAAe,CAAC,IAAI,CAAC;AAAA,UACzD,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK;AAAA,UACvD,CAAC,EAAE,iCAAiC,eAAe,CAAC,GAAG,CAAC;AAAA,QAC1D;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QAClC,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QAC9C;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,iDAAiD,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,wDAAwD,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QACrP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,8OAA8O,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,OAAO,KAAK,EAAE,EAAE,oBAAoB,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC5hB,IAAI,CAAC,EAAE;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE;AAAA,QACjC,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,qXAAqX,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QAC3Z;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE;AAAA,MAC1B,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,8CAA8C,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,qCAAqC,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,mDAAmD,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,GAAG,MAAM,IAAI,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,eAAe,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,KAAK,GAAG,KAAK,GAAG;AAAA,QACvjB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,QAAQ;AAAA,QACT;AAAA,MACF,GAAG,CAAC,EAAE,YAAY,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,uBAAuB,SAAS,CAAC,0DAA0D,yDAAyD,GAAG,KAAK,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,gBAAgB,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,eAAe,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,KAAK,GAAG,KAAK,GAAG;AAAA,QACve;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,QAAQ;AAAA,QACT;AAAA,MACF,GAAG,CAAC,EAAE,uBAAuB,SAAS,CAAC,0DAA0D,yDAAyD,GAAG,KAAK,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,gBAAgB,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC1c,IAAI,CAAC,EAAE;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE;AAAA,MACxB,GAAG,CAAC,EAAE,EAAE,kcAAkc,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;AAAA,QAC1e;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,oDAAoD,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,4CAA4C,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,uDAAuD,KAAK,EAAE,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;AAAA,QACza;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,IAAI;AAAA,QACL;AAAA,MACF,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,yBAAyB,YAAY,CAAC,QAAQ,GAAG,SAAS,UAAU,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;AAAA,QACpf;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,IAAI;AAAA,QACL;AAAA,MACF,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,yBAAyB,YAAY,CAAC,QAAQ,GAAG,SAAS,UAAU,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,+DAA+D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAChe,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,+BAA+B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QAC3D;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,4FAA4F,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,uBAAuB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC9d,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,6FAA6F,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAAA,QACnH;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC,GAAG,CAAC,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,sCAAsC,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,uDAAuD,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QAC3e;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC/B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,yCAAyC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,mHAAmH,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,qDAAqD,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,CAAC,GAAG;AAAA,QACxiB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,IAAI;AAAA,QACL;AAAA,MACF,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,kBAAkB,sBAAsB,2BAA2B,GAAG,OAAO,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,kBAAkB,sBAAsB,2BAA2B,GAAG,OAAO,GAAG;AAAA,QACja;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,QAAQ;AAAA,QACT;AAAA,MACF,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAClH,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,sCAAsC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAAA,QAClE,CAAC,EAAE,EAAE,uJAAuJ,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAAA,QAC1L,CAAC,EAAE,EAAE,4CAA4C,EAAE,EAAE,EAAE,UAAU;AAAA,QACjE,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC7C,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC/C,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC7C,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,cAAc,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,aAAa,GAAG,KAAK,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,GAAG,KAAK,CAAC;AAAA,QACzP,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,cAAc,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,aAAa,GAAG,KAAK,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,GAAG,KAAK,CAAC;AAAA,QAC7M,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,oDAAoD,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAClF;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,2IAA2I,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,yHAAyH,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QAChZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,mCAAmC,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,8OAA8O,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,OAAO,KAAK,EAAE,EAAE,oBAAoB,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QAC1hB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC/B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,mFAAmF,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG;AAAA,QAC5H;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,wDAAwD,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,yEAAyE,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,sBAAsB,SAAS,CAAC,gBAAgB,GAAG,KAAK,GAAG;AAAA,QAChb;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,sLAAsL;AAAA,QACvL;AAAA,MACF,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,cAAc,GAAG,KAAK,GAAG,CAAC,EAAE,mBAAmB,SAAS,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC9N,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,uBAAuB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,sFAAsF,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gEAAgE,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QACnX;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,WAAW,GAAG,KAAK,GAAG,CAAC,EAAE,iCAAiC,eAAe,CAAC,aAAa,GAAG,KAAK,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,sEAAsE,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACvjB,IAAI,CAAC,EAAE;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,qGAAqG,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,0CAA0C,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACzhB,IAAI,CAAC,EAAE;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,QACf,CAAC,GAAG,CAAC;AAAA,MACP,GAAG,CAAC,EAAE,EAAE,8FAA8F,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,oDAAoD,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,6BAA6B,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,8BAA8B,eAAe,CAAC,GAAG,GAAG,KAAK,GAAG;AAAA,QACxjB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,iBAAiB;AAAA,QAClB;AAAA,MACF,GAAG,CAAC,EAAE,2BAA2B,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,qCAAqC,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,WAAW,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,WAAW,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,YAAY,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,8BAA8B,eAAe,CAAC,GAAG,GAAG,KAAK,GAAG;AAAA,QAC5d;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,iBAAiB;AAAA,QAClB;AAAA,MACF,GAAG,CAAC,EAAE,2BAA2B,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,qCAAqC,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,WAAW,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,WAAW,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,YAAY,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC5gB,IAAI;AAAA,QACF;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,CAAC;AAAA,QACJ;AAAA,QACA,CAAC,EAAE,EAAE,iIAAiI,EAAE,EAAE,EAAE,UAAU;AAAA,QACtJ,CAAC,EAAE,EAAE,iGAAiG,EAAE,EAAE,EAAE,UAAU;AAAA,QACtH,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,UAAU;AAAA,QACvC,CAAC,EAAE,EAAE,uBAAuB,EAAE,EAAE,EAAE,UAAU;AAAA,QAC5C,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU;AAAA,QACjC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,oBAAoB,CAAC,CAAC;AAAA,QACxD;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,yBAAyB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAChf,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,qBAAqB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QACtG;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,4CAA4C,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACxc,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,sCAAsC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC1D,CAAC,EAAE,EAAE,mEAAmE,EAAE,EAAE,EAAE,WAAW;AAAA,QACzF,CAAC,EAAE,EAAE,wDAAwD,EAAE,EAAE,EAAE,WAAW;AAAA,QAC9E,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,WAAW;AAAA,QACvC,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,WAAW;AAAA,QACtC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,8CAA8C,EAAE,EAAE,EAAE,WAAW;AAAA,QACpE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,2CAA2C,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QAClJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,8OAA8O,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,OAAO,KAAK,EAAE,EAAE,oBAAoB,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QACtiB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC/B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,sDAAsD,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,+BAA+B,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC/f,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,8BAA8B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;AAAA,QAClE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,QACF,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,wBAAwB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,eAAe,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,iBAAiB,SAAS,CAAC,eAAe,GAAG,EAAE,SAAS,GAAG,CAAC,EAAE,YAAY,MAAM,CAAC,OAAO,GAAG,EAAE,SAAS,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACllB,IAAI,CAAC,EAAE;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,8DAA8D,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,8EAA8E,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACvd,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,yFAAyF,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,GAAG;AAAA,QAChI;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,QACH,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,wEAAwE,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,8DAA8D,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,0CAA0C,KAAK,EAAE,EAAE,+DAA+D,MAAM,EAAE,EAAE;AAAA,QACpgB,CAAC,EAAE,cAAc,MAAM,CAAC,2EAA2E,CAAC;AAAA,QACpG,CAAC,EAAE,oBAAoB,SAAS,CAAC,wBAAwB,4BAA4B,CAAC;AAAA,QACtF,CAAC,EAAE,oBAAoB,SAAS,CAAC,UAAU,0CAA0C,CAAC;AAAA,QACtF,CAAC,EAAE,8BAA8B,YAAY,CAAC,eAAe,GAAG,KAAK;AAAA,QACrE,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,CAAC;AAAA,QACrC,CAAC,EAAE,4BAA4B,YAAY,CAAC,4DAA4D,GAAG,QAAQ,YAAY;AAAA,QAC/H,CAAC,EAAE,4BAA4B,YAAY,CAAC,oBAAoB,GAAG,QAAQ,YAAY;AAAA,MACzF,GAAG,CAAC;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,wBAAwB,4BAA4B;AAAA,MACvD,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,eAAe,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,4DAA4D,GAAG,QAAQ,YAAY,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,oBAAoB,GAAG,QAAQ,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,sEAAsE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAChe,IAAI,CAAC,EAAE;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,QACH,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,6IAA6I,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,+KAA+K,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,qDAAqD,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,YAAY,GAAG;AAAA,QAC7gB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,CAAC,EAAE,EAAE,8OAA8O,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,OAAO,KAAK,EAAE,EAAE,oBAAoB,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,YAAY,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACte,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;AAAA,QAC/D;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,QACF,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,yBAAyB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,yBAAyB,YAAY,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,yBAAyB,YAAY,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;AAAA,QAC5jB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACzD,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,wDAAwD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,+KAA+K,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,qCAAqC,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,yBAAyB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QAC7gB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC9Y,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,oIAAoI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAAA,QAC1J;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,iLAAiL,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,8CAA8C,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,sCAAsC,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,qBAAqB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AAAA,QAClkB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,KAAK;AAAA,QACN;AAAA,MACF,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,qDAAqD,uFAAuF,GAAG,OAAO,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,yBAAyB,GAAG,OAAO,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,OAAO,GAAG,OAAO,GAAG;AAAA,QAC7a;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,MAAM;AAAA,QACP;AAAA,MACF,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,+CAA+C,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACjJ,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,iFAAiF,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,CAAC,GAAG;AAAA,QACtc;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG;AAAA,MACN,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACpH,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,uBAAuB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;AAAA,QAC/C,CAAC,EAAE,EAAE,yNAAyN,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAAA,QAC/P;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,EAAE;AAAA,UACH,CAAC,CAAC;AAAA,QACJ;AAAA,QACA,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACzE,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACnD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,0PAA0P,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QAC3R,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACnD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC1C;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,sEAAsE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,2IAA2I,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,qGAAqG,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QAC5a;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,EAAE;AAAA,MACR,GAAG,CAAC,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,oDAAoD,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,4CAA4C,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,uDAAuD,KAAK,EAAE,EAAE,mBAAmB,OAAO,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACpe,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,8CAA8C,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG;AAAA,QACpF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,uCAAuC,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,GAAG,KAAK,GAAG;AAAA,QACphB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG;AAAA,QACJ;AAAA,MACF,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACpH,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,mCAAmC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,sBAAsB,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC1f,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,+BAA+B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACnD,CAAC,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,WAAW;AAAA,QAC1C,CAAC,EAAE,EAAE,6EAA6E,EAAE,EAAE,EAAE,WAAW;AAAA,QACnG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,WAAW;AAAA,QACvC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,yBAAyB,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,CAAC,CAAC;AAAA,QACrG;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,wBAAwB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG;AAAA,QACxD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,WAAW,GAAG,KAAK,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,WAAW,GAAG,KAAK,GAAG,CAAC,EAAE,4CAA4C,kBAAkB,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE;AAAA,QACriB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACvI,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,0FAA0F,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,iCAAiC,eAAe,CAAC,GAAG,CAAC,GAAG;AAAA,QACta;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG;AAAA,MACN,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACpH,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,iCAAiC,EAAE,EAAE,EAAE,OAAO,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,OAAO,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC1c,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,sCAAsC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG;AAAA,QAC1E;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,oZAAoZ,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,qBAAqB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG;AAAA,QAClf;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,0DAA0D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,MAAM,CAAC,2BAA2B,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,yBAAyB,YAAY,CAAC,SAAS,GAAG,MAAM,GAAG,CAAC,EAAE,yBAAyB,YAAY,CAAC,eAAe,CAAC,GAAG;AAAA,QACxiB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,kDAAkD;AAAA,QACnD;AAAA,MACF,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,yBAAyB,YAAY,CAAC,SAAS,GAAG,MAAM,GAAG,CAAC,EAAE,yBAAyB,YAAY,CAAC,eAAe,CAAC,GAAG;AAAA,QAC7c;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,kDAAkD;AAAA,QACnD;AAAA,MACF,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC7S,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,yBAAyB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAAA,QAChD,CAAC,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACnD,CAAC,EAAE,EAAE,0CAA0C,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACzE,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,UAAU;AAAA,QACnC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,yCAAyC,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAAA,QAC1I;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,4HAA4H,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG;AAAA,QAClL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,GAAG,IAAI,EAAE;AAAA,QAChB,CAAC,GAAG,CAAC;AAAA,MACP,GAAG,CAAC,EAAE,EAAE,sFAAsF,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QACjP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,GAAG,IAAI,EAAE;AAAA,QAChB,CAAC,GAAG,CAAC;AAAA,MACP,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,8BAA8B,KAAK,EAAE,EAAE,6BAA6B,EAAE,MAAM,EAAE;AAAA,QAC7I,CAAC,EAAE,cAAc,MAAM,CAAC,uBAAuB,2BAA2B,0BAA0B,CAAC;AAAA,QACrG,CAAC,EAAE,cAAc,MAAM,CAAC,yBAAyB,2BAA2B,6CAA6C,CAAC;AAAA,QAC1H;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,YACE;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,CAAC,EAAE,oBAAoB,SAAS;AAAA,UAC9B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,QACD,CAAC,EAAE,oBAAoB,SAAS,CAAC,QAAQ,CAAC;AAAA,QAC1C;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,YACE;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,CAAC,EAAE,oBAAoB,SAAS;AAAA,UAC9B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,QACD,CAAC,EAAE,4BAA4B,YAAY,CAAC,WAAW,CAAC;AAAA,QACxD,CAAC,EAAE,4BAA4B,YAAY,CAAC,4BAA4B,4BAA4B,4DAA4D,GAAG,OAAO,UAAU,CAAC;AAAA,QACrL,CAAC,EAAE,4BAA4B,YAAY,CAAC,+LAA+L,GAAG,OAAO,UAAU,CAAC;AAAA,QAChQ;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,GAAG;AAAA,QACN;AAAA,QACA,CAAC,EAAE,4BAA4B,YAAY,CAAC,IAAI,GAAG,OAAO,UAAU,CAAC;AAAA,QACrE,CAAC,EAAE,4BAA4B,YAAY,CAAC,SAAS,GAAG,OAAO,UAAU,CAAC;AAAA,QAC1E,CAAC,EAAE,4BAA4B,YAAY,CAAC,QAAQ,GAAG,EAAE,QAAQ;AAAA,QACjE,CAAC,EAAE,oCAAoC,eAAe,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;AAAA,MAC5E,GAAG,CAAC;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG;AAAA,QACD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,4BAA4B,4BAA4B,4DAA4D,GAAG,OAAO,UAAU,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,+LAA+L,GAAG,OAAO,UAAU,CAAC,GAAG;AAAA,QACvf;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG;AAAA,MACN,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,IAAI,GAAG,OAAO,UAAU,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,SAAS,GAAG,OAAO,UAAU,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,QAAQ,GAAG,EAAE,QAAQ,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,2CAA2C,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACzc,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,6CAA6C,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG;AAAA,QACzF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,EAAE;AAAA,QACN,CAAC,GAAG,CAAC;AAAA,MACP,GAAG,CAAC,EAAE,EAAE,qJAAqJ,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,mCAAmC,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,6BAA6B,KAAK,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,IAAI,CAAC,GAAG;AAAA,QACngB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,MAAM;AAAA,QACP;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,gBAAgB,GAAG,EAAE,SAAS,GAAG,CAAC,EAAE,yBAAyB,YAAY,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,MAAM,GAAG,QAAQ,SAAS,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,gBAAgB,GAAG,EAAE,SAAS,GAAG,CAAC,EAAE,yBAAyB,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACtc,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,iDAAiD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG;AAAA,QACjF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,mEAAmE,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,mCAAmC,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,uCAAuC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,cAAc,GAAG,EAAE,QAAQ,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QACpkB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC/B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,mDAAmD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,+FAA+F,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,yBAAyB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,sBAAsB,SAAS,CAAC,aAAa,GAAG,OAAO,GAAG;AAAA,QACnjB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG;AAAA,QACJ;AAAA,MACF,GAAG,CAAC,EAAE,iBAAiB,SAAS,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAClN,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,8BAA8B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,6DAA6D,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,8BAA8B,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM,KAAK,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAAA,QACtY;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,SAAS;AAAA,MACZ,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACpH,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,oCAAoC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,wHAAwH,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,4CAA4C,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAAA,QAChd;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,QAAQ;AAAA,MACX,GAAG,CAAC,EAAE,yBAAyB,YAAY,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACpM,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,sEAAsE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,6JAA6J,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;AAAA,QACvT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,oDAAoD,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,4CAA4C,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,uDAAuD,KAAK,EAAE,EAAE,mBAAmB,OAAO,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACriB,IAAI,CAAC,EAAE;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACne,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,sCAAsC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,GAAG;AAAA,QAC9E;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,yDAAyD,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,CAAC,GAAG;AAAA,QAC1jB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG;AAAA,MACN,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,aAAa,CAAC;AAAA,MAClL,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,iMAAiM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG;AAAA,QAC5Q;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,QACtC,CAAC,GAAG,GAAG,CAAC;AAAA,MACV,GAAG,CAAC,EAAE,EAAE,kEAAkE,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,2CAA2C,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;AAAA,QAC7d,CAAC,EAAE,uBAAuB,SAAS,CAAC,gBAAgB,GAAG,KAAK;AAAA,QAC5D,CAAC,EAAE,YAAY,MAAM,CAAC,OAAO,MAAM,CAAC;AAAA,QACpC,CAAC,EAAE,uBAAuB,SAAS,CAAC,uGAAuG,8GAA8G,GAAG,KAAK;AAAA,QACjQ;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,wGAAwG,0bAA0b;AAAA,UACniB;AAAA,QACF;AAAA,QACA,CAAC,EAAE,oBAAoB,SAAS,CAAC,KAAK,GAAG,KAAK;AAAA,QAC9C,CAAC,EAAE,uBAAuB,SAAS,CAAC,GAAG,GAAG,KAAK;AAAA,QAC/C,CAAC,EAAE,uBAAuB,SAAS,CAAC,KAAK,GAAG,KAAK;AAAA,QACjD,CAAC,EAAE,4BAA4B,YAAY,CAAC,aAAa,GAAG,KAAK;AAAA,QACjE,CAAC,EAAE,sBAAsB,SAAS,CAAC,OAAO,GAAG,KAAK;AAAA,QAClD,CAAC,EAAE,uBAAuB,SAAS,CAAC,GAAG,GAAG,KAAK;AAAA,QAC/C,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,QAAQ,OAAO,GAAG,KAAK;AAAA,QAC/D,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK;AAAA,QACvD,CAAC,EAAE,oBAAoB,SAAS,CAAC,QAAQ,GAAG,KAAK;AAAA,QACjD,CAAC,EAAE,oBAAoB,SAAS,CAAC,UAAU,GAAG,KAAK;AAAA,QACnD,CAAC,EAAE,oBAAoB,SAAS,CAAC,aAAa,oBAAoB,GAAG,KAAK;AAAA,QAC1E,CAAC,EAAE,oBAAoB,SAAS,CAAC,IAAI,GAAG,KAAK;AAAA,QAC7C,CAAC,EAAE,8BAA8B,YAAY,CAAC,eAAe,GAAG,KAAK;AAAA,QACrE,CAAC,EAAE,4BAA4B,YAAY,CAAC,SAAS,GAAG,KAAK;AAAA,QAC7D,CAAC,EAAE,4BAA4B,YAAY,CAAC,IAAI,GAAG,KAAK;AAAA,MAC1D,GAAG;AAAA,QACD,CAAC,EAAE,uBAAuB,SAAS,CAAC,gBAAgB,GAAG,KAAK;AAAA,QAC5D;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,uGAAuG,8GAA8G;AAAA,UACtN;AAAA,QACF;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,wGAAwG,0bAA0b;AAAA,UACniB;AAAA,QACF;AAAA,QACA,CAAC,EAAE,oBAAoB,SAAS,CAAC,KAAK,GAAG,KAAK;AAAA,QAC9C,CAAC,EAAE,uBAAuB,SAAS,CAAC,GAAG,GAAG,KAAK;AAAA,QAC/C,CAAC,EAAE,uBAAuB,SAAS,CAAC,KAAK,GAAG,KAAK;AAAA,QACjD,CAAC,EAAE,4BAA4B,YAAY,CAAC,aAAa,GAAG,KAAK;AAAA,QACjE,CAAC,EAAE,sBAAsB,SAAS,CAAC,OAAO,GAAG,KAAK;AAAA,QAClD,CAAC,EAAE,uBAAuB,SAAS,CAAC,GAAG,GAAG,KAAK;AAAA,QAC/C,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,QAAQ,OAAO,GAAG,KAAK;AAAA,QAC/D,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK;AAAA,QACvD,CAAC,EAAE,oBAAoB,SAAS,CAAC,QAAQ,GAAG,KAAK;AAAA,QACjD,CAAC,EAAE,oBAAoB,SAAS,CAAC,UAAU,GAAG,KAAK;AAAA,QACnD,CAAC,EAAE,oBAAoB,SAAS,CAAC,aAAa,oBAAoB,GAAG,KAAK;AAAA,QAC1E,CAAC,EAAE,oBAAoB,SAAS,CAAC,IAAI,GAAG,KAAK;AAAA,QAC7C,CAAC,EAAE,8BAA8B,YAAY,CAAC,eAAe,GAAG,KAAK;AAAA,QACrE,CAAC,EAAE,4BAA4B,YAAY,CAAC,SAAS,GAAG,KAAK;AAAA,QAC7D,CAAC,EAAE,4BAA4B,YAAY,CAAC,IAAI,GAAG,KAAK;AAAA,MAC1D,GAAG,CAAC,EAAE,EAAE,kCAAkC,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;AAAA,QACpO;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,IAAI,EAAE;AAAA,MACT,CAAC;AAAA,MACD,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,qBAAqB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC9d,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QAC3C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,oGAAoG,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACve,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAAA,QAC1D;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,CAAC;AAAA,QACJ;AAAA,QACA,CAAC,EAAE,EAAE,8DAA8D,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAChG,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,YAAY;AAAA,QAC/D,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,YAAY;AAAA,QACzC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,8OAA8O,EAAE,EAAE,EAAE,YAAY;AAAA,QACrQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAAA,QACtD;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,CAAC;AAAA,QACJ;AAAA,QACA,CAAC,EAAE,EAAE,sBAAsB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACxD,CAAC,EAAE,EAAE,gFAAgF,EAAE,EAAE,EAAE,YAAY;AAAA,QACvG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,YAAY;AAAA,QACzC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,8OAA8O,EAAE,EAAE,EAAE,YAAY;AAAA,QACrQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAAA,QACvD,CAAC,EAAE,EAAE,4CAA4C,EAAE,EAAE,EAAE,UAAU;AAAA,QACjE,CAAC,EAAE,EAAE,sDAAsD,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACrF,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC5C,CAAC,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACnD,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAChD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC/C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,OAAO,GAAG,KAAK,CAAC;AAAA,QACtN;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,mCAAmC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,2DAA2D,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QACtO;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,IAAI,EAAE;AAAA,MACT,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,yBAAyB,YAAY,CAAC,OAAO,GAAG,OAAO,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,yBAAyB,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG;AAAA,QACtiB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACvF,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,8CAA8C,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,4CAA4C,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QAC7J;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,CAAC;AAAA,MACP,GAAG,CAAC,EAAE,EAAE,uCAAuC,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,oDAAoD,8EAA8E,CAAC,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,uBAAuB,0BAA0B,CAAC,GAAG;AAAA,QAClgB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG;AAAA,MACN,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACtL,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,0CAA0C,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,QAC7E,CAAC,EAAE,EAAE,4FAA4F,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,QACtI,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QAClD,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QAC9C,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QAC9C,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,mBAAmB,SAAS,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,8BAA8B,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,GAAG,KAAK,CAAC;AAAA,QACxO;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACnC,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,WAAW;AAAA,QACvC,CAAC,EAAE,EAAE,2EAA2E,EAAE,EAAE,EAAE,WAAW;AAAA,QACjG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,WAAW;AAAA,QACvC,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW;AAAA,QAClC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,2CAA2C,EAAE,EAAE,EAAE,WAAW;AAAA,QACjE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,mDAAmD,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,6BAA6B,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAAA,QACjW;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,OAAO;AAAA,QACR;AAAA,MACF,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACpH,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,6BAA6B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,6LAA6L,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,qFAAqF,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,WAAW,GAAG;AAAA,QACta;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,MAAM,CAAC,OAAO,aAAa,CAAC,GAAG,CAAC,EAAE,YAAY,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACzkB,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;AAAA,QAC7D;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,0FAA0F,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAChd,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,4EAA4E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;AAAA,QACxH;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,QAChB;AAAA,QACA,CAAC,EAAE,EAAE,sCAAsC,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;AAAA,QAClF,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,QACpD,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAAA,QACpD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,YAAY,MAAM,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,EAAE,YAAY,MAAM,CAAC,UAAU,GAAG,KAAK,GAAG,CAAC,EAAE,YAAY,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,2BAA2B,GAAG,KAAK,GAAG;AAAA,UAC1L;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,sBAAsB;AAAA,UACvB;AAAA,QACF,GAAG,CAAC,EAAE,uBAAuB,SAAS,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,mBAAmB,SAAS,CAAC,wCAAwC,GAAG,KAAK,CAAC;AAAA,QACtI,CAAC,CAAC,EAAE,YAAY,MAAM,CAAC,UAAU,GAAG,KAAK,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,2BAA2B,GAAG,KAAK,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,sBAAsB,GAAG,KAAK,GAAG,CAAC,EAAE,uBAAuB,SAAS,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,mBAAmB,SAAS,CAAC,wCAAwC,GAAG,KAAK,CAAC;AAAA,QAC5T,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,qIAAqI;AAAA,QAC1I,CAAC,EAAE,EAAE,gJAAgJ,EAAE,EAAE,EAAE,UAAU;AAAA,QACrK;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,sCAAsC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;AAAA,QAC9D,CAAC,EAAE,EAAE,4CAA4C,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACzE,CAAC,EAAE,EAAE,4CAA4C,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACzE,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QAChD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,CAAC;AAAA,QACnG;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,OAAO,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,OAAO,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACxY,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QACxD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,2FAA2F,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACpb,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,8BAA8B,EAAE,EAAE,EAAE,QAAQ,GAAG,CAAC,EAAE,EAAE,kCAAkC,EAAE,EAAE,EAAE,QAAQ,GAAG,CAAC,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,QAAQ,GAAG;AAAA,QAChM;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,QAAQ,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,uBAAuB,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACvU,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,4EAA4E,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,sDAAsD,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,WAAW,GAAG;AAAA,QACzQ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,sCAAsC,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,GAAG,MAAM,IAAI,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,GAAG,MAAM,GAAG,CAAC,EAAE,yCAAyC,kBAAkB,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,GAAG,MAAM,GAAG,CAAC,EAAE,yCAAyC,kBAAkB,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG;AAAA,QAC5hB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,WAAW,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACvG,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,qCAAqC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,sEAAsE,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,2DAA2D,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,iCAAiC,eAAe,CAAC,OAAO,GAAG,KAAK,GAAG;AAAA,QACvf;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG;AAAA,MACN,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC/L,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,sCAAsC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG;AAAA,QACvF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,EAAE;AAAA,QACN,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,MAChB,GAAG,CAAC,EAAE,EAAE,6NAA6N,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,kCAAkC,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,+DAA+D,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QAC9e;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,MAAM,IAAI,MAAM,KAAK,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,QAAQ,SAAS,UAAU,SAAS,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,QAAQ,SAAS,QAAQ,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,0BAA0B,sCAAsC,kDAAkD,GAAG,KAAK,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,wBAAwB,GAAG,KAAK,GAAG;AAAA,QACtf;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,uBAAuB,gCAAgC;AAAA,QACxD;AAAA,MACF,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,6FAA6F,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,wBAAwB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC5W,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG;AAAA,QAClE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,4EAA4E,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,8OAA8O,EAAE,EAAE,EAAE,YAAY,GAAG;AAAA,QAClgB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,MAAM,GAAG,OAAO,KAAK,EAAE,EAAE,oBAAoB,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACpL,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,8BAA8B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,yFAAyF,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG;AAAA,QAClM;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,WAAW,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,cAAc,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC9jB,IAAI,CAAC,EAAE;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,+EAA+E,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,gDAAgD,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,WAAW,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,qBAAqB,GAAG,KAAK,GAAG;AAAA,QACvf;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,MAAM;AAAA,QACP;AAAA,MACF,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACpH,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,mDAAmD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAAA,QACnF,CAAC,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAAA,QAC1D,CAAC,EAAE,EAAE,qCAAqC,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACtE,CAAC,EAAE,EAAE,kCAAkC,EAAE,EAAE,EAAE,YAAY;AAAA,QACzD,CAAC,EAAE,EAAE,8DAA8D,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;AAAA,QAClG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QAC7C,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QAC7C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,6FAA6F,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QAC9H;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,wBAAwB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACzD;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;AAAA,QAC/D;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,QACF,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,0DAA0D,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;AAAA,QAClkB;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACzD,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,wBAAwB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,oEAAoE,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,qEAAqE,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC1iB,IAAI,CAAC,EAAE;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,yCAAyC,EAAE,EAAE,EAAE,QAAQ,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,QAAQ,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,QAAQ,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACvc,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG;AAAA,QACzD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,qHAAqH,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,6BAA6B,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC1hB,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,8BAA8B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG;AAAA,QAC7D;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC9d,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,sCAAsC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QAClE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,wDAAwD,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,8CAA8C,EAAE,EAAE,EAAE,WAAW,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,gBAAgB,GAAG,KAAK,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACjlB,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,qCAAqC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACzD,CAAC,EAAE,EAAE,sDAAsD,EAAE,EAAE,EAAE,WAAW;AAAA,QAC5E,CAAC,EAAE,EAAE,uBAAuB,EAAE,EAAE,EAAE,WAAW;AAAA,QAC7C,CAAC,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,WAAW;AAAA,QAC1C,CAAC,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,WAAW;AAAA,QAC1C,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,MAAM,CAAC,CAAC;AAAA,QACjG;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI;AAAA,QACF;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,IAAI,IAAI,EAAE;AAAA,QACb;AAAA,QACA,CAAC,EAAE,EAAE,oXAAoX,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACrZ,CAAC,EAAE,EAAE,kCAAkC,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACnE,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,YAAY;AAAA,QACtC,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACjD,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACjE,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QAC7C,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,4DAA4D,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,GAAG,CAAC,CAAC;AAAA,QACnQ;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QAClD;AAAA,QACA;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,EAAE;AAAA,QACL;AAAA,MACF;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,oCAAoC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,iCAAiC,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACjmB,IAAI,CAAC,EAAE;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,QACH,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,0OAA0O,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QAChR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,8OAA8O,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,OAAO,KAAK,EAAE,EAAE,oBAAoB,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QACviB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC/B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,sBAAsB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,6BAA6B,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACziB,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,8BAA8B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QAC1D;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,4DAA4D,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,qCAAqC,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM,KAAK,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC7c,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,uDAAuD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;AAAA,QAC3F;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,CAAC;AAAA,QACJ;AAAA,QACA,CAAC,EAAE,EAAE,waAAwa,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACtc,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC5C,CAAC,EAAE,EAAE,mCAAmC,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;AAAA,QACjF,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,wEAAwE,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACtG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,sBAAsB,SAAS,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,gCAAgC,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,CAAC,CAAC;AAAA,QACzO;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,CAAC;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,0CAA0C,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACxE;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG;AAAA,QAC1D;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC3f,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,gDAAgD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;AAAA,QACvF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,GAAG,CAAC;AAAA,MACP,GAAG,CAAC,EAAE,EAAE,mGAAmG,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,8BAA8B,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,yBAAyB,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG;AAAA,QAC5iB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,UAAU;AAAA,QACX;AAAA,MACF,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,uBAAuB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC5U,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,oCAAoC,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,GAAG;AAAA,QAChM;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,uCAAuC,EAAE,EAAE,EAAE,UAAU,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAChU,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,6BAA6B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,8EAA8E,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,8BAA8B,EAAE,EAAE,EAAE,UAAU,GAAG;AAAA,QAC7S;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,MAAM,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,yBAAyB,YAAY,CAAC,GAAG,GAAG,SAAS,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,sDAAsD,GAAG,SAAS,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,4BAA4B,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACzgB,IAAI,CAAC,EAAE;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,QACxC,CAAC,GAAG,CAAC;AAAA,MACP,GAAG;AAAA,QACD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,GAAG,IAAI,EAAE;AAAA,QAChB,CAAC,GAAG,CAAC;AAAA,MACP,GAAG,CAAC,EAAE,EAAE,sBAAsB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,yDAAyD,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,UAAU,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,yBAAyB,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,cAAc,GAAG,OAAO,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,KAAK,GAAG,KAAK,GAAG;AAAA,QACriB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,QAAQ;AAAA,QACT;AAAA,MACF,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,WAAW,GAAG,KAAK,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,EAAE,iCAAiC,eAAe,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,sCAAsC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,yBAAyB,YAAY,CAAC,IAAI,CAAC,GAAG;AAAA,QACpe;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,cAAc;AAAA,QACf;AAAA,MACF,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,QAAQ,GAAG,OAAO,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,WAAW,GAAG,KAAK,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,EAAE,iCAAiC,eAAe,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,4CAA4C,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC,GAAG;AAAA,QAC3hB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,EAAE;AAAA,MACR,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC/B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,uDAAuD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,2KAA2K,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QACpa;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,gCAAgC,GAAG,OAAO,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,GAAG,OAAO,GAAG,CAAC,EAAE,2BAA2B,YAAY,CAAC,GAAG,GAAG,OAAO,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,sBAAsB,GAAG,OAAO,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,IAAI,GAAG,KAAK,GAAG;AAAA,QACngB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,IAAI;AAAA,QACL;AAAA,MACF,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,OAAO,GAAG,CAAC,EAAE,iCAAiC,eAAe,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,yFAAyF,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACze,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,iDAAiD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAAA,UAChE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,QACD,CAAC,EAAE,EAAE,wDAAwD,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;AAAA,QACnG,CAAC,EAAE,EAAE,uLAAuL,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACtN,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;AAAA,QACpE,CAAC,EAAE,EAAE,iDAAiD,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;AAAA,QACrF,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QAC/C,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,qHAAqH,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACpJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,yBAAyB,YAAY,CAAC,SAAS,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,KAAK,CAAC,GAAG;AAAA,UACtT;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,QAAQ;AAAA,QACX,GAAG,CAAC,EAAE,sCAAsC,eAAe,CAAC,IAAI,CAAC,CAAC;AAAA,QAClE;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACnC,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QAC/C;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;AAAA,MACvD;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,qCAAqC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,iCAAiC,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,yDAAyD,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,YAAY,GAAG;AAAA,QAC1Q;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,GAAG,MAAM,IAAI,MAAM,KAAK,EAAE,EAAE,4BAA4B,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,wBAAwB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,+EAA+E,EAAE,EAAE,EAAE,YAAY,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACnY,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,2CAA2C,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG;AAAA,QAClG;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,QACH,CAAC,GAAG,GAAG,CAAC;AAAA,MACV,GAAG;AAAA,QACD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,CAAC,EAAE,EAAE,yCAAyC,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,YAAY,MAAM,CAAC,+BAA+B,6CAA6C,4CAA4C,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,OAAO,MAAM,GAAG,EAAE,EAAE,CAAC,GAAG;AAAA,QAC3f;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,KAAK;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,sCAAsC,4DAA4D,0FAA0F,GAAG,OAAO,EAAE,CAAC,GAAG;AAAA,QACzP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG;AAAA,QACD;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,oJAAoJ,kQAAkQ,0VAA0V;AAAA,QACjvB;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,UAAU,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,UAAU,SAAS,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG;AAAA,QAC7Q,CAAC,EAAE,YAAY,MAAM,CAAC,+BAA+B,6CAA6C,4CAA4C,GAAG,EAAE,EAAE,CAAC;AAAA,QACtJ,CAAC,EAAE,sBAAsB,SAAS,CAAC,OAAO,MAAM,GAAG,EAAE,EAAE,CAAC;AAAA,QACxD,CAAC,EAAE,4BAA4B,YAAY,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC;AAAA,QACzD,CAAC,EAAE,4BAA4B,YAAY,CAAC,sCAAsC,4DAA4D,0FAA0F,GAAG,OAAO,EAAE,CAAC;AAAA,QACrP;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,YACE;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,oJAAoJ,kQAAkQ,0VAA0V;AAAA,UACjvB;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,CAAC,EAAE,oBAAoB,SAAS,CAAC,UAAU,GAAG,OAAO,EAAE,CAAC;AAAA,QACxD,CAAC,EAAE,8BAA8B,YAAY,CAAC,UAAU,SAAS,GAAG,EAAE,EAAE,CAAC;AAAA,QACzE,CAAC,EAAE,oCAAoC,eAAe,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;AAAA,MACrE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,gEAAgE,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACtL,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC/B,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,SAAS;AAAA,QAChC,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,SAAS;AAAA,QAChC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,CAAC,CAAC;AAAA,QACvC;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,qCAAqC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,4DAA4D,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,yBAAyB,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG;AAAA,QAC3c;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,OAAO;AAAA,QACR;AAAA,MACF,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC9K,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,yCAAyC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,wNAAwN,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG;AAAA,QACpW;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,cAAc,MAAM,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,0EAA0E,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;AAAA,QACle;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,EAAE;AAAA,MACX,GAAG,CAAC,EAAE,EAAE,4EAA4E,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC3I,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,yBAAyB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,8JAA8J,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QACtP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,oFAAoF,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,qBAAqB,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,6BAA6B,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,sCAAsC,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAAA,MAC3lB,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,+FAA+F,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,GAAG;AAAA,QAChJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,kCAAkC,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,yBAAyB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,kHAAkH,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,+BAA+B,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,uBAAuB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAAA,QACtf,CAAC,EAAE,cAAc,MAAM,CAAC,iBAAiB,yBAAyB,CAAC;AAAA,QACnE,CAAC,EAAE,YAAY,MAAM,CAAC,WAAW,CAAC;AAAA,QAClC,CAAC,EAAE,sBAAsB,SAAS,CAAC,OAAO,CAAC;AAAA,QAC3C,CAAC,EAAE,sBAAsB,SAAS,CAAC,yCAAyC,uDAAuD,CAAC;AAAA,QACpI,CAAC,EAAE,sBAAsB,SAAS,CAAC,gCAAgC,CAAC;AAAA,QACpE,CAAC,EAAE,oBAAoB,SAAS,CAAC,KAAK,CAAC;AAAA,QACvC,CAAC,EAAE,8BAA8B,YAAY,CAAC,SAAS,CAAC;AAAA,QACxD,CAAC,EAAE,8BAA8B,YAAY,CAAC,wBAAwB,CAAC;AAAA,QACvE,CAAC,EAAE,8BAA8B,YAAY,CAAC,qBAAqB,CAAC;AAAA,QACpE,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,CAAC;AAAA,QACpD,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC;AAAA,QAChD,CAAC,EAAE,8BAA8B,YAAY,CAAC,MAAM,CAAC;AAAA,MACvD,GAAG,CAAC,CAAC,EAAE,sBAAsB,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,yCAAyC,uDAAuD,CAAC,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,gCAAgC,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,SAAS,CAAC,GAAG;AAAA,QACnW;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,wBAAwB;AAAA,MAC3B,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAAA,MACxY,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,qCAAqC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,sBAAsB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QAClI;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,yGAAyG,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,GAAG,MAAM,IAAI,MAAM,KAAK,EAAE,EAAE,8BAA8B,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,6FAA6F,EAAE,EAAE,EAAE,YAAY,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QACtgB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC/B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,yOAAyO,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QAChV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,8OAA8O,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;AAAA,QACljB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,CAAC;AAAA,MACD,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,0CAA0C,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG;AAAA,QACzE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,yBAAyB,YAAY,CAAC,WAAW,GAAG,OAAO,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,yBAAyB,YAAY,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE;AAAA,QACjiB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,sBAAsB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACpH,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,0DAA0D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,QACjH,CAAC,EAAE,EAAE,yQAAyQ,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACxS;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,EAAE;AAAA,QACL;AAAA,QACA,CAAC,EAAE,EAAE,wGAAwG,EAAE,EAAE,EAAE,WAAW;AAAA,QAC9H,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC5C,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC3C,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QAClD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,QAAQ,SAAS,WAAW,CAAC,GAAG,CAAC,EAAE,eAAe,MAAM,CAAC,KAAK,CAAC,GAAG;AAAA,UACzG;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,eAAe;AAAA,UAChB;AAAA,QACF,GAAG,CAAC,EAAE,yBAAyB,YAAY,CAAC,wFAAwF,yKAAyK,sLAAsL,GAAG,KAAK,GAAG;AAAA,UAC5e;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,IAAI;AAAA,UACL;AAAA,QACF,GAAG,CAAC,EAAE,yBAAyB,YAAY,CAAC,6BAA6B,6CAA6C,GAAG,KAAK,GAAG;AAAA,UAC/H;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,YACE;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA;AAAA,QACF,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,kCAAkC,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,GAAG,CAAC,CAAC;AAAA,QAC7hB,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,eAAe,GAAG,KAAK,GAAG;AAAA,UACrE;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,wFAAwF,yKAAyK,sLAAsL;AAAA,UACxb;AAAA,QACF,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,yBAAyB,YAAY,CAAC,6BAA6B,6CAA6C,GAAG,KAAK,GAAG;AAAA,UAC1L;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,YACE;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA;AAAA,QACF,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,kCAAkC,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,QAAQ,GAAG,KAAK,CAAC;AAAA,QACrN,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QAC7C;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,+EAA+E;AAAA,QACpF,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC5C;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,4DAA4D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG;AAAA,QAClG;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,CAAC;AAAA,MACV,GAAG,CAAC,EAAE,EAAE,0DAA0D,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,qBAAqB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,sBAAsB,SAAS,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC5lB,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,yBAAyB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,QACzD,CAAC,EAAE,EAAE,uQAAuQ,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,QAC9S,CAAC,EAAE,EAAE,8GAA8G,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC7I,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,WAAW;AAAA,QACrC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,qBAAqB,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,aAAa,GAAG,KAAK,GAAG,CAAC,EAAE,mCAAmC,eAAe,CAAC,GAAG,GAAG,KAAK,CAAC;AAAA,QACxM;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,yBAAyB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,QAC5D;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,GAAG,CAAC;AAAA,UACL,CAAC,GAAG,CAAC;AAAA,QACP;AAAA,QACA,CAAC,EAAE,EAAE,2JAA2J,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAAA,QAC5L,CAAC,EAAE,EAAE,6BAA6B,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QAC9D,CAAC,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QAC7D,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,8BAA8B,YAAY,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,CAAC;AAAA,QAClH;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,oDAAoD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,wIAAwI,EAAE,EAAE,EAAE,OAAO,GAAG;AAAA,QAChP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,uCAAuC,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC1U,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAAA,QAClT;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,QAAQ;AAAA,MACX,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACpH,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,wDAAwD,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,8CAA8C,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QACtX;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,OAAO,KAAK,EAAE,EAAE,oBAAoB,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC9M,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,kCAAkC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,4DAA4D,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,SAAS,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAAA,QAC5Y;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG;AAAA,QACJ;AAAA,MACF,GAAG,CAAC,EAAE,yBAAyB,YAAY,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,kDAAkD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACxR,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,4GAA4G,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG;AAAA,QAChL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,QACf,CAAC,GAAG,GAAG,CAAC;AAAA,MACV,GAAG,CAAC,EAAE,EAAE,0FAA0F,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,uDAAuD,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,uDAAuD,KAAK,EAAE,EAAE,6BAA6B,EAAE,EAAE,EAAE,CAAC;AAAA,QAC5gB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,aAAa,cAAc,aAAa;AAAA,QACzC;AAAA,MACF,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,8BAA8B,GAAG,OAAO,SAAS,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,2BAA2B,YAAY,CAAC,GAAG,GAAG,OAAO,SAAS,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,SAAS,GAAG,OAAO,SAAS,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,eAAe,GAAG,OAAO,SAAS,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,GAAG,OAAO,SAAS,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,MAAM,CAAC,GAAG;AAAA,QACve;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG;AAAA,QACJ;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG;AAAA,QACrH,CAAC,EAAE,sBAAsB,SAAS,CAAC,8BAA8B,GAAG,OAAO,SAAS;AAAA,QACpF,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,CAAC;AAAA,QACrC,CAAC,EAAE,2BAA2B,YAAY,CAAC,GAAG,GAAG,OAAO,SAAS;AAAA,QACjE,CAAC,EAAE,4BAA4B,YAAY,CAAC,SAAS,GAAG,OAAO,SAAS;AAAA,QACxE,CAAC,EAAE,8BAA8B,YAAY,CAAC,eAAe,GAAG,OAAO,SAAS;AAAA,QAChF,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,GAAG,OAAO,SAAS;AAAA,QACrE,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,OAAO,SAAS;AAAA,MACpE,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,8CAA8C,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,qFAAqF,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAChS,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,mCAAmC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,iFAAiF,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QACpL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,sBAAsB,SAAS,CAAC,+BAA+B,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC1Z,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG;AAAA,QAClE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,oHAAoH,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,mCAAmC,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QACnT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,OAAO,KAAK,EAAE,EAAE,oBAAoB,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC9M,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,uBAAuB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG;AAAA,QACnE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,QACH,CAAC,GAAG,GAAG,CAAC;AAAA,MACV,GAAG,CAAC,EAAE,EAAE,6CAA6C,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAChe,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,8CAA8C,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG;AAAA,QACtF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,QACF,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,uDAAuD,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,mBAAmB,GAAG,KAAK,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACjlB,IAAI,CAAC,EAAE;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,CAAC;AAAA,MACP,GAAG,CAAC,EAAE,EAAE,+FAA+F,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,6DAA6D,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,yBAAyB,YAAY,CAAC,+CAA+C,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE;AAAA,QAC3jB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACvF,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,kEAAkE,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,2FAA2F,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QACjb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,OAAO,KAAK,EAAE,EAAE,oBAAoB,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC9M,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,qCAAqC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,2FAA2F,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,iGAAiG,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,sCAAsC,EAAE,EAAE,EAAE,SAAS,GAAG;AAAA,QACtX;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,uBAAuB,yBAAyB,GAAG,EAAE,QAAQ,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,IAAI,GAAG,EAAE,QAAQ,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,sBAAsB,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,8BAA8B,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAAA,MAC/kB,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAAA,QACxC,CAAC,EAAE,EAAE,gHAAgH,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACjJ,CAAC,EAAE,EAAE,iCAAiC,EAAE,EAAE,EAAE,WAAW;AAAA,QACvD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,SAAS,GAAG,KAAK,CAAC;AAAA,QACzH;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,WAAW;AAAA,QACpC;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,kDAAkD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,kFAAkF,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,yBAAyB,YAAY,CAAC,YAAY,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG;AAAA,QAC5jB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,SAAS;AAAA,QACV;AAAA,MACF,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACpH,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,6BAA6B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACrd,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACpD;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU;AAAA,QAChC,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,UAAU;AAAA,QACrC,CAAC,EAAE,EAAE,yBAAyB,EAAE,EAAE,EAAE,UAAU;AAAA,QAC9C,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU;AAAA,QAClC,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,UAAU;AAAA,QACrC,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,UAAU;AAAA,QACrC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,yBAAyB,YAAY,CAAC,SAAS,GAAG,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,GAAG,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,qBAAqB,GAAG,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,GAAG,UAAU,EAAE,CAAC,CAAC;AAAA,QAC5Q;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,UAAU;AAAA,QACrC;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,0EAA0E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,+FAA+F,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,gDAAgD,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QAC9e;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,MACvB,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,qDAAqD,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,kEAAkE,GAAG,EAAE,QAAQ,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,kEAAkE,GAAG,EAAE,QAAQ,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,WAAW,GAAG,EAAE,QAAQ,GAAG,CAAC,EAAE,sCAAsC,eAAe,CAAC,IAAI,GAAG,EAAE,QAAQ,GAAG;AAAA,QACzd;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,iDAAiD;AAAA,QAClD;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,gBAAgB,GAAG,EAAE,QAAQ,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,IAAI,GAAG,EAAE,QAAQ,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,EAAE,QAAQ,GAAG,CAAC,EAAE,8CAA8C,kBAAkB,CAAC,IAAI,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACla,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,GAAG;AAAA,QAC3F;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAClX,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;AAAA,QAChD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACxX,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,qIAAqI,EAAE,EAAE,EAAE,WAAW,GAAG;AAAA,QACzM;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,2CAA2C,EAAE,EAAE,EAAE,WAAW,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,eAAe,GAAG,KAAK,GAAG,CAAC,EAAE,yCAAyC,kBAAkB,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACtiB,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAAA,QACnD,CAAC,EAAE,EAAE,8BAA8B,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC5D,CAAC,EAAE,EAAE,iDAAiD,EAAE,EAAE,EAAE,WAAW;AAAA,QACvE,CAAC,EAAE,EAAE,uBAAuB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACrD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,yCAAyC,kBAAkB,CAAC,MAAM,GAAG,KAAK,CAAC;AAAA,QAC/P,CAAC;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,GAAG;AAAA,UACJ;AAAA,QACF,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,yCAAyC,kBAAkB,CAAC,MAAM,GAAG,KAAK,CAAC;AAAA,QACnJ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACpC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,8BAA8B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAClD,CAAC,EAAE,EAAE,kDAAkD,EAAE,EAAE,EAAE,UAAU;AAAA,QACvE,CAAC,EAAE,EAAE,oCAAoC,EAAE,EAAE,EAAE,UAAU;AAAA,QACzD,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU;AAAA,QAClC,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,UAAU;AAAA,QACtC,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU;AAAA,QAClC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,UAAU;AAAA,QACpC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,QAAQ,GAAG,KAAK,CAAC;AAAA,QAC7K;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU;AAAA,QAClC;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,qCAAqC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAAA,QACjE,CAAC,EAAE,EAAE,iGAAiG,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAAA,QACpI,CAAC,EAAE,EAAE,uCAAuC,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACrE,CAAC,EAAE,EAAE,6BAA6B,EAAE,EAAE,EAAE,UAAU;AAAA,QAClD,CAAC,EAAE,EAAE,6BAA6B,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC3D,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAChD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,8BAA8B,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC;AAAA,QAC/D;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC/C;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,sCAAsC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QAClE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,wDAAwD,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,8CAA8C,EAAE,EAAE,EAAE,WAAW,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACzb,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,8EAA8E,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QACjK;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,qBAAqB,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACrY,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,mCAAmC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,yBAAyB,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,qCAAqC,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QACzP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM,KAAK,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC3O,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,yMAAyM,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG;AAAA,QACpS;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,8BAA8B,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,yBAAyB,YAAY,CAAC,8BAA8B,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC,EAAE,iCAAiC,eAAe,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACjiB,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QAC5C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,iEAAiE,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,MAAM,CAAC,qBAAqB,8CAA8C,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACplB,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,qEAAqE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAAA,QAC3G;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,UACX,CAAC,CAAC;AAAA,QACJ;AAAA,QACA,CAAC,EAAE,EAAE,oMAAoM,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;AAAA,QAC5O,CAAC,EAAE,EAAE,8BAA8B,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QAC/D,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC5C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,yBAAyB,YAAY,CAAC,MAAM,GAAG,KAAK,GAAG;AAAA,UACzD;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,mFAAmF;AAAA,UACpF;AAAA,QACF,GAAG,CAAC,EAAE,2BAA2B,YAAY,CAAC,mBAAmB,kBAAkB,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,eAAe,GAAG,KAAK,GAAG,CAAC,EAAE,2BAA2B,YAAY,CAAC,6BAA6B,GAAG,KAAK,GAAG,CAAC,EAAE,yBAAyB,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,iCAAiC,eAAe,CAAC,IAAI,GAAG,KAAK,GAAG;AAAA,UAC3a;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,GAAG;AAAA,UACJ;AAAA,QACF,CAAC;AAAA,QACD;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,wIAAwI,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,8EAA8E,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QACxb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,CAAC,EAAE,EAAE,iDAAiD,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,UAAU,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,YAAY,GAAG,KAAK,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,uCAAuC,0CAA0C,GAAG,KAAK,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACvkB,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,mCAAmC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAAA,QAC1D,CAAC,EAAE,EAAE,yCAAyC,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACvE,CAAC,EAAE,EAAE,uGAAuG,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACrI,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC3C,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,CAAC,CAAC;AAAA,QACnF;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,EAAE;AAAA,QACL;AAAA,MACF;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,+BAA+B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,+GAA+G,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,+GAA+G,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QACjf;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,OAAO,KAAK,EAAE,EAAE,oBAAoB,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC/M,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,sCAAsC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,2GAA2G,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,oCAAoC,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QAC1Y;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,yBAAyB,GAAG,KAAK,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC1T,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,6BAA6B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACjD,CAAC,EAAE,EAAE,kCAAkC,EAAE,EAAE,EAAE,UAAU;AAAA,QACvD,CAAC,EAAE,EAAE,uBAAuB,EAAE,EAAE,EAAE,UAAU;AAAA,QAC5C,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU;AAAA,QAClC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,QAAQ,CAAC,CAAC;AAAA,QAClE;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,uCAAuC,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QACtV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,OAAO,KAAK,EAAE,EAAE,mBAAmB,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC7M,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,yCAAyC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,4DAA4D,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,0EAA0E,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,6BAA6B,EAAE,EAAE,EAAE,UAAU,GAAG;AAAA,QAChT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,UAAU,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACpT,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,+GAA+G,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG;AAAA,QAC9N;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,sBAAsB,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,wBAAwB,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC1hB,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,4CAA4C,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAAA,QAClE;AAAA,QACA;AAAA,MACF,CAAC,GAAG,CAAC,EAAE,EAAE,sEAAsE,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,+BAA+B,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,aAAa,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,uBAAuB,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACtnB,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,qCAAqC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,4CAA4C,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,yBAAyB,YAAY,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACrmB,IAAI;AAAA,QACF;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,EAAE;AAAA,UACH,CAAC,GAAG,CAAC;AAAA,QACP;AAAA,QACA,CAAC,EAAE,EAAE,mbAAmb,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAAA,QACxd;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,GAAG,CAAC;AAAA,QACP;AAAA,QACA,CAAC,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,YAAY;AAAA,QAC3C,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY;AAAA,QACpC,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY;AAAA,QACpC,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY;AAAA,QACpC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,YAAY,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,CAAC,CAAC;AAAA,QACjJ,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,CAAC,CAAC;AAAA,QACnH,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,kCAAkC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,kYAAkY,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG;AAAA,QAC5f;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,EAAE;AAAA,MACR,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QAC7J;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,MAAM,IAAI,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,yBAAyB,YAAY,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,gCAAgC,kDAAkD,GAAG,KAAK,GAAG,CAAC,EAAE,yBAAyB,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,iCAAiC,eAAe,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QAC3hB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC/B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,2CAA2C,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,8BAA8B,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC1kB,IAAI,CAAC,EAAE;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,CAAC;AAAA,MACP,GAAG,CAAC,EAAE,EAAE,2WAA2W,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,wBAAwB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QAC5e;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,yBAAyB,EAAE,EAAE,EAAE,UAAU,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC3e,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,sCAAsC,EAAE,EAAE,EAAE,QAAQ,GAAG;AAAA,QACxH;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,QAAQ,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC/b,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QAC7C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,sBAAsB,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACve,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QACxH;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,oBAAoB,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,iBAAiB,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAClY,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,mCAAmC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,QAChF,CAAC,EAAE,EAAE,mEAAmE,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,QAC5G;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,EAAE;AAAA,QACL;AAAA,QACA,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,aAAa;AAAA,QACxC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,8BAA8B,YAAY,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,SAAS,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,MAAM,GAAG,KAAK,CAAC;AAAA,QACvT;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,YAAY;AAAA,QACvC;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,+BAA+B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,iGAAiG,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACtiB,IAAI,CAAC,EAAE;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE;AAAA,MACxB,GAAG,CAAC,EAAE,EAAE,2PAA2P,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QAC1gB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,MAAM,IAAI,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,YAAY,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,iBAAiB,SAAS,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,yCAAyC,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,YAAY,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;AAAA,QACrgB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,OAAO;AAAA,QACR;AAAA,MACF,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,iBAAiB,SAAS,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,yCAAyC,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,YAAY,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,6GAA6G,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG;AAAA,QACpf;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,CAAC;AAAA,MACV,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC/B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,yDAAyD,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,6DAA6D,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAAA,QACphB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG;AAAA,MACN,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,mBAAmB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,qDAAqD,EAAE,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAAA,MAChR,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,oHAAoH,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG;AAAA,QACzO;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,CAAC,EAAE,EAAE,8BAA8B,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,iBAAiB,SAAS,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,mCAAmC,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,SAAS,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,mCAAmC,GAAG,KAAK,GAAG;AAAA,QAC/iB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG;AAAA,MACN,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAClH,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,gDAAgD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,6CAA6C,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACtf,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAAA,QACjD,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACxC,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,SAAS;AAAA,QAC/C,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,CAAC,CAAC;AAAA,QACvC;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,2FAA2F,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,4DAA4D,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;AAAA,QACzO;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,EAAE;AAAA,MACX,GAAG,CAAC,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,iEAAiE,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,cAAc,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,sBAAsB,SAAS,CAAC,SAAS,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,kBAAkB,sBAAsB,GAAG,KAAK,GAAG,CAAC,EAAE,yBAAyB,YAAY,CAAC,2BAA2B,GAAG,KAAK,GAAG;AAAA,QAC3iB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,kBAAkB;AAAA,QACnB;AAAA,MACF,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,UAAU,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,wBAAwB,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,oEAAoE,EAAE,EAAE,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC1U,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,8CAA8C,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QACjI;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,sCAAsC,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,sBAAsB,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC/c,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,qDAAqD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,GAAG;AAAA,QAC5F;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,oDAAoD,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,sCAAsC,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,+CAA+C,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACnlB,IAAI,CAAC,EAAE;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,GAAG,CAAC;AAAA,MACP,GAAG,CAAC,EAAE,EAAE,6LAA6L,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,2BAA2B,KAAK,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAAA,QAChjB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,IAAI;AAAA,QACL;AAAA,MACF,GAAG,CAAC,EAAE,iBAAiB,SAAS,CAAC,GAAG,GAAG,OAAO,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,GAAG,OAAO,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC1Q,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,QAC1D,CAAC,EAAE,EAAE,+BAA+B,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC7D,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC9C,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAChD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC3C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,CAAC,CAAC;AAAA,QACtL;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAChC,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACxC;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,oDAAoD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,kEAAkE,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QAChP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,6BAA6B,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,eAAe,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACha,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,mDAAmD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG;AAAA,QAChH;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,GAAG,EAAE;AAAA,QACZ,CAAC,GAAG,GAAG,CAAC;AAAA,MACV,GAAG,CAAC,EAAE,EAAE,uFAAuF,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,iBAAiB,SAAS,CAAC,GAAG,GAAG,OAAO,GAAG;AAAA,QACrX;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,sEAAsE,qHAAqH;AAAA,QAC5L;AAAA,MACF,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,yBAAyB,+BAA+B,GAAG,OAAO,GAAG,CAAC,EAAE,yBAAyB,YAAY,CAAC,GAAG,GAAG,OAAO,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,cAAc,GAAG,OAAO,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,sCAAsC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC1gB,IAAI,CAAC,EAAE;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE;AAAA,QACjB,CAAC,GAAG,GAAG,CAAC;AAAA,MACV,GAAG,CAAC,EAAE,EAAE,sQAAsQ,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,uCAAuC,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,wBAAwB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QAC5gB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,8BAA8B,YAAY,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,CAAC,GAAG;AAAA,QACxK;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,mJAAmJ,qKAAqK;AAAA,QACzT;AAAA,MACF,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,4DAA4D,GAAG,OAAO,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,IAAI,GAAG,OAAO,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,mDAAmD,GAAG,OAAO,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QAC5c;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,IAAI,EAAE;AAAA,MACT,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC/B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,yDAAyD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,2JAA2J,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,2EAA2E,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,qBAAqB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QAC3f;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAAA,QACvG,CAAC,EAAE,YAAY,MAAM,CAAC,IAAI,CAAC;AAAA,QAC3B,CAAC,EAAE,oBAAoB,SAAS,CAAC,UAAU,CAAC;AAAA,QAC5C,CAAC,EAAE,4BAA4B,YAAY,CAAC,qFAAqF,oFAAoF,CAAC;AAAA,QACtN,CAAC,EAAE,8BAA8B,YAAY,CAAC,IAAI,CAAC;AAAA,QACnD,CAAC,EAAE,4BAA4B,YAAY,CAAC,gDAAgD,CAAC;AAAA,QAC7F,CAAC,EAAE,oCAAoC,eAAe,CAAC,6BAA6B,CAAC;AAAA,QACrF,CAAC,EAAE,8BAA8B,YAAY,CAAC,GAAG,CAAC;AAAA,MACpD,GAAG,EAAE,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACvK,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,0DAA0D,EAAE,EAAE,EAAE,QAAQ,GAAG,CAAC,EAAE,EAAE,qEAAqE,EAAE,EAAE,EAAE,QAAQ,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QACvR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC9Z,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,6BAA6B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QAC7L;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,8OAA8O,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC3gB,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,kCAAkC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAAA,QACxD;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,mDAAmD,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,yBAAyB,YAAY,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;AAAA,QAC3mB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,CAAC;AAAA,MACD,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,qCAAqC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACzD,CAAC,EAAE,EAAE,4EAA4E,EAAE,EAAE,EAAE,WAAW;AAAA,QAClG,CAAC,EAAE,EAAE,2GAA2G,EAAE,EAAE,EAAE,WAAW;AAAA,QACjI,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,WAAW;AAAA,QACtC,CAAC,EAAE,EAAE,+DAA+D,EAAE,EAAE,EAAE,WAAW;AAAA,QACrF,CAAC,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE,WAAW;AAAA,QAClD,CAAC,EAAE,EAAE,qBAAqB,EAAE,EAAE,EAAE,WAAW;AAAA,QAC3C,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW;AAAA,QAClC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,YAAY,CAAC,CAAC;AAAA,QAClH;AAAA,QACA,CAAC,EAAE,EAAE,oCAAoC,EAAE,EAAE,EAAE,WAAW;AAAA,QAC1D;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,4CAA4C,EAAE,EAAE,EAAE,WAAW;AAAA,QAClE;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,6CAA6C,EAAE,EAAE,EAAE,WAAW;AAAA,MACrE;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,kCAAkC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,yFAAyF,EAAE,EAAE,EAAE,SAAS,GAAG;AAAA,QAC9K;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACtU,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,wEAAwE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG;AAAA,QAC1H;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,CAAC;AAAA,QACR,CAAC,GAAG,CAAC;AAAA,MACP,GAAG,CAAC,EAAE,EAAE,6CAA6C,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,cAAc,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,mCAAmC,GAAG,OAAO,GAAG;AAAA,QACre;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,wDAAwD;AAAA,QACzD;AAAA,MACF,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,sDAAsD,GAAG,OAAO,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,oBAAoB,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,sBAAsB,SAAS,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,mCAAmC,GAAG,OAAO,GAAG;AAAA,QAChe;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,wDAAwD;AAAA,QACzD;AAAA,MACF,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,sDAAsD,GAAG,OAAO,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,oBAAoB,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,kCAAkC,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC3f,IAAI,CAAC,EAAE;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,GAAG,EAAE;AAAA,MACd,GAAG,CAAC,EAAE,EAAE,0CAA0C,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,oCAAoC,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACpjB,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,mCAAmC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QAC/D;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,8GAA8G,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,mCAAmC,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,qDAAqD,EAAE,EAAE,EAAE,WAAW,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,EAAE;AAAA,QACjf;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACxF,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,sCAAsC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,4DAA4D,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,2FAA2F,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,MAAM,KAAK,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAAA,QACzgB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,UAAU,YAAY;AAAA,QACvB;AAAA,MACF,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACzU,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,yGAAyG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG;AAAA,QAClK;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE;AAAA,QACpB,CAAC,GAAG,GAAG,CAAC;AAAA,MACV,GAAG,CAAC,EAAE,EAAE,6BAA6B,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,8BAA8B,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,sBAAsB,SAAS,CAAC,sBAAsB,GAAG,KAAK,GAAG,CAAC,EAAE,uBAAuB,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,WAAW,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC7iB,IAAI,CAAC,EAAE;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,IAAI,EAAE;AAAA,QACP,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,8KAA8K,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,8BAA8B,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;AAAA,QAClgB,CAAC,EAAE,4BAA4B,YAAY,CAAC,QAAQ,CAAC;AAAA,QACrD,CAAC,EAAE,oCAAoC,eAAe,CAAC,sBAAsB,sDAAsD,uEAAuE,GAAG,UAAU,EAAE,CAAC;AAAA,QAC1N;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,uBAAuB,4EAA4E,4LAA4L;AAAA,UAChS;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,UAAU,EAAE,CAAC;AAAA,QAC/D,CAAC,EAAE,oCAAoC,eAAe,CAAC,0BAA0B,GAAG,UAAU,EAAE,CAAC;AAAA,QACjG,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,GAAG,QAAQ;AAAA,MACvE,GAAG,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,sBAAsB,sDAAsD,uEAAuE,GAAG,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,iCAAiC,eAAe;AAAA,QAClR;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,0BAA0B,GAAG,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG;AAAA,QAChQ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,GAAG,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAChG,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,kCAAkC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,GAAG;AAAA,QAC7e;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,OAAO;AAAA,QACR;AAAA,MACF,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACpH,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,2DAA2D,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,iDAAiD,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAAA,QAC/d;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG;AAAA,MACN,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC3R,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,kDAAkD,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,uHAAuH,EAAE,EAAE,EAAE,SAAS,GAAG;AAAA,QACxR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,kCAAkC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACzV,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QACtQ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,MAAM,KAAK,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,yBAAyB,YAAY,CAAC,aAAa,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC1N,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,8BAA8B,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QACrb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC/B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,2EAA2E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC,GAAG;AAAA,QACxH;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,CAAC;AAAA,MACV,GAAG,CAAC,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,kEAAkE,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,8BAA8B,YAAY,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,iBAAiB,GAAG,KAAK,GAAG;AAAA,QAC5f;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,wCAAwC;AAAA,QACzC;AAAA,MACF,GAAG,CAAC,EAAE,mCAAmC,eAAe,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,sHAAsH,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,eAAe,GAAG,KAAK,GAAG,CAAC,EAAE,sCAAsC,eAAe,CAAC,mDAAmD,GAAG,KAAK,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,MAAM,GAAG,KAAK,GAAG;AAAA,QAC3f;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG;AAAA,QACJ;AAAA,MACF,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,+EAA+E,GAAG,KAAK,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,4CAA4C,kBAAkB,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,8BAA8B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,wCAAwC,CAAC,GAAG;AAAA,QAChf;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG;AAAA,MACN,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,sHAAsH,CAAC,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,sCAAsC,eAAe,CAAC,mDAAmD,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,iCAAiC,eAAe,CAAC,GAAG,CAAC,GAAG;AAAA,QACtd;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,+EAA+E;AAAA,MAClF,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,4CAA4C,kBAAkB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,8BAA8B,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACzV,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,gDAAgD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG;AAAA,QACpF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,yCAAyC,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,aAAa,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,cAAc,MAAM,CAAC,eAAe,mCAAmC,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,yBAAyB,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,GAAG;AAAA,QAC/gB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG;AAAA,MACN,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,yBAAyB,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACvZ,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,wBAAwB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,iCAAiC,EAAE,EAAE,EAAE,OAAO,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QACnL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC3P,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,oCAAoC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,kCAAkC,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,wEAAwE,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,8BAA8B,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QAC/X;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,CAAC,EAAE,EAAE,yFAAyF,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,wBAAwB,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,sBAAsB,SAAS,CAAC,SAAS,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,sBAAsB,GAAG,KAAK,GAAG,CAAC,EAAE,iCAAiC,eAAe,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACziB,IAAI,CAAC,EAAE;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,CAAC;AAAA,MACP,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,6DAA6D,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,qDAAqD,EAAE,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE;AAAA,QAC3jB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,CAAC;AAAA,MACD,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,0CAA0C,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,QACpE,CAAC,EAAE,EAAE,yHAAyH,EAAE,EAAE,EAAE,WAAW;AAAA,QAC/I,CAAC,EAAE,EAAE,8DAA8D,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC7F,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC5C,CAAC,EAAE,EAAE,yBAAyB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACxD,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC/C,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,+BAA+B,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC9D;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,2BAA2B,YAAY,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,eAAe,iBAAiB,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,iCAAiC,eAAe,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,OAAO,GAAG,KAAK,CAAC;AAAA,QACpZ,CAAC,CAAC,EAAE,2BAA2B,YAAY,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY;AAAA,UACtG;AAAA,UACA;AAAA,QACF,GAAG,KAAK,GAAG,CAAC,EAAE,iCAAiC,eAAe,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,OAAO,GAAG,KAAK,CAAC;AAAA,QAClN,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC3C;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,6DAA6D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAAA,QACpF,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC3C;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,sBAAsB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QACrH;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACnV,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QACxT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,iBAAiB,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC/Z,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,yBAAyB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,wDAAwD,EAAE,EAAE,EAAE,WAAW,GAAG;AAAA,QACtI;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,mDAAmD,EAAE,EAAE,EAAE,WAAW,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACvf,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,wDAAwD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG;AAAA,QAC7F;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,CAAC;AAAA,MACP,GAAG,CAAC,EAAE,EAAE,oHAAoH,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,YAAY,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,iBAAiB,SAAS,CAAC,+BAA+B,CAAC,GAAG;AAAA,QACnd;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,aAAa;AAAA,MAChB,GAAG,CAAC,EAAE,iBAAiB,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC1N,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAAA,QACnD,CAAC,EAAE,EAAE,yCAAyC,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACrE,CAAC,EAAE,EAAE,iCAAiC,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC9D,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACzC,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACzC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,sBAAsB,EAAE,EAAE,EAAE,QAAQ;AAAA,QACzC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,CAAC,CAAC;AAAA,QAC3I;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAClC,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,WAAW;AAAA,QACrC,CAAC,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,WAAW;AAAA,QAChD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,GAAG,KAAK,CAAC;AAAA,QAC5D;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,qBAAqB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,4CAA4C,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACvd,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,+CAA+C,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG;AAAA,QAClF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,wBAAwB,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC1hB,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,uCAAuC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAAA,QACjE;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,CAAC;AAAA,QACJ;AAAA,QACA,CAAC,EAAE,EAAE,gDAAgD,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAClF,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,YAAY;AAAA,QAC/D,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,YAAY;AAAA,QACzC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,8OAA8O,EAAE,EAAE,EAAE,YAAY;AAAA,QACrQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,6BAA6B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,mFAAmF,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,8BAA8B,YAAY,CAAC,cAAc,GAAG,OAAO,EAAE,CAAC,GAAG;AAAA,QAC9e;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,MAAM;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACpH,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,qCAAqC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;AAAA,QAC9f;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACzD,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACxX,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAAA,QAC1D,CAAC,EAAE,EAAE,qCAAqC,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACvE,CAAC,EAAE,EAAE,uDAAuD,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACzF,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,YAAY;AAAA,QAC/D,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,YAAY;AAAA,QACzC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,8OAA8O,EAAE,EAAE,EAAE,YAAY;AAAA,QACrQ,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC7D;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,EAAE;AAAA,QACL;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,6BAA6B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,oCAAoC,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,qCAAqC,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAClhB,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QAC3C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAChZ,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,8CAA8C,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,sDAAsD,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QAC5K;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,WAAW,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,yBAAyB,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACpiB,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG;AAAA,QACvD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC,GAAG,CAAC,EAAE,EAAE,qEAAqE,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,2HAA2H,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,yBAAyB,YAAY,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,kBAAkB,CAAC,GAAG;AAAA,QAC7iB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,mBAAmB;AAAA,MACtB,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACzK,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,8BAA8B,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACpa,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,qCAAqC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG;AAAA,QACpE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACtd,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QAC3C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,wBAAwB,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,IAAI,GAAG,QAAQ,GAAG,CAAC,EAAE,iCAAiC,eAAe,CAAC,OAAO,GAAG,QAAQ,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACxhB,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QAC9C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,iFAAiF,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC9d,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,qDAAqD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG;AAAA,QACpF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,mFAAmF,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,iCAAiC,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACjlB,IAAI,CAAC,EAAE;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,MAChB,GAAG,CAAC,EAAE,EAAE,qIAAqI,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,6FAA6F,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,uCAAuC,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,wBAAwB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QACnhB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,MAAM,IAAI,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,yBAAyB,YAAY,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,iBAAiB,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,kBAAkB,GAAG,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,iBAAiB,GAAG,OAAO,EAAE,CAAC,GAAG;AAAA,QACle;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,kBAAkB,GAAG,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACrV,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,mGAAmG,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QACtM;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,qDAAqD,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,8OAA8O,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,OAAO,KAAK,EAAE,EAAE,uBAAuB,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO;AAAA,QAC5hB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAAA,MACpF,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,yBAAyB,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACpjB,IAAI,CAAC,EAAE;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,GAAG,IAAI,EAAE;AAAA,MAClB,GAAG;AAAA,QACD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,CAAC;AAAA,MACP,GAAG,CAAC,EAAE,EAAE,qCAAqC,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,+BAA+B,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,oDAAoD,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,KAAK,oBAAoB,KAAK,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,yBAAyB,YAAY,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,KAAK,GAAG,KAAK,GAAG;AAAA,QAClhB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,IAAI;AAAA,QACL;AAAA,MACF,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,mBAAmB,GAAG,KAAK,GAAG,CAAC,EAAE,2BAA2B,YAAY,CAAC,wCAAwC,6CAA6C,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC3hB,IAAI,CAAC,EAAE;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,uBAAuB,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,GAAG,MAAM,KAAK,WAAW,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;AAAA,QACvkB;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACzD,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,QAC7D,CAAC,EAAE,EAAE,4CAA4C,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,QACtF,CAAC,EAAE,EAAE,qDAAqD,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACpF,CAAC,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,WAAW;AAAA,QAC1C,CAAC,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,WAAW;AAAA,QAC1C,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAClD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,+DAA+D,iFAAiF;AAAA,UACjJ;AAAA,QACF,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,yFAAyF,mGAAmG,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,iBAAiB,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,MAAM,GAAG,KAAK,CAAC;AAAA,QAChX;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,sCAAsC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,QACrE,CAAC,EAAE,EAAE,0HAA0H,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,QACjK,CAAC,EAAE,EAAE,qEAAqE,EAAE,EAAE,EAAE,WAAW;AAAA,QAC3F,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,WAAW;AAAA,QACxC,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,WAAW;AAAA,QACvC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,QAAQ,OAAO,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,qCAAqC,8CAA8C,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;AAAA,QACnP;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,uBAAuB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG;AAAA,QACzD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG;AAAA,QACD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,8OAA8O,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC,GAAG;AAAA,QAClgB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,2BAA2B;AAAA,MAC9B,GAAG,CAAC,EAAE,4BAA4B,cAAc,CAAC,OAAO,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC7R,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,4DAA4D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,0DAA0D,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QACxQ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE;AAAA,MAC7B,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,oBAAoB,KAAK,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,cAAc,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,SAAS,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,sCAAsC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE;AAAA,QAC7hB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC5G,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,qSAAqS,EAAE,EAAE,EAAE,WAAW,GAAG;AAAA,QACtX;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oCAAoC,eAAe,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC1V,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,gFAAgF,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,6BAA6B,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG;AAAA,QAC1Q;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,CAAC;AAAA,MACP,GAAG,CAAC,EAAE,EAAE,kHAAkH,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,+BAA+B,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,uBAAuB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAAA,MAC5gB,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAAA,QAC1D,CAAC,EAAE,EAAE,+FAA+F,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACjI,CAAC,EAAE,EAAE,mEAAmE,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACrG,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,YAAY;AAAA,QAC/D,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,YAAY;AAAA,QACzC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QACtD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI;AAAA,QACF;AAAA,QACA,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAAA,QAClE,CAAC,EAAE,EAAE,gEAAgE,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAClG,CAAC,EAAE,EAAE,6BAA6B,EAAE,EAAE,EAAE,YAAY;AAAA,QACpD,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY;AAAA,QACpC,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,YAAY;AAAA,QACvC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,UAAU,GAAG,OAAO,QAAQ,CAAC;AAAA,QAC/D;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC/C;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,qDAAqD,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,0FAA0F,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,YAAY,GAAG;AAAA,QAC7V;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,8OAA8O,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,OAAO,KAAK,EAAE,EAAE,sBAAsB,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAClf,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,+BAA+B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG;AAAA,QACjE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,CAAC,EAAE,EAAE,2JAA2J,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QACzU;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,OAAO,KAAK,EAAE,EAAE,oBAAoB,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC/M,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,iDAAiD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,2FAA2F,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,yHAAyH,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG;AAAA,QACjX;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,EAAE;AAAA,MACX,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,QAAQ,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,iBAAiB,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,SAAS,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,SAAS,GAAG,OAAO,EAAE,CAAC,GAAG;AAAA,QACvgB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,OAAO;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,sBAAsB,SAAS,CAAC,iBAAiB,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,SAAS,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,SAAS,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACxkB,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,sCAAsC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,yDAAyD,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACpmB,IAAI,CAAC,EAAE;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,CAAC;AAAA,MACP,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,sBAAsB,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAAA,MAC7iB,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,iDAAiD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAAA,QACvE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC,GAAG,CAAC,EAAE,EAAE,mCAAmC,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,0CAA0C,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACvjB,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,iDAAiD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAAA,QACvE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC,GAAG,CAAC,EAAE,EAAE,qDAAqD,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,uBAAuB,SAAS,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;AAAA,QAChlB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACzD,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,gCAAgC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,sFAAsF,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,2BAA2B,YAAY,CAAC,0BAA0B,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE;AAAA,QAC9iB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACvF,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,8CAA8C,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,wDAAwD,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,gFAAgF,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,oCAAoC,EAAE,EAAE,EAAE,WAAW,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QACrhB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC/B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,oFAAoF,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,iSAAiS,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE;AAAA,QACzf;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,+BAA+B,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,oGAAoG,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,sBAAsB,SAAS,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,KAAK,GAAG,KAAK,GAAG;AAAA,QACxhB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,OAAO;AAAA,QACR;AAAA,MACF,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACzM,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,sCAAsC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,8BAA8B,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,CAAC,GAAG;AAAA,QAC9Z;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,MAAM;AAAA,QACP;AAAA,MACF,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACvR,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,yHAAyH,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG;AAAA,QAC7K;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,CAAC;AAAA,MACP,GAAG,CAAC,EAAE,EAAE,qCAAqC,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,iCAAiC,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,2CAA2C,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,sBAAsB,SAAS,CAAC,wFAAwF,GAAG,KAAK,GAAG,CAAC,EAAE,2BAA2B,YAAY,CAAC,MAAM,GAAG,KAAK,GAAG;AAAA,QAC9gB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,IAAI;AAAA,QACL;AAAA,MACF,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,8CAA8C,4EAA4E,GAAG,OAAO,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,gDAAgD,+CAA+C,GAAG,KAAK,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,GAAG,GAAG,KAAK,GAAG;AAAA,QAC1a;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,2IAA2I;AAAA,QAC5I;AAAA,MACF,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,iBAAiB,GAAG,KAAK,GAAG,CAAC,EAAE,sBAAsB,SAAS,CAAC,cAAc,UAAU,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACpQ,KAAK;AAAA,QACH;AAAA,QACA,CAAC,EAAE,EAAE,yBAAyB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAAA,QAC7C,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,yBAAyB,EAAE,EAAE,EAAE,UAAU;AAAA,QAC9C,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,KAAK,CAAC,CAAC;AAAA,QACzC;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAAA,MACzB;AAAA,MACA,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC5a,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,wCAAwC,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QAC9P;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,CAAC;AAAA,MACJ,GAAG,OAAO,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC1M,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,GAAG,OAAO,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,4BAA4B,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACpb,KAAK,CAAC,EAAE;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,EAAE;AAAA,MACR,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,yBAAyB,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,2BAA2B,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MACzc,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,wEAAwE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QACjJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,GAAG,GAAG,GAAG,IAAI,EAAE;AAAA,MAClB,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,iLAAiL,EAAE,EAAE,EAAE,cAAc,GAAG,OAAO,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,oBAAoB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,OAAO,CAAC,GAAG;AAAA,QACzhB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,IAAI;AAAA,MACP,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,+BAA+B,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,8BAA8B,YAAY,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC7U,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QACpO;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,OAAO,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,8BAA8B,YAAY,CAAC,mCAAmC,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,4BAA4B,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,oCAAoC,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC1c,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG;AAAA,QACjJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,EAAE;AAAA,MACL,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,4BAA4B,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,MAC9P,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,yBAAyB,YAAY,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,IAC1c;AACA,aAAS,IAAI;AACX,WAAK,IAAI,CAAC;AAAA,IACZ;AACA,MAAE,IAAI;AACN,MAAE,IAAI,WAAW;AACf,aAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE;AAAA,IACjC;AACA,QAAI,KAAK,EAAE,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,IAAI,GAAG,KAAK;AAAA,MACliB,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACP,GAAG,KAAK;AAAA,MACN,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IACL,GAAG,KAAK,OAAO,YAAY,GAAG,IAAI,OAAO,aAAa,GAAG,KAAK,OAAO,gDAAgD,GAAG,KAAK,OAAO,qDAAqD,GAAG,KAAK,aAAa,KAAK,OAAO,wDAAwD,GAAG,KAAK,wBAAwB,KAAK,OAAO,iLAAiL,GAAG,KAAK,OAAO,gMAAgM;AAC9rB,aAASsB,GAAEtB,IAAG;AACZ,aAAO,qDAAqDA,KAAI;AAAA,IAClE;AACA,aAAS,KAAK;AACZ,aAAO,UAAUsB,GAAE,IAAI,IAAI,qIAAqIA,GAAE,IAAI,IAAI,kGAAkGA,GAAE,GAAG,IAAI,eAAeA,GAAE,GAAG,IAAI,wDAAwDA,GAAE,IAAI,IAAI,qDAAqDA,GAAE,GAAG,IAAI;AAAA,IAC/a;AACA,QAAI,KAAK,IAAI,OAAO,QAAQ,GAAG,IAAI,MAAM,GAAG,GAAG,KAAK,IAAI,OAAO,iaAAia,GAAG,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,KAAK;AACxgB,aAAS,GAAGtB,IAAG;AACb,aAAOA,GAAE,SAAS,IAAI,QAAQuB,GAAE,IAAIvB,EAAC;AAAA,IACvC;AACA,aAAS,GAAGA,IAAG;AACb,aAAOuB,GAAE,IAAIvB,EAAC,IAAI,EAAEA,IAAG,EAAE,IAAI,EAAEA,IAAG,EAAE;AAAA,IACtC;AACA,aAAS,GAAGA,IAAG;AACb,UAAIC,KAAI,GAAGD,GAAE,SAAS,CAAC;AACvB,QAAEA,EAAC;AACH,MAAAA,GAAE,EAAEC,EAAC;AAAA,IACP;AACA,aAAS,GAAGD,IAAG;AACb,aAAOA,MAAK,SAAS,EAAEA,IAAG,CAAC,KAAK,KAAK,EAAEA,EAAC,EAAE,CAAC,KAAK;AAAA,IAClD;AACA,aAAS,EAAEA,IAAGC,IAAG;AACf,eAASP,KAAI,IAAI,EAAE,GAAGQ,IAAGG,KAAIL,GAAE,QAAQY,KAAI,GAAGA,KAAIP,IAAG,EAAEO,GAAG,CAAAV,KAAIF,GAAE,OAAOY,EAAC,GAAGV,KAAID,GAAEC,GAAE,YAAY,CAAC,GAAGA,MAAK,QAAQR,GAAE,EAAEQ,EAAC;AACrH,aAAOR,GAAE,SAAS;AAAA,IACpB;AACA,aAAS,GAAGM,IAAG;AACb,aAAOA,GAAE,UAAU,KAAK,GAAG,KAAKA,EAAC;AAAA,IACnC;AACA,aAAS,EAAEA,IAAG;AACZ,aAAOA,MAAK,QAAQ,MAAMA,EAAC,KAAKA,GAAE,YAAY,KAAK;AAAA,IACrD;AACA,MAAE,UAAU,SAAS,SAASA,IAAGC,IAAG;AAClC,UAAIgB,GAAEjB,IAAG,CAAC,KAAK,KAAK,EAAEA,IAAG,CAAC,GAAG;AAC3B,YAAIN,KAAI,EAAEM,IAAG,CAAC;AACd,YAAIN,GAAE,SAAS,KAAK,EAAEM,IAAG,CAAC,KAAKiB,GAAEjB,IAAG,CAAC,KAAK,MAAMC,MAAK,EAAG,QAAOD,KAAI,EAAEA,IAAG,CAAC,GAAG,GAAGA,IAAGC,IAAGP,IAAG,EAAE;AAC1F,YAAIA,GAAE,SAAS,KAAK,CAAC,EAAEM,IAAG,CAAC,EAAG,QAAON;AAAA,MACvC;AACA,MAAAA,KAAI,EAAEM,IAAG,CAAC;AACV,UAAIE,KAAI,EAAEF,EAAC;AACX,UAAIC,MAAK,EAAG,QAAO,GAAGP,IAAG,GAAGQ,IAAG,EAAE;AACjC,UAAI,EAAER,MAAK,GAAI,QAAOQ;AACtB,UAAIG,KAAI,EAAE,MAAMX,IAAG,EAAEA,EAAC,CAAC;AACvB,MAAAM,KAAI,EAAEA,IAAG,CAAC,KAAKiB,GAAEjB,IAAG,CAAC,EAAE,UAAU,IAAIC,MAAK,IAAI,UAAUgB,GAAEjB,IAAG,CAAC,IAAI,EAAEK,IAAG,EAAE,IAAIY,GAAEZ,IAAG,EAAE,IAAI,EAAEL,IAAG,CAAC,IAAI,WAAW,EAAEA,IAAG,CAAC,IAAI;AACvH,SAAG;AACD,QAAAK,MAAKa,GAAEb,IAAG,EAAE,KAAK,CAAC,GAAG,UAAU,KAAKJ,MAAK,IAAIiB,GAAEb,IAAG,EAAE,KAAK,CAAC,IAAIa,GAAEb,IAAG,EAAE,KAAK,CAAC;AAC3E,iBAASO,IAAGC,KAAIR,GAAE,QAAQS,KAAI,GAAGA,KAAID,IAAG,EAAEC,IAAG;AAC3C,UAAAF,KAAIP,GAAES,EAAC;AACP,cAAIK,KAAI,EAAEP,IAAG,CAAC;AACd,cAAIO,MAAK,KAAKjB,GAAE,OAAOe,GAAEL,IAAG,GAAGO,KAAI,CAAC,CAAC,KAAK,GAAG;AAC3C,gBAAIA,KAAI,IAAI,OAAOF;AAAA,cACjBL;AAAA,cACA;AAAA,YACF,CAAC,GAAGW,GAAEJ,IAAGjB,EAAC,GAAG;AACX,cAAAG,KAAIO;AACJ,oBAAM;AAAA,YACR;AAAA,UACF;AAAA,QACF;AACA,QAAAP,KAAI;AAAA,MACN;AACA,MAAAA,MAAK,SAASQ,KAAIR,IAAGA,KAAI,EAAEQ,IAAG,CAAC,GAAGD,KAAI,IAAI,OAAOK,GAAEJ,IAAG,CAAC,CAAC,GAAG,EAAEA,IAAG,CAAC,GAAGA,KAAI,EAAEA,IAAG,CAAC,GAAGX,KAAID,MAAK,KAAKY,MAAK,QAAQA,GAAE,SAAS,IAAIX,GAAE,QAAQU,IAAGP,GAAE,QAAQ,IAAIQ,EAAC,CAAC,IAAIX,GAAE,QAAQU,IAAGP,EAAC,GAAGJ,MAAK,MAAMC,KAAIA,GAAE,QAAQ,OAAO,8HAA8H,GAAG,EAAE,GAAGA,KAAIA,GAAE,QAAQ,OAAO,+HAA+H,GAAG,GAAG,GAAG;AAChf,aAAO;AAAA,QACLR;AAAA,QACAO;AAAA,QACAC;AAAA,QACAF;AAAA,MACF;AAAA,IACF;AACA,aAAS,EAAEA,IAAGC,IAAGP,IAAG;AAClB,aAAO,SAASA,KAAI8B,GAAExB,IAAG,KAAKC,EAAC,IAAIuB,GAAExB,IAAGN,EAAC;AAAA,IAC3C;AACA,aAAS,EAAEM,IAAG;AACZ,UAAI,CAAC,EAAEA,IAAG,CAAC,EAAG,QAAO;AACrB,UAAIC,KAAI,KAAKgB,GAAEjB,IAAG,CAAC;AACnB,aAAO,EAAEA,IAAG,CAAC,KAAKiB,GAAEjB,IAAG,CAAC,KAAK,EAAEA,IAAG,CAAC,IAAI,IAAI,MAAM,EAAEA,IAAG,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,IAAIC,KAAIA;AAAA,IAChF;AACA,aAAS,GAAGD,IAAGC,IAAGP,IAAGQ,IAAG;AACtB,cAAQD,IAAG;AAAA,QACT,KAAK;AACH,iBAAO,MAAMD,KAAIN,KAAIQ;AAAA,QACvB,KAAK;AACH,iBAAO,MAAMF,KAAI,MAAMN,KAAIQ;AAAA,QAC7B,KAAK;AACH,iBAAO,UAAUF,KAAI,MAAMN,KAAIQ;AAAA,QACjC;AACE,iBAAOR,KAAIQ;AAAA,MACf;AAAA,IACF;AACA,aAASuB,GAAEzB,IAAGC,IAAG;AACf,cAAQA,IAAG;AAAA,QACT,KAAK;AACH,iBAAOgB,GAAEjB,IAAG,CAAC;AAAA,QACf,KAAK;AACH,iBAAOiB,GAAEjB,IAAG,CAAC;AAAA,QACf,KAAK;AACH,iBAAOiB,GAAEjB,IAAG,CAAC;AAAA,QACf,KAAK;AAAA,QACL,KAAK;AACH,iBAAOiB,GAAEjB,IAAG,CAAC;AAAA,QACf,KAAK;AACH,iBAAOiB,GAAEjB,IAAG,CAAC;AAAA,QACf,KAAK;AACH,iBAAOiB,GAAEjB,IAAG,CAAC;AAAA,QACf,KAAK;AACH,iBAAOiB,GAAEjB,IAAG,CAAC;AAAA,QACf,KAAK;AACH,iBAAOiB,GAAEjB,IAAG,EAAE;AAAA,QAChB,KAAK;AACH,iBAAOiB,GAAEjB,IAAG,EAAE;AAAA,QAChB,KAAK;AACH,iBAAOiB,GAAEjB,IAAG,EAAE;AAAA,QAChB;AACE,iBAAOiB,GAAEjB,IAAG,CAAC;AAAA,MACjB;AAAA,IACF;AACA,aAAS,GAAGA,IAAGC,IAAG;AAChB,UAAIP,KAAIgC,IAAG1B,IAAGC,EAAC;AACf,MAAAD,KAAI,EAAEA,IAAG,EAAEC,IAAG,CAAC,GAAGP,EAAC;AACnB,UAAIM,MAAK,KAAM,QAAO;AACtB,MAAAC,KAAI,EAAEA,EAAC;AACP,aAAO,GAAGA,IAAGD,EAAC;AAAA,IAChB;AACA,aAAS,GAAGA,IAAGC,IAAG;AAChB,aAAO,EAAED,IAAGiB,GAAEhB,IAAG,CAAC,CAAC,IAAI,EAAED,IAAGiB,GAAEhB,IAAG,CAAC,CAAC,IAAI,IAAI,EAAED,IAAGiB,GAAEhB,IAAG,CAAC,CAAC,IAAI,IAAI,EAAED,IAAGiB,GAAEhB,IAAG,CAAC,CAAC,IAAI,IAAI,EAAED,IAAGiB,GAAEhB,IAAG,CAAC,CAAC,IAAI,IAAI,EAAED,IAAGiB,GAAEhB,IAAG,CAAC,CAAC,IAAI,IAAI,EAAED,IAAGiB,GAAEhB,IAAG,EAAE,CAAC,IAAI,IAAI,EAAED,IAAGiB,GAAEhB,IAAG,EAAE,CAAC,IAAI,IAAI,EAAED,IAAGiB,GAAEhB,IAAG,EAAE,CAAC,IAAI,KAAK,EAAED,IAAGiB,GAAEhB,IAAG,CAAC,CAAC,IAAIgB,GAAEhB,IAAG,EAAE,KAAK,EAAED,IAAGiB,GAAEhB,IAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAACgB,GAAEhB,IAAG,EAAE,KAAK,EAAED,IAAGiB,GAAEhB,IAAG,CAAC,CAAC,IAAI,IAAI,KAAK;AAAA,IACvR;AACA,aAASuB,GAAExB,IAAGC,IAAG;AACf,UAAIA,MAAK,KAAM,QAAO;AACtB,MAAAA,KAAIA,GAAE,YAAY;AAClB,UAAIP,KAAIM,GAAE,EAAEC,EAAC;AACb,UAAIP,MAAK,MAAM;AACb,QAAAA,KAAI,GAAGO,EAAC;AACR,YAAIP,MAAK,KAAM,QAAO;AACtB,QAAAA,KAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAGA,EAAC;AACtB,QAAAM,GAAE,EAAEC,EAAC,IAAIP;AAAA,MACX;AACA,aAAOA;AAAA,IACT;AACA,aAAS,EAAEM,IAAGC,IAAG;AACf,UAAIP,KAAIM,GAAE;AACV,aAAO,EAAEC,IAAG,CAAC,IAAI,KAAK,EAAEA,EAAC,EAAE,QAAQP,EAAC,KAAK,KAAK,QAAQ6B,GAAE,EAAEtB,IAAG,CAAC,GAAGD,EAAC;AAAA,IACpE;AACA,aAAS,GAAGA,IAAGC,IAAG;AAChB,UAAIP,KAAIgC,IAAG1B,IAAGC,EAAC;AACf,UAAIC,KAAI,EAAED,IAAG,CAAC;AACd,UAAII,KAAI,EAAEL,IAAGE,IAAGR,EAAC;AACjB,MAAAW,MAAK,QAAQ,SAASX,MAAKQ,MAAK,GAAGF,IAAGN,EAAC,IAAIW,KAAI,SAASL,KAAI,EAAEC,EAAC,GAAGI,KAAI,GAAGL,IAAGK,EAAC,KAAK;AAClF,aAAOA;AAAA,IACT;AACA,aAASqB,IAAG1B,IAAGC,IAAG;AAChB,UAAIA,MAAK,KAAM,QAAO;AACtB,UAAIP,KAAI,EAAEO,IAAG,CAAC;AACd,MAAAP,KAAI,EAAEA,EAAC;AACP,UAAIA,MAAK,KAAM,CAAAM,KAAI;AAAA,eACVN,GAAE,UAAU,EAAG,CAAAM,KAAIN,GAAE,CAAC;AAAA,UAC1B,IAAG;AACN,QAAAO,KAAI,EAAEA,EAAC;AACP,iBAASC,IAAGG,KAAIX,GAAE,QAAQkB,KAAI,GAAGA,KAAIP,IAAGO,MAAK;AAC3C,UAAAV,KAAIR,GAAEkB,EAAC;AACP,cAAIC,KAAIW,GAAExB,IAAGE,EAAC;AACd,cAAI,EAAEW,IAAG,EAAE,GAAG;AACZ,gBAAIZ,GAAE,OAAOgB,GAAEJ,IAAG,EAAE,CAAC,KAAK,GAAG;AAC3B,cAAAb,KAAIE;AACJ,oBAAM;AAAA,YACR;AAAA,UACF,WAAW,GAAGD,IAAGY,EAAC,KAAK,IAAI;AACzB,YAAAb,KAAIE;AACJ,kBAAM;AAAA,UACR;AAAA,QACF;AACA,QAAAF,KAAI;AAAA,MACN;AACA,aAAOA;AAAA,IACT;AACA,aAAS,EAAEA,IAAG;AACZ,MAAAA,KAAI,EAAEA,EAAC;AACP,aAAOA,MAAK,OAAO,OAAOA,GAAE,CAAC;AAAA,IAC/B;AACA,aAAS,GAAGA,IAAGC,IAAG;AAChB,MAAAD,KAAIwB,GAAExB,IAAGC,EAAC;AACV,UAAID,MAAK,KAAM,OAAM,MAAM,0BAA0BC,EAAC;AACtD,aAAO,EAAED,IAAG,EAAE;AAAA,IAChB;AACA,aAAS,EAAEA,IAAGC,IAAGP,IAAGQ,IAAG;AACrB,UAAIG,KAAIoB,GAAE/B,IAAGQ,EAAC,GAAGU,KAAI,EAAEP,IAAG,CAAC,KAAK,IAAI,EAAEY,GAAEvB,IAAG,CAAC,CAAC,IAAI,EAAEW,EAAC;AACpD,MAAAA,KAAIa,GAAEb,IAAG,EAAE,KAAK,CAAC;AACjB,UAAIH,MAAK,EAAG,KAAI,GAAGuB,GAAE/B,IAAG,CAAC,CAAC,EAAG,CAAAM,KAAIyB,GAAE/B,IAAG,CAAC,GAAG,GAAGM,EAAC,MAAMY,KAAIA,GAAE,OAAO,EAAEZ,IAAG,CAAC,KAAK,IAAI,EAAEiB,GAAEvB,IAAG,CAAC,CAAC,IAAI,EAAEM,EAAC,CAAC,GAAGY,GAAE,KAAK,GAAGP,GAAE,UAAU,IAAIA,KAAIa,GAAElB,IAAG,EAAE,KAAK,CAAC,KAAKK,KAAIA,GAAE,OAAOa,GAAElB,IAAG,EAAE,KAAK,CAAC,CAAC,GAAGK,GAAE,KAAK;AAAA,UACpL,QAAO,EAAEL,IAAGC,IAAGP,IAAG,CAAC;AACxB,UAAIkB,GAAE,CAAC,KAAK,GAAI,QAAO;AACvB,MAAAX,KAAIA,GAAE;AACN,UAAII,GAAE,QAAQJ,EAAC,IAAI,GAAI,QAAO;AAC9B,MAAAP,KAAIkB,GAAE,CAAC;AACP,aAAOlB,MAAKO,KAAI,IAAIP,KAAIO,KAAI,IAAIW,GAAEA,GAAE,SAAS,CAAC,IAAIX,KAAI,IAAIW,GAAE,QAAQX,IAAG,CAAC,IAAI,KAAK,IAAI;AAAA,IACvF;AACA,aAAS,EAAED,IAAGC,IAAGP,IAAG;AAClB,UAAIQ,KAAI,EAAED,EAAC;AACX,MAAAA,KAAI,EAAEA,IAAG,CAAC;AACV,UAAI,EAAEA,MAAK,GAAI,QAAO;AACtB,MAAAA,KAAI,EAAED,IAAGC,IAAG,EAAEA,EAAC,CAAC;AAChB,aAAO,EAAED,IAAGE,IAAGD,IAAGP,EAAC;AAAA,IACrB;AACA,aAAS,GAAGM,IAAGC,IAAG;AAChB,MAAAD,KAAIA,GAAE,SAAS;AACf,UAAIA,GAAE,UAAU,KAAKA,GAAE,OAAO,CAAC,KAAK,IAAK,QAAO;AAChD,eAASN,IAAGQ,KAAIF,GAAE,QAAQK,KAAI,GAAGA,MAAK,KAAKA,MAAKH,IAAG,EAAEG,GAAG,KAAIX,KAAI,SAASM,GAAE,UAAU,GAAGK,EAAC,GAAG,EAAE,GAAGX,MAAK,EAAG,QAAOO,GAAE,EAAED,GAAE,UAAUK,EAAC,CAAC,GAAGX;AACrI,aAAO;AAAA,IACT;AACA,aAAS,GAAGM,IAAGC,IAAGP,IAAGQ,IAAGG,IAAGO,IAAG;AAC5B,UAAIX,GAAE,UAAU,EAAG,QAAO;AAC1B,MAAAA,KAAI,IAAI,EAAEA,EAAC;AACX,UAAIY;AACJ,MAAAnB,MAAK,SAASmB,KAAII,GAAEvB,IAAG,EAAE;AACzB,MAAAmB,MAAK,SAASA,KAAI;AAClB,UAAIC,KAAIb,GAAE,SAAS;AACnB,UAAIa,GAAE,UAAU,EAAG,CAAAD,KAAI;AAAA,eACd,EAAE,KAAKC,EAAC,EAAG,CAAAA,KAAIA,GAAE,QAAQ,GAAG,EAAE,GAAG,EAAEb,EAAC,GAAGA,GAAE,EAAE,GAAGa,EAAC,CAAC,GAAGD,KAAI;AAAA,WAC3D;AACH,QAAAC,KAAI,IAAI,OAAOD,EAAC;AAChB,WAAGZ,EAAC;AACJ,QAAAY,KAAIZ,GAAE,SAAS;AACf,YAAIY,GAAE,OAAOC,EAAC,KAAK,GAAG;AACpB,UAAAA,KAAID,GAAE,MAAMC,EAAC,EAAE,CAAC,EAAE;AAClB,cAAIK,KAAIN,GAAE,UAAUC,EAAC,EAAE,MAAM,EAAE;AAC/B,UAAAK,MAAKA,GAAE,CAAC,KAAK,QAAQA,GAAE,CAAC,EAAE,SAAS,KAAK,EAAEA,GAAE,CAAC,GAAG,EAAE,KAAK,MAAMN,KAAI,SAAS,EAAEZ,EAAC,GAAGA,GAAE,EAAEY,GAAE,UAAUC,EAAC,CAAC,GAAGD,KAAI;AAAA,QAC3G,MAAO,CAAAA,KAAI;AACX,QAAAA,KAAIA,KAAI,IAAI;AAAA,MACd;AACA,MAAAR,MAAKN,GAAEa,IAAG,GAAGC,EAAC;AACd,UAAIA,MAAK,IAAI;AACX,YAAIZ,GAAE,EAAE,UAAU,EAAG,OAAM,MAAM,kCAAkC;AACnE,QAAAD,KAAI,GAAGC,IAAGC,EAAC;AACX,YAAIF,MAAK,EAAG,QAAOD,GAAEa,IAAG,GAAGZ,EAAC,GAAGA;AAC/B,cAAM,MAAM,8BAA8B;AAAA,MAC5C;AACA,UAAIN,MAAK,SAASmB,KAAI,EAAEnB,IAAG,EAAE,GAAGoB,KAAI,KAAKD,IAAGM,KAAIlB,GAAE,SAAS,GAAGkB,GAAE,YAAYL,IAAG,CAAC,KAAK,MAAMA,KAAI,IAAI,EAAEK,GAAE,UAAUL,GAAE,MAAM,CAAC,GAAGK,KAAIF,GAAEvB,IAAG,CAAC,GAAGyB,KAAI,IAAI,OAAO,EAAEA,IAAG,CAAC,CAAC,GAAG,GAAGL,IAAGpB,IAAG,IAAI,GAAGoB,KAAIA,GAAE,SAAS,GAAG,CAACS,GAAEJ,IAAGlB,GAAE,SAAS,CAAC,KAAKsB,GAAEJ,IAAGL,EAAC,KAAK,EAAEd,IAAGC,GAAE,SAAS,GAAGP,IAAG,EAAE,KAAK,IAAK,QAAOQ,GAAE,EAAEY,EAAC,GAAGT,MAAKN,GAAEa,IAAG,GAAG,EAAE,GAAGb,GAAEa,IAAG,GAAGC,EAAC,GAAGA;AACtT,MAAAd,GAAEa,IAAG,GAAG,CAAC;AACT,aAAO;AAAA,IACT;AACA,aAAS,GAAGZ,IAAGC,IAAGP,IAAG;AACnB,UAAIQ,KAAIF,GAAE,SAAS,GAAGK,KAAIH,GAAE,QAAQU,KAAIK,GAAEhB,IAAG,EAAE;AAC/C,UAAII,MAAK,KAAKO,MAAK,QAAQA,GAAE,UAAU,MAAMA,KAAI,IAAI,OAAO,SAASA,KAAI,GAAG,GAAGP,KAAIO,GAAE,KAAKV,EAAC,IAAI;AAC7F,YAAIW,KAAI;AACR,YAAIC,KAAIG,GAAEhB,IAAG,CAAC;AACd,QAAAa,KAAI,EAAEA,IAAG,CAAC;AACV,QAAAD,KAAI,IAAIA,GAAEC,EAAC;AACX,QAAAA,KAAIS,GAAEV,IAAGX,EAAC;AACV,YAAIiB,KAAId,GAAE,SAAS;AACnB,QAAAJ,KAAIgB,GAAEhB,IAAG,EAAE;AACX,YAAIA,MAAK,QAAQA,GAAE,UAAU,KAAKI,GAAEc,EAAC,KAAK,QAAQd,GAAEc,EAAC,EAAE,UAAU,GAAG;AAClE,cAAI,CAACL,MAAKS,GAAEV,IAAGX,GAAE,UAAUG,GAAE,CAAC,EAAE,MAAM,CAAC,EAAG,CAAAX,MAAK,QAAQyB,KAAI,KAAKd,GAAEc,EAAC,KAAK,QAAQzB,GAAE,EAAEW,GAAE,CAAC,CAAC,GAAGL,GAAE,IAAIE,GAAE,UAAUG,GAAE,CAAC,EAAE,MAAM,CAAC;AAAA,QAC3H,WAAWH,KAAIA,GAAE,QAAQU,IAAGX,EAAC,GAAG,CAACa,MAAKS,GAAEV,IAAGX,EAAC,EAAG,CAAAR,MAAK,QAAQyB,KAAI,KAAKzB,GAAE,EAAEW,GAAE,CAAC,CAAC,GAAGL,GAAE,IAAIE,EAAC;AAAA,MACzF;AAAA,IACF;AACA,aAAS,EAAEF,IAAGC,IAAGP,IAAG;AAClB,UAAI,CAAC,EAAEA,EAAC,KAAKO,GAAE,SAAS,KAAKA,GAAE,OAAO,CAAC,KAAK,IAAK,OAAM,MAAM,8BAA8B;AAC3F,aAAO,GAAGD,IAAGC,IAAGP,IAAG,IAAI;AAAA,IACzB;AACA,aAAS,GAAGM,IAAGC,IAAGP,IAAGQ,IAAG;AACtB,UAAID,MAAK,KAAM,OAAM,MAAM,uDAAuD;AAClF,UAAIA,GAAE,SAAS,IAAK,OAAM,MAAM,sDAAsD;AACtF,UAAII,KAAI,IAAI,EAAE;AACd,UAAIO,KAAIX,GAAE,QAAQ,iBAAiB;AACnC,UAAIW,OAAM,GAAI,CAAAA,KAAI;AAAA,eACTA,MAAK,IAAIA,MAAKX,GAAE,OAAQ,CAAAW,KAAI;AAAA,WAChC;AACH,YAAIC,KAAIZ,GAAE,QAAQ,KAAKW,EAAC;AACxB,QAAAA,KAAIC,OAAM,KAAKZ,GAAE,UAAUW,IAAGC,EAAC,IAAIZ,GAAE,UAAUW,EAAC;AAAA,MAClD;AACA,UAAIE,KAAIF;AACR,MAAAE,MAAK,OAAOD,KAAI,OAAOC,GAAE,WAAW,IAAID,KAAI,SAASA,KAAI,GAAG,KAAKC,EAAC,GAAGA,KAAI,GAAG,KAAKA,EAAC,GAAGD,KAAIA,OAAM,QAAQC,OAAM;AAC7G,UAAI,CAACD,GAAG,OAAM,MAAM,uDAAuD;AAC3E,MAAAD,MAAK,QAAQA,GAAE,OAAO,CAAC,MAAM,OAAOP,GAAE,EAAEO,EAAC,GAAGA,KAAIX,GAAE,QAAQ,MAAM,GAAGI,GAAE,EAAEJ,GAAE,UAAUW,MAAK,IAAIA,KAAI,IAAI,GAAGX,GAAE,QAAQ,iBAAiB,CAAC,CAAC,MAAMW,KAAIP,GAAE,GAAGQ,KAAIZ,MAAK,IAAIa,KAAID,GAAE,OAAO,EAAE,GAAGC,MAAK,KAAKD,KAAIA,GAAE,UAAUC,EAAC,GAAGD,KAAIA,GAAE,QAAQ,IAAI,EAAE,GAAGC,KAAID,GAAE,OAAO,EAAE,GAAGC,MAAK,MAAMD,KAAIA,GAAE,UAAU,GAAGC,EAAC,MAAMD,KAAI,IAAID,GAAE,KAAKP,IAAGQ,EAAC;AACjT,MAAAD,KAAIP,GAAE,SAAS;AACf,MAAAQ,KAAID,GAAE,QAAQ,QAAQ;AACtB,MAAAC,KAAI,MAAM,EAAER,EAAC,GAAGA,GAAE,EAAEO,GAAE,UAAU,GAAGC,EAAC,CAAC;AACrC,UAAI,CAAC,GAAGR,GAAE,SAAS,CAAC,EAAG,OAAM,MAAM,uDAAuD;AAC1F,MAAAO,KAAIP,GAAE,SAAS;AACf,UAAI,EAAE,EAAEX,EAAC,KAAKkB,MAAK,QAAQA,GAAE,SAAS,KAAK,EAAE,KAAKA,EAAC,GAAI,OAAM,MAAM,8BAA8B;AACjG,MAAAA,KAAI,IAAI,EAAE;AACV,MAAAV,MAAKH,GAAEa,IAAG,GAAGX,EAAC;AACd,SAAG;AACD,QAAAA,KAAII,GAAE,SAAS;AACf,QAAAQ,KAAIZ,GAAE,OAAO,EAAE;AACf,YAAIY,MAAK,KAAK,GAAGZ,GAAE,UAAU,GAAGY,EAAC,CAAC,GAAG;AACnC,UAAAC,KAAIb,GAAE,MAAM,EAAE;AACd,mBAASkB,KAAIL,GAAE,QAAQ,IAAI,GAAG,IAAIK,IAAG,EAAE,EAAG,KAAIL,GAAE,CAAC,KAAK,QAAQA,GAAE,CAAC,EAAE,SAAS,GAAG;AAC7E,cAAET,EAAC;AACH,YAAAA,GAAE,EAAEJ,GAAE,UAAU,GAAGY,EAAC,CAAC;AACrB,YAAAZ,KAAIa,GAAE,CAAC;AACP,kBAAM;AAAA,UACR;AAAA,QACF;AACA,QAAAb,KAAI;AAAA,MACN;AACA,MAAAA,GAAE,SAAS,KAAKF,GAAEa,IAAG,GAAGX,EAAC;AACzB,MAAAY,KAAIW,GAAExB,IAAGN,EAAC;AACV,MAAAO,KAAI,IAAI,EAAE;AACV,MAAAa,KAAI;AACJ,MAAAK,KAAId,GAAE,SAAS;AACf,UAAI;AACF,QAAAS,KAAI,GAAGd,IAAGmB,IAAGN,IAAGZ,IAAGC,IAAGU,EAAC;AAAA,MACzB,SAAS,IAAI;AACX,YAAI,GAAG,WAAW,kCAAkC,EAAE,KAAKO,EAAC,GAAG;AAC7D,cAAIA,KAAIA,GAAE,QAAQ,GAAG,EAAE,GAAGL,KAAI,GAAGd,IAAGmB,IAAGN,IAAGZ,IAAGC,IAAGU,EAAC,GAAGE,MAAK,EAAG,OAAM;AAAA,QACpE,MAAO,OAAM;AAAA,MACf;AACA,MAAAA,MAAK,KAAKT,KAAI,EAAES,EAAC,GAAGT,MAAKX,OAAMmB,KAAI,EAAEb,IAAGc,IAAGT,EAAC,OAAO,GAAGA,EAAC,GAAGJ,GAAE,EAAEI,GAAE,SAAS,CAAC,GAAGX,MAAK,QAAQoB,KAAI,EAAED,IAAG,EAAE,GAAGd;AAAA,QACtGa;AAAA,QACA;AAAA,QACAE;AAAA,MACF,KAAKZ,OAAM,OAAOU,GAAE,EAAE,CAAC,GAAGA,GAAE,KAAK,OAAOA,GAAE,EAAE,CAAC;AAC7C,UAAIX,GAAE,EAAE,SAAS,EAAG,OAAM,MAAM,uDAAuD;AACvF,MAAAY,MAAK,SAASnB,KAAI,IAAI,EAAE,GAAGW,KAAI,IAAI,EAAEJ,GAAE,SAAS,CAAC,GAAG,GAAGI,IAAGQ,IAAGnB,EAAC,GAAGM,KAAI,EAAEA,IAAGK,GAAE,SAAS,GAAGQ,IAAG,EAAE,GAAGb,MAAK,KAAKA,MAAK,KAAKA,MAAK,MAAMC,KAAII,IAAGH,MAAKR,GAAE,SAAS,EAAE,SAAS,KAAKK,GAAEa,IAAG,GAAGlB,GAAE,SAAS,CAAC;AAC1L,MAAAQ,KAAID,GAAE,SAAS;AACf,MAAAD,KAAIE,GAAE;AACN,UAAIF,KAAI,EAAG,OAAM,MAAM,uDAAuD;AAC9E,UAAIA,KAAI,GAAI,OAAM,MAAM,sDAAsD;AAC9E,UAAIE,GAAE,SAAS,KAAKA,GAAE,OAAO,CAAC,KAAK,KAAK;AACtC,QAAAH,GAAEa,IAAG,GAAG,IAAI;AACZ,aAAKZ,KAAI,GAAGA,KAAIE,GAAE,SAAS,KAAKA,GAAE,OAAOF,EAAC,KAAK,MAAO,CAAAA;AACtD,QAAAA,MAAK,KAAKD,GAAEa,IAAG,GAAGZ,EAAC;AAAA,MACrB;AACA,MAAAD,GAAEa,IAAG,GAAG,SAASV,IAAG,EAAE,CAAC;AACvB,aAAOU;AAAA,IACT;AACA,aAASW,GAAEvB,IAAGC,IAAG;AACf,cAAQD,KAAIC,GAAE,MAAM,IAAI,OAAO,UAAU,OAAOD,MAAK,WAAWA,KAAIA,GAAE,UAAU,MAAM,GAAG,CAAC,MAAMA,GAAE,CAAC,EAAE,UAAUC,GAAE,SAAS,OAAO;AAAA,IACnI;AACA;AACA,aAAS,GAAGD,IAAG;AACb,WAAK,KAAK,OAAO,QAAQ;AACzB,WAAK,KAAK;AACV,WAAK,IAAI,IAAI,EAAE;AACf,WAAK,KAAK;AACV,WAAK,IAAI,IAAI,EAAE;AACf,WAAK,KAAK,IAAI,EAAE;AAChB,WAAK,IAAI;AACT,WAAK,KAAK,KAAK,KAAK,KAAK,KAAK;AAC9B,WAAK,KAAK,EAAE,EAAE;AACd,WAAK,KAAK;AACV,WAAK,IAAI,IAAI,EAAE;AACf,WAAK,KAAK;AACV,WAAK,IAAI;AACT,WAAK,IAAI,IAAI,EAAE;AACf,WAAK,IAAI,CAAC;AACV,WAAK,KAAKA;AACV,WAAK,IAAI,GAAG,MAAM,KAAK,EAAE;AAAA,IAC3B;AACA,QAAI,KAAK,IAAI,EAAE;AACf,IAAAD,GAAE,IAAI,IAAI,IAAI;AACd,QAAI,KAAK,OAAO,kYAAkY,GAAG,KAAK;AAC1Z,aAAS,GAAGC,IAAGC,IAAG;AAChB,UAAIP,KAAIM,GAAE;AACV,MAAAC,KAAI,EAAEA,EAAC,IAAI,GAAGP,IAAGO,EAAC,IAAI;AACtB,MAAAD,KAAIwB,GAAExB,GAAE,IAAI,EAAEC,EAAC,CAAC;AAChB,aAAOD,MAAK,OAAOA,KAAI;AAAA,IACzB;AACA,aAAS,GAAGA,IAAG;AACb,eAASC,KAAID,GAAE,EAAE,QAAQN,KAAI,GAAGA,KAAIO,IAAG,EAAEP,IAAG;AAC1C,YAAIQ,KAAIF,GAAE,EAAEN,EAAC,GAAGW,KAAI,EAAEH,IAAG,CAAC;AAC1B,YAAIF,GAAE,MAAMK,GAAG,QAAO;AACtB,YAAIO,KAAIZ;AACR,YAAIa,KAAIX,IAAGY,KAAI,EAAED,IAAG,CAAC;AACrB,UAAED,GAAE,CAAC;AACL,YAAIO,KAAIP;AACR,QAAAC,KAAI,EAAEA,IAAG,CAAC;AACV,YAAI,IAAI,kBAAkB,MAAMC,EAAC,EAAE,CAAC;AACpC,UAAE,SAASK,GAAE,EAAE,EAAE,SAASA,KAAI,MAAMA,KAAI,EAAE,QAAQ,IAAI,OAAOL,IAAG,GAAG,GAAGD,EAAC,GAAGM,KAAIA,GAAE,QAAQ,OAAO,KAAK,GAAG,GAAG,QAAQ;AAClH,QAAAA,GAAE,SAAS,KAAKP,GAAE,EAAE,EAAEO,EAAC,GAAGP,KAAI,QAAQA,KAAI;AAC1C,YAAIA,GAAG,QAAOZ,GAAE,KAAKK,IAAGL,GAAE,KAAK,GAAG,KAAKiB,GAAEf,IAAG,CAAC,CAAC,GAAGF,GAAE,KAAK,GAAG;AAAA,MAC7D;AACA,aAAOA,GAAE,IAAI;AAAA,IACf;AACA,aAAS,GAAGA,IAAGC,IAAG;AAChB,eAASP,KAAI,CAAC,GAAGQ,KAAID,GAAE,SAAS,GAAGI,KAAIL,GAAE,EAAE,QAAQY,KAAI,GAAGA,KAAIP,IAAG,EAAEO,IAAG;AACpE,YAAIC,KAAIb,GAAE,EAAEY,EAAC;AACb,UAAEC,IAAG,CAAC,KAAK,IAAInB,GAAE,KAAKM,GAAE,EAAEY,EAAC,CAAC,KAAKC,KAAII,GAAEJ,IAAG,GAAG,KAAK,IAAIX,IAAG,EAAEW,IAAG,CAAC,IAAI,CAAC,CAAC,GAAGZ,GAAE,OAAOY,EAAC,KAAK,KAAKnB,GAAE,KAAKM,GAAE,EAAEY,EAAC,CAAC;AAAA,MAC3G;AACA,MAAAZ,GAAE,IAAIN;AAAA,IACR;AACA,aAAS,GAAGM,IAAGC,IAAG;AAChB,MAAAD,GAAE,EAAE,EAAEC,EAAC;AACP,UAAIP,KAAIO;AACR,SAAG,KAAKP,EAAC,KAAKM,GAAE,EAAE,EAAE,UAAU,KAAK,GAAG,KAAKN,EAAC,KAAKO,MAAK,OAAOP,KAAIO,IAAGD,GAAE,GAAG,EAAEC,EAAC,MAAMP,KAAI,GAAGO,EAAC,GAAGD,GAAE,GAAG,EAAEN,EAAC,GAAGM,GAAE,EAAE,EAAEN,EAAC,IAAIO,KAAIP,OAAMM,GAAE,IAAI,OAAOA,GAAE,KAAK;AACjJ,UAAI,CAACA,GAAE,GAAG;AACR,YAAI,CAACA,GAAE,IAAI;AACT,cAAI,GAAGA,EAAC,GAAG;AACT,gBAAI,GAAGA,EAAC,EAAG,QAAO2B,IAAG3B,EAAC;AAAA,UACxB,WAAWA,GAAE,EAAE,SAAS,MAAMC,KAAID,GAAE,EAAE,SAAS,GAAG,EAAEA,GAAE,CAAC,GAAGA,GAAE,EAAE,EAAEA,GAAE,CAAC,GAAGA,GAAE,EAAE,EAAEC,EAAC,GAAGA,KAAID,GAAE,EAAE,SAAS,GAAGN,KAAIO,GAAE,YAAYD,GAAE,CAAC,GAAG,EAAEA,GAAE,CAAC,GAAGA,GAAE,EAAE,EAAEC,GAAE,UAAU,GAAGP,EAAC,CAAC,IAAIM,GAAE,KAAK,GAAGA,EAAC,EAAG,QAAOA,GAAE,EAAE,EAAE,GAAG,GAAG2B,IAAG3B,EAAC;AAAA,QACtM;AACA,eAAOA,GAAE,EAAE,SAAS;AAAA,MACtB;AACA,cAAQA,GAAE,GAAG,EAAE,QAAQ;AAAA,QACrB,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,iBAAOA,GAAE,EAAE,SAAS;AAAA,QACtB,KAAK;AACH,cAAI,GAAGA,EAAC,EAAG,CAAAA,GAAE,KAAK;AAAA,cACb,QAAOA,GAAE,IAAI,GAAGA,EAAC,GAAG,GAAGA,EAAC;AAAA,QAC/B;AACE,cAAIA,GAAE,GAAI,QAAO,GAAGA,EAAC,MAAMA,GAAE,KAAK,QAAQA,GAAE,EAAE,SAAS,IAAIA,GAAE,EAAE,SAAS;AACxE,cAAIA,GAAE,EAAE,SAAS,GAAG;AAClB,YAAAC,KAAI,GAAGD,IAAGC,EAAC;AACX,YAAAP,KAAI,GAAGM,EAAC;AACR,gBAAIN,GAAE,SAAS,EAAG,QAAOA;AACzB,eAAGM,IAAGA,GAAE,EAAE,SAAS,CAAC;AACpB,mBAAO,GAAGA,EAAC,IAAI,GAAGA,EAAC,IAAIA,GAAE,IAAI,EAAEA,IAAGC,EAAC,IAAID,GAAE,EAAE,SAAS;AAAA,UACtD;AACA,iBAAO,GAAGA,EAAC;AAAA,MACf;AAAA,IACF;AACA,aAAS2B,IAAG3B,IAAG;AACb,MAAAA,GAAE,IAAI;AACN,MAAAA,GAAE,KAAK;AACP,MAAAA,GAAE,IAAI,CAAC;AACP,MAAAA,GAAE,KAAK;AACP,QAAEA,GAAE,CAAC;AACL,MAAAA,GAAE,KAAK;AACP,aAAO,GAAGA,EAAC;AAAA,IACb;AACA,aAAS,GAAGA,IAAG;AACb,eAASC,KAAID,GAAE,EAAE,SAAS,GAAGN,KAAIM,GAAE,EAAE,QAAQE,KAAI,GAAGA,KAAIR,IAAG,EAAEQ,IAAG;AAC9D,YAAIG,KAAIL,GAAE,EAAEE,EAAC,GAAGU,KAAI,EAAEP,IAAG,CAAC;AAC1B,YAAI,IAAI,OAAO,SAASO,KAAI,IAAI,EAAE,KAAKX,EAAC,MAAMD,GAAE,KAAK,GAAG,KAAKiB,GAAEZ,IAAG,CAAC,CAAC,GAAGA,KAAIJ,GAAE,QAAQ,IAAI,OAAOW,IAAG,GAAG,GAAGK,GAAEZ,IAAG,CAAC,CAAC,GAAGA,KAAI,EAAEL,IAAGK,EAAC,GAAG,EAAEA,IAAG,EAAE,KAAKL,GAAE,IAAK,QAAOK;AAAA,MAC5J;AACA,aAAO;AAAA,IACT;AACA,aAAS,EAAEL,IAAGC,IAAG;AACf,UAAIP,KAAIM,GAAE,EAAE,EAAE;AACd,aAAOA,GAAE,MAAMN,KAAI,KAAKM,GAAE,EAAE,SAAS,EAAE,OAAON,KAAI,CAAC,KAAK,MAAMM,GAAE,IAAI,MAAMC,KAAID,GAAE,IAAIC;AAAA,IACtF;AACA,aAAS,GAAGD,IAAG;AACb,UAAIC,KAAID,GAAE,EAAE,SAAS;AACrB,UAAIC,GAAE,UAAU,GAAG;AACjB,iBAASP,KAAIM,GAAE,MAAMA,GAAE,EAAE,UAAU,KAAK,EAAEA,GAAE,GAAG,EAAE,IAAI,IAAIkB,GAAElB,GAAE,GAAG,EAAE,KAAK,CAAC,IAAIkB,GAAElB,GAAE,GAAG,EAAE,KAAK,CAAC,GAAGE,KAAIR,GAAE,QAAQW,KAAI,GAAGA,KAAIH,IAAG,EAAEG,IAAG;AAC7H,cAAIO,KAAIlB,GAAEW,EAAC;AACX,UAAAL,GAAE,EAAE,SAAS,KAAK,GAAG,EAAEY,IAAG,CAAC,CAAC,KAAK,CAACK,GAAEL,IAAG,CAAC,KAAK,CAAC,EAAEA,IAAG,CAAC,MAAMZ,GAAE,EAAE,UAAU,KAAKA,GAAE,MAAM,GAAG,EAAEY,IAAG,CAAC,CAAC,KAAKK,GAAEL,IAAG,CAAC,MAAM,GAAG,KAAK,EAAEA,IAAG,CAAC,CAAC,KAAKZ,GAAE,EAAE,KAAKY,EAAC;AAAA,QAChJ;AACA,WAAGZ,IAAGC,EAAC;AACP,QAAAA,KAAI,GAAGD,EAAC;AACR,eAAOC,GAAE,SAAS,IAAIA,KAAI,GAAGD,EAAC,IAAI,GAAGA,EAAC,IAAIA,GAAE,EAAE,SAAS;AAAA,MACzD;AACA,aAAO,EAAEA,IAAGC,EAAC;AAAA,IACf;AACA,aAAS,GAAGD,IAAG;AACb,UAAIC,KAAID,GAAE,EAAE,SAAS,GAAGN,KAAIO,GAAE;AAC9B,UAAIP,KAAI,GAAG;AACT,iBAASQ,KAAI,IAAIG,KAAI,GAAGA,KAAIX,IAAGW,KAAK,CAAAH,KAAI,GAAGF,IAAGC,GAAE,OAAOI,EAAC,CAAC;AACzD,eAAOL,GAAE,IAAI,EAAEA,IAAGE,EAAC,IAAIF,GAAE,EAAE,SAAS;AAAA,MACtC;AACA,aAAOA,GAAE,EAAE,SAAS;AAAA,IACtB;AACA,aAAS,GAAGA,IAAG;AACb,UAAIC,KAAID,GAAE,EAAE,SAAS,GAAGN,KAAI;AAC5B,UAAIuB,GAAEjB,GAAE,GAAG,EAAE,KAAK,EAAG,KAAIE,KAAI;AAAA,UACxB,CAAAA,KAAIF,GAAE,EAAE,SAAS,GAAGE,KAAIA,GAAE,OAAO,CAAC,KAAK,OAAOA,GAAE,OAAO,CAAC,KAAK,OAAOA,GAAE,OAAO,CAAC,KAAK;AACxF,MAAAA,MAAKR,KAAI,GAAGM,GAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAGA,GAAE,KAAK,QAAQ,EAAEA,GAAE,GAAG,EAAE,MAAME,KAAI,IAAI,OAAO,SAASe,GAAEjB,GAAE,GAAG,EAAE,IAAI,GAAG,GAAGE,KAAID,GAAE,MAAMC,EAAC,GAAGA,MAAK,QAAQA,GAAE,CAAC,KAAK,QAAQA,GAAE,CAAC,EAAE,SAAS,MAAMF,GAAE,KAAK,MAAMN,KAAIQ,GAAE,CAAC,EAAE,QAAQF,GAAE,EAAE,EAAEC,GAAE,UAAU,GAAGP,EAAC,CAAC;AAC9N,QAAEM,GAAE,CAAC;AACL,MAAAA,GAAE,EAAE,EAAEC,GAAE,UAAUP,EAAC,CAAC;AACpB,aAAOO,GAAE,UAAU,GAAGP,EAAC;AAAA,IACzB;AACA,aAAS,GAAGM,IAAG;AACb,UAAIC,KAAID,GAAE,GAAG,SAAS,GAAGN,KAAI,IAAI,OAAO,aAAauB,GAAEjB,GAAE,GAAG,EAAE,IAAI,GAAG;AACrE,MAAAN,KAAIO,GAAE,MAAMP,EAAC;AACb,aAAOA,MAAK,QAAQA,GAAE,CAAC,KAAK,QAAQA,GAAE,CAAC,EAAE,SAAS,KAAKM,GAAE,KAAK,MAAMN,KAAIA,GAAE,CAAC,EAAE,QAAQ,EAAEM,GAAE,CAAC,GAAGA,GAAE,EAAE,EAAEC,GAAE,UAAUP,EAAC,CAAC,GAAG,EAAEM,GAAE,CAAC,GAAGA,GAAE,EAAE,EAAEC,GAAE,UAAU,GAAGP,EAAC,CAAC,GAAGO,GAAE,OAAO,CAAC,KAAK,OAAOD,GAAE,EAAE,EAAE,GAAG,GAAG,QAAQ;AAAA,IAClM;AACA,aAAS,GAAGA,IAAG;AACb,UAAIA,GAAE,EAAE,EAAE,UAAU,EAAG,QAAO;AAC9B,UAAIC,KAAI,IAAI,EAAE,GAAGP,KAAI,GAAGM,GAAE,GAAGC,EAAC;AAC9B,UAAIP,MAAK,EAAG,QAAO;AACnB,QAAEM,GAAE,CAAC;AACL,MAAAA,GAAE,EAAE,EAAEC,GAAE,SAAS,CAAC;AAClB,MAAAA,KAAI,EAAEP,EAAC;AACP,eAASO,KAAID,GAAE,IAAIwB,GAAExB,GAAE,IAAI,KAAKN,EAAC,IAAIO,MAAKD,GAAE,OAAOA,GAAE,IAAI,GAAGA,IAAGC,EAAC;AAChE,MAAAD,GAAE,EAAE,EAAE,KAAKN,EAAC,EAAE,EAAE,GAAG;AACnB,MAAAM,GAAE,IAAI;AACN,aAAO;AAAA,IACT;AACA,aAAS,GAAGA,IAAGC,IAAG;AAChB,UAAIP,KAAIM,GAAE,EAAE,SAAS;AACrB,UAAIN,GAAE,UAAUM,GAAE,EAAE,EAAE,OAAOA,GAAE,EAAE,KAAK,GAAG;AACvC,YAAIE,KAAIR,GAAE,OAAOM,GAAE,EAAE;AACrB,QAAAC,KAAIP,GAAE,QAAQM,GAAE,IAAIC,EAAC;AACrB,UAAED,GAAE,CAAC;AACL,QAAAA,GAAE,EAAE,EAAEC,EAAC;AACP,QAAAD,GAAE,KAAKE;AACP,eAAOD,GAAE,UAAU,GAAGD,GAAE,KAAK,CAAC;AAAA,MAChC;AACA,MAAAA,GAAE,EAAE,UAAU,MAAMA,GAAE,IAAI;AAC1B,MAAAA,GAAE,KAAK;AACP,aAAOA,GAAE,EAAE,SAAS;AAAA,IACtB;AACA;AACA,UAAM,KAAK,CAAC;AACZ,KAAC,QAAQ,iBAAiB,YAAY,SAAS,EAAE,QAAQ,CAACA,IAAGC,OAAM;AACjE,SAAGD,EAAC,IAAIC;AAAA,IACV,CAAC;AACD,UAAM,IAAI,CAAC;AACX,iIAA6H,MAAM,GAAG,EAAE,QAAQ,CAACD,IAAGC,OAAM;AACxJ,QAAED,EAAC,IAAIC;AAAA,IACT,CAAC;AACD,MAAE,UAAU;AACZ,UAAM,KAAK,CAAC;AACZ,gGAA4F,MAAM,GAAG,EAAE,QAAQ,CAACD,IAAGC,OAAM;AACvH,SAAGD,EAAC,IAAIC;AAAA,IACV,CAAC;AACD,UAAM,KAAK,CAAC;AACZ,WAAO,KAAK,CAAC,EAAE,QAAQ,CAACD,OAAM;AAC5B,SAAG,EAAEA,EAAC,CAAC,IAAIA;AAAA,IACb,CAAC;AACD,UAAM,KAAK,CAAC;AACZ,WAAO,KAAK,EAAE,EAAE,QAAQ,CAACA,OAAM;AAC7B,SAAG,GAAGA,EAAC,CAAC,IAAIA;AAAA,IACd,CAAC;AACD,UAAM,KAAK,CAACA,OAAM;AAChB,YAAMC,KAAI,CAAC;AACX,MAAAD,GAAE,SAAS,sBAAsB,KAAKA,GAAE,SAAS,QAAQ,KAAKC,GAAE,KAAK,QAAQ,GAAGD,GAAE,SAAS,YAAY,KAAKC,GAAE,KAAK,YAAY,MAAMD,GAAE,SAAS,QAAQ,KAAKA,GAAE,SAAS,YAAY,MAAMC,GAAE,KAAK,sBAAsB;AACvN,aAAOD,GAAE,OAAOC,EAAC;AAAA,IACnB;AACA,IAAAL,GAAE,SAAS,CAAC,CAAC;AACb,IAAAA,GAAE,+BAA+B,CAACI,IAAGC,OAAM;AACzC,UAAI;AACF,cAAMP,KAAIM,GAAE,QAAQ,YAAY,EAAE,GAAGE,KAAI,IAAI,GAAGD,EAAC;AACjD,QAAAA,KAAI;AACJ,iBAASI,KAAI,GAAGA,KAAIX,GAAE,QAAQW,KAAK,CAAAH,GAAE,KAAK,GAAGA,IAAGR,GAAE,OAAOW,EAAC,CAAC,GAAGJ,KAAIC,GAAE;AACpE,eAAOD;AAAA,MACT,QAAQ;AACN,eAAOD;AAAA,MACT;AAAA,IACF,CAAC;AACD,IAAAJ,GAAE,sBAAsB,CAACI,IAAGC,IAAGP,OAAM;AACnC,UAAI;AACF,cAAMW,KAAI,EAAE,EAAE,GAAGO,KAAI,EAAEP,IAAGL,IAAGC,EAAC;AAC9B,YAAIC,KAAI,EAAEG,IAAGO,IAAG,EAAE;AAClB,eAAOV,MAAK,KAAKA,MAAK,IAAIG,GAAE,OAAOO,IAAG,OAAOlB,OAAM,cAAc,IAAI,GAAGA,EAAC,CAAC,IAAIM;AAAA,MAChF,QAAQ;AACN,eAAOA;AAAA,MACT;AAAA,IACF,CAAC;AACD,IAAAJ,GAAE,0BAA0B,CAACI,IAAGC,IAAGP,OAAM;AACvC,UAAI;AACF,cAAMyB,KAAI,EAAE,EAAE;AACd,WAAG;AACD,cAAIjB,KAAIiB,IAAGd,KAAI,EAAEJ,EAAC;AAClB,cAAI,EAAED,EAAC,GAAG;AACR,gBAAIY,KAAIa,GAAED,GAAEtB,IAAGF,EAAC,GAAGK,EAAC;AACpB,gBAAI;AACF,kBAAI,EAAEO,IAAG,CAAC,GAAG;AACX,oBAAIC,KAAII,GAAEL,IAAG,CAAC;AACd,oBAAIE,KAAI,GAAGZ,IAAGW,IAAGb,IAAG,KAAK;AACzB,sBAAM;AAAA,cACR;AAAA,YACF,SAAS,GAAG;AAAA,YACZ;AAAA,UACF;AACA,UAAAc,KAAI;AAAA,QACN;AACA,eAAOK,GAAE,OAAOL,IAAG,GAAGpB,EAAC,CAAC;AAAA,MAC1B,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AACD,IAAAE,GAAE,sBAAsB,CAACI,IAAGC,OAAM;AAChC,UAAI;AACF,YAAIP,KAAI,EAAE,EAAE,EAAE,GAAGM,IAAGC,EAAC;AACrB,eAAOgB,GAAEvB,IAAG,CAAC;AAAA,MACf,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AACD,IAAAE,GAAE,uBAAuB,CAACI,IAAGC,OAAM;AACjC,UAAI;AACF,cAAMP,KAAI,EAAE,EAAE,GAAGQ,KAAI,EAAER,IAAGM,IAAGC,EAAC,GAAGI,KAAI,GAAGX,IAAGQ,EAAC;AAC5C,eAAO,GAAGG,EAAC,KAAK;AAAA,MAClB,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AACD,IAAAT,GAAE,4BAA4B,CAACI,IAAGC,OAAM;AACtC,UAAI,CAACA,GAAG,QAAO;AACf,UAAI;AACF,cAAMP,KAAI,EAAE,EAAE,GAAGQ,KAAI,EAAER,IAAGM,IAAGC,EAAC,GAAGI,KAAI,EAAEX,IAAGQ,IAAG,EAAE;AAC/C,eAAO,GAAGG,EAAC,KAAK;AAAA,MAClB,SAASX,IAAG;AACV,eAAOA,GAAE,YAAY,iCAAiC,yBAAyBM,GAAE,UAAU,KAAKN,GAAE,YAAY,sCAAsCA,GAAE,YAAY,0DAA0D,cAAcA,GAAE,YAAY,yDAAyD,aAAa;AAAA,MAChU;AAAA,IACF,CAAC;AACD,IAAAE,GAAE,uBAAuB,CAACI,IAAGC,IAAGP,OAAM;AACpC,UAAI;AACF,cAAMQ,KAAI,EAAE,EAAE,GAAGG,KAAI,EAAEH,IAAGF,IAAGC,EAAC;AAC9B,YAAIP,IAAG;AACL,gBAAMkB,KAAI,GAAGlB,EAAC;AACd,mBAASmB,MAAKD,GAAG,KAAI,EAAEV,IAAGG,IAAG,EAAEQ,EAAC,CAAC,MAAM,EAAG,QAAO;AACjD,iBAAO;AAAA,QACT;AACA,eAAO,EAAEX,IAAGG,IAAG,EAAE,MAAM;AAAA,MACzB,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AACD,IAAAT,GAAE,8BAA8B,CAACI,IAAGC,IAAGP,OAAM;AAC3C,UAAI;AACF,cAAMQ,KAAI,EAAE,EAAE,GAAGG,KAAI,EAAEH,IAAGF,IAAGC,EAAC,GAAGW,KAAI,GAAGV,IAAGG,EAAC;AAC5C,YAAIX,IAAG;AACL,gBAAMmB,KAAI,GAAGnB,EAAC,EAAE,IAAI,CAACoB,OAAM,EAAEA,EAAC,CAAC;AAC/B,iBAAOF,MAAKC,GAAE,SAAS,GAAGX,IAAGG,EAAC,CAAC;AAAA,QACjC;AACA,eAAOO;AAAA,MACT,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AACD,IAAAhB,GAAE,uBAAuB,CAACI,IAAGC,OAAM;AACjC,UAAI;AACF,YAAIP,KAAI,EAAE,EAAE,EAAE,GAAGM,IAAGC,EAAC;AACrB,eAAOgB,GAAEvB,IAAG,CAAC,EAAE,SAAS;AAAA,MAC1B,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AAAA,EACH,GAAG,KAAK,MAAM;AACd,MAAI,gBAAgB,OAAO;AAG3B,uBAAqB,QAAQ;AAC7B,MAAI,gCAAgC;;;AC17VpC,MAAO,6CAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,SAAS;AAAA,MACd,eAAe;AAAA,MACf,aAAa;AAAA,IACf;AAAA,IACA,OAAO,UAAU;AAAA,MACf;AAAA,MAAS;AAAA,MAAsB;AAAA,MAAwB;AAAA,MACvD;AAAA,MAAyB;AAAA,MAAyB;AAAA,MAClD;AAAA,MAAyB;AAAA,MACzB;AAAA,MAA2B;AAAA,MAC3B;AAAA,MAA0B;AAAA,MAC1B;AAAA,MAAc;AAAA,MAA2B;AAAA,MAA6B;AAAA,MACtE;AAAA,MAA8B;AAAA,MAA8B;AAAA,MAC5D;AAAA,MAA8B;AAAA,MAC9B;AAAA,MAAgC;AAAA,MAChC;AAAA,MAA+B;AAAA,IACjC;AAAA,IACA,gBAAgB;AAAA,MACd;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,IACpB;AAAA,IAEA,UAAU;AACR,UAAI,KAAK,gBAAgB;AACvB,aAAK,mBAAmB,8BAAa,KAAK,aAAa;AAAA,UACrD,gBAAgB,KAAK;AAAA,UACrB,eAAe,KAAK;AAAA,UACpB,uBAAuB;AAAA,UACvB,eAAe;AAAA,QACjB,CAAC;AAAA,MACH;AACA,UAAI,KAAK,wCAAwC;AAC/C,aAAK,gCAAgC,8BAAa,KAAK,0BAA0B;AAAA,UAC/E,gBAAgB,KAAK;AAAA,UACrB,eAAe,KAAK;AAAA,UACpB,uBAAuB;AAAA,UACvB,eAAe;AAAA,QACjB,CAAC;AAAA,MACH;AACA,UAAI,KAAK,0CAA0C;AACjD,aAAK,kCAAkC,8BAAa,KAAK,4BAA4B;AAAA,UACnF,gBAAgB,KAAK;AAAA,UACrB,eAAe,KAAK;AAAA,UACpB,uBAAuB;AAAA,UACvB,eAAe;AAAA,QACjB,CAAC;AAAA,MACH;AACA,WAAK,qCAAqC,8BAAa,KAAK,+BAA+B;AAAA,QACzF,gBAAgB,KAAK;AAAA,QACrB,eAAe,KAAK;AAAA,QACpB,uBAAuB;AAAA,QACvB,eAAe;AAAA,MACjB,CAAC;AACD,WAAK,mCAAmC,8BAAa,KAAK,6BAA6B;AAAA,QACrF,gBAAgB,KAAK;AAAA,QACrB,eAAe,KAAK;AAAA,QACpB,uBAAuB;AAAA,QACvB,eAAe;AAAA,MACjB,CAAC;AACD,WAAK,mCAAmC,8BAAa,KAAK,6BAA6B;AAAA,QACrF,gBAAgB,KAAK;AAAA,QACrB,eAAe,KAAK;AAAA,QACpB,uBAAuB;AAAA,QACvB,eAAe;AAAA,MACjB,CAAC;AACD,WAAK,mCAAmC,8BAAa,KAAK,6BAA6B;AAAA,QACrF,gBAAgB,KAAK;AAAA,QACrB,eAAe,KAAK;AAAA,QACpB,uBAAuB;AAAA,QACvB,eAAe;AAAA,MACjB,CAAC;AACD,WAAK,mCAAmC,8BAAa,KAAK,6BAA6B;AAAA,QACrF,gBAAgB,KAAK;AAAA,QACrB,eAAe,KAAK;AAAA,QACpB,uBAAuB;AAAA,QACvB,eAAe;AAAA,MACjB,CAAC;AACD,WAAK,mCAAmC,8BAAa,KAAK,6BAA6B;AAAA,QACrF,gBAAgB,KAAK;AAAA,QACrB,eAAe,KAAK;AAAA,QACpB,uBAAuB;AAAA,QACvB,eAAe;AAAA,MACjB,CAAC;AACD,WAAK,qCAAqC,8BAAa,KAAK,+BAA+B;AAAA,QACzF,gBAAgB,KAAK;AAAA,QACrB,eAAe,KAAK;AAAA,QACpB,uBAAuB;AAAA,QACvB,eAAe;AAAA,MACjB,CAAC;AACD,WAAK,qCAAqC,8BAAa,KAAK,+BAA+B;AAAA,QACzF,gBAAgB,KAAK;AAAA,QACrB,eAAe,KAAK;AAAA,QACpB,uBAAuB;AAAA,QACvB,eAAe;AAAA,MACjB,CAAC;AACD,WAAK,oCAAoC,8BAAa,KAAK,8BAA8B;AAAA,QACvF,gBAAgB,KAAK;AAAA,QACrB,eAAe,KAAK;AAAA,QACpB,uBAAuB;AAAA,QACvB,eAAe;AAAA,MACjB,CAAC;AACD,WAAK,oCAAoC,8BAAa,KAAK,8BAA8B;AAAA,QACvF,gBAAgB,KAAK;AAAA,QACrB,eAAe,KAAK;AAAA,QACpB,uBAAuB;AAAA,QACvB,eAAe;AAAA,MACjB,CAAC;AAAA,IACH;AAAA,IAEA,WAAW,QAAQ;AACjB,aAAO,UAAU,OAAO,eAAe;AACvC,aAAO,UAAU,IAAI,aAAa;AAAA,IACpC;AAAA,IAEA,UAAU,QAAQ;AAChB,aAAO,UAAU,OAAO,aAAa;AACrC,aAAO,UAAU,IAAI,eAAe;AAAA,IACtC;AAAA,IAEA,oBAAoBkC,QAAO;AACzB,UAAI,KAAK,iBAAiB,cAAc,KAAK,KAAK,qCAAqC,KAAK,iBAAiB,UAAU,CAAC,GAAG;AACzH,aAAK,WAAW,KAAK,WAAW;AAChC,aAAK,iBAAiB,QAAQ,KAAK,iBAAiB,UAAU;AAAA,MAChE,OAAO;AACL,aAAK,UAAU,KAAK,WAAW;AAC/B,aAAK,iBAAiB,QAAQ;AAAA,MAChC;AAAA,IACF;AAAA,IAEA,iCAAiCA,QAAO;AACtC,UAAI,KAAK,8BAA8B,cAAc,KAAK,KAAK,qCAAqC,KAAK,8BAA8B,UAAU,CAAC,GAAG;AACnJ,aAAK,WAAW,KAAK,wBAAwB;AAC7C,aAAK,8BAA8B,QAAQ,KAAK,8BAA8B,UAAU;AAAA,MAC1F,OAAO;AACL,aAAK,UAAU,KAAK,wBAAwB;AAC5C,aAAK,8BAA8B,QAAQ;AAAA,MAC7C;AAAA,IACF;AAAA,IAEA,mCAAmCA,QAAO;AACxC,UAAI,KAAK,gCAAgC,cAAc,KAAK,KAAK,qCAAqC,KAAK,gCAAgC,UAAU,CAAC,GAAG;AACvJ,aAAK,WAAW,KAAK,0BAA0B;AAC/C,aAAK,gCAAgC,QAAQ,KAAK,gCAAgC,UAAU;AAAA,MAC9F,OAAO;AACL,aAAK,UAAU,KAAK,0BAA0B;AAC9C,aAAK,gCAAgC,QAAQ;AAAA,MAC/C;AAAA,IACF;AAAA,IAEA,8BAA8B,OAAO,QAAQ,cAAc;AACzD,UAAI,MAAM,cAAc,GAAG;AACzB,aAAK,WAAW,MAAM;AACtB,qBAAa,QAAQ,MAAM,UAAU;AAAA,MACvC,OAAO;AACL,aAAK,UAAU,MAAM;AACrB,qBAAa,QAAQ;AAAA,MACvB;AAAA,IACF;AAAA,IAEA,sCAAsCA,QAAO;AAC3C,WAAK,8BAA8B,KAAK,oCAAoC,KAAK,+BAA+B,KAAK,kCAAkC;AAAA,IACzJ;AAAA,IAEA,oCAAoCA,QAAO;AACzC,WAAK,8BAA8B,KAAK,kCAAkC,KAAK,6BAA6B,KAAK,gCAAgC;AAAA,IACnJ;AAAA,IAEA,oCAAoCA,QAAO;AACzC,WAAK,8BAA8B,KAAK,kCAAkC,KAAK,6BAA6B,KAAK,gCAAgC;AAAA,IACnJ;AAAA,IAEA,oCAAoCA,QAAO;AACzC,WAAK,8BAA8B,KAAK,kCAAkC,KAAK,6BAA6B,KAAK,gCAAgC;AAAA,IACnJ;AAAA,IAEA,oCAAoCA,QAAO;AACzC,WAAK,8BAA8B,KAAK,kCAAkC,KAAK,6BAA6B,KAAK,gCAAgC;AAAA,IACnJ;AAAA,IAEA,oCAAoCA,QAAO;AACzC,WAAK,8BAA8B,KAAK,kCAAkC,KAAK,6BAA6B,KAAK,gCAAgC;AAAA,IACnJ;AAAA,IAEA,sCAAsCA,QAAO;AAC3C,WAAK,8BAA8B,KAAK,oCAAoC,KAAK,+BAA+B,KAAK,kCAAkC;AAAA,IACzJ;AAAA,IAEA,sCAAsCA,QAAO;AAC3C,WAAK,8BAA8B,KAAK,oCAAoC,KAAK,+BAA+B,KAAK,kCAAkC;AAAA,IACzJ;AAAA,IAEA,qCAAqCA,QAAO;AAC1C,WAAK,8BAA8B,KAAK,mCAAmC,KAAK,8BAA8B,KAAK,iCAAiC;AAAA,IACtJ;AAAA,IAEA,qCAAqCA,QAAO;AAC1C,WAAK,8BAA8B,KAAK,mCAAmC,KAAK,8BAA8B,KAAK,iCAAiC;AAAA,IACtJ;AAAA,IAEA,qCAAqC,aAAa;AAChD,UAAI,cAAc,CAAC,KAAK,KAAK,KAAK,GAAG;AACrC,UAAIC,KAAI;AACR,UAAI,MAAM,YAAY;AACtB,UAAI,cAAc;AAClB,UAAI,WAAW;AACf,UAAI,cAAc;AAClB,UAAI,SAAS;AACb,aAAOA,KAAI,KAAK;AACd,YAAIA,KAAI,KAAK,YAAY,SAAS,KAAK,EAAEA,MAAK,KAAK,YAAYA,EAAC,KAAK,MAAM;AACzE,wBAAc,cAAc,YAAYA,EAAC;AAAA,QAC3C,WAAW,eAAe,MAAM;AAC9B,cAAI,SAAS,UAAU,GAAG;AACxB,uBAAW,WAAW,YAAYA,EAAC;AAAA,UACrC,OAAO;AACL,0BAAc,cAAc,YAAYA,EAAC;AACzC,gBAAI,YAAY,UAAU,KAAK,EAAE,QAAQ,UAAU,WAAW,IAAI,IAAI;AACpE,qBAAO;AAAA,YACT,WAAW,YAAY,UAAU,KAAK,YAAY,CAAC,KAAK,OAAO,YAAY,CAAC,KAAK,KAAK;AACpF,qBAAO;AAAA,YACT,WAAW,YAAY,UAAU,KAAK,YAAY,CAAC,KAAK,OAAO,YAAY,CAAC,KAAK,OAAO,YAAY,CAAC,KAAK,OAAO,YAAY,CAAC,KAAK,KAAK;AACtI,qBAAO;AAAA,YACT,OAAO;AACL,uBAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF;AACA,QAAAA;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IAEA,qCAAqC,aAAa;AAChD,UAAI,cAAc,CAAC,KAAK,KAAK,KAAK,GAAG;AACrC,UAAI,cAAc,CAAC,KAAK,KAAK,KAAK,KAAK,GAAG;AAC1C,UAAI,cAAc,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;AACjE,UAAIA,KAAI;AACR,UAAI,MAAM,YAAY;AACtB,UAAI,cAAc;AAClB,UAAI,WAAW;AACf,UAAI,cAAc;AAClB,UAAI,SAAS;AACb,aAAOA,KAAI,KAAK;AACd,YAAIA,KAAI,KAAK,YAAY,SAAS,KAAK,EAAEA,MAAK,KAAK,YAAYA,EAAC,KAAK,MAAM;AACzE,wBAAc,cAAc,YAAYA,EAAC;AAAA,QAC3C,WAAW,eAAe,MAAM;AAC9B,cAAI,SAAS,UAAU,GAAG;AACxB,uBAAW,WAAW,YAAYA,EAAC;AAAA,UACrC,OAAO;AACL,0BAAc,cAAc,YAAYA,EAAC;AACzC,gBAAI,YAAY,UAAU,KAAK,EAAE,QAAQ,UAAU,WAAW,IAAI,IAAI;AACpE,kBAAI,YAAY,CAAC,KAAK,OAAO,YAAY,CAAC,KAAK,KAAK;AAClD,uBAAO;AAAA,cACT,OAAO;AACL,uBAAO;AAAA,cACT;AAAA,YACF,OAAO;AACL,uBAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF,WAAW,eAAe,MAAM;AAC9B,cAAI,SAAS,UAAU,GAAG;AACxB,uBAAW,WAAW,YAAYA,EAAC;AAAA,UACrC,OAAO;AACL,0BAAc,cAAc,YAAYA,EAAC;AACzC,gBAAI,YAAY,UAAU,KAAK,EAAE,QAAQ,UAAU,WAAW,IAAI,IAAI;AACpE,gBAAE,sCAAsC,EAAE,SAAS,aAAa,EAAE,YAAY,eAAe;AAC7F,qBAAO;AAAA,YACT,OAAO;AACL,uBAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF,WAAW,eAAe,MAAM;AAC9B,cAAI,SAAS,SAAS,GAAG;AACvB,uBAAW,WAAW,YAAYA,EAAC;AAAA,UACrC,OAAO;AACL,0BAAc,cAAc,YAAYA,EAAC;AACzC,gBAAI,SAAS,UAAU,KAAK,YAAY,UAAU,KAAK,YAAY,UAAU,IAAI;AAC/E,gBAAE,sCAAsC,EAAE,SAAS,aAAa,EAAE,YAAY,eAAe;AAC7F,uBAAS;AAAA,YACX,OAAO;AACL,uBAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF,WAAW,eAAe,MAAM;AAC9B,cAAI,SAAS,SAAS,GAAG;AACvB,uBAAW,WAAW,YAAYA,EAAC;AAAA,UACrC,OAAO;AACL,0BAAc,cAAc,YAAYA,EAAC;AACzC,gBAAI,SAAS,UAAU,KAAK,YAAY,UAAU,KAAK,EAAE,QAAQ,UAAU,WAAW,IAAI,IAAI;AAC5F,gBAAE,sCAAsC,EAAE,SAAS,aAAa,EAAE,YAAY,eAAe;AAC7F,uBAAS;AAAA,YACX,OAAO;AACL,uBAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF;AACA,QAAAA;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IAEA,oBAAoBD,QAAO;AAAA,IAE3B;AAAA,EACF;;;AC7SA,WAASE,OAAM,GAAG;AAChB,WAAO,IAAI,MAAM;AAAA,EACnB;AACA,MAAM,MAAM,CAAC,GAAGC,IAAGC,OAAM,KAAK,IAAI,KAAK,IAAI,GAAGA,EAAC,GAAGD,EAAC;AACnD,WAAS,IAAI,GAAG;AACd,WAAO,IAAID,OAAM,IAAI,IAAI,GAAG,GAAG,GAAG;AAAA,EACpC;AAIA,WAAS,IAAI,GAAG;AACd,WAAO,IAAIG,OAAM,IAAI,GAAG,GAAG,GAAG,GAAG;AAAA,EACnC;AACA,WAAS,IAAI,GAAG;AACd,WAAO,IAAIA,OAAM,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC;AAAA,EACxC;AACA,WAAS,IAAI,GAAG;AACd,WAAO,IAAIA,OAAM,IAAI,GAAG,GAAG,GAAG,GAAG;AAAA,EACnC;AAEA,MAAM,QAAQ,EAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAE;AAC7J,MAAM,MAAM,CAAC,GAAG,kBAAkB;AAClC,MAAM,KAAK,CAAAC,OAAK,IAAIA,KAAI,EAAG;AAC3B,MAAM,KAAK,CAAAA,OAAK,KAAKA,KAAI,QAAS,CAAC,IAAI,IAAIA,KAAI,EAAG;AAClD,MAAM,KAAK,CAAAA,QAAOA,KAAI,QAAS,OAAQA,KAAI;AAC3C,MAAM,UAAU,OAAK,GAAG,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC;AAC5D,WAAS,SAAS,KAAK;AACrB,QAAI,MAAM,IAAI;AACd,QAAI;AACJ,QAAI,IAAI,CAAC,MAAM,KAAK;AAClB,UAAI,QAAQ,KAAK,QAAQ,GAAG;AAC1B,cAAM;AAAA,UACJ,GAAG,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI;AAAA,UACzB,GAAG,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI;AAAA,UACzB,GAAG,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI;AAAA,UACzB,GAAG,QAAQ,IAAI,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK;AAAA,QACtC;AAAA,MACF,WAAW,QAAQ,KAAK,QAAQ,GAAG;AACjC,cAAM;AAAA,UACJ,GAAG,MAAM,IAAI,CAAC,CAAC,KAAK,IAAI,MAAM,IAAI,CAAC,CAAC;AAAA,UACpC,GAAG,MAAM,IAAI,CAAC,CAAC,KAAK,IAAI,MAAM,IAAI,CAAC,CAAC;AAAA,UACpC,GAAG,MAAM,IAAI,CAAC,CAAC,KAAK,IAAI,MAAM,IAAI,CAAC,CAAC;AAAA,UACpC,GAAG,QAAQ,IAAK,MAAM,IAAI,CAAC,CAAC,KAAK,IAAI,MAAM,IAAI,CAAC,CAAC,IAAK;AAAA,QACxD;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,MAAM,QAAQ,CAACC,IAAGC,OAAMD,KAAI,MAAMC,GAAED,EAAC,IAAI;AACzC,WAAS,UAAU,GAAG;AACpB,QAAIC,KAAI,QAAQ,CAAC,IAAI,KAAK;AAC1B,WAAO,IACH,MAAMA,GAAE,EAAE,CAAC,IAAIA,GAAE,EAAE,CAAC,IAAIA,GAAE,EAAE,CAAC,IAAI,MAAM,EAAE,GAAGA,EAAC,IAC7C;AAAA,EACN;AAEA,MAAM,SAAS;AACf,WAAS,SAASC,IAAGC,IAAGC,IAAG;AACzB,UAAMJ,KAAIG,KAAI,KAAK,IAAIC,IAAG,IAAIA,EAAC;AAC/B,UAAMH,KAAI,CAACI,IAAG,KAAKA,KAAIH,KAAI,MAAM,OAAOE,KAAIJ,KAAI,KAAK,IAAI,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE;AACtF,WAAO,CAACC,GAAE,CAAC,GAAGA,GAAE,CAAC,GAAGA,GAAE,CAAC,CAAC;AAAA,EAC1B;AACA,WAAS,SAASC,IAAGC,IAAG,GAAG;AACzB,UAAMF,KAAI,CAACI,IAAG,KAAKA,KAAIH,KAAI,MAAM,MAAM,IAAI,IAAIC,KAAI,KAAK,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;AACpF,WAAO,CAACF,GAAE,CAAC,GAAGA,GAAE,CAAC,GAAGA,GAAE,CAAC,CAAC;AAAA,EAC1B;AACA,WAAS,SAASC,IAAG,GAAGH,IAAG;AACzB,UAAM,MAAM,SAASG,IAAG,GAAG,GAAG;AAC9B,QAAII;AACJ,QAAI,IAAIP,KAAI,GAAG;AACb,MAAAO,KAAI,KAAK,IAAIP;AACb,WAAKO;AACL,MAAAP,MAAKO;AAAA,IACP;AACA,SAAKA,KAAI,GAAGA,KAAI,GAAGA,MAAK;AACtB,UAAIA,EAAC,KAAK,IAAI,IAAIP;AAClB,UAAIO,EAAC,KAAK;AAAA,IACZ;AACA,WAAO;AAAA,EACT;AACA,WAAS,SAASC,IAAGC,IAAGT,IAAGU,IAAGC,MAAK;AACjC,QAAIH,OAAMG,MAAK;AACb,cAASF,KAAIT,MAAKU,MAAMD,KAAIT,KAAI,IAAI;AAAA,IACtC;AACA,QAAIS,OAAME,MAAK;AACb,cAAQX,KAAIQ,MAAKE,KAAI;AAAA,IACvB;AACA,YAAQF,KAAIC,MAAKC,KAAI;AAAA,EACvB;AACA,WAAS,QAAQ,GAAG;AAClB,UAAME,SAAQ;AACd,UAAMJ,KAAI,EAAE,IAAII;AAChB,UAAMH,KAAI,EAAE,IAAIG;AAChB,UAAMZ,KAAI,EAAE,IAAIY;AAChB,UAAMD,OAAM,KAAK,IAAIH,IAAGC,IAAGT,EAAC;AAC5B,UAAMa,OAAM,KAAK,IAAIL,IAAGC,IAAGT,EAAC;AAC5B,UAAMK,MAAKM,OAAME,QAAO;AACxB,QAAIV,IAAGC,IAAGM;AACV,QAAIC,SAAQE,MAAK;AACf,MAAAH,KAAIC,OAAME;AACV,MAAAT,KAAIC,KAAI,MAAMK,MAAK,IAAIC,OAAME,QAAOH,MAAKC,OAAME;AAC/C,MAAAV,KAAI,SAASK,IAAGC,IAAGT,IAAGU,IAAGC,IAAG;AAC5B,MAAAR,KAAIA,KAAI,KAAK;AAAA,IACf;AACA,WAAO,CAACA,KAAI,GAAGC,MAAK,GAAGC,EAAC;AAAA,EAC1B;AACA,WAAS,MAAMH,IAAGD,IAAGD,IAAGc,IAAG;AACzB,YACE,MAAM,QAAQb,EAAC,IACXC,GAAED,GAAE,CAAC,GAAGA,GAAE,CAAC,GAAGA,GAAE,CAAC,CAAC,IAClBC,GAAED,IAAGD,IAAGc,EAAC,GACb,IAAI,GAAG;AAAA,EACX;AACA,WAAS,QAAQX,IAAGC,IAAGC,IAAG;AACxB,WAAO,MAAM,UAAUF,IAAGC,IAAGC,EAAC;AAAA,EAChC;AACA,WAAS,QAAQF,IAAG,GAAGH,IAAG;AACxB,WAAO,MAAM,UAAUG,IAAG,GAAGH,EAAC;AAAA,EAChC;AACA,WAAS,QAAQG,IAAGC,IAAG,GAAG;AACxB,WAAO,MAAM,UAAUD,IAAGC,IAAG,CAAC;AAAA,EAChC;AACA,WAAS,IAAID,IAAG;AACd,YAAQA,KAAI,MAAM,OAAO;AAAA,EAC3B;AACA,WAAS,SAAS,KAAK;AACrB,UAAMY,KAAI,OAAO,KAAK,GAAG;AACzB,QAAId,KAAI;AACR,QAAI;AACJ,QAAI,CAACc,IAAG;AACN;AAAA,IACF;AACA,QAAIA,GAAE,CAAC,MAAM,GAAG;AACd,MAAAd,KAAIc,GAAE,CAAC,IAAI,IAAI,CAACA,GAAE,CAAC,CAAC,IAAI,IAAI,CAACA,GAAE,CAAC,CAAC;AAAA,IACnC;AACA,UAAMZ,KAAI,IAAI,CAACY,GAAE,CAAC,CAAC;AACnB,UAAM,KAAK,CAACA,GAAE,CAAC,IAAI;AACnB,UAAM,KAAK,CAACA,GAAE,CAAC,IAAI;AACnB,QAAIA,GAAE,CAAC,MAAM,OAAO;AAClB,UAAI,QAAQZ,IAAG,IAAI,EAAE;AAAA,IACvB,WAAWY,GAAE,CAAC,MAAM,OAAO;AACzB,UAAI,QAAQZ,IAAG,IAAI,EAAE;AAAA,IACvB,OAAO;AACL,UAAI,QAAQA,IAAG,IAAI,EAAE;AAAA,IACvB;AACA,WAAO;AAAA,MACL,GAAG,EAAE,CAAC;AAAA,MACN,GAAG,EAAE,CAAC;AAAA,MACN,GAAG,EAAE,CAAC;AAAA,MACN,GAAGF;AAAA,IACL;AAAA,EACF;AACA,WAAS,OAAO,GAAG,KAAK;AACtB,QAAIE,KAAI,QAAQ,CAAC;AACjB,IAAAA,GAAE,CAAC,IAAI,IAAIA,GAAE,CAAC,IAAI,GAAG;AACrB,IAAAA,KAAI,QAAQA,EAAC;AACb,MAAE,IAAIA,GAAE,CAAC;AACT,MAAE,IAAIA,GAAE,CAAC;AACT,MAAE,IAAIA,GAAE,CAAC;AAAA,EACX;AACA,WAAS,UAAU,GAAG;AACpB,QAAI,CAAC,GAAG;AACN;AAAA,IACF;AACA,UAAMF,KAAI,QAAQ,CAAC;AACnB,UAAME,KAAIF,GAAE,CAAC;AACb,UAAMG,KAAI,IAAIH,GAAE,CAAC,CAAC;AAClB,UAAMI,KAAI,IAAIJ,GAAE,CAAC,CAAC;AAClB,WAAO,EAAE,IAAI,MACT,QAAQE,EAAC,KAAKC,EAAC,MAAMC,EAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MACpC,OAAOF,EAAC,KAAKC,EAAC,MAAMC,EAAC;AAAA,EAC3B;AAEA,MAAM,MAAM;AAAA,IACV,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACA,MAAM,UAAU;AAAA,IACd,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,MAAM;AAAA,IACN,WAAW;AAAA,IACX,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,cAAc;AAAA,IACd,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,MAAM;AAAA,IACN,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,IACT,KAAK;AAAA,IACL,aAAa;AAAA,IACb,SAAS;AAAA,IACT,SAAS;AAAA,IACT,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,IACP,SAAS;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,UAAU;AAAA,IACV,UAAU;AAAA,IACV,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,WAAW;AAAA,IACX,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,KAAK;AAAA,IACL,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,WAAW;AAAA,IACX,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SAAS;AAAA,IACT,KAAK;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,WAAW;AAAA,IACX,KAAK;AAAA,IACL,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,SAAS;AAAA,IACT,MAAM;AAAA,IACN,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,SAAS;AAAA,IACT,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,aAAa;AAAA,IACb,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,IACX,OAAO;AAAA,IACP,WAAW;AAAA,IACX,OAAO;AAAA,IACP,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,IACN,WAAW;AAAA,IACX,IAAI;AAAA,IACJ,OAAO;AAAA,EACT;AACA,WAAS,SAAS;AAChB,UAAM,WAAW,CAAC;AAClB,UAAM,OAAO,OAAO,KAAK,OAAO;AAChC,UAAM,QAAQ,OAAO,KAAK,GAAG;AAC7B,QAAIE,IAAG,GAAG,GAAG,IAAI;AACjB,SAAKA,KAAI,GAAGA,KAAI,KAAK,QAAQA,MAAK;AAChC,WAAK,KAAK,KAAKA,EAAC;AAChB,WAAK,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACjC,YAAI,MAAM,CAAC;AACX,aAAK,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC;AAAA,MAC3B;AACA,UAAI,SAAS,QAAQ,EAAE,GAAG,EAAE;AAC5B,eAAS,EAAE,IAAI,CAAC,KAAK,KAAK,KAAM,KAAK,IAAI,KAAM,IAAI,GAAI;AAAA,IACzD;AACA,WAAO;AAAA,EACT;AAEA,MAAI;AACJ,WAAS,UAAU,KAAK;AACtB,QAAI,CAAC,OAAO;AACV,cAAQ,OAAO;AACf,YAAM,cAAc,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,IACjC;AACA,UAAMN,KAAI,MAAM,IAAI,YAAY,CAAC;AACjC,WAAOA,MAAK;AAAA,MACV,GAAGA,GAAE,CAAC;AAAA,MACN,GAAGA,GAAE,CAAC;AAAA,MACN,GAAGA,GAAE,CAAC;AAAA,MACN,GAAGA,GAAE,WAAW,IAAIA,GAAE,CAAC,IAAI;AAAA,IAC7B;AAAA,EACF;AAEA,MAAM,SAAS;AACf,WAAS,SAAS,KAAK;AACrB,UAAMc,KAAI,OAAO,KAAK,GAAG;AACzB,QAAId,KAAI;AACR,QAAIO,IAAGC,IAAGT;AACV,QAAI,CAACe,IAAG;AACN;AAAA,IACF;AACA,QAAIA,GAAE,CAAC,MAAMP,IAAG;AACd,YAAM,IAAI,CAACO,GAAE,CAAC;AACd,MAAAd,KAAIc,GAAE,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,GAAG;AAAA,IACzC;AACA,IAAAP,KAAI,CAACO,GAAE,CAAC;AACR,IAAAN,KAAI,CAACM,GAAE,CAAC;AACR,IAAAf,KAAI,CAACe,GAAE,CAAC;AACR,IAAAP,KAAI,OAAOO,GAAE,CAAC,IAAI,IAAIP,EAAC,IAAI,IAAIA,IAAG,GAAG,GAAG;AACxC,IAAAC,KAAI,OAAOM,GAAE,CAAC,IAAI,IAAIN,EAAC,IAAI,IAAIA,IAAG,GAAG,GAAG;AACxC,IAAAT,KAAI,OAAOe,GAAE,CAAC,IAAI,IAAIf,EAAC,IAAI,IAAIA,IAAG,GAAG,GAAG;AACxC,WAAO;AAAA,MACL,GAAGQ;AAAA,MACH,GAAGC;AAAA,MACH,GAAGT;AAAA,MACH,GAAGC;AAAA,IACL;AAAA,EACF;AACA,WAAS,UAAU,GAAG;AACpB,WAAO,MACL,EAAE,IAAI,MACF,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MACxC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC;AAAA,EAElC;AAEA,MAAM,KAAK,OAAK,KAAK,WAAY,IAAI,QAAQ,KAAK,IAAI,GAAG,IAAM,GAAG,IAAI,QAAQ;AAC9E,MAAM,OAAO,OAAK,KAAK,UAAU,IAAI,QAAQ,KAAK,KAAK,IAAI,SAAS,OAAO,GAAG;AAC9E,WAASe,aAAY,MAAM,MAAMC,IAAG;AAClC,UAAMT,KAAI,KAAK,IAAI,KAAK,CAAC,CAAC;AAC1B,UAAMC,KAAI,KAAK,IAAI,KAAK,CAAC,CAAC;AAC1B,UAAMT,KAAI,KAAK,IAAI,KAAK,CAAC,CAAC;AAC1B,WAAO;AAAA,MACL,GAAG,IAAI,GAAGQ,KAAIS,MAAK,KAAK,IAAI,KAAK,CAAC,CAAC,IAAIT,GAAE,CAAC;AAAA,MAC1C,GAAG,IAAI,GAAGC,KAAIQ,MAAK,KAAK,IAAI,KAAK,CAAC,CAAC,IAAIR,GAAE,CAAC;AAAA,MAC1C,GAAG,IAAI,GAAGT,KAAIiB,MAAK,KAAK,IAAI,KAAK,CAAC,CAAC,IAAIjB,GAAE,CAAC;AAAA,MAC1C,GAAG,KAAK,IAAIiB,MAAK,KAAK,IAAI,KAAK;AAAA,IACjC;AAAA,EACF;AAEA,WAAS,OAAO,GAAGV,IAAG,OAAO;AAC3B,QAAI,GAAG;AACL,UAAI,MAAM,QAAQ,CAAC;AACnB,UAAIA,EAAC,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,IAAIA,EAAC,IAAI,IAAIA,EAAC,IAAI,OAAOA,OAAM,IAAI,MAAM,CAAC,CAAC;AACzE,YAAM,QAAQ,GAAG;AACjB,QAAE,IAAI,IAAI,CAAC;AACX,QAAE,IAAI,IAAI,CAAC;AACX,QAAE,IAAI,IAAI,CAAC;AAAA,IACb;AAAA,EACF;AACA,WAASW,OAAM,GAAG,OAAO;AACvB,WAAO,IAAI,OAAO,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI;AAAA,EAC7C;AACA,WAAS,WAAW,OAAO;AACzB,QAAI,IAAI,EAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAG;AACjC,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,UAAI,MAAM,UAAU,GAAG;AACrB,YAAI,EAAC,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,IAAG;AAClD,YAAI,MAAM,SAAS,GAAG;AACpB,YAAE,IAAI,IAAI,MAAM,CAAC,CAAC;AAAA,QACpB;AAAA,MACF;AAAA,IACF,OAAO;AACL,UAAIA,OAAM,OAAO,EAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAC,CAAC;AACzC,QAAE,IAAI,IAAI,EAAE,CAAC;AAAA,IACf;AACA,WAAO;AAAA,EACT;AACA,WAAS,cAAc,KAAK;AAC1B,QAAI,IAAI,OAAO,CAAC,MAAM,KAAK;AACzB,aAAO,SAAS,GAAG;AAAA,IACrB;AACA,WAAO,SAAS,GAAG;AAAA,EACrB;AACA,MAAM,QAAN,MAAM,OAAM;AAAA,IACV,YAAY,OAAO;AACjB,UAAI,iBAAiB,QAAO;AAC1B,eAAO;AAAA,MACT;AACA,YAAM,OAAO,OAAO;AACpB,UAAI;AACJ,UAAI,SAAS,UAAU;AACrB,YAAI,WAAW,KAAK;AAAA,MACtB,WAAW,SAAS,UAAU;AAC5B,YAAI,SAAS,KAAK,KAAK,UAAU,KAAK,KAAK,cAAc,KAAK;AAAA,MAChE;AACA,WAAK,OAAO;AACZ,WAAK,SAAS,CAAC,CAAC;AAAA,IAClB;AAAA,IACA,IAAI,QAAQ;AACV,aAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAI,MAAM;AACR,UAAI,IAAIA,OAAM,KAAK,IAAI;AACvB,UAAI,GAAG;AACL,UAAE,IAAI,IAAI,EAAE,CAAC;AAAA,MACf;AACA,aAAO;AAAA,IACT;AAAA,IACA,IAAI,IAAI,KAAK;AACX,WAAK,OAAO,WAAW,GAAG;AAAA,IAC5B;AAAA,IACA,YAAY;AACV,aAAO,KAAK,SAAS,UAAU,KAAK,IAAI,IAAI;AAAA,IAC9C;AAAA,IACA,YAAY;AACV,aAAO,KAAK,SAAS,UAAU,KAAK,IAAI,IAAI;AAAA,IAC9C;AAAA,IACA,YAAY;AACV,aAAO,KAAK,SAAS,UAAU,KAAK,IAAI,IAAI;AAAA,IAC9C;AAAA,IACA,IAAIC,QAAO,QAAQ;AACjB,UAAIA,QAAO;AACT,cAAM,KAAK,KAAK;AAChB,cAAM,KAAKA,OAAM;AACjB,YAAI;AACJ,cAAMC,KAAI,WAAW,KAAK,MAAM;AAChC,cAAM,IAAI,IAAIA,KAAI;AAClB,cAAMnB,KAAI,GAAG,IAAI,GAAG;AACpB,cAAM,OAAO,IAAIA,OAAM,KAAK,KAAK,IAAIA,OAAM,IAAI,IAAIA,OAAM,KAAK;AAC9D,aAAK,IAAI;AACT,WAAG,IAAI,MAAO,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI;AACtC,WAAG,IAAI,MAAO,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI;AACtC,WAAG,IAAI,MAAO,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI;AACtC,WAAG,IAAImB,KAAI,GAAG,KAAK,IAAIA,MAAK,GAAG;AAC/B,aAAK,MAAM;AAAA,MACb;AACA,aAAO;AAAA,IACT;AAAA,IACA,YAAYD,QAAOF,IAAG;AACpB,UAAIE,QAAO;AACT,aAAK,OAAOH,aAAY,KAAK,MAAMG,OAAM,MAAMF,EAAC;AAAA,MAClD;AACA,aAAO;AAAA,IACT;AAAA,IACA,QAAQ;AACN,aAAO,IAAI,OAAM,KAAK,GAAG;AAAA,IAC3B;AAAA,IACA,MAAMhB,IAAG;AACP,WAAK,KAAK,IAAI,IAAIA,EAAC;AACnB,aAAO;AAAA,IACT;AAAA,IACA,QAAQ,OAAO;AACb,YAAM,MAAM,KAAK;AACjB,UAAI,KAAK,IAAI;AACb,aAAO;AAAA,IACT;AAAA,IACA,YAAY;AACV,YAAM,MAAM,KAAK;AACjB,YAAM,MAAMF,OAAM,IAAI,IAAI,MAAM,IAAI,IAAI,OAAO,IAAI,IAAI,IAAI;AAC3D,UAAI,IAAI,IAAI,IAAI,IAAI,IAAI;AACxB,aAAO;AAAA,IACT;AAAA,IACA,QAAQ,OAAO;AACb,YAAM,MAAM,KAAK;AACjB,UAAI,KAAK,IAAI;AACb,aAAO;AAAA,IACT;AAAA,IACA,SAAS;AACP,YAAM,IAAI,KAAK;AACf,QAAE,IAAI,MAAM,EAAE;AACd,QAAE,IAAI,MAAM,EAAE;AACd,QAAE,IAAI,MAAM,EAAE;AACd,aAAO;AAAA,IACT;AAAA,IACA,QAAQ,OAAO;AACb,aAAO,KAAK,MAAM,GAAG,KAAK;AAC1B,aAAO;AAAA,IACT;AAAA,IACA,OAAO,OAAO;AACZ,aAAO,KAAK,MAAM,GAAG,CAAC,KAAK;AAC3B,aAAO;AAAA,IACT;AAAA,IACA,SAAS,OAAO;AACd,aAAO,KAAK,MAAM,GAAG,KAAK;AAC1B,aAAO;AAAA,IACT;AAAA,IACA,WAAW,OAAO;AAChB,aAAO,KAAK,MAAM,GAAG,CAAC,KAAK;AAC3B,aAAO;AAAA,IACT;AAAA,IACA,OAAO,KAAK;AACV,aAAO,KAAK,MAAM,GAAG;AACrB,aAAO;AAAA,IACT;AAAA,EACF;;;AC5jBO,WAASsB,QAAO;EACrB;AAMK,MAAMC,MAAO,uBAAM;AACxB,QAAIC,KAAK;AACT,WAAO,MAAMA;EACf,GAAA;AAOO,WAASC,cAAcC,OAA2C;AACvE,WAAOA,UAAU,QAAQA,UAAUC;EACrC;AAOO,WAASC,QAAqBF,OAA8B;AACjE,QAAIG,MAAMD,WAAWC,MAAMD,QAAQF,KAAQ,GAAA;AACzC,aAAO;;AAET,UAAMI,OAAOC,OAAOC,UAAUC,SAASC,KAAKR,KAAAA;AAC5C,QAAII,KAAKK,MAAM,GAAG,CAAA,MAAO,aAAaL,KAAKK,MAAM,EAAC,MAAO,UAAU;AACjE,aAAO;;AAET,WAAO;EACT;AAOO,WAASC,SAASV,OAAoC;AAC3D,WAAOA,UAAU,QAAQK,OAAOC,UAAUC,SAASC,KAAKR,KAAW,MAAA;EACrE;AAMA,WAASW,eAAeX,OAAiC;AACvD,YAAQ,OAAOA,UAAU,YAAYA,iBAAiBY,WAAWC,SAAS,CAACb,KAAAA;EAC7E;AAUO,WAASc,gBAAgBd,OAAgBe,cAAsB;AACpE,WAAOJ,eAAeX,KAASA,IAAAA,QAAQe;EACzC;AAOO,WAASC,eAAkBhB,OAAsBe,cAAiB;AACvE,WAAO,OAAOf,UAAU,cAAce,eAAef;EACvD;MAEaiB,eAAe,CAACjB,OAAwBkB,cACnD,OAAOlB,UAAU,YAAYA,MAAMmB,SAAS,GAAA,IAC1CC,WAAWpB,KAAAA,IAAS,MAClB,CAACA,QAAQkB;MAEFG,cAAc,CAACrB,OAAwBkB,cAClD,OAAOlB,UAAU,YAAYA,MAAMmB,SAAS,GAAA,IAC1CC,WAAWpB,KAAAA,IAAS,MAAMkB,YACxB,CAAClB;AASA,WAASsB,SACdC,KACAC,MACAC,SACe;AACf,QAAIF,OAAM,OAAOA,IAAGf,SAAS,YAAY;AACvC,aAAOe,IAAGG,MAAMD,SAASD,IAAAA;;EAE7B;AAuBO,WAASG,KACdC,UACAL,KACAE,SACAI,SACA;AACA,QAAIC,IAAWC,KAAaC;AAC5B,QAAI9B,QAAQ0B,QAAW,GAAA;AACrBG,YAAMH,SAASK;AACf,UAAIJ,SAAS;AACX,aAAKC,KAAIC,MAAM,GAAGD,MAAK,GAAGA,MAAK;AAC7BP,UAAAA,IAAGf,KAAKiB,SAASG,SAASE,EAAAA,GAAIA,EAAAA;QAChC;aACK;AACL,aAAKA,KAAI,GAAGA,KAAIC,KAAKD,MAAK;AACxBP,UAAAA,IAAGf,KAAKiB,SAASG,SAASE,EAAAA,GAAIA,EAAAA;QAChC;;eAEOpB,SAASkB,QAAW,GAAA;AAC7BI,aAAO3B,OAAO2B,KAAKJ,QAAAA;AACnBG,YAAMC,KAAKC;AACX,WAAKH,KAAI,GAAGA,KAAIC,KAAKD,MAAK;AACxBP,QAAAA,IAAGf,KAAKiB,SAASG,SAASI,KAAKF,EAAAA,CAAE,GAAGE,KAAKF,EAAE,CAAA;MAC7C;;EAEJ;AAQO,WAASI,eAAeC,IAAuBC,IAAuB;AAC3E,QAAIN,IAAWO,MAAcC,IAAqBC;AAElD,QAAI,CAACJ,MAAM,CAACC,MAAMD,GAAGF,WAAWG,GAAGH,QAAQ;AACzC,aAAO;;AAGT,SAAKH,KAAI,GAAGO,OAAOF,GAAGF,QAAQH,KAAIO,MAAM,EAAEP,IAAG;AAC3CQ,WAAKH,GAAGL,EAAE;AACVS,WAAKH,GAAGN,EAAE;AAEV,UAAIQ,GAAGE,iBAAiBD,GAAGC,gBAAgBF,GAAGG,UAAUF,GAAGE,OAAO;AAChE,eAAO;;IAEX;AAEA,WAAO;EACT;AAMO,WAASC,OAASC,QAAc;AACrC,QAAIzC,QAAQyC,MAAS,GAAA;AACnB,aAAOA,OAAOC,IAAIF,MAAAA;;AAGpB,QAAIhC,SAASiC,MAAS,GAAA;AACpB,YAAME,SAASxC,uBAAOyC,OAAO,IAAI;AACjC,YAAMd,OAAO3B,OAAO2B,KAAKW,MAAAA;AACzB,YAAMI,OAAOf,KAAKC;AAClB,UAAIe,IAAI;AAER,aAAOA,IAAID,MAAM,EAAEC,GAAG;AACpBH,eAAOb,KAAKgB,CAAAA,CAAE,IAAIN,OAAMC,OAAOX,KAAKgB,CAAAA,CAAE,CAAC;MACzC;AAEA,aAAOH;;AAGT,WAAOF;EACT;AAEA,WAASM,WAAWC,KAAa;AAC/B,WAAO;MAAC;MAAa;MAAa;MAAeC,QAAQD,GAAAA,MAAS;EACpE;AAOO,WAASE,QAAQF,KAAaL,QAAmBF,QAAmBU,SAAoB;AAC7F,QAAI,CAACJ,WAAWC,GAAM,GAAA;AACpB;;AAGF,UAAMI,OAAOT,OAAOK,GAAI;AACxB,UAAMK,OAAOZ,OAAOO,GAAI;AAExB,QAAIxC,SAAS4C,IAAS5C,KAAAA,SAAS6C,IAAO,GAAA;AAEpCC,MAAAA,OAAMF,MAAMC,MAAMF,OAAAA;WACb;AACLR,aAAOK,GAAI,IAAGR,OAAMa,IAAAA;;EAExB;AA0BO,WAASC,OAASX,QAAWF,QAAqBU,SAAmC;AAC1F,UAAMI,UAAUvD,QAAQyC,MAAAA,IAAUA,SAAS;MAACA;IAAO;AACnD,UAAMN,OAAOoB,QAAQxB;AAErB,QAAI,CAACvB,SAASmC,MAAS,GAAA;AACrB,aAAOA;;AAGTQ,cAAUA,WAAW,CAAA;AACrB,UAAMK,SAASL,QAAQK,UAAUN;AACjC,QAAIO;AAEJ,aAAS7B,KAAI,GAAGA,KAAIO,MAAM,EAAEP,IAAG;AAC7B6B,gBAAUF,QAAQ3B,EAAE;AACpB,UAAI,CAACpB,SAASiD,OAAU,GAAA;AACtB;;AAGF,YAAM3B,OAAO3B,OAAO2B,KAAK2B,OAAAA;AACzB,eAASX,IAAI,GAAGD,OAAOf,KAAKC,QAAQe,IAAID,MAAM,EAAEC,GAAG;AACjDU,eAAO1B,KAAKgB,CAAE,GAAEH,QAAQc,SAASN,OAAAA;MACnC;IACF;AAEA,WAAOR;EACT;AAgBO,WAASe,QAAWf,QAAWF,QAAgC;AAEpE,WAAOa,OAASX,QAAQF,QAAQ;MAACe,QAAQG;IAAS,CAAA;EACpD;AAMO,WAASA,UAAUX,KAAaL,QAAmBF,QAAmB;AAC3E,QAAI,CAACM,WAAWC,GAAM,GAAA;AACpB;;AAGF,UAAMI,OAAOT,OAAOK,GAAI;AACxB,UAAMK,OAAOZ,OAAOO,GAAI;AAExB,QAAIxC,SAAS4C,IAAS5C,KAAAA,SAAS6C,IAAO,GAAA;AACpCK,cAAQN,MAAMC,IAAAA;eACL,CAAClD,OAAOC,UAAUwD,eAAetD,KAAKqC,QAAQK,GAAM,GAAA;AAC7DL,aAAOK,GAAI,IAAGR,OAAMa,IAAAA;;EAExB;AAaA,MAAMQ,eAAe;;IAEnB,IAAIC,CAAAA,MAAKA;;IAETC,GAAGC,CAAAA,OAAKA,GAAED;IACVE,GAAGD,CAAAA,OAAKA,GAAEC;EACZ;AAKO,WAASC,UAAUC,KAAa;AACrC,UAAMC,QAAQD,IAAIE,MAAM,GAAA;AACxB,UAAMC,OAAiB,CAAA;AACvB,QAAIC,MAAM;AACV,eAAWC,QAAQJ,OAAO;AACxBG,aAAOC;AACP,UAAID,IAAIE,SAAS,IAAO,GAAA;AACtBF,cAAMA,IAAIG,MAAM,GAAG,EAAM,IAAA;aACpB;AACLJ,aAAKK,KAAKJ,GAAAA;AACVA,cAAM;;IAEV;AACA,WAAOD;EACT;AAEA,WAASM,gBAAgBT,KAAa;AACpC,UAAMG,OAAOJ,UAAUC,GAAAA;AACvB,WAAOU,CAAAA,QAAO;AACZ,iBAAWC,KAAKR,MAAM;AACpB,YAAIQ,MAAM,IAAI;AAGZ;;AAEFD,cAAMA,OAAOA,IAAIC,CAAE;MACrB;AACA,aAAOD;IACT;EACF;AAEO,WAASE,iBAAiBF,KAAgBV,KAAkB;AACjE,UAAMa,WAAWnB,aAAaM,GAAI,MAAKN,aAAaM,GAAAA,IAAOS,gBAAgBT,GAAG;AAC9E,WAAOa,SAASH,GAAAA;EAClB;AAKO,WAASI,YAAYC,KAAa;AACvC,WAAOA,IAAIC,OAAO,CAAA,EAAGC,YAAW,IAAKF,IAAIR,MAAM,CAAA;EACjD;MAGaW,UAAU,CAACC,UAAmB,OAAOA,UAAU;MAE/CC,cAAa,CAACD,UAAqD,OAAOA,UAAU;AAGpFE,MAAAA,YAAY,CAAIC,IAAWC,OAAc;AACpD,QAAID,GAAEE,SAASD,GAAEC,MAAM;AACrB,aAAO;;AAGT,eAAWC,QAAQH,IAAG;AACpB,UAAI,CAACC,GAAEG,IAAID,IAAO,GAAA;AAChB,eAAO;;IAEX;AAEA,WAAO;EACT;AAMO,WAASE,cAAcC,IAAe;AAC3C,WAAOA,GAAEC,SAAS,aAAaD,GAAEC,SAAS,WAAWD,GAAEC,SAAS;EAClE;ACvZO,MAAMC,KAAKC,KAAKD;AAChB,MAAME,MAAM,IAAIF;AAChB,MAAMG,QAAQD,MAAMF;AACdI,MAAAA,WAAWC,OAAOC;AACxB,MAAMC,cAAcP,KAAK;AACzB,MAAMQ,UAAUR,KAAK;AACrB,MAAMS,aAAaT,KAAK;AAClBU,MAAAA,gBAAgBV,KAAK,IAAI;AAEzBW,MAAAA,QAAQV,KAAKU;AACbC,MAAAA,OAAOX,KAAKW;AAElB,WAASC,aAAa/C,GAAWE,IAAW8C,SAAiB;AAClE,WAAOb,KAAKc,IAAIjD,IAAIE,EAAK8C,IAAAA;EAC3B;AAKO,WAASE,QAAQC,QAAe;AACrC,UAAMC,eAAejB,KAAKkB,MAAMF,MAAAA;AAChCA,IAAAA,SAAQJ,aAAaI,QAAOC,cAAcD,SAAQ,GAAA,IAAQC,eAAeD;AACzE,UAAMG,YAAYnB,KAAKoB,IAAI,IAAIpB,KAAKqB,MAAMX,MAAMM,MAAAA,CAAAA,CAAAA;AAChD,UAAMM,WAAWN,SAAQG;AACzB,UAAMI,eAAeD,YAAY,IAAI,IAAIA,YAAY,IAAI,IAAIA,YAAY,IAAI,IAAI;AACjF,WAAOC,eAAeJ;EACxB;AAMO,WAASK,WAAWpC,OAAe;AACxC,UAAMqC,SAAmB,CAAA;AACzB,UAAMC,OAAO1B,KAAK0B,KAAKtC,KAAAA;AACvB,QAAIuC;AAEJ,SAAKA,KAAI,GAAGA,KAAID,MAAMC,MAAK;AACzB,UAAIvC,QAAQuC,OAAM,GAAG;AACnBF,eAAOhD,KAAKkD,EAAAA;AACZF,eAAOhD,KAAKW,QAAQuC,EAAAA;;IAExB;AACA,QAAID,UAAUA,OAAO,IAAI;AACvBD,aAAOhD,KAAKiD,IAAAA;;AAGdD,WAAOG,KAAK,CAACrC,IAAGC,OAAMD,KAAIC,EAAAA,EAAGqC,IAAG;AAChC,WAAOJ;EACT;AAKA,WAASK,eAAeC,IAAY;AAClC,WAAO,OAAOA,OAAM,YAAa,OAAOA,OAAM,YAAYA,OAAM,QAAQ,EAAEC,OAAOC,eAAeF,MAAK,cAAcA,MAAK,aAAaA;EACvI;AAEO,WAASG,SAASH,IAAyB;AAChD,WAAO,CAACD,eAAeC,EAAAA,KAAM,CAACI,MAAMC,WAAWL,EAAAA,CAAAA,KAAiBM,SAASN,EAAAA;EAC3E;AAEO,WAASO,YAAYzE,GAAWgD,SAAiB;AACtD,UAAM0B,UAAUvC,KAAKkB,MAAMrD,CAAAA;AAC3B,WAAO,UAAYgD,WAAYhD,KAAQ0E,UAAU1B,WAAYhD;EAC/D;AAKO,WAAS2E,mBACdC,OACAC,QACAC,UACA;AACA,QAAIhB,IAAWiB,MAAcxD;AAE7B,SAAKuC,KAAI,GAAGiB,OAAOH,MAAMI,QAAQlB,KAAIiB,MAAMjB,MAAK;AAC9CvC,cAAQqD,MAAMd,EAAE,EAACgB,QAAS;AAC1B,UAAI,CAACR,MAAM/C,KAAQ,GAAA;AACjBsD,eAAOI,MAAM9C,KAAK8C,IAAIJ,OAAOI,KAAK1D,KAAAA;AAClCsD,eAAOK,MAAM/C,KAAK+C,IAAIL,OAAOK,KAAK3D,KAAAA;;IAEtC;EACF;AAEO,WAAS4D,UAAUC,SAAiB;AACzC,WAAOA,WAAWlD,KAAK;EACzB;AAEO,WAASmD,UAAUC,SAAiB;AACzC,WAAOA,WAAW,MAAMpD;EAC1B;AASO,WAASqD,eAAevF,GAAW;AACxC,QAAI,CAACwF,eAAexF,CAAI,GAAA;AACtB;;AAEF,QAAIgC,KAAI;AACR,QAAIyD,KAAI;AACR,WAAOtD,KAAKkB,MAAMrD,IAAIgC,EAAAA,IAAKA,OAAMhC,GAAG;AAClCgC,MAAAA,MAAK;AACLyD,MAAAA;IACF;AACA,WAAOA;EACT;AAGO,WAASC,kBACdC,aACAC,YACA;AACA,UAAMC,sBAAsBD,WAAW5F,IAAI2F,YAAY3F;AACvD,UAAM8F,sBAAsBF,WAAW1F,IAAIyF,YAAYzF;AACvD,UAAM6F,2BAA2B5D,KAAK0B,KAAKgC,sBAAsBA,sBAAsBC,sBAAsBA,mBAAAA;AAE7G,QAAIE,QAAQ7D,KAAK8D,MAAMH,qBAAqBD,mBAAAA;AAE5C,QAAIG,QAAS,OAAO9D,IAAK;AACvB8D,eAAS5D;;AAGX,WAAO;MACL4D;MACAE,UAAUH;IACZ;EACF;AAEO,WAASI,sBAAsBC,KAAYC,KAAY;AAC5D,WAAOlE,KAAK0B,KAAK1B,KAAKoB,IAAI8C,IAAIrG,IAAIoG,IAAIpG,GAAG,CAAA,IAAKmC,KAAKoB,IAAI8C,IAAInG,IAAIkG,IAAIlG,GAAG,CAAA,CAAA;EACxE;AAMO,WAASoG,WAAW5E,IAAWC,IAAW;AAC/C,YAAQD,KAAIC,KAAIU,SAASD,MAAMF;EACjC;AAMO,WAASqE,gBAAgB7E,IAAW;AACzC,YAAQA,KAAIU,MAAMA,OAAOA;EAC3B;AAKO,WAASoE,cAAcR,OAAeS,QAAeC,MAAaC,uBAAiC;AACxG,UAAMjF,KAAI6E,gBAAgBP,KAAAA;AAC1B,UAAMY,KAAIL,gBAAgBE,MAAAA;AAC1B,UAAMzE,KAAIuE,gBAAgBG,IAAAA;AAC1B,UAAMG,eAAeN,gBAAgBK,KAAIlF,EAAAA;AACzC,UAAMoF,aAAaP,gBAAgBvE,KAAIN,EAAAA;AACvC,UAAMqF,eAAeR,gBAAgB7E,KAAIkF,EAAAA;AACzC,UAAMI,aAAaT,gBAAgB7E,KAAIM,EAAAA;AACvC,WAAON,OAAMkF,MAAKlF,OAAMM,MAAM2E,yBAAyBC,OAAM5E,MACvD6E,eAAeC,cAAcC,eAAeC;EACpD;AASO,WAASC,YAAY1F,OAAe0D,MAAaC,MAAa;AACnE,WAAO/C,KAAK+C,IAAID,MAAK9C,KAAK8C,IAAIC,MAAK3D,KAAAA,CAAAA;EACrC;AAMO,WAAS2F,YAAY3F,OAAe;AACzC,WAAO0F,YAAY1F,OAAO,QAAQ,KAAA;EACpC;AASO,WAAS4F,WAAW5F,OAAekF,QAAeC,MAAa1D,UAAU,MAAM;AACpF,WAAOzB,SAASY,KAAK8C,IAAIwB,QAAOC,IAAAA,IAAO1D,WAAWzB,SAASY,KAAK+C,IAAIuB,QAAOC,IAAO1D,IAAAA;EACpF;AC3LO,WAASoE,QACdC,OACA9F,OACA+F,KACA;AACAA,UAAMA,QAAQ,CAACC,WAAUF,MAAME,MAAAA,IAAShG;AACxC,QAAIiG,KAAKH,MAAMrC,SAAS;AACxB,QAAIyC,KAAK;AACT,QAAIC;AAEJ,WAAOF,KAAKC,KAAK,GAAG;AAClBC,YAAOD,KAAKD,MAAO;AACnB,UAAIF,IAAII,GAAM,GAAA;AACZD,aAAKC;aACA;AACLF,aAAKE;;IAET;AAEA,WAAO;MAACD;MAAID;IAAE;EAChB;AAUO,MAAMG,eAAe,CAC1BN,OACAjH,KACAmB,OACAqG,SAEAR,QAAQC,OAAO9F,OAAOqG,OAClBL,CAAAA,WAAS;AACT,UAAMM,KAAKR,MAAME,MAAAA,EAAOnH,GAAI;AAC5B,WAAOyH,KAAKtG,SAASsG,OAAOtG,SAAS8F,MAAME,SAAQ,CAAA,EAAGnH,GAAAA,MAASmB;MAE/DgG,CAAAA,WAASF,MAAME,MAAAA,EAAOnH,GAAAA,IAAOmB,KAAK;AAS3BuG,MAAAA,gBAAgB,CAC3BT,OACAjH,KACAmB,UAEA6F,QAAQC,OAAO9F,OAAOgG,CAAAA,WAASF,MAAME,MAAAA,EAAOnH,GAAAA,KAAQmB,KAAO;AAStD,WAASwG,eAAeC,QAAkB/C,MAAaC,MAAa;AACzE,QAAIuB,SAAQ;AACZ,QAAIC,OAAMsB,OAAOhD;AAEjB,WAAOyB,SAAQC,QAAOsB,OAAOvB,MAAAA,IAASxB,MAAK;AACzCwB,MAAAA;IACF;AACA,WAAOC,OAAMD,UAASuB,OAAOtB,OAAM,CAAA,IAAKxB,MAAK;AAC3CwB,MAAAA;IACF;AAEA,WAAOD,SAAQ,KAAKC,OAAMsB,OAAOhD,SAC7BgD,OAAOrH,MAAM8F,QAAOC,IAAAA,IACpBsB;EACN;AAEA,MAAMC,cAAc;IAAC;IAAQ;IAAO;IAAS;IAAU;EAAU;AAgB1D,WAASC,kBAAkBtD,OAAOuD,UAAU;AACjD,QAAIvD,MAAMwD,UAAU;AAClBxD,YAAMwD,SAASC,UAAUzH,KAAKuH,QAAAA;AAC9B;;AAGFG,WAAOC,eAAe3D,OAAO,YAAY;MACvC4D,cAAc;MACdC,YAAY;MACZlH,OAAO;QACL8G,WAAW;UAACF;QAAS;MACvB;IACF,CAAA;AAEAF,gBAAYS,QAAQ,CAACtI,QAAQ;AAC3B,YAAMuI,SAAS,YAAYzH,YAAYd,GAAAA;AACvC,YAAMwI,OAAOhE,MAAMxE,GAAI;AAEvBkI,aAAOC,eAAe3D,OAAOxE,KAAK;QAChCoI,cAAc;QACdC,YAAY;QACZlH,SAASsH,MAAM;AACb,gBAAMC,MAAMF,KAAKG,MAAM,MAAMF,IAAAA;AAE7BjE,gBAAMwD,SAASC,UAAUK,QAAQ,CAACM,WAAW;AAC3C,gBAAI,OAAOA,OAAOL,MAAAA,MAAY,YAAY;AACxCK,qBAAOL,MAAAA,EAAWE,GAAAA,IAAAA;;UAEtB,CAAA;AAEA,iBAAOC;QACT;MACF,CAAA;IACF,CAAA;EACF;AAQO,WAASG,oBAAoBrE,OAAOuD,UAAU;AACnD,UAAMe,OAAOtE,MAAMwD;AACnB,QAAI,CAACc,MAAM;AACT;;AAGF,UAAMb,YAAYa,KAAKb;AACvB,UAAMd,SAAQc,UAAUc,QAAQhB,QAAAA;AAChC,QAAIZ,WAAU,IAAI;AAChBc,gBAAUe,OAAO7B,QAAO,CAAA;;AAG1B,QAAIc,UAAUrD,SAAS,GAAG;AACxB;;AAGFiD,gBAAYS,QAAQ,CAACtI,QAAQ;AAC3B,aAAOwE,MAAMxE,GAAI;IACnB,CAAA;AAEA,WAAOwE,MAAMwD;EACf;AAKO,WAASiB,aAAgBC,OAAY;AAC1C,UAAMC,OAAM,IAAIC,IAAOF,KAAAA;AAEvB,QAAIC,KAAI3H,SAAS0H,MAAMtE,QAAQ;AAC7B,aAAOsE;;AAGT,WAAOG,MAAMC,KAAKH,IAAAA;EACpB;AClLaI,MAAAA,oBAAoB,WAAW;AAC1C,QAAI,OAAOC,WAAW,aAAa;AACjC,aAAO,SAASC,WAAU;AACxB,eAAOA,UAAAA;MACT;;AAEF,WAAOD,OAAOE;EAChB,GAAK;AAME,WAASC,UACdC,KACAC,SACA;AACA,QAAIC,YAAY,CAAA;AAChB,QAAIC,UAAU;AAEd,WAAO,YAAYC,MAAa;AAE9BF,kBAAYE;AACZ,UAAI,CAACD,SAAS;AACZA,kBAAU;AACVR,yBAAiBU,KAAKT,QAAQ,MAAM;AAClCO,oBAAU;AACVH,UAAAA,IAAGM,MAAML,SAASC,SAAAA;QACpB,CAAA;;IAEJ;EACF;AAKO,WAASK,UAAmCP,KAA8BQ,OAAe;AAC9F,QAAIC;AACJ,WAAO,YAAYL,MAAa;AAC9B,UAAII,OAAO;AACTE,qBAAaD,OAAAA;AACbA,kBAAUE,WAAWX,KAAIQ,OAAOJ,IAAAA;aAC3B;AACLJ,QAAAA,IAAGM,MAAM,MAAMF,IAAAA;;AAEjB,aAAOI;IACT;EACF;AAMO,MAAMI,qBAAqB,CAACC,UAAsCA,UAAU,UAAU,SAASA,UAAU,QAAQ,UAAU;AAMrHC,MAAAA,iBAAiB,CAACD,OAAmCE,QAAeC,SAAgBH,UAAU,UAAUE,SAAQF,UAAU,QAAQG,QAAOD,SAAQC,QAAO;AAMxJC,MAAAA,SAAS,CAACJ,OAAoCK,OAAcC,QAAeC,QAAiB;AACvG,UAAMC,QAAQD,MAAM,SAAS;AAC7B,WAAOP,UAAUQ,QAAQF,SAAQN,UAAU,YAAYK,QAAOC,UAAS,IAAID;EAC7E;AAMO,WAASI,iCAAiCC,MAAqCC,QAAwBC,oBAA6B;AACzI,UAAMC,aAAaF,OAAOG;AAE1B,QAAIZ,SAAQ;AACZ,QAAIa,QAAQF;AAEZ,QAAIH,KAAKM,SAAS;AAChB,YAAM,EAACC,QAAQC,QAAQC,QAAAA,IAAWT;AAClC,YAAMU,WAAWV,KAAKW,UAAUX,KAAKW,QAAQC,UAAUZ,KAAKW,QAAQC,QAAQF,WAAW,OAAO;AAC9F,YAAMG,OAAON,OAAOM;AACpB,YAAM,EAACC,KAAAA,MAAKC,KAAAA,MAAKC,YAAYC,WAAU,IAAIV,OAAOW,cAAa;AAE/D,UAAIF,YAAY;AACdxB,QAAAA,SAAQ2B,KAAKL;;UAEXM,aAAaX,SAASI,MAAMC,IAAKO,EAAAA;;UAEjCnB,qBAAqBC,aAAaiB,aAAanB,QAAQY,MAAMN,OAAOe,iBAAiBR,IAAAA,CAAAA,EAAMO;QAAE;AAC/F,YAAIX,UAAU;AACZ,gBAAMa,sBAAuBd,QAC1Be,MAAM,GAAGhC,SAAQ,CAAA,EACjBiC,QAAO,EACPC,UACCC,CAAAA,UAAS,CAACC,cAAcD,MAAMnB,OAAOK,IAAI,CAAC,CAAA;AAC9CrB,UAAAA,UAAS2B,KAAKJ,IAAI,GAAGQ,mBAAAA;;AAEvB/B,QAAAA,SAAQqC,YAAYrC,QAAO,GAAGW,aAAa,CAAA;;AAE7C,UAAIc,YAAY;AACd,YAAIxB,OAAM0B,KAAKJ;;UAEbK,aAAaX,SAASF,OAAOM,MAAME,MAAK,IAAI,EAAEe,KAAK;;UAEnD5B,qBAAqB,IAAIkB,aAAanB,QAAQY,MAAMN,OAAOe,iBAAiBP,IAAAA,GAAM,IAAI,EAAEe,KAAK;QAAC;AAChG,YAAIpB,UAAU;AACZ,gBAAMqB,sBAAuBtB,QAC1Be,MAAM/B,OAAM,CAAA,EACZiC,UACCC,CAAAA,UAAS,CAACC,cAAcD,MAAMnB,OAAOK,IAAI,CAAC,CAAA;AAC9CpB,UAAAA,QAAO0B,KAAKJ,IAAI,GAAGgB,mBAAAA;;AAErB1B,gBAAQwB,YAAYpC,MAAKD,QAAOW,UAAcX,IAAAA;aACzC;AACLa,gBAAQF,aAAaX;;;AAIzB,WAAO;MAACA,OAAAA;MAAOa;IAAK;EACtB;AAQO,WAAS2B,oBAAoBhC,MAAM;AACxC,UAAM,EAACiC,QAAQC,QAAQC,aAAAA,IAAgBnC;AACvC,UAAMoC,YAAY;MAChBC,MAAMJ,OAAOnB;MACbwB,MAAML,OAAOlB;MACbwB,MAAML,OAAOpB;MACb0B,MAAMN,OAAOnB;IACf;AACA,QAAI,CAACoB,cAAc;AACjBnC,WAAKmC,eAAeC;AACpB,aAAO;;AAET,UAAMK,UAAUN,aAAaE,SAASJ,OAAOnB,OAC1CqB,aAAaG,SAASL,OAAOlB,OAC7BoB,aAAaI,SAASL,OAAOpB,OAC7BqB,aAAaK,SAASN,OAAOnB;AAEhC2B,WAAOC,OAAOR,cAAcC,SAAAA;AAC5B,WAAOK;EACT;AChKA,MAAMG,SAAS,CAACC,OAAcA,OAAM,KAAKA,OAAM;AAC/C,MAAMC,YAAY,CAACD,IAAWE,IAAWC,OAAc,EAAE7B,KAAK8B,IAAI,GAAG,MAAMJ,MAAK,EAAM1B,IAAAA,KAAK+B,KAAKL,KAAIE,MAAKI,MAAMH,EAAC;AAChH,MAAMI,aAAa,CAACP,IAAWE,IAAWC,OAAc7B,KAAK8B,IAAI,GAAG,MAAMJ,EAAK1B,IAAAA,KAAK+B,KAAKL,KAAIE,MAAKI,MAAMH,EAAK,IAAA;AAM5G,MACKK,UAAU;IACdC,QAAQ,CAACT,OAAcA;IAEvBU,YAAY,CAACV,OAAcA,KAAIA;IAE/BW,aAAa,CAACX,OAAc,CAACA,MAAKA,KAAI;IAEtCY,eAAe,CAACZ,QAAgBA,MAAK,OAAO,IACxC,MAAMA,KAAIA,KACV,QAAS,EAAEA,MAAMA,KAAI,KAAK;IAE9Ba,aAAa,CAACb,OAAcA,KAAIA,KAAIA;IAEpCc,cAAc,CAACd,QAAeA,MAAK,KAAKA,KAAIA,KAAI;IAEhDe,gBAAgB,CAACf,QAAgBA,MAAK,OAAO,IACzC,MAAMA,KAAIA,KAAIA,KACd,QAAQA,MAAK,KAAKA,KAAIA,KAAI;IAE9BgB,aAAa,CAAChB,OAAcA,KAAIA,KAAIA,KAAIA;IAExCiB,cAAc,CAACjB,OAAc,GAAGA,MAAK,KAAKA,KAAIA,KAAIA,KAAI;IAEtDkB,gBAAgB,CAAClB,QAAgBA,MAAK,OAAO,IACzC,MAAMA,KAAIA,KAAIA,KAAIA,KAClB,SAASA,MAAK,KAAKA,KAAIA,KAAIA,KAAI;IAEnCmB,aAAa,CAACnB,OAAcA,KAAIA,KAAIA,KAAIA,KAAIA;IAE5CoB,cAAc,CAACpB,QAAeA,MAAK,KAAKA,KAAIA,KAAIA,KAAIA,KAAI;IAExDqB,gBAAgB,CAACrB,QAAgBA,MAAK,OAAO,IACzC,MAAMA,KAAIA,KAAIA,KAAIA,KAAIA,KACtB,QAAQA,MAAK,KAAKA,KAAIA,KAAIA,KAAIA,KAAI;IAEtCsB,YAAY,CAACtB,OAAc,CAAC1B,KAAKiD,IAAIvB,KAAIwB,OAAW,IAAA;IAEpDC,aAAa,CAACzB,OAAc1B,KAAK+B,IAAIL,KAAIwB,OAAAA;IAEzCE,eAAe,CAAC1B,OAAc,QAAQ1B,KAAKiD,IAAII,KAAK3B,EAAAA,IAAK;IAEzD4B,YAAY,CAAC5B,OAAcA,OAAO,IAAK,IAAI1B,KAAK8B,IAAI,GAAG,MAAMJ,KAAI,EAAG;IAEpE6B,aAAa,CAAC7B,OAAcA,OAAO,IAAK,IAAI,CAAC1B,KAAK8B,IAAI,GAAG,MAAMJ,EAAAA,IAAK;IAEpE8B,eAAe,CAAC9B,OAAcD,OAAOC,EAAAA,IAAKA,KAAIA,KAAI,MAC9C,MAAM1B,KAAK8B,IAAI,GAAG,MAAMJ,KAAI,IAAI,EAAA,IAChC,OAAO,CAAC1B,KAAK8B,IAAI,GAAG,OAAOJ,KAAI,IAAI,EAAA,IAAM;IAE7C+B,YAAY,CAAC/B,OAAcA,MAAM,IAAKA,KAAI,EAAE1B,KAAK0D,KAAK,IAAIhC,KAAIA,EAAAA,IAAK;IAEnEiC,aAAa,CAACjC,OAAc1B,KAAK0D,KAAK,KAAKhC,MAAK,KAAKA,EAAAA;IAErDkC,eAAe,CAAClC,QAAgBA,MAAK,OAAO,IACxC,QAAQ1B,KAAK0D,KAAK,IAAIhC,KAAIA,EAAAA,IAAK,KAC/B,OAAO1B,KAAK0D,KAAK,KAAKhC,MAAK,KAAKA,EAAAA,IAAK;IAEzCmC,eAAe,CAACnC,OAAcD,OAAOC,EAAAA,IAAKA,KAAIC,UAAUD,IAAG,OAAO,GAAI;IAEtEoC,gBAAgB,CAACpC,OAAcD,OAAOC,EAAAA,IAAKA,KAAIO,WAAWP,IAAG,OAAO,GAAI;IAExEqC,iBAAiBrC,IAAW;AAC1B,YAAME,KAAI;AACV,YAAMC,KAAI;AACV,aAAOJ,OAAOC,EAAKA,IAAAA,KACjBA,KAAI,MACA,MAAMC,UAAUD,KAAI,GAAGE,IAAGC,EAAAA,IAC1B,MAAM,MAAMI,WAAWP,KAAI,IAAI,GAAGE,IAAGC,EAAE;IAC/C;IAEAmC,WAAWtC,IAAW;AACpB,YAAME,KAAI;AACV,aAAOF,KAAIA,OAAME,KAAI,KAAKF,KAAIE;IAChC;IAEAqC,YAAYvC,IAAW;AACrB,YAAME,KAAI;AACV,cAAQF,MAAK,KAAKA,OAAME,KAAI,KAAKF,KAAIE,MAAK;IAC5C;IAEAsC,cAAcxC,IAAW;AACvB,UAAIE,KAAI;AACR,WAAKF,MAAK,OAAO,GAAG;AAClB,eAAO,OAAOA,KAAIA,QAAOE,MAAM,SAAU,KAAKF,KAAIE;;AAEpD,aAAO,QAAQF,MAAK,KAAKA,QAAOE,MAAM,SAAU,KAAKF,KAAIE,MAAK;IAChE;IAEAuC,cAAc,CAACzC,OAAc,IAAIQ,QAAQkC,cAAc,IAAI1C,EAAAA;IAE3D0C,cAAc1C,IAAW;AACvB,YAAM2C,KAAI;AACV,YAAMC,KAAI;AACV,UAAI5C,KAAK,IAAI4C,IAAI;AACf,eAAOD,KAAI3C,KAAIA;;AAEjB,UAAIA,KAAK,IAAI4C,IAAI;AACf,eAAOD,MAAK3C,MAAM,MAAM4C,MAAM5C,KAAI;;AAEpC,UAAIA,KAAK,MAAM4C,IAAI;AACjB,eAAOD,MAAK3C,MAAM,OAAO4C,MAAM5C,KAAI;;AAErC,aAAO2C,MAAK3C,MAAM,QAAQ4C,MAAM5C,KAAI;IACtC;IAEA6C,iBAAiB,CAAC7C,OAAeA,KAAI,MACjCQ,QAAQiC,aAAazC,KAAI,CAAK,IAAA,MAC9BQ,QAAQkC,cAAc1C,KAAI,IAAI,CAAA,IAAK,MAAM;EAC/C;ACrHO,WAAS8C,oBAAoBC,OAAyD;AAC3F,QAAIA,SAAS,OAAOA,UAAU,UAAU;AACtC,YAAMC,OAAOD,MAAME,SAAQ;AAC3B,aAAOD,SAAS,4BAA4BA,SAAS;;AAGvD,WAAO;EACT;AAWO,WAASE,MAAMH,OAAO;AAC3B,WAAOD,oBAAoBC,KAAAA,IAASA,QAAQ,IAAII,MAAMJ,KAAM;EAC9D;AAKO,WAASK,cAAcL,OAAO;AACnC,WAAOD,oBAAoBC,KAAAA,IACvBA,QACA,IAAII,MAAMJ,KAAAA,EAAOM,SAAS,GAAKC,EAAAA,OAAO,GAAA,EAAKC,UAAS;EAC1D;AC/BA,MAAMC,UAAU;IAAC;IAAK;IAAK;IAAe;IAAU;EAAU;AAC9D,MAAMC,SAAS;IAAC;IAAS;IAAe;EAAkB;AAEnD,WAASC,wBAAwBC,WAAU;AAChDA,IAAAA,UAASC,IAAI,aAAa;MACxBxH,OAAOyH;MACPC,UAAU;MACVC,QAAQ;MACRnI,IAAIiI;MACJG,MAAMH;MACNI,MAAMJ;MACNK,IAAIL;MACJb,MAAMa;IACR,CAAA;AAEAF,IAAAA,UAASQ,SAAS,aAAa;MAC7BC,WAAW;MACXC,YAAY;MACZC,aAAa,CAACC,SAASA,SAAS,gBAAgBA,SAAS,gBAAgBA,SAAS;IACpF,CAAA;AAEAZ,IAAAA,UAASC,IAAI,cAAc;MACzBH,QAAQ;QACNT,MAAM;QACNwB,YAAYf;MACd;MACAD,SAAS;QACPR,MAAM;QACNwB,YAAYhB;MACd;IACF,CAAA;AAEAG,IAAAA,UAASQ,SAAS,cAAc;MAC9BC,WAAW;IACb,CAAA;AAEAT,IAAAA,UAASC,IAAI,eAAe;MAC1Ba,QAAQ;QACNC,WAAW;UACTZ,UAAU;QACZ;MACF;MACAa,QAAQ;QACND,WAAW;UACTZ,UAAU;QACZ;MACF;MACAc,MAAM;QACJC,YAAY;UACVpB,QAAQ;YACNO,MAAM;UACR;UACAc,SAAS;YACP9B,MAAM;YACNc,UAAU;UACZ;QACF;MACF;MACAiB,MAAM;QACJF,YAAY;UACVpB,QAAQ;YACNS,IAAI;UACN;UACAY,SAAS;YACP9B,MAAM;YACNe,QAAQ;YACRnI,IAAIoJ,CAAAA,MAAKA,IAAI;UACf;QACF;MACF;IACF,CAAA;EACF;ACvEO,WAASC,qBAAqBtB,WAAU;AAC7CA,IAAAA,UAASC,IAAI,UAAU;MACrBsB,aAAa;MACbC,SAAS;QACPC,KAAK;QACLrI,OAAO;QACPsI,QAAQ;QACRvI,MAAM;MACR;IACF,CAAA;EACF;ACTA,MAAMwI,YAAY,oBAAIC,IAAAA;AAEtB,WAASC,gBAAgBC,QAAgB1H,SAAoC;AAC3EA,cAAUA,WAAW,CAAA;AACrB,UAAM2H,WAAWD,SAASE,KAAKC,UAAU7H,OAAAA;AACzC,QAAI8H,YAAYP,UAAUQ,IAAIJ,QAAAA;AAC9B,QAAI,CAACG,WAAW;AACdA,kBAAY,IAAIE,KAAKC,aAAaP,QAAQ1H,OAAAA;AAC1CuH,gBAAU1B,IAAI8B,UAAUG,SAAAA;;AAE1B,WAAOA;EACT;AAEO,WAASI,cAAaC,KAAaT,QAAgB1H,SAAoC;AAC5F,WAAOyH,gBAAgBC,QAAQ1H,OAASoI,EAAAA,OAAOD,GAAAA;EACjD;ACRA,MAAME,aAAa;IAOjBC,OAAOtD,OAAO;AACZ,aAAOuD,QAAQvD,KAAS,IAAyBA,QAAS,KAAKA;IACjE;IAUAwD,QAAQC,WAAWC,QAAOC,OAAO;AAC/B,UAAIF,cAAc,GAAG;AACnB,eAAO;;AAGT,YAAMf,SAAS,KAAKkB,MAAM5I,QAAQ0H;AAClC,UAAImB;AACJ,UAAIC,QAAQL;AAEZ,UAAIE,MAAMnJ,SAAS,GAAG;AAEpB,cAAMuJ,UAAUxI,KAAKJ,IAAII,KAAKyI,IAAIL,MAAM,CAAE,EAAC3D,KAAK,GAAGzE,KAAKyI,IAAIL,MAAMA,MAAMnJ,SAAS,CAAE,EAACwF,KAAK,CAAA;AACzF,YAAI+D,UAAU,QAAQA,UAAU,MAAO;AACrCF,qBAAW;;AAGbC,gBAAQG,eAAeR,WAAWE,KAAAA;;AAGpC,YAAMO,WAAWC,MAAM5I,KAAKyI,IAAIF,KAAAA,CAAAA;AAOhC,YAAMM,aAAaC,MAAMH,QAAAA,IAAY,IAAI3I,KAAKJ,IAAII,KAAKL,IAAI,KAAKK,KAAK+I,MAAMJ,QAAAA,GAAW,EAAA,GAAK,CAAE;AAE7F,YAAMlJ,UAAU;QAAC6I;QAAUU,uBAAuBH;QAAYI,uBAAuBJ;MAAU;AAC/FtH,aAAOC,OAAO/B,SAAS,KAAKA,QAAQ2I,MAAMP,MAAM;AAEhD,aAAOF,cAAaO,WAAWf,QAAQ1H,OAAAA;IACzC;IAWAyJ,YAAYhB,WAAWC,QAAOC,OAAO;AACnC,UAAIF,cAAc,GAAG;AACnB,eAAO;;AAET,YAAMiB,SAASf,MAAMD,MAAAA,EAAOiB,eAAgBlB,YAAalI,KAAK8B,IAAI,IAAI9B,KAAK+I,MAAMH,MAAMV,SAAAA,CAAAA,CAAAA;AACvF,UAAI;QAAC;QAAG;QAAG;QAAG;QAAG;QAAI;MAAG,EAACmB,SAASF,MAAAA,KAAWhB,SAAQ,MAAMC,MAAMnJ,QAAQ;AACvE,eAAO6I,WAAWG,QAAQtK,KAAK,MAAMuK,WAAWC,QAAOC,KAAAA;;AAEzD,aAAO;IACT;EAEF;AAGA,WAASM,eAAeR,WAAWE,OAAO;AAGxC,QAAIG,QAAQH,MAAMnJ,SAAS,IAAImJ,MAAM,CAAE,EAAC3D,QAAQ2D,MAAM,CAAE,EAAC3D,QAAQ2D,MAAM,CAAE,EAAC3D,QAAQ2D,MAAM,CAAE,EAAC3D;AAG3F,QAAIzE,KAAKyI,IAAIF,KAAAA,KAAU,KAAKL,cAAclI,KAAK+I,MAAMb,SAAY,GAAA;AAE/DK,cAAQL,YAAYlI,KAAK+I,MAAMb,SAAAA;;AAEjC,WAAOK;EACT;AAMA,MAAA,QAAe;IAACT;EAAU;ACnGnB,WAASwB,mBAAmBjE,WAAU;AAC3CA,IAAAA,UAASC,IAAI,SAAS;MACpBiE,SAAS;MACTC,QAAQ;MACRlJ,SAAS;MACTmJ,aAAa;MASbC,QAAQ;MAERC,MAAM;MAMNC,OAAO;MAGPC,MAAM;QACJN,SAAS;QACTO,WAAW;QACXC,iBAAiB;QACjBC,WAAW;QACXC,YAAY;QACZC,WAAW,CAACC,MAAM1K,YAAYA,QAAQqK;QACtCM,WAAW,CAACD,MAAM1K,YAAYA,QAAQmF;QACtC4E,QAAQ;MACV;MAEAa,QAAQ;QACNd,SAAS;QACTe,MAAM,CAAA;QACNC,YAAY;QACZC,OAAO;MACT;MAGAC,OAAO;QAELlB,SAAS;QAGTmB,MAAM;QAGN7D,SAAS;UACPC,KAAK;UACLC,QAAQ;QACV;MACF;MAGAqB,OAAO;QACLuC,aAAa;QACbC,aAAa;QACbC,QAAQ;QACRC,iBAAiB;QACjBC,iBAAiB;QACjBlE,SAAS;QACT0C,SAAS;QACTyB,UAAU;QACVC,iBAAiB;QACjBC,aAAa;QAEb/N,UAAUgO,MAAMrD,WAAWC;QAC3BqD,OAAO,CAAA;QACPC,OAAO,CAAA;QACPlN,OAAO;QACPmN,YAAY;QAEZC,mBAAmB;QACnBC,eAAe;QACfC,iBAAiB;MACnB;IACF,CAAA;AAEApG,IAAAA,UAASqG,MAAM,eAAe,SAAS,IAAI,OAAA;AAC3CrG,IAAAA,UAASqG,MAAM,cAAc,SAAS,IAAI,aAAA;AAC1CrG,IAAAA,UAASqG,MAAM,gBAAgB,SAAS,IAAI,aAAA;AAC5CrG,IAAAA,UAASqG,MAAM,eAAe,SAAS,IAAI,OAAA;AAE3CrG,IAAAA,UAASQ,SAAS,SAAS;MACzBC,WAAW;MACXE,aAAa,CAACC,SAAS,CAACA,KAAK0F,WAAW,QAAA,KAAa,CAAC1F,KAAK0F,WAAW,OAAY1F,KAAAA,SAAS,cAAcA,SAAS;MAClHF,YAAY,CAACE,SAASA,SAAS,gBAAgBA,SAAS,oBAAoBA,SAAS;IACvF,CAAA;AAEAZ,IAAAA,UAASQ,SAAS,UAAU;MAC1BC,WAAW;IACb,CAAA;AAEAT,IAAAA,UAASQ,SAAS,eAAe;MAC/BG,aAAa,CAACC,SAASA,SAAS,qBAAqBA,SAAS;MAC9DF,YAAY,CAACE,SAASA,SAAS;IACjC,CAAA;EACF;MClGa2F,YAAYrK,uBAAOsK,OAAO,IAAI;MAC9BC,cAAcvK,uBAAOsK,OAAO,IAAI;AAO7C,WAASE,WAASC,MAAMC,KAAK;AAC3B,QAAI,CAACA,KAAK;AACR,aAAOD;;AAET,UAAME,OAAOD,IAAIE,MAAM,GAAA;AACvB,aAASC,KAAI,GAAGC,KAAIH,KAAKjN,QAAQmN,KAAIC,IAAG,EAAED,IAAG;AAC3C,YAAME,IAAIJ,KAAKE,EAAE;AACjBJ,aAAOA,KAAKM,CAAE,MAAKN,KAAKM,CAAAA,IAAK/K,uBAAOsK,OAAO,IAAI;IACjD;AACA,WAAOG;EACT;AAEA,WAAS1G,IAAIiH,MAAMC,OAAOzE,QAAQ;AAChC,QAAI,OAAOyE,UAAU,UAAU;AAC7B,aAAOC,OAAMV,WAASQ,MAAMC,KAAQzE,GAAAA,MAAAA;;AAEtC,WAAO0E,OAAMV,WAASQ,MAAM,EAAKC,GAAAA,KAAAA;EACnC;AAMO,MAAME,WAAN,MAAMA;IACXC,YAAYC,eAAcC,WAAW;AACnC,WAAKzG,YAAYb;AACjB,WAAKuH,kBAAkB;AACvB,WAAKC,cAAc;AACnB,WAAKnI,QAAQ;AACb,WAAKoI,WAAW,CAAA;AAChB,WAAKC,mBAAmB,CAACC,YAAYA,QAAQ7E,MAAM8E,SAASC,oBAAmB;AAC/E,WAAKC,WAAW,CAAA;AAChB,WAAKC,SAAS;QACZ;QACA;QACA;QACA;QACA;MACD;AACD,WAAKC,OAAO;QACVC,QAAQ;QACRC,MAAM;QACNC,OAAO;QACPC,YAAY;QACZC,QAAQ;MACV;AACA,WAAKC,QAAQ,CAAA;AACb,WAAKC,uBAAuB,CAACC,KAAKtO,YAAYqF,cAAcrF,QAAQqN,eAAe;AACnF,WAAKkB,mBAAmB,CAACD,KAAKtO,YAAYqF,cAAcrF,QAAQsN,WAAW;AAC3E,WAAKkB,aAAa,CAACF,KAAKtO,YAAYqF,cAAcrF,QAAQmF,KAAK;AAC/D,WAAKsJ,YAAY;AACjB,WAAKC,cAAc;QACjBC,MAAM;QACNC,WAAW;QACXC,kBAAkB;MACpB;AACA,WAAKC,sBAAsB;AAC3B,WAAKC,UAAU;AACf,WAAKC,UAAU;AACf,WAAKC,UAAU;AACf,WAAKC,UAAU,CAAA;AACf,WAAKC,aAAa;AAClB,WAAKC,QAAQtJ;AACb,WAAKuJ,SAAS,CAAA;AACd,WAAKC,WAAW;AAChB,WAAKC,0BAA0B;AAE/B,WAAKnJ,SAAS+G,aAAAA;AACd,WAAKhP,MAAMiP,SAAAA;IACb;IAMAvH,IAAIkH,OAAOzE,QAAQ;AACjB,aAAOzC,IAAI,MAAMkH,OAAOzE,MAAAA;IAC1B;IAKAP,IAAIgF,OAAO;AACT,aAAOT,WAAS,MAAMS,KAAAA;IACxB;IAMA3G,SAAS2G,OAAOzE,QAAQ;AACtB,aAAOzC,IAAIwG,aAAaU,OAAOzE,MAAAA;IACjC;IAEAkH,SAASzC,OAAOzE,QAAQ;AACtB,aAAOzC,IAAIsG,WAAWY,OAAOzE,MAAAA;IAC/B;IAmBA2D,MAAMc,OAAOvG,MAAMiJ,aAAaC,YAAY;AAC1C,YAAMC,cAAcrD,WAAS,MAAMS,KAAAA;AACnC,YAAM6C,oBAAoBtD,WAAS,MAAMmD,WAAAA;AACzC,YAAMI,cAAc,MAAMrJ;AAE1B1E,aAAOgO,iBAAiBH,aAAa;QAEnC,CAACE,WAAAA,GAAc;UACb7K,OAAO2K,YAAYnJ,IAAK;UACxBuJ,UAAU;QACZ;QAEA,CAACvJ,IAAAA,GAAO;UACNwJ,YAAY;UACZjI,MAAM;AACJ,kBAAMkI,QAAQ,KAAKJ,WAAY;AAC/B,kBAAMK,SAASN,kBAAkBF,UAAW;AAC5C,gBAAIS,SAASF,KAAQ,GAAA;AACnB,qBAAOnO,OAAOC,OAAO,CAAA,GAAImO,QAAQD,KAAAA;;AAEnC,mBAAOG,eAAeH,OAAOC,MAAAA;UAC/B;UACArK,IAAIb,OAAO;AACT,iBAAK6K,WAAAA,IAAe7K;UACtB;QACF;MACF,CAAA;IACF;IAEA7G,MAAMkS,UAAU;AACdA,eAASC,QAAQ,CAACnS,UAAUA,MAAM,IAAI,CAAA;IACxC;EACF;AAGA,MAAAyH,YAA+B,oBAAIqH,SAAS;IAC1C1G,aAAa,CAACC,SAAS,CAACA,KAAK0F,WAAW,IAAA;IACxC5F,YAAY,CAACE,SAASA,SAAS;IAC/B4H,OAAO;MACL/H,WAAW;IACb;IACAqI,aAAa;MACXnI,aAAa;MACbD,YAAY;IACd;EACF,GAAG;IAACX;IAAyBuB;IAAsB2C;GAAmB;ACtJ/D,WAAS0G,aAAazC,MAAgB;AAC3C,QAAI,CAACA,QAAQ9M,cAAc8M,KAAKE,IAAI,KAAKhN,cAAc8M,KAAKC,MAAM,GAAG;AACnE,aAAO;;AAGT,YAAQD,KAAKG,QAAQH,KAAKG,QAAQ,MAAM,OACrCH,KAAKK,SAASL,KAAKK,SAAS,MAAM,MACnCL,KAAKE,OAAO,QACZF,KAAKC;EACT;AAKO,WAASyC,aACdlC,KACAmC,MACAC,IACAC,SACAC,QACA;AACA,QAAIC,YAAYJ,KAAKG,MAAO;AAC5B,QAAI,CAACC,WAAW;AACdA,kBAAYJ,KAAKG,MAAO,IAAGtC,IAAIwC,YAAYF,MAAAA,EAAQ7F;AACnD2F,SAAGK,KAAKH,MAAAA;;AAEV,QAAIC,YAAYF,SAAS;AACvBA,gBAAUE;;AAEZ,WAAOF;EACT;AASO,WAASK,aACd1C,KACAR,MACAmD,eACAC,QACA;AACAA,IAAAA,SAAQA,UAAS,CAAA;AACjB,QAAIT,OAAOS,OAAMT,OAAOS,OAAMT,QAAQ,CAAA;AACtC,QAAIC,KAAKQ,OAAMC,iBAAiBD,OAAMC,kBAAkB,CAAA;AAExD,QAAID,OAAMpD,SAASA,MAAM;AACvB2C,aAAOS,OAAMT,OAAO,CAAA;AACpBC,WAAKQ,OAAMC,iBAAiB,CAAA;AAC5BD,MAAAA,OAAMpD,OAAOA;;AAGfQ,QAAI8C,KAAI;AAER9C,QAAIR,OAAOA;AACX,QAAI6C,UAAU;AACd,UAAMU,OAAOJ,cAAczR;AAC3B,QAAImN,IAAW2E,GAAWC,MAAcC,OAAwBC;AAChE,SAAK9E,KAAI,GAAGA,KAAI0E,MAAM1E,MAAK;AACzB6E,cAAQP,cAActE,EAAE;AAGxB,UAAI6E,UAAU1L,UAAa0L,UAAU,QAAQ,CAACjJ,QAAQiJ,KAAQ,GAAA;AAC5Db,kBAAUH,aAAalC,KAAKmC,MAAMC,IAAIC,SAASa,KAAAA;iBACtCjJ,QAAQiJ,KAAQ,GAAA;AAGzB,aAAKF,IAAI,GAAGC,OAAOC,MAAMhS,QAAQ8R,IAAIC,MAAMD,KAAK;AAC9CG,wBAAcD,MAAMF,CAAE;AAEtB,cAAIG,gBAAgB3L,UAAa2L,gBAAgB,QAAQ,CAAClJ,QAAQkJ,WAAc,GAAA;AAC9Ed,sBAAUH,aAAalC,KAAKmC,MAAMC,IAAIC,SAASc,WAAAA;;QAEnD;;IAEJ;AAEAnD,QAAIoD,QAAO;AAEX,UAAMC,QAAQjB,GAAGlR,SAAS;AAC1B,QAAImS,QAAQV,cAAczR,QAAQ;AAChC,WAAKmN,KAAI,GAAGA,KAAIgF,OAAOhF,MAAK;AAC1B,eAAO8D,KAAKC,GAAG/D,EAAAA,CAAE;MACnB;AACA+D,SAAGkB,OAAO,GAAGD,KAAAA;;AAEf,WAAOhB;EACT;AAUO,WAASkB,YAAYjJ,OAAckJ,OAAe/G,OAAe;AACtE,UAAMyC,mBAAmB5E,MAAMmJ;AAC/B,UAAMC,YAAYjH,UAAU,IAAIxK,KAAKJ,IAAI4K,QAAQ,GAAG,GAAA,IAAO;AAC3D,WAAOxK,KAAK0R,OAAOH,QAAQE,aAAaxE,gBAAAA,IAAoBA,mBAAmBwE;EACjF;AAKO,WAASE,YAAYC,QAA4B7D,KAAgC;AACtF,QAAI,CAACA,OAAO,CAAC6D,QAAQ;AACnB;;AAGF7D,UAAMA,OAAO6D,OAAOC,WAAW,IAAA;AAE/B9D,QAAI8C,KAAI;AAGR9C,QAAI+D,eAAc;AAClB/D,QAAIgE,UAAU,GAAG,GAAGH,OAAOpH,OAAOoH,OAAOI,MAAM;AAC/CjE,QAAIoD,QAAO;EACb;AASO,WAASc,UACdlE,KACAtO,SACAyS,GACAC,IACA;AAEAC,oBAAgBrE,KAAKtO,SAASyS,GAAGC,IAAG,IAAI;EAC1C;AAGO,WAASC,gBACdrE,KACAtO,SACAyS,GACAC,IACAE,GACA;AACA,QAAI3N,MAAc4N,SAAiBC,SAAiB9E,MAAc+E,cAAsBhI,OAAeiI,UAAkBC;AACzH,UAAMhF,QAAQjO,QAAQkT;AACtB,UAAMC,WAAWnT,QAAQmT;AACzB,UAAMC,SAASpT,QAAQoT;AACvB,QAAIC,OAAOF,YAAY,KAAKG;AAE5B,QAAIrF,SAAS,OAAOA,UAAU,UAAU;AACtChJ,aAAOgJ,MAAM/I,SAAQ;AACrB,UAAID,SAAS,+BAA+BA,SAAS,8BAA8B;AACjFqJ,YAAI8C,KAAI;AACR9C,YAAIiF,UAAUd,GAAGC,EAAAA;AACjBpE,YAAIkF,OAAOH,GAAAA;AACX/E,YAAImF,UAAUxF,OAAO,CAACA,MAAMlD,QAAQ,GAAG,CAACkD,MAAMsE,SAAS,GAAGtE,MAAMlD,OAAOkD,MAAMsE,MAAM;AACnFjE,YAAIoD,QAAO;AACX;;;AAIJ,QAAIrI,MAAM+J,MAAWA,KAAAA,UAAU,GAAG;AAChC;;AAGF9E,QAAIoF,UAAS;AAEb,YAAQzF,OAAAA;;MAEN;AACE,YAAI2E,GAAG;AACLtE,cAAIqF,QAAQlB,GAAGC,IAAGE,IAAI,GAAGQ,QAAQ,GAAG,GAAG7Q,GAAAA;eAClC;AACL+L,cAAIsF,IAAInB,GAAGC,IAAGU,QAAQ,GAAG7Q,GAAAA;;AAE3B+L,YAAIuF,UAAS;AACb;MACF,KAAK;AACH9I,gBAAQ6H,IAAIA,IAAI,IAAIQ;AACpB9E,YAAIwF,OAAOrB,IAAIlS,KAAK+B,IAAI+Q,GAAOtI,IAAAA,OAAO2H,KAAInS,KAAKiD,IAAI6P,GAAOD,IAAAA,MAAAA;AAC1DC,eAAOU;AACPzF,YAAI0F,OAAOvB,IAAIlS,KAAK+B,IAAI+Q,GAAOtI,IAAAA,OAAO2H,KAAInS,KAAKiD,IAAI6P,GAAOD,IAAAA,MAAAA;AAC1DC,eAAOU;AACPzF,YAAI0F,OAAOvB,IAAIlS,KAAK+B,IAAI+Q,GAAOtI,IAAAA,OAAO2H,KAAInS,KAAKiD,IAAI6P,GAAOD,IAAAA,MAAAA;AAC1D9E,YAAIuF,UAAS;AACb;MACF,KAAK;AAQHd,uBAAeK,SAAS;AACxBpF,eAAOoF,SAASL;AAChBF,kBAAUtS,KAAKiD,IAAI6P,MAAMY,UAAcjG,IAAAA;AACvCgF,mBAAWzS,KAAKiD,IAAI6P,MAAMY,UAAAA,KAAerB,IAAIA,IAAI,IAAIG,eAAe/E;AACpE8E,kBAAUvS,KAAK+B,IAAI+Q,MAAMY,UAAcjG,IAAAA;AACvCiF,mBAAW1S,KAAK+B,IAAI+Q,MAAMY,UAAAA,KAAerB,IAAIA,IAAI,IAAIG,eAAe/E;AACpEM,YAAIsF,IAAInB,IAAIO,UAAUN,KAAII,SAASC,cAAcM,MAAMzP,IAAIyP,MAAM5P,OAAAA;AACjE6K,YAAIsF,IAAInB,IAAIQ,UAAUP,KAAIG,SAASE,cAAcM,MAAM5P,SAAS4P,GAAAA;AAChE/E,YAAIsF,IAAInB,IAAIO,UAAUN,KAAII,SAASC,cAAcM,KAAKA,MAAM5P,OAAAA;AAC5D6K,YAAIsF,IAAInB,IAAIQ,UAAUP,KAAIG,SAASE,cAAcM,MAAM5P,SAAS4P,MAAMzP,EAAAA;AACtE0K,YAAIuF,UAAS;AACb;MACF,KAAK;AACH,YAAI,CAACV,UAAU;AACbnF,iBAAOzN,KAAK2T,UAAUd;AACtBrI,kBAAQ6H,IAAIA,IAAI,IAAI5E;AACpBM,cAAI6F,KAAK1B,IAAI1H,OAAO2H,KAAI1E,MAAM,IAAIjD,OAAO,IAAIiD,IAAAA;AAC7C;;AAEFqF,eAAOY;;MAET,KAAK;AACHjB,mBAAWzS,KAAKiD,IAAI6P,GAAAA,KAAQT,IAAIA,IAAI,IAAIQ;AACxCP,kBAAUtS,KAAKiD,IAAI6P,GAAOD,IAAAA;AAC1BN,kBAAUvS,KAAK+B,IAAI+Q,GAAOD,IAAAA;AAC1BH,mBAAW1S,KAAK+B,IAAI+Q,GAAAA,KAAQT,IAAIA,IAAI,IAAIQ;AACxC9E,YAAIwF,OAAOrB,IAAIO,UAAUN,KAAII,OAAAA;AAC7BxE,YAAI0F,OAAOvB,IAAIQ,UAAUP,KAAIG,OAAAA;AAC7BvE,YAAI0F,OAAOvB,IAAIO,UAAUN,KAAII,OAAAA;AAC7BxE,YAAI0F,OAAOvB,IAAIQ,UAAUP,KAAIG,OAAAA;AAC7BvE,YAAIuF,UAAS;AACb;MACF,KAAK;AACHR,eAAOY;;MAET,KAAK;AACHjB,mBAAWzS,KAAKiD,IAAI6P,GAAAA,KAAQT,IAAIA,IAAI,IAAIQ;AACxCP,kBAAUtS,KAAKiD,IAAI6P,GAAOD,IAAAA;AAC1BN,kBAAUvS,KAAK+B,IAAI+Q,GAAOD,IAAAA;AAC1BH,mBAAW1S,KAAK+B,IAAI+Q,GAAAA,KAAQT,IAAIA,IAAI,IAAIQ;AACxC9E,YAAIwF,OAAOrB,IAAIO,UAAUN,KAAII,OAAAA;AAC7BxE,YAAI0F,OAAOvB,IAAIO,UAAUN,KAAII,OAAAA;AAC7BxE,YAAIwF,OAAOrB,IAAIQ,UAAUP,KAAIG,OAAAA;AAC7BvE,YAAI0F,OAAOvB,IAAIQ,UAAUP,KAAIG,OAAAA;AAC7B;MACF,KAAK;AACHG,mBAAWzS,KAAKiD,IAAI6P,GAAAA,KAAQT,IAAIA,IAAI,IAAIQ;AACxCP,kBAAUtS,KAAKiD,IAAI6P,GAAOD,IAAAA;AAC1BN,kBAAUvS,KAAK+B,IAAI+Q,GAAOD,IAAAA;AAC1BH,mBAAW1S,KAAK+B,IAAI+Q,GAAAA,KAAQT,IAAIA,IAAI,IAAIQ;AACxC9E,YAAIwF,OAAOrB,IAAIO,UAAUN,KAAII,OAAAA;AAC7BxE,YAAI0F,OAAOvB,IAAIO,UAAUN,KAAII,OAAAA;AAC7BxE,YAAIwF,OAAOrB,IAAIQ,UAAUP,KAAIG,OAAAA;AAC7BvE,YAAI0F,OAAOvB,IAAIQ,UAAUP,KAAIG,OAAAA;AAC7BQ,eAAOY;AACPjB,mBAAWzS,KAAKiD,IAAI6P,GAAAA,KAAQT,IAAIA,IAAI,IAAIQ;AACxCP,kBAAUtS,KAAKiD,IAAI6P,GAAOD,IAAAA;AAC1BN,kBAAUvS,KAAK+B,IAAI+Q,GAAOD,IAAAA;AAC1BH,mBAAW1S,KAAK+B,IAAI+Q,GAAAA,KAAQT,IAAIA,IAAI,IAAIQ;AACxC9E,YAAIwF,OAAOrB,IAAIO,UAAUN,KAAII,OAAAA;AAC7BxE,YAAI0F,OAAOvB,IAAIO,UAAUN,KAAII,OAAAA;AAC7BxE,YAAIwF,OAAOrB,IAAIQ,UAAUP,KAAIG,OAAAA;AAC7BvE,YAAI0F,OAAOvB,IAAIQ,UAAUP,KAAIG,OAAAA;AAC7B;MACF,KAAK;AACHA,kBAAUD,IAAIA,IAAI,IAAIrS,KAAKiD,IAAI6P,GAAAA,IAAOD;AACtCN,kBAAUvS,KAAK+B,IAAI+Q,GAAOD,IAAAA;AAC1B9E,YAAIwF,OAAOrB,IAAII,SAASH,KAAII,OAAAA;AAC5BxE,YAAI0F,OAAOvB,IAAII,SAASH,KAAII,OAAAA;AAC5B;MACF,KAAK;AACHxE,YAAIwF,OAAOrB,GAAGC,EAAAA;AACdpE,YAAI0F,OAAOvB,IAAIlS,KAAKiD,IAAI6P,GAAAA,KAAQT,IAAIA,IAAI,IAAIQ,SAASV,KAAInS,KAAK+B,IAAI+Q,GAAOD,IAAAA,MAAAA;AACzE;MACF,KAAK;AACH9E,YAAIuF,UAAS;AACb;IACJ;AAEAvF,QAAI8F,KAAI;AACR,QAAIpU,QAAQqU,cAAc,GAAG;AAC3B/F,UAAIgG,OAAM;;EAEd;AASO,WAASC,eACdxT,OACAyT,MACAC,QACA;AACAA,aAASA,UAAU;AAEnB,WAAO,CAACD,QAASzT,SAASA,MAAM0R,IAAI+B,KAAKzV,OAAO0V,UAAU1T,MAAM0R,IAAI+B,KAAKxV,QAAQyV,UACjF1T,MAAM2R,IAAI8B,KAAKnN,MAAMoN,UAAU1T,MAAM2R,IAAI8B,KAAKlN,SAASmN;EACzD;AAEO,WAASC,SAASpG,KAA+BkG,MAAY;AAClElG,QAAI8C,KAAI;AACR9C,QAAIoF,UAAS;AACbpF,QAAI6F,KAAKK,KAAKzV,MAAMyV,KAAKnN,KAAKmN,KAAKxV,QAAQwV,KAAKzV,MAAMyV,KAAKlN,SAASkN,KAAKnN,GAAG;AAC5EiH,QAAIpE,KAAI;EACV;AAEO,WAASyK,WAAWrG,KAA+B;AACxDA,QAAIoD,QAAO;EACb;AAKO,WAASkD,eACdtG,KACAuG,UACA3E,QACA4E,OACAnG,MACA;AACA,QAAI,CAACkG,UAAU;AACb,aAAOvG,IAAI0F,OAAO9D,OAAOuC,GAAGvC,OAAOwC,CAAC;;AAEtC,QAAI/D,SAAS,UAAU;AACrB,YAAMoG,YAAYF,SAASpC,IAAIvC,OAAOuC,KAAK;AAC3CnE,UAAI0F,OAAOe,UAAUF,SAASnC,CAAC;AAC/BpE,UAAI0F,OAAOe,UAAU7E,OAAOwC,CAAC;IAC/B,WAAW/D,SAAS,YAAY,CAAC,CAACmG,OAAM;AACtCxG,UAAI0F,OAAOa,SAASpC,GAAGvC,OAAOwC,CAAC;WAC1B;AACLpE,UAAI0F,OAAO9D,OAAOuC,GAAGoC,SAASnC,CAAC;;AAEjCpE,QAAI0F,OAAO9D,OAAOuC,GAAGvC,OAAOwC,CAAC;EAC/B;AAKO,WAASsC,eACd1G,KACAuG,UACA3E,QACA4E,OACA;AACA,QAAI,CAACD,UAAU;AACb,aAAOvG,IAAI0F,OAAO9D,OAAOuC,GAAGvC,OAAOwC,CAAC;;AAEtCpE,QAAI2G,cACFH,QAAOD,SAASK,OAAOL,SAASM,MAChCL,QAAOD,SAASO,OAAOP,SAASQ,MAChCP,QAAO5E,OAAOiF,OAAOjF,OAAOgF,MAC5BJ,QAAO5E,OAAOmF,OAAOnF,OAAOkF,MAC5BlF,OAAOuC,GACPvC,OAAOwC,CAAC;EACZ;AAEA,WAAS4C,cAAchH,KAA+BiH,MAAsB;AAC1E,QAAIA,KAAKC,aAAa;AACpBlH,UAAIiF,UAAUgC,KAAKC,YAAY,CAAA,GAAID,KAAKC,YAAY,CAAE,CAAA;;AAGxD,QAAI,CAACxU,cAAcuU,KAAKpC,QAAQ,GAAG;AACjC7E,UAAIkF,OAAO+B,KAAKpC,QAAQ;;AAG1B,QAAIoC,KAAKpQ,OAAO;AACdmJ,UAAImH,YAAYF,KAAKpQ;;AAGvB,QAAIoQ,KAAKG,WAAW;AAClBpH,UAAIoH,YAAYH,KAAKG;;AAGvB,QAAIH,KAAKI,cAAc;AACrBrH,UAAIqH,eAAeJ,KAAKI;;EAE5B;AAEA,WAASC,aACPtH,KACAmE,GACAC,IACAmD,MACAN,MACA;AACA,QAAIA,KAAKO,iBAAiBP,KAAKQ,WAAW;AAQxC,YAAMC,UAAU1H,IAAIwC,YAAY+E,IAAAA;AAChC,YAAM9W,QAAO0T,IAAIuD,QAAQC;AACzB,YAAMjX,SAAQyT,IAAIuD,QAAQE;AAC1B,YAAM7O,OAAMqL,KAAIsD,QAAQG;AACxB,YAAM7O,UAASoL,KAAIsD,QAAQI;AAC3B,YAAMC,cAAcd,KAAKO,iBAAiBzO,OAAMC,WAAU,IAAIA;AAE9DgH,UAAIgI,cAAchI,IAAImH;AACtBnH,UAAIoF,UAAS;AACbpF,UAAIjE,YAAYkL,KAAKgB,mBAAmB;AACxCjI,UAAIwF,OAAO/U,OAAMsX,WAAAA;AACjB/H,UAAI0F,OAAOhV,QAAOqX,WAAAA;AAClB/H,UAAIgG,OAAM;;EAEd;AAEA,WAASkC,aAAalI,KAA+BiH,MAAuB;AAC1E,UAAMkB,WAAWnI,IAAImH;AAErBnH,QAAImH,YAAYF,KAAKpQ;AACrBmJ,QAAIoI,SAASnB,KAAKxW,MAAMwW,KAAKlO,KAAKkO,KAAKxK,OAAOwK,KAAKhD,MAAM;AACzDjE,QAAImH,YAAYgB;EAClB;AAKO,WAASE,WACdrI,KACArD,OACAwH,GACAC,IACA5E,MACAyH,OAAuB,CAAA,GACvB;AACA,UAAMqB,QAAQrO,QAAQ0C,KAAAA,IAAQA,QAAO;MAACA;IAAK;AAC3C,UAAMqJ,SAASiB,KAAKsB,cAAc,KAAKtB,KAAKuB,gBAAgB;AAC5D,QAAInK,IAAWkJ;AAEfvH,QAAI8C,KAAI;AACR9C,QAAIR,OAAOA,KAAK8C;AAChB0E,kBAAchH,KAAKiH,IAAAA;AAEnB,SAAK5I,KAAI,GAAGA,KAAIiK,MAAMpX,QAAQ,EAAEmN,IAAG;AACjCkJ,aAAOe,MAAMjK,EAAE;AAEf,UAAI4I,KAAKwB,UAAU;AACjBP,qBAAalI,KAAKiH,KAAKwB,QAAQ;;AAGjC,UAAIzC,QAAQ;AACV,YAAIiB,KAAKuB,aAAa;AACpBxI,cAAIgI,cAAcf,KAAKuB;;AAGzB,YAAI,CAAC9V,cAAcuU,KAAKsB,WAAW,GAAG;AACpCvI,cAAIjE,YAAYkL,KAAKsB;;AAGvBvI,YAAI0I,WAAWnB,MAAMpD,GAAGC,IAAG6C,KAAK0B,QAAQ;;AAG1C3I,UAAI4I,SAASrB,MAAMpD,GAAGC,IAAG6C,KAAK0B,QAAQ;AACtCrB,mBAAatH,KAAKmE,GAAGC,IAAGmD,MAAMN,IAAAA;AAE9B7C,MAAAA,MAAKyE,OAAOrJ,KAAKI,UAAU;IAC7B;AAEAI,QAAIoD,QAAO;EACb;AAOO,WAAS0F,mBACd9I,KACA6F,MACA;AACA,UAAM,EAAC1B,GAAGC,GAAAA,IAAGE,GAAGyE,GAAAA,IAAGjE,OAAM,IAAIe;AAG7B7F,QAAIsF,IAAInB,IAAIW,OAAOkE,SAAS5E,KAAIU,OAAOkE,SAASlE,OAAOkE,SAAS,MAAM1T,IAAIA,IAAI,IAAI;AAGlF0K,QAAI0F,OAAOvB,GAAGC,KAAI2E,KAAIjE,OAAOmE,UAAU;AAGvCjJ,QAAIsF,IAAInB,IAAIW,OAAOmE,YAAY7E,KAAI2E,KAAIjE,OAAOmE,YAAYnE,OAAOmE,YAAY3T,IAAIH,SAAS,IAAI;AAG9F6K,QAAI0F,OAAOvB,IAAIG,IAAIQ,OAAOoE,aAAa9E,KAAI2E,EAAAA;AAG3C/I,QAAIsF,IAAInB,IAAIG,IAAIQ,OAAOoE,aAAa9E,KAAI2E,KAAIjE,OAAOoE,aAAapE,OAAOoE,aAAa/T,SAAS,GAAG,IAAI;AAGpG6K,QAAI0F,OAAOvB,IAAIG,GAAGF,KAAIU,OAAOqE,QAAQ;AAGrCnJ,QAAIsF,IAAInB,IAAIG,IAAIQ,OAAOqE,UAAU/E,KAAIU,OAAOqE,UAAUrE,OAAOqE,UAAU,GAAG,CAAChU,SAAS,IAAI;AAGxF6K,QAAI0F,OAAOvB,IAAIW,OAAOkE,SAAS5E,EAAAA;EACjC;ACxgBA,MAAMgF,cAAc;AACpB,MAAMC,aAAa;AAcZ,WAASC,aAAa5S,OAAwBgJ,MAAsB;AACzE,UAAM6J,WAAW,KAAK7S,OAAO8S,MAAMJ,WAAAA;AACnC,QAAI,CAACG,WAAWA,QAAQ,CAAA,MAAO,UAAU;AACvC,aAAO7J,OAAO;;AAGhBhJ,YAAQ,CAAC6S,QAAQ,CAAE;AAEnB,YAAQA,QAAQ,CAAE,GAAA;MAChB,KAAK;AACH,eAAO7S;MACT,KAAK;AACHA,iBAAS;AACT;IAGJ;AAEA,WAAOgJ,OAAOhJ;EAChB;AAEA,MAAM+S,eAAe,CAAC9Q,MAAe,CAACA,KAAK;AAQpC,WAAS+Q,kBAAkBhT,OAAwCiT,OAA0C;AAClH,UAAMC,MAAM,CAAA;AACZ,UAAMC,WAAWhI,SAAS8H,KAAAA;AAC1B,UAAMxL,OAAO0L,WAAWrW,OAAO2K,KAAKwL,KAAAA,IAASA;AAC7C,UAAMG,QAAOjI,SAASnL,KAAAA,IAClBmT,WACEE,CAAAA,SAAQjI,eAAepL,MAAMqT,IAAAA,GAAOrT,MAAMiT,MAAMI,IAAK,CAAA,CAAC,IACtDA,CAAAA,SAAQrT,MAAMqT,IAAAA,IAChB,MAAMrT;AAEV,eAAWqT,QAAQ5L,MAAM;AACvByL,UAAIG,IAAAA,IAAQN,aAAaK,MAAKC,IAAAA,CAAAA;IAChC;AACA,WAAOH;EACT;AAUO,WAASI,OAAOtT,OAA8B;AACnD,WAAOgT,kBAAkBhT,OAAO;MAACqC,KAAK;MAAKrI,OAAO;MAAKsI,QAAQ;MAAKvI,MAAM;IAAG,CAAA;EAC/E;AASO,WAASwZ,cAAcvT,OAA6B;AACzD,WAAOgT,kBAAkBhT,OAAO;MAAC;MAAW;MAAY;MAAc;IAAc,CAAA;EACtF;AAUO,WAASwT,UAAUxT,OAAkC;AAC1D,UAAMyT,MAAMH,OAAOtT,KAAAA;AAEnByT,QAAI1N,QAAQ0N,IAAI1Z,OAAO0Z,IAAIzZ;AAC3ByZ,QAAIlG,SAASkG,IAAIpR,MAAMoR,IAAInR;AAE3B,WAAOmR;EACT;AAUO,WAASC,OAAO1Y,SAA4B2Y,UAA8B;AAC/E3Y,cAAUA,WAAW,CAAA;AACrB2Y,eAAWA,YAAY/S,UAASkI;AAEhC,QAAIE,OAAOoC,eAAepQ,QAAQgO,MAAM2K,SAAS3K,IAAI;AAErD,QAAI,OAAOA,SAAS,UAAU;AAC5BA,aAAO4K,SAAS5K,MAAM,EAAA;;AAExB,QAAIC,QAAQmC,eAAepQ,QAAQiO,OAAO0K,SAAS1K,KAAK;AACxD,QAAIA,SAAS,EAAE,KAAKA,OAAO6J,MAAMH,UAAa,GAAA;AAC5CkB,cAAQC,KAAK,oCAAoC7K,QAAQ,GAAA;AACzDA,cAAQnI;;AAGV,UAAMgI,OAAO;MACXC,QAAQqC,eAAepQ,QAAQ+N,QAAQ4K,SAAS5K,MAAM;MACtDG,YAAY0J,aAAaxH,eAAepQ,QAAQkO,YAAYyK,SAASzK,UAAU,GAAGF,IAAAA;MAClFA;MACAC;MACAE,QAAQiC,eAAepQ,QAAQmO,QAAQwK,SAASxK,MAAM;MACtDyC,QAAQ;IACV;AAEA9C,SAAK8C,SAASL,aAAazC,IAAAA;AAC3B,WAAOA;EACT;AAaO,WAASiL,QAAQC,QAAwBvL,SAAkB/E,QAAgBuQ,MAA+B;AAC/G,QAAIC,YAAY;AAChB,QAAIvM,IAAW0E,MAAcrM;AAE7B,SAAK2H,KAAI,GAAG0E,OAAO2H,OAAOxZ,QAAQmN,KAAI0E,MAAM,EAAE1E,IAAG;AAC/C3H,cAAQgU,OAAOrM,EAAE;AACjB,UAAI3H,UAAUc,QAAW;AACvB;;AAEF,UAAI2H,YAAY3H,UAAa,OAAOd,UAAU,YAAY;AACxDA,gBAAQA,MAAMyI,OAAAA;AACdyL,oBAAY;;AAEd,UAAIxQ,WAAU5C,UAAayC,QAAQvD,KAAQ,GAAA;AACzCA,gBAAQA,MAAM0D,SAAQ1D,MAAMxF,MAAM;AAClC0Z,oBAAY;;AAEd,UAAIlU,UAAUc,QAAW;AACvB,YAAImT,QAAQ,CAACC,WAAW;AACtBD,eAAKC,YAAY;;AAEnB,eAAOlU;;IAEX;EACF;AAQO,WAASmU,UAAUC,QAAuCjP,OAAwBH,aAAsB;AAC7G,UAAM,EAAC9J,KAAAA,MAAKC,KAAAA,KAAAA,IAAOiZ;AACnB,UAAMC,SAASC,YAAYnP,QAAQhK,OAAMD,QAAO,CAAA;AAChD,UAAMqZ,WAAW,CAACvU,OAAewU,SAAgBxP,eAAehF,UAAU,IAAI,IAAIA,QAAQwU;AAC1F,WAAO;MACLtZ,KAAKqZ,SAASrZ,MAAK,CAACK,KAAKyI,IAAIqQ,MAAAA,CAAAA;MAC7BlZ,KAAKoZ,SAASpZ,MAAKkZ,MAAAA;IACrB;EACF;AAUO,WAASI,cAAcC,eAAuBjM,SAAiB;AACpE,WAAO3L,OAAOC,OAAOD,OAAOsK,OAAOsN,aAAgBjM,GAAAA,OAAAA;EACrD;ACnLO,WAASkM,gBAIdC,QACAC,WAAW;IAAC;KACZC,YACAnB,UACAoB,YAAY,MAAMH,OAAO,CAAA,GACzB;AACA,UAAMI,kBAAkBF,cAAcF;AACtC,QAAI,OAAOjB,aAAa,aAAa;AACnCA,iBAAWsB,SAAS,aAAaL,MAAAA;;AAEnC,UAAM1I,SAA6B;MACjC,CAACgJ,OAAOC,WAAW,GAAG;MACtBC,YAAY;MACZC,SAAST;MACTU,aAAaN;MACb3T,WAAWsS;MACX4B,YAAYR;MACZvK,UAAU,CAACzC,UAAqB4M,gBAAgB;QAAC5M;QAAU6M,GAAAA;MAAO,GAAEC,UAAUG,iBAAiBrB,QAAAA;IACjG;AACA,WAAO,IAAI6B,MAAMtJ,QAAO;;;;MAItBuJ,eAAevK,QAAQmI,MAAc;AACnC,eAAOnI,OAAOmI,IAAK;AACnB,eAAOnI,OAAOwK;AACd,eAAOd,OAAO,CAAA,EAAGvB,IAAAA;AACjB,eAAO;MACT;;;;MAKAtQ,IAAImI,QAAQmI,MAAc;AACxB,eAAOsC,QAAQzK,QAAQmI,MACrB,MAAMuC,qBAAqBvC,MAAMwB,UAAUD,QAAQ1J,MAAAA,CAAAA;MACvD;;;;;MAMA2K,yBAAyB3K,QAAQmI,MAAM;AACrC,eAAOyC,QAAQD,yBAAyB3K,OAAOmK,QAAQ,CAAA,GAAIhC,IAAAA;MAC7D;;;;MAKA0C,iBAAiB;AACf,eAAOD,QAAQC,eAAenB,OAAO,CAAE,CAAA;MACzC;;;;MAKAoB,IAAI9K,QAAQmI,MAAc;AACxB,eAAO4C,qBAAqB/K,MAAQtG,EAAAA,SAASyO,IAAAA;MAC/C;;;;MAKA6C,QAAQhL,QAAQ;AACd,eAAO+K,qBAAqB/K,MAAAA;MAC9B;;;;MAKArK,IAAIqK,QAAQmI,MAAcrT,OAAO;AAC/B,cAAMmW,UAAUjL,OAAOkL,aAAalL,OAAOkL,WAAWrB,UAAU;AAChE7J,eAAOmI,IAAAA,IAAQ8C,QAAQ9C,IAAK,IAAGrT;AAC/B,eAAOkL,OAAOwK;AACd,eAAO;MACT;IACF,CAAA;EACF;AAUO,WAASW,eAIdC,OACA7N,SACA8N,UACAC,oBACA;AACA,UAAMtK,SAA4B;MAChCkJ,YAAY;MACZqB,QAAQH;MACRI,UAAUjO;MACVkO,WAAWJ;MACXK,QAAQ,oBAAIC,IAAAA;MACZ1O,cAAcA,aAAamO,OAAOE,kBAAAA;MAClCM,YAAY,CAACxN,QAAmB+M,eAAeC,OAAOhN,KAAKiN,UAAUC,kBAAAA;MACrEhM,UAAU,CAACzC,UAAqBsO,eAAeC,MAAM9L,SAASzC,KAAAA,GAAQU,SAAS8N,UAAUC,kBAAAA;IAC3F;AACA,WAAO,IAAIhB,MAAMtJ,QAAO;;;;MAItBuJ,eAAevK,QAAQmI,MAAM;AAC3B,eAAOnI,OAAOmI,IAAK;AACnB,eAAOiD,MAAMjD,IAAK;AAClB,eAAO;MACT;;;;MAKAtQ,IAAImI,QAAQmI,MAAc0D,UAAU;AAClC,eAAOpB,QAAQzK,QAAQmI,MACrB,MAAM2D,oBAAoB9L,QAAQmI,MAAM0D,QAAAA,CAAAA;MAC5C;;;;;MAMAlB,yBAAyB3K,QAAQmI,MAAM;AACrC,eAAOnI,OAAO/C,aAAa8O,UACvBnB,QAAQE,IAAIM,OAAOjD,IAAQ,IAAA;UAACrI,YAAY;UAAMkM,cAAc;QAAI,IAAIpW,SACpEgV,QAAQD,yBAAyBS,OAAOjD,IAAK;MACnD;;;;MAKA0C,iBAAiB;AACf,eAAOD,QAAQC,eAAeO,KAAAA;MAChC;;;;MAKAN,IAAI9K,QAAQmI,MAAM;AAChB,eAAOyC,QAAQE,IAAIM,OAAOjD,IAAAA;MAC5B;;;;MAKA6C,UAAU;AACR,eAAOJ,QAAQI,QAAQI,KAAAA;MACzB;;;;MAKAzV,IAAIqK,QAAQmI,MAAMrT,OAAO;AACvBsW,cAAMjD,IAAAA,IAAQrT;AACd,eAAOkL,OAAOmI,IAAK;AACnB,eAAO;MACT;IACF,CAAA;EACF;AAKO,WAASlL,aACdmO,OACA1V,YAA+B;IAACuW,YAAY;IAAMC,WAAW;EAAI,GACrD;AACZ,UAAM,EAAC7V,cAAcX,UAASuW,YAAY7V,aAAaV,UAASwW,WAAWC,WAAWzW,UAASqW,QAAO,IAAIX;AAC1G,WAAO;MACLW,SAASI;MACTF,YAAY5V;MACZ6V,WAAW9V;MACXgW,cAAcC,YAAWhW,WAAAA,IAAeA,cAAc,MAAMA;MAC5DiW,aAAaD,YAAWjW,UAAAA,IAAcA,aAAa,MAAMA;IAC3D;EACF;AAEA,MAAMmW,UAAU,CAACC,QAAgBlW,SAAiBkW,SAASA,SAASC,YAAYnW,IAAAA,IAAQA;AACxF,MAAMoW,mBAAmB,CAACvE,MAAcrT,UAAmBmL,SAASnL,KAAAA,KAAUqT,SAAS,eACpFvW,OAAOiZ,eAAe/V,KAAW,MAAA,QAAQA,MAAMkI,gBAAgBpL;AAElE,WAAS6Y,QACPzK,QACAmI,MACAU,UACA;AACA,QAAIjX,OAAO+a,UAAUC,eAAe5e,KAAKgS,QAAQmI,IAASA,KAAAA,SAAS,eAAe;AAChF,aAAOnI,OAAOmI,IAAK;;AAGrB,UAAMrT,QAAQ+T,SAAAA;AAEd7I,WAAOmI,IAAAA,IAAQrT;AACf,WAAOA;EACT;AAEA,WAASgX,oBACP9L,QACAmI,MACA0D,UACA;AACA,UAAM,EAACN,QAAQC,UAAUC,WAAWxO,cAAcd,aAAW,IAAI6D;AACjE,QAAIlL,QAAQyW,OAAOpD,IAAAA;AAGnB,QAAIkE,YAAWvX,KAAAA,KAAUqH,aAAYiQ,aAAajE,IAAO,GAAA;AACvDrT,cAAQ+X,mBAAmB1E,MAAMrT,OAAOkL,QAAQ6L,QAAAA;;AAElD,QAAIxT,QAAQvD,KAAAA,KAAUA,MAAMxF,QAAQ;AAClCwF,cAAQgY,cAAc3E,MAAMrT,OAAOkL,QAAQ7D,aAAYmQ,WAAW;;AAEpE,QAAII,iBAAiBvE,MAAMrT,KAAQ,GAAA;AAEjCA,cAAQqW,eAAerW,OAAO0W,UAAUC,aAAaA,UAAUtD,IAAAA,GAAOhM,YAAAA;;AAExE,WAAOrH;EACT;AAEA,WAAS+X,mBACP1E,MACA4E,UACA/M,QACA6L,UACA;AACA,UAAM,EAACN,QAAQC,UAAUC,WAAWC,OAAM,IAAI1L;AAC9C,QAAI0L,OAAOZ,IAAI3C,IAAO,GAAA;AACpB,YAAM,IAAI6E,MAAM,yBAAyBC,MAAMlX,KAAK2V,MAAAA,EAAQwB,KAAK,IAAQ,IAAA,OAAO/E,IAAM;;AAExFuD,WAAOpC,IAAInB,IAAAA;AACX,QAAIrT,QAAQiY,SAASvB,UAAUC,aAAaI,QAAAA;AAC5CH,WAAOyB,OAAOhF,IAAAA;AACd,QAAIuE,iBAAiBvE,MAAMrT,KAAQ,GAAA;AAEjCA,cAAQsY,kBAAkB7B,OAAOpB,SAASoB,QAAQpD,MAAMrT,KAAAA;;AAE1D,WAAOA;EACT;AAEA,WAASgY,cACP3E,MACArT,OACAkL,QACAsM,aACA;AACA,UAAM,EAACf,QAAQC,UAAUC,WAAWxO,cAAcd,aAAW,IAAI6D;AAEjE,QAAI,OAAOwL,SAAShT,UAAU,eAAe8T,YAAYnE,IAAO,GAAA;AAC9D,aAAOrT,MAAM0W,SAAShT,QAAQ1D,MAAMxF,MAAM;IAC5C,WAAW2Q,SAASnL,MAAM,CAAA,CAAE,GAAG;AAE7B,YAAMuY,MAAMvY;AACZ,YAAM4U,SAAS6B,OAAOpB,QAAQmD,OAAOrb,CAAAA,OAAKA,OAAMob,GAAAA;AAChDvY,cAAQ,CAAA;AACR,iBAAWyY,QAAQF,KAAK;AACtB,cAAMG,WAAWJ,kBAAkB1D,QAAQ6B,QAAQpD,MAAMoF,IAAAA;AACzDzY,cAAM+L,KAAKsK,eAAeqC,UAAUhC,UAAUC,aAAaA,UAAUtD,IAAAA,GAAOhM,YAAAA,CAAAA;MAC9E;;AAEF,WAAOrH;EACT;AAEA,WAAS2Y,gBACPhF,UACAN,MACArT,OACA;AACA,WAAOuX,YAAW5D,QAAAA,IAAYA,SAASN,MAAMrT,KAAAA,IAAS2T;EACxD;AAEA,MAAMrM,WAAW,CAACE,KAAwBoR,WAAsBpR,QAAQ,OAAOoR,SAC3E,OAAOpR,QAAQ,WAAWqR,iBAAiBD,QAAQpR,GAAAA,IAAO1G;AAE9D,WAASgY,UACPjY,MACAkY,cACAvR,KACAwR,gBACAhZ,OACA;AACA,eAAW4Y,UAAUG,cAAc;AACjC,YAAMhR,QAAQT,SAASE,KAAKoR,MAAAA;AAC5B,UAAI7Q,OAAO;AACTlH,QAAAA,KAAI2T,IAAIzM,KAAAA;AACR,cAAM4L,WAAWgF,gBAAgB5Q,MAAM1G,WAAWmG,KAAKxH,KAAAA;AACvD,YAAI,OAAO2T,aAAa,eAAeA,aAAanM,OAAOmM,aAAaqF,gBAAgB;AAGtF,iBAAOrF;;iBAEA5L,UAAU,SAAS,OAAOiR,mBAAmB,eAAexR,QAAQwR,gBAAgB;AAG7F,eAAO;;IAEX;AACA,WAAO;EACT;AAEA,WAASV,kBACPS,cACAL,UACArF,MACArT,OACA;AACA,UAAM8U,aAAa4D,SAASpD;AAC5B,UAAM3B,WAAWgF,gBAAgBD,SAASrX,WAAWgS,MAAMrT,KAAAA;AAC3D,UAAMiZ,YAAY;MAAIF,GAAAA;MAAiBjE,GAAAA;IAAW;AAClD,UAAMjU,OAAM,oBAAIgW,IAAAA;AAChBhW,IAAAA,KAAI2T,IAAIxU,KAAAA;AACR,QAAIwH,MAAM0R,iBAAiBrY,MAAKoY,WAAW5F,MAAMM,YAAYN,MAAMrT,KAAAA;AACnE,QAAIwH,QAAQ,MAAM;AAChB,aAAO;;AAET,QAAI,OAAOmM,aAAa,eAAeA,aAAaN,MAAM;AACxD7L,YAAM0R,iBAAiBrY,MAAKoY,WAAWtF,UAAUnM,KAAKxH,KAAAA;AACtD,UAAIwH,QAAQ,MAAM;AAChB,eAAO;;;AAGX,WAAOmN,gBAAgBwD,MAAMlX,KAAKJ,IAAM,GAAA;MAAC;IAAG,GAAEiU,YAAYnB,UACxD,MAAMwF,aAAaT,UAAUrF,MAAgBrT,KAAAA,CAAAA;EACjD;AAEA,WAASkZ,iBACPrY,MACAoY,WACAzR,KACAmM,UACA8E,MACA;AACA,WAAOjR,KAAK;AACVA,YAAMsR,UAAUjY,MAAKoY,WAAWzR,KAAKmM,UAAU8E,IAAAA;IACjD;AACA,WAAOjR;EACT;AAEA,WAAS2R,aACPT,UACArF,MACArT,OACA;AACA,UAAM4Y,SAASF,SAASnD,WAAU;AAClC,QAAI,EAAElC,QAAQuF,SAAS;AACrBA,aAAOvF,IAAK,IAAG,CAAA;;AAEjB,UAAMnI,SAAS0N,OAAOvF,IAAK;AAC3B,QAAI9P,QAAQ2H,MAAWC,KAAAA,SAASnL,KAAQ,GAAA;AAEtC,aAAOA;;AAET,WAAOkL,UAAU,CAAA;EACnB;AAEA,WAAS0K,qBACPvC,MACAwB,UACAD,QACA0B,OACA;AACA,QAAItW;AACJ,eAAW0X,UAAU7C,UAAU;AAC7B7U,cAAQiV,SAASwC,QAAQC,QAAQrE,IAAOuB,GAAAA,MAAAA;AACxC,UAAI,OAAO5U,UAAU,aAAa;AAChC,eAAO4X,iBAAiBvE,MAAMrT,KAC1BsY,IAAAA,kBAAkB1D,QAAQ0B,OAAOjD,MAAMrT,KAAAA,IACvCA;;IAER;EACF;AAEA,WAASiV,SAASzN,KAAaoN,QAAqB;AAClD,eAAW7M,SAAS6M,QAAQ;AAC1B,UAAI,CAAC7M,OAAO;AACV;;AAEF,YAAM/H,QAAQ+H,MAAMP,GAAI;AACxB,UAAI,OAAOxH,UAAU,aAAa;AAChC,eAAOA;;IAEX;EACF;AAEA,WAASiW,qBAAqB/K,QAAuB;AACnD,QAAIzD,OAAOyD,OAAOwK;AAClB,QAAI,CAACjO,MAAM;AACTA,aAAOyD,OAAOwK,QAAQ0D,yBAAyBlO,OAAOmK,OAAO;;AAE/D,WAAO5N;EACT;AAEA,WAAS2R,yBAAyBxE,QAAqB;AACrD,UAAM/T,OAAM,oBAAIgW,IAAAA;AAChB,eAAW9O,SAAS6M,QAAQ;AAC1B,iBAAWpN,OAAO1K,OAAO2K,KAAKM,KAAOyQ,EAAAA,OAAO3Q,CAAAA,MAAK,CAACA,EAAEX,WAAW,GAAO,CAAA,GAAA;AACpErG,QAAAA,KAAI2T,IAAIhN,GAAAA;MACV;IACF;AACA,WAAO2Q,MAAMlX,KAAKJ,IAAAA;EACpB;AAEO,WAASwY,4BACdjf,MACAqR,MACA7R,QACAa,OACA;AACA,UAAM,EAACE,OAAM,IAAIP;AACjB,UAAM,EAACoN,MAAM,IAAA,IAAO,KAAK8R;AACzB,UAAMC,SAAS,IAAIpB,MAAoB1d,KAAAA;AACvC,QAAIkN,IAAW0E,MAAc3I,QAAe+U;AAE5C,SAAK9Q,KAAI,GAAG0E,OAAO5R,OAAOkN,KAAI0E,MAAM,EAAE1E,IAAG;AACvCjE,MAAAA,SAAQiE,KAAI/N;AACZ6e,aAAOhN,KAAK/H,MAAM;AAClB6V,aAAO5R,EAAAA,IAAK;QACV6R,GAAG7e,OAAO8e,MAAMZ,iBAAiBJ,MAAMjR,GAAM9D,GAAAA,MAAAA;MAC/C;IACF;AACA,WAAO6V;EACT;AClcA,MAAMG,UAAUvH,OAAOuH,WAAW;AAGlC,MAAMC,WAAW,CAACtf,QAAuBsN,OAAmCA,KAAItN,OAAOG,UAAU,CAACH,OAAOsN,EAAE,EAACiS,QAAQvf,OAAOsN,EAAE;AAC7H,MAAMkS,eAAe,CAACpQ,cAAyBA,cAAc,MAAM,MAAM;AAElE,WAASqQ,YACdC,YACAC,aACAC,YACAhd,IAIE;AAMF,UAAM4S,WAAWkK,WAAWH,OAAOI,cAAcD;AACjD,UAAMG,UAAUF;AAChB,UAAMG,OAAOF,WAAWL,OAAOI,cAAcC;AAC7C,UAAMG,MAAMC,sBAAsBH,SAASrK,QAAAA;AAC3C,UAAMyK,MAAMD,sBAAsBF,MAAMD,OAAAA;AAExC,QAAIK,MAAMH,OAAOA,MAAME;AACvB,QAAIE,MAAMF,OAAOF,MAAME;AAGvBC,UAAMlW,MAAMkW,GAAO,IAAA,IAAIA;AACvBC,UAAMnW,MAAMmW,GAAO,IAAA,IAAIA;AAEvB,UAAMC,KAAKxd,KAAIsd;AACf,UAAMG,KAAKzd,KAAIud;AAEf,WAAO;MACL3K,UAAU;QACRpC,GAAGyM,QAAQzM,IAAIgN,MAAMN,KAAK1M,IAAIoC,SAASpC;QACvCC,GAAGwM,QAAQxM,IAAI+M,MAAMN,KAAKzM,IAAImC,SAASnC;MACzC;MACAyM,MAAM;QACJ1M,GAAGyM,QAAQzM,IAAIiN,MAAMP,KAAK1M,IAAIoC,SAASpC;QACvCC,GAAGwM,QAAQxM,IAAIgN,MAAMP,KAAKzM,IAAImC,SAASnC;MACzC;IACF;EACF;AAKA,WAASiN,eAAetgB,QAAuBugB,QAAkBC,IAAc;AAC7E,UAAMC,YAAYzgB,OAAOG;AAEzB,QAAIugB,QAAgBC,OAAeC,MAAcC,kBAA0BC;AAC3E,QAAIC,aAAazB,SAAStf,QAAQ,CAAA;AAClC,aAASsN,KAAI,GAAGA,KAAImT,YAAY,GAAG,EAAEnT,IAAG;AACtCwT,qBAAeC;AACfA,mBAAazB,SAAStf,QAAQsN,KAAI,CAAA;AAClC,UAAI,CAACwT,gBAAgB,CAACC,YAAY;AAChC;;AAGF,UAAIC,aAAaT,OAAOjT,EAAE,GAAE,GAAG+R,OAAU,GAAA;AACvCmB,WAAGlT,EAAE,IAAGkT,GAAGlT,KAAI,CAAA,IAAK;AACpB;;AAGFoT,eAASF,GAAGlT,EAAAA,IAAKiT,OAAOjT,EAAE;AAC1BqT,cAAQH,GAAGlT,KAAI,CAAA,IAAKiT,OAAOjT,EAAE;AAC7BuT,yBAAmB3f,KAAK8B,IAAI0d,QAAQ,CAAA,IAAKxf,KAAK8B,IAAI2d,OAAO,CAAA;AACzD,UAAIE,oBAAoB,GAAG;AACzB;;AAGFD,aAAO,IAAI1f,KAAK0D,KAAKic,gBAAAA;AACrBL,SAAGlT,EAAE,IAAGoT,SAASE,OAAOL,OAAOjT,EAAE;AACjCkT,SAAGlT,KAAI,CAAE,IAAGqT,QAAQC,OAAOL,OAAOjT,EAAE;IACtC;EACF;AAEA,WAAS2T,gBAAgBjhB,QAAuBwgB,IAAcpR,YAAuB,KAAK;AACxF,UAAM8R,YAAY1B,aAAapQ,SAAAA;AAC/B,UAAMqR,YAAYzgB,OAAOG;AACzB,QAAIsJ,OAAe0X,aAAkCL;AACrD,QAAIC,aAAazB,SAAStf,QAAQ,CAAA;AAElC,aAASsN,KAAI,GAAGA,KAAImT,WAAW,EAAEnT,IAAG;AAClC6T,oBAAcL;AACdA,qBAAeC;AACfA,mBAAazB,SAAStf,QAAQsN,KAAI,CAAA;AAClC,UAAI,CAACwT,cAAc;AACjB;;AAGF,YAAMM,SAASN,aAAa1R,SAAU;AACtC,YAAMiS,SAASP,aAAaI,SAAU;AACtC,UAAIC,aAAa;AACf1X,iBAAS2X,SAASD,YAAY/R,SAAAA,KAAc;AAC5C0R,qBAAa,MAAM1R,SAAAA,EAAW,IAAIgS,SAAS3X;AAC3CqX,qBAAa,MAAMI,SAAU,EAAC,IAAIG,SAAS5X,QAAQ+W,GAAGlT,EAAE;;AAE1D,UAAIyT,YAAY;AACdtX,iBAASsX,WAAW3R,SAAU,IAAGgS,UAAU;AAC3CN,qBAAa,MAAM1R,SAAAA,EAAW,IAAIgS,SAAS3X;AAC3CqX,qBAAa,MAAMI,SAAU,EAAC,IAAIG,SAAS5X,QAAQ+W,GAAGlT,EAAE;;IAE5D;EACF;AAQO,WAASgU,oBAAoBthB,QAAuBoP,YAAuB,KAAK;AACrF,UAAM8R,YAAY1B,aAAapQ,SAAAA;AAC/B,UAAMqR,YAAYzgB,OAAOG;AACzB,UAAMogB,SAAmBzC,MAAM2C,SAAW1L,EAAAA,KAAK,CAAA;AAC/C,UAAMyL,KAAe1C,MAAM2C,SAAAA;AAG3B,QAAInT,IAAG6T,aAAkCL;AACzC,QAAIC,aAAazB,SAAStf,QAAQ,CAAA;AAElC,SAAKsN,KAAI,GAAGA,KAAImT,WAAW,EAAEnT,IAAG;AAC9B6T,oBAAcL;AACdA,qBAAeC;AACfA,mBAAazB,SAAStf,QAAQsN,KAAI,CAAA;AAClC,UAAI,CAACwT,cAAc;AACjB;;AAGF,UAAIC,YAAY;AACd,cAAMQ,aAAaR,WAAW3R,SAAAA,IAAa0R,aAAa1R,SAAU;AAGlEmR,eAAOjT,EAAE,IAAGiU,eAAe,KAAKR,WAAWG,SAAAA,IAAaJ,aAAaI,SAAAA,KAAcK,aAAa;;AAElGf,SAAGlT,EAAE,IAAG,CAAC6T,cAAcZ,OAAOjT,EAAE,IAC5B,CAACyT,aAAaR,OAAOjT,KAAI,CAAA,IACtBkU,KAAKjB,OAAOjT,KAAI,CAAA,CAAE,MAAMkU,KAAKjB,OAAOjT,EAAE,CAAA,IAAK,KACzCiT,OAAOjT,KAAI,CAAA,IAAKiT,OAAOjT,EAAE,KAAI;IACxC;AAEAgT,mBAAetgB,QAAQugB,QAAQC,EAAAA;AAE/BS,oBAAgBjhB,QAAQwgB,IAAIpR,SAAAA;EAC9B;AAEA,WAASqS,gBAAgBC,IAAY7gB,MAAaC,MAAa;AAC7D,WAAOI,KAAKJ,IAAII,KAAKL,IAAI6gB,IAAI5gB,IAAMD,GAAAA,IAAAA;EACrC;AAEA,WAAS8gB,gBAAgB3hB,QAAuBmV,MAAiB;AAC/D,QAAI7H,IAAG0E,MAAMtQ,OAAOkgB,QAAQC;AAC5B,QAAIC,aAAa5M,eAAelV,OAAO,CAAA,GAAImV,IAAAA;AAC3C,SAAK7H,KAAI,GAAG0E,OAAOhS,OAAOG,QAAQmN,KAAI0E,MAAM,EAAE1E,IAAG;AAC/CuU,mBAAaD;AACbA,eAASE;AACTA,mBAAaxU,KAAI0E,OAAO,KAAKkD,eAAelV,OAAOsN,KAAI,CAAA,GAAI6H,IAAAA;AAC3D,UAAI,CAACyM,QAAQ;AACX;;AAEFlgB,cAAQ1B,OAAOsN,EAAE;AACjB,UAAIuU,YAAY;AACdngB,cAAMmU,OAAO4L,gBAAgB/f,MAAMmU,MAAMV,KAAKzV,MAAMyV,KAAKxV,KAAK;AAC9D+B,cAAMqU,OAAO0L,gBAAgB/f,MAAMqU,MAAMZ,KAAKnN,KAAKmN,KAAKlN,MAAM;;AAEhE,UAAI6Z,YAAY;AACdpgB,cAAMoU,OAAO2L,gBAAgB/f,MAAMoU,MAAMX,KAAKzV,MAAMyV,KAAKxV,KAAK;AAC9D+B,cAAMsU,OAAOyL,gBAAgB/f,MAAMsU,MAAMb,KAAKnN,KAAKmN,KAAKlN,MAAM;;IAElE;EACF;AAKO,WAAS8Z,2BACd/hB,QACAW,SACAwU,MACAtO,MACAuI,WACA;AACA,QAAI9B,IAAW0E,MAActQ,OAAoBsgB;AAGjD,QAAIrhB,QAAQF,UAAU;AACpBT,eAASA,OAAOme,OAAO,CAACuD,OAAO,CAACA,GAAGnC,IAAI;;AAGzC,QAAI5e,QAAQshB,2BAA2B,YAAY;AACjDX,0BAAoBthB,QAAQoP,SAAAA;WACvB;AACL,UAAI8S,OAAOrb,OAAO7G,OAAOA,OAAOG,SAAS,CAAE,IAAGH,OAAO,CAAE;AACvD,WAAKsN,KAAI,GAAG0E,OAAOhS,OAAOG,QAAQmN,KAAI0E,MAAM,EAAE1E,IAAG;AAC/C5L,gBAAQ1B,OAAOsN,EAAE;AACjB0U,wBAAgBvC,YACdyC,MACAxgB,OACA1B,OAAOkB,KAAKL,IAAIyM,KAAI,GAAG0E,QAAQnL,OAAO,IAAI,EAAA,IAAMmL,IAAK,GACrDrR,QAAQwhB,OAAO;AAEjBzgB,cAAMmU,OAAOmM,cAAcxM,SAASpC;AACpC1R,cAAMqU,OAAOiM,cAAcxM,SAASnC;AACpC3R,cAAMoU,OAAOkM,cAAclC,KAAK1M;AAChC1R,cAAMsU,OAAOgM,cAAclC,KAAKzM;AAChC6O,eAAOxgB;MACT;;AAGF,QAAIf,QAAQghB,iBAAiB;AAC3BA,sBAAgB3hB,QAAQmV,IAAAA;;EAE5B;ACtNO,WAASiN,kBAA2B;AACzC,WAAO,OAAOhkB,WAAW,eAAe,OAAOikB,aAAa;EAC9D;AAKO,WAASC,eAAeC,SAA+C;AAC5E,QAAIhE,SAASgE,QAAQC;AACrB,QAAIjE,UAAUA,OAAO1Y,SAAQ,MAAO,uBAAuB;AACzD0Y,eAAUA,OAAsBkE;;AAElC,WAAOlE;EACT;AAOA,WAASmE,cAAcC,YAA6BzV,MAAmB0V,gBAAwB;AAC7F,QAAIC;AACJ,QAAI,OAAOF,eAAe,UAAU;AAClCE,sBAAgBtJ,SAASoJ,YAAY,EAAA;AAErC,UAAIA,WAAWG,QAAQ,GAAA,MAAS,IAAI;AAElCD,wBAAgB,gBAAiB,MAAO3V,KAAKsV,WAAWI,cAAe;;WAEpE;AACLC,sBAAgBF;;AAGlB,WAAOE;EACT;AAEA,MAAME,oBAAmB,CAACC,YACxBA,QAAQC,cAAcC,YAAYH,iBAAiBC,SAAS,IAAI;AAE3D,WAASG,SAASC,IAAiBC,UAA0B;AAClE,WAAON,kBAAiBK,EAAIE,EAAAA,iBAAiBD,QAAAA;EAC/C;AAEA,MAAME,YAAY;IAAC;IAAO;IAAS;IAAU;EAAO;AACpD,WAASC,mBAAmBC,QAA6B7U,OAAe8U,QAA4B;AAClG,UAAMC,SAAS,CAAA;AACfD,aAASA,SAAS,MAAMA,SAAS;AACjC,aAASpW,KAAI,GAAGA,KAAI,GAAGA,MAAK;AAC1B,YAAMsW,MAAML,UAAUjW,EAAE;AACxBqW,aAAOC,GAAI,IAAGC,WAAWJ,OAAO7U,QAAQ,MAAMgV,MAAMF,MAAAA,CAAO,KAAK;IAClE;AACAC,WAAOjY,QAAQiY,OAAOjkB,OAAOikB,OAAOhkB;AACpCgkB,WAAOzQ,SAASyQ,OAAO3b,MAAM2b,OAAO1b;AACpC,WAAO0b;EACT;AAEA,MAAMG,eAAe,CAAC1Q,GAAWC,IAAWxC,YACzCuC,IAAI,KAAKC,KAAI,OAAO,CAACxC,UAAU,CAAC,OAAwBkT;AAO3D,WAASC,kBACPC,IACAnR,QAKE;AACF,UAAMoR,UAAUD,GAAkBC;AAClC,UAAMC,SAAUD,WAAWA,QAAQ/jB,SAAS+jB,QAAQ,CAAE,IAAGD;AACzD,UAAM,EAACG,SAASC,QAAAA,IAAWF;AAC3B,QAAIG,MAAM;AACV,QAAIlR,GAAGC;AACP,QAAIyQ,aAAaM,SAASC,SAASJ,GAAEpT,MAAM,GAAG;AAC5CuC,UAAIgR;AACJ/Q,MAAAA,KAAIgR;WACC;AACL,YAAMvP,OAAOhC,OAAOyR,sBAAqB;AACzCnR,UAAI+Q,OAAOK,UAAU1P,KAAKpV;AAC1B2T,MAAAA,KAAI8Q,OAAOM,UAAU3P,KAAK9M;AAC1Bsc,YAAM;;AAER,WAAO;MAAClR;MAAGC,GAAAA;MAAGiR;IAAG;EACnB;AASO,WAASI,oBACdC,QACApb,OAC0B;AAC1B,QAAI,YAAYob,QAAO;AACrB,aAAOA;;AAGT,UAAM,EAAC7R,QAAQJ,wBAAAA,IAA2BnJ;AAC1C,UAAMqF,QAAQmU,kBAAiBjQ,MAAAA;AAC/B,UAAM8R,YAAYhW,MAAMiW,cAAc;AACtC,UAAMC,WAAWtB,mBAAmB5U,OAAO,SAAA;AAC3C,UAAMmW,UAAUvB,mBAAmB5U,OAAO,UAAU,OAAA;AACpD,UAAM,EAACwE,GAAGC,GAAAA,IAAGiR,IAAG,IAAIN,kBAAkBW,QAAO7R,MAAAA;AAC7C,UAAMU,UAAUsR,SAASplB,QAAQ4kB,OAAOS,QAAQrlB;AAChD,UAAM+T,UAAUqR,SAAS9c,OAAOsc,OAAOS,QAAQ/c;AAE/C,QAAI,EAAC0D,OAAOwH,OAAAA,IAAU3J;AACtB,QAAIqb,WAAW;AACblZ,eAASoZ,SAASpZ,QAAQqZ,QAAQrZ;AAClCwH,gBAAU4R,SAAS5R,SAAS6R,QAAQ7R;;AAEtC,WAAO;MACLE,GAAGlS,KAAK0R,OAAOQ,IAAII,WAAW9H,QAAQoH,OAAOpH,QAAQgH,uBAAAA;MACrDW,GAAGnS,KAAK0R,OAAOS,KAAII,WAAWP,SAASJ,OAAOI,SAASR,uBAAAA;IACzD;EACF;AAEA,WAASsS,iBAAiBlS,QAA2BpH,OAAewH,QAAgC;AAClG,QAAI0E,UAAkBqN;AAEtB,QAAIvZ,UAAUjF,UAAayM,WAAWzM,QAAW;AAC/C,YAAMye,YAAYpS,UAAUwP,eAAexP,MAAAA;AAC3C,UAAI,CAACoS,WAAW;AACdxZ,gBAAQoH,OAAOqS;AACfjS,iBAASJ,OAAOsS;aACX;AACL,cAAMtQ,OAAOoQ,UAAUX,sBAAqB;AAC5C,cAAMc,iBAAiBtC,kBAAiBmC,SAAAA;AACxC,cAAMI,kBAAkB9B,mBAAmB6B,gBAAgB,UAAU,OAAA;AACrE,cAAME,mBAAmB/B,mBAAmB6B,gBAAgB,SAAA;AAC5D3Z,gBAAQoJ,KAAKpJ,QAAQ6Z,iBAAiB7Z,QAAQ4Z,gBAAgB5Z;AAC9DwH,iBAAS4B,KAAK5B,SAASqS,iBAAiBrS,SAASoS,gBAAgBpS;AACjE0E,mBAAW8K,cAAc2C,eAAezN,UAAUsN,WAAW,aAAA;AAC7DD,oBAAYvC,cAAc2C,eAAeJ,WAAWC,WAAW,cAAA;;;AAGnE,WAAO;MACLxZ;MACAwH;MACA0E,UAAUA,YAAY4N;MACtBP,WAAWA,aAAaO;IAC1B;EACF;AAEA,MAAMC,SAAS,CAAC7d,MAAc1G,KAAK0R,MAAMhL,IAAI,EAAM,IAAA;AAG5C,WAAS8d,eACd5S,QACA6S,SACAC,UACAC,aACmC;AACnC,UAAMjX,QAAQmU,kBAAiBjQ,MAAAA;AAC/B,UAAMgT,UAAUtC,mBAAmB5U,OAAO,QAAA;AAC1C,UAAMgJ,WAAW8K,cAAc9T,MAAMgJ,UAAU9E,QAAQ,aAAkB0S,KAAAA;AACzE,UAAMP,YAAYvC,cAAc9T,MAAMqW,WAAWnS,QAAQ,cAAmB0S,KAAAA;AAC5E,UAAMO,gBAAgBf,iBAAiBlS,QAAQ6S,SAASC,QAAAA;AACxD,QAAI,EAACla,OAAOwH,OAAAA,IAAU6S;AAEtB,QAAInX,MAAMiW,cAAc,eAAe;AACrC,YAAME,UAAUvB,mBAAmB5U,OAAO,UAAU,OAAA;AACpD,YAAMkW,WAAWtB,mBAAmB5U,OAAO,SAAA;AAC3ClD,eAASoZ,SAASpZ,QAAQqZ,QAAQrZ;AAClCwH,gBAAU4R,SAAS5R,SAAS6R,QAAQ7R;;AAEtCxH,YAAQxK,KAAKJ,IAAI,GAAG4K,QAAQoa,QAAQpa,KAAK;AACzCwH,aAAShS,KAAKJ,IAAI,GAAG+kB,cAAcna,QAAQma,cAAc3S,SAAS4S,QAAQ5S,MAAM;AAChFxH,YAAQ+Z,OAAOvkB,KAAKL,IAAI6K,OAAOkM,UAAUmO,cAAcnO,QAAQ,CAAA;AAC/D1E,aAASuS,OAAOvkB,KAAKL,IAAIqS,QAAQ+R,WAAWc,cAAcd,SAAS,CAAA;AACnE,QAAIvZ,SAAS,CAACwH,QAAQ;AAGpBA,eAASuS,OAAO/Z,QAAQ,CAAA;;AAG1B,UAAMsa,iBAAiBL,YAAYlf,UAAamf,aAAanf;AAE7D,QAAIuf,kBAAkBH,eAAeE,cAAc7S,UAAUA,SAAS6S,cAAc7S,QAAQ;AAC1FA,eAAS6S,cAAc7S;AACvBxH,cAAQ+Z,OAAOvkB,KAAK+I,MAAMiJ,SAAS2S,WAAAA,CAAAA;;AAGrC,WAAO;MAACna;MAAOwH;IAAM;EACvB;AAQO,WAAS+S,YACd1c,OACA2c,YACAC,YACgB;AAChB,UAAMC,aAAaF,cAAc;AACjC,UAAMG,eAAeZ,OAAOlc,MAAM2J,SAASkT,UAAAA;AAC3C,UAAME,cAAcb,OAAOlc,MAAMmC,QAAQ0a,UAAAA;AAExC7c,UAAuB2J,SAASuS,OAAOlc,MAAM2J,MAAM;AACnD3J,UAAuBmC,QAAQ+Z,OAAOlc,MAAMmC,KAAK;AAElD,UAAMoH,SAASvJ,MAAMuJ;AAKrB,QAAIA,OAAOlE,UAAUuX,cAAe,CAACrT,OAAOlE,MAAMsE,UAAU,CAACJ,OAAOlE,MAAMlD,QAAS;AACjFoH,aAAOlE,MAAMsE,SAAS,GAAG3J,MAAM2J,MAAM;AACrCJ,aAAOlE,MAAMlD,QAAQ,GAAGnC,MAAMmC,KAAK;;AAGrC,QAAInC,MAAMmJ,4BAA4B0T,cAC/BtT,OAAOI,WAAWmT,gBAClBvT,OAAOpH,UAAU4a,aAAa;AAClC/c,YAAuBmJ,0BAA0B0T;AAClDtT,aAAOI,SAASmT;AAChBvT,aAAOpH,QAAQ4a;AACf/c,YAAM0F,IAAIsX,aAAaH,YAAY,GAAG,GAAGA,YAAY,GAAG,CAAA;AACxD,aAAO;;AAET,WAAO;EACT;AAOaI,MAAAA,gCAAgC,WAAW;AACtD,QAAIC,mBAAmB;AACvB,QAAI;AACF,YAAM9lB,UAAU;QACd,IAAI+lB,UAAU;AACZD,6BAAmB;AACnB,iBAAO;QACT;MACF;AAEA,UAAIrE,gBAAmB,GAAA;AACrBhkB,eAAOuoB,iBAAiB,QAAQ,MAAMhmB,OAAAA;AACtCvC,eAAOwoB,oBAAoB,QAAQ,MAAMjmB,OAAAA;;IAE7C,SAASsjB,IAAG;IAEZ;AACA,WAAOwC;EACT,GAAK;AAYE,WAASI,aACd7D,SACAK,UACoB;AACpB,UAAM1d,QAAQwd,SAASH,SAASK,QAAAA;AAChC,UAAM7K,UAAU7S,SAASA,MAAM8S,MAAM,mBAAA;AACrC,WAAOD,UAAU,CAACA,QAAQ,CAAA,IAAK/R;EACjC;ACtRO,WAASqgB,aAAaC,IAAWC,IAAWpkB,IAAW0M,MAAO;AACnE,WAAO;MACL8D,GAAG2T,GAAG3T,IAAIxQ,MAAKokB,GAAG5T,IAAI2T,GAAG3T;MACzBC,GAAG0T,GAAG1T,IAAIzQ,MAAKokB,GAAG3T,IAAI0T,GAAG1T;IAC3B;EACF;AAKO,WAAS4T,sBACdF,IACAC,IACApkB,IAAW0M,MACX;AACA,WAAO;MACL8D,GAAG2T,GAAG3T,IAAIxQ,MAAKokB,GAAG5T,IAAI2T,GAAG3T;MACzBC,GAAG/D,SAAS,WAAW1M,KAAI,MAAMmkB,GAAG1T,IAAI2T,GAAG3T,IACvC/D,SAAS,UAAU1M,KAAI,IAAImkB,GAAG1T,IAAI2T,GAAG3T,IACnCzQ,KAAI,IAAIokB,GAAG3T,IAAI0T,GAAG1T;IAC1B;EACF;AAKO,WAAS6T,qBAAqBH,IAAiBC,IAAiBpkB,IAAW0M,MAAO;AACvF,UAAM6X,MAAM;MAAC/T,GAAG2T,GAAGjR;MAAMzC,GAAG0T,GAAG/Q;IAAI;AACnC,UAAMoR,MAAM;MAAChU,GAAG4T,GAAGnR;MAAMxC,GAAG2T,GAAGjR;IAAI;AACnC,UAAMsR,KAAIP,aAAaC,IAAII,KAAKvkB,EAAAA;AAChC,UAAM0kB,KAAIR,aAAaK,KAAKC,KAAKxkB,EAAAA;AACjC,UAAM2kB,KAAIT,aAAaM,KAAKJ,IAAIpkB,EAAAA;AAChC,UAAM4C,KAAIshB,aAAaO,IAAGC,IAAG1kB,EAAAA;AAC7B,UAAMqhB,KAAI6C,aAAaQ,IAAGC,IAAG3kB,EAAAA;AAC7B,WAAOkkB,aAAathB,IAAGye,IAAGrhB,EAAAA;EAC5B;AChCA,MAAM4kB,wBAAwB,SAASC,OAAe/b,OAA2B;AAC/E,WAAO;MACL0H,EAAEA,GAAG;AACH,eAAOqU,QAAQA,QAAQ/b,QAAQ0H;MACjC;MACAsU,SAASnU,GAAG;AACV7H,gBAAQ6H;MACV;MACA8C,UAAUhX,OAAO;AACf,YAAIA,UAAU,UAAU;AACtB,iBAAOA;;AAET,eAAOA,UAAU,UAAU,SAAS;MACtC;MACAsoB,MAAMvU,GAAGzN,OAAO;AACd,eAAOyN,IAAIzN;MACb;MACAiiB,WAAWxU,GAAGyU,WAAW;AACvB,eAAOzU,IAAIyU;MACb;IACF;EACF;AAEA,MAAMC,wBAAwB,WAAuB;AACnD,WAAO;MACL1U,EAAEA,GAAG;AACH,eAAOA;MACT;MACAsU,SAASnU,GAAG;MAAA;MAEZ8C,UAAUhX,OAAO;AACf,eAAOA;MACT;MACAsoB,MAAMvU,GAAGzN,OAAO;AACd,eAAOyN,IAAIzN;MACb;MACAiiB,WAAWxU,GAAG2U,YAAY;AACxB,eAAO3U;MACT;IACF;EACF;AAEO,WAAS4U,cAAcpoB,KAAc6nB,OAAe/b,OAAe;AACxE,WAAO9L,MAAM4nB,sBAAsBC,OAAO/b,KAAAA,IAASoc,sBAAuB;EAC5E;AAEO,WAASG,sBAAsBhZ,KAA+BiZ,WAA0B;AAC7F,QAAItZ,OAA4BuZ;AAChC,QAAID,cAAc,SAASA,cAAc,OAAO;AAC9CtZ,cAAQK,IAAI6D,OAAOlE;AACnBuZ,iBAAW;QACTvZ,MAAM0U,iBAAiB,WAAA;QACvB1U,MAAMwZ,oBAAoB,WAAA;MAC3B;AAEDxZ,YAAMyZ,YAAY,aAAaH,WAAW,WAAA;AACzCjZ,UAAiDqZ,oBAAoBH;;EAE1E;AAEO,WAASI,qBAAqBtZ,KAA+BkZ,UAA6B;AAC/F,QAAIA,aAAa1hB,QAAW;AAC1B,aAAQwI,IAAiDqZ;AACzDrZ,UAAI6D,OAAOlE,MAAMyZ,YAAY,aAAaF,SAAS,CAAA,GAAIA,SAAS,CAAE,CAAA;;EAEtE;AC/DA,WAASK,WAAWnF,UAAU;AAC5B,QAAIA,aAAa,SAAS;AACxB,aAAO;QACLoF,SAASC;QACTC,SAASC;QACTC,WAAWC;MACb;;AAEF,WAAO;MACLL,SAASM;MACTJ,SAAS,CAACtB,IAAGC,OAAMD,KAAIC;MACvBuB,WAAWzV,CAAAA,MAAKA;IAClB;EACF;AAEA,WAAS4V,iBAAiB,EAACzpB,OAAAA,QAAOC,KAAAA,MAAKY,OAAOyG,MAAM+H,MAAK,GAAG;AAC1D,WAAO;MACLrP,OAAOA,SAAQa;MACfZ,KAAKA,OAAMY;MACXyG,MAAMA,SAASrH,OAAMD,SAAQ,KAAKa,UAAU;MAC5CwO;IACF;EACF;AAEA,WAASqa,WAAWC,SAASlpB,QAAQ4K,QAAQ;AAC3C,UAAM,EAACyY,UAAU9jB,OAAO4pB,YAAY3pB,KAAK4pB,SAAQ,IAAIxe;AACrD,UAAM,EAAC6d,SAASI,UAAS,IAAIL,WAAWnF,QAAAA;AACxC,UAAMjjB,QAAQJ,OAAOG;AAErB,QAAI,EAACZ,OAAAA,QAAOC,KAAAA,MAAKqH,KAAAA,IAAQqiB;AACzB,QAAI5b,IAAG0E;AAEP,QAAInL,MAAM;AACRtH,MAAAA,UAASa;AACTZ,MAAAA,QAAOY;AACP,WAAKkN,KAAI,GAAG0E,OAAO5R,OAAOkN,KAAI0E,MAAM,EAAE1E,IAAG;AACvC,YAAI,CAACmb,QAAQI,UAAU7oB,OAAOT,SAAQa,KAAAA,EAAOijB,QAAAA,CAAS,GAAG8F,YAAYC,QAAW,GAAA;AAC9E;;AAEF7pB,QAAAA;AACAC,QAAAA;MACF;AACAD,MAAAA,UAASa;AACTZ,MAAAA,QAAOY;;AAGT,QAAIZ,OAAMD,QAAO;AACfC,MAAAA,QAAOY;;AAET,WAAO;MAACb,OAAAA;MAAOC,KAAAA;MAAKqH;MAAM+H,OAAOsa,QAAQta;IAAK;EAChD;AAgBO,WAASya,cAAcH,SAASlpB,QAAQ4K,QAAQ;AACrD,QAAI,CAACA,QAAQ;AACX,aAAO;QAACse;MAAQ;;AAGlB,UAAM,EAAC7F,UAAU9jB,OAAO4pB,YAAY3pB,KAAK4pB,SAAQ,IAAIxe;AACrD,UAAMxK,QAAQJ,OAAOG;AACrB,UAAM,EAACwoB,SAAAA,UAASF,SAASI,UAAS,IAAIL,WAAWnF,QAAAA;AACjD,UAAM,EAAC9jB,OAAAA,QAAOC,KAAAA,MAAKqH,MAAM+H,MAAAA,IAASqa,WAAWC,SAASlpB,QAAQ4K,MAAAA;AAE9D,UAAM+Y,SAAS,CAAA;AACf,QAAI2F,SAAS;AACb,QAAIC,WAAW;AACf,QAAI5jB,OAAOjE,OAAO8nB;AAElB,UAAMC,gBAAgB,MAAMhB,QAAQU,YAAYK,WAAW7jB,KAAUgjB,KAAAA,SAAQQ,YAAYK,SAAe,MAAA;AACxG,UAAME,cAAc,MAAMf,SAAQS,UAAUzjB,KAAAA,MAAW,KAAK8iB,QAAQW,UAAUI,WAAW7jB,KAAAA;AACzF,UAAMgkB,cAAc,MAAML,UAAUG,cAAAA;AACpC,UAAMG,aAAa,MAAM,CAACN,UAAUI,YAAAA;AAEpC,aAASpc,KAAI/N,QAAO2iB,OAAO3iB,QAAO+N,MAAK9N,MAAK,EAAE8N,IAAG;AAC/C5L,cAAQ1B,OAAOsN,KAAIlN,KAAM;AAEzB,UAAIsB,MAAM6d,MAAM;AACd;;AAGF5Z,cAAQkjB,UAAUnnB,MAAM2hB,QAAS,CAAA;AAEjC,UAAI1d,UAAU6jB,WAAW;AACvB;;AAGFF,eAASb,QAAQ9iB,OAAOwjB,YAAYC,QAAAA;AAEpC,UAAIG,aAAa,QAAQI,YAAe,GAAA;AACtCJ,mBAAWZ,SAAQhjB,OAAOwjB,UAAgB,MAAA,IAAI7b,KAAI4U;;AAGpD,UAAIqH,aAAa,QAAQK,WAAc,GAAA;AACrCjG,eAAOjS,KAAKsX,iBAAiB;UAACzpB,OAAOgqB;UAAU/pB,KAAK8N;UAAGzG;UAAMzG;UAAOwO;QAAK,CAAA,CAAA;AACzE2a,mBAAW;;AAEbrH,aAAO5U;AACPkc,kBAAY7jB;IACd;AAEA,QAAI4jB,aAAa,MAAM;AACrB5F,aAAOjS,KAAKsX,iBAAiB;QAACzpB,OAAOgqB;QAAU/pB,KAAAA;QAAKqH;QAAMzG;QAAOwO;MAAK,CAAA,CAAA;;AAGxE,WAAO+U;EACT;AAYO,WAASkG,eAAerT,MAAM5L,QAAQ;AAC3C,UAAM+Y,SAAS,CAAA;AACf,UAAMmG,WAAWtT,KAAKsT;AAEtB,aAASxc,KAAI,GAAGA,KAAIwc,SAAS3pB,QAAQmN,MAAK;AACxC,YAAMyc,MAAMV,cAAcS,SAASxc,EAAAA,GAAIkJ,KAAKxW,QAAQ4K,MAAAA;AACpD,UAAImf,IAAI5pB,QAAQ;AACdwjB,eAAOjS,KAAQqY,GAAAA,GAAAA;;IAEnB;AACA,WAAOpG;EACT;AAKA,WAASqG,gBAAgBhqB,QAAQI,OAAOyG,MAAMpG,UAAU;AACtD,QAAIlB,SAAQ;AACZ,QAAIC,OAAMY,QAAQ;AAElB,QAAIyG,QAAQ,CAACpG,UAAU;AAErB,aAAOlB,SAAQa,SAAS,CAACJ,OAAOT,MAAM,EAACggB,MAAM;AAC3ChgB,QAAAA;MACF;;AAIF,WAAOA,SAAQa,SAASJ,OAAOT,MAAM,EAACggB,MAAM;AAC1ChgB,MAAAA;IACF;AAGAA,IAAAA,UAASa;AAET,QAAIyG,MAAM;AAERrH,MAAAA,QAAOD;;AAGT,WAAOC,OAAMD,UAASS,OAAOR,OAAMY,KAAM,EAACmf,MAAM;AAC9C/f,MAAAA;IACF;AAGAA,IAAAA,QAAOY;AAEP,WAAO;MAACb,OAAAA;MAAOC,KAAAA;IAAG;EACpB;AASA,WAASyqB,cAAcjqB,QAAQT,QAAOuB,MAAK+F,MAAM;AAC/C,UAAMzG,QAAQJ,OAAOG;AACrB,UAAMwjB,SAAS,CAAA;AACf,QAAIuG,OAAO3qB;AACX,QAAI2iB,OAAOliB,OAAOT,MAAM;AACxB,QAAIC;AAEJ,SAAKA,OAAMD,SAAQ,GAAGC,QAAOsB,MAAK,EAAEtB,MAAK;AACvC,YAAM2qB,MAAMnqB,OAAOR,OAAMY,KAAM;AAC/B,UAAI+pB,IAAI5K,QAAQ4K,IAAIC,MAAM;AACxB,YAAI,CAAClI,KAAK3C,MAAM;AACd1Y,iBAAO;AACP8c,iBAAOjS,KAAK;YAACnS,OAAOA,SAAQa;YAAOZ,MAAMA,OAAM,KAAKY;YAAOyG;UAAI,CAAA;AAE/DtH,UAAAA,SAAQ2qB,OAAOC,IAAIC,OAAO5qB,OAAM;;aAE7B;AACL0qB,eAAO1qB;AACP,YAAI0iB,KAAK3C,MAAM;AACbhgB,UAAAA,SAAQC;;;AAGZ0iB,aAAOiI;IACT;AAEA,QAAID,SAAS,MAAM;AACjBvG,aAAOjS,KAAK;QAACnS,OAAOA,SAAQa;QAAOZ,KAAK0qB,OAAO9pB;QAAOyG;MAAI,CAAA;;AAG5D,WAAO8c;EACT;AAUO,WAAS0G,iBAAiB7T,MAAM8T,gBAAgB;AACrD,UAAMtqB,SAASwW,KAAKxW;AACpB,UAAMS,WAAW+V,KAAK7V,QAAQF;AAC9B,UAAML,QAAQJ,OAAOG;AAErB,QAAI,CAACC,OAAO;AACV,aAAO,CAAA;;AAGT,UAAMyG,OAAO,CAAC,CAAC2P,KAAK+T;AACpB,UAAM,EAAChrB,OAAAA,QAAOC,KAAAA,KAAAA,IAAOwqB,gBAAgBhqB,QAAQI,OAAOyG,MAAMpG,QAAAA;AAE1D,QAAIA,aAAa,MAAM;AACrB,aAAO+pB,cAAchU,MAAM;QAAC;UAACjX,OAAAA;UAAOC,KAAAA;UAAKqH;QAAI;MAAE,GAAE7G,QAAQsqB,cAAAA;;AAG3D,UAAMxpB,OAAMtB,OAAMD,SAAQC,OAAMY,QAAQZ;AACxC,UAAMirB,eAAe,CAAC,CAACjU,KAAKkU,aAAanrB,WAAU,KAAKC,SAAQY,QAAQ;AACxE,WAAOoqB,cAAchU,MAAMyT,cAAcjqB,QAAQT,QAAOuB,MAAK2pB,YAAAA,GAAezqB,QAAQsqB,cAAAA;EACtF;AAQA,WAASE,cAAchU,MAAMsT,UAAU9pB,QAAQsqB,gBAAgB;AAC7D,QAAI,CAACA,kBAAkB,CAACA,eAAe7N,cAAc,CAACzc,QAAQ;AAC5D,aAAO8pB;;AAET,WAAOa,gBAAgBnU,MAAMsT,UAAU9pB,QAAQsqB,cAAAA;EACjD;AASA,WAASK,gBAAgBnU,MAAMsT,UAAU9pB,QAAQsqB,gBAAgB;AAC/D,UAAMM,eAAepU,KAAKqU,OAAO9X,WAAU;AAC3C,UAAM+X,YAAYC,UAAUvU,KAAK7V,OAAO;AACxC,UAAM,EAACqqB,eAAeC,cAActqB,SAAS,EAACF,SAAQ,EAAC,IAAI+V;AAC3D,UAAMpW,QAAQJ,OAAOG;AACrB,UAAMwjB,SAAS,CAAA;AACf,QAAIuH,YAAYJ;AAChB,QAAIvrB,SAAQuqB,SAAS,CAAA,EAAGvqB;AACxB,QAAI+N,KAAI/N;AAER,aAAS4rB,SAASroB,IAAGmhB,IAAGmH,IAAGC,IAAI;AAC7B,YAAMC,MAAM7qB,WAAW,KAAK;AAC5B,UAAIqC,OAAMmhB,IAAG;AACX;;AAGFnhB,MAAAA,MAAK1C;AACL,aAAOJ,OAAO8C,KAAI1C,KAAM,EAACmf,MAAM;AAC7Bzc,QAAAA,MAAKwoB;MACP;AACA,aAAOtrB,OAAOikB,KAAI7jB,KAAM,EAACmf,MAAM;AAC7B0E,QAAAA,MAAKqH;MACP;AACA,UAAIxoB,KAAI1C,UAAU6jB,KAAI7jB,OAAO;AAC3BujB,eAAOjS,KAAK;UAACnS,OAAOuD,KAAI1C;UAAOZ,KAAKykB,KAAI7jB;UAAOyG,MAAMukB;UAAGxc,OAAOyc;QAAE,CAAA;AACjEH,oBAAYG;AACZ9rB,QAAAA,SAAQ0kB,KAAI7jB;;IAEhB;AAEA,eAAW8oB,WAAWY,UAAU;AAC9BvqB,MAAAA,SAAQkB,WAAWlB,SAAQ2pB,QAAQ3pB;AACnC,UAAI2iB,OAAOliB,OAAOT,SAAQa,KAAM;AAChC,UAAIwO;AACJ,WAAKtB,KAAI/N,SAAQ,GAAG+N,MAAK4b,QAAQ1pB,KAAK8N,MAAK;AACzC,cAAMoU,KAAK1hB,OAAOsN,KAAIlN,KAAM;AAC5BwO,gBAAQmc,UAAUT,eAAe7N,WAAWrC,cAAcwQ,cAAc;UACtEhlB,MAAM;UACN2lB,IAAIrJ;UACJ6E,IAAIrF;UACJ8J,cAAcle,KAAI,KAAKlN;UACvBqrB,aAAane,KAAIlN;UACjB6qB;QACF,CAAA,CAAA,CAAA;AACA,YAAIS,aAAa9c,OAAOsc,SAAY,GAAA;AAClCC,mBAAS5rB,QAAO+N,KAAI,GAAG4b,QAAQriB,MAAMqkB,SAAAA;;AAEvChJ,eAAOR;AACPwJ,oBAAYtc;MACd;AACA,UAAIrP,SAAQ+N,KAAI,GAAG;AACjB6d,iBAAS5rB,QAAO+N,KAAI,GAAG4b,QAAQriB,MAAMqkB,SAAAA;;IAEzC;AAEA,WAAOvH;EACT;AAEA,WAASoH,UAAUpqB,SAAS;AAC1B,WAAO;MACLqN,iBAAiBrN,QAAQqN;MACzB2d,gBAAgBhrB,QAAQgrB;MACxBC,YAAYjrB,QAAQirB;MACpBC,kBAAkBlrB,QAAQkrB;MAC1BC,iBAAiBnrB,QAAQmrB;MACzB9W,aAAarU,QAAQqU;MACrB/G,aAAatN,QAAQsN;IACvB;EACF;AAEA,WAASyd,aAAa9c,OAAOsc,WAAW;AACtC,QAAI,CAACA,WAAW;AACd,aAAO;;AAET,UAAMrZ,SAAQ,CAAA;AACd,UAAMka,WAAW,SAAS5e,KAAKxH,OAAO;AACpC,UAAI,CAACD,oBAAoBC,KAAQ,GAAA;AAC/B,eAAOA;;AAET,UAAI,CAACkM,OAAMtH,SAAS5E,KAAQ,GAAA;AAC1BkM,QAAAA,OAAMH,KAAK/L,KAAAA;;AAEb,aAAOkM,OAAMiR,QAAQnd,KAAAA;IACvB;AACA,WAAO4C,KAAKC,UAAUoG,OAAOmd,QAAAA,MAAcxjB,KAAKC,UAAU0iB,WAAWa,QAAAA;EACvE;ACzWA,WAASC,eAAejc,OAAckc,WAAsBC,OAAwB;AAClF,WAAOnc,MAAMpP,QAAQkK,OAAOkF,MAAMmc,KAAM,IAAGD,UAAUC,KAAM;EAC7D;AAEA,WAASC,eAAepsB,MAAiBksB,WAA4B;AACnE,UAAM,EAACjqB,QAAQC,OAAAA,IAAUlC;AACzB,QAAIiC,UAAUC,QAAQ;AACpB,aAAO;QACLvC,MAAMssB,eAAehqB,QAAQiqB,WAAW,MAAA;QACxCtsB,OAAOqsB,eAAehqB,QAAQiqB,WAAW,OAAA;QACzCjkB,KAAKgkB,eAAe/pB,QAAQgqB,WAAW,KAAA;QACvChkB,QAAQ+jB,eAAe/pB,QAAQgqB,WAAW,QAAA;MAC5C;;AAEF,WAAOA;EACT;AAEO,WAASG,mBAAmB7iB,OAAcxJ,MAA+B;AAC9E,UAAM8K,OAAO9K,KAAKssB;AAClB,QAAIxhB,KAAKyhB,UAAU;AACjB,aAAO;;AAET,UAAMnX,OAAOgX,eAAepsB,MAAMwJ,MAAM0iB,SAAS;AAEjD,WAAO;MACLvsB,MAAMmL,KAAKnL,SAAS,QAAQ,IAAIyV,KAAKzV,QAAQmL,KAAKnL,SAAS,OAAO,IAAImL,KAAKnL;MAC3EC,OAAOkL,KAAKlL,UAAU,QAAQ4J,MAAMmC,QAAQyJ,KAAKxV,SAASkL,KAAKlL,UAAU,OAAO,IAAIkL,KAAKlL;MACzFqI,KAAK6C,KAAK7C,QAAQ,QAAQ,IAAImN,KAAKnN,OAAO6C,KAAK7C,QAAQ,OAAO,IAAI6C,KAAK7C;MACvEC,QAAQ4C,KAAK5C,WAAW,QAAQsB,MAAM2J,SAASiC,KAAKlN,UAAU4C,KAAK5C,WAAW,OAAO,IAAI4C,KAAK5C;IAChG;EACF;;;ACrBO,MAAMskB,WAAN,MAAMA;IACXC,cAAc;AACZ,WAAKC,WAAW;AAChB,WAAKC,UAAU,oBAAIC,IAAAA;AACnB,WAAKC,WAAW;AAChB,WAAKC,YAAYC;IACnB;IAKAC,QAAQC,OAAOC,OAAOC,MAAMC,MAAM;AAChC,YAAMC,YAAYH,MAAMI,UAAUF,IAAK;AACvC,YAAMG,WAAWL,MAAMM;AAEvBH,gBAAUI,QAAQC,CAAAA,QAAMA,IAAG;QACzBT;QACAU,SAAST,MAAMS;QACfJ;QACAK,aAAaC,KAAKC,IAAIX,OAAOD,MAAMa,OAAOR,QAAAA;MAC5C,CAAA,CAAA;IACF;IAKAS,WAAW;AACT,UAAI,KAAKtB,UAAU;AACjB;;AAEF,WAAKG,WAAW;AAEhB,WAAKH,WAAWuB,iBAAiBC,KAAKC,QAAQ,MAAM;AAClD,aAAKC,QAAO;AACZ,aAAK1B,WAAW;AAEhB,YAAI,KAAKG,UAAU;AACjB,eAAKmB,SAAQ;;MAEjB,CAAA;IACF;IAKAI,QAAQjB,OAAOkB,KAAKC,IAAG,GAAI;AACzB,UAAIC,YAAY;AAEhB,WAAK5B,QAAQc,QAAQ,CAACP,OAAOD,UAAU;AACrC,YAAI,CAACC,MAAMsB,WAAW,CAACtB,MAAMuB,MAAMC,QAAQ;AACzC;;AAEF,cAAMD,QAAQvB,MAAMuB;AACpB,YAAIE,KAAIF,MAAMC,SAAS;AACvB,YAAIE,QAAO;AACX,YAAIC;AAEJ,eAAOF,MAAK,GAAG,EAAEA,IAAG;AAClBE,iBAAOJ,MAAME,EAAE;AAEf,cAAIE,KAAKC,SAAS;AAChB,gBAAID,KAAKE,SAAS7B,MAAMM,UAAU;AAGhCN,oBAAMM,WAAWqB,KAAKE;;AAExBF,iBAAKG,KAAK7B,IAAAA;AACVyB,YAAAA,QAAO;iBACF;AAGLH,kBAAME,EAAAA,IAAKF,MAAMA,MAAMC,SAAS,CAAE;AAClCD,kBAAMQ,IAAG;;QAEb;AAEA,YAAIL,OAAM;AACR3B,gBAAM2B,KAAI;AACV,eAAK5B,QAAQC,OAAOC,OAAOC,MAAM,UAAA;;AAGnC,YAAI,CAACsB,MAAMC,QAAQ;AACjBxB,gBAAMsB,UAAU;AAChB,eAAKxB,QAAQC,OAAOC,OAAOC,MAAM,UAAA;AACjCD,gBAAMS,UAAU;;AAGlBY,qBAAaE,MAAMC;MACrB,CAAA;AAEA,WAAK5B,YAAYK;AAEjB,UAAIoB,cAAc,GAAG;AACnB,aAAK1B,WAAW;;IAEpB;IAKAqC,UAAUjC,OAAO;AACf,YAAMkC,SAAS,KAAKxC;AACpB,UAAIO,QAAQiC,OAAOC,IAAInC,KAAAA;AACvB,UAAI,CAACC,OAAO;AACVA,gBAAQ;UACNsB,SAAS;UACTb,SAAS;UACTc,OAAO,CAAA;UACPnB,WAAW;YACT+B,UAAU,CAAA;YACVC,UAAU,CAAA;UACZ;QACF;AACAH,eAAOI,IAAItC,OAAOC,KAAAA;;AAEpB,aAAOA;IACT;IAOAsC,OAAOvC,OAAOwC,QAAOC,IAAI;AACvB,WAAKR,UAAUjC,KAAAA,EAAOK,UAAUmC,MAAAA,EAAOE,KAAKD,EAAAA;IAC9C;IAOAE,IAAI3C,OAAOwB,OAAO;AAChB,UAAI,CAACA,SAAS,CAACA,MAAMC,QAAQ;AAC3B;;AAEF,WAAKQ,UAAUjC,KAAAA,EAAOwB,MAAMkB,KAAQlB,GAAAA,KAAAA;IACtC;IAMAoB,IAAI5C,OAAO;AACT,aAAO,KAAKiC,UAAUjC,KAAAA,EAAOwB,MAAMC,SAAS;IAC9C;IAMAX,MAAMd,OAAO;AACX,YAAMC,QAAQ,KAAKP,QAAQyC,IAAInC,KAAAA;AAC/B,UAAI,CAACC,OAAO;AACV;;AAEFA,YAAMsB,UAAU;AAChBtB,YAAMa,QAAQM,KAAKC,IAAG;AACtBpB,YAAMM,WAAWN,MAAMuB,MAAMqB,OAAO,CAACC,KAAKC,QAAQnC,KAAKoC,IAAIF,KAAKC,IAAIE,SAAS,GAAG,CAAA;AAChF,WAAKlC,SAAQ;IACf;IAEAQ,QAAQvB,OAAO;AACb,UAAI,CAAC,KAAKJ,UAAU;AAClB,eAAO;;AAET,YAAMK,QAAQ,KAAKP,QAAQyC,IAAInC,KAAAA;AAC/B,UAAI,CAACC,SAAS,CAACA,MAAMsB,WAAW,CAACtB,MAAMuB,MAAMC,QAAQ;AACnD,eAAO;;AAET,aAAO;IACT;IAMAyB,KAAKlD,OAAO;AACV,YAAMC,QAAQ,KAAKP,QAAQyC,IAAInC,KAAAA;AAC/B,UAAI,CAACC,SAAS,CAACA,MAAMuB,MAAMC,QAAQ;AACjC;;AAEF,YAAMD,QAAQvB,MAAMuB;AACpB,UAAIE,KAAIF,MAAMC,SAAS;AAEvB,aAAOC,MAAK,GAAG,EAAEA,IAAG;AAClBF,cAAME,EAAE,EAACyB,OAAM;MACjB;AACAlD,YAAMuB,QAAQ,CAAA;AACd,WAAKzB,QAAQC,OAAOC,OAAOmB,KAAKC,IAAG,GAAI,UAAA;IACzC;IAMA+B,OAAOpD,OAAO;AACZ,aAAO,KAAKN,QAAQ2D,OAAOrD,KAAAA;IAC7B;EACF;AAGA,MAAA,WAA+B,oBAAIT,SAAW;ACjN9C,MAAM+D,cAAc;AACpB,MAAMC,gBAAgB;IACpBC,QAAQC,OAAMC,KAAIC,QAAQ;AACxB,aAAOA,SAAS,MAAMD,MAAKD;IAC7B;IAMAG,MAAMH,OAAMC,KAAIC,QAAQ;AACtB,YAAME,KAAKC,MAAaL,SAAQH,WAAAA;AAChC,YAAMS,KAAKF,GAAGG,SAASF,MAAaJ,OAAMJ,WAAAA;AAC1C,aAAOS,MAAMA,GAAGC,QACZD,GAAGE,IAAIJ,IAAIF,MAAAA,EAAQO,UAAS,IAC5BR;IACN;IACAS,OAAOV,OAAMC,KAAIC,QAAQ;AACvB,aAAOF,SAAQC,MAAKD,SAAQE;IAC9B;EACF;AAEe,MAAMS,YAAN,MAAMA;IACnB5E,YAAY6E,KAAKC,QAAQC,MAAMb,KAAI;AACjC,YAAMc,eAAeF,OAAOC,IAAK;AAEjCb,MAAAA,MAAKe,QAAQ;QAACJ,IAAIX;QAAIA;QAAIc;QAAcH,IAAIZ;MAAK,CAAA;AACjD,YAAMA,QAAOgB,QAAQ;QAACJ,IAAIZ;QAAMe;QAAcd;MAAG,CAAA;AAEjD,WAAK7B,UAAU;AACf,WAAK6C,MAAML,IAAI5D,MAAM8C,cAAcc,IAAIlE,QAAQ,OAAOsD,KAAK;AAC3D,WAAKkB,UAAUC,QAAQP,IAAIQ,MAAM,KAAKD,QAAQE;AAC9C,WAAKC,SAASnE,KAAKoE,MAAM5D,KAAKC,IAAG,KAAMgD,IAAIY,SAAS,EAAA;AACpD,WAAKhC,YAAY,KAAKnB,SAASlB,KAAKoE,MAAMX,IAAI9D,QAAQ;AACtD,WAAK2E,QAAQ,CAAC,CAACb,IAAIc;AACnB,WAAKC,UAAUd;AACf,WAAKe,QAAQd;AACb,WAAKe,QAAQ7B;AACb,WAAK8B,MAAM7B;AACX,WAAK8B,YAAY1F;IACnB;IAEA2F,SAAS;AACP,aAAO,KAAK5D;IACd;IAEA6D,OAAOrB,KAAKX,KAAIxD,MAAM;AACpB,UAAI,KAAK2B,SAAS;AAChB,aAAK9B,QAAQ,KAAK;AAElB,cAAMyE,eAAe,KAAKY,QAAQ,KAAKC,KAAK;AAC5C,cAAMM,UAAUzF,OAAO,KAAK6E;AAC5B,cAAMa,SAAS,KAAK3C,YAAY0C;AAChC,aAAKZ,SAAS7E;AACd,aAAK+C,YAAYrC,KAAKoE,MAAMpE,KAAKoC,IAAI4C,QAAQvB,IAAI9D,QAAQ,CAAA;AACzD,aAAKuB,UAAU6D;AACf,aAAKT,QAAQ,CAAC,CAACb,IAAIc;AACnB,aAAKI,MAAMd,QAAQ;UAACJ,IAAIX;UAAIA;UAAIc;UAAcH,IAAIZ;QAAK,CAAA;AACvD,aAAK6B,QAAQb,QAAQ;UAACJ,IAAIZ;UAAMe;UAAcd;QAAG,CAAA;;IAErD;IAEAP,SAAS;AACP,UAAI,KAAKtB,SAAS;AAEhB,aAAKE,KAAKX,KAAKC,IAAG,CAAA;AAClB,aAAKQ,UAAU;AACf,aAAK9B,QAAQ,KAAK;;IAEtB;IAEAgC,KAAK7B,MAAM;AACT,YAAMyF,UAAUzF,OAAO,KAAK6E;AAC5B,YAAMxE,WAAW,KAAK0C;AACtB,YAAMsB,OAAO,KAAKc;AAClB,YAAM5B,QAAO,KAAK6B;AAClB,YAAMH,OAAO,KAAKD;AAClB,YAAMxB,MAAK,KAAK6B;AAChB,UAAI5B;AAEJ,WAAK9B,UAAU4B,UAASC,QAAOyB,QAASQ,UAAUpF;AAElD,UAAI,CAAC,KAAKsB,SAAS;AACjB,aAAKuD,QAAQb,IAAAA,IAAQb;AACrB,aAAK3D,QAAQ,IAAI;AACjB;;AAGF,UAAI4F,UAAU,GAAG;AACf,aAAKP,QAAQb,IAAAA,IAAQd;AACrB;;AAGFE,eAAUgC,UAAUpF,WAAY;AAChCoD,eAASwB,QAAQxB,SAAS,IAAI,IAAIA,SAASA;AAC3CA,eAAS,KAAKgB,QAAQ/D,KAAKC,IAAI,GAAGD,KAAKoC,IAAI,GAAGW,MAAAA,CAAAA,CAAAA;AAE9C,WAAKyB,QAAQb,IAAK,IAAG,KAAKG,IAAIjB,OAAMC,KAAIC,MAAAA;IAC1C;IAEAkC,OAAO;AACL,YAAMC,WAAW,KAAKN,cAAc,KAAKA,YAAY,CAAA;AACrD,aAAO,IAAIO,QAAQ,CAACC,KAAKC,QAAQ;AAC/BH,iBAASpD,KAAK;UAACsD;UAAKC;QAAG,CAAA;MACzB,CAAA;IACF;IAEAlG,QAAQmG,UAAU;AAChB,YAAMC,SAASD,WAAW,QAAQ;AAClC,YAAMJ,WAAW,KAAKN,aAAa,CAAA;AACnC,eAAS9D,KAAI,GAAGA,KAAIoE,SAASrE,QAAQC,MAAK;AACxCoE,iBAASpE,EAAE,EAACyE,MAAO,EAAA;MACrB;IACF;EACF;ACjHe,MAAMC,aAAN,MAAMA;IACnB5G,YAAYQ,OAAOqG,SAAQ;AACzB,WAAKC,SAAStG;AACd,WAAKuG,cAAc,oBAAI5G,IAAAA;AACvB,WAAK6G,UAAUH,OAAAA;IACjB;IAEAG,UAAUH,SAAQ;AAChB,UAAI,CAACI,SAASJ,OAAS,GAAA;AACrB;;AAGF,YAAMK,mBAAmBC,OAAOC,KAAKC,UAASC,SAAS;AACvD,YAAMC,gBAAgB,KAAKR;AAE3BI,aAAOK,oBAAoBX,OAAAA,EAAQ7F,QAAQyG,CAAAA,QAAO;AAChD,cAAM5C,MAAMgC,QAAOY,GAAI;AACvB,YAAI,CAACR,SAASpC,GAAM,GAAA;AAClB;;AAEF,cAAM6B,WAAW,CAAA;AACjB,mBAAWgB,UAAUR,kBAAkB;AACrCR,mBAASgB,MAAAA,IAAU7C,IAAI6C,MAAO;QAChC;AAECC,SAAAA,QAAQ9C,IAAI+C,UAAU,KAAK/C,IAAI+C,cAAc;UAACH;QAAI,GAAEzG,QAAQ,CAAC+D,SAAS;AACrE,cAAIA,SAAS0C,OAAO,CAACF,cAAcnE,IAAI2B,IAAO,GAAA;AAC5CwC,0BAAczE,IAAIiC,MAAM2B,QAAAA;;QAE5B,CAAA;MACF,CAAA;IACF;IAMAmB,gBAAgB/C,QAAQgD,QAAQ;AAC9B,YAAMC,aAAaD,OAAOE;AAC1B,YAAMA,UAAUC,qBAAqBnD,QAAQiD,UAAAA;AAC7C,UAAI,CAACC,SAAS;AACZ,eAAO,CAAA;;AAGT,YAAME,aAAa,KAAKC,kBAAkBH,SAASD,UAAAA;AACnD,UAAIA,WAAWK,SAAS;AAItBC,iBAASvD,OAAOkD,QAAQM,aAAaP,UAAYQ,EAAAA,KAAK,MAAM;AAC1DzD,iBAAOkD,UAAUD;QACnB,GAAG,MAAM;QAET,CAAA;;AAGF,aAAOG;IACT;IAKAC,kBAAkBrD,QAAQgD,QAAQ;AAChC,YAAMP,gBAAgB,KAAKR;AAC3B,YAAMmB,aAAa,CAAA;AACnB,YAAMnG,UAAU+C,OAAOwD,gBAAgBxD,OAAOwD,cAAc,CAAA;AAC5D,YAAME,QAAQrB,OAAOC,KAAKU,MAAAA;AAC1B,YAAMpH,OAAOkB,KAAKC,IAAG;AACrB,UAAIK;AAEJ,WAAKA,KAAIsG,MAAMvG,SAAS,GAAGC,MAAK,GAAG,EAAEA,IAAG;AACtC,cAAM6C,OAAOyD,MAAMtG,EAAE;AACrB,YAAI6C,KAAK0D,OAAO,CAAA,MAAO,KAAK;AAC1B;;AAGF,YAAI1D,SAAS,WAAW;AACtBmD,qBAAWhF,KAAQ,GAAA,KAAK2E,gBAAgB/C,QAAQgD,MAAAA,CAAAA;AAChD;;AAEF,cAAMY,QAAQZ,OAAO/C,IAAK;AAC1B,YAAIuC,YAAYvF,QAAQgD,IAAK;AAC7B,cAAMF,MAAM0C,cAAc5E,IAAIoC,IAAAA;AAE9B,YAAIuC,WAAW;AACb,cAAIzC,OAAOyC,UAAUrB,OAAM,GAAI;AAE7BqB,sBAAUpB,OAAOrB,KAAK6D,OAAOhI,IAAAA;AAC7B;iBACK;AACL4G,sBAAU3D,OAAM;;;AAGpB,YAAI,CAACkB,OAAO,CAACA,IAAI9D,UAAU;AAEzB+D,iBAAOC,IAAAA,IAAQ2D;AACf;;AAGF3G,gBAAQgD,IAAAA,IAAQuC,YAAY,IAAI1C,UAAUC,KAAKC,QAAQC,MAAM2D,KAAAA;AAC7DR,mBAAWhF,KAAKoE,SAAAA;MAClB;AACA,aAAOY;IACT;IASAhC,OAAOpB,QAAQgD,QAAQ;AACrB,UAAI,KAAKf,YAAY4B,SAAS,GAAG;AAE/BxB,eAAOyB,OAAO9D,QAAQgD,MAAAA;AACtB;;AAGF,YAAMI,aAAa,KAAKC,kBAAkBrD,QAAQgD,MAAAA;AAElD,UAAII,WAAWjG,QAAQ;AACrB4G,iBAAS1F,IAAI,KAAK2D,QAAQoB,UAAAA;AAC1B,eAAO;;IAEX;EACF;AAEA,WAASG,SAASH,YAAYN,YAAY;AACxC,UAAM7F,UAAU,CAAA;AAChB,UAAMqF,OAAOD,OAAOC,KAAKQ,UAAAA;AACzB,aAAS1F,KAAI,GAAGA,KAAIkF,KAAKnF,QAAQC,MAAK;AACpC,YAAM4G,OAAOZ,WAAWd,KAAKlF,EAAAA,CAAE;AAC/B,UAAI4G,QAAQA,KAAK7C,OAAM,GAAI;AACzBlE,gBAAQmB,KAAK4F,KAAKzC,KAAI,CAAA;;IAE1B;AAEA,WAAOE,QAAQwC,IAAIhH,OAAAA;EACrB;AAEA,WAASkG,qBAAqBnD,QAAQiD,YAAY;AAChD,QAAI,CAACA,YAAY;AACf;;AAEF,QAAIC,UAAUlD,OAAOkD;AACrB,QAAI,CAACA,SAAS;AACZlD,aAAOkD,UAAUD;AACjB;;AAEF,QAAIC,QAAQI,SAAS;AAGnBtD,aAAOkD,UAAUA,UAAUb,OAAOyB,OAAO,CAAA,GAAIZ,SAAS;QAACI,SAAS;QAAOE,aAAa,CAAA;MAAE,CAAA;;AAExF,WAAON;EACT;ACtJA,WAASgB,UAAUC,OAAOC,iBAAiB;AACzC,UAAMC,OAAOF,SAASA,MAAMjB,WAAW,CAAA;AACvC,UAAMoB,UAAUD,KAAKC;AACrB,UAAM/H,OAAM8H,KAAK9H,QAAQf,SAAY4I,kBAAkB;AACvD,UAAM1F,OAAM2F,KAAK3F,QAAQlD,SAAY4I,kBAAkB;AACvD,WAAO;MACL5H,OAAO8H,UAAU5F,OAAMnC;MACvBgI,KAAKD,UAAU/H,OAAMmC;IACvB;EACF;AAEA,WAAS8F,YAAYC,QAAQC,QAAQN,iBAAiB;AACpD,QAAIA,oBAAoB,OAAO;AAC7B,aAAO;;AAET,UAAMO,IAAIT,UAAUO,QAAQL,eAAAA;AAC5B,UAAMQ,KAAIV,UAAUQ,QAAQN,eAAAA;AAE5B,WAAO;MACLS,KAAKD,GAAEL;MACPO,OAAOH,EAAEJ;MACTQ,QAAQH,GAAEpI;MACVwI,MAAML,EAAEnI;IACV;EACF;AAEA,WAASyI,OAAOrB,OAAO;AACrB,QAAIsB,IAAGC,IAAGC,IAAGC;AAEb,QAAIlD,SAASyB,KAAQ,GAAA;AACnBsB,MAAAA,KAAItB,MAAMiB;AACVM,MAAAA,KAAIvB,MAAMkB;AACVM,MAAAA,KAAIxB,MAAMmB;AACVM,MAAAA,KAAIzB,MAAMoB;WACL;AACLE,MAAAA,KAAIC,KAAIC,KAAIC,KAAIzB;;AAGlB,WAAO;MACLiB,KAAKK;MACLJ,OAAOK;MACPJ,QAAQK;MACRJ,MAAMK;MACNC,UAAU1B,UAAU;IACtB;EACF;AAEA,WAAS2B,wBAAwB7J,OAAO8J,eAAe;AACrD,UAAMlD,OAAO,CAAA;AACb,UAAMmD,WAAW/J,MAAMgK,uBAAuBF,aAAAA;AAC9C,QAAIpI,IAAGuI;AAEP,SAAKvI,KAAI,GAAGuI,OAAOF,SAAStI,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AACjDkF,WAAKlE,KAAKqH,SAASrI,EAAAA,EAAGwI,KAAK;IAC7B;AACA,WAAOtD;EACT;AAEA,WAASuD,WAAWC,OAAOlC,OAAOmC,SAAS7C,UAAU,CAAA,GAAI;AACvD,UAAMZ,OAAOwD,MAAMxD;AACnB,UAAM0D,aAAa9C,QAAQ+C,SAAS;AACpC,QAAI7I,IAAGuI,MAAMO,cAAcC;AAE3B,QAAIvC,UAAU,MAAM;AAClB;;AAGF,QAAIwC,QAAQ;AACZ,SAAKhJ,KAAI,GAAGuI,OAAOrD,KAAKnF,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AAC7C8I,qBAAe,CAAC5D,KAAKlF,EAAE;AACvB,UAAI8I,iBAAiBH,SAAS;AAC5BK,gBAAQ;AACR,YAAIlD,QAAQe,KAAK;AACf;;AAEF;;AAEFkC,mBAAaL,MAAM9C,OAAOkD,YAAa;AACvC,UAAIG,eAASF,UAAgBH,MAAAA,cAAepC,UAAU,KAAK0C,KAAK1C,KAAAA,MAAW0C,KAAKH,UAAAA,IAAe;AAC7FvC,iBAASuC;;IAEb;AAEA,QAAI,CAACC,SAAS,CAAClD,QAAQe,KAAK;AAC1B,aAAO;;AAGT,WAAOL;EACT;AAEA,WAAS2C,yBAAyBC,MAAMC,MAAM;AAC5C,UAAM,EAACC,QAAQC,OAAAA,IAAUF;AACzB,UAAMG,WAAWF,OAAOG,SAAS,MAAM,MAAM;AAC7C,UAAMC,WAAWH,OAAOE,SAAS,MAAM,MAAM;AAC7C,UAAMvE,OAAOD,OAAOC,KAAKkE,IAAAA;AACzB,UAAMO,QAAQ,IAAIC,MAAM1E,KAAKnF,MAAM;AACnC,QAAIC,IAAGuI,MAAMhD;AACb,SAAKvF,KAAI,GAAGuI,OAAOrD,KAAKnF,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AAC7CuF,YAAML,KAAKlF,EAAE;AACb2J,YAAM3J,EAAAA,IAAK;QACT,CAACwJ,QAAAA,GAAWjE;QACZ,CAACmE,QAAS,GAAEN,KAAK7D,GAAI;MACvB;IACF;AACA,WAAOoE;EACT;AAEA,WAASE,UAAU9C,OAAOsC,MAAM;AAC9B,UAAMS,UAAU/C,SAASA,MAAMjB,QAAQgE;AACvC,WAAOA,WAAYA,YAAY1L,UAAaiL,KAAKX,UAAUtK;EAC7D;AAEA,WAAS2L,YAAYC,YAAYC,YAAYZ,MAAM;AACjD,WAAO,GAAGW,WAAWE,EAAE,IAAID,WAAWC,EAAE,IAAIb,KAAKX,SAASW,KAAK5K,IAAI;EACrE;AAEA,WAAS0L,cAAcpD,OAAO;AAC5B,UAAM,EAAC5H,KAAAA,MAAKmC,KAAAA,MAAK8I,YAAYC,WAAU,IAAItD,MAAMoD,cAAa;AAC9D,WAAO;MACLhL,KAAKiL,aAAajL,OAAMmL,OAAOC;MAC/BjJ,KAAK+I,aAAa/I,OAAMgJ,OAAOE;IACjC;EACF;AAEA,WAASC,iBAAiBC,QAAQC,UAAUC,YAAY;AACtD,UAAMC,WAAWH,OAAOC,QAAS,MAAKD,OAAOC,QAAAA,IAAY,CAAA;AACzD,WAAOE,SAASD,UAAAA,MAAgBC,SAASD,UAAAA,IAAc,CAAA;EACzD;AAEA,WAASE,oBAAoBpC,OAAOa,QAAQwB,UAAUtM,MAAM;AAC1D,eAAW4K,QAAQE,OAAOyB,wBAAwBvM,IAAAA,EAAMyI,QAAO,GAAI;AACjE,YAAMV,QAAQkC,MAAMW,KAAKb,KAAK;AAC9B,UAAI,YAAahC,QAAQ,KAAO,CAACuE,YAAYvE,QAAQ,GAAI;AACvD,eAAO6C,KAAKb;;IAEhB;AAEA,WAAO;EACT;AAEA,WAASyC,aAAaC,YAAYC,QAAQ;AACxC,UAAM,EAAC7M,OAAO8M,aAAa/B,KAAAA,IAAQ6B;AACnC,UAAMR,SAASpM,MAAM+M,YAAY/M,MAAM+M,UAAU,CAAA;AACjD,UAAM,EAAC/B,QAAQC,QAAQf,OAAOM,aAAAA,IAAgBO;AAC9C,UAAMiC,QAAQhC,OAAOG;AACrB,UAAM8B,QAAQhC,OAAOE;AACrB,UAAMlE,MAAMwE,YAAYT,QAAQC,QAAQF,IAAAA;AACxC,UAAMd,OAAO4C,OAAOpL;AACpB,QAAI2I;AAEJ,aAAS1I,KAAI,GAAGA,KAAIuI,MAAM,EAAEvI,IAAG;AAC7B,YAAME,OAAOiL,OAAOnL,EAAE;AACtB,YAAM,EAAC,CAACsL,KAAAA,GAAQ9C,QAAO,CAAC+C,KAAM,GAAE/E,MAAK,IAAItG;AACzC,YAAMsL,aAAatL,KAAKmL,YAAYnL,KAAKmL,UAAU,CAAA;AACnD3C,cAAQ8C,WAAWD,KAAAA,IAASd,iBAAiBC,QAAQnF,KAAKiD,MAAAA;AAC1DE,YAAMI,YAAAA,IAAgBtC;AAEtBkC,YAAM+C,OAAOX,oBAAoBpC,OAAOa,QAAQ,MAAMF,KAAK5K,IAAI;AAC/DiK,YAAMgD,UAAUZ,oBAAoBpC,OAAOa,QAAQ,OAAOF,KAAK5K,IAAI;AAEnE,YAAMkN,eAAejD,MAAMkD,kBAAkBlD,MAAMkD,gBAAgB,CAAA;AACnED,mBAAa7C,YAAAA,IAAgBtC;IAC/B;EACF;AAEA,WAASqF,gBAAgBvN,OAAOmL,MAAM;AACpC,UAAMqC,UAASxN,MAAMwN;AACrB,WAAO7G,OAAOC,KAAK4G,OAAAA,EAAQC,OAAOxG,CAAAA,QAAOuG,QAAOvG,GAAI,EAACkE,SAASA,IAAAA,EAAMuC,MAAK;EAC3E;AAEA,WAASC,qBAAqBC,QAAQ1D,QAAO;AAC3C,WAAO2D,cAAcD,QACnB;MACEnI,QAAQ;MACRqI,SAAShO;MACT0K,cAAcN;MACdA,OAAAA;MACAK,MAAM;MACNpK,MAAM;IACR,CAAA;EAEJ;AAEA,WAAS4N,kBAAkBH,QAAQ1D,QAAO8D,SAAS;AACjD,WAAOH,cAAcD,QAAQ;MAC3BnI,QAAQ;MACRwI,WAAW/D;MACX2C,QAAQ/M;MACRoO,KAAKpO;MACLkO;MACA9D,OAAAA;MACAK,MAAM;MACNpK,MAAM;IACR,CAAA;EACF;AAEA,WAASgO,YAAYpD,MAAMvJ,OAAO;AAEhC,UAAMgJ,eAAeO,KAAK6B,WAAW1C;AACrC,UAAMiB,OAAOJ,KAAKE,UAAUF,KAAKE,OAAOE;AACxC,QAAI,CAACA,MAAM;AACT;;AAGF3J,YAAQA,SAASuJ,KAAKqD;AACtB,eAAWvB,UAAUrL,OAAO;AAC1B,YAAM4K,SAASS,OAAOE;AACtB,UAAI,CAACX,UAAUA,OAAOjB,IAAK,MAAKrL,UAAasM,OAAOjB,IAAAA,EAAMX,YAAAA,MAAkB1K,QAAW;AACrF;;AAEF,aAAOsM,OAAOjB,IAAK,EAACX,YAAa;AACjC,UAAI4B,OAAOjB,IAAK,EAACmC,kBAAkBxN,UAAasM,OAAOjB,IAAAA,EAAMmC,cAAc9C,YAAAA,MAAkB1K,QAAW;AACtG,eAAOsM,OAAOjB,IAAAA,EAAMmC,cAAc9C,YAAa;;IAEnD;EACF;AAEA,MAAM6D,qBAAqB,CAAC9D,SAASA,SAAS,WAAWA,SAAS;AAClE,MAAM+D,mBAAmB,CAACC,QAAQC,WAAWA,SAASD,SAAS5H,OAAOyB,OAAO,CAAA,GAAImG,MAAO;AACxF,MAAME,cAAc,CAACC,UAAU3D,MAAM/K,UAAU0O,YAAY,CAAC3D,KAAK4D,UAAU5D,KAAK6D,YAC3E;IAAChI,MAAMiD,wBAAwB7J,OAAO,IAAI;IAAGsH,QAAQ;EAAI;AAE/C,MAAMuH,oBAAN,MAAMA;IAKnB,OAAOhI,WAAW,CAAA;IAKlB,OAAOiI,qBAAqB;IAK5B,OAAOC,kBAAkB;IAMzBvP,YAAYQ,OAAOwK,cAAc;AAC/B,WAAKxK,QAAQA;AACb,WAAKgP,OAAOhP,MAAMiP;AAClB,WAAK/E,QAAQM;AACb,WAAK0E,kBAAkB,CAAA;AACvB,WAAKpC,cAAc,KAAKqC,QAAO;AAC/B,WAAKC,QAAQ,KAAKtC,YAAY3M;AAC9B,WAAKqH,UAAU1H;AAEf,WAAKuP,WAAW;AAChB,WAAKC,QAAQxP;AACb,WAAKyP,cAAczP;AACnB,WAAK0P,iBAAiB1P;AACtB,WAAK2P,aAAa3P;AAClB,WAAK4P,aAAa5P;AAClB,WAAK6P,sBAAsB;AAC3B,WAAKC,qBAAqB;AAC1B,WAAKC,WAAW/P;AAChB,WAAKgQ,YAAY,CAAA;AACjB,WAAKhB,qBAAqB,WAAWA;AACrC,WAAKC,kBAAkB,WAAWA;AAElC,WAAKgB,WAAU;IACjB;IAEAA,aAAa;AACX,YAAMhF,OAAO,KAAK+B;AAClB,WAAKtG,UAAS;AACd,WAAKwJ,WAAU;AACfjF,WAAK6D,WAAWrD,UAAUR,KAAKE,QAAQF,IAAAA;AACvC,WAAKkF,YAAW;AAEhB,UAAI,KAAKzI,QAAQ0I,QAAQ,CAAC,KAAKlQ,MAAMmQ,gBAAgB,QAAW,GAAA;AAC9DC,gBAAQC,KAAK,oKAAA;;IAEjB;IAEAC,YAAY9F,cAAc;AACxB,UAAI,KAAKN,UAAUM,cAAc;AAC/B2D,oBAAY,KAAKrB,WAAW;;AAE9B,WAAK5C,QAAQM;IACf;IAEAwF,aAAa;AACX,YAAMhQ,QAAQ,KAAKA;AACnB,YAAM+K,OAAO,KAAK+B;AAClB,YAAMgB,UAAU,KAAKyC,WAAU;AAE/B,YAAMC,WAAW,CAACrF,MAAMlC,GAAGC,IAAGO,OAAM0B,SAAS,MAAMlC,IAAIkC,SAAS,MAAM1B,KAAIP;AAE1E,YAAMuH,MAAM1F,KAAK2F,UAAUC,eAAe7C,QAAQ4C,SAASnD,gBAAgBvN,OAAO,GAAA,CAAA;AAClF,YAAM4Q,MAAM7F,KAAK8F,UAAUF,eAAe7C,QAAQ+C,SAAStD,gBAAgBvN,OAAO,GAAA,CAAA;AAClF,YAAM8Q,MAAM/F,KAAKgG,UAAUJ,eAAe7C,QAAQiD,SAASxD,gBAAgBvN,OAAO,GAAA,CAAA;AAClF,YAAMgR,YAAYjG,KAAKiG;AACvB,YAAMC,MAAMlG,KAAKmG,UAAUV,SAASQ,WAAWP,KAAKG,KAAKE,GAAAA;AACzD,YAAMK,MAAMpG,KAAKqG,UAAUZ,SAASQ,WAAWJ,KAAKH,KAAKK,GAAAA;AACzD/F,WAAKhC,SAAS,KAAKsI,cAAcZ,GAAAA;AACjC1F,WAAK/B,SAAS,KAAKqI,cAAcT,GAAAA;AACjC7F,WAAKuG,SAAS,KAAKD,cAAcP,GAAAA;AACjC/F,WAAKC,SAAS,KAAKqG,cAAcJ,GAAAA;AACjClG,WAAKE,SAAS,KAAKoG,cAAcF,GAAAA;IACnC;IAEAZ,aAAa;AACX,aAAO,KAAKvQ,MAAM8K,KAAKyG,SAAS,KAAKrH,KAAK;IAC5C;IAEAiF,UAAU;AACR,aAAO,KAAKnP,MAAMwR,eAAe,KAAKtH,KAAK;IAC7C;IAMAmH,cAAcI,SAAS;AACrB,aAAO,KAAKzR,MAAMwN,OAAOiE,OAAQ;IACnC;IAKAC,eAAejJ,OAAO;AACpB,YAAMsC,OAAO,KAAK+B;AAClB,aAAOrE,UAAUsC,KAAKC,SAClBD,KAAKE,SACLF,KAAKC;IACX;IAEA2G,QAAQ;AACN,WAAKxQ,QAAQ,OAAA;IACf;IAKAyQ,WAAW;AACT,YAAM7G,OAAO,KAAK+B;AAClB,UAAI,KAAKwC,OAAO;AACduC,4BAAoB,KAAKvC,OAAO,IAAI;;AAEtC,UAAIvE,KAAK6D,UAAU;AACjBT,oBAAYpD,IAAAA;;IAEhB;IAKA+G,aAAa;AACX,YAAMhE,UAAU,KAAKyC,WAAU;AAC/B,YAAMzF,OAAOgD,QAAQhD,SAASgD,QAAQhD,OAAO,CAAA;AAC7C,YAAMwE,QAAQ,KAAKA;AAMnB,UAAI7I,SAASqE,IAAO,GAAA;AAClB,cAAMC,OAAO,KAAK+B;AAClB,aAAKwC,QAAQzE,yBAAyBC,MAAMC,IAAAA;iBACnCuE,UAAUxE,MAAM;AACzB,YAAIwE,OAAO;AAETuC,8BAAoBvC,OAAO,IAAI;AAE/B,gBAAMvE,OAAO,KAAK+B;AAClBqB,sBAAYpD,IAAAA;AACZA,eAAKqD,UAAU,CAAA;;AAEjB,YAAItD,QAAQnE,OAAOoL,aAAajH,IAAO,GAAA;AACrCkH,4BAAkBlH,MAAM,IAAI;;AAE9B,aAAKgF,YAAY,CAAA;AACjB,aAAKR,QAAQxE;;IAEjB;IAEAmF,cAAc;AACZ,YAAMlF,OAAO,KAAK+B;AAElB,WAAKgF,WAAU;AAEf,UAAI,KAAKhD,oBAAoB;AAC3B/D,aAAK+C,UAAU,IAAI,KAAKgB,mBAAkB;;IAE9C;IAEAmD,sBAAsBC,kBAAkB;AACtC,YAAMnH,OAAO,KAAK+B;AAClB,YAAMgB,UAAU,KAAKyC,WAAU;AAC/B,UAAI4B,eAAe;AAEnB,WAAKL,WAAU;AAGf,YAAMM,aAAarH,KAAK6D;AACxB7D,WAAK6D,WAAWrD,UAAUR,KAAKE,QAAQF,IAAAA;AAGvC,UAAIA,KAAKX,UAAU0D,QAAQ1D,OAAO;AAChC+H,uBAAe;AAEfhE,oBAAYpD,IAAAA;AACZA,aAAKX,QAAQ0D,QAAQ1D;;AAKvB,WAAKiI,gBAAgBH,gBAAAA;AAGrB,UAAIC,gBAAgBC,eAAerH,KAAK6D,UAAU;AAChDjC,qBAAa,MAAM5B,KAAKqD,OAAO;AAC/BrD,aAAK6D,WAAWrD,UAAUR,KAAKE,QAAQF,IAAAA;;IAE3C;IAMAvE,YAAY;AACV,YAAMH,UAAS,KAAKrG,MAAMqG;AAC1B,YAAMiM,YAAYjM,QAAOkM,iBAAiB,KAAKnD,KAAK;AACpD,YAAMoD,SAASnM,QAAOoM,gBAAgB,KAAKlC,WAAU,GAAI+B,WAAW,IAAI;AACxE,WAAK9K,UAAUnB,QAAOqM,eAAeF,QAAQ,KAAKG,WAAU,CAAA;AAC5D,WAAKtD,WAAW,KAAK7H,QAAQoL;AAC7B,WAAK1D,kBAAkB,CAAA;IACzB;IAMA2D,MAAM/R,QAAOgS,OAAO;AAClB,YAAM,EAAChG,aAAa/B,MAAMuE,OAAOxE,KAAI,IAAI;AACzC,YAAM,EAACE,QAAQ4D,SAAAA,IAAY7D;AAC3B,YAAMiC,QAAQhC,OAAOG;AAErB,UAAI4H,SAASjS,WAAU,KAAKgS,UAAUhI,KAAKrJ,SAAS,OAAOsJ,KAAKiI;AAChE,UAAIC,OAAOnS,SAAQ,KAAKiK,KAAKqD,QAAQtN,SAAQ,CAAE;AAC/C,UAAIY,IAAGqB,KAAK8J;AAEZ,UAAI,KAAKwC,aAAa,OAAO;AAC3BtE,aAAKqD,UAAUtD;AACfC,aAAKiI,UAAU;AACfnG,iBAAS/B;aACJ;AACL,YAAI3D,QAAQ2D,KAAKhK,MAAAA,CAAM,GAAG;AACxB+L,mBAAS,KAAKqG,eAAenI,MAAMD,MAAMhK,QAAOgS,KAAAA;QAClD,WAAWrM,SAASqE,KAAKhK,MAAAA,CAAM,GAAG;AAChC+L,mBAAS,KAAKsG,gBAAgBpI,MAAMD,MAAMhK,QAAOgS,KAAAA;eAC5C;AACLjG,mBAAS,KAAKuG,mBAAmBrI,MAAMD,MAAMhK,QAAOgS,KAAAA;;AAGtD,cAAMO,6BAA6B,MAAMtQ,IAAIiK,KAAAA,MAAW,QAASiG,QAAQlQ,IAAIiK,KAAAA,IAASiG,KAAKjG,KAAM;AACjG,aAAKtL,KAAI,GAAGA,KAAIoR,OAAO,EAAEpR,IAAG;AAC1BqJ,eAAKqD,QAAQ1M,KAAIZ,MAAAA,IAASiC,MAAM8J,OAAOnL,EAAE;AACzC,cAAIqR,QAAQ;AACV,gBAAIM,2BAA8B,GAAA;AAChCN,uBAAS;;AAEXE,mBAAOlQ;;QAEX;AACAgI,aAAKiI,UAAUD;;AAGjB,UAAInE,UAAU;AACZjC,qBAAa,MAAME,MAAAA;;IAEvB;IAaAuG,mBAAmBrI,MAAMD,MAAMhK,QAAOgS,OAAO;AAC3C,YAAM,EAAC9H,QAAQC,OAAAA,IAAUF;AACzB,YAAMiC,QAAQhC,OAAOG;AACrB,YAAM8B,QAAQhC,OAAOE;AACrB,YAAMmI,SAAStI,OAAOuI,UAAS;AAC/B,YAAMC,cAAcxI,WAAWC;AAC/B,YAAM4B,SAAS,IAAIvB,MAAMwH,KAAAA;AACzB,UAAIpR,IAAGuI,MAAMC;AAEb,WAAKxI,KAAI,GAAGuI,OAAO6I,OAAOpR,KAAIuI,MAAM,EAAEvI,IAAG;AACvCwI,QAAAA,SAAQxI,KAAIZ;AACZ+L,eAAOnL,EAAAA,IAAK;UACV,CAACsL,KAAAA,GAAQwG,eAAexI,OAAO6H,MAAMS,OAAOpJ,MAAAA,GAAQA,MAAAA;UACpD,CAAC+C,KAAAA,GAAQhC,OAAO4H,MAAM/H,KAAKZ,MAAAA,GAAQA,MAAAA;QACrC;MACF;AACA,aAAO2C;IACT;IAaAqG,eAAenI,MAAMD,MAAMhK,QAAOgS,OAAO;AACvC,YAAM,EAAC/J,QAAQC,OAAAA,IAAU+B;AACzB,YAAM8B,SAAS,IAAIvB,MAAMwH,KAAAA;AACzB,UAAIpR,IAAGuI,MAAMC,QAAOtI;AAEpB,WAAKF,KAAI,GAAGuI,OAAO6I,OAAOpR,KAAIuI,MAAM,EAAEvI,IAAG;AACvCwI,QAAAA,SAAQxI,KAAIZ;AACZc,eAAOkJ,KAAKZ,MAAM;AAClB2C,eAAOnL,EAAAA,IAAK;UACVuH,GAAGF,OAAO8J,MAAMjR,KAAK,CAAA,GAAIsI,MAAAA;UACzBhB,GAAGF,OAAO6J,MAAMjR,KAAK,CAAA,GAAIsI,MAAAA;QAC3B;MACF;AACA,aAAO2C;IACT;IAaAsG,gBAAgBpI,MAAMD,MAAMhK,QAAOgS,OAAO;AACxC,YAAM,EAAC/J,QAAQC,OAAAA,IAAU+B;AACzB,YAAM,EAAC0I,WAAW,KAAKC,WAAW,IAAA,IAAO,KAAKrE;AAC9C,YAAMxC,SAAS,IAAIvB,MAAMwH,KAAAA;AACzB,UAAIpR,IAAGuI,MAAMC,QAAOtI;AAEpB,WAAKF,KAAI,GAAGuI,OAAO6I,OAAOpR,KAAIuI,MAAM,EAAEvI,IAAG;AACvCwI,QAAAA,SAAQxI,KAAIZ;AACZc,eAAOkJ,KAAKZ,MAAM;AAClB2C,eAAOnL,EAAAA,IAAK;UACVuH,GAAGF,OAAO8J,MAAMc,iBAAiB/R,MAAM6R,QAAWvJ,GAAAA,MAAAA;UAClDhB,GAAGF,OAAO6J,MAAMc,iBAAiB/R,MAAM8R,QAAWxJ,GAAAA,MAAAA;QACpD;MACF;AACA,aAAO2C;IACT;IAKA+G,UAAU1J,QAAO;AACf,aAAO,KAAK4C,YAAYsB,QAAQlE,MAAM;IACxC;IAKA2J,eAAe3J,QAAO;AACpB,aAAO,KAAK4C,YAAYhC,KAAKZ,MAAM;IACrC;IAKAC,WAAW1B,OAAOoE,QAAQtC,MAAM;AAC9B,YAAMvK,QAAQ,KAAKA;AACnB,YAAM+K,OAAO,KAAK+B;AAClB,YAAM5E,QAAQ2E,OAAOpE,MAAM0C,IAAI;AAC/B,YAAMf,QAAQ;QACZxD,MAAMiD,wBAAwB7J,OAAO,IAAI;QACzCsH,QAAQuF,OAAOE,QAAQtE,MAAM0C,IAAI,EAAEmC;MACrC;AACA,aAAOnD,WAAWC,OAAOlC,OAAO6C,KAAKb,OAAO;QAACK;MAAI,CAAA;IACnD;IAKAuJ,sBAAsBC,QAAOtL,OAAOoE,QAAQzC,OAAO;AACjD,YAAM4J,cAAcnH,OAAOpE,MAAM0C,IAAI;AACrC,UAAIjD,QAAQ8L,gBAAgB,OAAOC,MAAMD;AACzC,YAAM1M,SAAS8C,SAASyC,OAAOE,QAAQtE,MAAM0C,IAAI;AACjD,UAAIf,SAAS9C,QAAQ;AACnB8C,cAAM9C,SAASA;AACfY,gBAAQiC,WAAWC,OAAO4J,aAAa,KAAKlH,YAAY5C,KAAK;;AAE/D6J,MAAAA,OAAMlT,MAAMD,KAAKC,IAAIkT,OAAMlT,KAAKqH,KAAAA;AAChC6L,MAAAA,OAAM/Q,MAAMpC,KAAKoC,IAAI+Q,OAAM/Q,KAAKkF,KAAAA;IAClC;IAKAgM,UAAUzL,OAAOiG,UAAU;AACzB,YAAM3D,OAAO,KAAK+B;AAClB,YAAMsB,UAAUrD,KAAKqD;AACrB,YAAM2E,SAAShI,KAAKiI,WAAWvK,UAAUsC,KAAKC;AAC9C,YAAMf,OAAOmE,QAAQ3M;AACrB,YAAM0S,aAAa,KAAKzC,eAAejJ,KAAAA;AACvC,YAAM2B,QAAQqE,YAAYC,UAAU3D,MAAM,KAAK/K,KAAK;AACpD,YAAM+T,SAAQ;QAAClT,KAAKmL,OAAOE;QAAmBlJ,KAAKgJ,OAAOC;MAAiB;AAC3E,YAAM,EAACpL,KAAKuT,UAAUpR,KAAKqR,SAAQ,IAAIxI,cAAcsI,UAAAA;AACrD,UAAIzS,IAAGmL;AAEP,eAASyH,QAAQ;AACfzH,iBAASuB,QAAQ1M,EAAE;AACnB,cAAM+I,aAAaoC,OAAOsH,WAAWhJ,IAAI;AACzC,eAAO,CAACR,eAASkC,OAAOpE,MAAM0C,IAAI,CAAC,KAAKiJ,WAAW3J,cAAc4J,WAAW5J;MAC9E;AAEA,WAAK/I,KAAI,GAAGA,KAAIuI,MAAM,EAAEvI,IAAG;AACzB,YAAI4S,MAAS,GAAA;AACX;;AAEF,aAAKR,sBAAsBC,QAAOtL,OAAOoE,QAAQzC,KAAAA;AACjD,YAAI2I,QAAQ;AAEV;;MAEJ;AACA,UAAIA,QAAQ;AAEV,aAAKrR,KAAIuI,OAAO,GAAGvI,MAAK,GAAG,EAAEA,IAAG;AAC9B,cAAI4S,MAAS,GAAA;AACX;;AAEF,eAAKR,sBAAsBC,QAAOtL,OAAOoE,QAAQzC,KAAAA;AACjD;QACF;;AAEF,aAAO2J;IACT;IAEAQ,mBAAmB9L,OAAO;AACxB,YAAMoE,SAAS,KAAKC,YAAYsB;AAChC,YAAM9G,SAAS,CAAA;AACf,UAAI5F,IAAGuI,MAAM/B;AAEb,WAAKxG,KAAI,GAAGuI,OAAO4C,OAAOpL,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AAC/CwG,gBAAQ2E,OAAOnL,EAAAA,EAAG+G,MAAM0C,IAAI;AAC5B,YAAIR,eAASzC,KAAQ,GAAA;AACnBZ,iBAAO5E,KAAKwF,KAAAA;;MAEhB;AACA,aAAOZ;IACT;IAMAkN,iBAAiB;AACf,aAAO;IACT;IAKAC,iBAAiBvK,QAAO;AACtB,YAAMa,OAAO,KAAK+B;AAClB,YAAM9B,SAASD,KAAKC;AACpB,YAAMC,SAASF,KAAKE;AACpB,YAAM4B,SAAS,KAAK+G,UAAU1J,MAAAA;AAC9B,aAAO;QACLwK,OAAO1J,SAAS,KAAKA,OAAO2J,iBAAiB9H,OAAO7B,OAAOG,IAAI,CAAC,IAAI;QACpEjD,OAAO+C,SAAS,KAAKA,OAAO0J,iBAAiB9H,OAAO5B,OAAOE,IAAI,CAAC,IAAI;MACtE;IACF;IAKAhK,QAAQoJ,MAAM;AACZ,YAAMQ,OAAO,KAAK+B;AAClB,WAAKpH,OAAO6E,QAAQ,SAAA;AACpBQ,WAAK6J,QAAQrL,OAAOoH,eAAe,KAAKnJ,QAAQqN,MAAM/L,YAAYiC,KAAKhC,QAAQgC,KAAK/B,QAAQ,KAAKwL,eAAc,CAAA,CAAA,CAAA;IACjH;IAKA9O,OAAO6E,MAAM;IAAA;IAEb5I,OAAO;AACL,YAAMsN,MAAM,KAAKD;AACjB,YAAMhP,QAAQ,KAAKA;AACnB,YAAM+K,OAAO,KAAK+B;AAClB,YAAMgI,YAAW/J,KAAKD,QAAQ,CAAA;AAC9B,YAAMiK,OAAO/U,MAAMgV;AACnB,YAAMvP,SAAS,CAAA;AACf,YAAM3E,SAAQ,KAAK2O,cAAc;AACjC,YAAMqD,QAAQ,KAAKpD,cAAeoF,UAASrT,SAASX;AACpD,YAAMmU,0BAA0B,KAAKzN,QAAQyN;AAC7C,UAAIvT;AAEJ,UAAIqJ,KAAK+C,SAAS;AAChB/C,aAAK+C,QAAQnM,KAAKsN,KAAK8F,MAAMjU,QAAOgS,KAAAA;;AAGtC,WAAKpR,KAAIZ,QAAOY,KAAIZ,SAAQgS,OAAO,EAAEpR,IAAG;AACtC,cAAMsM,UAAU8G,UAASpT,EAAE;AAC3B,YAAIsM,QAAQW,QAAQ;AAClB;;AAEF,YAAIX,QAAQvI,UAAUwP,yBAAyB;AAC7CxP,iBAAO/C,KAAKsL,OAAAA;eACP;AACLA,kBAAQrM,KAAKsN,KAAK8F,IAAAA;;MAEtB;AAEA,WAAKrT,KAAI,GAAGA,KAAI+D,OAAOhE,QAAQ,EAAEC,IAAG;AAClC+D,eAAO/D,EAAAA,EAAGC,KAAKsN,KAAK8F,IAAAA;MACtB;IACF;IASAG,SAAShL,QAAOzE,QAAQ;AACtB,YAAM8E,OAAO9E,SAAS,WAAW;AACjC,aAAOyE,WAAUpK,UAAa,KAAKgN,YAAYgB,UAC3C,KAAKqH,6BAA6B5K,IAAAA,IAClC,KAAK6K,0BAA0BlL,UAAS,GAAGK,IAAK;IACtD;IAKAoI,WAAWzI,QAAOzE,QAAQ8E,MAAM;AAC9B,YAAMuD,UAAU,KAAKyC,WAAU;AAC/B,UAAI8E;AACJ,UAAInL,UAAS,KAAKA,SAAQ,KAAK4C,YAAYhC,KAAKrJ,QAAQ;AACtD,cAAMuM,UAAU,KAAKlB,YAAYhC,KAAKZ,MAAM;AAC5CmL,kBAAUrH,QAAQ6B,aACf7B,QAAQ6B,WAAW9B,kBAAkB,KAAK4E,WAAU,GAAIzI,QAAO8D,OAAO;AACzEqH,gBAAQxI,SAAS,KAAK+G,UAAU1J,MAAAA;AAChCmL,gBAAQnH,MAAMJ,QAAQhD,KAAKZ,MAAM;AACjCmL,gBAAQnL,QAAQmL,QAAQpH,YAAY/D;aAC/B;AACLmL,kBAAU,KAAKxF,aACZ,KAAKA,WAAWlC,qBAAqB,KAAK3N,MAAM2S,WAAU,GAAI,KAAKzI,KAAK;AAC3EmL,gBAAQvH,UAAUA;AAClBuH,gBAAQnL,QAAQmL,QAAQ7K,eAAe,KAAKN;;AAG9CmL,cAAQ5P,SAAS,CAAC,CAACA;AACnB4P,cAAQ9K,OAAOA;AACf,aAAO8K;IACT;IAMAF,6BAA6B5K,MAAM;AACjC,aAAO,KAAK+K,uBAAuB,KAAKxG,mBAAmBlD,IAAIrB,IAAAA;IACjE;IAOA6K,0BAA0BlL,QAAOK,MAAM;AACrC,aAAO,KAAK+K,uBAAuB,KAAKvG,gBAAgBnD,IAAIrB,MAAML,MAAAA;IACpE;IAKAoL,uBAAuBC,cAAahL,OAAO,WAAWL,QAAO;AAC3D,YAAMzE,SAAS8E,SAAS;AACxB,YAAMiL,SAAQ,KAAKtG;AACnB,YAAMuG,WAAWF,eAAc,MAAMhL;AACrC,YAAMgE,SAASiH,OAAMC,QAAS;AAC9B,YAAMC,UAAU,KAAK/F,uBAAuBgG,QAAQzL,MAAAA;AACpD,UAAIqE,QAAQ;AACV,eAAOD,iBAAiBC,QAAQmH,OAAAA;;AAElC,YAAMrP,UAAS,KAAKrG,MAAMqG;AAC1B,YAAMiM,YAAYjM,QAAOuP,wBAAwB,KAAKxG,OAAOmG,YAAAA;AAC7D,YAAMM,WAAWpQ,SAAS;QAAC,GAAG8P,YAAY;QAAQ;QAASA;QAAa;UAAM;QAACA;QAAa;MAAG;AAC/F,YAAM/C,SAASnM,QAAOoM,gBAAgB,KAAKlC,WAAU,GAAI+B,SAAAA;AACzD,YAAMwD,SAAQnP,OAAOC,KAAKC,UAASiO,SAASS,YAAY,CAAA;AAGxD,YAAMF,UAAU,MAAM,KAAK1C,WAAWzI,QAAOzE,QAAQ8E,IAAAA;AACrD,YAAMjD,SAASjB,QAAO0P,oBAAoBvD,QAAQsD,QAAOT,SAASQ,QAAAA;AAElE,UAAIvO,OAAOM,SAAS;AAGlBN,eAAOM,UAAU8N;AAKjBF,QAAAA,OAAMC,QAAS,IAAG9O,OAAOqP,OAAO1H,iBAAiBhH,QAAQoO,OAAAA,CAAAA;;AAG3D,aAAOpO;IACT;IAMA2O,mBAAmB/L,QAAOgM,YAAYzQ,QAAQ;AAC5C,YAAMzF,QAAQ,KAAKA;AACnB,YAAMwV,SAAQ,KAAKtG;AACnB,YAAMuG,WAAW,aAAaS,UAAAA;AAC9B,YAAM3H,SAASiH,OAAMC,QAAS;AAC9B,UAAIlH,QAAQ;AACV,eAAOA;;AAET,UAAI/G;AACJ,UAAIxH,MAAMwH,QAAQV,cAAc,OAAO;AACrC,cAAMT,UAAS,KAAKrG,MAAMqG;AAC1B,cAAMiM,YAAYjM,QAAO8P,0BAA0B,KAAK/G,OAAO8G,UAAAA;AAC/D,cAAM1D,SAASnM,QAAOoM,gBAAgB,KAAKlC,WAAU,GAAI+B,SAAAA;AACzD9K,kBAAUnB,QAAOqM,eAAeF,QAAQ,KAAKG,WAAWzI,QAAOzE,QAAQyQ,UAAAA,CAAAA;;AAEzE,YAAMxO,aAAa,IAAItB,WAAWpG,OAAOwH,WAAWA,QAAQE,UAAU;AACtE,UAAIF,WAAWA,QAAQ4O,YAAY;AACjCZ,QAAAA,OAAMC,QAAAA,IAAY9O,OAAOqP,OAAOtO,UAAAA;;AAElC,aAAOA;IACT;IAMA2O,iBAAiB7O,SAAS;AACxB,UAAI,CAACA,QAAQI,SAAS;AACpB;;AAEF,aAAO,KAAK4H,mBAAmB,KAAKA,iBAAiB7I,OAAOyB,OAAO,CAAA,GAAIZ,OAAO;IAChF;IAMA8O,eAAe/L,MAAMgM,eAAe;AAClC,aAAO,CAACA,iBAAiBlI,mBAAmB9D,IAAAA,KAAS,KAAKvK,MAAMwW;IAClE;IAKAC,kBAAkB3V,QAAOyJ,MAAM;AAC7B,YAAMmM,YAAY,KAAKtB,0BAA0BtU,QAAOyJ,IAAAA;AACxD,YAAMoM,0BAA0B,KAAKnH;AACrC,YAAM+G,gBAAgB,KAAKF,iBAAiBK,SAAAA;AAC5C,YAAMJ,iBAAiB,KAAKA,eAAe/L,MAAMgM,aAAAA,KAAmBA,kBAAkBI;AACtF,WAAKC,oBAAoBL,eAAehM,MAAMmM,SAAAA;AAC9C,aAAO;QAACH;QAAeD;MAAc;IACvC;IAMAO,cAAc7I,SAAS9D,QAAO9C,YAAYmD,MAAM;AAC9C,UAAI8D,mBAAmB9D,IAAO,GAAA;AAC5B5D,eAAOyB,OAAO4F,SAAS5G,UAAAA;aAClB;AACL,aAAK6O,mBAAmB/L,QAAOK,IAAM7E,EAAAA,OAAOsI,SAAS5G,UAAAA;;IAEzD;IAMAwP,oBAAoBL,eAAehM,MAAMhD,YAAY;AACnD,UAAIgP,iBAAiB,CAAClI,mBAAmB9D,IAAO,GAAA;AAC9C,aAAK0L,mBAAmBnW,QAAWyK,IAAM7E,EAAAA,OAAO6Q,eAAehP,UAAAA;;IAEnE;IAKAuP,UAAU9I,SAAS9D,QAAOK,MAAM9E,QAAQ;AACtCuI,cAAQvI,SAASA;AACjB,YAAM+B,UAAU,KAAK0N,SAAShL,QAAOzE,MAAAA;AACrC,WAAKwQ,mBAAmB/L,QAAOK,MAAM9E,MAAQC,EAAAA,OAAOsI,SAAS;QAG3DxG,SAAS,CAAE/B,UAAU,KAAK4Q,iBAAiB7O,OAAaA,KAAAA;MAC1D,CAAA;IACF;IAEAuP,iBAAiB/I,SAASxD,cAAcN,QAAO;AAC7C,WAAK4M,UAAU9I,SAAS9D,QAAO,UAAU,KAAK;IAChD;IAEA8M,cAAchJ,SAASxD,cAAcN,QAAO;AAC1C,WAAK4M,UAAU9I,SAAS9D,QAAO,UAAU,IAAI;IAC/C;IAKA+M,2BAA2B;AACzB,YAAMjJ,UAAU,KAAKlB,YAAYgB;AAEjC,UAAIE,SAAS;AACX,aAAK8I,UAAU9I,SAASlO,QAAW,UAAU,KAAK;;IAEtD;IAKAoX,wBAAwB;AACtB,YAAMlJ,UAAU,KAAKlB,YAAYgB;AAEjC,UAAIE,SAAS;AACX,aAAK8I,UAAU9I,SAASlO,QAAW,UAAU,IAAI;;IAErD;IAKAuS,gBAAgBH,kBAAkB;AAChC,YAAMpH,OAAO,KAAKwE;AAClB,YAAMwF,YAAW,KAAKhI,YAAYhC;AAGlC,iBAAW,CAAC3E,QAAQgR,MAAMC,IAAAA,KAAS,KAAKtH,WAAW;AACjD,aAAK3J,MAAO,EAACgR,MAAMC,IAAAA;MACrB;AACA,WAAKtH,YAAY,CAAA;AAEjB,YAAMuH,UAAUvC,UAASrT;AACzB,YAAM6V,UAAUxM,KAAKrJ;AACrB,YAAMqR,QAAQlS,KAAKC,IAAIyW,SAASD,OAAAA;AAEhC,UAAIvE,OAAO;AAKT,aAAKD,MAAM,GAAGC,KAAAA;;AAGhB,UAAIwE,UAAUD,SAAS;AACrB,aAAKE,gBAAgBF,SAASC,UAAUD,SAASnF,gBAAAA;iBACxCoF,UAAUD,SAAS;AAC5B,aAAKG,gBAAgBF,SAASD,UAAUC,OAAAA;;IAE5C;IAKAC,gBAAgBzW,QAAOgS,OAAOZ,mBAAmB,MAAM;AACrD,YAAMnH,OAAO,KAAK+B;AAClB,YAAMhC,OAAOC,KAAKD;AAClB,YAAMjC,OAAM/H,SAAQgS;AACpB,UAAIpR;AAEJ,YAAM+V,OAAO,CAACC,QAAQ;AACpBA,YAAIjW,UAAUqR;AACd,aAAKpR,KAAIgW,IAAIjW,SAAS,GAAGC,MAAKmH,MAAKnH,MAAK;AACtCgW,cAAIhW,EAAE,IAAGgW,IAAIhW,KAAIoR,KAAM;QACzB;MACF;AACA2E,WAAK3M,IAAAA;AAEL,WAAKpJ,KAAIZ,QAAOY,KAAImH,MAAK,EAAEnH,IAAG;AAC5BoJ,aAAKpJ,EAAE,IAAG,IAAI,KAAKqN,gBAAe;MACpC;AAEA,UAAI,KAAKM,UAAU;AACjBoI,aAAK1M,KAAKqD,OAAO;;AAEnB,WAAKyE,MAAM/R,QAAOgS,KAAAA;AAElB,UAAIZ,kBAAkB;AACpB,aAAKyF,eAAe7M,MAAMhK,QAAOgS,OAAO,OAAA;;IAE5C;IAEA6E,eAAe3J,SAASlN,QAAOgS,OAAOvI,MAAM;IAAA;IAK5CiN,gBAAgB1W,QAAOgS,OAAO;AAC5B,YAAM/H,OAAO,KAAK+B;AAClB,UAAI,KAAKuC,UAAU;AACjB,cAAMuI,UAAU7M,KAAKqD,QAAQyJ,OAAO/W,QAAOgS,KAAAA;AAC3C,YAAI/H,KAAK6D,UAAU;AACjBT,sBAAYpD,MAAM6M,OAAAA;;;AAGtB7M,WAAKD,KAAK+M,OAAO/W,QAAOgS,KAAAA;IAC1B;IAKAgF,MAAMC,MAAM;AACV,UAAI,KAAK1I,UAAU;AACjB,aAAKS,UAAUpN,KAAKqV,IAAAA;aACf;AACL,cAAM,CAAC5R,QAAQgR,MAAMC,IAAAA,IAAQW;AAC7B,aAAK5R,MAAO,EAACgR,MAAMC,IAAAA;;AAErB,WAAKpX,MAAMgY,aAAatV,KAAK;QAAC,KAAKwH;QAAU6N,GAAAA;MAAK,CAAA;IACpD;IAEAE,cAAc;AACZ,YAAMnF,QAAQoF,UAAUzW;AACxB,WAAKqW,MAAM;QAAC;QAAmB,KAAKvH,WAAU,EAAGzF,KAAKrJ,SAASqR;QAAOA;MAAM,CAAA;IAC9E;IAEAqF,aAAa;AACX,WAAKL,MAAM;QAAC;QAAmB,KAAKhL,YAAYhC,KAAKrJ,SAAS;QAAG;MAAE,CAAA;IACrE;IAEA2W,eAAe;AACb,WAAKN,MAAM;QAAC;QAAmB;QAAG;MAAE,CAAA;IACtC;IAEAO,cAAcvX,QAAOgS,OAAO;AAC1B,UAAIA,OAAO;AACT,aAAKgF,MAAM;UAAC;UAAmBhX;UAAOgS;QAAM,CAAA;;AAE9C,YAAMwF,WAAWJ,UAAUzW,SAAS;AACpC,UAAI6W,UAAU;AACZ,aAAKR,MAAM;UAAC;UAAmBhX;UAAOwX;QAAS,CAAA;;IAEnD;IAEAC,iBAAiB;AACf,WAAKT,MAAM;QAAC;QAAmB;QAAGI,UAAUzW;MAAO,CAAA;IACrD;EACF;AC9iCA,WAAS+W,kBAAkB/P,OAAOtI,MAAM;AACtC,QAAI,CAACsI,MAAMgQ,OAAOC,MAAM;AACtB,YAAMC,eAAelQ,MAAMiE,wBAAwBvM,IAAAA;AACnD,UAAImH,SAAS,CAAA;AAEb,eAAS5F,KAAI,GAAGuI,OAAO0O,aAAalX,QAAQC,KAAIuI,MAAMvI,MAAK;AACzD4F,iBAASA,OAAOsR,OAAOD,aAAajX,EAAAA,EAAGkL,WAAW2H,mBAAmB9L,KAAAA,CAAAA;MACvE;AACAA,YAAMgQ,OAAOC,OAAOG,aAAavR,OAAOwR,KAAK,CAACC,IAAGrP,OAAMqP,KAAIrP,EAAAA,CAAAA;;AAE7D,WAAOjB,MAAMgQ,OAAOC;EACtB;AAMA,WAASM,qBAAqBjO,MAAM;AAClC,UAAMtC,QAAQsC,KAAKC;AACnB,UAAM1D,SAASkR,kBAAkB/P,OAAOsC,KAAK5K,IAAI;AACjD,QAAIU,OAAM4H,MAAMwQ;AAChB,QAAIvX,IAAGuI,MAAMiP,MAAMjG;AACnB,UAAMkG,mBAAmB,MAAM;AAC7B,UAAID,SAAS,SAASA,SAAS,QAAQ;AAErC;;AAEF,UAAIvD,QAAQ1C,IAAO,GAAA;AAEjBpS,QAAAA,OAAMD,KAAKC,IAAIA,MAAKD,KAAKwY,IAAIF,OAAOjG,IAASpS,KAAAA,IAAAA;;AAE/CoS,aAAOiG;IACT;AAEA,SAAKxX,KAAI,GAAGuI,OAAO3C,OAAO7F,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AAC/CwX,aAAOzQ,MAAM4Q,iBAAiB/R,OAAO5F,EAAE,CAAA;AACvCyX,uBAAAA;IACF;AAEAlG,WAAOnT;AACP,SAAK4B,KAAI,GAAGuI,OAAOxB,MAAM6Q,MAAM7X,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AACpDwX,aAAOzQ,MAAM8Q,gBAAgB7X,EAAAA;AAC7ByX,uBAAAA;IACF;AAEA,WAAOtY;EACT;AAQA,WAAS2Y,yBAAyBtP,QAAOuP,OAAOjS,SAASkS,YAAY;AACnE,UAAMC,YAAYnS,QAAQoS;AAC1B,QAAIzR,MAAM0R;AAEV,QAAIC,cAAcH,SAAY,GAAA;AAC5BxR,aAAOsR,MAAM5Y,MAAM2G,QAAQuS;AAC3BF,cAAQrS,QAAQwS;WACX;AAIL7R,aAAOwR,YAAYD;AACnBG,cAAQ;;AAGV,WAAO;MACLI,OAAO9R,OAAOuR;MACdG;MACA/Y,OAAO2Y,MAAMS,OAAOhQ,MAAAA,IAAU/B,OAAO;IACvC;EACF;AAQA,WAASgS,0BAA0BjQ,QAAOuP,OAAOjS,SAASkS,YAAY;AACpE,UAAMQ,SAAST,MAAMS;AACrB,UAAMhB,OAAOgB,OAAOhQ,MAAM;AAC1B,QAAI+I,OAAO/I,SAAQ,IAAIgQ,OAAOhQ,SAAQ,CAAA,IAAK;AAC3C,QAAIkQ,OAAOlQ,SAAQgQ,OAAOzY,SAAS,IAAIyY,OAAOhQ,SAAQ,CAAE,IAAG;AAC3D,UAAMmQ,UAAU7S,QAAQuS;AAExB,QAAI9G,SAAS,MAAM;AAGjBA,aAAOiG,QAAQkB,SAAS,OAAOX,MAAM5Q,MAAM4Q,MAAM3Y,QAAQsZ,OAAOlB;;AAGlE,QAAIkB,SAAS,MAAM;AAEjBA,aAAOlB,OAAOA,OAAOjG;;AAGvB,UAAMnS,SAAQoY,QAAQA,OAAOtY,KAAKC,IAAIoS,MAAMmH,IAAI,KAAK,IAAIC;AACzD,UAAMlS,OAAOvH,KAAKwY,IAAIgB,OAAOnH,IAAAA,IAAQ,IAAIoH;AAEzC,WAAO;MACLJ,OAAO9R,OAAOuR;MACdG,OAAOrS,QAAQwS;MACflZ,OAAAA;IACF;EACF;AAEA,WAASwZ,cAAcC,OAAO3Y,MAAMqJ,QAAQvJ,IAAG;AAC7C,UAAM8Y,aAAavP,OAAO4H,MAAM0H,MAAM,CAAA,GAAI7Y,EAAAA;AAC1C,UAAM+Y,WAAWxP,OAAO4H,MAAM0H,MAAM,CAAA,GAAI7Y,EAAAA;AACxC,UAAMb,OAAMD,KAAKC,IAAI2Z,YAAYC,QAAAA;AACjC,UAAMzX,OAAMpC,KAAKoC,IAAIwX,YAAYC,QAAAA;AACjC,QAAIC,WAAW7Z;AACf,QAAI8Z,SAAS3X;AAEb,QAAIpC,KAAKwY,IAAIvY,IAAAA,IAAOD,KAAKwY,IAAIpW,IAAM,GAAA;AACjC0X,iBAAW1X;AACX2X,eAAS9Z;;AAKXe,SAAKqJ,OAAOE,IAAI,IAAIwP;AAEpB/Y,SAAKgZ,UAAU;MACbF;MACAC;MACA7Z,OAAO0Z;MACP3R,KAAK4R;MACL5Z,KAAAA;MACAmC,KAAAA;IACF;EACF;AAEA,WAAS6X,WAAWN,OAAO3Y,MAAMqJ,QAAQvJ,IAAG;AAC1C,QAAIyF,QAAQoT,KAAQ,GAAA;AAClBD,oBAAcC,OAAO3Y,MAAMqJ,QAAQvJ,EAAAA;WAC9B;AACLE,WAAKqJ,OAAOE,IAAI,IAAIF,OAAO4H,MAAM0H,OAAO7Y,EAAAA;;AAE1C,WAAOE;EACT;AAEA,WAASkZ,sBAAsB/P,MAAMD,MAAMhK,QAAOgS,OAAO;AACvD,UAAM9H,SAASD,KAAKC;AACpB,UAAMC,SAASF,KAAKE;AACpB,UAAMqI,SAAStI,OAAOuI,UAAS;AAC/B,UAAMC,cAAcxI,WAAWC;AAC/B,UAAM4B,SAAS,CAAA;AACf,QAAInL,IAAGuI,MAAMrI,MAAM2Y;AAEnB,SAAK7Y,KAAIZ,QAAOmJ,OAAOnJ,SAAQgS,OAAOpR,KAAIuI,MAAM,EAAEvI,IAAG;AACnD6Y,cAAQzP,KAAKpJ,EAAE;AACfE,aAAO,CAAA;AACPA,WAAKoJ,OAAOG,IAAI,IAAIqI,eAAexI,OAAO6H,MAAMS,OAAO5R,EAAAA,GAAIA,EAAAA;AAC3DmL,aAAOnK,KAAKmY,WAAWN,OAAO3Y,MAAMqJ,QAAQvJ,EAAAA,CAAAA;IAC9C;AACA,WAAOmL;EACT;AAEA,WAASkO,WAAWC,QAAQ;AAC1B,WAAOA,UAAUA,OAAON,aAAa5a,UAAakb,OAAOL,WAAW7a;EACtE;AAEA,WAASmb,QAAQ9S,MAAM8C,QAAQiQ,YAAY;AACzC,QAAI/S,SAAS,GAAG;AACd,aAAOyC,KAAKzC,IAAAA;;AAEd,YAAQ8C,OAAOkQ,aAAY,IAAK,IAAI,OAAOlQ,OAAOpK,OAAOqa,aAAa,IAAI;EAC5E;AAEA,WAASE,YAAYhU,YAAY;AAC/B,QAAIwB,SAAS9H,QAAO+H,MAAKM,MAAKE;AAC9B,QAAIjC,WAAWiU,YAAY;AACzBzS,gBAAUxB,WAAWkU,OAAOlU,WAAW6B;AACvCnI,MAAAA,SAAQ;AACR+H,MAAAA,OAAM;WACD;AACLD,gBAAUxB,WAAWkU,OAAOlU,WAAW8B;AACvCpI,MAAAA,SAAQ;AACR+H,MAAAA,OAAM;;AAER,QAAID,SAAS;AACXO,MAAAA,OAAM;AACNE,MAAAA,UAAS;WACJ;AACLF,MAAAA,OAAM;AACNE,MAAAA,UAAS;;AAEX,WAAO;MAACvI,OAAAA;MAAO+H,KAAAA;MAAKD;MAASO,KAAAA;MAAKE,QAAAA;IAAM;EAC1C;AAEA,WAASkS,iBAAiBnU,YAAYI,SAAS4C,OAAOF,QAAO;AAC3D,QAAIsR,OAAOhU,QAAQiU;AACnB,UAAMzV,MAAM,CAAA;AAEZ,QAAI,CAACwV,MAAM;AACTpU,iBAAWqU,gBAAgBzV;AAC3B;;AAGF,QAAIwV,SAAS,MAAM;AACjBpU,iBAAWqU,gBAAgB;QAACtS,KAAK;QAAMC,OAAO;QAAMC,QAAQ;QAAMC,MAAM;MAAI;AAC5E;;AAGF,UAAM,EAACxI,OAAAA,QAAO+H,KAAAA,MAAKD,SAASO,KAAAA,MAAKE,QAAAA,QAAAA,IAAU+R,YAAYhU,UAAAA;AAEvD,QAAIoU,SAAS,YAAYpR,OAAO;AAC9BhD,iBAAWsU,qBAAqB;AAChC,WAAKtR,MAAM+C,QAAQ,OAAOjD,QAAO;AAC/BsR,eAAOrS;kBACGiB,MAAMgD,WAAW,OAAOlD,QAAO;AACzCsR,eAAOnS;aACF;AACLrD,YAAI2V,UAAUtS,SAAQvI,QAAO+H,MAAKD,OAAAA,CAAAA,IAAY;AAC9C4S,eAAOrS;;;AAIXnD,QAAI2V,UAAUH,MAAM1a,QAAO+H,MAAKD,OAAAA,CAAAA,IAAY;AAC5CxB,eAAWqU,gBAAgBzV;EAC7B;AAEA,WAAS2V,UAAUH,MAAMzC,IAAGrP,IAAGd,SAAS;AACtC,QAAIA,SAAS;AACX4S,aAAOI,KAAKJ,MAAMzC,IAAGrP,EAAAA;AACrB8R,aAAOK,SAASL,MAAM9R,IAAGqP,EAAAA;WACpB;AACLyC,aAAOK,SAASL,MAAMzC,IAAGrP,EAAAA;;AAE3B,WAAO8R;EACT;AAEA,WAASI,KAAKE,MAAMC,IAAIC,IAAI;AAC1B,WAAOF,SAASC,KAAKC,KAAKF,SAASE,KAAKD,KAAKD;EAC/C;AAEA,WAASD,SAASI,GAAGnb,QAAO+H,MAAK;AAC/B,WAAOoT,MAAM,UAAUnb,SAAQmb,MAAM,QAAQpT,OAAMoT;EACrD;AAEA,WAASC,iBAAiB9U,YAAY,EAAC+U,cAAAA,GAAgBtC,OAAO;AAC5DzS,eAAW+U,gBAAgBA,kBAAkB,SACzCtC,UAAU,IAAI,OAAO,IACrBsC;EACN;AAEe,MAAMC,gBAAN,cAA4BvN,kBAAAA;IAEzC,OAAOjD,KAAK;IAKZ,OAAO/E,WAAW;MAChBiI,oBAAoB;MACpBC,iBAAiB;MAEjBgL,oBAAoB;MACpBC,eAAe;MACfqC,SAAS;MAET3U,YAAY;QACV4U,SAAS;UACPnc,MAAM;UACNiH,YAAY;YAAC;YAAK;YAAK;YAAQ;YAAS;UAAS;QACnD;MACF;;IAMF,OAAOmV,YAAY;MACjB/O,QAAQ;QACNgP,SAAS;UACPrc,MAAM;UACNsc,QAAQ;UACRC,MAAM;YACJD,QAAQ;UACV;QACF;QACAE,SAAS;UACPxc,MAAM;UACNyc,aAAa;QACf;MACF;;IASFxJ,mBAAmBrI,MAAMD,MAAMhK,QAAOgS,OAAO;AAC3C,aAAOgI,sBAAsB/P,MAAMD,MAAMhK,QAAOgS,KAAAA;IAClD;IAOAI,eAAenI,MAAMD,MAAMhK,QAAOgS,OAAO;AACvC,aAAOgI,sBAAsB/P,MAAMD,MAAMhK,QAAOgS,KAAAA;IAClD;IAOAK,gBAAgBpI,MAAMD,MAAMhK,QAAOgS,OAAO;AACxC,YAAM,EAAC9H,QAAQC,OAAAA,IAAUF;AACzB,YAAM,EAAC0I,WAAW,KAAKC,WAAW,IAAA,IAAO,KAAKrE;AAC9C,YAAMnE,WAAWF,OAAOG,SAAS,MAAMsI,WAAWC;AAClD,YAAMtI,WAAWH,OAAOE,SAAS,MAAMsI,WAAWC;AAClD,YAAM7G,SAAS,CAAA;AACf,UAAInL,IAAGuI,MAAMrI,MAAMib;AACnB,WAAKnb,KAAIZ,QAAOmJ,OAAOnJ,SAAQgS,OAAOpR,KAAIuI,MAAM,EAAEvI,IAAG;AACnDmb,cAAM/R,KAAKpJ,EAAE;AACbE,eAAO,CAAA;AACPA,aAAKoJ,OAAOG,IAAI,IAAIH,OAAO6H,MAAMc,iBAAiBkJ,KAAK3R,QAAWxJ,GAAAA,EAAAA;AAClEmL,eAAOnK,KAAKmY,WAAWlH,iBAAiBkJ,KAAKzR,QAAAA,GAAWxJ,MAAMqJ,QAAQvJ,EAAAA,CAAAA;MACxE;AACA,aAAOmL;IACT;IAKAiH,sBAAsBC,QAAOtL,OAAOoE,QAAQzC,OAAO;AACjD,YAAM0J,sBAAsBC,QAAOtL,OAAOoE,QAAQzC,KAAAA;AAClD,YAAM4Q,SAASnO,OAAO+N;AACtB,UAAII,UAAUvS,UAAU,KAAKqE,YAAY7B,QAAQ;AAE/C8I,QAAAA,OAAMlT,MAAMD,KAAKC,IAAIkT,OAAMlT,KAAKma,OAAOna,GAAG;AAC1CkT,QAAAA,OAAM/Q,MAAMpC,KAAKoC,IAAI+Q,OAAM/Q,KAAKgY,OAAOhY,GAAG;;IAE9C;IAMAwR,iBAAiB;AACf,aAAO;IACT;IAKAC,iBAAiBvK,QAAO;AACtB,YAAMa,OAAO,KAAK+B;AAClB,YAAM,EAAC9B,QAAQC,OAAAA,IAAUF;AACzB,YAAM8B,SAAS,KAAK+G,UAAU1J,MAAAA;AAC9B,YAAM8Q,SAASnO,OAAO+N;AACtB,YAAM1S,QAAQ6S,WAAWC,MACrB,IAAA,MAAMA,OAAOla,QAAQ,OAAOka,OAAOnS,MAAM,MACzC,KAAKoC,OAAO0J,iBAAiB9H,OAAO5B,OAAOE,IAAI,CAAC;AAEpD,aAAO;QACLuJ,OAAO,KAAK1J,OAAO2J,iBAAiB9H,OAAO7B,OAAOG,IAAI,CAAC;QACvDjD;MACF;IACF;IAEA6H,aAAa;AACX,WAAKJ,sBAAsB;AAE3B,YAAMI,WAAU;AAEhB,YAAMhF,OAAO,KAAK+B;AAClB/B,WAAKX,QAAQ,KAAKmG,WAAU,EAAGnG;IACjC;IAEA1E,OAAO6E,MAAM;AACX,YAAMQ,OAAO,KAAK+B;AAClB,WAAK6K,eAAe5M,KAAKD,MAAM,GAAGC,KAAKD,KAAKrJ,QAAQ8I,IAAAA;IACtD;IAEAoN,eAAemF,MAAMhc,QAAOgS,OAAOvI,MAAM;AACvC,YAAMoH,QAAQpH,SAAS;AACvB,YAAM,EAACL,OAAAA,QAAO4C,aAAa,EAAC7B,OAAAA,EAAO,IAAI;AACvC,YAAMqQ,OAAOrQ,OAAO8R,aAAY;AAChC,YAAM1B,aAAapQ,OAAOkQ,aAAY;AACtC,YAAM1B,QAAQ,KAAKuD,UAAS;AAC5B,YAAM,EAACzG,eAAeD,eAAc,IAAI,KAAKG,kBAAkB3V,QAAOyJ,IAAAA;AAEtE,eAAS7I,KAAIZ,QAAOY,KAAIZ,SAAQgS,OAAOpR,MAAK;AAC1C,cAAMmL,SAAS,KAAK+G,UAAUlS,EAAAA;AAC9B,cAAMub,UAAUtL,SAASmI,cAAcjN,OAAO5B,OAAOE,IAAI,CAAC,IAAI;UAACmQ;UAAM4B,MAAM5B;QAAI,IAAI,KAAK6B,yBAAyBzb,EAAE;AACnH,cAAM0b,UAAU,KAAKC,yBAAyB3b,IAAG+X,KAAAA;AACjD,cAAMrP,SAASyC,OAAOE,WAAW,CAAA,GAAI9B,OAAOE,IAAI;AAEhD,cAAM/D,aAAa;UACjBiU;UACAC,MAAM2B,QAAQ3B;UACdI,oBAAoB,CAACtR,SAAS2Q,WAAWlO,OAAO+N,OAAO,KAAM1Q,WAAUE,MAAM+C,QAAQjD,WAAUE,MAAMgD;UACrGnE,GAAGoS,aAAa4B,QAAQC,OAAOE,QAAQE;UACvCpU,GAAGmS,aAAa+B,QAAQE,SAASL,QAAQC;UACzCK,QAAQlC,aAAa+B,QAAQjV,OAAOvH,KAAKwY,IAAI6D,QAAQ9U,IAAI;UACzDqV,OAAOnC,aAAaza,KAAKwY,IAAI6D,QAAQ9U,IAAI,IAAIiV,QAAQjV;QACvD;AAEA,YAAImO,gBAAgB;AAClBlP,qBAAWI,UAAU+O,iBAAiB,KAAKnB,0BAA0B1T,IAAGob,KAAKpb,EAAE,EAAC+D,SAAS,WAAW8E,IAAI;;AAE1G,cAAM/C,UAAUJ,WAAWI,WAAWsV,KAAKpb,EAAAA,EAAG8F;AAC9C+T,yBAAiBnU,YAAYI,SAAS4C,OAAOF,MAAAA;AAC7CgS,yBAAiB9U,YAAYI,SAASiS,MAAMI,KAAK;AACjD,aAAKhD,cAAciG,KAAKpb,EAAE,GAAEA,IAAG0F,YAAYmD,IAAAA;MAC7C;IACF;IASAkT,WAAWC,MAAMzP,WAAW;AAC1B,YAAM,EAACjD,OAAM,IAAI,KAAK8B;AACtB,YAAM/C,WAAWiB,OAAO0B,wBAAwB,KAAK0C,KAAK,EACvD3B,OAAO1C,CAAAA,SAAQA,KAAK6B,WAAWpF,QAAQ6U,OAAO;AACjD,YAAM7Q,UAAUR,OAAOxD,QAAQgE;AAC/B,YAAMY,SAAS,CAAA;AACf,YAAMuR,gBAAgB,KAAK7Q,YAAYF,WAAWgH,UAAU3F,SAAAA;AAC5D,YAAM2P,cAAcD,iBAAiBA,cAAc3S,OAAOG,IAAI;AAE9D,YAAM0S,WAAW,CAAC9S,SAAS;AACzB,cAAM8B,SAAS9B,KAAKqD,QAAQ0P,KAAKlc,CAAAA,SAAQA,KAAKoJ,OAAOG,IAAI,MAAMyS,WAAAA;AAC/D,cAAMG,MAAMlR,UAAUA,OAAO9B,KAAKE,OAAOE,IAAI;AAE7C,YAAI2O,cAAciE,GAAQC,KAAAA,MAAMD,GAAM,GAAA;AACpC,iBAAO;;MAEX;AAEA,iBAAWhT,QAAQhB,UAAU;AAC3B,YAAIkE,cAAcnO,UAAa+d,SAAS9S,IAAO,GAAA;AAC7C;;AAQF,YAAIS,YAAY,SAASY,OAAO6R,QAAQlT,KAAKX,KAAK,MAAM,MACzDoB,YAAY1L,UAAaiL,KAAKX,UAAUtK,QAAY;AACjDsM,iBAAO1J,KAAKqI,KAAKX,KAAK;;AAExB,YAAIW,KAAKb,UAAUwT,MAAM;AACvB;;MAEJ;AAKA,UAAI,CAACtR,OAAO3K,QAAQ;AAClB2K,eAAO1J,KAAK5C,MAAAA;;AAGd,aAAOsM;IACT;IAMA8R,eAAehU,QAAO;AACpB,aAAO,KAAKuT,WAAW3d,QAAWoK,MAAAA,EAAOzI;IAC3C;IAEA0c,gBAAgB;AACd,aAAO,KAAKC,SAAQ,EAAG3c;IACzB;IAEA4c,8BAA8B;AAC5B,YAAM7Q,UAAS,KAAKxN,MAAMwN;AAC1B,YAAM8Q,eAAe,KAAKte,MAAMwH,QAAQwJ;AACxC,aAAOrK,OAAOC,KAAK4G,OAAAA,EAAQC,OAAOxG,CAAAA,QAAOuG,QAAOvG,GAAI,EAACkE,SAASmT,YAAAA,EAAc5Q,MAAK;IACnF;IAEA0Q,WAAW;AACT,YAAMjT,OAAO,CAAA;AACb,YAAMoT,mBAAmB,KAAKF,4BAA2B;AACzD,iBAAWvQ,WAAW,KAAK9N,MAAM8K,KAAKyG,UAAU;AAC9CpG,aAAKwF,eACH,KAAK3Q,MAAMwH,QAAQwJ,cAAc,MAAMlD,QAAQ4C,UAAU5C,QAAQ+C,SAAS0N,gBAAAA,CAAAA,IACvE;MACP;AACA,aAAO5X,OAAOC,KAAKuE,IAAAA;IACrB;IAUAqT,eAAehU,cAAciU,MAAMxQ,WAAW;AAC5C,YAAM7B,SAAS,KAAKqR,WAAWjT,cAAcyD,SAAAA;AAC7C,YAAM/D,SAAQ,SAAUpK,SACpBsM,OAAO6R,QAAQQ,IACf,IAAA;AAEJ,aAAQvU,WAAU,KACdkC,OAAO3K,SAAS,IAChByI;IACN;IAKA8S,YAAY;AACV,YAAMrU,OAAO,KAAKnB;AAClB,YAAMuD,OAAO,KAAK+B;AAClB,YAAM9B,SAASD,KAAKC;AACpB,YAAMkP,SAAS,CAAA;AACf,UAAIxY,IAAGuI;AAEP,WAAKvI,KAAI,GAAGuI,OAAOc,KAAKD,KAAKrJ,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AAClDwY,eAAOxX,KAAKsI,OAAOqO,iBAAiB,KAAKzF,UAAUlS,EAAE,EAACsJ,OAAOG,IAAI,GAAGzJ,EAAAA,CAAAA;MACtE;AAEA,YAAMkY,eAAejR,KAAKiR;AAC1B,YAAM/Y,OAAM+Y,gBAAgBZ,qBAAqBjO,IAAAA;AAEjD,aAAO;QACLlK,KAAAA;QACAqZ;QACApZ,OAAOkK,OAAO0T;QACd7V,KAAKmC,OAAO2T;QACZjF,YAAY,KAAKwE,eAAc;QAC/BzV,OAAOuC;QACPqR,SAAS1T,KAAK0T;QAEdxC,OAAOD,eAAe,IAAIjR,KAAKoR,qBAAqBpR,KAAKqR;MAC3D;IACF;IAMAmD,yBAAyBjT,QAAO;AAC9B,YAAM,EAAC4C,aAAa,EAAC7B,QAAQ2D,UAAU1E,OAAOM,aAAAA,GAAehD,SAAS,EAAC8T,MAAMsD,WAAWC,aAAAA,EAAa,IAAI;AACzG,YAAM3D,aAAa0D,aAAa;AAChC,YAAM/R,SAAS,KAAK+G,UAAU1J,MAAAA;AAC9B,YAAM8Q,SAASnO,OAAO+N;AACtB,YAAMkE,WAAW/D,WAAWC,MAAAA;AAC5B,UAAI9S,QAAQ2E,OAAO5B,OAAOE,IAAI;AAC9B,UAAIrK,SAAQ;AACZ,UAAIW,SAASmN,WAAW,KAAKzE,WAAWc,QAAQ4B,QAAQ+B,QAAAA,IAAY1G;AACpE,UAAIgV,MAAM/U;AAEV,UAAI1G,WAAWyG,OAAO;AACpBpH,QAAAA,SAAQW,SAASyG;AACjBzG,iBAASyG;;AAGX,UAAI4W,UAAU;AACZ5W,gBAAQ8S,OAAON;AACfjZ,iBAASuZ,OAAOL,SAASK,OAAON;AAEhC,YAAIxS,UAAU,KAAK0C,KAAK1C,KAAAA,MAAW0C,KAAKoQ,OAAOL,MAAM,GAAG;AACtD7Z,UAAAA,SAAQ;;AAEVA,QAAAA,UAASoH;;AAGX,YAAMsS,aAAa,CAACV,cAAc8E,SAAAA,KAAc,CAACE,WAAWF,YAAY9d;AACxE,UAAIwa,OAAOrQ,OAAOoO,iBAAiBmB,UAAAA;AAEnC,UAAI,KAAKxa,MAAM+e,kBAAkB7U,MAAQ,GAAA;AACvCgT,eAAOjS,OAAOoO,iBAAiBvY,SAAQW,MAAAA;aAClC;AAELyb,eAAO5B;;AAGTnT,aAAO+U,OAAO5B;AAEd,UAAI1a,KAAKwY,IAAIjR,IAAAA,IAAQ0W,cAAc;AACjC1W,eAAO8S,QAAQ9S,MAAM8C,QAAQiQ,UAAc2D,IAAAA;AAC3C,YAAI3W,UAAUgT,YAAY;AACxBI,kBAAQnT,OAAO;;AAEjB,cAAM6W,aAAa/T,OAAOgU,mBAAmB,CAAA;AAC7C,cAAMC,WAAWjU,OAAOgU,mBAAmB,CAAA;AAC3C,cAAMpe,OAAMD,KAAKC,IAAIme,YAAYE,QAAAA;AACjC,cAAMlc,OAAMpC,KAAKoC,IAAIgc,YAAYE,QAAAA;AACjC5D,eAAO1a,KAAKoC,IAAIpC,KAAKC,IAAIya,MAAMtY,IAAMnC,GAAAA,IAAAA;AACrCqc,eAAO5B,OAAOnT;AAEd,YAAIyG,YAAY,CAACkQ,UAAU;AAEzBjS,iBAAOE,QAAQ9B,OAAOE,IAAI,EAAEmC,cAAc9C,YAAa,IAAGS,OAAOkU,iBAAiBjC,IAAQjS,IAAAA,OAAOkU,iBAAiB7D,IAAAA;;;AAItH,UAAIA,SAASrQ,OAAOoO,iBAAiB6B,UAAa,GAAA;AAChD,cAAMkE,WAAWxU,KAAKzC,IAAAA,IAAQ8C,OAAOoU,qBAAqBnE,UAAc,IAAA;AACxEI,gBAAQ8D;AACRjX,gBAAQiX;;AAGV,aAAO;QACLjX;QACAmT;QACA4B;QACAI,QAAQJ,OAAO/U,OAAO;MACxB;IACF;IAKAkV,yBAAyBnT,QAAOuP,OAAO;AACrC,YAAMhR,QAAQgR,MAAMhR;AACpB,YAAMjB,UAAU,KAAKA;AACrB,YAAMqW,WAAWrW,QAAQqW;AACzB,YAAMyB,kBAAkB3O,eAAenJ,QAAQ8X,iBAAiBC,QAAAA;AAChE,UAAIjC,QAAQnV;AACZ,YAAMqX,YAAY,KAAKrB,cAAa;AACpC,UAAI1E,MAAM4C,SAAS;AACjB,cAAM3C,aAAamE,WAAW,KAAKK,eAAehU,MAAAA,IAASuP,MAAMC;AACjE,cAAM3F,SAAQvM,QAAQoS,iBAAiB,SACnCO,0BAA0BjQ,QAAOuP,OAAOjS,SAASkS,aAAa8F,SAAAA,IAC9DhG,yBAAyBtP,QAAOuP,OAAOjS,SAASkS,aAAa8F,SAAU;AAC3E,cAAMC,SAAS,KAAKzf,MAAMwH,QAAQwJ,cAAc,MAAM,KAAKT,WAAU,EAAGG,UAAU,KAAKH,WAAU,EAAGM;AACpG,cAAM6O,aAAa,KAAKtB,SAAQ,EAAGH,QAAQtN,eAAe8O,QAAQ,KAAKpB,4BAA2B,CAAA,CAAA;AAClG,cAAMsB,aAAa,KAAKnB,eAAe,KAAKtU,OAAO,KAAK4C,YAAY1C,OAAOyT,WAAW3T,SAAQpK,MAAS,IAAI4f;AAC3GpC,iBAASvJ,OAAMjT,QAASiT,OAAMkG,QAAQ0F,aAAe5L,OAAMkG,QAAQ;AACnE9R,eAAOvH,KAAKC,IAAIye,iBAAiBvL,OAAMkG,QAAQlG,OAAM8F,KAAK;aACrD;AAELyD,iBAAS7U,MAAM4Q,iBAAiB,KAAKzF,UAAU1J,MAAAA,EAAOzB,MAAM0C,IAAI,GAAGjB,MAAAA;AACnE/B,eAAOvH,KAAKC,IAAIye,iBAAiB7F,MAAM5Y,MAAM4Y,MAAMI,KAAK;;AAI1D,aAAO;QACLyB,MAAMgC,SAASnV,OAAO;QACtB+U,MAAMI,SAASnV,OAAO;QACtBmV;QACAnV;MACF;IACF;IAEAxG,OAAO;AACL,YAAMoJ,OAAO,KAAK+B;AAClB,YAAM7B,SAASF,KAAKE;AACpB,YAAM2U,QAAQ7U,KAAKD;AACnB,YAAMb,OAAO2V,MAAMne;AACnB,UAAIC,KAAI;AAER,aAAOA,KAAIuI,MAAM,EAAEvI,IAAG;AACpB,YAAI,KAAKkS,UAAUlS,EAAE,EAACuJ,OAAOE,IAAI,MAAM,QAAQ,CAACyU,MAAMle,EAAE,EAACiN,QAAQ;AAC/DiR,gBAAMle,EAAE,EAACC,KAAK,KAAKqN,IAAI;;MAE3B;IACF;EAEF;ACtqBe,MAAM6Q,mBAAN,cAA+BhR,kBAAAA;IAE5C,OAAOjD,KAAK;IAKZ,OAAO/E,WAAW;MAChBiI,oBAAoB;MACpBC,iBAAiB;MAEjBrH,YAAY;QACV4U,SAAS;UACPnc,MAAM;UACNiH,YAAY;YAAC;YAAK;YAAK;YAAe;UAAS;QACjD;MACF;;IAMF,OAAOmV,YAAY;MACjB/O,QAAQ;QACNvE,GAAG;UACD9I,MAAM;QACR;QACA+I,GAAG;UACD/I,MAAM;QACR;MACF;;IAGF4P,aAAa;AACX,WAAKJ,sBAAsB;AAC3B,YAAMI,WAAU;IAClB;IAMAqD,mBAAmBrI,MAAMD,MAAMhK,QAAOgS,OAAO;AAC3C,YAAMjG,SAAS,MAAMuG,mBAAmBrI,MAAMD,MAAMhK,QAAOgS,KAAAA;AAC3D,eAASpR,KAAI,GAAGA,KAAImL,OAAOpL,QAAQC,MAAK;AACtCmL,eAAOnL,EAAE,EAACkZ,UAAU,KAAKxF,0BAA0B1T,KAAIZ,MAAAA,EAAOgf;MAChE;AACA,aAAOjT;IACT;IAMAqG,eAAenI,MAAMD,MAAMhK,QAAOgS,OAAO;AACvC,YAAMjG,SAAS,MAAMqG,eAAenI,MAAMD,MAAMhK,QAAOgS,KAAAA;AACvD,eAASpR,KAAI,GAAGA,KAAImL,OAAOpL,QAAQC,MAAK;AACtC,cAAME,OAAOkJ,KAAKhK,SAAQY,EAAE;AAC5BmL,eAAOnL,EAAE,EAACkZ,UAAUjK,eAAe/O,KAAK,CAAE,GAAE,KAAKwT,0BAA0B1T,KAAIZ,MAAAA,EAAOgf,MAAM;MAC9F;AACA,aAAOjT;IACT;IAMAsG,gBAAgBpI,MAAMD,MAAMhK,QAAOgS,OAAO;AACxC,YAAMjG,SAAS,MAAMsG,gBAAgBpI,MAAMD,MAAMhK,QAAOgS,KAAAA;AACxD,eAASpR,KAAI,GAAGA,KAAImL,OAAOpL,QAAQC,MAAK;AACtC,cAAME,OAAOkJ,KAAKhK,SAAQY,EAAE;AAC5BmL,eAAOnL,EAAAA,EAAGkZ,UAAUjK,eAAe/O,QAAQA,KAAK6H,KAAK,CAAC7H,KAAK6H,GAAG,KAAK2L,0BAA0B1T,KAAIZ,MAAAA,EAAOgf,MAAM;MAChH;AACA,aAAOjT;IACT;IAKA2H,iBAAiB;AACf,YAAM1J,OAAO,KAAKgC,YAAYhC;AAE9B,UAAI9H,OAAM;AACV,eAAStB,KAAIoJ,KAAKrJ,SAAS,GAAGC,MAAK,GAAG,EAAEA,IAAG;AACzCsB,QAAAA,OAAMpC,KAAKoC,IAAIA,MAAK8H,KAAKpJ,EAAAA,EAAGyG,KAAK,KAAKiN,0BAA0B1T,EAAM,CAAA,IAAA,CAAA;MACxE;AACA,aAAOsB,OAAM,KAAKA;IACpB;IAKAyR,iBAAiBvK,QAAO;AACtB,YAAMa,OAAO,KAAK+B;AAClB,YAAMwG,SAAS,KAAKtT,MAAM8K,KAAKwI,UAAU,CAAA;AACzC,YAAM,EAACvK,QAAQC,OAAAA,IAAU+B;AACzB,YAAM8B,SAAS,KAAK+G,UAAU1J,MAAAA;AAC9B,YAAMjB,IAAIF,OAAO4L,iBAAiB9H,OAAO5D,CAAC;AAC1C,YAAMC,KAAIF,OAAO2L,iBAAiB9H,OAAO3D,CAAC;AAC1C,YAAMO,KAAIoD,OAAO+N;AAEjB,aAAO;QACLlG,OAAOpB,OAAOpJ,MAAAA,KAAU;QACxBhC,OAAO,MAAMe,IAAI,OAAOC,MAAKO,KAAI,OAAOA,KAAI,MAAM;MACpD;IACF;IAEA/D,OAAO6E,MAAM;AACX,YAAMwV,SAAS,KAAKjT,YAAYhC;AAGhC,WAAK6M,eAAeoI,QAAQ,GAAGA,OAAOte,QAAQ8I,IAAAA;IAChD;IAEAoN,eAAeoI,QAAQjf,QAAOgS,OAAOvI,MAAM;AACzC,YAAMoH,QAAQpH,SAAS;AACvB,YAAM,EAACS,QAAQC,OAAAA,IAAU,KAAK6B;AAC9B,YAAM,EAACyJ,eAAeD,eAAc,IAAI,KAAKG,kBAAkB3V,QAAOyJ,IAAAA;AACtE,YAAMyC,QAAQhC,OAAOG;AACrB,YAAM8B,QAAQhC,OAAOE;AAErB,eAASzJ,KAAIZ,QAAOY,KAAIZ,SAAQgS,OAAOpR,MAAK;AAC1C,cAAMse,QAAQD,OAAOre,EAAE;AACvB,cAAMmL,SAAS,CAAC8E,SAAS,KAAKiC,UAAUlS,EAAAA;AACxC,cAAM0F,aAAa,CAAA;AACnB,cAAM6Y,SAAS7Y,WAAW4F,KAAM,IAAG2E,QAAQ3G,OAAOiU,mBAAmB,GAAA,IAAOjU,OAAOqO,iBAAiBxM,OAAOG,KAAAA,CAAM;AACjH,cAAMkT,SAAS9Y,WAAW6F,KAAAA,IAAS0E,QAAQ1G,OAAO8R,aAAY,IAAK9R,OAAOoO,iBAAiBxM,OAAOI,KAAAA,CAAM;AAExG7F,mBAAW+Y,OAAOnC,MAAMiC,MAAAA,KAAWjC,MAAMkC,MAAAA;AAEzC,YAAI5J,gBAAgB;AAClBlP,qBAAWI,UAAU+O,iBAAiB,KAAKnB,0BAA0B1T,IAAGse,MAAMva,SAAS,WAAW8E,IAAI;AAEtG,cAAIoH,OAAO;AACTvK,uBAAWI,QAAQsY,SAAS;;;AAIhC,aAAKjJ,cAAcmJ,OAAOte,IAAG0F,YAAYmD,IAAAA;MAC3C;IACF;IAOA6K,0BAA0BlL,QAAOK,MAAM;AACrC,YAAMsC,SAAS,KAAK+G,UAAU1J,MAAAA;AAC9B,UAAI5C,SAAS,MAAM8N,0BAA0BlL,QAAOK,IAAAA;AAGpD,UAAIjD,OAAOM,SAAS;AAClBN,iBAASX,OAAOyB,OAAO,CAAA,GAAId,QAAQ;UAACM,SAAS;QAAK,CAAA;;AAIpD,YAAMkY,SAASxY,OAAOwY;AACtB,UAAIvV,SAAS,UAAU;AACrBjD,eAAOwY,SAAS;;AAElBxY,aAAOwY,UAAUnP,eAAe9D,UAAUA,OAAO+N,SAASkF,MAAAA;AAE1D,aAAOxY;IACT;EACF;AC/JA,WAAS8Y,kBAAkBC,UAAUC,eAAeC,QAAQ;AAC1D,QAAIC,SAAS;AACb,QAAIC,SAAS;AACb,QAAIC,UAAU;AACd,QAAIC,UAAU;AAEd,QAAIL,gBAAgBM,KAAK;AACvB,YAAMC,aAAaR;AACnB,YAAMS,WAAWD,aAAaP;AAC9B,YAAMS,SAASngB,KAAKogB,IAAIH,UAAAA;AACxB,YAAMI,SAASrgB,KAAKsgB,IAAIL,UAAAA;AACxB,YAAMM,OAAOvgB,KAAKogB,IAAIF,QAAAA;AACtB,YAAMM,OAAOxgB,KAAKsgB,IAAIJ,QAAAA;AACtB,YAAMO,UAAU,CAACC,OAAOvI,IAAGrP,OAAM6X,cAAcD,OAAOT,YAAYC,UAAU,IAAI,IAAI,IAAIlgB,KAAKoC,IAAI+V,IAAGA,KAAIwH,QAAQ7W,IAAGA,KAAI6W,MAAO;AAC9H,YAAMiB,UAAU,CAACF,OAAOvI,IAAGrP,OAAM6X,cAAcD,OAAOT,YAAYC,UAAU,IAAI,IAAI,KAAKlgB,KAAKC,IAAIkY,IAAGA,KAAIwH,QAAQ7W,IAAGA,KAAI6W,MAAO;AAC/H,YAAMkB,OAAOJ,QAAQ,GAAGN,QAAQI,IAAAA;AAChC,YAAMO,OAAOL,QAAQM,SAASV,QAAQG,IAAAA;AACtC,YAAMQ,OAAOJ,QAAQK,IAAId,QAAQI,IAAAA;AACjC,YAAMW,OAAON,QAAQK,KAAKF,SAASV,QAAQG,IAAAA;AAC3CZ,gBAAUiB,OAAOG,QAAQ;AACzBnB,gBAAUiB,OAAOI,QAAQ;AACzBpB,gBAAU,EAAEe,OAAOG,QAAQ;AAC3BjB,gBAAU,EAAEe,OAAOI,QAAQ;;AAE7B,WAAO;MAACtB;MAAQC;MAAQC;MAASC;IAAO;EAC1C;AAEe,MAAMoB,qBAAN,cAAiClT,kBAAAA;IAE9C,OAAOjD,KAAK;IAKZ,OAAO/E,WAAW;MAChBiI,oBAAoB;MACpBC,iBAAiB;MACjBjI,WAAW;QAETkb,eAAe;QAEfC,cAAc;MAChB;MACAva,YAAY;QACV4U,SAAS;UACPnc,MAAM;UACNiH,YAAY;YAAC;YAAiB;YAAY;YAAe;YAAe;YAAc;YAAK;YAAK;YAAU;YAAe;UAAU;QACrI;MACF;MAEAmZ,QAAQ;MAGRF,UAAU;MAGVC,eAAe;MAGfR,QAAQ;MAGRoC,SAAS;MAETlR,WAAW;;IAGb,OAAOmR,cAAc;MACnBC,aAAa,CAAC3D,SAASA,SAAS;MAChC4D,YAAY,CAAC5D,SAASA,SAAS,aAAa,CAACA,KAAK6D,WAAW,YAAiB,KAAA,CAAC7D,KAAK6D,WAAW,iBAAA;;IAMjG,OAAO/F,YAAY;MACjBgG,aAAa;MAGbC,SAAS;QACPC,QAAQ;UACNnP,QAAQ;YACNoP,eAAe1iB,OAAO;AACpB,oBAAM8K,OAAO9K,MAAM8K;AACnB,oBAAM,EAACwI,QAAQ,EAACqP,YAAYC,WAAWhf,OAAAA,QAAOif,iBAAiBC,aAAAA,EAAa,IAAI9iB,MAAMyiB,OAAOjb;AAC7F,kBAAIsD,KAAKwI,OAAO7R,UAAUqJ,KAAKyG,SAAS9P,QAAQ;AAC9C,uBAAOqJ,KAAKwI,OAAOyP,IAAI,CAACrO,OAAOhT,OAAM;AACnC,wBAAMqJ,OAAO/K,MAAMwR,eAAe,CAAA;AAClC,wBAAMwR,QAAQjY,KAAK6B,WAAWsI,SAASxT,EAAAA;AAEvC,yBAAO;oBACLuhB,MAAMvO;oBACNwO,WAAWF,MAAMG;oBACjBC,WAAWxf;oBACX+K,QAAQ,CAAC3O,MAAM+e,kBAAkBrd,EAAAA;oBACjC2hB,UAAUL,MAAMM;oBAChBC,gBAAgBP,MAAMQ;oBACtBC,UAAUT,MAAMU;oBAChBC,WAAWX,MAAMY;oBACjBC,aAAab,MAAMc;oBACnBlB;oBACAD;oBACAG,cAAcD,oBAAoBC,gBAAgBE,MAAMF;oBAExD5Y,OAAOxI;kBACT;gBACF,CAAA;;AAEF,qBAAO,CAAA;YACT;UACF;UAEAqiB,QAAQC,IAAGC,YAAYxB,QAAQ;AAC7BA,mBAAOziB,MAAMkkB,qBAAqBD,WAAW/Z,KAAK;AAClDuY,mBAAOziB,MAAM0F,OAAM;UACrB;QACF;MACF;;IAGFlG,YAAYQ,OAAOwK,cAAc;AAC/B,YAAMxK,OAAOwK,YAAAA;AAEb,WAAKmF,sBAAsB;AAC3B,WAAKwU,cAAcrkB;AACnB,WAAKskB,cAActkB;AACnB,WAAK4gB,UAAU5gB;AACf,WAAK6gB,UAAU7gB;IACjB;IAEAkQ,aAAa;IAAA;IAKb6C,MAAM/R,QAAOgS,OAAO;AAClB,YAAMhI,OAAO,KAAKyF,WAAU,EAAGzF;AAC/B,YAAMC,OAAO,KAAK+B;AAElB,UAAI,KAAKuC,aAAa,OAAO;AAC3BtE,aAAKqD,UAAUtD;aACV;AACL,YAAIuZ,SAAS,CAAC3iB,OAAM,CAACoJ,KAAKpJ,EAAE;AAE5B,YAAI+E,SAASqE,KAAKhK,MAAAA,CAAM,GAAG;AACzB,gBAAM,EAACmG,MAAM,QAAA,IAAW,KAAKoI;AAC7BgV,mBAAS,CAAC3iB,OAAM,CAACiS,iBAAiB7I,KAAKpJ,EAAAA,GAAIuF,GAAAA;;AAG7C,YAAIvF,IAAGuI;AACP,aAAKvI,KAAIZ,QAAOmJ,OAAOnJ,SAAQgS,OAAOpR,KAAIuI,MAAM,EAAEvI,IAAG;AACnDqJ,eAAKqD,QAAQ1M,EAAE,IAAG2iB,OAAO3iB,EAAAA;QAC3B;;IAEJ;IAKA4iB,eAAe;AACb,aAAOC,UAAU,KAAK/c,QAAQ6Y,WAAW,EAAA;IAC3C;IAKAmE,oBAAoB;AAClB,aAAOD,UAAU,KAAK/c,QAAQ8Y,aAAa;IAC7C;IAMAmE,sBAAsB;AACpB,UAAI5jB,OAAM+f;AACV,UAAI5d,OAAM,CAAC4d;AAEX,eAASlf,KAAI,GAAGA,KAAI,KAAK1B,MAAM8K,KAAKyG,SAAS9P,QAAQ,EAAEC,IAAG;AACxD,YAAI,KAAK1B,MAAM0kB,iBAAiBhjB,EAAAA,KAAM,KAAK1B,MAAMwR,eAAe9P,EAAGvB,EAAAA,SAAS,KAAKiP,OAAO;AACtF,gBAAMxC,aAAa,KAAK5M,MAAMwR,eAAe9P,EAAAA,EAAGkL;AAChD,gBAAMyT,WAAWzT,WAAW0X,aAAY;AACxC,gBAAMhE,gBAAgB1T,WAAW4X,kBAAiB;AAElD3jB,UAAAA,OAAMD,KAAKC,IAAIA,MAAKwf,QAAAA;AACpBrd,UAAAA,OAAMpC,KAAKoC,IAAIA,MAAKqd,WAAWC,aAAAA;;MAEnC;AAEA,aAAO;QACLD,UAAUxf;QACVyf,eAAetd,OAAMnC;MACvB;IACF;IAKA6E,OAAO6E,MAAM;AACX,YAAMvK,QAAQ,KAAKA;AACnB,YAAM,EAACgV,UAAS,IAAIhV;AACpB,YAAM+K,OAAO,KAAK+B;AAClB,YAAM6X,OAAO5Z,KAAKD;AAClB,YAAMoX,UAAU,KAAK0C,kBAAiB,IAAK,KAAKC,aAAaF,IAAQ,IAAA,KAAKnd,QAAQ0a;AAClF,YAAM4C,UAAUlkB,KAAKoC,KAAKpC,KAAKC,IAAImU,UAAUwI,OAAOxI,UAAUuI,MAAM,IAAI2E,WAAW,GAAG,CAAA;AACtF,YAAM3B,SAAS3f,KAAKC,IAAIkkB,aAAa,KAAKvd,QAAQ+Y,QAAQuE,OAAU,GAAA,CAAA;AACpE,YAAME,cAAc,KAAKC,eAAe,KAAK/a,KAAK;AAKlD,YAAM,EAACoW,eAAeD,SAAAA,IAAY,KAAKoE,oBAAmB;AAC1D,YAAM,EAACjE,QAAQC,QAAQC,SAASC,QAAAA,IAAWP,kBAAkBC,UAAUC,eAAeC,MAAAA;AACtF,YAAM2E,YAAYlQ,UAAUwI,QAAQ0E,WAAW1B;AAC/C,YAAM2E,aAAanQ,UAAUuI,SAAS2E,WAAWzB;AACjD,YAAM2E,YAAYxkB,KAAKoC,IAAIpC,KAAKC,IAAIqkB,UAAUC,SAAAA,IAAa,GAAG,CAAA;AAC9D,YAAMf,cAAciB,YAAY,KAAK7d,QAAQsY,QAAQsF,SAAAA;AACrD,YAAMjB,cAAcvjB,KAAKoC,IAAIohB,cAAc7D,QAAQ,CAAA;AACnD,YAAM+E,gBAAgBlB,cAAcD,eAAe,KAAKoB,8BAA6B;AACrF,WAAK7E,UAAUA,UAAU0D;AACzB,WAAKzD,UAAUA,UAAUyD;AAEzBrZ,WAAKya,QAAQ,KAAKC,eAAc;AAEhC,WAAKrB,cAAcA,cAAckB,eAAe,KAAKI,qBAAqB,KAAKxb,KAAK;AACpF,WAAKia,cAAcvjB,KAAKoC,IAAI,KAAKohB,cAAckB,eAAeN,aAAa,CAAA;AAE3E,WAAKrN,eAAegN,MAAM,GAAGA,KAAKljB,QAAQ8I,IAAAA;IAC5C;IAKAob,eAAejkB,IAAGiQ,OAAO;AACvB,YAAMhJ,OAAO,KAAKnB;AAClB,YAAMuD,OAAO,KAAK+B;AAClB,YAAMwT,gBAAgB,KAAKkE,kBAAiB;AAC5C,UAAI,SAAU7b,KAAK7B,UAAUkb,iBAAkB,CAAC,KAAKhiB,MAAM+e,kBAAkBrd,EAAMqJ,KAAAA,KAAKqD,QAAQ1M,EAAE,MAAK,QAAQqJ,KAAKD,KAAKpJ,EAAAA,EAAGiN,QAAQ;AAClI,eAAO;;AAET,aAAO,KAAKiX,uBAAuB7a,KAAKqD,QAAQ1M,EAAE,IAAG4e,gBAAgBM,GAAAA;IACvE;IAEAjJ,eAAegN,MAAM7jB,QAAOgS,OAAOvI,MAAM;AACvC,YAAMoH,QAAQpH,SAAS;AACvB,YAAMvK,QAAQ,KAAKA;AACnB,YAAMgV,YAAYhV,MAAMgV;AACxB,YAAMrM,OAAO3I,MAAMwH;AACnB,YAAMqe,gBAAgBld,KAAK7B;AAC3B,YAAMgf,WAAW9Q,UAAU1L,OAAO0L,UAAU5L,SAAS;AACrD,YAAM2c,WAAW/Q,UAAU7L,MAAM6L,UAAU3L,UAAU;AACrD,YAAM4Y,eAAetQ,SAASkU,cAAc5D;AAC5C,YAAMkC,cAAclC,eAAe,IAAI,KAAKkC;AAC5C,YAAMC,cAAcnC,eAAe,IAAI,KAAKmC;AAC5C,YAAM,EAAC7N,eAAeD,eAAc,IAAI,KAAKG,kBAAkB3V,QAAOyJ,IAAAA;AACtE,UAAIsW,aAAa,KAAKyD,aAAY;AAClC,UAAI5iB;AAEJ,WAAKA,KAAI,GAAGA,KAAIZ,QAAO,EAAEY,IAAG;AAC1Bmf,sBAAc,KAAK8E,eAAejkB,IAAGiQ,KAAAA;MACvC;AAEA,WAAKjQ,KAAIZ,QAAOY,KAAIZ,SAAQgS,OAAO,EAAEpR,IAAG;AACtC,cAAM4e,gBAAgB,KAAKqF,eAAejkB,IAAGiQ,KAAAA;AAC7C,cAAMqU,MAAMrB,KAAKjjB,EAAE;AACnB,cAAM0F,aAAa;UACjB6B,GAAG6c,UAAU,KAAKpF;UAClBxX,GAAG6c,UAAU,KAAKpF;UAClBE;UACAC,UAAUD,aAAaP;UACvBA;UACA8D;UACAD;QACF;AACA,YAAI7N,gBAAgB;AAClBlP,qBAAWI,UAAU+O,iBAAiB,KAAKnB,0BAA0B1T,IAAGskB,IAAIvgB,SAAS,WAAW8E,IAAI;;AAEtGsW,sBAAcP;AAEd,aAAKzJ,cAAcmP,KAAKtkB,IAAG0F,YAAYmD,IAAAA;MACzC;IACF;IAEAkb,iBAAiB;AACf,YAAM1a,OAAO,KAAK+B;AAClB,YAAMmZ,WAAWlb,KAAKD;AACtB,UAAI0a,QAAQ;AACZ,UAAI9jB;AAEJ,WAAKA,KAAI,GAAGA,KAAIukB,SAASxkB,QAAQC,MAAK;AACpC,cAAMwG,QAAQ6C,KAAKqD,QAAQ1M,EAAE;AAC7B,YAAIwG,UAAU,QAAQ,CAAC8V,MAAM9V,KAAAA,KAAU,KAAKlI,MAAM+e,kBAAkBrd,EAAAA,KAAM,CAACukB,SAASvkB,EAAE,EAACiN,QAAQ;AAC7F6W,mBAAS5kB,KAAKwY,IAAIlR,KAAAA;;MAEtB;AAEA,aAAOsd;IACT;IAEAI,uBAAuB1d,OAAO;AAC5B,YAAMsd,QAAQ,KAAK1Y,YAAY0Y;AAC/B,UAAIA,QAAQ,KAAK,CAACxH,MAAM9V,KAAQ,GAAA;AAC9B,eAAO0Y,OAAOhgB,KAAKwY,IAAIlR,KAAAA,IAASsd;;AAElC,aAAO;IACT;IAEA/Q,iBAAiBvK,QAAO;AACtB,YAAMa,OAAO,KAAK+B;AAClB,YAAM9M,QAAQ,KAAKA;AACnB,YAAMsT,SAAStT,MAAM8K,KAAKwI,UAAU,CAAA;AACpC,YAAMpL,QAAQge,cAAanb,KAAKqD,QAAQlE,MAAAA,GAAQlK,MAAMwH,QAAQ2e,MAAM;AAEpE,aAAO;QACLzR,OAAOpB,OAAOpJ,MAAAA,KAAU;QACxBhC;MACF;IACF;IAEA0c,kBAAkBD,MAAM;AACtB,UAAI3hB,OAAM;AACV,YAAMhD,QAAQ,KAAKA;AACnB,UAAI0B,IAAGuI,MAAMc,MAAM6B,YAAYpF;AAE/B,UAAI,CAACmd,MAAM;AAET,aAAKjjB,KAAI,GAAGuI,OAAOjK,MAAM8K,KAAKyG,SAAS9P,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AAC5D,cAAI1B,MAAM0kB,iBAAiBhjB,EAAI,GAAA;AAC7BqJ,mBAAO/K,MAAMwR,eAAe9P,EAAAA;AAC5BijB,mBAAO5Z,KAAKD;AACZ8B,yBAAa7B,KAAK6B;AAClB;;QAEJ;;AAGF,UAAI,CAAC+X,MAAM;AACT,eAAO;;AAGT,WAAKjjB,KAAI,GAAGuI,OAAO0a,KAAKljB,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AAC7C8F,kBAAUoF,WAAWwI,0BAA0B1T,EAAAA;AAC/C,YAAI8F,QAAQ4e,gBAAgB,SAAS;AACnCpjB,UAAAA,OAAMpC,KAAKoC,IAAIA,MAAKwE,QAAQoc,eAAe,GAAGpc,QAAQ6e,oBAAoB,CAAA;;MAE9E;AACA,aAAOrjB;IACT;IAEA6hB,aAAaF,MAAM;AACjB,UAAI3hB,OAAM;AAEV,eAAStB,KAAI,GAAGuI,OAAO0a,KAAKljB,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AACjD,cAAM8F,UAAU,KAAK4N,0BAA0B1T,EAAAA;AAC/CsB,QAAAA,OAAMpC,KAAKoC,IAAIA,MAAKwE,QAAQiV,UAAU,GAAGjV,QAAQ8e,eAAe,CAAA;MAClE;AACA,aAAOtjB;IACT;IAMA0iB,qBAAqBlb,cAAc;AACjC,UAAI+b,mBAAmB;AAEvB,eAAS7kB,KAAI,GAAGA,KAAI8I,cAAc,EAAE9I,IAAG;AACrC,YAAI,KAAK1B,MAAM0kB,iBAAiBhjB,EAAI,GAAA;AAClC6kB,8BAAoB,KAAKtB,eAAevjB,EAAAA;;MAE5C;AAEA,aAAO6kB;IACT;IAKAtB,eAAeza,cAAc;AAC3B,aAAO5J,KAAKoC,IAAI2N,eAAe,KAAK3Q,MAAM8K,KAAKyG,SAAS/G,YAAAA,EAAcgc,QAAQ,CAAI,GAAA,CAAA;IACpF;IAMAjB,gCAAgC;AAC9B,aAAO,KAAKG,qBAAqB,KAAK1lB,MAAM8K,KAAKyG,SAAS9P,MAAM,KAAK;IACvE;EACF;ACzYe,MAAMglB,iBAAN,cAA6B5X,kBAAAA;IAE1C,OAAOjD,KAAK;IAKZ,OAAO/E,WAAW;MAChBiI,oBAAoB;MACpBC,iBAAiB;MAEjB2X,UAAU;MACVC,UAAU;;IAMZ,OAAOpK,YAAY;MACjB/O,QAAQ;QACNgP,SAAS;UACPrc,MAAM;QACR;QACAwc,SAAS;UACPxc,MAAM;QACR;MACF;;IAGF4P,aAAa;AACX,WAAKJ,sBAAsB;AAC3B,WAAKC,qBAAqB;AAC1B,YAAMG,WAAU;IAClB;IAEArK,OAAO6E,MAAM;AACX,YAAMQ,OAAO,KAAK+B;AAClB,YAAM,EAACgB,SAAS8Y,MAAM9b,MAAMiV,SAAS,CAAA,GAAI8G,SAAQ,IAAI9b;AAErD,YAAM+b,qBAAqB,KAAK9mB,MAAMwW;AACtC,UAAI,EAAC1V,OAAAA,QAAOgS,MAAAA,IAASiU,iCAAiChc,MAAMgV,QAAQ+G,kBAAAA;AAEpE,WAAKrX,aAAa3O;AAClB,WAAK4O,aAAaoD;AAElB,UAAIkU,oBAAoBjc,IAAO,GAAA;AAC7BjK,QAAAA,SAAQ;AACRgS,gBAAQiN,OAAOte;;AAIjBmlB,WAAKtgB,SAAS,KAAKtG;AACnB4mB,WAAKK,gBAAgB,KAAK/c;AAC1B0c,WAAKM,aAAa,CAAC,CAACL,SAASK;AAC7BN,WAAK7G,SAASA;AAEd,YAAMvY,UAAU,KAAK2N,6BAA6B5K,IAAAA;AAClD,UAAI,CAAC,KAAK/C,QAAQkf,UAAU;AAC1Blf,gBAAQoc,cAAc;;AAExBpc,cAAQ2f,UAAU,KAAK3f,QAAQ2f;AAC/B,WAAKtQ,cAAc+P,MAAM9mB,QAAW;QAClCsnB,UAAU,CAACN;QACXtf;SACC+C,IAAAA;AAGH,WAAKoN,eAAeoI,QAAQjf,QAAOgS,OAAOvI,IAAAA;IAC5C;IAEAoN,eAAeoI,QAAQjf,QAAOgS,OAAOvI,MAAM;AACzC,YAAMoH,QAAQpH,SAAS;AACvB,YAAM,EAACS,QAAQC,QAAQ2D,UAAUiY,SAAAA,IAAY,KAAK/Z;AAClD,YAAM,EAACyJ,eAAeD,eAAc,IAAI,KAAKG,kBAAkB3V,QAAOyJ,IAAAA;AACtE,YAAMyC,QAAQhC,OAAOG;AACrB,YAAM8B,QAAQhC,OAAOE;AACrB,YAAM,EAACwb,UAAUQ,QAAAA,IAAW,KAAK3f;AACjC,YAAM6f,eAAeC,SAASX,QAAYA,IAAAA,WAAW3a,OAAOE;AAC5D,YAAMqb,eAAe,KAAKvnB,MAAMwW,uBAAuB7E,SAASpH,SAAS;AACzE,YAAM1B,OAAM/H,SAAQgS;AACpB,YAAM0U,cAAczH,OAAOte;AAC3B,UAAIgmB,aAAa3mB,SAAQ,KAAK,KAAK8S,UAAU9S,SAAQ,CAAA;AAErD,eAASY,KAAI,GAAGA,KAAI8lB,aAAa,EAAE9lB,IAAG;AACpC,cAAMse,QAAQD,OAAOre,EAAE;AACvB,cAAM0F,aAAamgB,eAAevH,QAAQ,CAAA;AAE1C,YAAIte,KAAIZ,UAASY,MAAKmH,MAAK;AACzBzB,qBAAW+Y,OAAO;AAClB;;AAGF,cAAMtT,SAAS,KAAK+G,UAAUlS,EAAAA;AAC9B,cAAMgmB,WAAW5N,cAAcjN,OAAOI,KAAM,CAAA;AAC5C,cAAMgT,SAAS7Y,WAAW4F,KAAM,IAAGhC,OAAOqO,iBAAiBxM,OAAOG,KAAAA,GAAQtL,EAAAA;AAC1E,cAAMwe,SAAS9Y,WAAW6F,KAAM,IAAG0E,SAAS+V,WAAWzc,OAAO8R,aAAY,IAAK9R,OAAOoO,iBAAiBzK,WAAW,KAAKzE,WAAWc,QAAQ4B,QAAQ+B,QAAAA,IAAY/B,OAAOI,KAAM,GAAEvL,EAAE;AAE/K0F,mBAAW+Y,OAAOnC,MAAMiC,MAAAA,KAAWjC,MAAMkC,MAAWwH,KAAAA;AACpDtgB,mBAAWlE,OAAOxB,KAAI,KAAK,KAAM0X,IAAIvM,OAAOG,KAAM,IAAGya,WAAWza,KAAAA,CAAM,IAAKqa;AAC3E,YAAIF,SAAS;AACX/f,qBAAWyF,SAASA;AACpBzF,qBAAW8G,MAAM2Y,SAAS/b,KAAKpJ,EAAE;;AAGnC,YAAI4U,gBAAgB;AAClBlP,qBAAWI,UAAU+O,iBAAiB,KAAKnB,0BAA0B1T,IAAGse,MAAMva,SAAS,WAAW8E,IAAI;;AAGxG,YAAI,CAACgd,cAAc;AACjB,eAAK1Q,cAAcmJ,OAAOte,IAAG0F,YAAYmD,IAAAA;;AAG3Ckd,qBAAa5a;MACf;IACF;IAKA2H,iBAAiB;AACf,YAAMzJ,OAAO,KAAK+B;AAClB,YAAMgB,UAAU/C,KAAK+C;AACrB,YAAM6Z,SAAS7Z,QAAQtG,WAAWsG,QAAQtG,QAAQoc,eAAe;AACjE,YAAM9Y,OAAOC,KAAKD,QAAQ,CAAA;AAC1B,UAAI,CAACA,KAAKrJ,QAAQ;AAChB,eAAOkmB;;AAET,YAAMC,aAAa9c,KAAK,CAAE,EAAC3C,KAAK,KAAKiN,0BAA0B,CAAA,CAAA;AAC/D,YAAMyS,YAAY/c,KAAKA,KAAKrJ,SAAS,CAAE,EAAC0G,KAAK,KAAKiN,0BAA0BtK,KAAKrJ,SAAS,CAAA,CAAA;AAC1F,aAAOb,KAAKoC,IAAI2kB,QAAQC,YAAYC,SAAa,IAAA;IACnD;IAEAlmB,OAAO;AACL,YAAMoJ,OAAO,KAAK+B;AAClB/B,WAAK+C,QAAQga,oBAAoB,KAAK9nB,MAAMgV,WAAWjK,KAAKC,OAAOG,IAAI;AACvE,YAAMxJ,KAAI;IACZ;EACF;AC3Ie,MAAMomB,sBAAN,cAAkClZ,kBAAAA;IAE/C,OAAOjD,KAAK;IAKZ,OAAO/E,WAAW;MAChBkI,iBAAiB;MACjBjI,WAAW;QACTkb,eAAe;QACfC,cAAc;MAChB;MACAva,YAAY;QACV4U,SAAS;UACPnc,MAAM;UACNiH,YAAY;YAAC;YAAK;YAAK;YAAc;YAAY;YAAe;UAAc;QAChF;MACF;MACA4J,WAAW;MACX6P,YAAY;;IAMd,OAAOtE,YAAY;MACjBgG,aAAa;MAEbC,SAAS;QACPC,QAAQ;UACNnP,QAAQ;YACNoP,eAAe1iB,OAAO;AACpB,oBAAM8K,OAAO9K,MAAM8K;AACnB,kBAAIA,KAAKwI,OAAO7R,UAAUqJ,KAAKyG,SAAS9P,QAAQ;AAC9C,sBAAM,EAAC6R,QAAQ,EAACqP,YAAY/e,OAAAA,OAAAA,EAAM,IAAI5D,MAAMyiB,OAAOjb;AAEnD,uBAAOsD,KAAKwI,OAAOyP,IAAI,CAACrO,OAAOhT,OAAM;AACnC,wBAAMqJ,OAAO/K,MAAMwR,eAAe,CAAA;AAClC,wBAAMwR,QAAQjY,KAAK6B,WAAWsI,SAASxT,EAAAA;AAEvC,yBAAO;oBACLuhB,MAAMvO;oBACNwO,WAAWF,MAAMG;oBACjBU,aAAab,MAAMc;oBACnBV,WAAWxf;oBACX+f,WAAWX,MAAMY;oBACjBjB;oBACAhU,QAAQ,CAAC3O,MAAM+e,kBAAkBrd,EAAAA;oBAGjCwI,OAAOxI;kBACT;gBACF,CAAA;;AAEF,qBAAO,CAAA;YACT;UACF;UAEAqiB,QAAQC,IAAGC,YAAYxB,QAAQ;AAC7BA,mBAAOziB,MAAMkkB,qBAAqBD,WAAW/Z,KAAK;AAClDuY,mBAAOziB,MAAM0F,OAAM;UACrB;QACF;MACF;MAEA8H,QAAQ;QACN/D,GAAG;UACDtJ,MAAM;UACN6nB,YAAY;YACVC,SAAS;UACX;UACArL,aAAa;UACbF,MAAM;YACJwL,UAAU;UACZ;UACAC,aAAa;YACXF,SAAS;UACX;UACApH,YAAY;QACd;MACF;;IAGFrhB,YAAYQ,OAAOwK,cAAc;AAC/B,YAAMxK,OAAOwK,YAAAA;AAEb,WAAK2Z,cAAcrkB;AACnB,WAAKskB,cAActkB;IACrB;IAEA2U,iBAAiBvK,QAAO;AACtB,YAAMa,OAAO,KAAK+B;AAClB,YAAM9M,QAAQ,KAAKA;AACnB,YAAMsT,SAAStT,MAAM8K,KAAKwI,UAAU,CAAA;AACpC,YAAMpL,QAAQge,cAAanb,KAAKqD,QAAQlE,MAAAA,EAAOT,GAAGzJ,MAAMwH,QAAQ2e,MAAM;AAEtE,aAAO;QACLzR,OAAOpB,OAAOpJ,MAAAA,KAAU;QACxBhC;MACF;IACF;IAEAiL,gBAAgBpI,MAAMD,MAAMhK,QAAOgS,OAAO;AACxC,aAAOsV,4BAA4BC,KAAK,IAAI,EAAEtd,MAAMD,MAAMhK,QAAOgS,KAAAA;IACnE;IAEApN,OAAO6E,MAAM;AACX,YAAMoa,OAAO,KAAK7X,YAAYhC;AAE9B,WAAKwd,cAAa;AAClB,WAAK3Q,eAAegN,MAAM,GAAGA,KAAKljB,QAAQ8I,IAAAA;IAC5C;IAKA2J,YAAY;AACV,YAAMnJ,OAAO,KAAK+B;AAClB,YAAMiH,SAAQ;QAAClT,KAAKmL,OAAOE;QAAmBlJ,KAAKgJ,OAAOC;MAAiB;AAE3ElB,WAAKD,KAAKtK,QAAQ,CAACwN,SAAS9D,WAAU;AACpC,cAAM2C,SAAS,KAAK+G,UAAU1J,MAAAA,EAAOT;AAErC,YAAI,CAACuU,MAAMnR,MAAW,KAAA,KAAK7M,MAAM+e,kBAAkB7U,MAAQ,GAAA;AACzD,cAAI2C,SAASkH,OAAMlT,KAAK;AACtBkT,YAAAA,OAAMlT,MAAMgM;;AAGd,cAAIA,SAASkH,OAAM/Q,KAAK;AACtB+Q,YAAAA,OAAM/Q,MAAM6J;;;MAGlB,CAAA;AAEA,aAAOkH;IACT;IAKAuU,gBAAgB;AACd,YAAMtoB,QAAQ,KAAKA;AACnB,YAAMgV,YAAYhV,MAAMgV;AACxB,YAAMrM,OAAO3I,MAAMwH;AACnB,YAAM+gB,UAAU3nB,KAAKC,IAAImU,UAAU5L,QAAQ4L,UAAU1L,MAAM0L,UAAU3L,SAAS2L,UAAU7L,GAAG;AAE3F,YAAMib,cAAcxjB,KAAKoC,IAAIulB,UAAU,GAAG,CAAA;AAC1C,YAAMpE,cAAcvjB,KAAKoC,IAAI2F,KAAK6f,mBAAmB,cAAe,MAAQ7f,KAAK6f,mBAAoB,GAAG,CAAA;AACxG,YAAMlD,gBAAgBlB,cAAcD,eAAenkB,MAAMyoB,uBAAsB;AAE/E,WAAKrE,cAAcA,cAAekB,eAAe,KAAKpb;AACtD,WAAKia,cAAc,KAAKC,cAAckB;IACxC;IAEA3N,eAAegN,MAAM7jB,QAAOgS,OAAOvI,MAAM;AACvC,YAAMoH,QAAQpH,SAAS;AACvB,YAAMvK,QAAQ,KAAKA;AACnB,YAAM2I,OAAO3I,MAAMwH;AACnB,YAAMqe,gBAAgBld,KAAK7B;AAC3B,YAAM2B,QAAQ,KAAKqE,YAAYwE;AAC/B,YAAMwU,UAAUrd,MAAMigB;AACtB,YAAM3C,UAAUtd,MAAMkgB;AACtB,YAAMC,oBAAoBngB,MAAMogB,cAAc,CAAA,IAAK,MAAMhH;AACzD,UAAIP,QAAQsH;AACZ,UAAIlnB;AAEJ,YAAMonB,eAAe,MAAM,KAAKC,qBAAoB;AAEpD,WAAKrnB,KAAI,GAAGA,KAAIZ,QAAO,EAAEY,IAAG;AAC1B4f,iBAAS,KAAK0H,cAActnB,IAAG6I,MAAMue,YAAAA;MACvC;AACA,WAAKpnB,KAAIZ,QAAOY,KAAIZ,SAAQgS,OAAOpR,MAAK;AACtC,cAAMskB,MAAMrB,KAAKjjB,EAAE;AACnB,YAAImf,aAAaS;AACjB,YAAIR,WAAWQ,QAAQ,KAAK0H,cAActnB,IAAG6I,MAAMue,YAAAA;AACnD,YAAI1E,cAAcpkB,MAAM+e,kBAAkBrd,EAAAA,IAAK+G,MAAMwgB,8BAA8B,KAAKrV,UAAUlS,EAAG+H,EAAAA,CAAC,IAAI;AAC1G6X,gBAAQR;AAER,YAAInP,OAAO;AACT,cAAIkU,cAAc5D,cAAc;AAC9BmC,0BAAc;;AAEhB,cAAIyB,cAAc7D,eAAe;AAC/BnB,yBAAaC,WAAW8H;;;AAI5B,cAAMxhB,aAAa;UACjB6B,GAAG6c;UACH5c,GAAG6c;UACH5B,aAAa;UACbC;UACAvD;UACAC;UACAtZ,SAAS,KAAK4N,0BAA0B1T,IAAGskB,IAAIvgB,SAAS,WAAW8E,IAAI;QACzE;AAEA,aAAKsM,cAAcmP,KAAKtkB,IAAG0F,YAAYmD,IAAAA;MACzC;IACF;IAEAwe,uBAAuB;AACrB,YAAMhe,OAAO,KAAK+B;AAClB,UAAIgG,QAAQ;AAEZ/H,WAAKD,KAAKtK,QAAQ,CAACwN,SAAS9D,WAAU;AACpC,YAAI,CAAC8T,MAAM,KAAKpK,UAAU1J,MAAAA,EAAOT,CAAC,KAAK,KAAKzJ,MAAM+e,kBAAkB7U,MAAQ,GAAA;AAC1E4I;;MAEJ,CAAA;AAEA,aAAOA;IACT;IAKAkW,cAAc9e,QAAOK,MAAMue,cAAc;AACvC,aAAO,KAAK9oB,MAAM+e,kBAAkB7U,MAChCqa,IAAAA,UAAU,KAAKnP,0BAA0BlL,QAAOK,IAAAA,EAAM+W,SAASwH,YAAAA,IAC/D;IACN;EACF;AC/Ne,MAAMI,gBAAN,cAA4BnH,mBAAAA;IAEzC,OAAOnW,KAAK;IAKZ,OAAO/E,WAAW;MAEhB0Z,QAAQ;MAGRF,UAAU;MAGVC,eAAe;MAGfR,QAAQ;;EAEZ;ACpBe,MAAMqJ,kBAAN,cAA8Bta,kBAAAA;IAE3C,OAAOjD,KAAK;IAKZ,OAAO/E,WAAW;MAChBiI,oBAAoB;MACpBC,iBAAiB;MACjBiC,WAAW;MACX0V,UAAU;MACV5R,UAAU;QACR8R,MAAM;UACJ1W,MAAM;QACR;MACF;;IAMF,OAAOqM,YAAY;MACjBgG,aAAa;MAEb/U,QAAQ;QACN/D,GAAG;UACDtJ,MAAM;QACR;MACF;;IAMFsU,iBAAiBvK,QAAO;AACtB,YAAMe,SAAS,KAAK6B,YAAY7B;AAChC,YAAM4B,SAAS,KAAK+G,UAAU1J,MAAAA;AAE9B,aAAO;QACLwK,OAAOzJ,OAAOsI,UAAS,EAAGrJ,MAAM;QAChChC,OAAO,KAAK+C,OAAO0J,iBAAiB9H,OAAO5B,OAAOE,IAAI,CAAC;MACzD;IACF;IAEAgI,gBAAgBpI,MAAMD,MAAMhK,QAAOgS,OAAO;AACxC,aAAOsV,4BAA4BC,KAAK,IAAI,EAAEtd,MAAMD,MAAMhK,QAAOgS,KAAAA;IACnE;IAEApN,OAAO6E,MAAM;AACX,YAAMQ,OAAO,KAAK+B;AAClB,YAAM8Z,OAAO7b,KAAK+C;AAClB,YAAMiS,SAAShV,KAAKD,QAAQ,CAAA;AAC5B,YAAMwI,SAASvI,KAAKC,OAAOuI,UAAS;AAGpCqT,WAAK7G,SAASA;AAEd,UAAIxV,SAAS,UAAU;AACrB,cAAM/C,UAAU,KAAK2N,6BAA6B5K,IAAAA;AAClD,YAAI,CAAC,KAAK/C,QAAQkf,UAAU;AAC1Blf,kBAAQoc,cAAc;;AAGxB,cAAMxc,aAAa;UACjBlC,OAAO;UACPkkB,WAAW9V,OAAO7R,WAAWse,OAAOte;UACpC+F;QACF;AAEA,aAAKqP,cAAc+P,MAAM9mB,QAAWsH,YAAYmD,IAAAA;;AAIlD,WAAKoN,eAAeoI,QAAQ,GAAGA,OAAOte,QAAQ8I,IAAAA;IAChD;IAEAoN,eAAeoI,QAAQjf,QAAOgS,OAAOvI,MAAM;AACzC,YAAM9B,QAAQ,KAAKqE,YAAYwE;AAC/B,YAAMK,QAAQpH,SAAS;AAEvB,eAAS7I,KAAIZ,QAAOY,KAAIZ,SAAQgS,OAAOpR,MAAK;AAC1C,cAAMse,QAAQD,OAAOre,EAAE;AACvB,cAAM8F,UAAU,KAAK4N,0BAA0B1T,IAAGse,MAAMva,SAAS,WAAW8E,IAAI;AAChF,cAAM8e,gBAAgB5gB,MAAM6gB,yBAAyB5nB,IAAG,KAAKkS,UAAUlS,EAAAA,EAAG+H,CAAC;AAE3E,cAAMR,IAAI0I,QAAQlJ,MAAMigB,UAAUW,cAAcpgB;AAChD,cAAMC,KAAIyI,QAAQlJ,MAAMkgB,UAAUU,cAAcngB;AAEhD,cAAM9B,aAAa;UACjB6B;UACAC,GAAAA;UACAoY,OAAO+H,cAAc/H;UACrBnB,MAAMnC,MAAM/U,CAAAA,KAAM+U,MAAM9U,EAAAA;UACxB1B;QACF;AAEA,aAAKqP,cAAcmJ,OAAOte,IAAG0F,YAAYmD,IAAAA;MAC3C;IACF;EACF;AClGe,MAAMgf,oBAAN,cAAgC1a,kBAAAA;IAE7C,OAAOjD,KAAK;IAKZ,OAAO/E,WAAW;MAChBiI,oBAAoB;MACpBC,iBAAiB;MACjB2X,UAAU;MACVxW,MAAM;;IAMR,OAAOqM,YAAY;MAEjBiN,aAAa;QACXjf,MAAM;MACR;MAEAiD,QAAQ;QACNvE,GAAG;UACD9I,MAAM;QACR;QACA+I,GAAG;UACD/I,MAAM;QACR;MACF;;IAMFsU,iBAAiBvK,QAAO;AACtB,YAAMa,OAAO,KAAK+B;AAClB,YAAMwG,SAAS,KAAKtT,MAAM8K,KAAKwI,UAAU,CAAA;AACzC,YAAM,EAACvK,QAAQC,OAAAA,IAAU+B;AACzB,YAAM8B,SAAS,KAAK+G,UAAU1J,MAAAA;AAC9B,YAAMjB,IAAIF,OAAO4L,iBAAiB9H,OAAO5D,CAAC;AAC1C,YAAMC,KAAIF,OAAO2L,iBAAiB9H,OAAO3D,CAAC;AAE1C,aAAO;QACLwL,OAAOpB,OAAOpJ,MAAAA,KAAU;QACxBhC,OAAO,MAAMe,IAAI,OAAOC,KAAI;MAC9B;IACF;IAEAxD,OAAO6E,MAAM;AACX,YAAMQ,OAAO,KAAK+B;AAClB,YAAM,EAAChC,MAAMiV,SAAS,CAAA,EAAE,IAAIhV;AAE5B,YAAM+b,qBAAqB,KAAK9mB,MAAMwW;AACtC,UAAI,EAAC1V,OAAAA,QAAOgS,MAAAA,IAASiU,iCAAiChc,MAAMgV,QAAQ+G,kBAAAA;AAEpE,WAAKrX,aAAa3O;AAClB,WAAK4O,aAAaoD;AAElB,UAAIkU,oBAAoBjc,IAAO,GAAA;AAC7BjK,QAAAA,SAAQ;AACRgS,gBAAQiN,OAAOte;;AAGjB,UAAI,KAAK+F,QAAQkf,UAAU;AAGzB,YAAI,CAAC,KAAK5X,oBAAoB;AAC5B,eAAKmB,YAAW;;AAElB,cAAM,EAACnC,SAAS8Y,MAAMC,SAAAA,IAAY9b;AAGlC6b,aAAKtgB,SAAS,KAAKtG;AACnB4mB,aAAKK,gBAAgB,KAAK/c;AAC1B0c,aAAKM,aAAa,CAAC,CAACL,SAASK;AAC7BN,aAAK7G,SAASA;AAEd,cAAMvY,UAAU,KAAK2N,6BAA6B5K,IAAAA;AAClD/C,gBAAQ2f,UAAU,KAAK3f,QAAQ2f;AAC/B,aAAKtQ,cAAc+P,MAAM9mB,QAAW;UAClCsnB,UAAU,CAACN;UACXtf;WACC+C,IAAAA;MACL,WAAW,KAAKuE,oBAAoB;AAElC,eAAO/D,KAAK+C;AACZ,aAAKgB,qBAAqB;;AAI5B,WAAK6I,eAAeoI,QAAQjf,QAAOgS,OAAOvI,IAAAA;IAC5C;IAEA0F,cAAc;AACZ,YAAM,EAACyW,SAAQ,IAAI,KAAKlf;AAExB,UAAI,CAAC,KAAKsH,sBAAsB4X,UAAU;AACxC,aAAK5X,qBAAqB,KAAK9O,MAAMypB,SAASC,WAAW,MAAA;;AAG3D,YAAMzZ,YAAW;IACnB;IAEA0H,eAAeoI,QAAQjf,QAAOgS,OAAOvI,MAAM;AACzC,YAAMoH,QAAQpH,SAAS;AACvB,YAAM,EAACS,QAAQC,QAAQ2D,UAAUiY,SAAAA,IAAY,KAAK/Z;AAClD,YAAM4J,YAAY,KAAKtB,0BAA0BtU,QAAOyJ,IAAAA;AACxD,YAAMgM,gBAAgB,KAAKF,iBAAiBK,SAAAA;AAC5C,YAAMJ,iBAAiB,KAAKA,eAAe/L,MAAMgM,aAAAA;AACjD,YAAMvJ,QAAQhC,OAAOG;AACrB,YAAM8B,QAAQhC,OAAOE;AACrB,YAAM,EAACwb,UAAUQ,QAAAA,IAAW,KAAK3f;AACjC,YAAM6f,eAAeC,SAASX,QAAYA,IAAAA,WAAW3a,OAAOE;AAC5D,YAAMqb,eAAe,KAAKvnB,MAAMwW,uBAAuB7E,SAASpH,SAAS;AACzE,UAAIkd,aAAa3mB,SAAQ,KAAK,KAAK8S,UAAU9S,SAAQ,CAAA;AAErD,eAASY,KAAIZ,QAAOY,KAAIZ,SAAQgS,OAAO,EAAEpR,IAAG;AAC1C,cAAMse,QAAQD,OAAOre,EAAE;AACvB,cAAMmL,SAAS,KAAK+G,UAAUlS,EAAAA;AAC9B,cAAM0F,aAAamgB,eAAevH,QAAQ,CAAA;AAC1C,cAAM0H,WAAW5N,cAAcjN,OAAOI,KAAM,CAAA;AAC5C,cAAMgT,SAAS7Y,WAAW4F,KAAM,IAAGhC,OAAOqO,iBAAiBxM,OAAOG,KAAAA,GAAQtL,EAAAA;AAC1E,cAAMwe,SAAS9Y,WAAW6F,KAAM,IAAG0E,SAAS+V,WAAWzc,OAAO8R,aAAY,IAAK9R,OAAOoO,iBAAiBzK,WAAW,KAAKzE,WAAWc,QAAQ4B,QAAQ+B,QAAAA,IAAY/B,OAAOI,KAAM,GAAEvL,EAAE;AAE/K0F,mBAAW+Y,OAAOnC,MAAMiC,MAAAA,KAAWjC,MAAMkC,MAAWwH,KAAAA;AACpDtgB,mBAAWlE,OAAOxB,KAAI,KAAK,KAAM0X,IAAIvM,OAAOG,KAAM,IAAGya,WAAWza,KAAAA,CAAM,IAAKqa;AAC3E,YAAIF,SAAS;AACX/f,qBAAWyF,SAASA;AACpBzF,qBAAW8G,MAAM2Y,SAAS/b,KAAKpJ,EAAE;;AAGnC,YAAI4U,gBAAgB;AAClBlP,qBAAWI,UAAU+O,iBAAiB,KAAKnB,0BAA0B1T,IAAGse,MAAMva,SAAS,WAAW8E,IAAI;;AAGxG,YAAI,CAACgd,cAAc;AACjB,eAAK1Q,cAAcmJ,OAAOte,IAAG0F,YAAYmD,IAAAA;;AAG3Ckd,qBAAa5a;MACf;AAEA,WAAK+J,oBAAoBL,eAAehM,MAAMmM,SAAAA;IAChD;IAKAlC,iBAAiB;AACf,YAAMzJ,OAAO,KAAK+B;AAClB,YAAMhC,OAAOC,KAAKD,QAAQ,CAAA;AAE1B,UAAI,CAAC,KAAKtD,QAAQkf,UAAU;AAC1B,YAAI1jB,OAAM;AACV,iBAAStB,KAAIoJ,KAAKrJ,SAAS,GAAGC,MAAK,GAAG,EAAEA,IAAG;AACzCsB,UAAAA,OAAMpC,KAAKoC,IAAIA,MAAK8H,KAAKpJ,EAAAA,EAAGyG,KAAK,KAAKiN,0BAA0B1T,EAAM,CAAA,IAAA,CAAA;QACxE;AACA,eAAOsB,OAAM,KAAKA;;AAGpB,YAAM8K,UAAU/C,KAAK+C;AACrB,YAAM6Z,SAAS7Z,QAAQtG,WAAWsG,QAAQtG,QAAQoc,eAAe;AAEjE,UAAI,CAAC9Y,KAAKrJ,QAAQ;AAChB,eAAOkmB;;AAGT,YAAMC,aAAa9c,KAAK,CAAE,EAAC3C,KAAK,KAAKiN,0BAA0B,CAAA,CAAA;AAC/D,YAAMyS,YAAY/c,KAAKA,KAAKrJ,SAAS,CAAE,EAAC0G,KAAK,KAAKiN,0BAA0BtK,KAAKrJ,SAAS,CAAA,CAAA;AAC1F,aAAOb,KAAKoC,IAAI2kB,QAAQC,YAAYC,SAAa,IAAA;IACnD;EACF;;;;;;;;;;;;AClHA,WAAS8B,WAAwB;AAC/B,UAAM,IAAIC,MAAM,iFAAmF;EACrG;AAQA,MAAMC,kBAAN,MAAMA,iBAAAA;;;;;;;;;;;IAYJ,OAAOC,SACLC,SACA;AACApjB,aAAOyB,OAAOyhB,iBAAgBG,WAAWD,OAAAA;IAC3C;IAESviB;IAEThI,YAAYgI,SAAqB;AAC/B,WAAKA,UAAUA,WAAW,CAAA;IAC5B;;IAGAyiB,OAAO;IAAA;IAEPC,UAAiD;AAC/C,aAAOP,SAAAA;IACT;IAEA9W,QAAuB;AACrB,aAAO8W,SAAAA;IACT;IAEAQ,SAAiB;AACf,aAAOR,SAAAA;IACT;IAEAhnB,MAAc;AACZ,aAAOgnB,SAAAA;IACT;IAEAS,OAAe;AACb,aAAOT,SAAAA;IACT;IAEAU,UAAkB;AAChB,aAAOV,SAAAA;IACT;IAEAW,QAAgB;AACd,aAAOX,SAAAA;IACT;EACF;AAEA,MAAA,WAAe;IACbY,OAAOV;EAMT;ACpHA,WAASW,aAAaC,SAAStf,MAAMjD,OAAOwiB,WAAW;AACrD,UAAM,EAAC9d,YAAY9B,MAAMkI,QAAAA,IAAWyX;AACpC,UAAMzf,SAAS4B,WAAWE,YAAY9B;AACtC,UAAM2b,WAAW8D,QAAQ3c,UAAU2c,QAAQ3c,QAAQtG,UAAUijB,QAAQ3c,QAAQtG,QAAQmf,WAAW,OAAO;AAEvG,QAAI3b,UAAUG,SAASH,OAAOG,QAAQA,SAAS,OAAO6H,WAAWlI,KAAKrJ,QAAQ;AAC5E,YAAMkpB,eAAe3f,OAAO4f,iBAAiBC,gBAAgBC;AAC7D,UAAI,CAACJ,WAAW;AACd,cAAMK,SAASJ,aAAa7f,MAAMK,MAAMjD,KAAAA;AACxC,YAAIye,UAAU;AACZ,gBAAM,EAAC1b,OAAAA,IAAU2B,WAAWE;AAC5B,gBAAM,EAACsB,QAAO,IAAIqc;AAElB,gBAAMO,sBAAuB5c,QAC1B6c,MAAM,GAAGF,OAAOG,KAAK,CACrBtiB,EAAAA,QAAO,EACPuiB,UACCnL,CAAAA,UAAS,CAAClG,cAAckG,MAAM/U,OAAOE,IAAI,CAAC,CAAA;AAC9C4f,iBAAOG,MAAMtqB,KAAKoC,IAAI,GAAGgoB,mBAAAA;AAEzB,gBAAMI,sBAAuBhd,QAC1B6c,MAAMF,OAAOM,EAAE,EACfF,UACCnL,CAAAA,UAAS,CAAClG,cAAckG,MAAM/U,OAAOE,IAAI,CAAC,CAAA;AAC9C4f,iBAAOM,MAAMzqB,KAAKoC,IAAI,GAAGooB,mBAAAA;;AAE3B,eAAOL;iBACEne,WAAW4C,gBAAgB;AAIpC,cAAM8b,KAAKxgB,KAAK,CAAE;AAClB,cAAMiJ,SAAQ,OAAOuX,GAAGC,aAAa,cAAcD,GAAGC,SAASpgB,IAAAA;AAC/D,YAAI4I,QAAO;AACT,gBAAMjT,SAAQ6pB,aAAa7f,MAAMK,MAAMjD,QAAQ6L,MAAAA;AAC/C,gBAAMlL,OAAM8hB,aAAa7f,MAAMK,MAAMjD,QAAQ6L,MAAAA;AAC7C,iBAAO;YAACmX,IAAIpqB,OAAMoqB;YAAIG,IAAIxiB,KAAIwiB;UAAE;;;;AAKtC,WAAO;MAACH,IAAI;MAAGG,IAAIvgB,KAAKrJ,SAAS;IAAC;EACpC;AAUA,WAAS+pB,yBAAyBxrB,OAAOmL,MAAMsgB,UAAUC,SAAShB,WAAW;AAC3E,UAAM3gB,WAAW/J,MAAM2rB,6BAA4B;AACnD,UAAMzjB,QAAQujB,SAAStgB,IAAK;AAC5B,aAASzJ,KAAI,GAAGuI,OAAOF,SAAStI,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AACrD,YAAM,EAACwI,OAAAA,QAAOY,KAAAA,IAAQf,SAASrI,EAAE;AACjC,YAAM,EAACwpB,IAAIG,GAAAA,IAAMb,aAAazgB,SAASrI,EAAAA,GAAIyJ,MAAMjD,OAAOwiB,SAAAA;AACxD,eAASkB,IAAIV,IAAIU,KAAKP,IAAI,EAAEO,GAAG;AAC7B,cAAM5d,UAAUlD,KAAK8gB,CAAE;AACvB,YAAI,CAAC5d,QAAQmS,MAAM;AACjBuL,kBAAQ1d,SAAS9D,QAAO0hB,CAAAA;;MAE5B;IACF;EACF;AAOA,WAASC,yBAAyB1gB,MAAM;AACtC,UAAM2gB,OAAO3gB,KAAK8S,QAAQ,GAAA,MAAS;AACnC,UAAM8N,OAAO5gB,KAAK8S,QAAQ,GAAA,MAAS;AAEnC,WAAO,SAAS+N,KAAKC,KAAK;AACxB,YAAMC,SAASJ,OAAOlrB,KAAKwY,IAAI4S,IAAI/iB,IAAIgjB,IAAIhjB,CAAC,IAAI;AAChD,YAAMkjB,SAASJ,OAAOnrB,KAAKwY,IAAI4S,IAAI9iB,IAAI+iB,IAAI/iB,CAAC,IAAI;AAChD,aAAOtI,KAAKwrB,KAAKxrB,KAAKyrB,IAAIH,QAAQ,CAAKtrB,IAAAA,KAAKyrB,IAAIF,QAAQ,CAAA,CAAA;IAC1D;EACF;AAWA,WAASG,kBAAkBtsB,OAAOyrB,UAAUtgB,MAAMohB,kBAAkBC,kBAAkB;AACpF,UAAMhrB,QAAQ,CAAA;AAEd,QAAI,CAACgrB,oBAAoB,CAACxsB,MAAMysB,cAAchB,QAAW,GAAA;AACvD,aAAOjqB;;AAGT,UAAMkrB,iBAAiB,SAAS1e,SAASxD,cAAcN,QAAO;AAC5D,UAAI,CAACsiB,oBAAoB,CAACG,eAAe3e,SAAShO,MAAMgV,WAAW,CAAI,GAAA;AACrE;;AAEF,UAAIhH,QAAQ4e,QAAQnB,SAASxiB,GAAGwiB,SAASviB,GAAGqjB,gBAAmB,GAAA;AAC7D/qB,cAAMkB,KAAK;UAACsL;UAASxD;UAAcN,OAAAA;QAAK,CAAA;;IAE5C;AAEAshB,6BAAyBxrB,OAAOmL,MAAMsgB,UAAUiB,gBAAgB,IAAI;AACpE,WAAOlrB;EACT;AAUA,WAASqrB,sBAAsB7sB,OAAOyrB,UAAUtgB,MAAMohB,kBAAkB;AACtE,QAAI/qB,QAAQ,CAAA;AAEZ,aAASkrB,eAAe1e,SAASxD,cAAcN,QAAO;AACpD,YAAM,EAAC2W,YAAYC,SAAAA,IAAY9S,QAAQ8e,SAAS;QAAC;QAAc;SAAaP,gBAAAA;AAC5E,YAAM,EAACjL,MAAAA,IAASyL,kBAAkB/e,SAAS;QAAC/E,GAAGwiB,SAASxiB;QAAGC,GAAGuiB,SAASviB;MAAC,CAAA;AAExE,UAAIqY,cAAcD,OAAOT,YAAYC,QAAW,GAAA;AAC9Ctf,cAAMkB,KAAK;UAACsL;UAASxD;UAAcN,OAAAA;QAAK,CAAA;;IAE5C;AAEAshB,6BAAyBxrB,OAAOmL,MAAMsgB,UAAUiB,cAAAA;AAChD,WAAOlrB;EACT;AAYA,WAASwrB,yBAAyBhtB,OAAOyrB,UAAUtgB,MAAMuf,WAAW6B,kBAAkBC,kBAAkB;AACtG,QAAIhrB,QAAQ,CAAA;AACZ,UAAMyrB,iBAAiBpB,yBAAyB1gB,IAAAA;AAChD,QAAI+hB,cAAclhB,OAAOE;AAEzB,aAASwgB,eAAe1e,SAASxD,cAAcN,QAAO;AACpD,YAAM0iB,WAAU5e,QAAQ4e,QAAQnB,SAASxiB,GAAGwiB,SAASviB,GAAGqjB,gBAAAA;AACxD,UAAI7B,aAAa,CAACkC,UAAS;AACzB;;AAGF,YAAMtP,SAAStP,QAAQmf,eAAeZ,gBAAAA;AACtC,YAAMa,cAAc,CAAC,CAACZ,oBAAoBxsB,MAAMysB,cAAcnP,MAAAA;AAC9D,UAAI,CAAC8P,eAAe,CAACR,UAAS;AAC5B;;AAGF,YAAMS,WAAWJ,eAAexB,UAAUnO,MAAAA;AAC1C,UAAI+P,WAAWH,aAAa;AAC1B1rB,gBAAQ;UAAC;YAACwM;YAASxD;YAAcN,OAAAA;UAAK;QAAE;AACxCgjB,sBAAcG;iBACLA,aAAaH,aAAa;AAEnC1rB,cAAMkB,KAAK;UAACsL;UAASxD;UAAcN,OAAAA;QAAK,CAAA;;IAE5C;AAEAshB,6BAAyBxrB,OAAOmL,MAAMsgB,UAAUiB,cAAAA;AAChD,WAAOlrB;EACT;AAYA,WAAS8rB,gBAAgBttB,OAAOyrB,UAAUtgB,MAAMuf,WAAW6B,kBAAkBC,kBAAkB;AAC7F,QAAI,CAACA,oBAAoB,CAACxsB,MAAMysB,cAAchB,QAAW,GAAA;AACvD,aAAO,CAAA;;AAGT,WAAOtgB,SAAS,OAAO,CAACuf,YACpBmC,sBAAsB7sB,OAAOyrB,UAAUtgB,MAAMohB,gBAAAA,IAC7CS,yBAAyBhtB,OAAOyrB,UAAUtgB,MAAMuf,WAAW6B,kBAAkBC,gBAAiB;EACpG;AAWA,WAASe,aAAavtB,OAAOyrB,UAAUtgB,MAAMuf,WAAW6B,kBAAkB;AACxE,UAAM/qB,QAAQ,CAAA;AACd,UAAMgsB,cAAcriB,SAAS,MAAM,aAAa;AAChD,QAAIsiB,iBAAiB;AAErBjC,6BAAyBxrB,OAAOmL,MAAMsgB,UAAU,CAACzd,SAASxD,cAAcN,WAAU;AAChF,UAAI8D,QAAQwf,WAAY,KAAIxf,QAAQwf,WAAY,EAAC/B,SAAStgB,IAAK,GAAEohB,gBAAmB,GAAA;AAClF/qB,cAAMkB,KAAK;UAACsL;UAASxD;UAAcN,OAAAA;QAAK,CAAA;AACxCujB,yBAAiBA,kBAAkBzf,QAAQ4e,QAAQnB,SAASxiB,GAAGwiB,SAASviB,GAAGqjB,gBAAAA;;IAE/E,CAAA;AAIA,QAAI7B,aAAa,CAAC+C,gBAAgB;AAChC,aAAO,CAAA;;AAET,WAAOjsB;EACT;AAMA,MAAA,cAAe;IAEbgqB;IAGAkC,OAAO;MAYLxjB,MAAMlK,OAAOgkB,IAAGxc,SAAS+kB,kBAAkB;AACzC,cAAMd,WAAWkC,oBAAoB3J,IAAGhkB,KAAAA;AAExC,cAAMmL,OAAO3D,QAAQ2D,QAAQ;AAC7B,cAAMqhB,mBAAmBhlB,QAAQglB,oBAAoB;AACrD,cAAMhrB,QAAQgG,QAAQkjB,YAClB4B,kBAAkBtsB,OAAOyrB,UAAUtgB,MAAMohB,kBAAkBC,gBAAAA,IAC3Dc,gBAAgBttB,OAAOyrB,UAAUtgB,MAAM,OAAOohB,kBAAkBC,gBAAiB;AACrF,cAAM1X,YAAW,CAAA;AAEjB,YAAI,CAACtT,MAAMC,QAAQ;AACjB,iBAAO,CAAA;;AAGTzB,cAAM2rB,6BAA4B,EAAGnrB,QAAQ,CAACuK,SAAS;AACrD,gBAAMb,SAAQ1I,MAAM,CAAA,EAAG0I;AACvB,gBAAM8D,UAAUjD,KAAKD,KAAKZ,MAAM;AAGhC,cAAI8D,WAAW,CAACA,QAAQmS,MAAM;AAC5BrL,YAAAA,UAASpS,KAAK;cAACsL;cAASxD,cAAcO,KAAKb;cAAOA,OAAAA;YAAK,CAAA;;QAE3D,CAAA;AAEA,eAAO4K;MACT;MAYAhH,QAAQ9N,OAAOgkB,IAAGxc,SAAS+kB,kBAAkB;AAC3C,cAAMd,WAAWkC,oBAAoB3J,IAAGhkB,KAAAA;AACxC,cAAMmL,OAAO3D,QAAQ2D,QAAQ;AAC7B,cAAMqhB,mBAAmBhlB,QAAQglB,oBAAoB;AACrD,YAAIhrB,QAAQgG,QAAQkjB,YAChB4B,kBAAkBtsB,OAAOyrB,UAAUtgB,MAAMohB,kBAAkBC,gBAAAA,IAC7Dc,gBAAgBttB,OAAOyrB,UAAUtgB,MAAM,OAAOohB,kBAAkBC,gBAAiB;AAEnF,YAAIhrB,MAAMC,SAAS,GAAG;AACpB,gBAAM+I,eAAehJ,MAAM,CAAA,EAAGgJ;AAC9B,gBAAMM,OAAO9K,MAAMwR,eAAehH,YAAAA,EAAcM;AAChDtJ,kBAAQ,CAAA;AACR,mBAASE,KAAI,GAAGA,KAAIoJ,KAAKrJ,QAAQ,EAAEC,IAAG;AACpCF,kBAAMkB,KAAK;cAACsL,SAASlD,KAAKpJ,EAAE;cAAE8I;cAAcN,OAAOxI;YAAC,CAAA;UACtD;;AAGF,eAAOF;MACT;MAYAwe,MAAMhgB,OAAOgkB,IAAGxc,SAAS+kB,kBAAkB;AACzC,cAAMd,WAAWkC,oBAAoB3J,IAAGhkB,KAAAA;AACxC,cAAMmL,OAAO3D,QAAQ2D,QAAQ;AAC7B,cAAMqhB,mBAAmBhlB,QAAQglB,oBAAoB;AACrD,eAAOF,kBAAkBtsB,OAAOyrB,UAAUtgB,MAAMohB,kBAAkBC,gBAAAA;MACpE;MAWAoB,QAAQ5tB,OAAOgkB,IAAGxc,SAAS+kB,kBAAkB;AAC3C,cAAMd,WAAWkC,oBAAoB3J,IAAGhkB,KAAAA;AACxC,cAAMmL,OAAO3D,QAAQ2D,QAAQ;AAC7B,cAAMqhB,mBAAmBhlB,QAAQglB,oBAAoB;AACrD,eAAOc,gBAAgBttB,OAAOyrB,UAAUtgB,MAAM3D,QAAQkjB,WAAW6B,kBAAkBC,gBAAAA;MACrF;MAWAvjB,EAAEjJ,OAAOgkB,IAAGxc,SAAS+kB,kBAAkB;AACrC,cAAMd,WAAWkC,oBAAoB3J,IAAGhkB,KAAAA;AACxC,eAAOutB,aAAavtB,OAAOyrB,UAAU,KAAKjkB,QAAQkjB,WAAW6B,gBAAAA;MAC/D;MAWArjB,EAAElJ,OAAOgkB,IAAGxc,SAAS+kB,kBAAkB;AACrC,cAAMd,WAAWkC,oBAAoB3J,IAAGhkB,KAAAA;AACxC,eAAOutB,aAAavtB,OAAOyrB,UAAU,KAAKjkB,QAAQkjB,WAAW6B,gBAAAA;MAC/D;IACF;EACF;AC3XA,MAAMsB,mBAAmB;IAAC;IAAQ;IAAO;IAAS;EAAS;AAE3D,WAASC,iBAAiBC,OAAOtC,UAAU;AACzC,WAAOsC,MAAMtgB,OAAOwO,CAAAA,MAAKA,EAAE+R,QAAQvC,QAAAA;EACrC;AAEA,WAASwC,4BAA4BF,OAAO5iB,MAAM;AAChD,WAAO4iB,MAAMtgB,OAAOwO,CAAAA,MAAK4R,iBAAiB5P,QAAQhC,EAAE+R,GAAG,MAAM,MAAM/R,EAAEiS,IAAI/iB,SAASA,IAAAA;EACpF;AAEA,WAASgjB,aAAaJ,OAAOnlB,SAAS;AACpC,WAAOmlB,MAAMjV,KAAK,CAACC,IAAGrP,OAAM;AAC1B,YAAM0kB,KAAKxlB,UAAUc,KAAIqP;AACzB,YAAMgD,KAAKnT,UAAUmQ,KAAIrP;AACzB,aAAO0kB,GAAG5H,WAAWzK,GAAGyK,SACtB4H,GAAGlkB,QAAQ6R,GAAG7R,QACdkkB,GAAG5H,SAASzK,GAAGyK;IACnB,CAAA;EACF;AAEA,WAAS6H,UAAUC,OAAO;AACxB,UAAMC,cAAc,CAAA;AACpB,QAAI7sB,IAAGuI,MAAMikB,KAAKF,KAAK5jB,OAAOokB;AAE9B,SAAK9sB,KAAI,GAAGuI,QAAQqkB,SAAS,CAAA,GAAI7sB,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AACtDwsB,YAAMI,MAAM5sB,EAAE;AACb,OAAA,EAAC+pB,UAAUuC,KAAKxmB,SAAS,EAAC4C,OAAOokB,cAAc,EAAC,EAAC,IAAIN;AACtDK,kBAAY7rB,KAAK;QACfwH,OAAOxI;QACPwsB;QACAF;QACA3S,YAAY6S,IAAI/S,aAAY;QAC5BqL,QAAQ0H,IAAI1H;QACZpc,OAAOA,SAAU4jB,MAAM5jB;QACvBokB;MACF,CAAA;IACF;AACA,WAAOD;EACT;AAEA,WAASE,YAAYC,UAAS;AAC5B,UAAMtiB,SAAS,CAAA;AACf,eAAWuiB,QAAQD,UAAS;AAC1B,YAAM,EAACtkB,OAAO4jB,KAAKQ,YAAAA,IAAeG;AAClC,UAAI,CAACvkB,SAAS,CAACyjB,iBAAiBe,SAASZ,GAAM,GAAA;AAC7C;;AAEF,YAAMa,SAASziB,OAAOhC,KAAAA,MAAWgC,OAAOhC,KAAAA,IAAS;QAAC0I,OAAO;QAAGgc,QAAQ;QAAGtI,QAAQ;QAAGre,MAAM;;AACxF0mB,aAAO/b;AACP+b,aAAOrI,UAAUgI;IACnB;AACA,WAAOpiB;EACT;AAKA,WAAS2iB,cAAcL,UAASM,QAAQ;AACtC,UAAM5iB,SAASqiB,YAAYC,QAAAA;AAC3B,UAAM,EAACO,cAAcC,cAAAA,IAAiBF;AACtC,QAAIttB,IAAGuI,MAAMklB;AACb,SAAKztB,KAAI,GAAGuI,OAAOykB,SAAQjtB,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AAChDytB,eAAST,SAAQhtB,EAAE;AACnB,YAAM,EAAC0tB,SAAAA,IAAYD,OAAOjB;AAC1B,YAAM9jB,QAAQgC,OAAO+iB,OAAO/kB,KAAK;AACjC,YAAMzG,SAASyG,SAAS+kB,OAAOX,cAAcpkB,MAAMoc;AACnD,UAAI2I,OAAO9T,YAAY;AACrB8T,eAAO3R,QAAQ7Z,SAASA,SAASsrB,eAAeG,YAAYJ,OAAOK;AACnEF,eAAO5R,SAAS2R;aACX;AACLC,eAAO3R,QAAQyR;AACfE,eAAO5R,SAAS5Z,SAASA,SAASurB,gBAAgBE,YAAYJ,OAAOM;;IAEzE;AACA,WAAOljB;EACT;AAEA,WAASmjB,iBAAiBjB,OAAO;AAC/B,UAAMC,cAAcF,UAAUC,KAAAA;AAC9B,UAAMc,WAAWjB,aAAaI,YAAY9gB,OAAOkhB,CAAAA,SAAQA,KAAKT,IAAIkB,QAAQ,GAAG,IAAI;AACjF,UAAM9lB,QAAO6kB,aAAaL,iBAAiBS,aAAa,MAAA,GAAS,IAAI;AACrE,UAAMnlB,SAAQ+kB,aAAaL,iBAAiBS,aAAa,OAAA,CAAA;AACzD,UAAMplB,OAAMglB,aAAaL,iBAAiBS,aAAa,KAAA,GAAQ,IAAI;AACnE,UAAMllB,UAAS8kB,aAAaL,iBAAiBS,aAAa,QAAA,CAAA;AAC1D,UAAMiB,mBAAmBvB,4BAA4BM,aAAa,GAAA;AAClE,UAAMkB,iBAAiBxB,4BAA4BM,aAAa,GAAA;AAEhE,WAAO;MACLa;MACAM,YAAYpmB,MAAKsP,OAAOzP,IAAAA;MACxBwmB,gBAAgBvmB,OAAMwP,OAAO6W,cAAAA,EAAgB7W,OAAOvP,OAAAA,EAAQuP,OAAO4W,gBAAAA;MACnExa,WAAW8Y,iBAAiBS,aAAa,WAAA;MACzCqB,UAAUtmB,MAAKsP,OAAOxP,MAAAA,EAAOwP,OAAO6W,cAAAA;MACpCpU,YAAYlS,KAAIyP,OAAOvP,OAAAA,EAAQuP,OAAO4W,gBAAAA;IACxC;EACF;AAEA,WAASK,eAAeC,YAAY9a,WAAW+D,IAAGrP,IAAG;AACnD,WAAO9I,KAAKoC,IAAI8sB,WAAW/W,EAAE,GAAE/D,UAAU+D,EAAAA,CAAE,IAAInY,KAAKoC,IAAI8sB,WAAWpmB,EAAAA,GAAIsL,UAAUtL,EAAE,CAAA;EACrF;AAEA,WAASqmB,iBAAiBD,YAAYE,YAAY;AAChDF,eAAW3mB,MAAMvI,KAAKoC,IAAI8sB,WAAW3mB,KAAK6mB,WAAW7mB,GAAG;AACxD2mB,eAAWxmB,OAAO1I,KAAKoC,IAAI8sB,WAAWxmB,MAAM0mB,WAAW1mB,IAAI;AAC3DwmB,eAAWzmB,SAASzI,KAAKoC,IAAI8sB,WAAWzmB,QAAQ2mB,WAAW3mB,MAAM;AACjEymB,eAAW1mB,QAAQxI,KAAKoC,IAAI8sB,WAAW1mB,OAAO4mB,WAAW5mB,KAAK;EAChE;AAEA,WAAS6mB,WAAWjb,WAAWga,QAAQG,QAAQ/iB,QAAQ;AACrD,UAAM,EAAC4hB,KAAKE,IAAAA,IAAOiB;AACnB,UAAMW,aAAa9a,UAAU8a;AAG7B,QAAI,CAACrpB,SAASunB,GAAM,GAAA;AAClB,UAAImB,OAAOhnB,MAAM;AAEf6M,kBAAUgZ,GAAAA,KAAQmB,OAAOhnB;;AAE3B,YAAMiC,QAAQgC,OAAO+iB,OAAO/kB,KAAK,KAAK;QAACjC,MAAM;QAAG2K,OAAO;MAAC;AACxD1I,YAAMjC,OAAOvH,KAAKoC,IAAIoH,MAAMjC,MAAMgnB,OAAO9T,aAAa6S,IAAI3Q,SAAS2Q,IAAI1Q,KAAK;AAC5E2R,aAAOhnB,OAAOiC,MAAMjC,OAAOiC,MAAM0I;AACjCkC,gBAAUgZ,GAAAA,KAAQmB,OAAOhnB;;AAG3B,QAAI+lB,IAAIgC,YAAY;AAClBH,uBAAiBD,YAAY5B,IAAIgC,WAAU,CAAA;;AAG7C,UAAMC,WAAWvvB,KAAKoC,IAAI,GAAGgsB,OAAOoB,aAAaP,eAAeC,YAAY9a,WAAW,QAAQ,OAAA,CAAA;AAC/F,UAAMqb,YAAYzvB,KAAKoC,IAAI,GAAGgsB,OAAOsB,cAAcT,eAAeC,YAAY9a,WAAW,OAAO,QAAA,CAAA;AAChG,UAAMub,eAAeJ,aAAanb,UAAUwb;AAC5C,UAAMC,gBAAgBJ,cAAcrb,UAAU0b;AAC9C1b,cAAUwb,IAAIL;AACdnb,cAAU0b,IAAIL;AAGd,WAAOlB,OAAO9T,aACV;MAACsV,MAAMJ;MAAcK,OAAOH;QAC5B;MAACE,MAAMF;MAAeG,OAAOL;;EACnC;AAEA,WAASM,iBAAiB7b,WAAW;AACnC,UAAM8a,aAAa9a,UAAU8a;AAE7B,aAASgB,UAAU9C,KAAK;AACtB,YAAM+C,SAASnwB,KAAKoC,IAAI8sB,WAAW9B,GAAAA,IAAOhZ,UAAUgZ,GAAAA,GAAM,CAAA;AAC1DhZ,gBAAUgZ,GAAAA,KAAQ+C;AAClB,aAAOA;IACT;AACA/b,cAAU9L,KAAK4nB,UAAU,KAAA;AACzB9b,cAAU/L,KAAK6nB,UAAU,MAAA;AACzBA,cAAU,OAAA;AACVA,cAAU,QAAA;EACZ;AAEA,WAASE,WAAW3V,YAAYrG,WAAW;AACzC,UAAM8a,aAAa9a,UAAU8a;AAE7B,aAASmB,mBAAmBC,YAAW;AACrC,YAAMC,SAAS;QAAC7nB,MAAM;QAAGH,KAAK;QAAGC,OAAO;QAAGC,QAAQ;MAAC;AACpD6nB,MAAAA,WAAU1wB,QAAQ,CAACwtB,QAAQ;AACzBmD,eAAOnD,GAAAA,IAAOptB,KAAKoC,IAAIgS,UAAUgZ,GAAI,GAAE8B,WAAW9B,GAAI,CAAA;MACxD,CAAA;AACA,aAAOmD;IACT;AAEA,WAAO9V,aACH4V,mBAAmB;MAAC;MAAQ;IAAQ,CAAA,IACpCA,mBAAmB;MAAC;MAAO;KAAS;EAC1C;AAEA,WAASG,SAAS9C,OAAOtZ,WAAWga,QAAQ5iB,QAAQ;AAClD,UAAMilB,aAAa,CAAA;AACnB,QAAI3vB,IAAGuI,MAAMklB,QAAQjB,KAAKoD,OAAOC;AAEjC,SAAK7vB,KAAI,GAAGuI,OAAOqkB,MAAM7sB,QAAQ6vB,QAAQ,GAAG5vB,KAAIuI,MAAM,EAAEvI,IAAG;AACzDytB,eAASb,MAAM5sB,EAAE;AACjBwsB,YAAMiB,OAAOjB;AAEbA,UAAIxoB,OACFypB,OAAO3R,SAASxI,UAAUwb,GAC1BrB,OAAO5R,UAAUvI,UAAU0b,GAC3BM,WAAW7B,OAAO9T,YAAYrG,SAAAA,CAAAA;AAEhC,YAAM,EAAC2b,MAAMC,MAAAA,IAASX,WAAWjb,WAAWga,QAAQG,QAAQ/iB,MAAAA;AAI5DklB,eAASX,QAAQU,WAAW5vB;AAG5B8vB,gBAAUA,WAAWX;AAErB,UAAI,CAAC1C,IAAIkB,UAAU;AACjBiC,mBAAW3uB,KAAKysB,MAAAA;;IAEpB;AAEA,WAAOmC,SAASF,SAASC,YAAYrc,WAAWga,QAAQ5iB,MAAWmlB,KAAAA;EACrE;AAEA,WAASC,WAAWtD,KAAK5kB,OAAMH,MAAKqU,OAAOD,QAAQ;AACjD2Q,QAAI/kB,MAAMA;AACV+kB,QAAI5kB,OAAOA;AACX4kB,QAAI9kB,QAAQE,QAAOkU;AACnB0Q,QAAI7kB,SAASF,OAAMoU;AACnB2Q,QAAI1Q,QAAQA;AACZ0Q,QAAI3Q,SAASA;EACf;AAEA,WAASkU,WAAWnD,OAAOtZ,WAAWga,QAAQ5iB,QAAQ;AACpD,UAAMslB,cAAc1C,OAAO2C;AAC3B,QAAI,EAAC1oB,GAAGC,GAAAA,GAAAA,IAAK8L;AAEb,eAAWma,UAAUb,OAAO;AAC1B,YAAMJ,MAAMiB,OAAOjB;AACnB,YAAM9jB,QAAQgC,OAAO+iB,OAAO/kB,KAAK,KAAK;QAAC0I,OAAO;QAAGgc,QAAQ;QAAGtI,QAAQ;MAAC;AACrE,YAAMA,SAAS,OAAQgI,cAAcpkB,MAAMoc,UAAW;AACtD,UAAI2I,OAAO9T,YAAY;AACrB,cAAMmC,QAAQxI,UAAUwb,IAAIhK;AAC5B,cAAMjJ,SAASnT,MAAMjC,QAAQ+lB,IAAI3Q;AACjC,YAAI5H,QAAQvL,MAAMtJ,KAAK,GAAG;AACxBoI,UAAAA,KAAIkB,MAAMtJ;;AAEZ,YAAIotB,IAAIkB,UAAU;AAChBoC,qBAAWtD,KAAKwD,YAAYpoB,MAAMJ,IAAG8lB,OAAOoB,aAAasB,YAAYtoB,QAAQsoB,YAAYpoB,MAAMiU,MAAAA;eAC1F;AACLiU,qBAAWtD,KAAKlZ,UAAU1L,OAAOc,MAAM0kB,QAAQ5lB,IAAGsU,OAAOD,MAAAA;;AAE3DnT,cAAMtJ,QAAQoI;AACdkB,cAAM0kB,UAAUtR;AAChBtU,QAAAA,KAAIglB,IAAI7kB;aACH;AACL,cAAMkU,SAASvI,UAAU0b,IAAIlK;AAC7B,cAAMhJ,QAAQpT,MAAMjC,QAAQ+lB,IAAI1Q;AAChC,YAAI7H,QAAQvL,MAAMtJ,KAAK,GAAG;AACxBmI,cAAImB,MAAMtJ;;AAEZ,YAAIotB,IAAIkB,UAAU;AAChBoC,qBAAWtD,KAAKjlB,GAAGyoB,YAAYvoB,KAAKqU,OAAOwR,OAAOsB,cAAcoB,YAAYroB,SAASqoB,YAAYvoB,GAAG;eAC/F;AACLqoB,qBAAWtD,KAAKjlB,GAAG+L,UAAU7L,MAAMiB,MAAM0kB,QAAQtR,OAAOD,MAAAA;;AAE1DnT,cAAMtJ,QAAQmI;AACdmB,cAAM0kB,UAAUvR;AAChBtU,YAAIilB,IAAI9kB;;IAEZ;AAEA4L,cAAU/L,IAAIA;AACd+L,cAAU9L,IAAIA;EAChB;AAwBA,MAAA,UAAe;IAQb0oB,OAAO5xB,OAAO4B,MAAM;AAClB,UAAI,CAAC5B,MAAMsuB,OAAO;AAChBtuB,cAAMsuB,QAAQ,CAAA;;AAIhB1sB,WAAKwtB,WAAWxtB,KAAKwtB,YAAY;AACjCxtB,WAAK6pB,WAAW7pB,KAAK6pB,YAAY;AACjC7pB,WAAK4kB,SAAS5kB,KAAK4kB,UAAU;AAE7B5kB,WAAKiwB,UAAUjwB,KAAKiwB,WAAW,WAAW;AACxC,eAAO;UAAC;YACNC,GAAG;YACHnwB,KAAKqT,WAAW;AACdpT,mBAAKD,KAAKqT,SAAAA;YACZ;UACF;QAAE;MACJ;AAEAhV,YAAMsuB,MAAM5rB,KAAKd,IAAAA;IACnB;IAOAmwB,UAAU/xB,OAAOgyB,YAAY;AAC3B,YAAM9nB,SAAQlK,MAAMsuB,QAAQtuB,MAAMsuB,MAAMrQ,QAAQ+T,UAAc,IAAA;AAC9D,UAAI9nB,WAAU,IAAI;AAChBlK,cAAMsuB,MAAMzW,OAAO3N,QAAO,CAAA;;IAE9B;IAQA1D,UAAUxG,OAAO4B,MAAM4F,SAAS;AAC9B5F,WAAKwtB,WAAW5nB,QAAQ4nB;AACxBxtB,WAAK6pB,WAAWjkB,QAAQikB;AACxB7pB,WAAK4kB,SAAShf,QAAQgf;IACxB;IAUA9gB,OAAO1F,OAAOwd,OAAOD,QAAQ0U,YAAY;AACvC,UAAI,CAACjyB,OAAO;AACV;;AAGF,YAAM2xB,UAAUO,UAAUlyB,MAAMwH,QAAQ2nB,OAAOwC,OAAO;AACtD,YAAMtC,iBAAiBzuB,KAAKoC,IAAIwa,QAAQmU,QAAQnU,OAAO,CAAA;AACvD,YAAM8R,kBAAkB1uB,KAAKoC,IAAIua,SAASoU,QAAQpU,QAAQ,CAAA;AAC1D,YAAM+Q,QAAQiB,iBAAiBvvB,MAAMsuB,KAAK;AAC1C,YAAM6D,gBAAgB7D,MAAMsB;AAC5B,YAAMwC,kBAAkB9D,MAAMjT;AAI9BgX,WAAKryB,MAAMsuB,OAAOJ,CAAAA,QAAO;AACvB,YAAI,OAAOA,IAAIoE,iBAAiB,YAAY;AAC1CpE,cAAIoE,aAAY;;MAEpB,CAAA;AA6BA,YAAMC,0BAA0BJ,cAActvB,OAAO,CAAC2iB,OAAOmJ,SAC3DA,KAAKT,IAAI1mB,WAAWmnB,KAAKT,IAAI1mB,QAAQygB,YAAY,QAAQzC,QAAQA,QAAQ,GAAG,CAAM,KAAA;AAEpF,YAAMwJ,SAASroB,OAAOqP,OAAO;QAC3Boa,YAAY5S;QACZ8S,aAAa/S;QACboU;QACAtC;QACAC;QACAL,cAAcI,iBAAiB,IAAIkD;QACnCrD,eAAeI,kBAAkB;MACnC,CAAA;AACA,YAAMQ,aAAanpB,OAAOyB,OAAO,CAAA,GAAIupB,OAAAA;AACrC5B,uBAAiBD,YAAYoC,UAAUD,UAAAA,CAAAA;AACvC,YAAMjd,YAAYrO,OAAOyB,OAAO;QAC9B0nB;QACAU,GAAGnB;QACHqB,GAAGpB;QACHrmB,GAAG0oB,QAAQroB;QACXJ,GAAGyoB,QAAQxoB;SACVwoB,OAAAA;AAEH,YAAMvlB,SAAS2iB,cAAcoD,cAAcvZ,OAAOwZ,eAAkBpD,GAAAA,MAAAA;AAGpEoC,eAAS9C,MAAMc,UAAUpa,WAAWga,QAAQ5iB,MAAAA;AAG5CglB,eAASe,eAAend,WAAWga,QAAQ5iB,MAAAA;AAG3C,UAAIglB,SAASgB,iBAAiBpd,WAAWga,QAAQ5iB,MAAS,GAAA;AAExDglB,iBAASe,eAAend,WAAWga,QAAQ5iB,MAAAA;;AAG7CykB,uBAAiB7b,SAAAA;AAGjByc,iBAAWnD,MAAMoB,YAAY1a,WAAWga,QAAQ5iB,MAAAA;AAGhD4I,gBAAU/L,KAAK+L,UAAUwb;AACzBxb,gBAAU9L,KAAK8L,UAAU0b;AAEzBe,iBAAWnD,MAAMqB,gBAAgB3a,WAAWga,QAAQ5iB,MAAAA;AAEpDpM,YAAMgV,YAAY;QAChB1L,MAAM0L,UAAU1L;QAChBH,KAAK6L,UAAU7L;QACfC,OAAO4L,UAAU1L,OAAO0L,UAAUwb;QAClCnnB,QAAQ2L,UAAU7L,MAAM6L,UAAU0b;QAClCnT,QAAQvI,UAAU0b;QAClBlT,OAAOxI,UAAUwb;MACnB;AAGA6B,WAAK/D,MAAMtZ,WAAW,CAACma,WAAW;AAChC,cAAMjB,MAAMiB,OAAOjB;AACnBvnB,eAAOyB,OAAO8lB,KAAKluB,MAAMgV,SAAS;AAClCkZ,YAAIxoB,OAAOsP,UAAUwb,GAAGxb,UAAU0b,GAAG;UAACpnB,MAAM;UAAGH,KAAK;UAAGC,OAAO;UAAGC,QAAQ;QAAC,CAAA;MAC5E,CAAA;IACF;EACF;AC9be,MAAMmpB,eAAN,MAAMA;IAOnBC,eAAeC,QAAQnQ,aAAa;IAAA;IAQpCoQ,eAAetd,SAAS;AACtB,aAAO;IACT;IASAud,iBAAiB5yB,OAAOG,MAAM0yB,UAAU;IAAA;IAQxCC,oBAAoB9yB,OAAOG,MAAM0yB,UAAU;IAAA;IAK3CE,sBAAsB;AACpB,aAAO;IACT;IASAC,eAAehlB,SAASwP,OAAOD,QAAQgF,aAAa;AAClD/E,cAAQ5c,KAAKoC,IAAI,GAAGwa,SAASxP,QAAQwP,KAAK;AAC1CD,eAASA,UAAUvP,QAAQuP;AAC3B,aAAO;QACLC;QACAD,QAAQ3c,KAAKoC,IAAI,GAAGuf,cAAc3hB,KAAKoE,MAAMwY,QAAQ+E,WAAAA,IAAehF,MAAM;MAC5E;IACF;IAMA0V,WAAWP,QAAQ;AACjB,aAAO;IACT;IAMAQ,aAAa7sB,SAAQ;IAErB;EACF;ACtEe,MAAM8sB,gBAAN,cAA4BX,aAAAA;IACzCC,eAAe7wB,MAAM;AAInB,aAAOA,QAAQA,KAAK+Q,cAAc/Q,KAAK+Q,WAAW,IAAA,KAAS;IAC7D;IACAugB,aAAa7sB,SAAQ;AACnBA,MAAAA,QAAOmB,QAAQV,YAAY;IAC7B;EACF;ACTA,MAAMssB,cAAc;AAOpB,MAAMC,cAAc;IAClBC,YAAY;IACZC,WAAW;IACXC,UAAU;IACVC,cAAc;IACdC,aAAa;IACbC,aAAa;IACbC,WAAW;IACXC,cAAc;IACdC,YAAY;EACd;AAEA,MAAMC,gBAAgB7rB,CAAAA,UAASA,UAAU,QAAQA,UAAU;AAQ3D,WAAS8rB,WAAWtB,QAAQnQ,aAAa;AACvC,UAAMS,QAAQ0P,OAAO1P;AAIrB,UAAMiR,eAAevB,OAAOwB,aAAa,QAAA;AACzC,UAAMC,cAAczB,OAAOwB,aAAa,OAAA;AAGxCxB,WAAOU,WAAAA,IAAe;MACpB1yB,SAAS;QACP6c,QAAQ0W;QACRzW,OAAO2W;QACPnR,OAAO;UACLiF,SAASjF,MAAMiF;UACf1K,QAAQyF,MAAMzF;UACdC,OAAOwF,MAAMxF;QACf;MACF;IACF;AAKAwF,UAAMiF,UAAUjF,MAAMiF,WAAW;AAEjCjF,UAAMoR,YAAYpR,MAAMoR,aAAa;AAErC,QAAIL,cAAcI,WAAc,GAAA;AAC9B,YAAME,eAAeC,aAAa5B,QAAQ,OAAA;AAC1C,UAAI2B,iBAAiBv0B,QAAW;AAC9B4yB,eAAOlV,QAAQ6W;;;AAInB,QAAIN,cAAcE,YAAe,GAAA;AAC/B,UAAIvB,OAAO1P,MAAMzF,WAAW,IAAI;AAI9BmV,eAAOnV,SAASmV,OAAOlV,SAAS+E,eAAe;aAC1C;AACL,cAAMgS,gBAAgBD,aAAa5B,QAAQ,QAAA;AAC3C,YAAI6B,kBAAkBz0B,QAAW;AAC/B4yB,iBAAOnV,SAASgX;;;;AAKtB,WAAO7B;EACT;AAIA,MAAM8B,uBAAuBC,+BAA+B;IAACC,SAAS;EAAI,IAAI;AAE9E,WAASC,YAAYC,MAAMz0B,MAAM0yB,UAAU;AACzC,QAAI+B,MAAM;AACRA,WAAKhC,iBAAiBzyB,MAAM0yB,UAAU2B,oBAAAA;;EAE1C;AAEA,WAASK,eAAe70B,OAAOG,MAAM0yB,UAAU;AAC7C,QAAI7yB,SAASA,MAAM0yB,QAAQ;AACzB1yB,YAAM0yB,OAAOI,oBAAoB3yB,MAAM0yB,UAAU2B,oBAAAA;;EAErD;AAEA,WAASM,gBAAgBtyB,QAAOxC,OAAO;AACrC,UAAMG,OAAOkzB,YAAY7wB,OAAMrC,IAAI,KAAKqC,OAAMrC;AAC9C,UAAM,EAAC8I,GAAGC,GAAAA,GAAAA,IAAKykB,oBAAoBnrB,QAAOxC,KAAAA;AAC1C,WAAO;MACLG;MACAH;MACA+0B,QAAQvyB;MACRyG,GAAGA,MAAMnJ,SAAYmJ,IAAI;MACzBC,GAAGA,OAAMpJ,SAAYoJ,KAAI;IAC3B;EACF;AAEA,WAAS8rB,iBAAiBC,UAAUvC,QAAQ;AAC1C,eAAWkC,QAAQK,UAAU;AAC3B,UAAIL,SAASlC,UAAUkC,KAAKM,SAASxC,MAAS,GAAA;AAC5C,eAAO;;IAEX;EACF;AAEA,WAASyC,qBAAqBn1B,OAAOG,MAAM0yB,UAAU;AACnD,UAAMH,SAAS1yB,MAAM0yB;AACrB,UAAM0C,WAAW,IAAIC,iBAAiBC,CAAAA,YAAW;AAC/C,UAAIC,UAAU;AACd,iBAAWhb,SAAS+a,SAAS;AAC3BC,kBAAUA,WAAWP,iBAAiBza,MAAMib,YAAY9C,MAAAA;AACxD6C,kBAAUA,WAAW,CAACP,iBAAiBza,MAAMkb,cAAc/C,MAAAA;MAC7D;AACA,UAAI6C,SAAS;AACX1C,iBAAAA;;IAEJ,CAAA;AACAuC,aAASM,QAAQC,UAAU;MAACC,WAAW;MAAMC,SAAS;IAAI,CAAA;AAC1D,WAAOT;EACT;AAEA,WAASU,qBAAqB91B,OAAOG,MAAM0yB,UAAU;AACnD,UAAMH,SAAS1yB,MAAM0yB;AACrB,UAAM0C,WAAW,IAAIC,iBAAiBC,CAAAA,YAAW;AAC/C,UAAIC,UAAU;AACd,iBAAWhb,SAAS+a,SAAS;AAC3BC,kBAAUA,WAAWP,iBAAiBza,MAAMkb,cAAc/C,MAAAA;AAC1D6C,kBAAUA,WAAW,CAACP,iBAAiBza,MAAMib,YAAY9C,MAAAA;MAC3D;AACA,UAAI6C,SAAS;AACX1C,iBAAAA;;IAEJ,CAAA;AACAuC,aAASM,QAAQC,UAAU;MAACC,WAAW;MAAMC,SAAS;IAAI,CAAA;AAC1D,WAAOT;EACT;AAEA,MAAMW,qBAAqB,oBAAIp2B,IAAAA;AAC/B,MAAIq2B,sBAAsB;AAE1B,WAASC,iBAAiB;AACxB,UAAMC,MAAMh1B,OAAOi1B;AACnB,QAAID,QAAQF,qBAAqB;AAC/B;;AAEFA,0BAAsBE;AACtBH,uBAAmBv1B,QAAQ,CAAC41B,QAAQp2B,UAAU;AAC5C,UAAIA,MAAMq2B,4BAA4BH,KAAK;AACzCE,eAAAA;;IAEJ,CAAA;EACF;AAEA,WAASE,8BAA8Bt2B,OAAOo2B,QAAQ;AACpD,QAAI,CAACL,mBAAmB5tB,MAAM;AAC5BjH,aAAO0xB,iBAAiB,UAAUqD,cAAAA;;AAEpCF,uBAAmBzzB,IAAItC,OAAOo2B,MAAAA;EAChC;AAEA,WAASG,gCAAgCv2B,OAAO;AAC9C+1B,uBAAmB1yB,OAAOrD,KAAAA;AAC1B,QAAI,CAAC+1B,mBAAmB5tB,MAAM;AAC5BjH,aAAO4xB,oBAAoB,UAAUmD,cAAAA;;EAEzC;AAEA,WAASO,qBAAqBx2B,OAAOG,MAAM0yB,UAAU;AACnD,UAAMH,SAAS1yB,MAAM0yB;AACrB,UAAM+D,YAAY/D,UAAUgE,eAAehE,MAAAA;AAC3C,QAAI,CAAC+D,WAAW;AACd;;AAEF,UAAML,SAASO,UAAU,CAACnZ,OAAOD,WAAW;AAC1C,YAAMiT,IAAIiG,UAAUG;AACpB/D,eAASrV,OAAOD,MAAAA;AAChB,UAAIiT,IAAIiG,UAAUG,aAAa;AAQ7B/D,iBAAAA;;OAED3xB,MAAAA;AAGH,UAAMk0B,WAAW,IAAIyB,eAAevB,CAAAA,YAAW;AAC7C,YAAM/a,QAAQ+a,QAAQ,CAAE;AACxB,YAAM9X,QAAQjD,MAAMuc,YAAYtZ;AAChC,YAAMD,SAAShD,MAAMuc,YAAYvZ;AAIjC,UAAIC,UAAU,KAAKD,WAAW,GAAG;AAC/B;;AAEF6Y,aAAO5Y,OAAOD,MAAAA;IAChB,CAAA;AACA6X,aAASM,QAAQe,SAAAA;AACjBH,kCAA8Bt2B,OAAOo2B,MAAAA;AAErC,WAAOhB;EACT;AAEA,WAAS2B,gBAAgB/2B,OAAOG,MAAMi1B,UAAU;AAC9C,QAAIA,UAAU;AACZA,eAAS4B,WAAU;;AAErB,QAAI72B,SAAS,UAAU;AACrBo2B,sCAAgCv2B,KAAAA;;EAEpC;AAEA,WAASi3B,qBAAqBj3B,OAAOG,MAAM0yB,UAAU;AACnD,UAAMH,SAAS1yB,MAAM0yB;AACrB,UAAMwE,QAAQP,UAAU,CAACn0B,WAAU;AAIjC,UAAIxC,MAAMiP,QAAQ,MAAM;AACtB4jB,iBAASiC,gBAAgBtyB,QAAOxC,KAAAA,CAAAA;;OAEjCA,KAAAA;AAEH20B,gBAAYjC,QAAQvyB,MAAM+2B,KAAAA;AAE1B,WAAOA;EACT;AAMe,MAAMC,cAAN,cAA0B3E,aAAAA;IAOvCC,eAAeC,QAAQnQ,aAAa;AAIlC,YAAMlN,UAAUqd,UAAUA,OAAO/f,cAAc+f,OAAO/f,WAAW,IAAA;AASjE,UAAI0C,WAAWA,QAAQqd,WAAWA,QAAQ;AAGxCsB,mBAAWtB,QAAQnQ,WAAAA;AACnB,eAAOlN;;AAGT,aAAO;IACT;IAKAsd,eAAetd,SAAS;AACtB,YAAMqd,SAASrd,QAAQqd;AACvB,UAAI,CAACA,OAAOU,WAAAA,GAAc;AACxB,eAAO;;AAGT,YAAM1yB,UAAUgyB,OAAOU,WAAAA,EAAa1yB;AACpC;QAAC;QAAU;QAASF,QAAQ,CAAC+D,SAAS;AACpC,cAAM2D,QAAQxH,QAAQ6D,IAAK;AAC3B,YAAIuV,cAAc5R,KAAQ,GAAA;AACxBwqB,iBAAO0E,gBAAgB7yB,IAAAA;eAClB;AACLmuB,iBAAO2E,aAAa9yB,MAAM2D,KAAAA;;MAE9B,CAAA;AAEA,YAAM8a,QAAQtiB,QAAQsiB,SAAS,CAAA;AAC/Brc,aAAOC,KAAKoc,KAAAA,EAAOxiB,QAAQ,CAACyG,QAAQ;AAClCyrB,eAAO1P,MAAM/b,GAAAA,IAAO+b,MAAM/b,GAAI;MAChC,CAAA;AAOAyrB,aAAOlV,QAAQkV,OAAOlV;AAEtB,aAAOkV,OAAOU,WAAY;AAC1B,aAAO;IACT;IAQAR,iBAAiB5yB,OAAOG,MAAM0yB,UAAU;AAEtC,WAAKC,oBAAoB9yB,OAAOG,IAAAA;AAEhC,YAAMm3B,UAAUt3B,MAAMu3B,aAAav3B,MAAMu3B,WAAW,CAAA;AACpD,YAAMC,WAAW;QACfC,QAAQtC;QACRuC,QAAQ5B;QACRM,QAAQI;MACV;AACA,YAAM9K,UAAU8L,SAASr3B,IAAAA,KAAS82B;AAClCK,cAAQn3B,IAAAA,IAAQurB,QAAQ1rB,OAAOG,MAAM0yB,QAAAA;IACvC;IAOAC,oBAAoB9yB,OAAOG,MAAM;AAC/B,YAAMm3B,UAAUt3B,MAAMu3B,aAAav3B,MAAMu3B,WAAW,CAAA;AACpD,YAAML,QAAQI,QAAQn3B,IAAK;AAE3B,UAAI,CAAC+2B,OAAO;AACV;;AAGF,YAAMM,WAAW;QACfC,QAAQV;QACRW,QAAQX;QACRX,QAAQW;MACV;AACA,YAAMrL,UAAU8L,SAASr3B,IAAAA,KAAS00B;AAClCnJ,cAAQ1rB,OAAOG,MAAM+2B,KAAAA;AACrBI,cAAQn3B,IAAAA,IAAQL;IAClB;IAEAizB,sBAAsB;AACpB,aAAO7xB,OAAOi1B;IAChB;IAQAnD,eAAeN,QAAQlV,OAAOD,QAAQgF,aAAa;AACjD,aAAOyQ,eAAeN,QAAQlV,OAAOD,QAAQgF,WAAAA;IAC/C;IAKA0Q,WAAWP,QAAQ;AACjB,YAAM+D,YAAY/D,UAAUgE,eAAehE,MAAAA;AAC3C,aAAO,CAAC,EAAE+D,aAAaA,UAAUkB;IACnC;EACF;AC/XO,WAASC,gBAAgBlF,QAAQ;AACtC,QAAI,CAACmF,gBAAsB,KAAA,OAAOC,oBAAoB,eAAepF,kBAAkBoF,iBAAkB;AACvG,aAAO3E;;AAET,WAAOgE;EACT;ACLe,MAAMY,WAAN,MAAMA;IAEnB,OAAOlxB,WAAW,CAAA;IAClB,OAAOmxB,gBAAgBl4B;IAEvBmJ;IACAC;IACAzD,SAAS;IACT+B;IACAM;IAEAmwB,gBAAgB1L,kBAAkC;AAChD,YAAM,EAACtjB,GAAGC,GAAAA,GAAAA,IAAK,KAAK4jB,SAAS;QAAC;QAAK;SAAMP,gBAAAA;AACzC,aAAO;QAACtjB;QAAGC,GAAAA;MAAC;IACd;IAEAgvB,WAAW;AACT,aAAO5Q,SAAS,KAAKre,CAAC,KAAKqe,SAAS,KAAKpe,CAAC;IAC5C;IASA4jB,SAAS9kB,OAAiBmwB,OAAmD;AAC3E,YAAMl4B,QAAQ,KAAK6H;AACnB,UAAI,CAACqwB,SAAS,CAACl4B,OAAO;AAEpB,eAAO;;AAET,YAAMm4B,MAA+B,CAAA;AACrCpwB,YAAMxH,QAAQ,CAAC+D,SAAS;AACtB6zB,YAAI7zB,IAAAA,IAAQtE,MAAMsE,IAAK,KAAItE,MAAMsE,IAAAA,EAAMkB,OAAM,IAAKxF,MAAMsE,IAAAA,EAAMgB,MAAM,KAAKhB,IAAe;MAC1F,CAAA;AACA,aAAO6zB;IACT;EACF;AC5BO,WAASC,SAAS5vB,OAAO6Q,OAAO;AACrC,UAAMgf,WAAW7vB,MAAMjB,QAAQ8R;AAC/B,UAAMif,qBAAqBC,kBAAkB/vB,KAAAA;AAC7C,UAAMgwB,aAAa73B,KAAKC,IAAIy3B,SAASI,iBAAiBH,oBAAoBA,kBAAAA;AAC1E,UAAMI,eAAeL,SAASM,MAAMC,UAAUC,gBAAgBxf,KAAAA,IAAS,CAAA;AACvE,UAAMyf,kBAAkBJ,aAAal3B;AACrC,UAAMu3B,SAAQL,aAAa,CAAE;AAC7B,UAAMjb,OAAOib,aAAaI,kBAAkB,CAAE;AAC9C,UAAME,WAAW,CAAA;AAGjB,QAAIF,kBAAkBN,YAAY;AAChCS,iBAAW5f,OAAO2f,UAAUN,cAAcI,kBAAkBN,UAAAA;AAC5D,aAAOQ;;AAGT,UAAM/W,UAAUiX,iBAAiBR,cAAcrf,OAAOmf,UAAAA;AAEtD,QAAIM,kBAAkB,GAAG;AACvB,UAAIr3B,IAAGuI;AACP,YAAMmvB,kBAAkBL,kBAAkB,IAAIn4B,KAAKy4B,OAAO3b,OAAOsb,WAAUD,kBAAkB,EAAA,IAAM;AACnG5Y,WAAK7G,OAAO2f,UAAU/W,SAASpI,cAAcsf,eAAAA,IAAmB,IAAIJ,SAAQI,iBAAiBJ,MAAAA;AAC7F,WAAKt3B,KAAI,GAAGuI,OAAO8uB,kBAAkB,GAAGr3B,KAAIuI,MAAMvI,MAAK;AACrDye,aAAK7G,OAAO2f,UAAU/W,SAASyW,aAAaj3B,EAAAA,GAAIi3B,aAAaj3B,KAAI,CAAE,CAAA;MACrE;AACAye,WAAK7G,OAAO2f,UAAU/W,SAASxE,MAAM5D,cAAcsf,eAAAA,IAAmB9f,MAAM7X,SAASic,OAAO0b,eAAe;AAC3G,aAAOH;;AAET9Y,SAAK7G,OAAO2f,UAAU/W,OAAAA;AACtB,WAAO+W;EACT;AAEA,WAAST,kBAAkB/vB,OAAO;AAChC,UAAMgU,UAAShU,MAAMjB,QAAQiV;AAC7B,UAAM6c,aAAa7wB,MAAM8wB,UAAS;AAClC,UAAMC,WAAW/wB,MAAMwQ,UAAUqgB,cAAc7c,UAAS,IAAI;AAC5D,UAAMgd,WAAWhxB,MAAMixB,aAAaJ;AACpC,WAAO14B,KAAKoE,MAAMpE,KAAKC,IAAI24B,UAAUC,QAAAA,CAAAA;EACvC;AAOA,WAASN,iBAAiBR,cAAcrf,OAAOmf,YAAY;AACzD,UAAMkB,mBAAmBC,eAAejB,YAAAA;AACxC,UAAMzW,UAAU5I,MAAM7X,SAASg3B;AAI/B,QAAI,CAACkB,kBAAkB;AACrB,aAAO/4B,KAAKoC,IAAIkf,SAAS,CAAA;;AAG3B,UAAM2X,UAAUC,WAAWH,gBAAAA;AAC3B,aAASj4B,KAAI,GAAGuI,OAAO4vB,QAAQp4B,SAAS,GAAGC,KAAIuI,MAAMvI,MAAK;AACxD,YAAMiC,SAASk2B,QAAQn4B,EAAE;AACzB,UAAIiC,SAASue,SAAS;AACpB,eAAOve;;IAEX;AACA,WAAO/C,KAAKoC,IAAIkf,SAAS,CAAA;EAC3B;AAKA,WAAS4W,gBAAgBxf,OAAO;AAC9B,UAAMyR,SAAS,CAAA;AACf,QAAIrpB,IAAGuI;AACP,SAAKvI,KAAI,GAAGuI,OAAOqP,MAAM7X,QAAQC,KAAIuI,MAAMvI,MAAK;AAC9C,UAAI4X,MAAM5X,EAAE,EAACk3B,OAAO;AAClB7N,eAAOroB,KAAKhB,EAAAA;;IAEhB;AACA,WAAOqpB;EACT;AAQA,WAASmO,WAAW5f,OAAO2f,UAAUN,cAAczW,SAAS;AAC1D,QAAIpP,QAAQ;AACZ,QAAIsH,OAAOue,aAAa,CAAE;AAC1B,QAAIj3B;AAEJwgB,cAAUthB,KAAKm5B,KAAK7X,OAAAA;AACpB,SAAKxgB,KAAI,GAAGA,KAAI4X,MAAM7X,QAAQC,MAAK;AACjC,UAAIA,OAAM0Y,MAAM;AACd6e,iBAASv2B,KAAK4W,MAAM5X,EAAE,CAAA;AACtBoR;AACAsH,eAAOue,aAAa7lB,QAAQoP,OAAQ;;IAExC;EACF;AASA,WAAS/B,KAAK7G,OAAO2f,UAAU/W,SAAS8X,YAAYC,UAAU;AAC5D,UAAMn5B,SAAQ6P,eAAeqpB,YAAY,CAAA;AACzC,UAAMnxB,OAAMjI,KAAKC,IAAI8P,eAAespB,UAAU3gB,MAAM7X,MAAM,GAAG6X,MAAM7X,MAAM;AACzE,QAAIqR,QAAQ;AACZ,QAAIrR,QAAQC,IAAG0Y;AAEf8H,cAAUthB,KAAKm5B,KAAK7X,OAAAA;AACpB,QAAI+X,UAAU;AACZx4B,eAASw4B,WAAWD;AACpB9X,gBAAUzgB,SAASb,KAAKoE,MAAMvD,SAASygB,OAAAA;;AAGzC9H,WAAOtZ;AAEP,WAAOsZ,OAAO,GAAG;AACftH;AACAsH,aAAOxZ,KAAKy4B,MAAMv4B,SAAQgS,QAAQoP,OAAAA;IACpC;AAEA,SAAKxgB,KAAId,KAAKoC,IAAIlC,QAAO,CAAIY,GAAAA,KAAImH,MAAKnH,MAAK;AACzC,UAAIA,OAAM0Y,MAAM;AACd6e,iBAASv2B,KAAK4W,MAAM5X,EAAE,CAAA;AACtBoR;AACAsH,eAAOxZ,KAAKy4B,MAAMv4B,SAAQgS,QAAQoP,OAAAA;;IAEtC;EACF;AAMA,WAAS0X,eAAeliB,KAAK;AAC3B,UAAMwiB,MAAMxiB,IAAIjW;AAChB,QAAIC,IAAG0oB;AAEP,QAAI8P,MAAM,GAAG;AACX,aAAO;;AAGT,SAAK9P,QAAO1S,IAAI,CAAE,GAAEhW,KAAI,GAAGA,KAAIw4B,KAAK,EAAEx4B,IAAG;AACvC,UAAIgW,IAAIhW,EAAE,IAAGgW,IAAIhW,KAAI,CAAE,MAAK0oB,OAAM;AAChC,eAAO;;IAEX;AACA,WAAOA;EACT;ACjKA,MAAM+P,eAAe,CAACC,UAAUA,UAAU,SAAS,UAAUA,UAAU,UAAU,SAASA;AAC1F,MAAMC,iBAAiB,CAAC5xB,OAAO+S,MAAMiB,YAAWjB,SAAS,SAASA,SAAS,SAAS/S,MAAM+S,IAAAA,IAAQiB,UAAShU,MAAM+S,IAAAA,IAAQiB;AACzH,MAAM6d,gBAAgB,CAACC,aAAa7B,kBAAkB93B,KAAKC,IAAI63B,iBAAiB6B,aAAaA,WAAAA;AAY7F,WAASC,OAAO9iB,KAAK+iB,UAAU;AAC7B,UAAM1P,SAAS,CAAA;AACf,UAAM2P,YAAYhjB,IAAIjW,SAASg5B;AAC/B,UAAMP,MAAMxiB,IAAIjW;AAChB,QAAIC,KAAI;AAER,WAAOA,KAAIw4B,KAAKx4B,MAAKg5B,WAAW;AAC9B3P,aAAOroB,KAAKgV,IAAI9W,KAAKoE,MAAMtD,EAAG,CAAA,CAAA;IAChC;AACA,WAAOqpB;EACT;AAOA,WAAS4P,oBAAoBlyB,OAAOyB,QAAO0wB,iBAAiB;AAC1D,UAAMn5B,SAASgH,MAAM6Q,MAAM7X;AAC3B,UAAMo5B,cAAaj6B,KAAKC,IAAIqJ,QAAOzI,SAAS,CAAA;AAC5C,UAAMX,SAAQ2H,MAAMiW;AACpB,UAAM7V,OAAMJ,MAAMkW;AAClB,UAAMmc,UAAU;AAChB,QAAIC,YAAYtyB,MAAM8Q,gBAAgBshB,WAAAA;AACtC,QAAIpe;AAEJ,QAAIme,iBAAiB;AACnB,UAAIn5B,WAAW,GAAG;AAChBgb,QAAAA,UAAS7b,KAAKoC,IAAI+3B,YAAYj6B,QAAO+H,OAAMkyB,SAAAA;iBAClC7wB,WAAU,GAAG;AACtBuS,QAAAA,WAAUhU,MAAM8Q,gBAAgB,CAAA,IAAKwhB,aAAa;aAC7C;AACLte,QAAAA,WAAUse,YAAYtyB,MAAM8Q,gBAAgBshB,cAAa,CAAA,KAAM;;AAEjEE,mBAAaF,cAAa3wB,SAAQuS,UAAS,CAACA;AAG5C,UAAIse,YAAYj6B,SAAQg6B,WAAWC,YAAYlyB,OAAMiyB,SAAS;AAC5D;;;AAGJ,WAAOC;EACT;AAMA,WAASC,eAAeC,QAAQx5B,QAAQ;AACtC4wB,SAAK4I,QAAQ,CAACzlB,WAAU;AACtB,YAAM0lB,KAAK1lB,OAAM0lB;AACjB,YAAMC,QAAQD,GAAGz5B,SAAS;AAC1B,UAAIC;AACJ,UAAIy5B,QAAQ15B,QAAQ;AAClB,aAAKC,KAAI,GAAGA,KAAIy5B,OAAO,EAAEz5B,IAAG;AAC1B,iBAAO8T,OAAM1K,KAAKowB,GAAGx5B,EAAAA,CAAE;QACzB;AACAw5B,WAAGrjB,OAAO,GAAGsjB,KAAAA;;IAEjB,CAAA;EACF;AAKA,WAASC,kBAAkB5zB,SAAS;AAClC,WAAOA,QAAQ6zB,YAAY7zB,QAAQ8xB,aAAa;EAClD;AAKA,WAASgC,eAAe9zB,SAAS+zB,UAAU;AACzC,QAAI,CAAC/zB,QAAQygB,SAAS;AACpB,aAAO;;AAGT,UAAMuT,OAAOC,OAAOj0B,QAAQg0B,MAAMD,QAAAA;AAClC,UAAM5J,UAAUO,UAAU1qB,QAAQmqB,OAAO;AACzC,UAAM+J,QAAQv0B,QAAQK,QAAQyb,IAAI,IAAIzb,QAAQyb,KAAKxhB,SAAS;AAE5D,WAAO,QAAS+5B,KAAKG,aAAchK,QAAQpU;EAC7C;AAEA,WAASqe,mBAAmBhuB,QAAQnF,OAAO;AACzC,WAAOoF,cAAcD,QAAQ;MAC3BnF;MACAtI,MAAM;IACR,CAAA;EACF;AAEA,WAAS07B,kBAAkBjuB,QAAQ1D,QAAOnI,MAAM;AAC9C,WAAO8L,cAAcD,QAAQ;MAC3B7L;MACAmI,OAAAA;MACA/J,MAAM;IACR,CAAA;EACF;AAEA,WAAS27B,WAAW1B,OAAO3O,UAAU7iB,SAAS;AAE5C,QAAIwvB,MAAM2D,mBAAmB3B,KAAAA;AAC7B,QAAI,WAAY3O,aAAa,WAAa,CAAC7iB,WAAW6iB,aAAa,SAAU;AAC3E2M,YAAM+B,aAAa/B,GAAAA;;AAErB,WAAOA;EACT;AAEA,WAAS4D,UAAUvzB,OAAOgU,SAAQgP,UAAU2O,OAAO;AACjD,UAAM,EAACjxB,KAAAA,MAAKG,MAAAA,OAAMD,QAAAA,SAAQD,OAAAA,QAAOpJ,MAAK,IAAIyI;AAC1C,UAAM,EAACuM,WAAWxH,QAAAA,QAAAA,IAAUxN;AAC5B,QAAIqgB,WAAW;AACf,QAAI6E,UAAU+W,QAAQC;AACtB,UAAM3e,SAASlU,UAASF;AACxB,UAAMqU,QAAQpU,SAAQE;AAEtB,QAAIb,MAAM0S,aAAY,GAAI;AACxB8gB,eAASE,eAAe/B,OAAO9wB,OAAMF,MAAAA;AAErC,UAAI3C,SAASglB,QAAW,GAAA;AACtB,cAAM2Q,iBAAiBz1B,OAAOC,KAAK6kB,QAAAA,EAAU,CAAE;AAC/C,cAAMvjB,QAAQujB,SAAS2Q,cAAe;AACtCF,iBAAS1uB,QAAO4uB,cAAAA,EAAgB/iB,iBAAiBnR,KAAAA,IAASqV,SAASd;iBAC1DgP,aAAa,UAAU;AAChCyQ,kBAAUlnB,UAAU3L,SAAS2L,UAAU7L,OAAO,IAAIoU,SAASd;aACtD;AACLyf,iBAAS7B,eAAe5xB,OAAOgjB,UAAUhP,OAAAA;;AAE3CyI,iBAAW9b,SAAQE;WACd;AACL,UAAI7C,SAASglB,QAAW,GAAA;AACtB,cAAM2Q,iBAAiBz1B,OAAOC,KAAK6kB,QAAAA,EAAU,CAAE;AAC/C,cAAMvjB,QAAQujB,SAAS2Q,cAAe;AACtCH,iBAASzuB,QAAO4uB,cAAAA,EAAgB/iB,iBAAiBnR,KAAAA,IAASsV,QAAQf;iBACzDgP,aAAa,UAAU;AAChCwQ,kBAAUjnB,UAAU1L,OAAO0L,UAAU5L,SAAS,IAAIoU,QAAQf;aACrD;AACLwf,iBAAS5B,eAAe5xB,OAAOgjB,UAAUhP,OAAAA;;AAE3Cyf,eAASC,eAAe/B,OAAO/wB,SAAQF,IAAAA;AACvCkX,iBAAWoL,aAAa,SAAS,CAAC9J,UAAUA;;AAE9C,WAAO;MAACsa;MAAQC;MAAQhX;MAAU7E;IAAQ;EAC5C;AAEe,MAAMgc,QAAN,MAAMA,eAActE,SAAAA;IAGjCv4B,YAAY6E,KAAK;AACf,YAAK;AAGL,WAAKuH,KAAKvH,IAAIuH;AAEd,WAAKzL,OAAOkE,IAAIlE;AAEhB,WAAKqH,UAAU1H;AAEf,WAAKmP,MAAM5K,IAAI4K;AAEf,WAAKjP,QAAQqE,IAAIrE;AAIjB,WAAKmJ,MAAMrJ;AAEX,WAAKuJ,SAASvJ;AAEd,WAAKwJ,OAAOxJ;AAEZ,WAAKsJ,QAAQtJ;AAEb,WAAK0d,QAAQ1d;AAEb,WAAKyd,SAASzd;AACd,WAAKw8B,WAAW;QACdhzB,MAAM;QACNF,OAAO;QACPD,KAAK;QACLE,QAAQ;MACV;AAEA,WAAK6b,WAAWplB;AAEhB,WAAKqlB,YAAYrlB;AAEjB,WAAKy8B,aAAaz8B;AAElB,WAAK08B,gBAAgB18B;AAErB,WAAK28B,cAAc38B;AAEnB,WAAK48B,eAAe58B;AAIpB,WAAKqL,OAAOrL;AAEZ,WAAK68B,gBAAgB78B;AACrB,WAAKe,MAAMf;AACX,WAAKkD,MAAMlD;AACX,WAAK88B,SAAS98B;AAEd,WAAKwZ,QAAQ,CAAA;AAEb,WAAKujB,iBAAiB;AAEtB,WAAKC,cAAc;AAEnB,WAAKC,cAAc;AACnB,WAAK9jB,UAAU;AACf,WAAKygB,aAAa;AAClB,WAAKsD,oBAAoB,CAAA;AAEzB,WAAKte,cAAc5e;AAEnB,WAAK6e,YAAY7e;AACjB,WAAK8qB,iBAAiB;AACtB,WAAKqS,WAAWn9B;AAChB,WAAKo9B,WAAWp9B;AAChB,WAAKq9B,gBAAgBr9B;AACrB,WAAKs9B,gBAAgBt9B;AACrB,WAAKu9B,eAAe;AACpB,WAAKC,eAAe;AACpB,WAAK7kB,SAAS,CAAA;AACd,WAAK8kB,oBAAoB;AACzB,WAAK1tB,WAAW/P;IAClB;IAMAmqB,KAAKziB,SAAS;AACZ,WAAKA,UAAUA,QAAQg2B,WAAW,KAAK7qB,WAAU,CAAA;AAEjD,WAAKxH,OAAO3D,QAAQ2D;AAGpB,WAAK+xB,WAAW,KAAKrqB,MAAMrL,QAAQ3G,GAAG;AACtC,WAAKo8B,WAAW,KAAKpqB,MAAMrL,QAAQxE,GAAG;AACtC,WAAKo6B,gBAAgB,KAAKvqB,MAAMrL,QAAQi2B,YAAY;AACpD,WAAKN,gBAAgB,KAAKtqB,MAAMrL,QAAQk2B,YAAY;IACtD;IAQA7qB,MAAM3E,KAAKhE,QAAO;AAChB,aAAOgE;IACT;IAOArC,gBAAgB;AACd,UAAI,EAACqxB,UAAUD,UAAUG,eAAeD,cAAAA,IAAiB;AACzDD,iBAAWS,gBAAgBT,UAAUlxB,OAAOE,iBAAiB;AAC7D+wB,iBAAWU,gBAAgBV,UAAUjxB,OAAOC,iBAAiB;AAC7DmxB,sBAAgBO,gBAAgBP,eAAepxB,OAAOE,iBAAiB;AACvEixB,sBAAgBQ,gBAAgBR,eAAenxB,OAAOC,iBAAiB;AACvE,aAAO;QACLpL,KAAK88B,gBAAgBT,UAAUE,aAAAA;QAC/Bp6B,KAAK26B,gBAAgBV,UAAUE,aAAAA;QAC/BrxB,YAAYnB,eAASuyB,QAAAA;QACrBnxB,YAAYpB,eAASsyB,QAAAA;MACvB;IACF;IAQA/oB,UAAUxF,UAAU;AAClB,UAAI,EAAC7N,KAAAA,MAAKmC,KAAAA,MAAK8I,YAAYC,WAAAA,IAAc,KAAKF,cAAa;AAC3D,UAAIkI;AAEJ,UAAIjI,cAAcC,YAAY;AAC5B,eAAO;UAAClL,KAAAA;UAAKmC,KAAAA;QAAG;;AAGlB,YAAM46B,QAAQ,KAAKlxB,wBAAuB;AAC1C,eAAShL,KAAI,GAAGuI,OAAO2zB,MAAMn8B,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AAClDqS,QAAAA,SAAQ6pB,MAAMl8B,EAAE,EAACkL,WAAWsH,UAAU,MAAMxF,QAAAA;AAC5C,YAAI,CAAC5C,YAAY;AACfjL,UAAAA,OAAMD,KAAKC,IAAIA,MAAKkT,OAAMlT,GAAG;;AAE/B,YAAI,CAACkL,YAAY;AACf/I,UAAAA,OAAMpC,KAAKoC,IAAIA,MAAK+Q,OAAM/Q,GAAG;;MAEjC;AAGAnC,MAAAA,OAAMkL,cAAclL,OAAMmC,OAAMA,OAAMnC;AACtCmC,MAAAA,OAAM8I,cAAcjL,OAAMmC,OAAMnC,OAAMmC;AAEtC,aAAO;QACLnC,KAAK88B,gBAAgB98B,MAAK88B,gBAAgB36B,MAAKnC,IAAAA,CAAAA;QAC/CmC,KAAK26B,gBAAgB36B,MAAK26B,gBAAgB98B,MAAKmC,IAAAA,CAAAA;MACjD;IACF;IAOAktB,aAAa;AACX,aAAO;QACL5mB,MAAM,KAAKmzB,eAAe;QAC1BtzB,KAAK,KAAKozB,cAAc;QACxBnzB,OAAO,KAAKszB,gBAAgB;QAC5BrzB,QAAQ,KAAKmzB,iBAAiB;MAChC;IACF;IAOAqB,WAAW;AACT,aAAO,KAAKvkB;IACd;IAKA/F,YAAY;AACV,YAAMzI,OAAO,KAAK9K,MAAM8K;AACxB,aAAO,KAAKtD,QAAQ8L,WAAW,KAAK6H,aAAY,IAAKrQ,KAAKgzB,UAAUhzB,KAAKizB,YAAYjzB,KAAKwI,UAAU,CAAA;IACtG;IAKA0qB,cAAchpB,YAAY,KAAKhV,MAAMgV,WAAW;AAC9C,YAAMxT,QAAQ,KAAKs7B,gBAAgB,KAAKA,cAAc,KAAKmB,mBAAmBjpB,SAAS;AACvF,aAAOxT;IACT;IAGA8wB,eAAe;AACb,WAAK7Z,SAAS,CAAA;AACd,WAAK8kB,oBAAoB;IAC3B;IAMAW,eAAe;AACbj9B,eAAK,KAAKuG,QAAQ02B,cAAc;QAAC;MAAK,CAAA;IACxC;IAUAx4B,OAAOwf,UAAUC,WAAWgZ,SAAS;AACnC,YAAM,EAACvhB,aAAawhB,OAAO9kB,OAAOgf,SAAAA,IAAY,KAAK9wB;AACnD,YAAM62B,aAAa/F,SAAS+F;AAG5B,WAAKH,aAAY;AAGjB,WAAKhZ,WAAWA;AAChB,WAAKC,YAAYA;AACjB,WAAKmX,WAAW6B,UAAUx3B,OAAOyB,OAAO;QACtCkB,MAAM;QACNF,OAAO;QACPD,KAAK;QACLE,QAAQ;SACP80B,OAAAA;AAEH,WAAK7kB,QAAQ;AACb,WAAKyjB,cAAc;AACnB,WAAKF,iBAAiB;AACtB,WAAKC,cAAc;AAGnB,WAAKwB,oBAAmB;AACxB,WAAKC,cAAa;AAClB,WAAKC,mBAAkB;AAEvB,WAAK9E,aAAa,KAAKve,aAAY,IAC/B,KAAKqC,QAAQ2gB,QAAQ70B,OAAO60B,QAAQ/0B,QACpC,KAAKmU,SAAS4gB,QAAQh1B,MAAMg1B,QAAQ90B;AAGxC,UAAI,CAAC,KAAKk0B,mBAAmB;AAC3B,aAAKkB,iBAAgB;AACrB,aAAKC,oBAAmB;AACxB,aAAKC,gBAAe;AACpB,aAAK/B,SAASgC,UAAU,MAAMR,OAAOxhB,WAAAA;AACrC,aAAK2gB,oBAAoB;;AAG3B,WAAKsB,iBAAgB;AAErB,WAAKvlB,QAAQ,KAAKwlB,WAAU,KAAM,CAAA;AAGlC,WAAKC,gBAAe;AAIpB,YAAMC,kBAAkBX,aAAa,KAAK/kB,MAAM7X;AAChD,WAAKw9B,sBAAsBD,kBAAkBxE,OAAO,KAAKlhB,OAAO+kB,UAAAA,IAAc,KAAK/kB,KAAK;AAMxF,WAAK9S,UAAS;AAGd,WAAK04B,6BAA4B;AACjC,WAAKC,uBAAsB;AAC3B,WAAKC,4BAA2B;AAGhC,UAAI9G,SAASrQ,YAAYqQ,SAASD,YAAYC,SAAS+G,WAAW,SAAS;AACzE,aAAK/lB,QAAQ+e,SAAS,MAAM,KAAK/e,KAAK;AACtC,aAAKyjB,cAAc;AACnB,aAAKuC,cAAa;;AAGpB,UAAIN,iBAAiB;AAEnB,aAAKC,sBAAsB,KAAK3lB,KAAK;;AAGvC,WAAKimB,UAAS;AACd,WAAKC,IAAG;AACR,WAAKC,SAAQ;AAIb,WAAKC,YAAW;IAClB;IAKAl5B,YAAY;AACV,UAAIm5B,gBAAgB,KAAKn4B,QAAQoB;AACjC,UAAIoW,YAAYE;AAEhB,UAAI,KAAK/D,aAAY,GAAI;AACvB6D,qBAAa,KAAK1V;AAClB4V,mBAAW,KAAK9V;aACX;AACL4V,qBAAa,KAAK7V;AAClB+V,mBAAW,KAAK7V;AAEhBs2B,wBAAgB,CAACA;;AAEnB,WAAKjhB,cAAcM;AACnB,WAAKL,YAAYO;AACjB,WAAK0L,iBAAiB+U;AACtB,WAAK1mB,UAAUiG,WAAWF;AAC1B,WAAK4gB,iBAAiB,KAAKp4B,QAAQq4B;IACrC;IAEAH,cAAc;AACZz+B,eAAK,KAAKuG,QAAQk4B,aAAa;QAAC;MAAK,CAAA;IACvC;IAIApB,sBAAsB;AACpBr9B,eAAK,KAAKuG,QAAQ82B,qBAAqB;QAAC;MAAK,CAAA;IAC/C;IACAC,gBAAgB;AAEd,UAAI,KAAKpjB,aAAY,GAAI;AAEvB,aAAKqC,QAAQ,KAAK0H;AAClB,aAAK5b,OAAO;AACZ,aAAKF,QAAQ,KAAKoU;aACb;AACL,aAAKD,SAAS,KAAK4H;AAGnB,aAAKhc,MAAM;AACX,aAAKE,SAAS,KAAKkU;;AAIrB,WAAKkf,cAAc;AACnB,WAAKF,aAAa;AAClB,WAAKG,eAAe;AACpB,WAAKF,gBAAgB;IACvB;IACAgC,qBAAqB;AACnBv9B,eAAK,KAAKuG,QAAQg3B,oBAAoB;QAAC;MAAK,CAAA;IAC9C;IAEAsB,WAAWrhB,MAAM;AACf,WAAKze,MAAM+/B,cAActhB,MAAM,KAAK9L,WAAU,CAAA;AAC9C1R,eAAK,KAAKuG,QAAQiX,IAAAA,GAAO;QAAC;MAAK,CAAA;IACjC;IAGAggB,mBAAmB;AACjB,WAAKqB,WAAW,kBAAA;IAClB;IACApB,sBAAsB;IAAA;IACtBC,kBAAkB;AAChB,WAAKmB,WAAW,iBAAA;IAClB;IAGAjB,mBAAmB;AACjB,WAAKiB,WAAW,kBAAA;IAClB;IAIAhB,aAAa;AACX,aAAO,CAAA;IACT;IACAC,kBAAkB;AAChB,WAAKe,WAAW,iBAAA;IAClB;IAEAE,8BAA8B;AAC5B/+B,eAAK,KAAKuG,QAAQw4B,6BAA6B;QAAC;MAAK,CAAA;IACvD;IAKAC,mBAAmB3mB,OAAO;AACxB,YAAMgf,WAAW,KAAK9wB,QAAQ8R;AAC9B,UAAI5X,IAAGuI,MAAMlI;AACb,WAAKL,KAAI,GAAGuI,OAAOqP,MAAM7X,QAAQC,KAAIuI,MAAMvI,MAAK;AAC9CK,eAAOuX,MAAM5X,EAAE;AACfK,aAAK2S,QAAQzT,SAAKq3B,SAAS4H,UAAU;UAACn+B,KAAKmG;UAAOxG;UAAG4X;QAAM,GAAE,IAAI;MACnE;IACF;IACA6mB,6BAA6B;AAC3Bl/B,eAAK,KAAKuG,QAAQ24B,4BAA4B;QAAC;MAAK,CAAA;IACtD;IAIAjB,+BAA+B;AAC7Bj+B,eAAK,KAAKuG,QAAQ03B,8BAA8B;QAAC;MAAK,CAAA;IACxD;IACAC,yBAAyB;AACvB,YAAM33B,UAAU,KAAKA;AACrB,YAAM8wB,WAAW9wB,QAAQ8R;AACzB,YAAM8mB,WAAW9F,cAAc,KAAKhhB,MAAM7X,QAAQ+F,QAAQ8R,MAAMof,aAAa;AAC7E,YAAM2H,cAAc/H,SAAS+H,eAAe;AAC5C,YAAMC,cAAchI,SAASgI;AAC7B,UAAI3D,gBAAgB0D;AACpB,UAAIE,WAAWpb,WAAWqb;AAE1B,UAAI,CAAC,KAAKC,WAAU,KAAM,CAACnI,SAASrQ,WAAWoY,eAAeC,eAAeF,YAAY,KAAK,CAAC,KAAKjlB,aAAY,GAAI;AAClH,aAAKwhB,gBAAgB0D;AACrB;;AAGF,YAAMK,aAAa,KAAKC,eAAc;AACtC,YAAMC,gBAAgBF,WAAWG,OAAOrjB;AACxC,YAAMsjB,iBAAiBJ,WAAWK,QAAQxjB;AAI1C,YAAM2H,WAAW8b,YAAY,KAAKhhC,MAAMwd,QAAQojB,eAAe,GAAG,KAAK1b,QAAQ;AAC/Eqb,kBAAY/4B,QAAQiV,SAAS,KAAKyI,WAAWkb,WAAWlb,YAAYkb,WAAW;AAG/E,UAAIQ,gBAAgB,IAAIL,WAAW;AACjCA,oBAAYrb,YAAYkb,YAAY54B,QAAQiV,SAAS,MAAM;AAC3D0I,oBAAY,KAAKA,YAAYiW,kBAAkB5zB,QAAQkV,IAAI,IAC3D4b,SAAS3G,UAAU2J,eAAe9zB,QAAQy5B,OAAO,KAAKjhC,MAAMwH,QAAQg0B,IAAI;AACxEgF,2BAAmB5/B,KAAKwrB,KAAKwU,gBAAgBA,gBAAgBE,iBAAiBA,cAAAA;AAC9EnE,wBAAgBuE,UAAUtgC,KAAKC,IAC7BD,KAAKugC,KAAKH,aAAaN,WAAWK,QAAQxjB,SAAS,KAAKgjB,WAAW,IAAI,CAAA,CAAA,GACvE3/B,KAAKugC,KAAKH,YAAY7b,YAAYqb,kBAAkB,IAAI,CAAA,CAAA,IAAM5/B,KAAKugC,KAAKH,YAAYF,iBAAiBN,kBAAkB,IAAI,CAAA,CAAA,CAAA,CAAA;AAE7H7D,wBAAgB/7B,KAAKoC,IAAIq9B,aAAaz/B,KAAKC,IAAIy/B,aAAa3D,aAAAA,CAAAA;;AAG9D,WAAKA,gBAAgBA;IACvB;IACAyC,8BAA8B;AAC5Bn+B,eAAK,KAAKuG,QAAQ43B,6BAA6B;QAAC;MAAK,CAAA;IACvD;IACAE,gBAAgB;IAAA;IAIhBC,YAAY;AACVt+B,eAAK,KAAKuG,QAAQ+3B,WAAW;QAAC;MAAK,CAAA;IACrC;IACAC,MAAM;AAEJ,YAAMjX,UAAU;QACd/K,OAAO;QACPD,QAAQ;MACV;AAEA,YAAM,EAACvd,OAAOwH,SAAS,EAAC8R,OAAOgf,UAAU2I,OAAOG,WAAW1kB,MAAM2kB,SAAAA,EAAS,IAAI;AAC9E,YAAMpZ,UAAU,KAAKwY,WAAU;AAC/B,YAAMtlB,eAAe,KAAKA,aAAY;AAEtC,UAAI8M,SAAS;AACX,cAAMqZ,cAAchG,eAAe8F,WAAWphC,MAAMwH,QAAQg0B,IAAI;AAChE,YAAIrgB,cAAc;AAChBoN,kBAAQ/K,QAAQ,KAAK0H;AACrBqD,kBAAQhL,SAAS6d,kBAAkBiG,QAAYC,IAAAA;eAC1C;AACL/Y,kBAAQhL,SAAS,KAAK4H;AACtBoD,kBAAQ/K,QAAQ4d,kBAAkBiG,QAAYC,IAAAA;;AAIhD,YAAIhJ,SAASrQ,WAAW,KAAK3O,MAAM7X,QAAQ;AACzC,gBAAM,EAACu3B,OAAAA,QAAOtb,MAAMmjB,QAAQE,QAAAA,IAAW,KAAKJ,eAAc;AAC1D,gBAAMY,cAAcjJ,SAAS3G,UAAU;AACvC,gBAAM6P,eAAejd,UAAU,KAAKoY,aAAa;AACjD,gBAAM3b,MAAMpgB,KAAKogB,IAAIwgB,YAAAA;AACrB,gBAAMtgB,MAAMtgB,KAAKsgB,IAAIsgB,YAAAA;AAErB,cAAIrmB,cAAc;AAEhB,kBAAMsmB,cAAcnJ,SAASoJ,SAAS,IAAIxgB,MAAM2f,OAAOrjB,QAAQwD,MAAM+f,QAAQxjB;AAC7EgL,oBAAQhL,SAAS3c,KAAKC,IAAI,KAAKskB,WAAWoD,QAAQhL,SAASkkB,cAAcF,WAAAA;iBACpE;AAGL,kBAAMI,aAAarJ,SAASoJ,SAAS,IAAI1gB,MAAM6f,OAAOrjB,QAAQ0D,MAAM6f,QAAQxjB;AAE5EgL,oBAAQ/K,QAAQ5c,KAAKC,IAAI,KAAKqkB,UAAUqD,QAAQ/K,QAAQmkB,aAAaJ,WAAAA;;AAEvE,eAAKK,kBAAkB5I,QAAOtb,MAAMwD,KAAKF,GAAAA;;;AAI7C,WAAK6gB,eAAc;AAEnB,UAAI1mB,cAAc;AAChB,aAAKqC,QAAQ,KAAKvE,UAAUjZ,MAAMwd,QAAQ,KAAK8e,SAAShzB,OAAO,KAAKgzB,SAASlzB;AAC7E,aAAKmU,SAASgL,QAAQhL;aACjB;AACL,aAAKC,QAAQ+K,QAAQ/K;AACrB,aAAKD,SAAS,KAAKtE,UAAUjZ,MAAMud,SAAS,KAAK+e,SAASnzB,MAAM,KAAKmzB,SAASjzB;;IAElF;IAEAu4B,kBAAkB5I,QAAOtb,MAAMwD,KAAKF,KAAK;AACvC,YAAM,EAAC1H,OAAO,EAAC8gB,OAAOzI,QAAO,GAAGlG,SAAQ,IAAI,KAAKjkB;AACjD,YAAMs6B,YAAY,KAAKnF,kBAAkB;AACzC,YAAMoF,mBAAmBtW,aAAa,SAAS,KAAKtgB,SAAS;AAE7D,UAAI,KAAKgQ,aAAY,GAAI;AACvB,cAAM6mB,aAAa,KAAKzoB,gBAAgB,CAAK,IAAA,KAAKjQ;AAClD,cAAM24B,cAAc,KAAK74B,QAAQ,KAAKmQ,gBAAgB,KAAKD,MAAM7X,SAAS,CAAA;AAC1E,YAAIg7B,cAAc;AAClB,YAAIC,eAAe;AAInB,YAAIoF,WAAW;AACb,cAAIC,kBAAkB;AACpBtF,0BAAczb,MAAMgY,OAAMxb;AAC1Bkf,2BAAexb,MAAMxD,KAAKH;iBACrB;AACLkf,0BAAcvb,MAAM8X,OAAMzb;AAC1Bmf,2BAAe1b,MAAMtD,KAAKF;;mBAEnB4c,UAAU,SAAS;AAC5BsC,yBAAehf,KAAKF;mBACX4c,UAAU,OAAO;AAC1BqC,wBAAczD,OAAMxb;mBACX4c,UAAU,SAAS;AAC5BqC,wBAAczD,OAAMxb,QAAQ;AAC5Bkf,yBAAehf,KAAKF,QAAQ;;AAI9B,aAAKif,cAAc77B,KAAKoC,KAAKy5B,cAAcuF,aAAarQ,WAAW,KAAKnU,SAAS,KAAKA,QAAQwkB,aAAa,CAAA;AAC3G,aAAKtF,eAAe97B,KAAKoC,KAAK05B,eAAeuF,cAActQ,WAAW,KAAKnU,SAAS,KAAKA,QAAQykB,cAAc,CAAA;aAC1G;AACL,YAAI1F,aAAa7e,KAAKH,SAAS;AAC/B,YAAIif,gBAAgBxD,OAAMzb,SAAS;AAEnC,YAAI6c,UAAU,SAAS;AACrBmC,uBAAa;AACbC,0BAAgBxD,OAAMzb;mBACb6c,UAAU,OAAO;AAC1BmC,uBAAa7e,KAAKH;AAClBif,0BAAgB;;AAGlB,aAAKD,aAAaA,aAAa5K;AAC/B,aAAK6K,gBAAgBA,gBAAgB7K;;IAEzC;IAMAkQ,iBAAiB;AACf,UAAI,KAAKvF,UAAU;AACjB,aAAKA,SAAShzB,OAAO1I,KAAKoC,IAAI,KAAKy5B,aAAa,KAAKH,SAAShzB,IAAI;AAClE,aAAKgzB,SAASnzB,MAAMvI,KAAKoC,IAAI,KAAKu5B,YAAY,KAAKD,SAASnzB,GAAG;AAC/D,aAAKmzB,SAASlzB,QAAQxI,KAAKoC,IAAI,KAAK05B,cAAc,KAAKJ,SAASlzB,KAAK;AACrE,aAAKkzB,SAASjzB,SAASzI,KAAKoC,IAAI,KAAKw5B,eAAe,KAAKF,SAASjzB,MAAM;;IAE5E;IAEAo2B,WAAW;AACTx+B,eAAK,KAAKuG,QAAQi4B,UAAU;QAAC;MAAK,CAAA;IACpC;IAMAtkB,eAAe;AACb,YAAM,EAAChQ,MAAMsgB,SAAAA,IAAY,KAAKjkB;AAC9B,aAAOikB,aAAa,SAASA,aAAa,YAAYtgB,SAAS;IACjE;IAIA+2B,aAAa;AACX,aAAO,KAAK16B,QAAQ4nB;IACtB;IAMA6P,sBAAsB3lB,OAAO;AAC3B,WAAK0mB,4BAA2B;AAEhC,WAAKC,mBAAmB3mB,KAAAA;AAGxB,UAAI5X,IAAGuI;AACP,WAAKvI,KAAI,GAAGuI,OAAOqP,MAAM7X,QAAQC,KAAIuI,MAAMvI,MAAK;AAC9C,YAAIoY,cAAcR,MAAM5X,EAAE,EAACgT,KAAK,GAAG;AACjC4E,gBAAMzB,OAAOnW,IAAG,CAAA;AAChBuI;AACAvI,UAAAA;;MAEJ;AAEA,WAAKy+B,2BAA0B;IACjC;IAMAQ,iBAAiB;AACf,UAAID,aAAa,KAAK3D;AAEtB,UAAI,CAAC2D,YAAY;AACf,cAAMrC,aAAa,KAAK72B,QAAQ8R,MAAM+kB;AACtC,YAAI/kB,QAAQ,KAAKA;AACjB,YAAI+kB,aAAa/kB,MAAM7X,QAAQ;AAC7B6X,kBAAQkhB,OAAOlhB,OAAO+kB,UAAAA;;AAGxB,aAAKtB,cAAc2D,aAAa,KAAKyB,mBAAmB7oB,OAAOA,MAAM7X,QAAQ,KAAK+F,QAAQ8R,MAAMof,aAAa;;AAG/G,aAAOgI;IACT;IAQAyB,mBAAmB7oB,OAAO7X,QAAQi3B,eAAe;AAC/C,YAAM,EAACzpB,KAAK+tB,mBAAmB/B,OAAM,IAAI;AACzC,YAAMmH,SAAS,CAAA;AACf,YAAMC,UAAU,CAAA;AAChB,YAAM3H,YAAY95B,KAAKoE,MAAMvD,SAAS64B,cAAc74B,QAAQi3B,aAAAA,CAAAA;AAC5D,UAAI4J,kBAAkB;AACtB,UAAIC,mBAAmB;AACvB,UAAI7gC,IAAGkqB,GAAG4W,MAAM9tB,OAAO+tB,UAAUC,aAAYltB,QAAOmmB,YAAYne,OAAOD,QAAQolB;AAE/E,WAAKjhC,KAAI,GAAGA,KAAID,QAAQC,MAAKg5B,WAAW;AACtChmB,gBAAQ4E,MAAM5X,EAAE,EAACgT;AACjB+tB,mBAAW,KAAKG,wBAAwBlhC,EAAAA;AACxCuN,YAAIusB,OAAOkH,cAAaD,SAASI;AACjCrtB,QAAAA,SAAQylB,OAAOyH,WAAAA,IAAczH,OAAOyH,WAAAA,KAAe;UAAC53B,MAAM,CAAA;UAAIowB,IAAI,CAAA;QAAE;AACpES,qBAAa8G,SAAS9G;AACtBne,gBAAQD,SAAS;AAEjB,YAAI,CAACzD,cAAcpF,KAAU,KAAA,CAACvN,QAAQuN,KAAQ,GAAA;AAC5C8I,kBAAQslB,aAAa7zB,KAAKuG,OAAM1K,MAAM0K,OAAM0lB,IAAI1d,OAAO9I,KAAAA;AACvD6I,mBAASoe;mBACAx0B,QAAQuN,KAAQ,GAAA;AAEzB,eAAKkX,IAAI,GAAG4W,OAAO9tB,MAAMjT,QAAQmqB,IAAI4W,MAAM,EAAE5W,GAAG;AAC9C+W,0BAAqCjuB,MAAMkX,CAAE;AAE7C,gBAAI,CAAC9R,cAAc6oB,WAAgB,KAAA,CAACx7B,QAAQw7B,WAAc,GAAA;AACxDnlB,sBAAQslB,aAAa7zB,KAAKuG,OAAM1K,MAAM0K,OAAM0lB,IAAI1d,OAAOmlB,WAAAA;AACvDplB,wBAAUoe;;UAEd;;AAEFyG,eAAO1/B,KAAK8a,KAAAA;AACZ6kB,gBAAQ3/B,KAAK6a,MAAAA;AACb+kB,0BAAkB1hC,KAAKoC,IAAIwa,OAAO8kB,eAAAA;AAClCC,2BAAmB3hC,KAAKoC,IAAIua,QAAQglB,gBAAAA;MACtC;AACAvH,qBAAeC,QAAQx5B,MAAAA;AAEvB,YAAMo/B,SAASuB,OAAOnkB,QAAQqkB,eAAAA;AAC9B,YAAMvB,UAAUsB,QAAQpkB,QAAQskB,gBAAAA;AAEhC,YAAMQ,UAAU,CAACC,SAAS;QAACxlB,OAAO4kB,OAAOY,GAAAA,KAAQ;QAAGzlB,QAAQ8kB,QAAQW,GAAAA,KAAQ;;AAE5E,aAAO;QACLhK,OAAO+J,QAAQ,CAAA;QACfrlB,MAAMqlB,QAAQthC,SAAS,CAAA;QACvBo/B,QAAQkC,QAAQlC,MAAAA;QAChBE,SAASgC,QAAQhC,OAAAA;QACjBqB;QACAC;MACF;IACF;IAOA1tB,iBAAiBzM,OAAO;AACtB,aAAOA;IACT;IASAmR,iBAAiBnR,OAAOgC,QAAO;AAC7B,aAAO+J;IACT;IAQAkL,iBAAiB8jB,OAAO;IAAA;IAQxB1pB,gBAAgBrP,QAAO;AACrB,YAAMoP,QAAQ,KAAKA;AACnB,UAAIpP,SAAQ,KAAKA,SAAQoP,MAAM7X,SAAS,GAAG;AACzC,eAAO;;AAET,aAAO,KAAK4X,iBAAiBC,MAAMpP,MAAAA,EAAOhC,KAAK;IACjD;IAQA+W,mBAAmBikB,SAAS;AAC1B,UAAI,KAAKtY,gBAAgB;AACvBsY,kBAAU,IAAIA;;AAGhB,YAAMD,QAAQ,KAAKvkB,cAAcwkB,UAAU,KAAKjqB;AAChD,aAAOkqB,YAAY,KAAKvD,iBAAiBwD,YAAY,KAAKpjC,OAAOijC,OAAO,CAAA,IAAKA,KAAK;IACpF;IAMAI,mBAAmBJ,OAAO;AACxB,YAAMC,WAAWD,QAAQ,KAAKvkB,eAAe,KAAKzF;AAClD,aAAO,KAAK2R,iBAAiB,IAAIsY,UAAUA;IAC7C;IAOAnmB,eAAe;AACb,aAAO,KAAK1D,iBAAiB,KAAKiqB,aAAY,CAAA;IAChD;IAKAA,eAAe;AACb,YAAM,EAACziC,KAAAA,MAAKmC,KAAAA,KAAG,IAAI;AAEnB,aAAOnC,OAAM,KAAKmC,OAAM,IAAIA,OAC1BnC,OAAM,KAAKmC,OAAM,IAAInC,OACrB;IACJ;IAKA8R,WAAWzI,QAAO;AAChB,YAAMoP,QAAQ,KAAKA,SAAS,CAAA;AAE5B,UAAIpP,UAAS,KAAKA,SAAQoP,MAAM7X,QAAQ;AACtC,cAAMM,OAAOuX,MAAMpP,MAAM;AACzB,eAAOnI,KAAK8N,aACb9N,KAAK8N,WAAWgsB,kBAAkB,KAAKlpB,WAAU,GAAIzI,QAAOnI,IAAI;;AAEjE,aAAO,KAAK8N,aACZ,KAAKA,WAAW+rB,mBAAmB,KAAK57B,MAAM2S,WAAU,GAAI,IAAI;IAClE;IAMA4mB,YAAY;AACV,YAAMgK,cAAc,KAAK/7B,QAAQ8R;AAGjC,YAAMkqB,MAAMjf,UAAU,KAAKoY,aAAa;AACxC,YAAM3b,MAAMpgB,KAAKwY,IAAIxY,KAAKogB,IAAIwiB,GAAAA,CAAAA;AAC9B,YAAMtiB,MAAMtgB,KAAKwY,IAAIxY,KAAKsgB,IAAIsiB,GAAAA,CAAAA;AAE9B,YAAM9C,aAAa,KAAKC,eAAc;AACtC,YAAMhP,UAAU4R,YAAYE,mBAAmB;AAC/C,YAAMjT,IAAIkQ,aAAaA,WAAWG,OAAOrjB,QAAQmU,UAAU;AAC3D,YAAMjB,KAAIgQ,aAAaA,WAAWK,QAAQxjB,SAASoU,UAAU;AAG7D,aAAO,KAAKxW,aAAY,IACpBuV,KAAI1P,MAAMwP,IAAItP,MAAMsP,IAAIxP,MAAM0P,KAAIxP,MAClCwP,KAAIxP,MAAMsP,IAAIxP,MAAM0P,KAAI1P,MAAMwP,IAAItP;IACxC;IAMAuf,aAAa;AACX,YAAMxY,UAAU,KAAKzgB,QAAQygB;AAE7B,UAAIA,YAAY,QAAQ;AACtB,eAAO,CAAC,CAACA;;AAGX,aAAO,KAAKvb,wBAAuB,EAAGjL,SAAS;IACjD;IAKAiiC,sBAAsB1uB,WAAW;AAC/B,YAAM7J,OAAO,KAAKA;AAClB,YAAMnL,QAAQ,KAAKA;AACnB,YAAMwH,UAAU,KAAKA;AACrB,YAAM,EAACkV,MAAM+O,UAAU9D,OAAAA,IAAUngB;AACjC,YAAMiV,UAASC,KAAKD;AACpB,YAAMtB,eAAe,KAAKA,aAAY;AACtC,YAAM7B,QAAQ,KAAKA;AACnB,YAAMihB,cAAcjhB,MAAM7X,UAAUgb,UAAS,IAAI;AACjD,YAAMknB,KAAKvI,kBAAkB1e,IAAAA;AAC7B,YAAMlb,QAAQ,CAAA;AAEd,YAAMoiC,aAAajc,OAAO6V,WAAW,KAAK7qB,WAAU,CAAA;AACpD,YAAMkxB,YAAYD,WAAW3b,UAAU2b,WAAWpmB,QAAQ;AAC1D,YAAMsmB,gBAAgBD,YAAY;AAClC,YAAME,mBAAmB,SAASd,OAAO;AACvC,eAAOG,YAAYpjC,OAAOijC,OAAOY,SAAAA;MACnC;AACA,UAAIG,aAAatiC,IAAGq5B,WAAWkJ;AAC/B,UAAIC,KAAKC,KAAKC,KAAKC,KAAKC,IAAIC,IAAIC,IAAIC;AAEpC,UAAIhZ,aAAa,OAAO;AACtBuY,sBAAcD,iBAAiB,KAAK16B,MAAM;AAC1C86B,cAAM,KAAK96B,SAASs6B;AACpBU,cAAML,cAAcF;AACpBS,aAAKR,iBAAiB/uB,UAAU7L,GAAG,IAAI26B;AACvCW,QAAAA,MAAKzvB,UAAU3L;iBACNoiB,aAAa,UAAU;AAChCuY,sBAAcD,iBAAiB,KAAK56B,GAAG;AACvCo7B,aAAKvvB,UAAU7L;AACfs7B,QAAAA,MAAKV,iBAAiB/uB,UAAU3L,MAAM,IAAIy6B;AAC1CK,cAAMH,cAAcF;AACpBO,cAAM,KAAKl7B,MAAMw6B;iBACRlY,aAAa,QAAQ;AAC9BuY,sBAAcD,iBAAiB,KAAK36B,KAAK;AACzC86B,cAAM,KAAK96B,QAAQu6B;AACnBS,cAAMJ,cAAcF;AACpBQ,aAAKP,iBAAiB/uB,UAAU1L,IAAI,IAAIw6B;AACxCU,aAAKxvB,UAAU5L;iBACNqiB,aAAa,SAAS;AAC/BuY,sBAAcD,iBAAiB,KAAKz6B,IAAI;AACxCg7B,aAAKtvB,UAAU1L;AACfk7B,aAAKT,iBAAiB/uB,UAAU5L,KAAK,IAAI06B;AACzCI,cAAMF,cAAcF;AACpBM,cAAM,KAAK96B,OAAOq6B;iBACTx4B,SAAS,KAAK;AACvB,YAAIsgB,aAAa,UAAU;AACzBuY,wBAAcD,kBAAkB/uB,UAAU7L,MAAM6L,UAAU3L,UAAU,IAAI,GAAA;mBAC/D5C,SAASglB,QAAW,GAAA;AAC7B,gBAAM2Q,iBAAiBz1B,OAAOC,KAAK6kB,QAAAA,EAAU,CAAE;AAC/C,gBAAMvjB,QAAQujB,SAAS2Q,cAAe;AACtC4H,wBAAcD,iBAAiB,KAAK/jC,MAAMwN,OAAO4uB,cAAAA,EAAgB/iB,iBAAiBnR,KAAAA,CAAAA;;AAGpFq8B,aAAKvvB,UAAU7L;AACfs7B,QAAAA,MAAKzvB,UAAU3L;AACf86B,cAAMH,cAAcF;AACpBO,cAAMF,MAAMR;iBACHx4B,SAAS,KAAK;AACvB,YAAIsgB,aAAa,UAAU;AACzBuY,wBAAcD,kBAAkB/uB,UAAU1L,OAAO0L,UAAU5L,SAAS,CAAA;mBAC3D3C,SAASglB,QAAW,GAAA;AAC7B,gBAAM2Q,iBAAiBz1B,OAAOC,KAAK6kB,QAAAA,EAAU,CAAE;AAC/C,gBAAMvjB,QAAQujB,SAAS2Q,cAAe;AACtC4H,wBAAcD,iBAAiB,KAAK/jC,MAAMwN,OAAO4uB,cAAAA,EAAgB/iB,iBAAiBnR,KAAAA,CAAAA;;AAGpFg8B,cAAMF,cAAcF;AACpBM,cAAMF,MAAMP;AACZW,aAAKtvB,UAAU1L;AACfk7B,aAAKxvB,UAAU5L;;AAGjB,YAAMs7B,QAAQ/zB,eAAenJ,QAAQ8R,MAAMof,eAAe6B,WAAAA;AAC1D,YAAMoK,OAAO/jC,KAAKoC,IAAI,GAAGpC,KAAKm5B,KAAKQ,cAAcmK,KAAAA,CAAAA;AACjD,WAAKhjC,KAAI,GAAGA,KAAI64B,aAAa74B,MAAKijC,MAAM;AACtC,cAAMtvB,UAAU,KAAK1C,WAAWjR,EAAAA;AAChC,cAAMkjC,cAAcloB,KAAK8gB,WAAWnoB,OAAAA;AACpC,cAAMwvB,oBAAoBld,OAAO6V,WAAWnoB,OAAAA;AAE5C,cAAMsO,YAAYihB,YAAYjhB;AAC9B,cAAMmhB,YAAYF,YAAYhhC;AAC9B,cAAM0f,aAAauhB,kBAAkBE,QAAQ,CAAA;AAC7C,cAAMvhB,mBAAmBqhB,kBAAkBG;AAE3C,cAAMzE,YAAYqE,YAAYrE;AAC9B,cAAM0E,YAAYL,YAAYK;AAC9B,cAAMC,iBAAiBN,YAAYM,kBAAkB,CAAA;AACrD,cAAMC,uBAAuBP,YAAYO;AAEzCpK,oBAAYJ,oBAAoB,MAAMj5B,IAAG+a,OAAAA;AAGzC,YAAIse,cAAcj7B,QAAW;AAC3B;;AAGFmkC,2BAAmBb,YAAYpjC,OAAO+6B,WAAWpX,SAAAA;AAEjD,YAAIxI,cAAc;AAChB+oB,gBAAME,MAAME,KAAKE,KAAKP;eACjB;AACLE,gBAAME,MAAME,KAAKE,MAAKR;;AAGxBziC,cAAMkB,KAAK;UACTwhC;UACAC;UACAC;UACAC;UACAC;UACAC;UACAC;UACAC,IAAAA;UACAjnB,OAAOmG;UACP/f,OAAOkhC;UACPxhB;UACAE;UACA+c;UACA0E;UACAC;UACAC;QACF,CAAA;MACF;AAEA,WAAK9H,eAAe9C;AACpB,WAAK+C,eAAe0G;AAEpB,aAAOxiC;IACT;IAKAy8B,mBAAmBjpB,WAAW;AAC5B,YAAM7J,OAAO,KAAKA;AAClB,YAAM3D,UAAU,KAAKA;AACrB,YAAM,EAACikB,UAAUnS,OAAOiqB,YAAAA,IAAe/7B;AACvC,YAAM2T,eAAe,KAAKA,aAAY;AACtC,YAAM7B,QAAQ,KAAKA;AACnB,YAAM,EAAC8gB,OAAOgL,YAAYzT,SAAS+P,OAAM,IAAI6B;AAC7C,YAAMI,KAAKvI,kBAAkB5zB,QAAQkV,IAAI;AACzC,YAAM2oB,iBAAiB1B,KAAKhS;AAC5B,YAAM2T,kBAAkB5D,SAAS,CAAC/P,UAAU0T;AAC5C,YAAMhlB,WAAW,CAACkE,UAAU,KAAKoY,aAAa;AAC9C,YAAMn7B,QAAQ,CAAA;AACd,UAAIE,IAAGuI,MAAMlI,MAAM2S,OAAOzL,GAAGC,IAAG0Z,WAAWqgB,OAAOzH,MAAMG,YAAY4J,WAAWC;AAC/E,UAAIC,eAAe;AAEnB,UAAIha,aAAa,OAAO;AACtBviB,QAAAA,KAAI,KAAKG,SAASi8B;AAClB1iB,oBAAY,KAAK8iB,wBAAuB;iBAC/Bja,aAAa,UAAU;AAChCviB,QAAAA,KAAI,KAAKC,MAAMm8B;AACf1iB,oBAAY,KAAK8iB,wBAAuB;iBAC/Bja,aAAa,QAAQ;AAC9B,cAAM2M,MAAM,KAAKuN,wBAAwBhC,EAAAA;AACzC/gB,oBAAYwV,IAAIxV;AAChB3Z,YAAImvB,IAAInvB;iBACCwiB,aAAa,SAAS;AAC/B,cAAM2M,MAAM,KAAKuN,wBAAwBhC,EAAAA;AACzC/gB,oBAAYwV,IAAIxV;AAChB3Z,YAAImvB,IAAInvB;iBACCkC,SAAS,KAAK;AACvB,YAAIsgB,aAAa,UAAU;AACzBviB,UAAAA,MAAM8L,UAAU7L,MAAM6L,UAAU3L,UAAU,IAAKg8B;mBACtC5+B,SAASglB,QAAW,GAAA;AAC7B,gBAAM2Q,iBAAiBz1B,OAAOC,KAAK6kB,QAAAA,EAAU,CAAE;AAC/C,gBAAMvjB,QAAQujB,SAAS2Q,cAAe;AACtClzB,UAAAA,KAAI,KAAKlJ,MAAMwN,OAAO4uB,cAAe,EAAC/iB,iBAAiBnR,KAASm9B,IAAAA;;AAElEziB,oBAAY,KAAK8iB,wBAAuB;iBAC/Bv6B,SAAS,KAAK;AACvB,YAAIsgB,aAAa,UAAU;AACzBxiB,eAAM+L,UAAU1L,OAAO0L,UAAU5L,SAAS,IAAKi8B;mBACtC5+B,SAASglB,QAAW,GAAA;AAC7B,gBAAM2Q,iBAAiBz1B,OAAOC,KAAK6kB,QAAAA,EAAU,CAAE;AAC/C,gBAAMvjB,QAAQujB,SAAS2Q,cAAe;AACtCnzB,cAAI,KAAKjJ,MAAMwN,OAAO4uB,cAAAA,EAAgB/iB,iBAAiBnR,KAAAA;;AAEzD0a,oBAAY,KAAK+iB,wBAAwBhC,EAAAA,EAAI/gB;;AAG/C,UAAIzX,SAAS,KAAK;AAChB,YAAIivB,UAAU,SAAS;AACrBqL,yBAAe;mBACNrL,UAAU,OAAO;AAC1BqL,yBAAe;;;AAInB,YAAM/E,aAAa,KAAKC,eAAc;AACtC,WAAKj/B,KAAI,GAAGuI,OAAOqP,MAAM7X,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AAC9CK,eAAOuX,MAAM5X,EAAE;AACfgT,gBAAQ3S,KAAK2S;AAEb,cAAMkwB,cAAcrB,YAAY/F,WAAW,KAAK7qB,WAAWjR,EAAAA,CAAAA;AAC3DuhC,gBAAQ,KAAK1pB,gBAAgB7X,EAAAA,IAAK6hC,YAAYqC;AAC9CpK,eAAO,KAAKoH,wBAAwBlhC,EAAAA;AACpCi6B,qBAAaH,KAAKG;AAClB4J,oBAAYp+B,QAAQuN,KAAAA,IAASA,MAAMjT,SAAS;AAC5C,cAAMokC,YAAYN,YAAY;AAC9B,cAAM3hC,SAAQghC,YAAYhhC;AAC1B,cAAMkiC,cAAclB,YAAYmB;AAChC,cAAMC,cAAcpB,YAAYqB;AAChC,YAAIC,gBAAgBtjB;AAEpB,YAAIzH,cAAc;AAChBlS,cAAIg6B;AAEJ,cAAIrgB,cAAc,SAAS;AACzB,gBAAIlhB,OAAMuI,OAAO,GAAG;AAClBi8B,8BAAgB,CAAC,KAAK1+B,QAAQoB,UAAU,UAAU;uBACzClH,OAAM,GAAG;AAClBwkC,8BAAgB,CAAC,KAAK1+B,QAAQoB,UAAU,SAAS;mBAC5C;AACLs9B,8BAAgB;;;AAIpB,cAAIza,aAAa,OAAO;AACtB,gBAAI2Z,eAAe,UAAU/kB,aAAa,GAAG;AAC3CmlB,2BAAa,CAACD,YAAY5J,aAAaA,aAAa;uBAC3CyJ,eAAe,UAAU;AAClCI,2BAAa,CAAC9E,WAAWK,QAAQxjB,SAAS,IAAIsoB,YAAYlK,aAAaA;mBAClE;AACL6J,2BAAa,CAAC9E,WAAWK,QAAQxjB,SAASoe,aAAa;;iBAEpD;AAEL,gBAAIyJ,eAAe,UAAU/kB,aAAa,GAAG;AAC3CmlB,2BAAa7J,aAAa;uBACjByJ,eAAe,UAAU;AAClCI,2BAAa9E,WAAWK,QAAQxjB,SAAS,IAAIsoB,YAAYlK;mBACpD;AACL6J,2BAAa9E,WAAWK,QAAQxjB,SAASgoB,YAAY5J;;;AAGzD,cAAI+F,QAAQ;AACV8D,0BAAc;;AAEhB,cAAInlB,aAAa,KAAK,CAACukB,YAAYuB,mBAAmB;AACpDl9B,iBAAK,aAAc,IAAKrI,KAAKsgB,IAAIb,QAAAA;;eAE9B;AACLnX,UAAAA,KAAI+5B;AACJuC,wBAAc,IAAID,aAAa5J,aAAa;;AAG9C,YAAIyK;AAEJ,YAAIxB,YAAYuB,mBAAmB;AACjC,gBAAME,eAAenU,UAAU0S,YAAY0B,eAAe;AAC1D,gBAAM/oB,SAASmjB,WAAW2B,QAAQ3gC,EAAE;AACpC,gBAAM8b,QAAQkjB,WAAW0B,OAAO1gC,EAAE;AAElC,cAAIyH,OAAMq8B,aAAaa,aAAal9B;AACpC,cAAIG,QAAO,IAAI+8B,aAAa/8B;AAE5B,kBAAQm8B,cAAAA;YACR,KAAK;AACHt8B,cAAAA,QAAOoU,SAAS;AAChB;YACF,KAAK;AACHpU,cAAAA,QAAOoU;AACP;UAGF;AAEA,kBAAQqF,WAAAA;YACR,KAAK;AACHtZ,cAAAA,SAAQkU,QAAQ;AAChB;YACF,KAAK;AACHlU,cAAAA,SAAQkU;AACR;YACF,KAAK;AACH,kBAAI9b,OAAMuI,OAAO,GAAG;AAClBX,gBAAAA,SAAQkU;yBACC9b,KAAI,GAAG;AAChB4H,gBAAAA,SAAQkU,QAAQ;;AAElB;UAGF;AAEA4oB,qBAAW;YACT98B,MAAAA;YACAH,KAAAA;YACAqU,OAAOA,QAAQ6oB,aAAa7oB;YAC5BD,QAAQA,SAAS8oB,aAAa9oB;YAE9B3Z,OAAOghC,YAAY2B;UACrB;;AAGF/kC,cAAMkB,KAAK;UACTgS;UACA8mB;UACAgK;UACAh+B,SAAS;YACP6Y;YACAzc,OAAAA;YACAkiC;YACAE;YACApjB,WAAWsjB;YACXT;YACAe,aAAa;cAACv9B;cAAGC;YAAE;YACnBk9B;UACF;QACF,CAAA;MACF;AAEA,aAAO5kC;IACT;IAEAkkC,0BAA0B;AACxB,YAAM,EAACja,UAAUnS,MAAAA,IAAS,KAAK9R;AAC/B,YAAM6Y,WAAW,CAACkE,UAAU,KAAKoY,aAAa;AAE9C,UAAItc,UAAU;AACZ,eAAOoL,aAAa,QAAQ,SAAS;;AAGvC,UAAI2O,QAAQ;AAEZ,UAAI9gB,MAAM8gB,UAAU,SAAS;AAC3BA,gBAAQ;MACV,WAAW9gB,MAAM8gB,UAAU,OAAO;AAChCA,gBAAQ;MACV,WAAW9gB,MAAM8gB,UAAU,SAAS;AAClCA,gBAAQ;;AAGV,aAAOA;IACT;IAEAuL,wBAAwBhC,IAAI;AAC1B,YAAM,EAAClY,UAAUnS,OAAO,EAAC8rB,YAAY1D,QAAQ/P,QAAAA,EAAQ,IAAI,KAAKnqB;AAC9D,YAAMk5B,aAAa,KAAKC,eAAc;AACtC,YAAM0E,iBAAiB1B,KAAKhS;AAC5B,YAAMkP,SAASH,WAAWG,OAAOrjB;AAEjC,UAAIoF;AACJ,UAAI3Z;AAEJ,UAAIwiB,aAAa,QAAQ;AACvB,YAAIiW,QAAQ;AACVz4B,cAAI,KAAKG,QAAQuoB;AAEjB,cAAIyT,eAAe,QAAQ;AACzBxiB,wBAAY;qBACHwiB,eAAe,UAAU;AAClCxiB,wBAAY;AACZ3Z,iBAAM43B,SAAS;iBACV;AACLje,wBAAY;AACZ3Z,iBAAK43B;;eAEF;AACL53B,cAAI,KAAKG,QAAQi8B;AAEjB,cAAID,eAAe,QAAQ;AACzBxiB,wBAAY;qBACHwiB,eAAe,UAAU;AAClCxiB,wBAAY;AACZ3Z,iBAAM43B,SAAS;iBACV;AACLje,wBAAY;AACZ3Z,gBAAI,KAAKK;;;iBAGJmiB,aAAa,SAAS;AAC/B,YAAIiW,QAAQ;AACVz4B,cAAI,KAAKK,OAAOqoB;AAEhB,cAAIyT,eAAe,QAAQ;AACzBxiB,wBAAY;qBACHwiB,eAAe,UAAU;AAClCxiB,wBAAY;AACZ3Z,iBAAM43B,SAAS;iBACV;AACLje,wBAAY;AACZ3Z,iBAAK43B;;eAEF;AACL53B,cAAI,KAAKK,OAAO+7B;AAEhB,cAAID,eAAe,QAAQ;AACzBxiB,wBAAY;qBACHwiB,eAAe,UAAU;AAClCxiB,wBAAY;AACZ3Z,iBAAK43B,SAAS;iBACT;AACLje,wBAAY;AACZ3Z,gBAAI,KAAKG;;;aAGR;AACLwZ,oBAAY;;AAGd,aAAO;QAACA;QAAW3Z;MAAC;IACtB;IAKAw9B,oBAAoB;AAClB,UAAI,KAAKj/B,QAAQ8R,MAAMooB,QAAQ;AAC7B;;AAGF,YAAM1hC,QAAQ,KAAKA;AACnB,YAAMyrB,WAAW,KAAKjkB,QAAQikB;AAE9B,UAAIA,aAAa,UAAUA,aAAa,SAAS;AAC/C,eAAO;UAACtiB,KAAK;UAAGG,MAAM,KAAKA;UAAMD,QAAQrJ,MAAMud;UAAQnU,OAAO,KAAKA;QAAK;;AACxE,UAAIqiB,aAAa,SAASA,aAAa,UAAU;AACjD,eAAO;UAACtiB,KAAK,KAAKA;UAAKG,MAAM;UAAGD,QAAQ,KAAKA;UAAQD,OAAOpJ,MAAMwd;QAAK;;IAE3E;IAKAkpB,iBAAiB;AACf,YAAM,EAACz3B,KAAKzH,SAAS,EAAC2b,gBAAAA,GAAkB7Z,MAAAA,OAAMH,KAAAA,MAAKqU,OAAOD,OAAM,IAAI;AACpE,UAAI4F,iBAAiB;AACnBlU,YAAI03B,KAAI;AACR13B,YAAIiU,YAAYC;AAChBlU,YAAI23B,SAASt9B,OAAMH,MAAKqU,OAAOD,MAAAA;AAC/BtO,YAAI43B,QAAO;;IAEf;IAEAxnB,qBAAqBnX,OAAO;AAC1B,YAAMwU,OAAO,KAAKlV,QAAQkV;AAC1B,UAAI,CAAC,KAAK+jB,WAAU,KAAM,CAAC/jB,KAAKuL,SAAS;AACvC,eAAO;;AAET,YAAM3O,QAAQ,KAAKA;AACnB,YAAMpP,SAAQoP,MAAM6R,UAAU3hB,CAAAA,OAAKA,GAAEtB,UAAUA,KAAAA;AAC/C,UAAIgC,UAAS,GAAG;AACd,cAAMvB,OAAO+T,KAAK8gB,WAAW,KAAK7qB,WAAWzI,MAAAA,CAAAA;AAC7C,eAAOvB,KAAKgb;;AAEd,aAAO;IACT;IAKAmjB,SAAS9xB,WAAW;AAClB,YAAM0H,OAAO,KAAKlV,QAAQkV;AAC1B,YAAMzN,MAAM,KAAKA;AACjB,YAAMzN,QAAQ,KAAKq7B,mBAAmB,KAAKA,iBAAiB,KAAK6G,sBAAsB1uB,SAAS;AAChG,UAAItT,IAAGuI;AAEP,YAAM88B,WAAW,CAACC,IAAIC,IAAIjkB,UAAU;AAClC,YAAI,CAACA,MAAMxF,SAAS,CAACwF,MAAMpf,OAAO;AAChC;;AAEFqL,YAAI03B,KAAI;AACR13B,YAAI0U,YAAYX,MAAMxF;AACtBvO,YAAI4U,cAAcb,MAAMpf;AACxBqL,YAAIi4B,YAAYlkB,MAAMM,cAAc,CAAA,CAAE;AACtCrU,YAAIsU,iBAAiBP,MAAMQ;AAE3BvU,YAAIk4B,UAAS;AACbl4B,YAAIm4B,OAAOJ,GAAG/9B,GAAG+9B,GAAG99B,CAAC;AACrB+F,YAAIo4B,OAAOJ,GAAGh+B,GAAGg+B,GAAG/9B,CAAC;AACrB+F,YAAIq4B,OAAM;AACVr4B,YAAI43B,QAAO;MACb;AAEA,UAAInqB,KAAKuL,SAAS;AAChB,aAAKvmB,KAAI,GAAGuI,OAAOzI,MAAMC,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AAC9C,gBAAME,OAAOJ,MAAME,EAAE;AAErB,cAAIgb,KAAK6qB,iBAAiB;AACxBR,qBACE;cAAC99B,GAAGrH,KAAK0iC;cAAIp7B,GAAGtH,KAAK2iC;eACrB;cAACt7B,GAAGrH,KAAK4iC;cAAIt7B,GAAGtH,KAAK6iC;eACrB7iC,IAAAA;;AAIJ,cAAI8a,KAAK2e,WAAW;AAClB0L,qBACE;cAAC99B,GAAGrH,KAAKsiC;cAAKh7B,GAAGtH,KAAKuiC;eACtB;cAACl7B,GAAGrH,KAAKwiC;cAAKl7B,GAAGtH,KAAKyiC;eACtB;cACEzgC,OAAOhC,KAAKqjC;cACZznB,OAAO5b,KAAK2+B;cACZjd,YAAY1hB,KAAKsjC;cACjB1hB,kBAAkB5hB,KAAKujC;YACzB,CAAA;;QAGN;;IAEJ;IAKAqC,aAAa;AACX,YAAM,EAACxnC,OAAOiP,KAAKzH,SAAS,EAACmgB,QAAQjL,KAAI,EAAC,IAAI;AAC9C,YAAMknB,aAAajc,OAAO6V,WAAW,KAAK7qB,WAAU,CAAA;AACpD,YAAMkxB,YAAYlc,OAAOM,UAAU2b,WAAWpmB,QAAQ;AACtD,UAAI,CAACqmB,WAAW;AACd;;AAEF,YAAM4D,gBAAgB/qB,KAAK8gB,WAAW,KAAK7qB,WAAW,CAAA,CAAA,EAAIgR;AAC1D,YAAMqgB,cAAc,KAAK1G;AACzB,UAAIgH,IAAIE,IAAID,IAAIE;AAEhB,UAAI,KAAKtpB,aAAY,GAAI;AACvBmpB,aAAKlB,YAAYpjC,OAAO,KAAKsJ,MAAMu6B,SAAAA,IAAaA,YAAY;AAC5DW,aAAKpB,YAAYpjC,OAAO,KAAKoJ,OAAOq+B,aAAAA,IAAiBA,gBAAgB;AACrElD,aAAKE,MAAKT;aACL;AACLO,aAAKnB,YAAYpjC,OAAO,KAAKmJ,KAAK06B,SAAAA,IAAaA,YAAY;AAC3DY,QAAAA,MAAKrB,YAAYpjC,OAAO,KAAKqJ,QAAQo+B,aAAAA,IAAiBA,gBAAgB;AACtEnD,aAAKE,KAAKR;;AAEZ/0B,UAAI03B,KAAI;AACR13B,UAAI0U,YAAYigB,WAAWpmB;AAC3BvO,UAAI4U,cAAc+f,WAAWhgC;AAE7BqL,UAAIk4B,UAAS;AACbl4B,UAAIm4B,OAAO9C,IAAIC,EAAAA;AACft1B,UAAIo4B,OAAO7C,IAAIC,GAAAA;AACfx1B,UAAIq4B,OAAM;AAEVr4B,UAAI43B,QAAO;IACb;IAKAa,WAAW1yB,WAAW;AACpB,YAAMuuB,cAAc,KAAK/7B,QAAQ8R;AAEjC,UAAI,CAACiqB,YAAYtb,SAAS;AACxB;;AAGF,YAAMhZ,MAAM,KAAKA;AAEjB,YAAM8F,OAAO,KAAK0xB,kBAAiB;AACnC,UAAI1xB,MAAM;AACR4yB,iBAAS14B,KAAK8F,IAAAA;;AAGhB,YAAMvT,QAAQ,KAAKw8B,cAAchpB,SAAAA;AACjC,iBAAWpT,QAAQJ,OAAO;AACxB,cAAMomC,oBAAoBhmC,KAAK4F;AAC/B,cAAMi7B,WAAW7gC,KAAK45B;AACtB,cAAM9mB,QAAQ9S,KAAK8S;AACnB,cAAMxL,KAAItH,KAAK4jC;AACfqC,mBAAW54B,KAAKyF,OAAO,GAAGxL,IAAGu5B,UAAUmF,iBAAAA;MACzC;AAEA,UAAI7yB,MAAM;AACR+yB,mBAAW74B,GAAAA;;IAEf;IAKA84B,YAAY;AACV,YAAM,EAAC94B,KAAKzH,SAAS,EAACikB,UAAUwV,OAAOr4B,QAAO,EAAC,IAAI;AAEnD,UAAI,CAACq4B,MAAMhZ,SAAS;AAClB;;AAGF,YAAMuT,OAAOC,OAAOwF,MAAMzF,IAAI;AAC9B,YAAM7J,UAAUO,UAAU+O,MAAMtP,OAAO;AACvC,YAAMyI,QAAQ6G,MAAM7G;AACpB,UAAI3d,UAAS+e,KAAKG,aAAa;AAE/B,UAAIlQ,aAAa,YAAYA,aAAa,YAAYhlB,SAASglB,QAAW,GAAA;AACxEhP,QAAAA,WAAUkV,QAAQtoB;AAClB,YAAIlC,QAAQ85B,MAAMhe,IAAI,GAAG;AACvBxG,UAAAA,WAAU+e,KAAKG,cAAcsF,MAAMhe,KAAKxhB,SAAS;;aAE9C;AACLgb,QAAAA,WAAUkV,QAAQxoB;;AAGpB,YAAM,EAAC8yB,QAAQC,QAAQhX,UAAU7E,SAAQ,IAAI2b,UAAU,MAAMvf,SAAQgP,UAAU2O,KAAAA;AAE/EyN,iBAAW54B,KAAKgyB,MAAMhe,MAAM,GAAG,GAAGuY,MAAM;QACtC53B,OAAOq9B,MAAMr9B;QACbshB;QACA7E;QACAuC,WAAWkZ,WAAW1B,OAAO3O,UAAU7iB,OAAAA;QACvC68B,cAAc;QACde,aAAa;UAACvK;UAAQC;QAAO;MAC/B,CAAA;IACF;IAEAv6B,KAAKqT,WAAW;AACd,UAAI,CAAC,KAAKyrB,WAAU,GAAI;AACtB;;AAGF,WAAKiG,eAAc;AACnB,WAAKI,SAAS9xB,SAAAA;AACd,WAAKwyB,WAAU;AACf,WAAKO,UAAS;AACd,WAAKL,WAAW1yB,SAAAA;IAClB;IAMA6c,UAAU;AACR,YAAMlpB,OAAO,KAAKnB;AAClB,YAAMwgC,KAAKr/B,KAAK2Q,SAAS3Q,KAAK2Q,MAAMwY,KAAK;AACzC,YAAMmW,KAAKt3B,eAAehI,KAAK+T,QAAQ/T,KAAK+T,KAAKoV,GAAG,EAAC;AACrD,YAAMoW,KAAKv3B,eAAehI,KAAKgf,UAAUhf,KAAKgf,OAAOmK,GAAG,CAAA;AAExD,UAAI,CAAC,KAAK2O,WAAU,KAAM,KAAK9+B,SAAS06B,OAAMrS,UAAUroB,MAAM;AAE5D,eAAO;UAAC;YACNmwB,GAAGkW;YACHrmC,MAAM,CAACqT,cAAc;AACnB,mBAAKrT,KAAKqT,SAAAA;YACZ;UACF;QAAE;;AAGJ,aAAO;QAAC;UACN8c,GAAGmW;UACHtmC,MAAM,CAACqT,cAAc;AACnB,iBAAK0xB,eAAc;AACnB,iBAAKI,SAAS9xB,SAAAA;AACd,iBAAK+yB,UAAS;UAChB;QACF;QAAG;UACDjW,GAAGoW;UACHvmC,MAAM,MAAM;AACV,iBAAK6lC,WAAU;UACjB;QACF;QAAG;UACD1V,GAAGkW;UACHrmC,MAAM,CAACqT,cAAc;AACnB,iBAAK0yB,WAAW1yB,SAAAA;UAClB;QACF;MAAE;IACJ;IAOAtI,wBAAwBvM,MAAM;AAC5B,YAAMy9B,QAAQ,KAAK59B,MAAM2rB,6BAA4B;AACrD,YAAMlM,SAAS,KAAKtU,OAAO;AAC3B,YAAM4f,SAAS,CAAA;AACf,UAAIrpB,IAAGuI;AAEP,WAAKvI,KAAI,GAAGuI,OAAO2zB,MAAMn8B,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AAC9C,cAAMqJ,OAAO6yB,MAAMl8B,EAAE;AACrB,YAAIqJ,KAAK0U,MAAO,MAAK,KAAK7T,OAAO,CAACzL,QAAQ4K,KAAK5K,SAASA,OAAO;AAC7D4qB,iBAAOroB,KAAKqI,IAAAA;;MAEhB;AACA,aAAOggB;IACT;IAOA6X,wBAAwB14B,QAAO;AAC7B,YAAMvB,OAAO,KAAKnB,QAAQ8R,MAAMkkB,WAAW,KAAK7qB,WAAWzI,MAAAA,CAAAA;AAC3D,aAAOuxB,OAAO9yB,KAAK6yB,IAAI;IACzB;IAKA2M,aAAa;AACX,YAAMC,WAAW,KAAKxF,wBAAwB,CAAA,EAAGjH;AACjD,cAAQ,KAAKxgB,aAAY,IAAK,KAAKqC,QAAQ,KAAKD,UAAU6qB;IAC5D;EACF;ACtqDe,MAAMC,gBAAN,MAAMA;IACnB7oC,YAAYW,MAAMmoC,OAAOxe,WAAU;AACjC,WAAK3pB,OAAOA;AACZ,WAAKmoC,QAAQA;AACb,WAAKxe,WAAWA;AAChB,WAAKtoB,QAAQmF,uBAAO4hC,OAAO,IAAI;IACjC;IAEAC,UAAUroC,MAAM;AACd,aAAOwG,OAAOqjB,UAAUye,cAAcxnC,KAAK,KAAKd,KAAK6pB,WAAW7pB,KAAK6pB,SAAS;IAChF;IAMA0e,SAAS9mC,MAAM;AACb,YAAM+mC,QAAQhiC,OAAOiiC,eAAehnC,IAAAA;AACpC,UAAIinC;AAEJ,UAAIC,kBAAkBH,KAAQ,GAAA;AAE5BE,sBAAc,KAAKH,SAASC,KAAAA;;AAG9B,YAAMnnC,QAAQ,KAAKA;AACnB,YAAMoK,KAAKhK,KAAKgK;AAChB,YAAM08B,QAAQ,KAAKA,QAAQ,MAAM18B;AAEjC,UAAI,CAACA,IAAI;AACP,cAAM,IAAIge,MAAM,6BAA6BhoB,IAAM;;AAGrD,UAAIgK,MAAMpK,OAAO;AAEf,eAAO8mC;;AAGT9mC,YAAMoK,EAAAA,IAAMhK;AACZmnC,uBAAiBnnC,MAAM0mC,OAAOO,WAAAA;AAC9B,UAAI,KAAK/e,UAAU;AACjBjjB,QAAAA,UAASijB,SAASloB,KAAKgK,IAAIhK,KAAK2a,SAAS;;AAG3C,aAAO+rB;IACT;IAMAnmC,IAAIyJ,IAAI;AACN,aAAO,KAAKpK,MAAMoK,EAAG;IACvB;IAKAo9B,WAAWpnC,MAAM;AACf,YAAMJ,QAAQ,KAAKA;AACnB,YAAMoK,KAAKhK,KAAKgK;AAChB,YAAM08B,QAAQ,KAAKA;AAEnB,UAAI18B,MAAMpK,OAAO;AACf,eAAOA,MAAMoK,EAAG;;AAGlB,UAAI08B,SAAS18B,MAAM/E,UAASyhC,KAAAA,GAAQ;AAClC,eAAOzhC,UAASyhC,KAAM,EAAC18B,EAAG;AAC1B,YAAI,KAAKke,UAAU;AACjB,iBAAOvN,UAAU3Q,EAAG;;;IAG1B;EACF;AAEA,WAASm9B,iBAAiBnnC,MAAM0mC,OAAOO,aAAa;AAElD,UAAMI,eAAeC,OAAMviC,uBAAO4hC,OAAO,IAAI,GAAG;MAC9CM,cAAchiC,UAAS1E,IAAI0mC,WAAAA,IAAe,CAAA;MAC1ChiC,UAAS1E,IAAImmC,KAAAA;MACb1mC,KAAKiF;IACN,CAAA;AAEDA,IAAAA,UAASvE,IAAIgmC,OAAOW,YAAAA;AAEpB,QAAIrnC,KAAKo2B,eAAe;AACtBmR,oBAAcb,OAAO1mC,KAAKo2B,aAAa;;AAGzC,QAAIp2B,KAAKugB,aAAa;AACpBtb,MAAAA,UAASuiC,SAASd,OAAO1mC,KAAKugB,WAAW;;EAE7C;AAEA,WAASgnB,cAAcb,OAAOe,QAAQ;AACpC1iC,WAAOC,KAAKyiC,MAAAA,EAAQ7oC,QAAQ8oC,CAAAA,aAAY;AACtC,YAAMC,gBAAgBD,SAASE,MAAM,GAAA;AACrC,YAAMC,aAAaF,cAAcvnC,IAAG;AACpC,YAAM0nC,cAAc;QAACpB;MAAM,EAAC1vB,OAAO2wB,aAAeI,EAAAA,KAAK,GAAA;AACvD,YAAMC,QAAQP,OAAOC,QAAS,EAACE,MAAM,GAAA;AACrC,YAAMK,aAAaD,MAAM5nC,IAAG;AAC5B,YAAM8nC,cAAcF,MAAMD,KAAK,GAAA;AAC/B9iC,MAAAA,UAASkjC,MAAML,aAAaD,YAAYK,aAAaD,UAAAA;IACvD,CAAA;EACF;AAEA,WAASf,kBAAkBH,OAAO;AAChC,WAAO,QAAQA,SAAS,cAAcA;EACxC;AC1GO,MAAMqB,WAAN,MAAMA;IACXxqC,cAAc;AACZ,WAAKyqC,cAAc,IAAI5B,cAAcx5B,mBAAmB,YAAY,IAAI;AACxE,WAAKiG,WAAW,IAAIuzB,cAActQ,UAAS,UAAA;AAC3C,WAAKvV,UAAU,IAAI6lB,cAAc1hC,QAAQ,SAAA;AACzC,WAAK6G,SAAS,IAAI66B,cAAchM,OAAO,QAAA;AAGvC,WAAK6N,mBAAmB;QAAC,KAAKD;QAAa,KAAKz8B;QAAQ,KAAKsH;MAAS;IACxE;IAKAnS,OAAOoV,MAAM;AACX,WAAKoyB,MAAM,YAAYpyB,IAAAA;IACzB;IAEA3U,UAAU2U,MAAM;AACd,WAAKoyB,MAAM,cAAcpyB,IAAAA;IAC3B;IAKAqyB,kBAAkBryB,MAAM;AACtB,WAAKoyB,MAAM,YAAYpyB,MAAM,KAAKkyB,WAAW;IAC/C;IAKAh6B,eAAe8H,MAAM;AACnB,WAAKoyB,MAAM,YAAYpyB,MAAM,KAAKjD,QAAQ;IAC5C;IAKAu1B,cAActyB,MAAM;AAClB,WAAKoyB,MAAM,YAAYpyB,MAAM,KAAKyK,OAAO;IAC3C;IAKA8nB,aAAavyB,MAAM;AACjB,WAAKoyB,MAAM,YAAYpyB,MAAM,KAAKvK,MAAM;IAC1C;IAMA+8B,cAAc3+B,IAAI;AAChB,aAAO,KAAK4+B,KAAK5+B,IAAI,KAAKq+B,aAAa,YAAA;IACzC;IAMAvgB,WAAW9d,IAAI;AACb,aAAO,KAAK4+B,KAAK5+B,IAAI,KAAKkJ,UAAU,SAAA;IACtC;IAMA21B,UAAU7+B,IAAI;AACZ,aAAO,KAAK4+B,KAAK5+B,IAAI,KAAK4W,SAAS,QAAA;IACrC;IAMAkoB,SAAS9+B,IAAI;AACX,aAAO,KAAK4+B,KAAK5+B,IAAI,KAAK4B,QAAQ,OAAA;IACpC;IAKAm9B,qBAAqB5yB,MAAM;AACzB,WAAKoyB,MAAM,cAAcpyB,MAAM,KAAKkyB,WAAW;IACjD;IAKAW,kBAAkB7yB,MAAM;AACtB,WAAKoyB,MAAM,cAAcpyB,MAAM,KAAKjD,QAAQ;IAC9C;IAKA+1B,iBAAiB9yB,MAAM;AACrB,WAAKoyB,MAAM,cAAcpyB,MAAM,KAAKyK,OAAO;IAC7C;IAKAsoB,gBAAgB/yB,MAAM;AACpB,WAAKoyB,MAAM,cAAcpyB,MAAM,KAAKvK,MAAM;IAC5C;IAKA28B,MAAMhkC,QAAQ4R,MAAMgzB,eAAe;AACjC;QAAIhzB,GAAAA;QAAMvX,QAAQwqC,CAAAA,QAAO;AACvB,cAAMC,MAAMF,iBAAiB,KAAKG,oBAAoBF,GAAAA;AACtD,YAAID,iBAAiBE,IAAIzC,UAAUwC,GAASC,KAAAA,QAAQ,KAAKzoB,WAAWwoB,IAAIp/B,IAAK;AAC3E,eAAKu/B,MAAMhlC,QAAQ8kC,KAAKD,GAAAA;eACnB;AAKL3Y,eAAK2Y,KAAKppC,CAAAA,SAAQ;AAOhB,kBAAMwpC,UAAUL,iBAAiB,KAAKG,oBAAoBtpC,IAAAA;AAC1D,iBAAKupC,MAAMhlC,QAAQilC,SAASxpC,IAAAA;UAC9B,CAAA;;MAEJ,CAAA;IACF;IAKAupC,MAAMhlC,QAAQsjB,WAAU4hB,WAAW;AACjC,YAAMC,cAAcC,YAAYplC,MAAAA;AAChClF,eAAKoqC,UAAU,WAAWC,WAAAA,GAAc,CAAA,GAAID,SAAAA;AAC5C5hB,MAAAA,UAAStjB,MAAAA,EAAQklC,SAAAA;AACjBpqC,eAAKoqC,UAAU,UAAUC,WAAAA,GAAc,CAAA,GAAID,SAAAA;IAC7C;IAKAH,oBAAoB/qC,MAAM;AACxB,eAASuB,KAAI,GAAGA,KAAI,KAAKwoC,iBAAiBzoC,QAAQC,MAAK;AACrD,cAAMupC,MAAM,KAAKf,iBAAiBxoC,EAAE;AACpC,YAAIupC,IAAIzC,UAAUroC,IAAO,GAAA;AACvB,iBAAO8qC;;MAEX;AAEA,aAAO,KAAKzoB;IACd;IAKAgoB,KAAK5+B,IAAIm/B,eAAe5qC,MAAM;AAC5B,YAAMyB,OAAOmpC,cAAc5oC,IAAIyJ,EAAAA;AAC/B,UAAIhK,SAAS9B,QAAW;AACtB,cAAM,IAAI8pB,MAAM,MAAMhe,KAAK,2BAA2BzL,OAAO,GAAK;;AAEpE,aAAOyB;IACT;EAEF;AAGA,MAAA,WAA+B,oBAAIooC,SAAW;ACtK/B,MAAMwB,gBAAN,MAAMA;IACnBhsC,cAAc;AACZ,WAAKisC,QAAQ3rC;IACf;IAYA4rC,OAAO1rC,OAAO2rC,MAAM5zB,MAAMtK,QAAQ;AAChC,UAAIk+B,SAAS,cAAc;AACzB,aAAKF,QAAQ,KAAKG,mBAAmB5rC,OAAO,IAAI;AAChD,aAAKD,QAAQ,KAAK0rC,OAAOzrC,OAAO,SAAA;;AAGlC,UAAI,KAAKyrC,UAAU3rC,QAAW;AAC5B;;AAGF,YAAMqiB,eAAc1U,SAAS,KAAKo+B,aAAa7rC,KAAAA,EAAOyN,OAAOA,MAAU,IAAA,KAAKo+B,aAAa7rC,KAAM;AAC/F,YAAM+qB,SAAS,KAAKhrB,QAAQoiB,cAAaniB,OAAO2rC,MAAM5zB,IAAAA;AAEtD,UAAI4zB,SAAS,gBAAgB;AAC3B,aAAK5rC,QAAQoiB,cAAaniB,OAAO,MAAA;AACjC,aAAKD,QAAQ,KAAK0rC,OAAOzrC,OAAO,WAAA;AAChC,aAAKyrC,QAAQ3rC;;AAEf,aAAOirB;IACT;IAKAhrB,QAAQoiB,cAAaniB,OAAO2rC,MAAM5zB,MAAM;AACtCA,aAAOA,QAAQ,CAAA;AACf,iBAAW+zB,cAAc3pB,cAAa;AACpC,cAAM4pB,UAASD,WAAWC;AAC1B,cAAM5lC,SAAS4lC,QAAOJ,IAAK;AAC3B,cAAM3c,SAAS;UAAChvB;UAAO+X;UAAM+zB,WAAWtkC;QAAQ;AAChD,YAAIwkC,SAAa7lC,QAAQ6oB,QAAQ+c,OAAAA,MAAY,SAASh0B,KAAKk0B,YAAY;AACrE,iBAAO;;MAEX;AAEA,aAAO;IACT;IAEAC,aAAa;AAMX,UAAI,CAACpyB,cAAc,KAAKrB,MAAM,GAAG;AAC/B,aAAK0zB,YAAY,KAAK1zB;AACtB,aAAKA,SAAS3Y;;IAElB;IAMA+rC,aAAa7rC,OAAO;AAClB,UAAI,KAAKyY,QAAQ;AACf,eAAO,KAAKA;;AAGd,YAAM0J,eAAc,KAAK1J,SAAS,KAAKmzB,mBAAmB5rC,KAAAA;AAE1D,WAAKosC,oBAAoBpsC,KAAAA;AAEzB,aAAOmiB;IACT;IAEAypB,mBAAmB5rC,OAAOuI,KAAK;AAC7B,YAAMlC,UAASrG,SAASA,MAAMqG;AAC9B,YAAMmB,UAAUmJ,eAAetK,QAAOmB,WAAWnB,QAAOmB,QAAQgb,SAAS,CAAA,CAAC;AAC1E,YAAMA,WAAU6pB,WAAWhmC,OAAAA;AAE3B,aAAOmB,YAAY,SAAS,CAACe,MAAM,CAAA,IAAK+jC,kBAAkBtsC,OAAOwiB,UAAShb,SAASe,GAAI;IACzF;IAMA6jC,oBAAoBpsC,OAAO;AACzB,YAAMusC,sBAAsB,KAAKJ,aAAa,CAAA;AAC9C,YAAMhqB,eAAc,KAAK1J;AACzB,YAAM2R,QAAO,CAACrR,IAAGrP,OAAMqP,GAAEtL,OAAOxE,CAAAA,MAAK,CAACS,GAAE8iC,KAAKtjC,CAAAA,OAAKD,EAAE8iC,OAAOngC,OAAO1C,GAAE6iC,OAAOngC,EAAE,CAAA;AAC7E,WAAK7L,QAAQqqB,MAAKmiB,qBAAqBpqB,YAAAA,GAAcniB,OAAO,MAAA;AAC5D,WAAKD,QAAQqqB,MAAKjI,cAAaoqB,mBAAAA,GAAsBvsC,OAAO,OAAA;IAC9D;EACF;AAKA,WAASqsC,WAAWhmC,SAAQ;AAC1B,UAAMomC,WAAW,CAAA;AACjB,UAAMjqB,WAAU,CAAA;AAChB,UAAM5b,OAAOD,OAAOC,KAAK6iB,SAASjH,QAAQhhB,KAAK;AAC/C,aAASE,KAAI,GAAGA,KAAIkF,KAAKnF,QAAQC,MAAK;AACpC8gB,MAAAA,SAAQ9f,KAAK+mB,SAASghB,UAAU7jC,KAAKlF,EAAE,CAAA,CAAA;IACzC;AAEA,UAAMgrC,QAAQrmC,QAAOmc,WAAW,CAAA;AAChC,aAAS9gB,KAAI,GAAGA,KAAIgrC,MAAMjrC,QAAQC,MAAK;AACrC,YAAMqqC,UAASW,MAAMhrC,EAAE;AAEvB,UAAI8gB,SAAQvE,QAAQ8tB,OAAAA,MAAY,IAAI;AAClCvpB,QAAAA,SAAQ9f,KAAKqpC,OAAAA;AACbU,iBAASV,QAAOngC,EAAE,IAAI;;IAE1B;AAEA,WAAO;MAAC4W,SAAAA;MAASiqB;IAAQ;EAC3B;AAEA,WAASE,QAAQnlC,SAASe,KAAK;AAC7B,QAAI,CAACA,OAAOf,YAAY,OAAO;AAC7B,aAAO;;AAET,QAAIA,YAAY,MAAM;AACpB,aAAO,CAAA;;AAET,WAAOA;EACT;AAEA,WAAS8kC,kBAAkBtsC,OAAO,EAACwiB,SAAAA,UAASiqB,SAAQ,GAAGjlC,SAASe,KAAK;AACnE,UAAMwiB,SAAS,CAAA;AACf,UAAM1V,UAAUrV,MAAM2S,WAAU;AAEhC,eAAWo5B,WAAUvpB,UAAS;AAC5B,YAAM5W,KAAKmgC,QAAOngC;AAClB,YAAMjD,OAAOgkC,QAAQnlC,QAAQoE,EAAAA,GAAKrD,GAAAA;AAClC,UAAII,SAAS,MAAM;AACjB;;AAEFoiB,aAAOroB,KAAK;QACVqpC,QAAAA;QACAvkC,SAASolC,WAAW5sC,MAAMqG,QAAQ;UAAC0lC,QAAAA;UAAQW,OAAOD,SAAS7gC,EAAG;QAAA,GAAGjD,MAAM0M,OAAAA;MACzE,CAAA;IACF;AAEA,WAAO0V;EACT;AAEA,WAAS6hB,WAAWvmC,SAAQ,EAAC0lC,QAAAA,SAAQW,MAAK,GAAG/jC,MAAM0M,SAAS;AAC1D,UAAMzO,OAAOP,QAAOwmC,gBAAgBd,OAAAA;AACpC,UAAMv5B,SAASnM,QAAOoM,gBAAgB9J,MAAM/B,IAAAA;AAC5C,QAAI8lC,SAASX,QAAOllC,UAAU;AAE5B2L,aAAO9P,KAAKqpC,QAAOllC,QAAQ;;AAE7B,WAAOR,QAAOqM,eAAeF,QAAQ6C,SAAS;MAAC;OAAK;MAElDy3B,YAAY;MACZC,WAAW;MACXC,SAAS;IACX,CAAA;EACF;ACvLO,WAASC,aAAa9sC,MAAMqH,SAAS;AAC1C,UAAM0lC,kBAAkBrmC,UAAS0K,SAASpR,IAAAA,KAAS,CAAA;AACnD,UAAMgtC,kBAAkB3lC,QAAQ+J,YAAY,CAAA,GAAIpR,IAAK,KAAI,CAAA;AACzD,WAAOgtC,eAAen8B,aAAaxJ,QAAQwJ,aAAak8B,gBAAgBl8B,aAAa;EACvF;AAEA,WAASo8B,0BAA0BxhC,IAAIoF,WAAW;AAChD,QAAI7F,OAAOS;AACX,QAAIA,OAAO,WAAW;AACpBT,aAAO6F;eACEpF,OAAO,WAAW;AAC3BT,aAAO6F,cAAc,MAAM,MAAM;;AAEnC,WAAO7F;EACT;AAEA,WAASkiC,0BAA0BliC,MAAM6F,WAAW;AAClD,WAAO7F,SAAS6F,YAAY,YAAY;EAC1C;AAEA,WAASs8B,cAAc1hC,IAAI;AACzB,QAAIA,OAAO,OAAOA,OAAO,OAAOA,OAAO,KAAK;AAC1C,aAAOA;;EAEX;AAEA,WAAS2hC,iBAAiB9hB,UAAU;AAClC,QAAIA,aAAa,SAASA,aAAa,UAAU;AAC/C,aAAO;;AAET,QAAIA,aAAa,UAAUA,aAAa,SAAS;AAC/C,aAAO;;EAEX;AAEO,WAAS+hB,cAAc5hC,OAAO6hC,cAAc;AACjD,QAAIH,cAAc1hC,EAAK,GAAA;AACrB,aAAOA;;AAET,eAAWjD,QAAQ8kC,cAAc;AAC/B,YAAMtiC,OAAOxC,KAAKwC,QACboiC,iBAAiB5kC,KAAK8iB,QAAQ,KAC9B7f,GAAGnK,SAAS,KAAK6rC,cAAc1hC,GAAG,CAAA,EAAG8hC,YAAW,CAAA;AACrD,UAAIviC,MAAM;AACR,eAAOA;;IAEX;AACA,UAAM,IAAIye,MAAM,6BAA6Bhe,EAAG,qDAAoD;EACtG;AAEA,WAAS+hC,mBAAmB/hC,IAAIT,MAAM2C,SAAS;AAC7C,QAAIA,QAAQ3C,OAAO,QAAA,MAAcS,IAAI;AACnC,aAAO;QAACT;MAAI;;EAEhB;AAEA,WAASyiC,yBAAyBhiC,IAAIvF,SAAQ;AAC5C,QAAIA,QAAOyE,QAAQzE,QAAOyE,KAAKyG,UAAU;AACvC,YAAMs8B,UAAUxnC,QAAOyE,KAAKyG,SAAS9D,OAAO,CAACqgC,OAAMA,GAAEp9B,YAAY9E,MAAMkiC,GAAEj9B,YAAYjF,EAAAA;AACrF,UAAIiiC,QAAQpsC,QAAQ;AAClB,eAAOksC,mBAAmB/hC,IAAI,KAAKiiC,QAAQ,CAAA,CAAE,KAAKF,mBAAmB/hC,IAAI,KAAKiiC,QAAQ,CAAE,CAAA;;;AAG5F,WAAO,CAAA;EACT;AAEA,WAASE,iBAAiB1nC,SAAQmB,SAAS;AACzC,UAAMwmC,gBAAgBzxB,UAAUlW,QAAOlG,IAAI,KAAK;MAACqN,QAAQ,CAAA;IAAE;AAC3D,UAAMygC,eAAezmC,QAAQgG,UAAU,CAAA;AACvC,UAAM0gC,iBAAiBjB,aAAa5mC,QAAOlG,MAAMqH,OAAAA;AACjD,UAAMgG,UAAS7G,uBAAO4hC,OAAO,IAAI;AAGjC5hC,WAAOC,KAAKqnC,YAAAA,EAAcztC,QAAQoL,CAAAA,OAAM;AACtC,YAAMuiC,YAAYF,aAAariC,EAAG;AAClC,UAAI,CAACnF,SAAS0nC,SAAY,GAAA;AACxB,eAAO/9B,QAAQg+B,MAAM,0CAA0CxiC,EAAAA,EAAI;;AAErE,UAAIuiC,UAAUE,QAAQ;AACpB,eAAOj+B,QAAQC,KAAK,kDAAkDzE,EAAAA,EAAI;;AAE5E,YAAMT,OAAOqiC,cAAc5hC,IAAIuiC,WAAWP,yBAAyBhiC,IAAIvF,OAASQ,GAAAA,UAAS2G,OAAO2gC,UAAUhuC,IAAI,CAAC;AAC/G,YAAMmuC,YAAYjB,0BAA0BliC,MAAM+iC,cAAAA;AAClD,YAAMK,sBAAsBP,cAAcxgC,UAAU,CAAA;AACpDA,MAAAA,QAAO5B,EAAAA,IAAM4iC,QAAQ7nC,uBAAO4hC,OAAO,IAAI,GAAG;QAAC;UAACp9B;QAAI;QAAGgjC;QAAWI,oBAAoBpjC,IAAK;QAAEojC,oBAAoBD,SAAU;MAAC,CAAA;IAC1H,CAAA;AAGAjoC,IAAAA,QAAOyE,KAAKyG,SAAS/Q,QAAQsN,CAAAA,YAAW;AACtC,YAAM3N,OAAO2N,QAAQ3N,QAAQkG,QAAOlG;AACpC,YAAM6Q,YAAYlD,QAAQkD,aAAai8B,aAAa9sC,MAAMqH,OAAAA;AAC1D,YAAM0lC,kBAAkB3wB,UAAUpc,IAAAA,KAAS,CAAA;AAC3C,YAAMouC,sBAAsBrB,gBAAgB1/B,UAAU,CAAA;AACtD7G,aAAOC,KAAK2nC,mBAAAA,EAAqB/tC,QAAQiuC,CAAAA,cAAa;AACpD,cAAMtjC,OAAOiiC,0BAA0BqB,WAAWz9B,SAAAA;AAClD,cAAMpF,KAAKkC,QAAQ3C,OAAO,QAAA,KAAaA;AACvCqC,QAAAA,QAAO5B,EAAG,IAAG4B,QAAO5B,EAAAA,KAAOjF,uBAAO4hC,OAAO,IAAI;AAC7CiG,gBAAQhhC,QAAO5B,EAAAA,GAAK;UAAC;YAACT;UAAI;UAAG8iC,aAAariC,EAAG;UAAE2iC,oBAAoBE,SAAU;QAAC,CAAA;MAChF,CAAA;IACF,CAAA;AAGA9nC,WAAOC,KAAK4G,OAAAA,EAAQhN,QAAQyG,CAAAA,QAAO;AACjC,YAAMwB,QAAQ+E,QAAOvG,GAAI;AACzBunC,cAAQ/lC,OAAO;QAAC5B,UAAS2G,OAAO/E,MAAMtI,IAAI;QAAG0G,UAAS4B;MAAM,CAAA;IAC9D,CAAA;AAEA,WAAO+E;EACT;AAEA,WAASkhC,YAAYroC,SAAQ;AAC3B,UAAMmB,UAAUnB,QAAOmB,YAAYnB,QAAOmB,UAAU,CAAA;AAEpDA,YAAQgb,UAAU7R,eAAenJ,QAAQgb,SAAS,CAAA,CAAC;AACnDhb,YAAQgG,SAASugC,iBAAiB1nC,SAAQmB,OAAAA;EAC5C;AAEA,WAASmnC,SAAS7jC,MAAM;AACtBA,WAAOA,QAAQ,CAAA;AACfA,SAAKyG,WAAWzG,KAAKyG,YAAY,CAAA;AACjCzG,SAAKwI,SAASxI,KAAKwI,UAAU,CAAA;AAC7B,WAAOxI;EACT;AAEA,WAAS8jC,WAAWvoC,SAAQ;AAC1BA,IAAAA,UAASA,WAAU,CAAA;AACnBA,IAAAA,QAAOyE,OAAO6jC,SAAStoC,QAAOyE,IAAI;AAElC4jC,gBAAYroC,OAAAA;AAEZ,WAAOA;EACT;AAEA,MAAMwoC,WAAW,oBAAIlvC,IAAAA;AACrB,MAAMmvC,aAAa,oBAAIC,IAAAA;AAEvB,WAASC,WAAWv5B,UAAUw5B,UAAU;AACtC,QAAIroC,OAAOioC,SAAS1sC,IAAIsT,QAAAA;AACxB,QAAI,CAAC7O,MAAM;AACTA,aAAOqoC,SAAAA;AACPJ,eAASvsC,IAAImT,UAAU7O,IAAAA;AACvBkoC,iBAAWnsC,IAAIiE,IAAAA;;AAEjB,WAAOA;EACT;AAEA,MAAMsoC,aAAa,CAAC5sC,MAAKua,KAAK5V,QAAQ;AACpC,UAAM0B,OAAOgL,iBAAiBkJ,KAAK5V,GAAAA;AACnC,QAAI0B,SAAS7I,QAAW;AACtBwC,MAAAA,KAAIK,IAAIgG,IAAAA;;EAEZ;AAEe,MAAMwmC,UAAN,MAAMA;IACnB3vC,YAAY6G,SAAQ;AAClB,WAAK+oC,UAAUR,WAAWvoC,OAAAA;AAC1B,WAAKgpC,cAAc,oBAAI1vC,IAAAA;AACvB,WAAK2vC,iBAAiB,oBAAI3vC,IAAAA;IAC5B;IAEA,IAAI4vC,WAAW;AACb,aAAO,KAAKH,QAAQG;IACtB;IAEA,IAAIpvC,OAAO;AACT,aAAO,KAAKivC,QAAQjvC;IACtB;IAEA,IAAIA,KAAKA,MAAM;AACb,WAAKivC,QAAQjvC,OAAOA;IACtB;IAEA,IAAI2K,OAAO;AACT,aAAO,KAAKskC,QAAQtkC;IACtB;IAEA,IAAIA,KAAKA,MAAM;AACb,WAAKskC,QAAQtkC,OAAO6jC,SAAS7jC,IAAAA;IAC/B;IAEA,IAAItD,UAAU;AACZ,aAAO,KAAK4nC,QAAQ5nC;IACtB;IAEA,IAAIA,QAAQA,SAAS;AACnB,WAAK4nC,QAAQ5nC,UAAUA;IACzB;IAEA,IAAIgb,UAAU;AACZ,aAAO,KAAK4sB,QAAQ5sB;IACtB;IAEA9c,SAAS;AACP,YAAMW,UAAS,KAAK+oC;AACpB,WAAKI,WAAU;AACfd,kBAAYroC,OAAAA;IACd;IAEAmpC,aAAa;AACX,WAAKH,YAAYI,MAAK;AACtB,WAAKH,eAAeG,MAAK;IAC3B;IAQAl9B,iBAAiBm9B,aAAa;AAC5B,aAAOV,WAAWU,aAChB,MAAM;QAAC;UACL,YAAYA,WAAAA;UACZ;QACD;MAAC,CAAA;IACN;IASAv5B,0BAA0Bu5B,aAAax5B,YAAY;AACjD,aAAO84B,WAAW,GAAGU,WAAAA,eAA0Bx5B,UAAAA,IAC7C,MAAM;QACJ;UACE,YAAYw5B,WAAAA,gBAA2Bx5B,UAAAA;UACvC,eAAeA,UAAAA;QAChB;QAED;UACE,YAAYw5B,WAAAA;UACZ;QACD;MACF,CAAA;IACL;IAUA95B,wBAAwB85B,aAAan6B,cAAa;AAChD,aAAOy5B,WAAW,GAAGU,WAAAA,IAAen6B,YAAAA,IAClC,MAAM;QAAC;UACL,YAAYm6B,WAAAA,aAAwBn6B,YAAAA;UACpC,YAAYm6B,WAAAA;UACZ,YAAYn6B,YAAAA;UACZ;QACD;MAAC,CAAA;IACN;IAOAs3B,gBAAgBd,SAAQ;AACtB,YAAMngC,KAAKmgC,QAAOngC;AAClB,YAAMzL,OAAO,KAAKA;AAClB,aAAO6uC,WAAW,GAAG7uC,IAAAA,WAAeyL,EAAAA,IAClC,MAAM;QAAC;UACL,WAAWA,EAAAA;aACRmgC,QAAO4D,0BAA0B,CAAA;QACrC;MAAC,CAAA;IACN;IAKAC,cAAcC,WAAWC,YAAY;AACnC,YAAMT,cAAc,KAAKA;AACzB,UAAI75B,SAAQ65B,YAAYltC,IAAI0tC,SAAAA;AAC5B,UAAI,CAACr6B,UAASs6B,YAAY;AACxBt6B,QAAAA,SAAQ,oBAAI7V,IAAAA;AACZ0vC,oBAAY/sC,IAAIutC,WAAWr6B,MAAAA;;AAE7B,aAAOA;IACT;IAQA/C,gBAAgBo9B,WAAWE,UAAUD,YAAY;AAC/C,YAAM,EAACtoC,SAASrH,KAAI,IAAI;AACxB,YAAMqV,SAAQ,KAAKo6B,cAAcC,WAAWC,UAAAA;AAC5C,YAAMvhC,SAASiH,OAAMrT,IAAI4tC,QAAAA;AACzB,UAAIxhC,QAAQ;AACV,eAAOA;;AAGT,YAAMiE,SAAS,oBAAIu8B,IAAAA;AAEnBgB,eAASvvC,QAAQoG,CAAAA,SAAQ;AACvB,YAAIipC,WAAW;AACbr9B,iBAAO7P,IAAIktC,SAAAA;AACXjpC,eAAKpG,QAAQyG,CAAAA,QAAOioC,WAAW18B,QAAQq9B,WAAW5oC,GAAAA,CAAAA;;AAEpDL,aAAKpG,QAAQyG,CAAAA,QAAOioC,WAAW18B,QAAQhL,SAASP,GAAAA,CAAAA;AAChDL,aAAKpG,QAAQyG,CAAAA,QAAOioC,WAAW18B,QAAQ+J,UAAUpc,IAAAA,KAAS,CAAA,GAAI8G,GAAAA,CAAAA;AAC9DL,aAAKpG,QAAQyG,CAAAA,QAAOioC,WAAW18B,QAAQ3L,WAAUI,GAAAA,CAAAA;AACjDL,aAAKpG,QAAQyG,CAAAA,QAAOioC,WAAW18B,QAAQ2P,aAAalb,GAAAA,CAAAA;MACtD,CAAA;AAEA,YAAM8mB,QAAQziB,MAAM7H,KAAK+O,MAAAA;AACzB,UAAIub,MAAMtsB,WAAW,GAAG;AACtBssB,cAAMrrB,KAAKiE,uBAAO4hC,OAAO,IAAI,CAAA;;AAE/B,UAAIuG,WAAWlsC,IAAImtC,QAAW,GAAA;AAC5Bv6B,QAAAA,OAAMlT,IAAIytC,UAAUhiB,KAAAA;;AAEtB,aAAOA;IACT;IAMAiiB,oBAAoB;AAClB,YAAM,EAACxoC,SAASrH,KAAI,IAAI;AAExB,aAAO;QACLqH;QACA+U,UAAUpc,IAAK,KAAI,CAAA;QACnB0G,UAAS0K,SAASpR,IAAK,KAAI,CAAA;QAC3B;UAACA;QAAI;QACL0G;QACAsb;MACD;IACH;IASApM,oBAAoBvD,QAAQsD,QAAOT,SAASQ,WAAW;MAAC;OAAK;AAC3D,YAAMkV,SAAS;QAACnjB,SAAS;MAAI;AAC7B,YAAM,EAACqoC,UAAUC,YAAW,IAAIC,YAAY,KAAKb,gBAAgB98B,QAAQqD,QAAAA;AACzE,UAAIrO,UAAUyoC;AACd,UAAIG,YAAYH,UAAUn6B,MAAQ,GAAA;AAChCiV,eAAOnjB,UAAU;AACjByN,kBAAUg7B,YAAWh7B,OAAWA,IAAAA,QAAAA,IAAYA;AAE5C,cAAMi7B,cAAc,KAAK59B,eAAeF,QAAQ6C,SAAS66B,WAAAA;AACzD1oC,kBAAU+oC,eAAeN,UAAU56B,SAASi7B,WAAAA;;AAG9C,iBAAW/rC,QAAQuR,QAAO;AACxBiV,eAAOxmB,IAAAA,IAAQiD,QAAQjD,IAAK;MAC9B;AACA,aAAOwmB;IACT;IAQArY,eAAeF,QAAQ6C,SAASQ,WAAW;MAAC;IAAG,GAAE26B,oBAAoB;AACnE,YAAM,EAACP,SAAAA,IAAYE,YAAY,KAAKb,gBAAgB98B,QAAQqD,QAAAA;AAC5D,aAAOpP,SAAS4O,OACZk7B,IAAAA,eAAeN,UAAU56B,SAASvV,QAAW0wC,kBAAAA,IAC7CP;IACN;EACF;AAEA,WAASE,YAAYM,eAAej+B,QAAQqD,UAAU;AACpD,QAAIL,SAAQi7B,cAActuC,IAAIqQ,MAAAA;AAC9B,QAAI,CAACgD,QAAO;AACVA,MAAAA,SAAQ,oBAAI7V,IAAAA;AACZ8wC,oBAAcnuC,IAAIkQ,QAAQgD,MAAAA;;AAE5B,UAAMC,WAAWI,SAAS8zB,KAAI;AAC9B,QAAIp7B,SAASiH,OAAMrT,IAAIsT,QAAAA;AACvB,QAAI,CAAClH,QAAQ;AACX,YAAM0hC,WAAWS,gBAAgBl+B,QAAQqD,QAAAA;AACzCtH,eAAS;QACP0hC;QACAC,aAAar6B,SAASpI,OAAOkjC,CAAAA,OAAK,CAACA,GAAEjD,YAAW,EAAG9e,SAAS,OAAA,CAAA;MAC9D;AACApZ,MAAAA,OAAMlT,IAAImT,UAAUlH,MAAAA;;AAEtB,WAAOA;EACT;AAEA,MAAMqiC,cAAc1oC,CAAAA,UAASzB,SAASyB,KAAAA,KACjCvB,OAAOK,oBAAoBkB,KAAOskC,EAAAA,KAAK,CAACvlC,QAAQopC,YAAWnoC,MAAMjB,GAAI,CAAA,CAAA;AAE1E,WAASmpC,YAAYlZ,OAAOphB,QAAO;AACjC,UAAM,EAAC+6B,cAAcC,YAAW,IAAIjF,aAAa3U,KAAAA;AAEjD,eAAW3yB,QAAQuR,QAAO;AACxB,YAAMg3B,aAAa+D,aAAatsC,IAAAA;AAChC,YAAMwoC,YAAY+D,YAAYvsC,IAAAA;AAC9B,YAAM2D,SAAS6kC,aAAaD,eAAe5V,MAAM3yB,IAAK;AACtD,UAAKuoC,eAAeuD,YAAWnoC,KAAAA,KAAU0oC,YAAY1oC,KAAK,MACpD6kC,aAAa5lC,QAAQe,KAAS,GAAA;AAClC,eAAO;;IAEX;AACA,WAAO;EACT;;AC9YA,MAAM6oC,kBAAkB;IAAC;IAAO;IAAU;IAAQ;IAAS;EAAY;AACvE,WAASC,qBAAqBvlB,UAAUtgB,MAAM;AAC5C,WAAOsgB,aAAa,SAASA,aAAa,YAAaslB,gBAAgB9yB,QAAQwN,QAAAA,MAAc,MAAMtgB,SAAS;EAC9G;AAEA,WAAS8lC,cAAcC,IAAIC,KAAI;AAC7B,WAAO,SAASp4B,IAAGrP,IAAG;AACpB,aAAOqP,GAAEm4B,EAAG,MAAKxnC,GAAEwnC,EAAAA,IACfn4B,GAAEo4B,GAAAA,IAAMznC,GAAEynC,GAAAA,IACVp4B,GAAEm4B,EAAG,IAAGxnC,GAAEwnC,EAAG;IACnB;EACF;AAEA,WAASE,qBAAqB/7B,SAAS;AACrC,UAAMrV,QAAQqV,QAAQrV;AACtB,UAAM0G,mBAAmB1G,MAAMwH,QAAQV;AAEvC9G,UAAM+/B,cAAc,aAAA;AACpBiM,aAAatlC,oBAAoBA,iBAAiB2qC,YAAY;MAACh8B;OAAUrV,KAAAA;EAC3E;AAEA,WAASsxC,oBAAoBj8B,SAAS;AACpC,UAAMrV,QAAQqV,QAAQrV;AACtB,UAAM0G,mBAAmB1G,MAAMwH,QAAQV;AACvCklC,aAAatlC,oBAAoBA,iBAAiB6qC,YAAY;MAACl8B;OAAUrV,KAAAA;EAC3E;AAMA,WAASwxC,UAAU5vC,MAAM;AACvB,QAAIi2B,gBAAAA,KAAqB,OAAOj2B,SAAS,UAAU;AACjDA,aAAO+zB,SAAS8b,eAAe7vC,IAAAA;IACjC,WAAWA,QAAQA,KAAKH,QAAQ;AAE9BG,aAAOA,KAAK,CAAE;;AAGhB,QAAIA,QAAQA,KAAK8wB,QAAQ;AAEvB9wB,aAAOA,KAAK8wB;;AAEd,WAAO9wB;EACT;AAEA,MAAM8vC,YAAY,CAAA;AAClB,MAAMC,WAAW,CAAC1qC,QAAQ;AACxB,UAAMyrB,SAAS8e,UAAUvqC,GAAAA;AACzB,WAAON,OAAOW,OAAOoqC,SAAAA,EAAWjkC,OAAO,CAACmkC,OAAMA,GAAElf,WAAWA,MAAAA,EAAQ1wB,IAAG;EACxE;AAEA,WAAS6vC,gBAAgBh1B,KAAK/b,QAAO2W,MAAM;AACzC,UAAM7Q,OAAOD,OAAOC,KAAKiW,GAAAA;AACzB,eAAW5V,OAAOL,MAAM;AACtB,YAAMkrC,SAAS,CAAC7qC;AAChB,UAAI6qC,UAAUhxC,QAAO;AACnB,cAAMoH,QAAQ2U,IAAI5V,GAAI;AACtB,eAAO4V,IAAI5V,GAAI;AACf,YAAIwQ,OAAO,KAAKq6B,SAAShxC,QAAO;AAC9B+b,cAAIi1B,SAASr6B,IAAAA,IAAQvP;;;IAG3B;EACF;AASA,WAAS6pC,mBAAmB/tB,IAAGguB,WAAWC,aAAaC,SAAS;AAC9D,QAAI,CAACD,eAAejuB,GAAE7jB,SAAS,YAAY;AACzC,aAAO;;AAET,QAAI+xC,SAAS;AACX,aAAOF;;AAET,WAAOhuB;EACT;AAEA,MAAMmuB,QAAN,MAAMA;IAEJ,OAAOtrC,WAAWA;IAClB,OAAO6qC,YAAYA;IACnB,OAAOn1B,YAAYA;IACnB,OAAOkN,WAAWA;IAClB,OAAO2oB,UAAUA;IACjB,OAAOT,WAAWA;IAElB,OAAOjJ,YAAYlnC,OAAO;AACxBioB,eAAS9mB,IAAOnB,GAAAA,KAAAA;AAChB6wC,wBAAAA;IACF;IAEA,OAAOrJ,cAAcxnC,OAAO;AAC1BioB,eAASrmB,OAAU5B,GAAAA,KAAAA;AACnB6wC,wBAAAA;IACF;IAGA7yC,YAAYoC,MAAM0wC,YAAY;AAC5B,YAAMjsC,UAAS,KAAKA,SAAS,IAAI8oC,QAAOmD,UAAAA;AACxC,YAAMC,gBAAgBf,UAAU5vC,IAAAA;AAChC,YAAM4wC,gBAAgBb,SAASY,aAAAA;AAC/B,UAAIC,eAAe;AACjB,cAAM,IAAI5oB,MACR,8CAA+C4oB,cAAc5mC,KAAK,oDAClB4mC,cAAc9f,OAAO9mB,KAAK,kBAC1E;;AAGJ,YAAMpE,UAAUnB,QAAOqM,eAAerM,QAAO2pC,kBAAiB,GAAI,KAAKr9B,WAAU,CAAA;AAEjF,WAAK48B,WAAW,KAAKlpC,QAAOkpC,YAAY3X,gBAAgB2a,aAAa,GAAA;AACrE,WAAKhD,SAASrc,aAAa7sB,OAAAA;AAE3B,YAAMgP,UAAU,KAAKk6B,SAAS9c,eAAe8f,eAAe/qC,QAAQ+a,WAAW;AAC/E,YAAMmQ,SAASrd,WAAWA,QAAQqd;AAClC,YAAMnV,SAASmV,UAAUA,OAAOnV;AAChC,YAAMC,QAAQkV,UAAUA,OAAOlV;AAE/B,WAAK5R,KAAK6mC,IAAAA;AACV,WAAKxjC,MAAMoG;AACX,WAAKqd,SAASA;AACd,WAAKlV,QAAQA;AACb,WAAKD,SAASA;AACd,WAAKm1B,WAAWlrC;AAIhB,WAAKmrC,eAAe,KAAKpwB;AACzB,WAAKsP,UAAU,CAAA;AACf,WAAK+gB,YAAY,CAAA;AACjB,WAAK7lC,UAAUjN;AACf,WAAKwuB,QAAQ,CAAA;AACb,WAAK+H,0BAA0Bv2B;AAC/B,WAAKkV,YAAYlV;AACjB,WAAK+B,UAAU,CAAA;AACf,WAAKgxC,aAAa/yC;AAClB,WAAKgzC,aAAa,CAAA;AAElB,WAAKC,uBAAuBjzC;AAC5B,WAAKkzC,kBAAkB,CAAA;AACvB,WAAKxlC,SAAS,CAAA;AACd,WAAKylC,WAAW,IAAIzH,cAAAA;AACpB,WAAKjU,WAAW,CAAA;AAChB,WAAK2b,iBAAiB,CAAA;AACtB,WAAKC,WAAW;AAChB,WAAK38B,sBAAsB1W;AAC3B,WAAK+P,WAAW/P;AAChB,WAAKszC,YAAYC,UAAS9oC,CAAAA,SAAQ,KAAK7E,OAAO6E,IAAO/C,GAAAA,QAAQ8rC,eAAe,CAAA;AAC5E,WAAKt7B,eAAe,CAAA;AAGpB05B,gBAAU,KAAK9lC,EAAE,IAAI;AAErB,UAAI,CAACyJ,WAAW,CAACqd,QAAQ;AAKvBtiB,gBAAQg+B,MAAM,mEAAA;AACd;;AAGF/lC,eAAS9F,OAAO,MAAM,YAAY6uC,oBAAAA;AAClC/oC,eAAS9F,OAAO,MAAM,YAAY+uC,mBAAAA;AAElC,WAAKiC,YAAW;AAChB,UAAI,KAAKJ,UAAU;AACjB,aAAKztC,OAAM;;IAEf;IAEA,IAAI6c,cAAc;AAChB,YAAM,EAAC/a,SAAS,EAAC+a,aAAaixB,oBAAAA,GAAsBh2B,OAAOD,QAAQo1B,aAAY,IAAI;AACnF,UAAI,CAAC74B,cAAcyI,WAAc,GAAA;AAE/B,eAAOA;;AAGT,UAAIixB,uBAAuBb,cAAc;AAEvC,eAAOA;;AAIT,aAAOp1B,SAASC,QAAQD,SAAS;IACnC;IAEA,IAAIzS,OAAO;AACT,aAAO,KAAKzE,OAAOyE;IACrB;IAEA,IAAIA,KAAKA,MAAM;AACb,WAAKzE,OAAOyE,OAAOA;IACrB;IAEA,IAAItD,UAAU;AACZ,aAAO,KAAKkrC;IACd;IAEA,IAAIlrC,QAAQA,SAAS;AACnB,WAAKnB,OAAOmB,UAAUA;IACxB;IAEA,IAAIiiB,WAAW;AACb,aAAOA;IACT;IAKA8pB,cAAc;AAEZ,WAAKxT,cAAc,YAAA;AAEnB,UAAI,KAAKv4B,QAAQisC,YAAY;AAC3B,aAAKrd,OAAM;aACN;AACLsd,oBAAY,MAAM,KAAKlsC,QAAQ2uB,gBAAgB;;AAGjD,WAAKwd,WAAU;AAGf,WAAK5T,cAAc,WAAA;AAEnB,aAAO;IACT;IAEA0P,QAAQ;AACNmE,kBAAY,KAAKlhB,QAAQ,KAAKzjB,GAAG;AACjC,aAAO;IACT;IAEA/L,OAAO;AACLmF,eAASnF,KAAK,IAAI;AAClB,aAAO;IACT;IAOAkzB,OAAO5Y,OAAOD,QAAQ;AACpB,UAAI,CAAClV,SAAS9G,QAAQ,IAAI,GAAG;AAC3B,aAAKsyC,QAAQr2B,OAAOD,MAAAA;aACf;AACL,aAAKu2B,oBAAoB;UAACt2B;UAAOD;QAAM;;IAE3C;IAEAs2B,QAAQr2B,OAAOD,QAAQ;AACrB,YAAM/V,UAAU,KAAKA;AACrB,YAAMkrB,SAAS,KAAKA;AACpB,YAAMnQ,cAAc/a,QAAQgsC,uBAAuB,KAAKjxB;AACxD,YAAMwxB,UAAU,KAAKxE,SAASvc,eAAeN,QAAQlV,OAAOD,QAAQgF,WAAAA;AACpE,YAAMyxB,WAAWxsC,QAAQ2uB,oBAAoB,KAAKoZ,SAASxc,oBAAmB;AAC9E,YAAMxoB,OAAO,KAAKiT,QAAQ,WAAW;AAErC,WAAKA,QAAQu2B,QAAQv2B;AACrB,WAAKD,SAASw2B,QAAQx2B;AACtB,WAAKo1B,eAAe,KAAKpwB;AACzB,UAAI,CAACmxB,YAAY,MAAMM,UAAU,IAAI,GAAG;AACtC;;AAGF,WAAKjU,cAAc,UAAU;QAAC53B,MAAM4rC;MAAO,CAAA;AAE3C/H,eAAaxkC,QAAQysC,UAAU;QAAC;QAAMF;MAAQ,GAAE,IAAI;AAEpD,UAAI,KAAKZ,UAAU;AACjB,YAAI,KAAKC,UAAU7oC,IAAO,GAAA;AAExB,eAAK2pC,OAAM;;;IAGjB;IAEAC,sBAAsB;AACpB,YAAM3sC,UAAU,KAAKA;AACrB,YAAM4sC,gBAAgB5sC,QAAQgG,UAAU,CAAA;AAExC6kB,WAAK+hB,eAAe,CAACC,aAAa50B,WAAW;AAC3C40B,oBAAYzoC,KAAK6T;MACnB,CAAA;IACF;IAKA60B,sBAAsB;AACpB,YAAM9sC,UAAU,KAAKA;AACrB,YAAM+sC,YAAY/sC,QAAQgG;AAC1B,YAAMA,UAAS,KAAKA;AACpB,YAAMgnC,UAAU7tC,OAAOC,KAAK4G,OAAAA,EAAQ3K,OAAO,CAACga,KAAKjR,OAAO;AACtDiR,YAAIjR,EAAG,IAAG;AACV,eAAOiR;MACT,GAAG,CAAA,CAAC;AACJ,UAAIrb,QAAQ,CAAA;AAEZ,UAAI+yC,WAAW;AACb/yC,gBAAQA,MAAMoX,OACZjS,OAAOC,KAAK2tC,SAAWxxB,EAAAA,IAAI,CAACnX,OAAO;AACjC,gBAAM6hC,eAAe8G,UAAU3oC,EAAG;AAClC,gBAAMT,OAAOqiC,cAAc5hC,IAAI6hC,YAAAA;AAC/B,gBAAMgH,WAAWtpC,SAAS;AAC1B,gBAAMgQ,eAAehQ,SAAS;AAC9B,iBAAO;YACL3D,SAASimC;YACTiH,WAAWD,WAAW,cAAct5B,eAAe,WAAW;YAC9Dw5B,OAAOF,WAAW,iBAAiBt5B,eAAe,aAAa;UACjE;QACF,CAAA,CAAA;;AAIJkX,WAAK7wB,OAAO,CAACI,SAAS;AACpB,cAAM6rC,eAAe7rC,KAAK4F;AAC1B,cAAMoE,KAAK6hC,aAAa7hC;AACxB,cAAMT,OAAOqiC,cAAc5hC,IAAI6hC,YAAAA;AAC/B,cAAMmH,YAAYjkC,eAAe88B,aAAattC,MAAMyB,KAAK+yC,KAAK;AAE9D,YAAIlH,aAAahiB,aAAa3rB,UAAakxC,qBAAqBvD,aAAahiB,UAAUtgB,IAAU6lC,MAAAA,qBAAqBpvC,KAAK8yC,SAAS,GAAG;AACrIjH,uBAAahiB,WAAW7pB,KAAK8yC;;AAG/BF,gBAAQ5oC,EAAG,IAAG;AACd,YAAInD,QAAQ;AACZ,YAAImD,MAAM4B,WAAUA,QAAO5B,EAAAA,EAAIzL,SAASy0C,WAAW;AACjDnsC,kBAAQ+E,QAAO5B,EAAG;eACb;AACL,gBAAMipC,aAAaprB,SAASihB,SAASkK,SAAAA;AACrCnsC,kBAAQ,IAAIosC,WAAW;YACrBjpC;YACAzL,MAAMy0C;YACN3lC,KAAK,KAAKA;YACVjP,OAAO;UACT,CAAA;AACAwN,UAAAA,QAAO/E,MAAMmD,EAAE,IAAInD;;AAGrBA,cAAMwhB,KAAKwjB,cAAcjmC,OAAAA;MAC3B,CAAA;AAEA6qB,WAAKmiB,SAAS,CAACM,YAAYlpC,OAAO;AAChC,YAAI,CAACkpC,YAAY;AACf,iBAAOtnC,QAAO5B,EAAG;;MAErB,CAAA;AAEAymB,WAAK7kB,SAAQ,CAAC/E,UAAU;AACtBimB,gBAAQloB,UAAU,MAAMiC,OAAOA,MAAMjB,OAAO;AAC5CknB,gBAAQkD,OAAO,MAAMnpB,KAAAA;MACvB,CAAA;IACF;IAKAssC,kBAAkB;AAChB,YAAMhrC,WAAW,KAAK6oC;AACtB,YAAMt7B,UAAU,KAAKxM,KAAKyG,SAAS9P;AACnC,YAAM4V,UAAUtN,SAAStI;AAEzBsI,eAAS+O,KAAK,CAACC,IAAGrP,OAAMqP,GAAE7O,QAAQR,GAAEQ,KAAK;AACzC,UAAImN,UAAUC,SAAS;AACrB,iBAAS5V,KAAI4V,SAAS5V,KAAI2V,SAAS,EAAE3V,IAAG;AACtC,eAAKszC,oBAAoBtzC,EAAAA;QAC3B;AACAqI,iBAAS8N,OAAOP,SAASD,UAAUC,OAAAA;;AAErC,WAAK07B,kBAAkBjpC,SAASkhB,MAAM,CAAGnS,EAAAA,KAAKm4B,cAAc,SAAS,OAAA,CAAA;IACvE;IAKAgE,8BAA8B;AAC5B,YAAM,EAACrC,WAAW7oC,UAAUe,MAAM,EAACyG,SAAAA,EAAS,IAAI;AAChD,UAAIxH,SAAStI,SAAS8P,SAAS9P,QAAQ;AACrC,eAAO,KAAKsL;;AAEdhD,eAASvJ,QAAQ,CAACuK,MAAMb,WAAU;AAChC,YAAIqH,SAAS9D,OAAOxE,CAAAA,MAAKA,MAAM8B,KAAK8b,QAAQ,EAAEplB,WAAW,GAAG;AAC1D,eAAKuzC,oBAAoB9qC,MAAAA;;MAE7B,CAAA;IACF;IAEAgrC,2BAA2B;AACzB,YAAMC,iBAAiB,CAAA;AACvB,YAAM5jC,WAAW,KAAKzG,KAAKyG;AAC3B,UAAI7P,IAAGuI;AAEP,WAAKgrC,4BAA2B;AAEhC,WAAKvzC,KAAI,GAAGuI,OAAOsH,SAAS9P,QAAQC,KAAIuI,MAAMvI,MAAK;AACjD,cAAMoM,UAAUyD,SAAS7P,EAAE;AAC3B,YAAIqJ,OAAO,KAAKyG,eAAe9P,EAAAA;AAC/B,cAAMvB,OAAO2N,QAAQ3N,QAAQ,KAAKkG,OAAOlG;AAEzC,YAAI4K,KAAK5K,QAAQ4K,KAAK5K,SAASA,MAAM;AACnC,eAAK60C,oBAAoBtzC,EAAAA;AACzBqJ,iBAAO,KAAKyG,eAAe9P,EAAAA;;AAE7BqJ,aAAK5K,OAAOA;AACZ4K,aAAKiG,YAAYlD,QAAQkD,aAAai8B,aAAa9sC,MAAM,KAAKqH,OAAO;AACrEuD,aAAKqqC,QAAQtnC,QAAQsnC,SAAS;AAC9BrqC,aAAKb,QAAQxI;AACbqJ,aAAK2J,QAAQ,KAAK5G,QAAQ4G;AAC1B3J,aAAKsqC,UAAU,KAAK3wB,iBAAiBhjB,EAAAA;AAErC,YAAIqJ,KAAK6B,YAAY;AACnB7B,eAAK6B,WAAW0D,YAAY5O,EAAAA;AAC5BqJ,eAAK6B,WAAWoD,WAAU;eACrB;AACL,gBAAMslC,kBAAkB7rB,SAAS8gB,cAAcpqC,IAAAA;AAC/C,gBAAM,EAAC2O,oBAAoBC,gBAAAA,IAAmBlI,UAAS0K,SAASpR,IAAK;AACrEwG,iBAAOyB,OAAOktC,iBAAiB;YAC7BvmC,iBAAiB0a,SAASC,WAAW3a,eAAAA;YACrCD,oBAAoBA,sBAAsB2a,SAASC,WAAW5a,kBAAAA;UAChE,CAAA;AACA/D,eAAK6B,aAAa,IAAI0oC,gBAAgB,MAAM5zC,EAAAA;AAC5CyzC,yBAAezyC,KAAKqI,KAAK6B,UAAU;;MAEvC;AAEA,WAAKmoC,gBAAe;AACpB,aAAOI;IACT;IAMAI,iBAAiB;AACfljB,WAAK,KAAKvnB,KAAKyG,UAAU,CAACzD,SAAStD,iBAAiB;AAClD,aAAKgH,eAAehH,YAAcoC,EAAAA,WAAW+E,MAAK;MACpD,GAAG,IAAI;IACT;IAKAA,QAAQ;AACN,WAAK4jC,eAAc;AACnB,WAAKxV,cAAc,OAAA;IACrB;IAEAr6B,OAAO6E,MAAM;AACX,YAAMlE,UAAS,KAAKA;AAEpBA,MAAAA,QAAOX,OAAM;AACb,YAAM8B,UAAU,KAAKkrC,WAAWrsC,QAAOqM,eAAerM,QAAO2pC,kBAAiB,GAAI,KAAKr9B,WAAU,CAAA;AACjG,YAAM6iC,gBAAgB,KAAKh/B,sBAAsB,CAAChP,QAAQV;AAE1D,WAAK2uC,cAAa;AAClB,WAAKC,oBAAmB;AACxB,WAAKC,qBAAoB;AAIzB,WAAK1C,SAAS/G,WAAU;AAExB,UAAI,KAAKnM,cAAc,gBAAgB;QAACx1B;QAAM0hC,YAAY;MAAI,CAAA,MAAO,OAAO;AAC1E;;AAIF,YAAMkJ,iBAAiB,KAAKD,yBAAwB;AAEpD,WAAKnV,cAAc,sBAAA;AAGnB,UAAI9N,aAAa;AACjB,eAASvwB,KAAI,GAAGuI,OAAO,KAAKa,KAAKyG,SAAS9P,QAAQC,KAAIuI,MAAMvI,MAAK;AAC/D,cAAM,EAACkL,WAAU,IAAI,KAAK4E,eAAe9P,EAAAA;AACzC,cAAMiQ,QAAQ,CAAC6jC,iBAAiBL,eAAel3B,QAAQrR,UAAAA,MAAgB;AAGvEA,mBAAWqF,sBAAsBN,KAAAA;AACjCsgB,qBAAarxB,KAAKoC,IAAI,CAAC4J,WAAW4H,eAAc,GAAIyd,UAAAA;MACtD;AACAA,mBAAa,KAAK2jB,cAAcpuC,QAAQ2nB,OAAO0mB,cAAc5jB,aAAa;AAC1E,WAAK6jB,cAAc7jB,UAAAA;AAGnB,UAAI,CAACujB,eAAe;AAGlBnjB,aAAK8iB,gBAAgB,CAACvoC,eAAe;AACnCA,qBAAW+E,MAAK;QAClB,CAAA;;AAGF,WAAKokC,gBAAgBxrC,IAAAA;AAGrB,WAAKw1B,cAAc,eAAe;QAACx1B;MAAI,CAAA;AAEvC,WAAKsnB,QAAQ/Y,KAAKm4B,cAAc,KAAK,MAAA,CAAA;AAGrC,YAAM,EAACpvC,SAASgxC,WAAU,IAAI;AAC9B,UAAIA,YAAY;AACd,aAAKmD,cAAcnD,YAAY,IAAI;iBAC1BhxC,QAAQJ,QAAQ;AACzB,aAAKw0C,mBAAmBp0C,SAASA,SAAS,IAAI;;AAGhD,WAAKqyC,OAAM;IACb;IAKAuB,gBAAgB;AACdpjB,WAAK,KAAK7kB,QAAQ,CAAC/E,UAAU;AAC3BimB,gBAAQqD,UAAU,MAAMtpB,KAAAA;MAC1B,CAAA;AAEA,WAAK0rC,oBAAmB;AACxB,WAAKG,oBAAmB;IAC1B;IAKAoB,sBAAsB;AACpB,YAAMluC,UAAU,KAAKA;AACrB,YAAM0uC,iBAAiB,IAAInH,IAAIpoC,OAAOC,KAAK,KAAKksC,UAAU,CAAA;AAC1D,YAAMqD,YAAY,IAAIpH,IAAIvnC,QAAQ4uC,MAAM;AAExC,UAAI,CAACC,UAAUH,gBAAgBC,SAAAA,KAAc,CAAC,CAAC,KAAKpD,yBAAyBvrC,QAAQisC,YAAY;AAE/F,aAAK6C,aAAY;AACjB,aAAK3C,WAAU;;IAEnB;IAKAgC,uBAAuB;AACrB,YAAM,EAACzC,eAAAA,IAAkB;AACzB,YAAMqD,UAAU,KAAKC,uBAAsB,KAAM,CAAA;AACjD,iBAAW,EAACrwC,QAAQrF,OAAAA,QAAOgS,MAAAA,KAAUyjC,SAAS;AAC5C,cAAM9+B,OAAOtR,WAAW,oBAAoB,CAAC2M,QAAQA;AACrD++B,wBAAgBqB,gBAAgBpyC,QAAO2W,IAAAA;MACzC;IACF;IAKA++B,yBAAyB;AACvB,YAAMx+B,eAAe,KAAKA;AAC1B,UAAI,CAACA,gBAAgB,CAACA,aAAavW,QAAQ;AACzC;;AAGF,WAAKuW,eAAe,CAAA;AACpB,YAAMy+B,eAAe,KAAK3rC,KAAKyG,SAAS9P;AACxC,YAAMi1C,UAAU,CAAC1T,QAAQ,IAAI+L,IAC3B/2B,aACGvK,OAAOmkC,CAAAA,OAAKA,GAAE,CAAA,MAAO5O,GAAAA,EACrBjgB,IAAI,CAAC6uB,IAAGlwC,OAAMA,KAAI,MAAMkwC,GAAE/5B,OAAO,CAAG8xB,EAAAA,KAAK,GAAA,CAAA,CAAA;AAG9C,YAAMgN,YAAYD,QAAQ,CAAA;AAC1B,eAASh1C,KAAI,GAAGA,KAAI+0C,cAAc/0C,MAAK;AACrC,YAAI,CAAC20C,UAAUM,WAAWD,QAAQh1C,EAAK,CAAA,GAAA;AACrC;;MAEJ;AACA,aAAO4J,MAAM7H,KAAKkzC,SACf5zB,EAAAA,IAAI6uB,CAAAA,OAAKA,GAAEpI,MAAM,GACjBzmB,CAAAA,EAAAA,IAAIhK,CAAAA,QAAM;QAAC5S,QAAQ4S,GAAE,CAAE;QAAEjY,OAAO,CAACiY,GAAE,CAAE;QAAEjG,OAAO,CAACiG,GAAE,CAAE;QAAA;IACxD;IAOA+8B,cAAc7jB,YAAY;AACxB,UAAI,KAAK8N,cAAc,gBAAgB;QAACkM,YAAY;MAAI,CAAA,MAAO,OAAO;AACpE;;AAGFvd,cAAQhpB,OAAO,MAAM,KAAK8X,OAAO,KAAKD,QAAQ0U,UAAAA;AAE9C,YAAMld,OAAO,KAAKC;AAClB,YAAM4hC,SAAS7hC,KAAKyI,SAAS,KAAKzI,KAAKwI,UAAU;AAEjD,WAAKsU,UAAU,CAAA;AACfQ,WAAK,KAAK/D,OAAO,CAACJ,QAAQ;AACxB,YAAI0oB,UAAU1oB,IAAIzC,aAAa,aAAa;AAE1C;;AAKF,YAAIyC,IAAI1nB,WAAW;AACjB0nB,cAAI1nB,UAAS;;AAEf,aAAKqrB,QAAQnvB,KAAI,GAAIwrB,IAAI2D,QAAO,CAAA;MAClC,GAAG,IAAI;AAEP,WAAKA,QAAQrxB,QAAQ,CAACoB,MAAMsI,WAAU;AACpCtI,aAAKi1C,OAAO3sC;MACd,CAAA;AAEA,WAAK61B,cAAc,aAAA;IACrB;IAOAgW,gBAAgBxrC,MAAM;AACpB,UAAI,KAAKw1B,cAAc,wBAAwB;QAACx1B;QAAM0hC,YAAY;MAAI,CAAA,MAAO,OAAO;AAClF;;AAGF,eAASvqC,KAAI,GAAGuI,OAAO,KAAKa,KAAKyG,SAAS9P,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AAC/D,aAAK8P,eAAe9P,EAAGkL,EAAAA,WAAWpG,UAAS;MAC7C;AAEA,eAAS9E,KAAI,GAAGuI,OAAO,KAAKa,KAAKyG,SAAS9P,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AAC/D,aAAKo1C,eAAep1C,IAAG2uC,YAAW9lC,IAAAA,IAAQA,KAAK;UAACC,cAAc9I;QAAC,CAAA,IAAK6I,IAAI;MAC1E;AAEA,WAAKw1B,cAAc,uBAAuB;QAACx1B;MAAI,CAAA;IACjD;IAOAusC,eAAe5sC,QAAOK,MAAM;AAC1B,YAAMQ,OAAO,KAAKyG,eAAetH,MAAAA;AACjC,YAAM6N,OAAO;QAAChN;QAAMb,OAAAA;QAAOK;QAAM0hC,YAAY;MAAI;AAEjD,UAAI,KAAKlM,cAAc,uBAAuBhoB,IAAAA,MAAU,OAAO;AAC7D;;AAGFhN,WAAK6B,WAAWzL,QAAQoJ,IAAAA;AAExBwN,WAAKk0B,aAAa;AAClB,WAAKlM,cAAc,sBAAsBhoB,IAAAA;IAC3C;IAEAm8B,SAAS;AACP,UAAI,KAAKnU,cAAc,gBAAgB;QAACkM,YAAY;MAAI,CAAA,MAAO,OAAO;AACpE;;AAGF,UAAI5jC,SAASzF,IAAI,IAAI,GAAG;AACtB,YAAI,KAAKuwC,YAAY,CAAC9qC,SAAS9G,QAAQ,IAAI,GAAG;AAC5C8G,mBAASvH,MAAM,IAAI;;aAEhB;AACL,aAAKa,KAAI;AACTyvC,6BAAqB;UAACpxC,OAAO;QAAI,CAAA;;IAErC;IAEA2B,OAAO;AACL,UAAID;AACJ,UAAI,KAAKoyC,mBAAmB;AAC1B,cAAM,EAACt2B,OAAOD,OAAAA,IAAU,KAAKu2B;AAE7B,aAAKA,oBAAoB;AACzB,aAAKD,QAAQr2B,OAAOD,MAAAA;;AAEtB,WAAKkyB,MAAK;AAEV,UAAI,KAAKjyB,SAAS,KAAK,KAAKD,UAAU,GAAG;AACvC;;AAGF,UAAI,KAAKwiB,cAAc,cAAc;QAACkM,YAAY;MAAI,CAAA,MAAO,OAAO;AAClE;;AAMF,YAAM8K,SAAS,KAAKllB;AACpB,WAAKnwB,KAAI,GAAGA,KAAIq1C,OAAOt1C,UAAUs1C,OAAOr1C,EAAAA,EAAGowB,KAAK,GAAG,EAAEpwB,IAAG;AACtDq1C,eAAOr1C,EAAE,EAACC,KAAK,KAAKqT,SAAS;MAC/B;AAEA,WAAKgiC,cAAa;AAGlB,aAAOt1C,KAAIq1C,OAAOt1C,QAAQ,EAAEC,IAAG;AAC7Bq1C,eAAOr1C,EAAE,EAACC,KAAK,KAAKqT,SAAS;MAC/B;AAEA,WAAK+qB,cAAc,WAAA;IACrB;IAKA/1B,uBAAuBF,eAAe;AACpC,YAAMC,WAAW,KAAKipC;AACtB,YAAMjoB,SAAS,CAAA;AACf,UAAIrpB,IAAGuI;AAEP,WAAKvI,KAAI,GAAGuI,OAAOF,SAAStI,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AACjD,cAAMqJ,OAAOhB,SAASrI,EAAE;AACxB,YAAI,CAACoI,iBAAiBiB,KAAKsqC,SAAS;AAClCtqB,iBAAOroB,KAAKqI,IAAAA;;MAEhB;AAEA,aAAOggB;IACT;IAMAY,+BAA+B;AAC7B,aAAO,KAAK3hB,uBAAuB,IAAI;IACzC;IAOAgtC,gBAAgB;AACd,UAAI,KAAKjX,cAAc,sBAAsB;QAACkM,YAAY;MAAI,CAAA,MAAO,OAAO;AAC1E;;AAGF,YAAMliC,WAAW,KAAK4hB,6BAA4B;AAClD,eAASjqB,KAAIqI,SAAStI,SAAS,GAAGC,MAAK,GAAG,EAAEA,IAAG;AAC7C,aAAKu1C,aAAaltC,SAASrI,EAAE,CAAA;MAC/B;AAEA,WAAKq+B,cAAc,mBAAA;IACrB;IAOAkX,aAAalsC,MAAM;AACjB,YAAMkE,MAAM,KAAKA;AACjB,YAAM8I,OAAO;QACXhN;QACAb,OAAOa,KAAKb;QACZ+hC,YAAY;MACd;AAEA,YAAMp3B,OAAOqiC,mBAAmB,MAAMnsC,IAAAA;AAEtC,UAAI,KAAKg1B,cAAc,qBAAqBhoB,IAAAA,MAAU,OAAO;AAC3D;;AAGF,UAAIlD,MAAM;AACR8yB,iBAAS14B,KAAK4F,IAAAA;;AAGhB9J,WAAK6B,WAAWjL,KAAI;AAEpB,UAAIkT,MAAM;AACRizB,mBAAW74B,GAAAA;;AAGb8I,WAAKk0B,aAAa;AAClB,WAAKlM,cAAc,oBAAoBhoB,IAAAA;IACzC;IAOA0U,cAAczM,OAAO;AACnB,aAAO2M,eAAe3M,OAAO,KAAKhL,WAAW,KAAK4gC,WAAW;IAC/D;IAEAuB,0BAA0BnzB,IAAGzZ,MAAM/C,SAAS+kB,kBAAkB;AAC5D,YAAMpmB,SAASixC,YAAY1pB,MAAMnjB,IAAK;AACtC,UAAI,OAAOpE,WAAW,YAAY;AAChC,eAAOA,OAAO,MAAM6d,IAAGxc,SAAS+kB,gBAAAA;;AAGlC,aAAO,CAAA;IACT;IAEA/a,eAAehH,cAAc;AAC3B,YAAMsD,UAAU,KAAKhD,KAAKyG,SAAS/G,YAAa;AAChD,YAAMT,WAAW,KAAK6oC;AACtB,UAAI7nC,OAAOhB,SAAS0D,OAAOxE,CAAAA,MAAKA,KAAKA,EAAE4d,aAAa/Y,OAAAA,EAAS9L,IAAG;AAEhE,UAAI,CAAC+I,MAAM;AACTA,eAAO;UACL5K,MAAM;UACN2K,MAAM,CAAA;UACNgD,SAAS;UACTlB,YAAY;UACZ+B,QAAQ;UACR+B,SAAS;UACTG,SAAS;UACTukC,OAAOtnC,WAAWA,QAAQsnC,SAAS;UACnClrC,OAAOM;UACPqc,UAAU/Y;UACVM,SAAS,CAAA;UACT4E,SAAS;QACX;AACAjJ,iBAASrH,KAAKqI,IAAAA;;AAGhB,aAAOA;IACT;IAEA4H,aAAa;AACX,aAAO,KAAK9C,aAAa,KAAKA,WAAWhC,cAAc,MAAM;QAAC7N,OAAO;QAAMG,MAAM;OAAQ;IAC3F;IAEAsoB,yBAAyB;AACvB,aAAO,KAAKkD,6BAA4B,EAAGlqB;IAC7C;IAEAijB,iBAAiBla,cAAc;AAC7B,YAAMsD,UAAU,KAAKhD,KAAKyG,SAAS/G,YAAa;AAChD,UAAI,CAACsD,SAAS;AACZ,eAAO;;AAGT,YAAM/C,OAAO,KAAKyG,eAAehH,YAAAA;AAIjC,aAAO,OAAOO,KAAK4D,WAAW,YAAY,CAAC5D,KAAK4D,SAAS,CAACb,QAAQa;IACpE;IAEA0oC,qBAAqB7sC,cAAc6qC,SAAS;AAC1C,YAAMtqC,OAAO,KAAKyG,eAAehH,YAAAA;AACjCO,WAAK4D,SAAS,CAAC0mC;IACjB;IAEAnxB,qBAAqBha,QAAO;AAC1B,WAAKgpC,eAAehpC,MAAM,IAAG,CAAC,KAAKgpC,eAAehpC,MAAM;IAC1D;IAEA6U,kBAAkB7U,QAAO;AACvB,aAAO,CAAC,KAAKgpC,eAAehpC,MAAM;IACpC;IAKAotC,kBAAkB9sC,cAAcyD,WAAWonC,SAAS;AAClD,YAAM9qC,OAAO8qC,UAAU,SAAS;AAChC,YAAMtqC,OAAO,KAAKyG,eAAehH,YAAAA;AACjC,YAAMvK,QAAQ8K,KAAK6B,WAAWqJ,mBAAmBnW,QAAWyK,IAAAA;AAE5D,UAAIoL,QAAQ1H,SAAY,GAAA;AACtBlD,aAAKD,KAAKmD,SAAAA,EAAWU,SAAS,CAAC0mC;AAC/B,aAAK3vC,OAAM;aACN;AACL,aAAK2xC,qBAAqB7sC,cAAc6qC,OAAAA;AAExCp1C,cAAMyF,OAAOqF,MAAM;UAACsqC;QAAO,CAAA;AAC3B,aAAK3vC,OAAO,CAACuJ,QAAQA,IAAIzE,iBAAiBA,eAAeD,OAAOzK,MAAS;;IAE7E;IAEAy3C,KAAK/sC,cAAcyD,WAAW;AAC5B,WAAKqpC,kBAAkB9sC,cAAcyD,WAAW,KAAK;IACvD;IAEAupC,KAAKhtC,cAAcyD,WAAW;AAC5B,WAAKqpC,kBAAkB9sC,cAAcyD,WAAW,IAAI;IACtD;IAKA+mC,oBAAoBxqC,cAAc;AAChC,YAAMO,OAAO,KAAK6nC,UAAUpoC,YAAa;AACzC,UAAIO,QAAQA,KAAK6B,YAAY;AAC3B7B,aAAK6B,WAAWgF,SAAQ;;AAE1B,aAAO,KAAKghC,UAAUpoC,YAAa;IACrC;IAEAitC,QAAQ;AACN,UAAI/1C,IAAGuI;AACP,WAAK/G,KAAI;AACTmF,eAASjF,OAAO,IAAI;AAEpB,WAAK1B,KAAI,GAAGuI,OAAO,KAAKa,KAAKyG,SAAS9P,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AAC3D,aAAKszC,oBAAoBtzC,EAAAA;MAC3B;IACF;IAEAg2C,UAAU;AACR,WAAK3X,cAAc,eAAA;AACnB,YAAM,EAACrN,QAAQzjB,IAAG,IAAI;AAEtB,WAAKwoC,MAAK;AACV,WAAKpxC,OAAOmpC,WAAU;AAEtB,UAAI9c,QAAQ;AACV,aAAK4jB,aAAY;AACjB1C,oBAAYlhB,QAAQzjB,GAAAA;AACpB,aAAKsgC,SAAS5c,eAAe1jB,GAAAA;AAC7B,aAAKyjB,SAAS;AACd,aAAKzjB,MAAM;;AAGb,aAAOyiC,UAAU,KAAK9lC,EAAE;AAExB,WAAKm0B,cAAc,cAAA;IACrB;IAEA4X,iBAAiB5/B,MAAM;AACrB,aAAO,KAAK2a,OAAOklB,UAAa7/B,GAAAA,IAAAA;IAClC;IAKA47B,aAAa;AACX,WAAKkE,eAAc;AACnB,UAAI,KAAKrwC,QAAQisC,YAAY;AAC3B,aAAKqE,qBAAoB;aACpB;AACL,aAAK3E,WAAW;;IAEpB;IAKA0E,iBAAiB;AACf,YAAMx3C,YAAY,KAAKyyC;AACvB,YAAMvD,WAAW,KAAKA;AAEtB,YAAMwI,OAAO,CAAC53C,MAAM0yB,cAAa;AAC/B0c,iBAAS3c,iBAAiB,MAAMzyB,MAAM0yB,SAAAA;AACtCxyB,kBAAUF,IAAAA,IAAQ0yB;MACpB;AAEA,YAAMA,WAAW,CAAC7O,IAAG/a,GAAGC,OAAM;AAC5B8a,QAAAA,GAAEtD,UAAUzX;AACZ+a,QAAAA,GAAErD,UAAUzX;AACZ,aAAK8sC,cAAchyB,EAAAA;MACrB;AAEAqO,WAAK,KAAK7qB,QAAQ4uC,QAAQ,CAACj2C,SAAS43C,KAAK53C,MAAM0yB,QAAAA,CAAAA;IACjD;IAKAilB,uBAAuB;AACrB,UAAI,CAAC,KAAK/E,sBAAsB;AAC9B,aAAKA,uBAAuB,CAAA;;AAE9B,YAAM1yC,YAAY,KAAK0yC;AACvB,YAAMxD,WAAW,KAAKA;AAEtB,YAAMwI,OAAO,CAAC53C,MAAM0yB,cAAa;AAC/B0c,iBAAS3c,iBAAiB,MAAMzyB,MAAM0yB,SAAAA;AACtCxyB,kBAAUF,IAAAA,IAAQ0yB;MACpB;AACA,YAAMmlB,UAAU,CAAC73C,MAAM0yB,cAAa;AAClC,YAAIxyB,UAAUF,IAAAA,GAAO;AACnBovC,mBAASzc,oBAAoB,MAAM3yB,MAAM0yB,SAAAA;AACzC,iBAAOxyB,UAAUF,IAAK;;MAE1B;AAEA,YAAM0yB,WAAW,CAACrV,OAAOD,WAAW;AAClC,YAAI,KAAKmV,QAAQ;AACf,eAAK0D,OAAO5Y,OAAOD,MAAAA;;MAEvB;AAEA,UAAI06B;AACJ,YAAM9E,WAAW,MAAM;AACrB6E,gBAAQ,UAAU7E,QAAAA;AAElB,aAAKA,WAAW;AAChB,aAAK/c,OAAM;AAEX2hB,aAAK,UAAUllB,QAAAA;AACfklB,aAAK,UAAUE,QAAAA;MACjB;AAEAA,iBAAW,MAAM;AACf,aAAK9E,WAAW;AAEhB6E,gBAAQ,UAAUnlB,QAAAA;AAGlB,aAAK4kB,MAAK;AACV,aAAK5D,QAAQ,GAAG,CAAA;AAEhBkE,aAAK,UAAU5E,QAAAA;MACjB;AAEA,UAAI5D,SAAStc,WAAW,KAAKP,MAAM,GAAG;AACpCygB,iBAAAA;aACK;AACL8E,iBAAAA;;IAEJ;IAKA3B,eAAe;AACbjkB,WAAK,KAAKygB,YAAY,CAACjgB,UAAU1yB,SAAS;AACxC,aAAKovC,SAASzc,oBAAoB,MAAM3yB,MAAM0yB,QAAAA;MAChD,CAAA;AACA,WAAKigB,aAAa,CAAA;AAElBzgB,WAAK,KAAK0gB,sBAAsB,CAAClgB,UAAU1yB,SAAS;AAClD,aAAKovC,SAASzc,oBAAoB,MAAM3yB,MAAM0yB,QAAAA;MAChD,CAAA;AACA,WAAKkgB,uBAAuBjzC;IAC9B;IAEAo4C,iBAAiB12C,OAAO+I,MAAMsuB,SAAS;AACrC,YAAMsf,SAAStf,UAAU,QAAQ;AACjC,UAAI9tB,MAAMnJ,MAAMF,IAAGuI;AAEnB,UAAIM,SAAS,WAAW;AACtBQ,eAAO,KAAKyG,eAAehQ,MAAM,CAAA,EAAGgJ,YAAY;AAChDO,aAAK6B,WAAW,MAAMurC,SAAS,mBAAoB,EAAA;;AAGrD,WAAKz2C,KAAI,GAAGuI,OAAOzI,MAAMC,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AAC9CE,eAAOJ,MAAME,EAAE;AACf,cAAMkL,aAAahL,QAAQ,KAAK4P,eAAe5P,KAAK4I,YAAY,EAAEoC;AAClE,YAAIA,YAAY;AACdA,qBAAWurC,SAAS,YAAA,EAAcv2C,KAAKoM,SAASpM,KAAK4I,cAAc5I,KAAKsI,KAAK;;MAEjF;IACF;IAMAkuC,oBAAoB;AAClB,aAAO,KAAKv2C,WAAW,CAAA;IACzB;IAMAw2C,kBAAkBC,gBAAgB;AAChC,YAAMC,aAAa,KAAK12C,WAAW,CAAA;AACnC,YAAM4D,SAAS6yC,eAAev1B,IAAI,CAAC,EAACvY,cAAcN,OAAAA,OAAK,MAAM;AAC3D,cAAMa,OAAO,KAAKyG,eAAehH,YAAAA;AACjC,YAAI,CAACO,MAAM;AACT,gBAAM,IAAI6e,MAAM,+BAA+Bpf,YAAc;;AAG/D,eAAO;UACLA;UACAwD,SAASjD,KAAKD,KAAKZ,MAAM;UACzBA,OAAAA;QACF;MACF,CAAA;AACA,YAAMqnB,UAAU,CAACinB,eAAe/yC,QAAQ8yC,UAAAA;AAExC,UAAIhnB,SAAS;AACX,aAAK1vB,UAAU4D;AAEf,aAAKotC,aAAa;AAClB,aAAKoD,mBAAmBxwC,QAAQ8yC,UAAAA;;IAEpC;IAWAxY,cAAc4L,MAAM5zB,MAAMtK,QAAQ;AAChC,aAAO,KAAKwlC,SAASvH,OAAO,MAAMC,MAAM5zB,MAAMtK,MAAAA;IAChD;IAOA0C,gBAAgBsoC,UAAU;AACxB,aAAO,KAAKxF,SAASx6B,OAAOhL,OAAOkjC,CAAAA,OAAKA,GAAE5E,OAAOngC,OAAO6sC,QAAAA,EAAUh3C,WAAW;IAC/E;IAKAw0C,mBAAmBxwC,QAAQ8yC,YAAYG,QAAQ;AAC7C,YAAMC,eAAe,KAAKnxC,QAAQoxC;AAClC,YAAMxuB,QAAO,CAACrR,IAAGrP,OAAMqP,GAAEtL,OAAOxE,CAAAA,MAAK,CAACS,GAAE8iC,KAAKtjC,CAAAA,OAAKD,EAAEuB,iBAAiBtB,GAAEsB,gBAAgBvB,EAAEiB,UAAUhB,GAAEgB,KAAK,CAAA;AAC1G,YAAM2uC,cAAczuB,MAAKmuB,YAAY9yC,MAAAA;AACrC,YAAMqzC,YAAYJ,SAASjzC,SAAS2kB,MAAK3kB,QAAQ8yC,UAAW;AAE5D,UAAIM,YAAYp3C,QAAQ;AACtB,aAAKy2C,iBAAiBW,aAAaF,aAAapuC,MAAM,KAAK;;AAG7D,UAAIuuC,UAAUr3C,UAAUk3C,aAAapuC,MAAM;AACzC,aAAK2tC,iBAAiBY,WAAWH,aAAapuC,MAAM,IAAI;;IAE5D;IAKAyrC,cAAchyB,IAAG00B,QAAQ;AACvB,YAAM3gC,OAAO;QACXvV,OAAOwhB;QACP00B;QACAzM,YAAY;QACZgG,aAAa,KAAKxlB,cAAczI,EAAAA;MAClC;AACA,YAAM+0B,cAAc,CAAChN,aAAYA,QAAOvkC,QAAQ4uC,UAAU,KAAK5uC,QAAQ4uC,QAAQxnB,SAAS5K,GAAE+Q,OAAO50B,IAAI;AAErG,UAAI,KAAK4/B,cAAc,eAAehoB,MAAMghC,WAAAA,MAAiB,OAAO;AAClE;;AAGF,YAAMxnB,UAAU,KAAKynB,aAAah1B,IAAG00B,QAAQ3gC,KAAKk6B,WAAW;AAE7Dl6B,WAAKk0B,aAAa;AAClB,WAAKlM,cAAc,cAAchoB,MAAMghC,WAAAA;AAEvC,UAAIxnB,WAAWxZ,KAAKwZ,SAAS;AAC3B,aAAK2iB,OAAM;;AAGb,aAAO;IACT;IAUA8E,aAAah1B,IAAG00B,QAAQzG,aAAa;AACnC,YAAM,EAACpwC,SAAS02C,aAAa,CAAA,GAAI/wC,QAAAA,IAAW;AAe5C,YAAM+kB,mBAAmBmsB;AACzB,YAAMjzC,SAAS,KAAKwzC,mBAAmBj1B,IAAGu0B,YAAYtG,aAAa1lB,gBAAAA;AACnE,YAAM2lB,UAAUgH,cAAcl1B,EAAAA;AAC9B,YAAMguB,YAAYD,mBAAmB/tB,IAAG,KAAK6uB,YAAYZ,aAAaC,OAAAA;AAEtE,UAAID,aAAa;AAGf,aAAKY,aAAa;AAGlB7G,iBAAaxkC,QAAQ2xC,SAAS;UAACn1B;UAAGve;UAAQ;QAAK,GAAE,IAAI;AAErD,YAAIysC,SAAS;AACXlG,mBAAaxkC,QAAQuc,SAAS;YAACC;YAAGve;YAAQ;UAAK,GAAE,IAAI;;;AAIzD,YAAM8rB,UAAU,CAACinB,eAAe/yC,QAAQ8yC,UAAAA;AACxC,UAAIhnB,WAAWmnB,QAAQ;AACrB,aAAK72C,UAAU4D;AACf,aAAKwwC,mBAAmBxwC,QAAQ8yC,YAAYG,MAAAA;;AAG9C,WAAK7F,aAAab;AAElB,aAAOzgB;IACT;IAUA0nB,mBAAmBj1B,IAAGu0B,YAAYtG,aAAa1lB,kBAAkB;AAC/D,UAAIvI,GAAE7jB,SAAS,YAAY;AACzB,eAAO,CAAA;;AAGT,UAAI,CAAC8xC,aAAa;AAEhB,eAAOsG;;AAGT,YAAMI,eAAe,KAAKnxC,QAAQoxC;AAClC,aAAO,KAAKzB,0BAA0BnzB,IAAG20B,aAAapuC,MAAMouC,cAAcpsB,gBAAAA;IAC5E;EACF;AAGA,WAAS8lB,oBAAoB;AAC3B,WAAOhgB,KAAK8f,MAAMT,WAAW,CAAC1xC,UAAUA,MAAMizC,SAAS/G,WAAU,CAAA;EACnE;AC5uCA,WAASkN,SAASnqC,KAA+BjB,SAAqB8S,UAAkB;AACtF,UAAM,EAACD,YAAY5X,GAAGC,GAAAA,IAAGkb,aAAaD,aAAa3c,QAAAA,IAAWwG;AAC9D,UAAM,EAAC4V,aAAaF,gBAAAA,IAAmBlc;AACvC,UAAM6xC,iBAAiBz4C,KAAKC,IAAI+iB,cAAcQ,aAAak1B,gBAAgBz4B,aAAaC,QAAAA,CAAAA;AACxF7R,QAAIk4B,UAAS;AACbl4B,QAAI+W,IAAI/c,GAAGC,IAAGkb,cAAcR,cAAc,GAAG/C,aAAaw4B,iBAAiB,GAAGv4B,WAAWu4B,iBAAiB,CAAA;AAE1G,QAAIl1B,cAAc,GAAG;AACnB,YAAMo1B,iBAAiB34C,KAAKC,IAAI+iB,cAAcO,aAAam1B,gBAAgBz4B,aAAaC,QAAAA,CAAAA;AACxF7R,UAAI+W,IAAI/c,GAAGC,IAAGib,cAAcP,cAAc,GAAG9C,WAAWy4B,iBAAiB,GAAG14B,aAAa04B,iBAAiB,GAAG,IAAI;WAC5G;AACL,YAAMC,YAAY54C,KAAKC,IAAI+iB,cAAc,GAAGQ,cAAck1B,gBAAgBz4B,aAAaC,QAAAA,CAAAA;AAEvF,UAAI4C,oBAAoB,SAAS;AAC/BzU,YAAI+W,IAAI/c,GAAGC,IAAGswC,WAAW14B,WAAWe,KAAK,GAAGhB,aAAagB,KAAK,GAAG,IAAI;iBAC5D6B,oBAAoB,SAAS;AACtC,cAAMja,KAAI,IAAI+vC,YAAYA;AAC1B,cAAMr4B,OAAO,CAAC1X,KAAI7I,KAAKogB,IAAIF,WAAWe,KAAK,CAAK5Y,IAAAA;AAChD,cAAMmY,OAAO,CAAC3X,KAAI7I,KAAKsgB,IAAIJ,WAAWe,KAAK,CAAK3Y,IAAAA;AAChD,cAAM6X,SAAStX,KAAI7I,KAAKogB,IAAIH,aAAagB,KAAK,CAAK5Y,IAAAA;AACnD,cAAMgY,SAASxX,KAAI7I,KAAKsgB,IAAIL,aAAagB,KAAK,CAAK3Y,IAAAA;AACnD+F,YAAIo4B,OAAOlmB,MAAMC,IAAAA;AACjBnS,YAAIo4B,OAAOtmB,QAAQE,MAAAA;;;AAGvBhS,QAAIwqC,UAAS;AAEbxqC,QAAIm4B,OAAO,GAAG,CAAA;AACdn4B,QAAIyqC,KAAK,GAAG,GAAGzqC,IAAIyjB,OAAOlV,OAAOvO,IAAIyjB,OAAOnV,MAAM;AAElDtO,QAAI4F,KAAK,SAAA;EACX;AAGA,WAAS8kC,QAAQ1qC,KAA+BjB,SAAqB8S,UAAkB;AACrF,UAAM,EAACD,YAAY+4B,aAAa3wC,GAAGC,GAAAA,IAAGkb,aAAaD,YAAAA,IAAenW;AAClE,QAAI6rC,cAAcD,cAAcx1B;AAIhCnV,QAAIk4B,UAAS;AACbl4B,QAAI+W,IAAI/c,GAAGC,IAAGkb,aAAavD,aAAag5B,aAAa/4B,WAAW+4B,WAAAA;AAChE,QAAI11B,cAAcy1B,aAAa;AAC7BC,oBAAcD,cAAcz1B;AAC5BlV,UAAI+W,IAAI/c,GAAGC,IAAGib,aAAarD,WAAW+4B,aAAah5B,aAAag5B,aAAa,IAAI;WAC5E;AACL5qC,UAAI+W,IAAI/c,GAAGC,IAAG0wC,aAAa94B,WAAWa,SAASd,aAAac,OAAAA;;AAE9D1S,QAAIwqC,UAAS;AACbxqC,QAAI4F,KAAI;EACV;AAEA,WAASilC,gBAAgB5xC,OAAO;AAC9B,WAAO6xC,kBAAkB7xC,OAAO;MAAC;MAAc;MAAY;MAAc;IAAW,CAAA;EACtF;AAKA,WAAS8xC,oBAAkBh0B,KAAiB7B,aAAqBC,aAAqB61B,YAAoB;AACxG,UAAMC,KAAIJ,gBAAgB9zB,IAAIxe,QAAQsb,YAAY;AAClD,UAAMq3B,iBAAiB/1B,cAAcD,eAAe;AACpD,UAAMi2B,aAAax5C,KAAKC,IAAIs5C,eAAeF,aAAa91B,cAAc,CAAA;AAStE,UAAMk2B,oBAAoB,CAACt8B,QAAQ;AACjC,YAAMu8B,iBAAiBl2B,cAAcxjB,KAAKC,IAAIs5C,eAAep8B,GAAG,KAAKk8B,aAAa;AAClF,aAAOjZ,YAAYjjB,KAAK,GAAGnd,KAAKC,IAAIs5C,eAAeG,aAAAA,CAAAA;IACrD;AAEA,WAAO;MACLC,YAAYF,kBAAkBH,GAAEK,UAAU;MAC1CC,UAAUH,kBAAkBH,GAAEM,QAAQ;MACtCC,YAAYzZ,YAAYkZ,GAAEO,YAAY,GAAGL,UAAAA;MACzCM,UAAU1Z,YAAYkZ,GAAEQ,UAAU,GAAGN,UAAAA;IACvC;EACF;AAKA,WAASO,WAAWlxC,IAAWmxC,OAAe3xC,GAAWC,IAAW;AAClE,WAAO;MACLD,GAAGA,IAAIQ,KAAI7I,KAAKogB,IAAI45B,KAAAA;MACpB1xC,GAAGA,KAAIO,KAAI7I,KAAKsgB,IAAI05B,KAAAA;IACtB;EACF;AAiBA,WAASC,QACP5rC,KACAjB,SACAyO,SACAyF,SACArZ,MACAqf,UACA;AACA,UAAM,EAACjf,GAAGC,GAAAA,IAAG2X,YAAY/f,QAAO84C,aAAaz1B,aAAa22B,OAAAA,IAAU9sC;AAEpE,UAAMoW,cAAcxjB,KAAKoC,IAAIgL,QAAQoW,cAAclC,UAAUzF,UAASm9B,aAAa,CAAA;AACnF,UAAMz1B,cAAc22B,SAAS,IAAIA,SAAS54B,UAAUzF,UAASm9B,cAAc;AAE3E,QAAImB,gBAAgB;AACpB,UAAMC,SAAQnyC,OAAM/H;AAEpB,QAAIohB,SAAS;AAIX,YAAM+4B,uBAAuBH,SAAS,IAAIA,SAAS54B,UAAU;AAC7D,YAAMg5B,uBAAuB92B,cAAc,IAAIA,cAAclC,UAAU;AACvE,YAAMi5B,sBAAsBF,uBAAuBC,wBAAwB;AAC3E,YAAME,gBAAgBD,uBAAuB,IAAIH,SAASG,sBAAuBA,qBAAqBj5B,WAAW84B;AACjHD,uBAAiBC,SAAQI,iBAAiB;;AAG5C,UAAMC,OAAOz6C,KAAKoC,IAAI,MAAOg4C,SAAQ52B,cAAc3H,UAASoF,EAAMuC,IAAAA;AAClE,UAAMk3B,eAAeN,SAAQK,QAAQ;AACrC,UAAMx6B,aAAa/f,SAAQw6C,cAAcP;AACzC,UAAMj6B,WAAWjY,OAAMyyC,cAAcP;AACrC,UAAM,EAACR,YAAYC,UAAUC,YAAYC,SAAQ,IAAIV,oBAAkBhsC,SAASmW,aAAaC,aAAatD,WAAWD,UAAAA;AAErH,UAAM06B,2BAA2Bn3B,cAAcm2B;AAC/C,UAAMiB,yBAAyBp3B,cAAco2B;AAC7C,UAAMiB,0BAA0B56B,aAAa05B,aAAagB;AAC1D,UAAMG,wBAAwB56B,WAAW05B,WAAWgB;AAEpD,UAAMG,2BAA2Bx3B,cAAcs2B;AAC/C,UAAMmB,yBAAyBz3B,cAAcu2B;AAC7C,UAAMmB,0BAA0Bh7B,aAAa45B,aAAakB;AAC1D,UAAMG,wBAAwBh7B,WAAW45B,WAAWkB;AAEpD3sC,QAAIk4B,UAAS;AAEb,QAAIjf,UAAU;AAEZ,YAAM6zB,yBAAyBN,0BAA0BC,yBAAyB;AAClFzsC,UAAI+W,IAAI/c,GAAGC,IAAGkb,aAAaq3B,yBAAyBM,qBAAAA;AACpD9sC,UAAI+W,IAAI/c,GAAGC,IAAGkb,aAAa23B,uBAAuBL,qBAAAA;AAGlD,UAAIlB,WAAW,GAAG;AAChB,cAAMwB,UAAUrB,WAAWa,wBAAwBE,uBAAuBzyC,GAAGC,EAAAA;AAC7E+F,YAAI+W,IAAIg2B,QAAQ/yC,GAAG+yC,QAAQ9yC,GAAGsxC,UAAUkB,uBAAuB56B,WAAWa,OAAAA;;AAI5E,YAAMs6B,KAAKtB,WAAWiB,wBAAwB96B,UAAU7X,GAAGC,EAAAA;AAC3D+F,UAAIo4B,OAAO4U,GAAGhzC,GAAGgzC,GAAG/yC,CAAC;AAGrB,UAAIwxC,WAAW,GAAG;AAChB,cAAMsB,UAAUrB,WAAWiB,wBAAwBE,uBAAuB7yC,GAAGC,EAAAA;AAC7E+F,YAAI+W,IAAIg2B,QAAQ/yC,GAAG+yC,QAAQ9yC,GAAGwxC,UAAU55B,WAAWa,SAASm6B,wBAAwBl7C,KAAKihB,EAAE;;AAI7F,YAAMq6B,yBAA0Bp7B,WAAY45B,WAAWv2B,eAAiBtD,aAAc45B,aAAat2B,gBAAiB;AACpHlV,UAAI+W,IAAI/c,GAAGC,IAAGib,aAAarD,WAAY45B,WAAWv2B,aAAc+3B,uBAAuB,IAAI;AAC3FjtC,UAAI+W,IAAI/c,GAAGC,IAAGib,aAAa+3B,uBAAuBr7B,aAAc45B,aAAat2B,aAAc,IAAI;AAG/F,UAAIs2B,aAAa,GAAG;AAClB,cAAMuB,UAAUrB,WAAWgB,0BAA0BE,yBAAyB5yC,GAAGC,EAAAA;AACjF+F,YAAI+W,IAAIg2B,QAAQ/yC,GAAG+yC,QAAQ9yC,GAAGuxC,YAAYoB,0BAA0Bj7C,KAAKihB,IAAIhB,aAAac,OAAAA;;AAI5F,YAAMw6B,KAAKxB,WAAWY,0BAA0B16B,YAAY5X,GAAGC,EAAAA;AAC/D+F,UAAIo4B,OAAO8U,GAAGlzC,GAAGkzC,GAAGjzC,CAAC;AAGrB,UAAIqxC,aAAa,GAAG;AAClB,cAAMyB,UAAUrB,WAAWY,0BAA0BE,yBAAyBxyC,GAAGC,EAAAA;AACjF+F,YAAI+W,IAAIg2B,QAAQ/yC,GAAG+yC,QAAQ9yC,GAAGqxC,YAAY15B,aAAac,SAAS85B,uBAAAA;;WAE7D;AACLxsC,UAAIm4B,OAAOn+B,GAAGC,EAAAA;AAEd,YAAMkzC,cAAcx7C,KAAKogB,IAAIy6B,uBAAAA,IAA2Br3B,cAAcnb;AACtE,YAAMozC,cAAcz7C,KAAKsgB,IAAIu6B,uBAAAA,IAA2Br3B,cAAclb;AACtE+F,UAAIo4B,OAAO+U,aAAaC,WAAAA;AAExB,YAAMC,YAAY17C,KAAKogB,IAAI06B,qBAAAA,IAAyBt3B,cAAcnb;AAClE,YAAMszC,YAAY37C,KAAKsgB,IAAIw6B,qBAAAA,IAAyBt3B,cAAclb;AAClE+F,UAAIo4B,OAAOiV,WAAWC,SAAAA;;AAGxBttC,QAAIwqC,UAAS;EACf;AAEA,WAAS+C,QACPvtC,KACAjB,SACAyO,SACAyF,SACAgG,UACA;AACA,UAAM,EAACu0B,aAAa57B,YAAYP,cAAAA,IAAiBtS;AACjD,QAAI8S,WAAW9S,QAAQ8S;AACvB,QAAI27B,aAAa;AACf5B,cAAQ5rC,KAAKjB,SAASyO,SAAQyF,SAASpB,UAAUoH,QAAAA;AACjD,eAASxmB,KAAI,GAAGA,KAAI+6C,aAAa,EAAE/6C,IAAG;AACpCuN,YAAIiB,KAAI;MACV;AACA,UAAI,CAAC8N,MAAMsC,aAAgB,GAAA;AACzBQ,mBAAWD,cAAcP,gBAAgBM,OAAOA;;;AAGpDi6B,YAAQ5rC,KAAKjB,SAASyO,SAAQyF,SAASpB,UAAUoH,QAAAA;AACjDjZ,QAAIiB,KAAI;AACR,WAAO4Q;EACT;AAEA,WAAS0mB,WACPv4B,KACAjB,SACAyO,SACAyF,SACAgG,UACA;AACA,UAAM,EAACu0B,aAAa57B,YAAYP,eAAe9Y,QAAO,IAAIwG;AAC1D,UAAM,EAAC4V,aAAaF,iBAAiBJ,YAAYE,kBAAkBV,aAAY,IAAItb;AACnF,UAAMk1C,QAAQl1C,QAAQ4e,gBAAgB;AAEtC,QAAI,CAACxC,aAAa;AAChB;;AAGF3U,QAAIi4B,YAAY5jB,cAAc,CAAA,CAAE;AAChCrU,QAAIsU,iBAAiBC;AAErB,QAAIk5B,OAAO;AACTztC,UAAI0U,YAAYC,cAAc;AAC9B3U,UAAIwU,WAAWC,mBAAmB;WAC7B;AACLzU,UAAI0U,YAAYC;AAChB3U,UAAIwU,WAAWC,mBAAmB;;AAGpC,QAAI5C,WAAW9S,QAAQ8S;AACvB,QAAI27B,aAAa;AACf5B,cAAQ5rC,KAAKjB,SAASyO,SAAQyF,SAASpB,UAAUoH,QAAAA;AACjD,eAASxmB,KAAI,GAAGA,KAAI+6C,aAAa,EAAE/6C,IAAG;AACpCuN,YAAIq4B,OAAM;MACZ;AACA,UAAI,CAACtpB,MAAMsC,aAAgB,GAAA;AACzBQ,mBAAWD,cAAcP,gBAAgBM,OAAOA;;;AAIpD,QAAI87B,OAAO;AACT/C,cAAQ1qC,KAAKjB,SAAS8S,QAAAA;;AAGxB,QAAItZ,QAAQm1C,YAAY77B,WAAWD,cAAcgB,MAAMiB,iBAAiB,KAAKY,oBAAoB,SAAS;AACxG01B,eAASnqC,KAAKjB,SAAS8S,QAAAA;;AAGzB,QAAI,CAAC27B,aAAa;AAChB5B,cAAQ5rC,KAAKjB,SAASyO,SAAQyF,SAASpB,UAAUoH,QAAAA;AACjDjZ,UAAIq4B,OAAM;;EAEd;AAUe,MAAMsV,aAAN,cAAyB7kB,SAAAA;IAEtC,OAAOnsB,KAAK;IAEZ,OAAO/E,WAAW;MAChBuf,aAAa;MACbtC,aAAa;MACbR,YAAY,CAAA;MACZE,kBAAkB;MAClBE,iBAAiB5jB;MACjBgjB,cAAc;MACdc,aAAa;MACbnH,QAAQ;MACRyF,SAAS;MACTZ,OAAOxhB;MACPooB,UAAU;MACVy0B,UAAU;;IAGZ,OAAO3kB,gBAAgB;MACrB7U,iBAAiB;;IAGnB,OAAOhB,cAAc;MACnBC,aAAa;MACbC,YAAY,CAAC5D,SAASA,SAAS;;IAGjC6B;IACAQ;IACA27B;IACAt4B;IACAC;IACAw1B;IACA/4B;IAEArhB,YAAY6E,KAAK;AACf,YAAK;AAEL,WAAKmD,UAAU1H;AACf,WAAKwgB,gBAAgBxgB;AACrB,WAAK+gB,aAAa/gB;AAClB,WAAKghB,WAAWhhB;AAChB,WAAKqkB,cAAcrkB;AACnB,WAAKskB,cAActkB;AACnB,WAAK85C,cAAc;AACnB,WAAK6C,cAAc;AAEnB,UAAIp4C,KAAK;AACPsC,eAAOyB,OAAO,MAAM/D,GAAAA;;IAExB;IAEAuoB,QAAQiwB,QAAgBC,QAAgBvwB,kBAA2B;AACjE,YAAMvM,QAAQ,KAAK8M,SAAS;QAAC;QAAK;SAAMP,gBAAAA;AACxC,YAAM,EAACjL,OAAO+L,SAAAA,IAAYN,kBAAkB/M,OAAO;QAAC/W,GAAG4zC;QAAQ3zC,GAAG4zC;MAAM,CAAA;AACxE,YAAM,EAACj8B,YAAYC,UAAUqD,aAAaC,aAAa9D,cAAAA,IAAiB,KAAKwM,SAAS;QACpF;QACA;QACA;QACA;QACA;SACCP,gBAAAA;AACH,YAAMwwB,WAAW,KAAKv1C,QAAQ0a,UAAU,KAAK1a,QAAQoc,eAAe;AACpE,YAAM+B,iBAAiBhV,eAAe2P,eAAeQ,WAAWD,UAAAA;AAChE,YAAMm8B,iBAAiBz7B,cAAcD,OAAOT,YAAYC,QAAAA,KAAaD,eAAeC;AACpF,YAAMm8B,gBAAgBt3B,kBAAkB/E,OAAOo8B;AAC/C,YAAME,eAAeC,WAAW9vB,UAAUlJ,cAAc44B,SAAS34B,cAAc24B,OAAAA;AAE/E,aAAQE,iBAAiBC;IAC3B;IAEA/vB,eAAeZ,kBAA2B;AACxC,YAAM,EAACtjB,GAAGC,GAAAA,IAAG2X,YAAYC,UAAUqD,aAAaC,YAAW,IAAI,KAAK0I,SAAS;QAC3E;QACA;QACA;QACA;QACA;QACA;SACCP,gBAAAA;AACH,YAAM,EAAC9P,QAAAA,SAAQyF,QAAAA,IAAW,KAAK1a;AAC/B,YAAM41C,aAAav8B,aAAaC,YAAY;AAC5C,YAAMu8B,cAAcl5B,cAAcC,cAAclC,UAAUzF,WAAU;AACpE,aAAO;QACLxT,GAAGA,IAAIrI,KAAKogB,IAAIo8B,SAAaC,IAAAA;QAC7Bn0C,GAAGA,KAAItI,KAAKsgB,IAAIk8B,SAAaC,IAAAA;MAC/B;IACF;IAEAplB,gBAAgB1L,kBAA2B;AACzC,aAAO,KAAKY,eAAeZ,gBAAAA;IAC7B;IAEA5qB,KAAKsN,KAA+B;AAClC,YAAM,EAACzH,SAAS8Y,cAAa,IAAI;AACjC,YAAM7D,WAAUjV,QAAQiV,UAAU,KAAK;AACvC,YAAMyF,WAAW1a,QAAQ0a,WAAW,KAAK;AACzC,YAAMgG,WAAW1gB,QAAQ0gB;AACzB,WAAK0xB,cAAepyC,QAAQ4e,gBAAgB,UAAW,OAAO;AAC9D,WAAKq2B,cAAcn8B,gBAAgBM,MAAMhgB,KAAKoE,MAAMsb,gBAAgBM,GAAAA,IAAO;AAE3E,UAAIN,kBAAkB,KAAK,KAAK6D,cAAc,KAAK,KAAKC,cAAc,GAAG;AACvE;;AAGFnV,UAAI03B,KAAI;AAER,YAAMyW,aAAa,KAAKv8B,aAAa,KAAKC,YAAY;AACtD7R,UAAIquC,UAAU18C,KAAKogB,IAAIo8B,SAAAA,IAAa3gC,SAAQ7b,KAAKsgB,IAAIk8B,SAAa3gC,IAAAA,OAAAA;AAClE,YAAM8gC,MAAM,IAAI38C,KAAKsgB,IAAItgB,KAAKC,IAAIghB,IAAIvB,iBAAiB,CAAA,CAAA;AACvD,YAAMk9B,eAAe/gC,UAAS8gC;AAE9BtuC,UAAIiU,YAAY1b,QAAQ2b;AACxBlU,UAAI4U,cAAcrc,QAAQsc;AAE1B04B,cAAQvtC,KAAK,MAAMuuC,cAAct7B,SAASgG,QAAAA;AAC1Csf,iBAAWv4B,KAAK,MAAMuuC,cAAct7B,SAASgG,QAAAA;AAE7CjZ,UAAI43B,QAAO;IACb;EACF;ACzZA,WAAS4W,SAASxuC,KAAKzH,SAASwb,QAAQxb,SAAS;AAC/CyH,QAAIyuC,UAAU/sC,eAAeqS,MAAM26B,gBAAgBn2C,QAAQm2C,cAAc;AACzE1uC,QAAIi4B,YAAYv2B,eAAeqS,MAAMM,YAAY9b,QAAQ8b,UAAU,CAAA;AACnErU,QAAIsU,iBAAiB5S,eAAeqS,MAAMQ,kBAAkBhc,QAAQgc,gBAAgB;AACpFvU,QAAIwU,WAAW9S,eAAeqS,MAAMU,iBAAiBlc,QAAQkc,eAAe;AAC5EzU,QAAI0U,YAAYhT,eAAeqS,MAAMY,aAAapc,QAAQoc,WAAW;AACrE3U,QAAI4U,cAAclT,eAAeqS,MAAMc,aAAatc,QAAQsc,WAAW;EACzE;AAEA,WAASujB,OAAOp4B,KAAK2uC,UAAUt5C,QAAQ;AACrC2K,QAAIo4B,OAAO/iC,OAAO2E,GAAG3E,OAAO4E,CAAC;EAC/B;AAKA,WAAS20C,cAAcr2C,SAAS;AAC9B,QAAIA,QAAQs2C,SAAS;AACnB,aAAOC;;AAGT,QAAIv2C,QAAQw2C,WAAWx2C,QAAQy2C,2BAA2B,YAAY;AACpE,aAAOC;;AAGT,WAAO7W;EACT;AAEA,WAAS8W,SAASp+B,QAAQoH,SAAS6H,SAAS,CAAA,GAAI;AAC9C,UAAMlc,QAAQiN,OAAOte;AACrB,UAAM,EAACX,OAAOs9C,cAAc,GAAGv1C,KAAKw1C,YAAYvrC,QAAQ,EAAC,IAAIkc;AAC7D,UAAM,EAACluB,OAAOw9C,cAAcz1C,KAAK01C,WAAAA,IAAcp3B;AAC/C,UAAMrmB,SAAQF,KAAKoC,IAAIo7C,aAAaE,YAAAA;AACpC,UAAMz1C,OAAMjI,KAAKC,IAAIw9C,WAAWE,UAAAA;AAChC,UAAMC,UAAUJ,cAAcE,gBAAgBD,YAAYC,gBAAgBF,cAAcG,cAAcF,YAAYE;AAElH,WAAO;MACLzrC;MACAhS,OAAAA;MACAqE,MAAMgiB,QAAQhiB;MACd8E,MAAMpB,OAAM/H,UAAS,CAAC09C,UAAU1rC,QAAQjK,OAAM/H,SAAQ+H,OAAM/H;IAC9D;EACF;AAiBA,WAAS29C,YAAYxvC,KAAK2X,MAAMO,SAAS6H,QAAQ;AAC/C,UAAM,EAACjP,QAAQvY,QAAAA,IAAWof;AAC1B,UAAM,EAAC9T,OAAOhS,OAAAA,QAAOqE,MAAM8E,KAAAA,IAAQk0C,SAASp+B,QAAQoH,SAAS6H,MAAAA;AAC7D,UAAM0vB,aAAab,cAAcr2C,OAAAA;AAEjC,QAAI,EAACiQ,OAAO,MAAM7O,QAAO,IAAIomB,UAAU,CAAA;AACvC,QAAIttB,IAAGse,OAAO/M;AAEd,SAAKvR,KAAI,GAAGA,MAAKuI,MAAM,EAAEvI,IAAG;AAC1Bse,cAAQD,QAAQjf,UAAS8H,UAAUqB,OAAOvI,KAAIA,OAAMoR,KAAM;AAE1D,UAAIkN,MAAMG,MAAM;AAEd;MACF,WAAW1I,MAAM;AACfxI,YAAIm4B,OAAOpnB,MAAM/W,GAAG+W,MAAM9W,CAAC;AAC3BuO,eAAO;aACF;AACLinC,mBAAWzvC,KAAKgE,MAAM+M,OAAOpX,SAASpB,QAAQs2C,OAAO;;AAGvD7qC,aAAO+M;IACT;AAEA,QAAI7a,MAAM;AACR6a,cAAQD,QAAQjf,UAAS8H,UAAUqB,OAAO,MAAM6I,KAAM;AACtD4rC,iBAAWzvC,KAAKgE,MAAM+M,OAAOpX,SAASpB,QAAQs2C,OAAO;;AAGvD,WAAO,CAAC,CAAC34C;EACX;AAiBA,WAASw5C,gBAAgB1vC,KAAK2X,MAAMO,SAAS6H,QAAQ;AACnD,UAAMjP,SAAS6G,KAAK7G;AACpB,UAAM,EAACjN,OAAOhS,OAAAA,QAAOmJ,KAAAA,IAAQk0C,SAASp+B,QAAQoH,SAAS6H,MAAAA;AACvD,UAAM,EAACvX,OAAO,MAAM7O,QAAO,IAAIomB,UAAU,CAAA;AACzC,QAAI4vB,OAAO;AACX,QAAIC,SAAS;AACb,QAAIn9C,IAAGse,OAAO8+B,OAAOh9B,MAAMJ,MAAMq9B;AAEjC,UAAMC,aAAa,CAAC90C,YAAWpJ,UAAS8H,UAAUqB,OAAOC,SAAQA,WAAU4I;AAC3E,UAAMmsC,QAAQ,MAAM;AAClB,UAAIn9B,SAASJ,MAAM;AAEjBzS,YAAIo4B,OAAOuX,MAAMl9B,IAAAA;AACjBzS,YAAIo4B,OAAOuX,MAAM98B,IAAAA;AAGjB7S,YAAIo4B,OAAOuX,MAAMG,KAAAA;;IAErB;AAEA,QAAItnC,MAAM;AACRuI,cAAQD,OAAOi/B,WAAW,CAAG,CAAA;AAC7B/vC,UAAIm4B,OAAOpnB,MAAM/W,GAAG+W,MAAM9W,CAAC;;AAG7B,SAAKxH,KAAI,GAAGA,MAAKuI,MAAM,EAAEvI,IAAG;AAC1Bse,cAAQD,OAAOi/B,WAAWt9C,EAAG,CAAA;AAE7B,UAAIse,MAAMG,MAAM;AAEd;;AAGF,YAAMlX,IAAI+W,MAAM/W;AAChB,YAAMC,KAAI8W,MAAM9W;AAChB,YAAMg2C,SAASj2C,IAAI;AAEnB,UAAIi2C,WAAWJ,OAAO;AAEpB,YAAI51C,KAAI4Y,MAAM;AACZA,iBAAO5Y;mBACEA,KAAIwY,MAAM;AACnBA,iBAAOxY;;AAGT01C,gBAAQC,SAASD,OAAO31C,KAAK,EAAE41C;aAC1B;AACLI,cAAAA;AAGAhwC,YAAIo4B,OAAOp+B,GAAGC,EAAAA;AAEd41C,gBAAQI;AACRL,iBAAS;AACT/8B,eAAOJ,OAAOxY;;AAGhB61C,cAAQ71C;IACV;AACA+1C,UAAAA;EACF;AAOA,WAASE,kBAAkBv4B,MAAM;AAC/B,UAAMje,OAAOie,KAAKpf;AAClB,UAAM8b,aAAa3a,KAAK2a,cAAc3a,KAAK2a,WAAW7hB;AACtD,UAAM29C,cAAc,CAACx4B,KAAKM,cAAc,CAACN,KAAK1hB,SAAS,CAACyD,KAAKq1C,WAAWr1C,KAAKs1C,2BAA2B,cAAc,CAACt1C,KAAKm1C,WAAW,CAACx6B;AACxI,WAAO87B,cAAcT,kBAAkBF;EACzC;AAKA,WAASY,wBAAwB73C,SAAS;AACxC,QAAIA,QAAQs2C,SAAS;AACnB,aAAOwB;;AAGT,QAAI93C,QAAQw2C,WAAWx2C,QAAQy2C,2BAA2B,YAAY;AACpE,aAAOsB;;AAGT,WAAOC;EACT;AAEA,WAASC,oBAAoBxwC,KAAK2X,MAAM9lB,QAAOgS,OAAO;AACpD,QAAI4sC,OAAO94B,KAAK+4B;AAChB,QAAI,CAACD,MAAM;AACTA,aAAO94B,KAAK+4B,QAAQ,IAAIC,OAAAA;AACxB,UAAIh5B,KAAK84B,KAAKA,MAAM5+C,QAAOgS,KAAQ,GAAA;AACjC4sC,aAAKjG,UAAS;;;AAGlBgE,aAASxuC,KAAK2X,KAAKpf,OAAO;AAC1ByH,QAAIq4B,OAAOoY,IAAAA;EACb;AAEA,WAASG,iBAAiB5wC,KAAK2X,MAAM9lB,QAAOgS,OAAO;AACjD,UAAM,EAACgtC,UAAUt4C,QAAAA,IAAWof;AAC5B,UAAMm5B,gBAAgBZ,kBAAkBv4B,IAAAA;AAExC,eAAWO,WAAW24B,UAAU;AAC9BrC,eAASxuC,KAAKzH,SAAS2f,QAAQnE,KAAK;AACpC/T,UAAIk4B,UAAS;AACb,UAAI4Y,cAAc9wC,KAAK2X,MAAMO,SAAS;QAACrmB,OAAAA;QAAO+H,KAAK/H,SAAQgS,QAAQ;OAAK,GAAA;AACtE7D,YAAIwqC,UAAS;;AAEfxqC,UAAIq4B,OAAM;IACZ;EACF;AAEA,MAAM0Y,YAAY,OAAOJ,WAAW;AAEpC,WAASj+C,KAAKsN,KAAK2X,MAAM9lB,QAAOgS,OAAO;AACrC,QAAIktC,aAAa,CAACp5B,KAAKpf,QAAQ2f,SAAS;AACtCs4B,0BAAoBxwC,KAAK2X,MAAM9lB,QAAOgS,KAAAA;WACjC;AACL+sC,uBAAiB5wC,KAAK2X,MAAM9lB,QAAOgS,KAAAA;;EAEvC;AAEe,MAAMmtC,cAAN,cAA0BloB,SAAAA;IAEvC,OAAOnsB,KAAK;IAKZ,OAAO/E,WAAW;MAChB82C,gBAAgB;MAChBr6B,YAAY,CAAA;MACZE,kBAAkB;MAClBE,iBAAiB;MACjBE,aAAa;MACbs8B,iBAAiB;MACjBjC,wBAAwB;MACxB/tC,MAAM;MACNyW,UAAU;MACVm3B,SAAS;MACTE,SAAS;;IAMX,OAAOhmB,gBAAgB;MACrB7U,iBAAiB;MACjBW,aAAa;;IAIf,OAAO3B,cAAc;MACnBC,aAAa;MACbC,YAAY,CAAC5D,SAASA,SAAS,gBAAgBA,SAAS;;IAI1Djf,YAAY6E,KAAK;AACf,YAAK;AAEL,WAAK+iB,WAAW;AAChB,WAAK5f,UAAU1H;AACf,WAAKwG,SAASxG;AACd,WAAKoF,QAAQpF;AACb,WAAKspB,YAAYtpB;AACjB,WAAK6/C,QAAQ7/C;AACb,WAAKqgD,UAAUrgD;AACf,WAAKsgD,YAAYtgD;AACjB,WAAKonB,aAAa;AAClB,WAAKm5B,iBAAiB;AACtB,WAAKp5B,gBAAgBnnB;AAErB,UAAIuE,KAAK;AACPsC,eAAOyB,OAAO,MAAM/D,GAAAA;;IAExB;IAEAyjB,oBAAoB9S,WAAWhE,WAAW;AACxC,YAAMxJ,UAAU,KAAKA;AACrB,WAAKA,QAAQw2C,WAAWx2C,QAAQy2C,2BAA2B,eAAe,CAACz2C,QAAQs2C,WAAW,CAAC,KAAKuC,gBAAgB;AAClH,cAAMl7C,OAAOqC,QAAQmf,WAAW,KAAKzhB,QAAQ,KAAKkkB;AAClDk3B,mCAA2B,KAAKH,SAAS34C,SAASwN,WAAW7P,MAAM6L,SAAAA;AACnE,aAAKqvC,iBAAiB;;IAE1B;IAEA,IAAItgC,OAAOA,QAAQ;AACjB,WAAKogC,UAAUpgC;AACf,aAAO,KAAKqgC;AACZ,aAAO,KAAKT;AACZ,WAAKU,iBAAiB;IACxB;IAEA,IAAItgC,SAAS;AACX,aAAO,KAAKogC;IACd;IAEA,IAAIL,WAAW;AACb,aAAO,KAAKM,cAAc,KAAKA,YAAYG,iBAAiB,MAAM,KAAK/4C,QAAQ2f,OAAO;IACxF;IAMA6R,QAAQ;AACN,YAAM8mB,WAAW,KAAKA;AACtB,YAAM//B,SAAS,KAAKA;AACpB,aAAO+/B,SAASr+C,UAAUse,OAAO+/B,SAAS,CAAA,EAAGh/C,KAAK;IACpD;IAMA4c,OAAO;AACL,YAAMoiC,WAAW,KAAKA;AACtB,YAAM//B,SAAS,KAAKA;AACpB,YAAMjN,QAAQgtC,SAASr+C;AACvB,aAAOqR,SAASiN,OAAO+/B,SAAShtC,QAAQ,CAAA,EAAGjK,GAAG;IAChD;IASA23C,YAAYxgC,OAAOspB,UAAU;AAC3B,YAAM9hC,UAAU,KAAKA;AACrB,YAAMU,QAAQ8X,MAAMspB,QAAS;AAC7B,YAAMvpB,SAAS,KAAKA;AACpB,YAAM+/B,WAAWW,eAAe,MAAM;QAACnX;QAAUxoC,OAAOoH;QAAOW,KAAKX;MAAK,CAAA;AAEzE,UAAI,CAAC43C,SAASr+C,QAAQ;AACpB;;AAGF,YAAMspB,SAAS,CAAA;AACf,YAAM21B,eAAerB,wBAAwB73C,OAAAA;AAC7C,UAAI9F,IAAGuI;AACP,WAAKvI,KAAI,GAAGuI,OAAO61C,SAASr+C,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AACjD,cAAM,EAACZ,OAAAA,QAAO+H,KAAAA,KAAAA,IAAOi3C,SAASp+C,EAAE;AAChC,cAAMslC,KAAKjnB,OAAOjf,MAAM;AACxB,cAAMmmC,KAAKlnB,OAAOlX,IAAI;AACtB,YAAIm+B,OAAOC,IAAI;AACblc,iBAAOroB,KAAKskC,EAAAA;AACZ;;AAEF,cAAMx9B,KAAI5I,KAAKwY,KAAKlR,QAAQ8+B,GAAGsC,QAAAA,MAAcrC,GAAGqC,QAAAA,IAAYtC,GAAGsC,QAAAA,EAAQ;AACvE,cAAMqX,eAAeD,aAAa1Z,IAAIC,IAAIz9B,IAAGhC,QAAQs2C,OAAO;AAC5D6C,qBAAarX,QAAAA,IAAYtpB,MAAMspB,QAAS;AACxCve,eAAOroB,KAAKi+C,YAAAA;MACd;AACA,aAAO51B,OAAOtpB,WAAW,IAAIspB,OAAO,CAAA,IAAKA;IAC3C;IAgBA0zB,YAAYxvC,KAAKkY,SAAS6H,QAAQ;AAChC,YAAM+wB,gBAAgBZ,kBAAkB,IAAI;AAC5C,aAAOY,cAAc9wC,KAAK,MAAMkY,SAAS6H,MAAAA;IAC3C;IASA0wB,KAAKzwC,KAAKnO,QAAOgS,OAAO;AACtB,YAAMgtC,WAAW,KAAKA;AACtB,YAAMC,gBAAgBZ,kBAAkB,IAAI;AAC5C,UAAIh6C,OAAO,KAAKD;AAEhBpE,MAAAA,SAAQA,UAAS;AACjBgS,cAAQA,SAAU,KAAKiN,OAAOte,SAASX;AAEvC,iBAAWqmB,WAAW24B,UAAU;AAC9B36C,gBAAQ46C,cAAc9wC,KAAK,MAAMkY,SAAS;UAACrmB,OAAAA;UAAO+H,KAAK/H,SAAQgS,QAAQ;QAAC,CAAA;MAC1E;AACA,aAAO,CAAC,CAAC3N;IACX;IASAxD,KAAKsN,KAAK+F,WAAWlU,QAAOgS,OAAO;AACjC,YAAMtL,UAAU,KAAKA,WAAW,CAAA;AAChC,YAAMuY,SAAS,KAAKA,UAAU,CAAA;AAE9B,UAAIA,OAAOte,UAAU+F,QAAQoc,aAAa;AACxC3U,YAAI03B,KAAI;AAERhlC,aAAKsN,KAAK,MAAMnO,QAAOgS,KAAAA;AAEvB7D,YAAI43B,QAAO;;AAGb,UAAI,KAAKzf,UAAU;AAEjB,aAAKi5B,iBAAiB;AACtB,aAAKV,QAAQ7/C;;IAEjB;EACF;AClbA,WAAS8sB,UAAQtB,IAAkB0C,KAAa7iB,MAAiBohB,kBAA4B;AAC3F,UAAM/kB,UAAU8jB,GAAG9jB;AACnB,UAAM,EAAC,CAAC2D,IAAK,GAAEjD,MAAAA,IAASojB,GAAGwB,SAAS;MAAC3hB;OAAOohB,gBAAAA;AAE5C,WAAQ3rB,KAAKwY,IAAI4U,MAAM9lB,KAAAA,IAASV,QAAQsY,SAAStY,QAAQo5C;EAC3D;AAIe,MAAMC,eAAN,cAA2B9oB,SAAAA;IAExC,OAAOnsB,KAAK;IAEZiB;IACAsT;IACAjd;;;;IAKA,OAAO2D,WAAW;MAChB+c,aAAa;MACbg9B,WAAW;MACXv6B,kBAAkB;MAClBy6B,aAAa;MACbn+B,YAAY;MACZ7C,QAAQ;MACRO,UAAU;;;;;IAMZ,OAAO2X,gBAAgB;MACrB7U,iBAAiB;MACjBW,aAAa;;IAGftkB,YAAY6E,KAAK;AACf,YAAK;AAEL,WAAKmD,UAAU1H;AACf,WAAK+M,SAAS/M;AACd,WAAKqgB,OAAOrgB;AACZ,WAAKoD,OAAOpD;AAEZ,UAAIuE,KAAK;AACPsC,eAAOyB,OAAO,MAAM/D,GAAAA;;IAExB;IAEAuoB,QAAQm0B,QAAgBC,QAAgBz0B,kBAA4B;AAClE,YAAM/kB,UAAU,KAAKA;AACrB,YAAM,EAACyB,GAAGC,GAAAA,GAAAA,IAAK,KAAK4jB,SAAS;QAAC;QAAK;SAAMP,gBAAAA;AACzC,aAAS3rB,KAAKyrB,IAAI00B,SAAS93C,GAAG,CAAA,IAAKrI,KAAKyrB,IAAI20B,SAAS93C,IAAG,CAAA,IAAMtI,KAAKyrB,IAAI7kB,QAAQo5C,YAAYp5C,QAAQsY,QAAQ,CAAA;IAC7G;IAEAmhC,SAASF,QAAgBx0B,kBAA4B;AACnD,aAAOK,UAAQ,MAAMm0B,QAAQ,KAAKx0B,gBAAAA;IACpC;IAEA20B,SAASF,QAAgBz0B,kBAA4B;AACnD,aAAOK,UAAQ,MAAMo0B,QAAQ,KAAKz0B,gBAAAA;IACpC;IAEAY,eAAeZ,kBAA4B;AACzC,YAAM,EAACtjB,GAAGC,GAAAA,GAAAA,IAAK,KAAK4jB,SAAS;QAAC;QAAK;SAAMP,gBAAAA;AACzC,aAAO;QAACtjB;QAAGC,GAAAA;MAAC;IACd;IAEAf,KAAKX,SAAqD;AACxDA,gBAAUA,WAAW,KAAKA,WAAW,CAAA;AACrC,UAAIsY,SAAStY,QAAQsY,UAAU;AAC/BA,eAASlf,KAAKoC,IAAI8c,QAAQA,UAAUtY,QAAQs5C,eAAe,CAAA;AAC3D,YAAMl9B,cAAc9D,UAAUtY,QAAQoc,eAAe;AACrD,cAAQ9D,SAAS8D,eAAe;IAClC;IAEAjiB,KAAKsN,KAA+B8F,MAAiB;AACnD,YAAMvN,UAAU,KAAKA;AAErB,UAAI,KAAK2Y,QAAQ3Y,QAAQsY,SAAS,OAAO,CAAC6M,eAAe,MAAM5X,MAAM,KAAK5M,KAAKX,OAAAA,IAAW,CAAI,GAAA;AAC5F;;AAGFyH,UAAI4U,cAAcrc,QAAQsc;AAC1B7U,UAAI0U,YAAYnc,QAAQoc;AACxB3U,UAAIiU,YAAY1b,QAAQ2b;AACxBg+B,gBAAUlyC,KAAKzH,SAAS,KAAKyB,GAAG,KAAKC,CAAC;IACxC;IAEAqiB,WAAW;AACT,YAAM/jB,UAAU,KAAKA,WAAW,CAAA;AAEhC,aAAOA,QAAQsY,SAAStY,QAAQo5C;IAClC;EACF;AC5FA,WAASQ,aAAaC,KAAK90B,kBAAkB;AAC3C,UAAM,EAACtjB,GAAGC,GAAAA,IAAGoS,MAAMkC,OAAOD,OAAAA,IAAmC8jC,IAAIv0B,SAAS;MAAC;MAAK;MAAK;MAAQ;MAAS;OAAWP,gBAAAA;AAEjH,QAAIjjB,OAAMF,QAAOD,MAAKE,SAAQi4C;AAE9B,QAAID,IAAIhmC,YAAY;AAClBimC,aAAO/jC,SAAS;AAChBjU,MAAAA,QAAO1I,KAAKC,IAAIoI,GAAGqS,IAAAA;AACnBlS,MAAAA,SAAQxI,KAAKoC,IAAIiG,GAAGqS,IAAAA;AACpBnS,MAAAA,OAAMD,KAAIo4C;AACVj4C,MAAAA,UAASH,KAAIo4C;WACR;AACLA,aAAO9jC,QAAQ;AACflU,MAAAA,QAAOL,IAAIq4C;AACXl4C,MAAAA,SAAQH,IAAIq4C;AACZn4C,MAAAA,OAAMvI,KAAKC,IAAIqI,IAAGoS,IAAAA;AAClBjS,MAAAA,UAASzI,KAAKoC,IAAIkG,IAAGoS,IAAAA;;AAGvB,WAAO;MAAChS,MAAAA;MAAMH,KAAAA;MAAKC,OAAAA;MAAOC,QAAAA;IAAM;EAClC;AAEA,WAASk4C,YAAYphC,OAAMjY,OAAOrH,MAAKmC,MAAK;AAC1C,WAAOmd,QAAO,IAAI6gB,YAAY94B,OAAOrH,MAAKmC,IAAI;EAChD;AAEA,WAASw+C,iBAAiBH,KAAKI,MAAMC,MAAM;AACzC,UAAMx5C,QAAQm5C,IAAI75C,QAAQoc;AAC1B,UAAMzD,QAAOkhC,IAAI5lC;AACjB,UAAMy+B,KAAIyH,OAAOz5C,KAAAA;AAEjB,WAAO;MACLsB,GAAG+3C,YAAYphC,MAAKhX,KAAK+wC,GAAE/wC,KAAK,GAAGu4C,IAAAA;MACnCj4C,GAAG83C,YAAYphC,MAAK/W,OAAO8wC,GAAE9wC,OAAO,GAAGq4C,IAAAA;MACvC/3C,GAAG63C,YAAYphC,MAAK9W,QAAQ6wC,GAAE7wC,QAAQ,GAAGq4C,IAAAA;MACzC/3C,GAAG43C,YAAYphC,MAAK7W,MAAM4wC,GAAE5wC,MAAM,GAAGm4C,IAAAA;IACvC;EACF;AAEA,WAASzH,kBAAkBqH,KAAKI,MAAMC,MAAM;AAC1C,UAAM,EAAChmC,mBAAkB,IAAI2lC,IAAIv0B,SAAS;MAAC;IAAqB,CAAA;AAChE,UAAM5kB,QAAQm5C,IAAI75C,QAAQsb;AAC1B,UAAMo3B,KAAI0H,cAAc15C,KAAAA;AACxB,UAAM25C,OAAOjhD,KAAKC,IAAI4gD,MAAMC,IAAAA;AAC5B,UAAMvhC,QAAOkhC,IAAI5lC;AAIjB,UAAMqmC,eAAepmC,sBAAsBjV,SAASyB,KAAAA;AAEpD,WAAO;MACL65C,SAASR,YAAY,CAACO,gBAAgB3hC,MAAKhX,OAAOgX,MAAK7W,MAAM4wC,GAAE6H,SAAS,GAAGF,IAAAA;MAC3EG,UAAUT,YAAY,CAACO,gBAAgB3hC,MAAKhX,OAAOgX,MAAK/W,OAAO8wC,GAAE8H,UAAU,GAAGH,IAAAA;MAC9EI,YAAYV,YAAY,CAACO,gBAAgB3hC,MAAK9W,UAAU8W,MAAK7W,MAAM4wC,GAAE+H,YAAY,GAAGJ,IAAAA;MACpFK,aAAaX,YAAY,CAACO,gBAAgB3hC,MAAK9W,UAAU8W,MAAK/W,OAAO8wC,GAAEgI,aAAa,GAAGL,IAAAA;IACzF;EACF;AAEA,WAASM,cAAcd,KAAK;AAC1B,UAAMe,SAAShB,aAAaC,GAAAA;AAC5B,UAAM7jC,QAAQ4kC,OAAOh5C,QAAQg5C,OAAO94C;AACpC,UAAMiU,SAAS6kC,OAAO/4C,SAAS+4C,OAAOj5C;AACtC,UAAMwe,SAAS65B,iBAAiBH,KAAK7jC,QAAQ,GAAGD,SAAS,CAAA;AACzD,UAAMuC,SAASk6B,kBAAkBqH,KAAK7jC,QAAQ,GAAGD,SAAS,CAAA;AAE1D,WAAO;MACL8kC,OAAO;QACLp5C,GAAGm5C,OAAO94C;QACVJ,GAAGk5C,OAAOj5C;QACVqnB,GAAGhT;QACHkT,GAAGnT;QACHuC;MACF;MACA48B,OAAO;QACLzzC,GAAGm5C,OAAO94C,OAAOqe,OAAOhe;QACxBT,GAAGk5C,OAAOj5C,MAAMwe,OAAOne;QACvBgnB,GAAGhT,QAAQmK,OAAOhe,IAAIge,OAAOle;QAC7BinB,GAAGnT,SAASoK,OAAOne,IAAIme,OAAOje;QAC9BoW,QAAQ;UACNiiC,SAASnhD,KAAKoC,IAAI,GAAG8c,OAAOiiC,UAAUnhD,KAAKoC,IAAI2kB,OAAOne,GAAGme,OAAOhe,CAAC,CAAA;UACjEq4C,UAAUphD,KAAKoC,IAAI,GAAG8c,OAAOkiC,WAAWphD,KAAKoC,IAAI2kB,OAAOne,GAAGme,OAAOle,CAAC,CAAA;UACnEw4C,YAAYrhD,KAAKoC,IAAI,GAAG8c,OAAOmiC,aAAarhD,KAAKoC,IAAI2kB,OAAOje,GAAGie,OAAOhe,CAAC,CAAA;UACvEu4C,aAAathD,KAAKoC,IAAI,GAAG8c,OAAOoiC,cAActhD,KAAKoC,IAAI2kB,OAAOje,GAAGie,OAAOle,CAAC,CAAA;QAC3E;MACF;IACF;EACF;AAEA,WAASmjB,QAAQy0B,KAAKp4C,GAAGC,IAAGqjB,kBAAkB;AAC5C,UAAM+1B,QAAQr5C,MAAM;AACpB,UAAMs5C,QAAQr5C,OAAM;AACpB,UAAMs5C,WAAWF,SAASC;AAC1B,UAAMH,SAASf,OAAO,CAACmB,YAAYpB,aAAaC,KAAK90B,gBAAAA;AAErD,WAAO61B,WACHE,SAASnF,WAAWl0C,GAAGm5C,OAAO94C,MAAM84C,OAAOh5C,KAAK,OAChDm5C,SAASpF,WAAWj0C,IAAGk5C,OAAOj5C,KAAKi5C,OAAO/4C,MAAM;EACtD;AAEA,WAASo5C,UAAU3iC,QAAQ;AACzB,WAAOA,OAAOiiC,WAAWjiC,OAAOkiC,YAAYliC,OAAOmiC,cAAcniC,OAAOoiC;EAC1E;AAOA,WAASQ,kBAAkBzzC,KAAKyqC,MAAM;AACpCzqC,QAAIyqC,KAAKA,KAAKzwC,GAAGywC,KAAKxwC,GAAGwwC,KAAKlpB,GAAGkpB,KAAKhpB,CAAC;EACzC;AAEA,WAASiyB,YAAYjJ,MAAMkJ,QAAQC,UAAU,CAAA,GAAI;AAC/C,UAAM55C,IAAIywC,KAAKzwC,MAAM45C,QAAQ55C,IAAI,CAAC25C,SAAS;AAC3C,UAAM15C,KAAIwwC,KAAKxwC,MAAM25C,QAAQ35C,IAAI,CAAC05C,SAAS;AAC3C,UAAMpyB,KAAKkpB,KAAKzwC,IAAIywC,KAAKlpB,MAAMqyB,QAAQ55C,IAAI45C,QAAQryB,IAAIoyB,SAAS,KAAK35C;AACrE,UAAMynB,MAAKgpB,KAAKxwC,IAAIwwC,KAAKhpB,MAAMmyB,QAAQ35C,IAAI25C,QAAQnyB,IAAIkyB,SAAS,KAAK15C;AACrE,WAAO;MACLD,GAAGywC,KAAKzwC,IAAIA;MACZC,GAAGwwC,KAAKxwC,IAAIA;MACZsnB,GAAGkpB,KAAKlpB,IAAIA;MACZE,GAAGgpB,KAAKhpB,IAAIA;MACZ5Q,QAAQ45B,KAAK55B;IACf;EACF;AAEe,MAAMgjC,aAAN,cAAyB/qB,SAAAA;IAEtC,OAAOnsB,KAAK;IAKZ,OAAO/E,WAAW;MAChB4U,eAAe;MACfmI,aAAa;MACbd,cAAc;MACd3G,eAAe;MACfwG,YAAY7iB;;IAMd,OAAOk4B,gBAAgB;MACrB7U,iBAAiB;MACjBW,aAAa;;IAGftkB,YAAY6E,KAAK;AACf,YAAK;AAEL,WAAKmD,UAAU1H;AACf,WAAKub,aAAavb;AAClB,WAAKwb,OAAOxb;AACZ,WAAK0d,QAAQ1d;AACb,WAAKyd,SAASzd;AACd,WAAKqc,gBAAgBrc;AAErB,UAAIuE,KAAK;AACPsC,eAAOyB,OAAO,MAAM/D,GAAAA;;IAExB;IAEA1C,KAAKsN,KAAK;AACR,YAAM,EAACkN,eAAe3U,SAAS,EAACsc,aAAaX,gBAAAA,EAAgB,IAAI;AACjE,YAAM,EAACu5B,OAAO2F,MAAAA,IAASF,cAAc,IAAI;AACzC,YAAMY,cAAcN,UAAUJ,MAAMviC,MAAM,IAAIkjC,qBAAqBN;AAEnEzzC,UAAI03B,KAAI;AAER,UAAI0b,MAAM7xB,MAAMksB,MAAMlsB,KAAK6xB,MAAM3xB,MAAMgsB,MAAMhsB,GAAG;AAC9CzhB,YAAIk4B,UAAS;AACb4b,oBAAY9zC,KAAK0zC,YAAYN,OAAOlmC,eAAeugC,KAAAA,CAAAA;AACnDztC,YAAI4F,KAAI;AACRkuC,oBAAY9zC,KAAK0zC,YAAYjG,OAAO,CAACvgC,eAAekmC,KAAAA,CAAAA;AACpDpzC,YAAIiU,YAAYY;AAChB7U,YAAIiB,KAAK,SAAA;;AAGXjB,UAAIk4B,UAAS;AACb4b,kBAAY9zC,KAAK0zC,YAAYjG,OAAOvgC,aAAAA,CAAAA;AACpClN,UAAIiU,YAAYC;AAChBlU,UAAIiB,KAAI;AAERjB,UAAI43B,QAAO;IACb;IAEAja,QAAQm0B,QAAQC,QAAQz0B,kBAAkB;AACxC,aAAOK,QAAQ,MAAMm0B,QAAQC,QAAQz0B,gBAAAA;IACvC;IAEA00B,SAASF,QAAQx0B,kBAAkB;AACjC,aAAOK,QAAQ,MAAMm0B,QAAQ,MAAMx0B,gBAAAA;IACrC;IAEA20B,SAASF,QAAQz0B,kBAAkB;AACjC,aAAOK,QAAQ,MAAM,MAAMo0B,QAAQz0B,gBAAAA;IACrC;IAEAY,eAAeZ,kBAAkB;AAC/B,YAAM,EAACtjB,GAAGC,GAAAA,IAAGoS,MAAMD,WAAU,IAA6B,KAAKyR,SAAS;QAAC;QAAK;QAAK;QAAQ;SAAeP,gBAAAA;AAC1G,aAAO;QACLtjB,GAAGoS,cAAcpS,IAAIqS,QAAQ,IAAIrS;QACjCC,GAAGmS,aAAanS,MAAKA,KAAIoS,QAAQ;MACnC;IACF;IAEAiQ,SAASpgB,MAAM;AACb,aAAOA,SAAS,MAAM,KAAKqS,QAAQ,IAAI,KAAKD,SAAS;IACvD;EACF;;;;;;;;ACpNA,MAAM0lC,gBAAgB;IACpB;IACA;IACA;IACA;IACA;IACA;IACA;;EACD;AAGD,MAAMC,oBAAoCD,8BAAclgC,IAAInf,CAAAA,WAASA,OAAMu/C,QAAQ,QAAQ,OAASA,EAAAA,QAAQ,KAAK,QAAA,CAAA;AAEjH,WAASC,eAAe1hD,IAAW;AACjC,WAAOuhD,cAAcvhD,KAAIuhD,cAAcxhD,MAAM;EAC/C;AAEA,WAAS4hD,mBAAmB3hD,IAAW;AACrC,WAAOwhD,kBAAkBxhD,KAAIwhD,kBAAkBzhD,MAAM;EACvD;AAEA,WAAS6hD,uBAAuBx1C,SAAuBpM,IAAW;AAChEoM,YAAQgW,cAAcs/B,eAAe1hD,EAAAA;AACrCoM,YAAQqV,kBAAkBkgC,mBAAmB3hD,EAAAA;AAE7C,WAAO,EAAEA;EACX;AAEA,WAAS6hD,wBAAwBz1C,SAAuBpM,IAAW;AACjEoM,YAAQqV,kBAAkBrV,QAAQhD,KAAKiY,IAAI,MAAMqgC,eAAe1hD,IAAAA,CAAAA;AAEhE,WAAOA;EACT;AAEA,WAAS8hD,yBAAyB11C,SAAuBpM,IAAW;AAClEoM,YAAQqV,kBAAkBrV,QAAQhD,KAAKiY,IAAI,MAAMsgC,mBAAmB3hD,IAAAA,CAAAA;AAEpE,WAAOA;EACT;AAEA,WAAS+hD,aAAazjD,OAAc;AAClC,QAAI0B,KAAI;AAER,WAAO,CAACoM,SAAuBtD,iBAAyB;AACtD,YAAMoC,aAAa5M,MAAMwR,eAAehH,YAAAA,EAAcoC;AAEtD,UAAIA,sBAAsBmV,oBAAoB;AAC5CrgB,QAAAA,KAAI6hD,wBAAwBz1C,SAASpM,EAAAA;iBAC5BkL,sBAAsBmb,qBAAqB;AACpDrmB,QAAAA,KAAI8hD,yBAAyB11C,SAASpM,EAAAA;MACxC,WAAWkL,YAAY;AACrBlL,QAAAA,KAAI4hD,uBAAuBx1C,SAASpM,EAAAA;;IAExC;EACF;AAEA,WAASgiD,0BACPvhC,cACA;AACA,QAAIwhC;AAEJ,SAAKA,KAAKxhC,cAAa;AACrB,UAAIA,aAAYwhC,CAAAA,EAAG7/B,eAAe3B,aAAYwhC,CAAAA,EAAGxgC,iBAAiB;AAChE,eAAO;;IAEX;AAEA,WAAO;EACT;AAEA,WAASygC,yBACP9X,YACA;AACA,WAAOA,eAAeA,WAAWhoB,eAAegoB,WAAW3oB;EAC7D;AAEA,WAAS0gC,mCAAmC;AAC1C,WAAOh9C,UAASid,gBAAgB,qBAAqBjd,UAASsc,oBAAoB;EACpF;AAEA,MAAA,gBAAe;IACbvX,IAAI;IAEJ/E,UAAU;MACRgyB,SAAS;MACTirB,eAAe;IACjB;IAEAxxB,aAAatyB,OAAc+jD,OAAOv8C,SAA8B;AAC9D,UAAI,CAACA,QAAQqxB,SAAS;AACpB;;AAGF,YAAM,EACJ/tB,MAAM,EAACyG,SAAAA,GACP/J,SAASw8C,aAAY,IACnBhkD,MAAMqG;AACV,YAAM,EAACyO,UAAAA,UAAQ,IAAIkvC;AAEnB,YAAMC,0BACJP,0BAA0BnyC,QAAAA,KAC1BqyC,yBAAyBI,YACxBlvC,KAAAA,aAAY4uC,0BAA0B5uC,SACvC+uC,KAAAA,iCAAAA;AAEF,UAAI,CAACr8C,QAAQs8C,iBAAiBG,yBAAyB;AACrD;;AAGF,YAAMC,YAAYT,aAAazjD,KAAAA;AAE/BuR,eAAS/Q,QAAQ0jD,SAAAA;IACnB;EACF;AC5HA,WAASC,eAAer5C,MAAMhK,QAAOgS,OAAOuc,gBAAgB7nB,SAAS;AASnE,UAAM48C,UAAU58C,QAAQ48C,WAAW/0B;AAEnC,QAAI+0B,WAAWtxC,OAAO;AACpB,aAAOhI,KAAKmgB,MAAMnqB,QAAOA,SAAQgS,KAAAA;;AAGnC,UAAMuxC,YAAY,CAAA;AAElB,UAAMC,eAAexxC,QAAQ,MAAMsxC,UAAU;AAC7C,QAAIG,eAAe;AACnB,UAAMC,WAAW1jD,SAAQgS,QAAQ;AAEjC,QAAIiG,KAAIjY;AACR,QAAIY,IAAG+iD,cAAcC,SAAS3vC,MAAM4vC;AAEpCN,cAAUE,cAAAA,IAAkBz5C,KAAKiO,EAAE;AAEnC,SAAKrX,KAAI,GAAGA,KAAI0iD,UAAU,GAAG1iD,MAAK;AAChC,UAAIk9C,OAAO;AACX,UAAIgG,OAAO;AACX,UAAIh5B;AAGJ,YAAMi5B,gBAAgBjkD,KAAKoE,OAAOtD,KAAI,KAAK4iD,WAAAA,IAAe,IAAIxjD;AAC9D,YAAMgkD,cAAclkD,KAAKC,IAAID,KAAKoE,OAAOtD,KAAI,KAAK4iD,WAAAA,IAAe,GAAGxxC,KAAShS,IAAAA;AAC7E,YAAMikD,iBAAiBD,cAAcD;AAErC,WAAKj5B,IAAIi5B,eAAej5B,IAAIk5B,aAAal5B,KAAK;AAC5CgzB,gBAAQ9zC,KAAK8gB,CAAE,EAAC3iB;AAChB27C,gBAAQ95C,KAAK8gB,CAAE,EAAC1iB;MAClB;AAEA01C,cAAQmG;AACRH,cAAQG;AAGR,YAAMC,YAAYpkD,KAAKoE,MAAMtD,KAAI4iD,WAAAA,IAAe,IAAIxjD;AACpD,YAAMmkD,UAAUrkD,KAAKC,IAAID,KAAKoE,OAAOtD,KAAI,KAAK4iD,WAAAA,IAAe,GAAGxxC,KAAShS,IAAAA;AACzE,YAAM,EAACmI,GAAGi8C,SAASh8C,GAAGi8C,QAAAA,IAAWr6C,KAAKiO,EAAE;AAOxC2rC,gBAAU3vC,OAAO;AAEjB,WAAK6W,IAAIo5B,WAAWp5B,IAAIq5B,SAASr5B,KAAK;AACpC7W,eAAO,MAAMnU,KAAKwY,KACf8rC,UAAUtG,SAAS9zC,KAAK8gB,CAAAA,EAAG1iB,IAAIi8C,YAC/BD,UAAUp6C,KAAK8gB,CAAE,EAAC3iB,MAAM27C,OAAOO,QAAM;AAGxC,YAAIpwC,OAAO2vC,SAAS;AAClBA,oBAAU3vC;AACV0vC,yBAAe35C,KAAK8gB,CAAE;AACtB+4B,kBAAQ/4B;;MAEZ;AAEAy4B,gBAAUE,cAAAA,IAAkBE;AAC5B1rC,MAAAA,KAAI4rC;IACN;AAGAN,cAAUE,cAAAA,IAAkBz5C,KAAK05C,QAAS;AAE1C,WAAOH;EACT;AAEA,WAASe,iBAAiBt6C,MAAMhK,QAAOgS,OAAOuc,gBAAgB;AAC5D,QAAIuvB,OAAO;AACX,QAAIC,SAAS;AACb,QAAIn9C,IAAGse,OAAO/W,GAAGC,IAAG41C,OAAOuG,UAAUC,UAAUC,YAAYzjC,MAAMJ;AACjE,UAAM2iC,YAAY,CAAA;AAClB,UAAMG,WAAW1jD,SAAQgS,QAAQ;AAEjC,UAAM0yC,OAAO16C,KAAKhK,MAAAA,EAAOmI;AACzB,UAAMw8C,OAAO36C,KAAK05C,QAAAA,EAAUv7C;AAC5B,UAAMy8C,KAAKD,OAAOD;AAElB,SAAK9jD,KAAIZ,QAAOY,KAAIZ,SAAQgS,OAAO,EAAEpR,IAAG;AACtCse,cAAQlV,KAAKpJ,EAAE;AACfuH,WAAK+W,MAAM/W,IAAIu8C,QAAQE,KAAKr2B;AAC5BnmB,MAAAA,KAAI8W,MAAM9W;AACV,YAAMg2C,SAASj2C,IAAI;AAEnB,UAAIi2C,WAAWJ,OAAO;AAEpB,YAAI51C,KAAI4Y,MAAM;AACZA,iBAAO5Y;AACPm8C,qBAAW3jD;mBACFwH,KAAIwY,MAAM;AACnBA,iBAAOxY;AACPo8C,qBAAW5jD;;AAIbk9C,gBAAQC,SAASD,OAAO5+B,MAAM/W,KAAK,EAAE41C;aAChC;AAEL,cAAM8G,YAAYjkD,KAAI;AAEtB,YAAI,CAACoY,cAAcurC,QAAa,KAAA,CAACvrC,cAAcwrC,QAAW,GAAA;AAKxD,gBAAMM,qBAAqBhlD,KAAKC,IAAIwkD,UAAUC,QAAAA;AAC9C,gBAAMO,qBAAqBjlD,KAAKoC,IAAIqiD,UAAUC,QAAAA;AAE9C,cAAIM,uBAAuBL,cAAcK,uBAAuBD,WAAW;AACzEtB,sBAAU3hD,KAAK;cACb,GAAGoI,KAAK86C,kBAAmB;cAC3B38C,GAAG21C;YACL,CAAA;;AAEF,cAAIiH,uBAAuBN,cAAcM,uBAAuBF,WAAW;AACzEtB,sBAAU3hD,KAAK;cACb,GAAGoI,KAAK+6C,kBAAmB;cAC3B58C,GAAG21C;YACL,CAAA;;;AAMJ,YAAIl9C,KAAI,KAAKikD,cAAcJ,YAAY;AAErClB,oBAAU3hD,KAAKoI,KAAK66C,SAAU,CAAA;;AAIhCtB,kBAAU3hD,KAAKsd,KAAAA;AACf8+B,gBAAQI;AACRL,iBAAS;AACT/8B,eAAOJ,OAAOxY;AACdm8C,mBAAWC,WAAWC,aAAa7jD;;IAEvC;AAEA,WAAO2iD;EACT;AAEA,WAASyB,sBAAsBh4C,SAAS;AACtC,QAAIA,QAAQoZ,YAAY;AACtB,YAAMpc,OAAOgD,QAAQwB;AACrB,aAAOxB,QAAQoZ;AACf,aAAOpZ,QAAQwB;AACf3I,aAAOo/C,eAAej4C,SAAS,QAAQ;QACrCk4C,cAAc;QACdC,YAAY;QACZC,UAAU;QACVh+C,OAAO4C;MACT,CAAA;;EAEJ;AAEA,WAASq7C,mBAAmBnmD,OAAO;AACjCA,UAAM8K,KAAKyG,SAAS/Q,QAAQ,CAACsN,YAAY;AACvCg4C,4BAAsBh4C,OAAAA;IACxB,CAAA;EACF;AAEA,WAASs4C,0CAA0Cr7C,MAAMgV,QAAQ;AAC/D,UAAMsmC,aAAatmC,OAAOte;AAE1B,QAAIX,SAAQ;AACZ,QAAIgS;AAEJ,UAAM,EAAC9H,OAAM,IAAID;AACjB,UAAM,EAAClK,KAAAA,MAAKmC,KAAAA,MAAK8I,YAAYC,WAAU,IAAIf,OAAOa,cAAa;AAE/D,QAAIC,YAAY;AACdhL,MAAAA,SAAQkgC,YAAYlW,aAAa/K,QAAQ/U,OAAOG,MAAMtK,IAAKqqB,EAAAA,IAAI,GAAGm7B,aAAa,CAAA;;AAEjF,QAAIt6C,YAAY;AACd+G,cAAQkuB,YAAYlW,aAAa/K,QAAQ/U,OAAOG,MAAMnI,IAAAA,EAAKqoB,KAAK,GAAGvqB,QAAOulD,UAAcvlD,IAAAA;WACnF;AACLgS,cAAQuzC,aAAavlD;;AAGvB,WAAO;MAACA,OAAAA;MAAOgS;IAAK;EACtB;AAEA,MAAA,oBAAe;IACblH,IAAI;IAEJ/E,UAAU;MACRy/C,WAAW;MACXztB,SAAS;IACX;IAEA0tB,sBAAsB,CAACvmD,OAAO+X,MAAMvQ,YAAY;AAC9C,UAAI,CAACA,QAAQqxB,SAAS;AAEpBstB,2BAAmBnmD,KAAAA;AACnB;;AAIF,YAAMqvB,iBAAiBrvB,MAAMwd;AAE7Bxd,YAAM8K,KAAKyG,SAAS/Q,QAAQ,CAACsN,SAAStD,iBAAiB;AACrD,cAAM,EAAC8E,OAAO0B,UAAAA,IAAalD;AAC3B,cAAM/C,OAAO/K,MAAMwR,eAAehH,YAAAA;AAClC,cAAMM,OAAOwE,SAASxB,QAAQhD;AAE9B,YAAIrG,QAAQ;UAACuM;UAAWhR,MAAMwH,QAAQwJ;QAAU,CAAA,MAAM,KAAK;AAEzD;;AAGF,YAAI,CAACjG,KAAK6B,WAAWgD,oBAAoB;AAEvC;;AAGF,cAAM42C,QAAQxmD,MAAMwN,OAAOzC,KAAK2F,OAAO;AACvC,YAAI81C,MAAMrmD,SAAS,YAAYqmD,MAAMrmD,SAAS,QAAQ;AAEpD;;AAGF,YAAIH,MAAMwH,QAAQoL,SAAS;AAEzB;;AAGF,YAAI,EAAC9R,OAAAA,QAAOgS,MAAAA,IAASszC,0CAA0Cr7C,MAAMD,IAAAA;AACrE,cAAM27C,YAAYj/C,QAAQi/C,aAAa,IAAIp3B;AAC3C,YAAIvc,SAAS2zC,WAAW;AAEtBX,gCAAsBh4C,OAAAA;AACtB;;AAGF,YAAIgM,cAAcxK,KAAQ,GAAA;AAIxBxB,kBAAQwB,QAAQxE;AAChB,iBAAOgD,QAAQhD;AACfnE,iBAAOo/C,eAAej4C,SAAS,QAAQ;YACrCk4C,cAAc;YACdC,YAAY;YACZ9jD,KAAK,WAAW;AACd,qBAAO,KAAK+kB;YACd;YACA5kB,KAAK,SAASwrC,IAAG;AACf,mBAAKx+B,QAAQw+B;YACf;UACF,CAAA;;AAIF,YAAIuW;AACJ,gBAAQ78C,QAAQ8+C,WAAS;UACzB,KAAK;AACHjC,wBAAYF,eAAer5C,MAAMhK,QAAOgS,OAAOuc,gBAAgB7nB,OAAAA;AAC/D;UACF,KAAK;AACH68C,wBAAYe,iBAAiBt6C,MAAMhK,QAAOgS,OAAOuc,cAAAA;AACjD;UACF;AACE,kBAAM,IAAIzF,MAAM,qCAAqCpiB,QAAQ8+C,SAAS,GAAG;QAC3E;AAEAx4C,gBAAQoZ,aAAam9B;MACvB,CAAA;IACF;IAEA3M,QAAQ13C,OAAO;AACbmmD,yBAAmBnmD,KAAAA;IACrB;EACF;AC5RO,WAASogD,UAAUx5B,MAAMtiB,QAAQglC,UAAU;AAChD,UAAMwW,WAAWl5B,KAAKk5B;AACtB,UAAM//B,SAAS6G,KAAK7G;AACpB,UAAM2mC,UAAUpiD,OAAOyb;AACvB,UAAM6pB,QAAQ,CAAA;AAEd,eAAWziB,WAAW24B,UAAU;AAC9B,UAAI,EAACh/C,OAAAA,QAAO+H,KAAAA,KAAAA,IAAOse;AACnBte,MAAAA,OAAM89C,gBAAgB7lD,QAAO+H,MAAKkX,MAAAA;AAElC,YAAMqiC,SAASwE,WAAWtd,UAAUvpB,OAAOjf,MAAAA,GAAQif,OAAOlX,IAAAA,GAAMse,QAAQhiB,IAAI;AAE5E,UAAI,CAACb,OAAOw7C,UAAU;AAGpBlW,cAAMlnC,KAAK;UACT28B,QAAQlY;UACR7iB,QAAQ89C;UACRthD,OAAOif,OAAOjf,MAAM;UACpB+H,KAAKkX,OAAOlX,IAAI;QAClB,CAAA;AACA;;AAIF,YAAMg+C,iBAAiBpG,eAAen8C,QAAQ89C,MAAAA;AAE9C,iBAAW0E,OAAOD,gBAAgB;AAChC,cAAME,YAAYH,WAAWtd,UAAUod,QAAQI,IAAIhmD,KAAK,GAAG4lD,QAAQI,IAAIj+C,GAAG,GAAGi+C,IAAI3hD,IAAI;AACrF,cAAM6hD,cAAcC,cAAc9/B,SAASpH,QAAQgnC,SAAAA;AAEnD,mBAAWG,cAAcF,aAAa;AACpCpd,gBAAMlnC,KAAK;YACT28B,QAAQ6nB;YACR5iD,QAAQwiD;YACRhmD,OAAO;cACL,CAACwoC,QAAAA,GAAW6d,SAAS/E,QAAQ2E,WAAW,SAASnmD,KAAKoC,GAAG;YAC3D;YACA6F,KAAK;cACH,CAACygC,QAAAA,GAAW6d,SAAS/E,QAAQ2E,WAAW,OAAOnmD,KAAKC,GAAG;YACzD;UACF,CAAA;QACF;MACF;IACF;AACA,WAAO+oC;EACT;AAEO,WAASgd,WAAWtd,UAAUtQ,QAAOtb,MAAMvY,MAAM;AACtD,QAAIA,MAAM;AACR;;AAEF,QAAIrE,SAAQk4B,OAAMsQ,QAAS;AAC3B,QAAIzgC,OAAM6U,KAAK4rB,QAAS;AAExB,QAAIA,aAAa,SAAS;AACxBxoC,MAAAA,SAAQw4C,gBAAgBx4C,MAAAA;AACxB+H,MAAAA,OAAMywC,gBAAgBzwC,IAAAA;;AAExB,WAAO;MAACygC;MAAUxoC,OAAAA;MAAO+H,KAAAA;IAAG;EAC9B;AAEO,WAASu+C,oBAAoBC,UAAUzgC,MAAM;AAClD,UAAM,EAAC3d,IAAI,MAAMC,GAAAA,KAAI,KAAI,IAAIm+C,YAAY,CAAA;AACzC,UAAMC,aAAa1gC,KAAK7G;AACxB,UAAMA,SAAS,CAAA;AACf6G,SAAKk5B,SAASt/C,QAAQ,CAAC,EAACM,OAAAA,QAAO+H,KAAAA,KAAG,MAAM;AACtCA,MAAAA,OAAM89C,gBAAgB7lD,QAAO+H,MAAKy+C,UAAAA;AAClC,YAAMtuB,SAAQsuB,WAAWxmD,MAAM;AAC/B,YAAM4c,OAAO4pC,WAAWz+C,IAAI;AAC5B,UAAIK,OAAM,MAAM;AACd6W,eAAOrd,KAAK;UAACuG,GAAG+vB,OAAM/vB;UAAGC,GAAAA;QAAC,CAAA;AAC1B6W,eAAOrd,KAAK;UAACuG,GAAGyU,KAAKzU;UAAGC,GAAAA;QAAC,CAAA;iBAChBD,MAAM,MAAM;AACrB8W,eAAOrd,KAAK;UAACuG;UAAGC,GAAG8vB,OAAM9vB;QAAC,CAAA;AAC1B6W,eAAOrd,KAAK;UAACuG;UAAGC,GAAGwU,KAAKxU;QAAC,CAAA;;IAE7B,CAAA;AACA,WAAO6W;EACT;AAEO,WAAS4mC,gBAAgB7lD,QAAO+H,MAAKkX,QAAQ;AAClD,WAAMlX,OAAM/H,QAAO+H,QAAO;AACxB,YAAMmX,QAAQD,OAAOlX,IAAI;AACzB,UAAI,CAACmV,MAAMgC,MAAM/W,CAAC,KAAK,CAAC+U,MAAMgC,MAAM9W,CAAC,GAAG;AACtC;;IAEJ;AACA,WAAOL;EACT;AAEA,WAASs+C,SAASpuC,IAAGrP,IAAGnF,MAAM9D,KAAI;AAChC,QAAIsY,MAAKrP,IAAG;AACV,aAAOjJ,IAAGsY,GAAExU,IAAAA,GAAOmF,GAAEnF,IAAK,CAAA;;AAE5B,WAAOwU,KAAIA,GAAExU,IAAK,IAAGmF,KAAIA,GAAEnF,IAAK,IAAG;EACrC;ACnFO,WAASgjD,oBAAoBF,UAAUzgC,MAAM;AAClD,QAAI7G,SAAS,CAAA;AACb,QAAI7a,QAAQ;AAEZ,QAAIiC,QAAQkgD,QAAW,GAAA;AACrBniD,cAAQ;AAER6a,eAASsnC;WACJ;AACLtnC,eAASqnC,oBAAoBC,UAAUzgC,IAAAA;;AAGzC,WAAO7G,OAAOte,SAAS,IAAIw+C,YAAY;MACrClgC;MACAvY,SAAS;QAACw2C,SAAS;MAAC;MACpB94C;MACAkkB,WAAWlkB;IACb,CAAA,IAAK;EACP;AAEO,WAASsiD,iBAAiBnoB,QAAQ;AACvC,WAAOA,UAAUA,OAAOnvB,SAAS;EACnC;AC5BO,WAASu3C,eAAeC,SAASx9C,QAAOy9C,WAAW;AACxD,UAAMtoB,SAASqoB,QAAQx9C,MAAM;AAC7B,QAAIgG,QAAOmvB,OAAOnvB;AAClB,UAAM03C,UAAU;MAAC19C;IAAM;AACvB,QAAI5F;AAEJ,QAAI,CAACqjD,WAAW;AACd,aAAOz3C;;AAGT,WAAOA,UAAS,SAAS03C,QAAQ3pC,QAAQ/N,KAAAA,MAAU,IAAI;AACrD,UAAI,CAACvF,eAASuF,KAAO,GAAA;AACnB,eAAOA;;AAGT5L,eAASojD,QAAQx3C,KAAK;AACtB,UAAI,CAAC5L,QAAQ;AACX,eAAO;;AAGT,UAAIA,OAAO+wC,SAAS;AAClB,eAAOnlC;;AAGT03C,cAAQllD,KAAKwN,KAAAA;AACbA,MAAAA,QAAO5L,OAAO4L;IAChB;AAEA,WAAO;EACT;AAOO,WAAS23C,YAAYjhC,MAAM1c,QAAO4I,OAAO;AAE9C,UAAM5C,QAAO43C,gBAAgBlhC,IAAAA;AAE7B,QAAIngB,SAASyJ,KAAO,GAAA;AAClB,aAAO8N,MAAM9N,MAAKhI,KAAK,IAAI,QAAQgI;;AAGrC,QAAI5L,SAASyjD,WAAW73C,KAAAA;AAExB,QAAIvF,eAASrG,MAAW1D,KAAAA,KAAKoE,MAAMV,MAAAA,MAAYA,QAAQ;AACrD,aAAO0jD,kBAAkB93C,MAAK,CAAE,GAAEhG,QAAO5F,QAAQwO,KAAAA;;AAGnD,WAAO;MAAC;MAAU;MAAS;MAAO;MAAS;MAASmL,QAAQ/N,KAAAA,KAAS,KAAKA;EAC5E;AAEA,WAAS83C,kBAAkBC,SAAS/9C,QAAO5F,QAAQwO,OAAO;AACxD,QAAIm1C,YAAY,OAAOA,YAAY,KAAK;AACtC3jD,eAAS4F,SAAQ5F;;AAGnB,QAAIA,WAAW4F,UAAS5F,SAAS,KAAKA,UAAUwO,OAAO;AACrD,aAAO;;AAGT,WAAOxO;EACT;AAOO,WAAS4jD,gBAAgBh4C,OAAMzH,OAAO;AAC3C,QAAIw6B,QAAQ;AACZ,QAAI/yB,UAAS,SAAS;AACpB+yB,cAAQx6B,MAAMY;eACL6G,UAAS,OAAO;AACzB+yB,cAAQx6B,MAAMU;eACL1C,SAASyJ,KAAO,GAAA;AAEzB+yB,cAAQx6B,MAAM4Q,iBAAiBnJ,MAAKhI,KAAK;eAChCO,MAAMsU,cAAc;AAC7BkmB,cAAQx6B,MAAMsU,aAAY;;AAE5B,WAAOkmB;EACT;AAQO,WAASklB,gBAAgBj4C,OAAMzH,OAAO+R,YAAY;AACvD,QAAItS;AAEJ,QAAIgI,UAAS,SAAS;AACpBhI,cAAQsS;eACCtK,UAAS,OAAO;AACzBhI,cAAQO,MAAMjB,QAAQoB,UAAUH,MAAM5H,MAAM4H,MAAMzF;eACzCyD,SAASyJ,KAAO,GAAA;AAEzBhI,cAAQgI,MAAKhI;WACR;AACLA,cAAQO,MAAM66B,aAAY;;AAE5B,WAAOp7B;EACT;AAKA,WAAS4/C,gBAAgBlhC,MAAM;AAC7B,UAAMpf,UAAUof,KAAKpf;AACrB,UAAM4gD,aAAa5gD,QAAQ0I;AAC3B,QAAIA,QAAOS,eAAey3C,cAAcA,WAAW9jD,QAAQ8jD,UAAAA;AAE3D,QAAIl4C,UAASpQ,QAAW;AACtBoQ,MAAAA,QAAO,CAAC,CAAC1I,QAAQ2b;;AAGnB,QAAIjT,UAAS,SAASA,UAAS,MAAM;AACnC,aAAO;;AAGT,QAAIA,UAAS,MAAM;AACjB,aAAO;;AAET,WAAOA;EACT;AC1HO,WAASm4C,gBAAgBhpB,QAAQ;AACtC,UAAM,EAAC52B,OAAOyB,OAAAA,QAAO0c,KAAAA,IAAQyY;AAC7B,UAAMtf,SAAS,CAAA;AACf,UAAM+/B,WAAWl5B,KAAKk5B;AACtB,UAAMwI,eAAe1hC,KAAK7G;AAC1B,UAAMwoC,aAAaC,cAAc//C,OAAOyB,MAAAA;AACxCq+C,eAAW7lD,KAAK6kD,oBAAoB;MAACt+C,GAAG;MAAMC,GAAGT,MAAMY;OAASud,IAAAA,CAAAA;AAEhE,aAASllB,KAAI,GAAGA,KAAIo+C,SAASr+C,QAAQC,MAAK;AACxC,YAAMylB,UAAU24B,SAASp+C,EAAE;AAC3B,eAASkqB,IAAIzE,QAAQrmB,OAAO8qB,KAAKzE,QAAQte,KAAK+iB,KAAK;AACjD68B,uBAAe1oC,QAAQuoC,aAAa18B,CAAAA,GAAI28B,UAAAA;MAC1C;IACF;AACA,WAAO,IAAItI,YAAY;MAAClgC;MAAQvY,SAAS,CAAA;IAAE,CAAA;EAC7C;AAOA,WAASghD,cAAc//C,OAAOyB,QAAO;AACnC,UAAMw+C,QAAQ,CAAA;AACd,UAAM9qB,QAAQn1B,MAAMiE,wBAAwB,MAAA;AAE5C,aAAShL,KAAI,GAAGA,KAAIk8B,MAAMn8B,QAAQC,MAAK;AACrC,YAAMqJ,OAAO6yB,MAAMl8B,EAAE;AACrB,UAAIqJ,KAAKb,UAAUA,QAAO;AACxB;;AAEF,UAAI,CAACa,KAAK4D,QAAQ;AAChB+5C,cAAMC,QAAQ59C,KAAK+C,OAAO;;IAE9B;AACA,WAAO46C;EACT;AAOA,WAASD,eAAe1oC,QAAQ6oC,aAAaL,YAAY;AACvD,UAAMM,YAAY,CAAA;AAClB,aAASj9B,IAAI,GAAGA,IAAI28B,WAAW9mD,QAAQmqB,KAAK;AAC1C,YAAMhF,OAAO2hC,WAAW38B,CAAE;AAC1B,YAAM,EAACoN,OAAAA,QAAOtb,MAAMsC,MAAAA,IAAS8oC,UAAUliC,MAAMgiC,aAAa,GAAA;AAE1D,UAAI,CAAC5oC,SAAUgZ,UAAStb,MAAO;AAC7B;;AAEF,UAAIsb,QAAO;AAET6vB,kBAAUF,QAAQ3oC,KAAAA;aACb;AACLD,eAAOrd,KAAKsd,KAAAA;AACZ,YAAI,CAACtC,MAAM;AAET;;;IAGN;AACAqC,WAAOrd,KAAQmmD,GAAAA,SAAAA;EACjB;AAQA,WAASC,UAAUliC,MAAMgiC,aAAatf,UAAU;AAC9C,UAAMtpB,QAAQ4G,KAAK45B,YAAYoI,aAAatf,QAAAA;AAC5C,QAAI,CAACtpB,OAAO;AACV,aAAO,CAAA;;AAGT,UAAM+oC,aAAa/oC,MAAMspB,QAAS;AAClC,UAAMwW,WAAWl5B,KAAKk5B;AACtB,UAAMwH,aAAa1gC,KAAK7G;AACxB,QAAIiZ,SAAQ;AACZ,QAAItb,OAAO;AACX,aAAShc,KAAI,GAAGA,KAAIo+C,SAASr+C,QAAQC,MAAK;AACxC,YAAMylB,UAAU24B,SAASp+C,EAAE;AAC3B,YAAMsnD,aAAa1B,WAAWngC,QAAQrmB,KAAK,EAAEwoC,QAAS;AACtD,YAAM2f,YAAY3B,WAAWngC,QAAQte,GAAG,EAAEygC,QAAS;AACnD,UAAI6T,WAAW4L,YAAYC,YAAYC,SAAY,GAAA;AACjDjwB,QAAAA,SAAQ+vB,eAAeC;AACvBtrC,eAAOqrC,eAAeE;AACtB;;IAEJ;AACA,WAAO;MAACjwB,OAAAA;MAAOtb;MAAMsC;IAAK;EAC5B;ACzGO,MAAMkpC,YAAN,MAAMA;IACX1pD,YAAYmJ,MAAM;AAChB,WAAKM,IAAIN,KAAKM;AACd,WAAKC,IAAIP,KAAKO;AACd,WAAK4W,SAASnX,KAAKmX;IACrB;IAEA2+B,YAAYxvC,KAAKmzC,QAAQz5C,MAAM;AAC7B,YAAM,EAACM,GAAGC,GAAAA,IAAG4W,OAAM,IAAI;AACvBsiC,eAASA,UAAU;QAACthD,OAAO;QAAG+H,KAAK+X;MAAG;AACtC3R,UAAI+W,IAAI/c,GAAGC,IAAG4W,QAAQsiC,OAAOv5C,KAAKu5C,OAAOthD,OAAO,IAAI;AACpD,aAAO,CAAC6H,KAAKy5C;IACf;IAEA5B,YAAYxgC,OAAO;AACjB,YAAM,EAAC/W,GAAGC,GAAAA,IAAG4W,OAAM,IAAI;AACvB,YAAMwB,QAAQtB,MAAMsB;AACpB,aAAO;QACLrY,GAAGA,IAAIrI,KAAKogB,IAAIM,KAASxB,IAAAA;QACzB5W,GAAGA,KAAItI,KAAKsgB,IAAII,KAASxB,IAAAA;QACzBwB;MACF;IACF;EACF;ACdO,WAAS6nC,WAAW9pB,QAAQ;AACjC,UAAM,EAACr/B,OAAOkQ,MAAAA,OAAM0W,KAAAA,IAAQyY;AAE5B,QAAI10B,eAASuF,KAAO,GAAA;AAClB,aAAOk5C,eAAeppD,OAAOkQ,KAAAA;;AAG/B,QAAIA,UAAS,SAAS;AACpB,aAAOm4C,gBAAgBhpB,MAAAA;;AAGzB,QAAInvB,UAAS,SAAS;AACpB,aAAO;;AAGT,UAAMm3C,WAAWgC,gBAAgBhqB,MAAAA;AAEjC,QAAIgoB,oBAAoB6B,WAAW;AACjC,aAAO7B;;AAGT,WAAOE,oBAAoBF,UAAUzgC,IAAAA;EACvC;AAMA,WAASwiC,eAAeppD,OAAOkK,QAAO;AACpC,UAAMa,OAAO/K,MAAMwR,eAAetH,MAAAA;AAClC,UAAMmrC,UAAUtqC,QAAQ/K,MAAM0kB,iBAAiBxa,MAAAA;AAC/C,WAAOmrC,UAAUtqC,KAAK+C,UAAU;EAClC;AAEA,WAASu7C,gBAAgBhqB,QAAQ;AAC/B,UAAM52B,QAAQ42B,OAAO52B,SAAS,CAAA;AAE9B,QAAIA,MAAM6gB,0BAA0B;AAClC,aAAOggC,wBAAwBjqB,MAAAA;;AAEjC,WAAOkqB,sBAAsBlqB,MAAAA;EAC/B;AAGA,WAASkqB,sBAAsBlqB,QAAQ;AACrC,UAAM,EAAC52B,QAAQ,CAAA,GAAIyH,MAAAA,MAAAA,IAAQmvB;AAC3B,UAAM4D,QAAQilB,gBAAgBh4C,OAAMzH,KAAAA;AAEpC,QAAIkC,eAASs4B,KAAQ,GAAA;AACnB,YAAM5nB,aAAa5S,MAAM0S,aAAY;AAErC,aAAO;QACLlS,GAAGoS,aAAa4nB,QAAQ;QACxB/5B,GAAGmS,aAAa,OAAO4nB;MACzB;;AAGF,WAAO;EACT;AAEA,WAASqmB,wBAAwBjqB,QAAQ;AACvC,UAAM,EAAC52B,OAAOyH,MAAAA,MAAAA,IAAQmvB;AACtB,UAAM73B,UAAUiB,MAAMjB;AACtB,UAAM/F,SAASgH,MAAM8K,UAAS,EAAG9R;AACjC,UAAMX,SAAQ0G,QAAQoB,UAAUH,MAAMzF,MAAMyF,MAAM5H;AAClD,UAAMqH,QAAQigD,gBAAgBj4C,OAAMzH,OAAO3H,MAAAA;AAC3C,UAAMwD,SAAS,CAAA;AAEf,QAAIkD,QAAQkV,KAAKwL,UAAU;AACzB,YAAM5K,SAAS7U,MAAM6gB,yBAAyB,GAAGxoB,MAAAA;AACjD,aAAO,IAAIooD,UAAU;QACnBjgD,GAAGqU,OAAOrU;QACVC,GAAGoU,OAAOpU;QACV4W,QAAQrX,MAAMwgB,8BAA8B/gB,KAAAA;MAC9C,CAAA;;AAGF,aAASxG,KAAI,GAAGA,KAAID,QAAQ,EAAEC,IAAG;AAC/B4C,aAAO5B,KAAK+F,MAAM6gB,yBAAyB5nB,IAAGwG,KAAAA,CAAAA;IAChD;AACA,WAAO5D;EACT;ACzFO,WAASklD,UAAUv6C,KAAKowB,QAAQtqB,MAAM;AAC3C,UAAMzQ,SAAS6kD,WAAW9pB,MAAAA;AAC1B,UAAM,EAACr/B,OAAOkK,OAAAA,QAAO0c,MAAMne,OAAO0C,KAAI,IAAIk0B;AAC1C,UAAMoqB,WAAW7iC,KAAKpf;AACtB,UAAM4gD,aAAaqB,SAASv5C;AAC5B,UAAMtM,SAAQ6lD,SAAStmC;AACvB,UAAM,EAACumC,QAAQ9lD,QAAO8kD,QAAQ9kD,OAAK,IAAIwkD,cAAc,CAAA;AACrD,UAAMr9C,OAAO/K,MAAMwR,eAAetH,MAAAA;AAClC,UAAM2K,OAAOqiC,mBAAmBl3C,OAAO+K,IAAAA;AACvC,QAAIzG,UAAUsiB,KAAK7G,OAAOte,QAAQ;AAChCkmC,eAAS14B,KAAK8F,IAAAA;AACd40C,aAAO16C,KAAK;QAAC2X;QAAMtiB;QAAQolD;QAAOhB;QAAO3zC;QAAMtM;QAAO0C;QAAM0J;MAAI,CAAA;AAChEizB,iBAAW74B,GAAAA;;EAEf;AAEA,WAAS06C,OAAO16C,KAAK5K,KAAK;AACxB,UAAM,EAACuiB,MAAMtiB,QAAQolD,OAAOhB,OAAO3zC,MAAMtM,OAAOoM,KAAAA,IAAQxQ;AACxD,UAAMilC,WAAW1iB,KAAK1hB,QAAQ,UAAUb,IAAI8G;AAE5C8D,QAAI03B,KAAI;AAER,QAAIijB,YAAYlB;AAChB,QAAIA,UAAUgB,OAAO;AACnB,UAAIpgB,aAAa,KAAK;AACpBugB,qBAAa56C,KAAK3K,QAAQyQ,KAAK5L,GAAG;AAClC+G,aAAKjB,KAAK;UAAC2X;UAAMtiB;UAAQV,OAAO8lD;UAAOjhD;UAAO6gC;UAAUz0B;QAAI,CAAA;AAC5D5F,YAAI43B,QAAO;AACX53B,YAAI03B,KAAI;AACRkjB,qBAAa56C,KAAK3K,QAAQyQ,KAAK1L,MAAM;iBAC5BigC,aAAa,KAAK;AAC3BwgB,uBAAe76C,KAAK3K,QAAQyQ,KAAKzL,IAAI;AACrC4G,aAAKjB,KAAK;UAAC2X;UAAMtiB;UAAQV,OAAO8kD;UAAOjgD;UAAO6gC;UAAUz0B;QAAI,CAAA;AAC5D5F,YAAI43B,QAAO;AACX53B,YAAI03B,KAAI;AACRmjB,uBAAe76C,KAAK3K,QAAQyQ,KAAK3L,KAAK;AACtCwgD,oBAAYF;;;AAGhBx5C,SAAKjB,KAAK;MAAC2X;MAAMtiB;MAAQV,OAAOgmD;MAAWnhD;MAAO6gC;MAAUz0B;IAAI,CAAA;AAEhE5F,QAAI43B,QAAO;EACb;AAEA,WAASgjB,aAAa56C,KAAK3K,QAAQylD,OAAO;AACxC,UAAM,EAACjK,UAAU//B,OAAAA,IAAUzb;AAC3B,QAAI00B,SAAQ;AACZ,QAAIgxB,WAAW;AAEf/6C,QAAIk4B,UAAS;AACb,eAAWhgB,WAAW24B,UAAU;AAC9B,YAAM,EAACh/C,OAAAA,QAAO+H,KAAAA,KAAAA,IAAOse;AACrB,YAAMS,aAAa7H,OAAOjf,MAAM;AAChC,YAAM+mB,YAAY9H,OAAO4mC,gBAAgB7lD,QAAO+H,MAAKkX,MAAQ,CAAA;AAC7D,UAAIiZ,QAAO;AACT/pB,YAAIm4B,OAAOxf,WAAW3e,GAAG2e,WAAW1e,CAAC;AACrC8vB,QAAAA,SAAQ;aACH;AACL/pB,YAAIo4B,OAAOzf,WAAW3e,GAAG8gD,KAAAA;AACzB96C,YAAIo4B,OAAOzf,WAAW3e,GAAG2e,WAAW1e,CAAC;;AAEvC8gD,iBAAW,CAAC,CAAC1lD,OAAOm6C,YAAYxvC,KAAKkY,SAAS;QAAC1P,MAAMuyC;MAAQ,CAAA;AAC7D,UAAIA,UAAU;AACZ/6C,YAAIwqC,UAAS;aACR;AACLxqC,YAAIo4B,OAAOxf,UAAU5e,GAAG8gD,KAAAA;;IAE5B;AAEA96C,QAAIo4B,OAAO/iC,OAAO00B,MAAK,EAAG/vB,GAAG8gD,KAAAA;AAC7B96C,QAAIwqC,UAAS;AACbxqC,QAAI4F,KAAI;EACV;AAEA,WAASi1C,eAAe76C,KAAK3K,QAAQ2lD,OAAO;AAC1C,UAAM,EAACnK,UAAU//B,OAAAA,IAAUzb;AAC3B,QAAI00B,SAAQ;AACZ,QAAIgxB,WAAW;AAEf/6C,QAAIk4B,UAAS;AACb,eAAWhgB,WAAW24B,UAAU;AAC9B,YAAM,EAACh/C,OAAAA,QAAO+H,KAAAA,KAAAA,IAAOse;AACrB,YAAMS,aAAa7H,OAAOjf,MAAM;AAChC,YAAM+mB,YAAY9H,OAAO4mC,gBAAgB7lD,QAAO+H,MAAKkX,MAAQ,CAAA;AAC7D,UAAIiZ,QAAO;AACT/pB,YAAIm4B,OAAOxf,WAAW3e,GAAG2e,WAAW1e,CAAC;AACrC8vB,QAAAA,SAAQ;aACH;AACL/pB,YAAIo4B,OAAO4iB,OAAOriC,WAAW1e,CAAC;AAC9B+F,YAAIo4B,OAAOzf,WAAW3e,GAAG2e,WAAW1e,CAAC;;AAEvC8gD,iBAAW,CAAC,CAAC1lD,OAAOm6C,YAAYxvC,KAAKkY,SAAS;QAAC1P,MAAMuyC;MAAQ,CAAA;AAC7D,UAAIA,UAAU;AACZ/6C,YAAIwqC,UAAS;aACR;AACLxqC,YAAIo4B,OAAO4iB,OAAOpiC,UAAU3e,CAAC;;IAEjC;AAEA+F,QAAIo4B,OAAO4iB,OAAO3lD,OAAO00B,MAAK,EAAG9vB,CAAC;AAClC+F,QAAIwqC,UAAS;AACbxqC,QAAI4F,KAAI;EACV;AAEA,WAAS3E,KAAKjB,KAAK5K,KAAK;AACtB,UAAM,EAACuiB,MAAMtiB,QAAQglC,UAAU1lC,OAAAA,QAAO6E,OAAOoM,KAAAA,IAAQxQ;AACrD,UAAMy7C,WAAWM,UAAUx5B,MAAMtiB,QAAQglC,QAAAA;AAEzC,eAAW,EAACjK,QAAQ6qB,KAAK5lD,QAAQwiD,KAAKhmD,OAAAA,QAAO+H,KAAAA,KAAG,KAAKi3C,UAAU;AAC7D,YAAM,EAAC98B,OAAO,EAACG,kBAAkBvf,OAAAA,IAAS,CAAA,EAAE,IAAIsmD;AAChD,YAAMC,WAAW7lD,WAAW;AAE5B2K,UAAI03B,KAAI;AACR13B,UAAIiU,YAAYC;AAEhBinC,iBAAWn7C,KAAKxG,OAAOoM,MAAMs1C,YAAYvD,WAAWtd,UAAUxoC,QAAO+H,IAAAA,CAAAA;AAErEoG,UAAIk4B,UAAS;AAEb,YAAM6iB,WAAW,CAAC,CAACpjC,KAAK63B,YAAYxvC,KAAKi7C,GAAAA;AAEzC,UAAI/kD;AACJ,UAAIglD,UAAU;AACZ,YAAIH,UAAU;AACZ/6C,cAAIwqC,UAAS;eACR;AACL4Q,6BAAmBp7C,KAAK3K,QAAQuE,MAAKygC,QAAAA;;AAGvC,cAAMghB,aAAa,CAAC,CAAChmD,OAAOm6C,YAAYxvC,KAAK63C,KAAK;UAACrvC,MAAMuyC;UAAUphD,SAAS;QAAI,CAAA;AAChFzD,eAAO6kD,YAAYM;AACnB,YAAI,CAACnlD,MAAM;AACTklD,6BAAmBp7C,KAAK3K,QAAQxD,QAAOwoC,QAAAA;;;AAI3Cr6B,UAAIwqC,UAAS;AACbxqC,UAAIiB,KAAK/K,OAAO,YAAY,SAAS;AAErC8J,UAAI43B,QAAO;IACb;EACF;AAEA,WAASujB,WAAWn7C,KAAKxG,OAAOoM,MAAMutC,QAAQ;AAC5C,UAAMptC,YAAYvM,MAAMzI,MAAMgV;AAC9B,UAAM,EAACs0B,UAAUxoC,OAAAA,QAAO+H,KAAAA,KAAG,IAAIu5C,UAAU,CAAA;AAEzC,QAAI9Y,aAAa,OAAOA,aAAa,KAAK;AACxC,UAAIhgC,OAAMH,MAAKC,QAAOC;AAEtB,UAAIigC,aAAa,KAAK;AACpBhgC,QAAAA,QAAOxI;AACPqI,QAAAA,OAAM6L,UAAU7L;AAChBC,QAAAA,SAAQP;AACRQ,QAAAA,UAAS2L,UAAU3L;aACd;AACLC,QAAAA,QAAO0L,UAAU1L;AACjBH,QAAAA,OAAMrI;AACNsI,QAAAA,SAAQ4L,UAAU5L;AAClBC,QAAAA,UAASR;;AAGXoG,UAAIk4B,UAAS;AAEb,UAAItyB,MAAM;AACRvL,QAAAA,QAAO1I,KAAKoC,IAAIsG,OAAMuL,KAAKvL,IAAI;AAC/BF,QAAAA,SAAQxI,KAAKC,IAAIuI,QAAOyL,KAAKzL,KAAK;AAClCD,QAAAA,OAAMvI,KAAKoC,IAAImG,MAAK0L,KAAK1L,GAAG;AAC5BE,QAAAA,UAASzI,KAAKC,IAAIwI,SAAQwL,KAAKxL,MAAM;;AAGvC4F,UAAIyqC,KAAKpwC,OAAMH,MAAKC,SAAQE,OAAMD,UAASF,IAAAA;AAC3C8F,UAAI4F,KAAI;;EAEZ;AAEA,WAASw1C,mBAAmBp7C,KAAK3K,QAAQ0b,OAAOspB,UAAU;AACxD,UAAMihB,oBAAoBjmD,OAAOk8C,YAAYxgC,OAAOspB,QAAAA;AACpD,QAAIihB,mBAAmB;AACrBt7C,UAAIo4B,OAAOkjB,kBAAkBthD,GAAGshD,kBAAkBrhD,CAAC;;EAEvD;AC9KA,MAAA,QAAe;IACb0C,IAAI;IAEJ4+C,oBAAoBxqD,OAAO+jD,OAAOv8C,SAAS;AACzC,YAAMsL,SAAS9S,MAAM8K,KAAKyG,YAAY,CAAA,GAAI9P;AAC1C,YAAMimD,UAAU,CAAA;AAChB,UAAI38C,MAAMrJ,IAAGklB,MAAMyY;AAEnB,WAAK39B,KAAI,GAAGA,KAAIoR,OAAO,EAAEpR,IAAG;AAC1BqJ,eAAO/K,MAAMwR,eAAe9P,EAAAA;AAC5BklB,eAAO7b,KAAK+C;AACZuxB,iBAAS;AAET,YAAIzY,QAAQA,KAAKpf,WAAWof,gBAAgBq5B,aAAa;AACvD5gB,mBAAS;YACPgW,SAASr1C,MAAM0kB,iBAAiBhjB,EAAAA;YAChCwI,OAAOxI;YACPwO,MAAM23C,YAAYjhC,MAAMllB,IAAGoR,KAAAA;YAC3B9S;YACAmL,MAAMJ,KAAK6B,WAAWpF,QAAQwJ;YAC9BvI,OAAOsC,KAAKE;YACZ2b;UACF;;AAGF7b,aAAK0/C,UAAUprB;AACfqoB,gBAAQhlD,KAAK28B,MAAAA;MACf;AAEA,WAAK39B,KAAI,GAAGA,KAAIoR,OAAO,EAAEpR,IAAG;AAC1B29B,iBAASqoB,QAAQhmD,EAAE;AACnB,YAAI,CAAC29B,UAAUA,OAAOnvB,SAAS,OAAO;AACpC;;AAGFmvB,eAAOnvB,OAAOu3C,eAAeC,SAAShmD,IAAG8F,QAAQmgD,SAAS;MAC5D;IACF;IAEA+C,WAAW1qD,OAAO+jD,OAAOv8C,SAAS;AAChC,YAAM7F,QAAO6F,QAAQmjD,aAAa;AAClC,YAAM5gD,WAAW/J,MAAM2rB,6BAA4B;AACnD,YAAM5W,OAAO/U,MAAMgV;AACnB,eAAStT,KAAIqI,SAAStI,SAAS,GAAGC,MAAK,GAAG,EAAEA,IAAG;AAC7C,cAAM29B,SAASt1B,SAASrI,EAAAA,EAAG+oD;AAC3B,YAAI,CAACprB,QAAQ;AACX;;AAGFA,eAAOzY,KAAKkB,oBAAoB/S,MAAMsqB,OAAOl0B,IAAI;AACjD,YAAIxJ,SAAQ09B,OAAOnvB,MAAM;AACvBs5C,oBAAUxpD,MAAMiP,KAAKowB,QAAQtqB,IAAAA;;MAEjC;IACF;IAEA61C,mBAAmB5qD,OAAO+jD,OAAOv8C,SAAS;AACxC,UAAIA,QAAQmjD,aAAa,sBAAsB;AAC7C;;AAGF,YAAM5gD,WAAW/J,MAAM2rB,6BAA4B;AACnD,eAASjqB,KAAIqI,SAAStI,SAAS,GAAGC,MAAK,GAAG,EAAEA,IAAG;AAC7C,cAAM29B,SAASt1B,SAASrI,EAAAA,EAAG+oD;AAE3B,YAAIjD,iBAAiBnoB,MAAS,GAAA;AAC5BmqB,oBAAUxpD,MAAMiP,KAAKowB,QAAQr/B,MAAMgV,SAAS;;MAEhD;IACF;IAEA61C,kBAAkB7qD,OAAO+X,MAAMvQ,SAAS;AACtC,YAAM63B,SAAStnB,KAAKhN,KAAK0/C;AAEzB,UAAI,CAACjD,iBAAiBnoB,MAAAA,KAAW73B,QAAQmjD,aAAa,qBAAqB;AACzE;;AAGFnB,gBAAUxpD,MAAMiP,KAAKowB,QAAQr/B,MAAMgV,SAAS;IAC9C;IAEAnO,UAAU;MACR8gD,WAAW;MACXgD,UAAU;IACZ;EACF;ACzEA,MAAMG,aAAa,CAACC,WAAW3iB,aAAa;AAC1C,QAAI,EAAC4iB,YAAY5iB,UAAU6iB,WAAW7iB,SAAAA,IAAY2iB;AAElD,QAAIA,UAAUG,eAAe;AAC3BF,kBAAYpqD,KAAKC,IAAImqD,WAAW5iB,QAAAA;AAChC6iB,iBAAWF,UAAUI,mBAAmBvqD,KAAKC,IAAIoqD,UAAU7iB,QAAAA;;AAG7D,WAAO;MACL6iB;MACAD;MACAI,YAAYxqD,KAAKoC,IAAIolC,UAAU4iB,SAAAA;IACjC;EACF;AAEA,MAAMK,aAAa,CAACtyC,IAAGrP,OAAMqP,OAAM,QAAQrP,OAAM,QAAQqP,GAAEvO,iBAAiBd,GAAEc,gBAAgBuO,GAAE7O,UAAUR,GAAEQ;AAErG,MAAMohD,SAAN,cAAqBvzB,SAAAA;IAK1Bv4B,YAAY6G,SAAQ;AAClB,YAAK;AAEL,WAAKklD,SAAS;AAGd,WAAKC,iBAAiB,CAAA;AAKtB,WAAKC,eAAe;AAGpB,WAAKC,eAAe;AAEpB,WAAK1rD,QAAQqG,QAAOrG;AACpB,WAAKwH,UAAUnB,QAAOmB;AACtB,WAAKyH,MAAM5I,QAAO4I;AAClB,WAAK08C,cAAc7rD;AACnB,WAAK8rD,cAAc9rD;AACnB,WAAK+rD,aAAa/rD;AAClB,WAAKqlB,YAAYrlB;AACjB,WAAKolB,WAAWplB;AAChB,WAAKqJ,MAAMrJ;AACX,WAAKuJ,SAASvJ;AACd,WAAKwJ,OAAOxJ;AACZ,WAAKsJ,QAAQtJ;AACb,WAAKyd,SAASzd;AACd,WAAK0d,QAAQ1d;AACb,WAAKw8B,WAAWx8B;AAChB,WAAK2rB,WAAW3rB;AAChB,WAAK0mB,SAAS1mB;AACd,WAAKsvB,WAAWtvB;IAClB;IAEA4F,OAAOwf,UAAUC,WAAWgZ,SAAS;AACnC,WAAKjZ,WAAWA;AAChB,WAAKC,YAAYA;AACjB,WAAKmX,WAAW6B;AAEhB,WAAKI,cAAa;AAClB,WAAKutB,YAAW;AAChB,WAAKtsB,IAAG;IACV;IAEAjB,gBAAgB;AACd,UAAI,KAAKpjB,aAAY,GAAI;AACvB,aAAKqC,QAAQ,KAAK0H;AAClB,aAAK5b,OAAO,KAAKgzB,SAAShzB;AAC1B,aAAKF,QAAQ,KAAKoU;aACb;AACL,aAAKD,SAAS,KAAK4H;AACnB,aAAKhc,MAAM,KAAKmzB,SAASnzB;AACzB,aAAKE,SAAS,KAAKkU;;IAEvB;IAEAuuC,cAAc;AACZ,YAAMf,YAAY,KAAKvjD,QAAQ8L,UAAU,CAAA;AACzC,UAAIq4C,cAAc1qD,SAAK8pD,UAAUroC,gBAAgB;QAAC,KAAK1iB;SAAQ,IAAI,KAAK,CAAA;AAExE,UAAI+qD,UAAUt9C,QAAQ;AACpBk+C,sBAAcA,YAAYl+C,OAAO,CAAC7L,SAASmpD,UAAUt9C,OAAO7L,MAAM,KAAK5B,MAAM8K,IAAI,CAAA;;AAGnF,UAAIigD,UAAUjyC,MAAM;AAClB6yC,sBAAcA,YAAY7yC,KAAK,CAACC,IAAGrP,OAAMqhD,UAAUjyC,KAAKC,IAAGrP,IAAG,KAAK1J,MAAM8K,IAAI,CAAA;;AAG/E,UAAI,KAAKtD,QAAQoB,SAAS;AACxB+iD,oBAAY/iD,QAAO;;AAGrB,WAAK+iD,cAAcA;IACrB;IAEAnsB,MAAM;AACJ,YAAM,EAACh4B,SAASyH,IAAG,IAAI;AAMvB,UAAI,CAACzH,QAAQygB,SAAS;AACpB,aAAKzK,QAAQ,KAAKD,SAAS;AAC3B;;AAGF,YAAMwtC,YAAYvjD,QAAQ8L;AAC1B,YAAMy4C,YAAYtwB,OAAOsvB,UAAUvvB,IAAI;AACvC,YAAM4M,WAAW2jB,UAAU5jD;AAC3B,YAAMm5B,cAAc,KAAK0qB,oBAAmB;AAC5C,YAAM,EAACf,UAAUG,WAAAA,IAAcN,WAAWC,WAAW3iB,QAAAA;AAErD,UAAI5qB,OAAOD;AAEXtO,UAAIusB,OAAOuwB,UAAUlpB;AAErB,UAAI,KAAK1nB,aAAY,GAAI;AACvBqC,gBAAQ,KAAK0H;AACb3H,iBAAS,KAAK0uC,SAAS3qB,aAAa8G,UAAU6iB,UAAUG,UAAc,IAAA;aACjE;AACL7tC,iBAAS,KAAK4H;AACd3H,gBAAQ,KAAK0uC,SAAS5qB,aAAayqB,WAAWd,UAAUG,UAAc,IAAA;;AAGxE,WAAK5tC,QAAQ5c,KAAKC,IAAI2c,OAAOhW,QAAQ0d,YAAY,KAAKA,QAAQ;AAC9D,WAAK3H,SAAS3c,KAAKC,IAAI0c,QAAQ/V,QAAQ2d,aAAa,KAAKA,SAAS;IACpE;IAKA8mC,SAAS3qB,aAAa8G,UAAU6iB,UAAUG,YAAY;AACpD,YAAM,EAACn8C,KAAKiW,UAAU1d,SAAS,EAAC8L,QAAQ,EAACqe,QAAAA,EAAQ,EAAC,IAAI;AACtD,YAAMw6B,WAAW,KAAKX,iBAAiB,CAAA;AAEvC,YAAMK,aAAa,KAAKA,aAAa;QAAC;MAAE;AACxC,YAAMlwB,aAAayvB,aAAaz5B;AAChC,UAAIy6B,cAAc9qB;AAElBryB,UAAI2T,YAAY;AAChB3T,UAAIw2B,eAAe;AAEnB,UAAI4mB,MAAM;AACV,UAAIljD,OAAM,CAACwyB;AACX,WAAKgwB,YAAYnrD,QAAQ,CAACyjB,YAAYviB,OAAM;AAC1C,cAAM4qD,YAAYrB,WAAY7iB,WAAW,IAAKn5B,IAAIs9C,YAAYtoC,WAAWhB,IAAI,EAAEzF;AAE/E,YAAI9b,OAAM,KAAKmqD,WAAWA,WAAWpqD,SAAS,CAAA,IAAK6qD,YAAY,IAAI36B,UAAUzM,UAAU;AACrFknC,yBAAezwB;AACfkwB,qBAAWA,WAAWpqD,UAAUC,KAAI,IAAI,IAAI,EAAA,IAAM;AAClDyH,UAAAA,QAAOwyB;AACP0wB;;AAGFF,iBAASzqD,EAAAA,IAAK;UAAC4H,MAAM;UAAGH,KAAAA;UAAKkjD;UAAK7uC,OAAO8uC;UAAW/uC,QAAQ6tC;QAAU;AAEtES,mBAAWA,WAAWpqD,SAAS,CAAA,KAAM6qD,YAAY36B;MACnD,CAAA;AAEA,aAAOy6B;IACT;IAEAF,SAAS5qB,aAAayqB,WAAWd,UAAUuB,aAAa;AACtD,YAAM,EAACv9C,KAAKkW,WAAW3d,SAAS,EAAC8L,QAAQ,EAACqe,QAAAA,EAAQ,EAAC,IAAI;AACvD,YAAMw6B,WAAW,KAAKX,iBAAiB,CAAA;AACvC,YAAMI,cAAc,KAAKA,cAAc,CAAA;AACvC,YAAMa,cAActnC,YAAYmc;AAEhC,UAAIorB,aAAa/6B;AACjB,UAAIg7B,kBAAkB;AACtB,UAAIC,mBAAmB;AAEvB,UAAItjD,QAAO;AACX,UAAIujD,OAAM;AAEV,WAAKlB,YAAYnrD,QAAQ,CAACyjB,YAAYviB,OAAM;AAC1C,cAAM,EAAC4qD,WAAWlB,WAAU,IAAI0B,kBAAkB7B,UAAUc,WAAW98C,KAAKgV,YAAYuoC,WAAAA;AAGxF,YAAI9qD,KAAI,KAAKkrD,mBAAmBxB,aAAa,IAAIz5B,UAAU86B,aAAa;AACtEC,wBAAcC,kBAAkBh7B;AAChCi6B,sBAAYlpD,KAAK;YAAC8a,OAAOmvC;YAAiBpvC,QAAQqvC;UAAgB,CAAA;AAClEtjD,UAAAA,SAAQqjD,kBAAkBh7B;AAC1Bk7B,UAAAA;AACAF,4BAAkBC,mBAAmB;;AAIvCT,iBAASzqD,EAAAA,IAAK;UAAC4H,MAAAA;UAAMH,KAAKyjD;UAAkBC,KAAAA;UAAKrvC,OAAO8uC;UAAW/uC,QAAQ6tC;QAAU;AAGrFuB,0BAAkB/rD,KAAKoC,IAAI2pD,iBAAiBL,SAAAA;AAC5CM,4BAAoBxB,aAAaz5B;MACnC,CAAA;AAEA+6B,oBAAcC;AACdf,kBAAYlpD,KAAK;QAAC8a,OAAOmvC;QAAiBpvC,QAAQqvC;MAAgB,CAAA;AAElE,aAAOF;IACT;IAEAK,iBAAiB;AACf,UAAI,CAAC,KAAKvlD,QAAQygB,SAAS;AACzB;;AAEF,YAAMqZ,cAAc,KAAK0qB,oBAAmB;AAC5C,YAAM,EAACR,gBAAgBW,UAAU3kD,SAAS,EAAC4yB,OAAO9mB,QAAQ,EAACqe,QAAO,GAAGq7B,IAAAA,EAAI,IAAI;AAC7E,YAAMC,YAAYC,cAAcF,KAAK,KAAK1jD,MAAM,KAAKkU,KAAK;AAC1D,UAAI,KAAKrC,aAAY,GAAI;AACvB,YAAIkxC,MAAM;AACV,YAAI/iD,QAAO6yB,eAAe/B,OAAO,KAAK9wB,OAAOqoB,SAAS,KAAKvoB,QAAQ,KAAKyiD,WAAWQ,GAAI,CAAA;AACvF,mBAAWc,UAAUhB,UAAU;AAC7B,cAAIE,QAAQc,OAAOd,KAAK;AACtBA,kBAAMc,OAAOd;AACb/iD,YAAAA,QAAO6yB,eAAe/B,OAAO,KAAK9wB,OAAOqoB,SAAS,KAAKvoB,QAAQ,KAAKyiD,WAAWQ,GAAI,CAAA;;AAErFc,iBAAOhkD,OAAO,KAAKA,MAAMm4B,cAAc3P;AACvCw7B,iBAAO7jD,OAAO2jD,UAAUG,WAAWH,UAAUhkD,EAAEK,KAAO6jD,GAAAA,OAAO3vC,KAAK;AAClElU,UAAAA,SAAQ6jD,OAAO3vC,QAAQmU;QACzB;aACK;AACL,YAAIk7B,OAAM;AACV,YAAI1jD,OAAMgzB,eAAe/B,OAAO,KAAKjxB,MAAMm4B,cAAc3P,SAAS,KAAKtoB,SAAS,KAAKuiD,YAAYiB,IAAAA,EAAKtvC,MAAM;AAC5G,mBAAW4vC,UAAUhB,UAAU;AAC7B,cAAIgB,OAAON,QAAQA,MAAK;AACtBA,YAAAA,OAAMM,OAAON;AACb1jD,YAAAA,OAAMgzB,eAAe/B,OAAO,KAAKjxB,MAAMm4B,cAAc3P,SAAS,KAAKtoB,SAAS,KAAKuiD,YAAYiB,IAAAA,EAAKtvC,MAAM;;AAE1G4vC,iBAAOhkD,MAAMA;AACbgkD,iBAAO7jD,QAAQ,KAAKA,OAAOqoB;AAC3Bw7B,iBAAO7jD,OAAO2jD,UAAUG,WAAWH,UAAUhkD,EAAEkkD,OAAO7jD,IAAI,GAAG6jD,OAAO3vC,KAAK;AACzErU,UAAAA,QAAOgkD,OAAO5vC,SAASoU;QACzB;;IAEJ;IAEAxW,eAAe;AACb,aAAO,KAAK3T,QAAQikB,aAAa,SAAS,KAAKjkB,QAAQikB,aAAa;IACtE;IAEA9pB,OAAO;AACL,UAAI,KAAK6F,QAAQygB,SAAS;AACxB,cAAMhZ,MAAM,KAAKA;AACjB04B,iBAAS14B,KAAK,IAAI;AAElB,aAAKo+C,MAAK;AAEVvlB,mBAAW74B,GAAAA;;IAEf;IAKAo+C,QAAQ;AACN,YAAM,EAAC7lD,SAASmB,MAAMijD,aAAaC,YAAY58C,IAAAA,IAAO;AACtD,YAAM,EAACmrB,OAAO9mB,QAAQy3C,UAAAA,IAAapiD;AACnC,YAAM2kD,eAAezmD,UAASjD;AAC9B,YAAMqpD,YAAYC,cAAcvkD,KAAKqkD,KAAK,KAAK1jD,MAAM,KAAKkU,KAAK;AAC/D,YAAMuuC,YAAYtwB,OAAOsvB,UAAUvvB,IAAI;AACvC,YAAM,EAAC7J,QAAO,IAAIo5B;AAClB,YAAM3iB,WAAW2jB,UAAU5jD;AAC3B,YAAMolD,eAAenlB,WAAW;AAChC,UAAIolB;AAEJ,WAAKzlB,UAAS;AAGd94B,UAAI2T,YAAYqqC,UAAUrqC,UAAU,MAAA;AACpC3T,UAAIw2B,eAAe;AACnBx2B,UAAI0U,YAAY;AAChB1U,UAAIusB,OAAOuwB,UAAUlpB;AAErB,YAAM,EAACooB,UAAUD,WAAWI,WAAU,IAAIN,WAAWC,WAAW3iB,QAAAA;AAGhE,YAAMqlB,gBAAgB,SAASxkD,GAAGC,IAAG+a,YAAY;AAC/C,YAAIjG,MAAMitC,QAAaA,KAAAA,YAAY,KAAKjtC,MAAMgtC,SAAAA,KAAcA,YAAY,GAAG;AACzE;;AAIF/7C,YAAI03B,KAAI;AAER,cAAMhjB,YAAYhT,eAAesT,WAAWN,WAAW,CAAA;AACvD1U,YAAIiU,YAAYvS,eAAesT,WAAWf,WAAWoqC,YAAAA;AACrDr+C,YAAIyuC,UAAU/sC,eAAesT,WAAWy5B,SAAS,MAAA;AACjDzuC,YAAIsU,iBAAiB5S,eAAesT,WAAWV,gBAAgB,CAAA;AAC/DtU,YAAIwU,WAAW9S,eAAesT,WAAWR,UAAU,OAAA;AACnDxU,YAAI0U,YAAYA;AAChB1U,YAAI4U,cAAclT,eAAesT,WAAWJ,aAAaypC,YAAAA;AAEzDr+C,YAAIi4B,YAAYv2B,eAAesT,WAAWZ,UAAU,CAAA,CAAE,CAAA;AAEtD,YAAI0nC,UAAUG,eAAe;AAG3B,gBAAMwC,cAAc;YAClB5tC,QAAQkrC,YAAYpqD,KAAK+sD,QAAQ;YACjChrC,YAAYsB,WAAWtB;YACvBtC,UAAU4D,WAAW5D;YACrBuD,aAAaD;UACf;AACA,gBAAMmC,UAAUmnC,UAAUW,MAAM3kD,GAAGgiD,WAAW,CAAA;AAC9C,gBAAMllC,UAAU7c,KAAIqkD;AAGpBM,0BAAgB5+C,KAAKy+C,aAAa5nC,SAASC,SAASglC,UAAUI,mBAAmBF,QAAAA;eAC5E;AAGL,gBAAM6C,UAAU5kD,KAAItI,KAAKoC,KAAKolC,WAAW4iB,aAAa,GAAG,CAAA;AACzD,gBAAM+C,WAAWd,UAAUG,WAAWnkD,GAAGgiD,QAAAA;AACzC,gBAAMnoC,eAAe8+B,cAAc39B,WAAWnB,YAAY;AAE1D7T,cAAIk4B,UAAS;AAEb,cAAIxgC,OAAOW,OAAOwb,YAAAA,EAAc0pB,KAAKvwB,CAAAA,MAAKA,MAAM,CAAI,GAAA;AAClD+mC,+BAAmB/zC,KAAK;cACtBhG,GAAG8kD;cACH7kD,GAAG4kD;cACHt9B,GAAGy6B;cACHv6B,GAAGs6B;cACHlrC,QAAQgD;YACV,CAAA;iBACK;AACL7T,gBAAIyqC,KAAKqU,UAAUD,SAAS7C,UAAUD,SAAAA;;AAGxC/7C,cAAIiB,KAAI;AACR,cAAIyT,cAAc,GAAG;AACnB1U,gBAAIq4B,OAAM;;;AAIdr4B,YAAI43B,QAAO;MACb;AAEA,YAAMmnB,WAAW,SAAS/kD,GAAGC,IAAG+a,YAAY;AAC1C4jB,mBAAW54B,KAAKgV,WAAWhB,MAAMha,GAAGC,KAAKkiD,aAAa,GAAIW,WAAW;UACnEkC,eAAehqC,WAAWtV;UAC1BiU,WAAWqqC,UAAUrqC,UAAUqB,WAAWrB,SAAS;QACrD,CAAA;MACF;AAGA,YAAMzH,eAAe,KAAKA,aAAY;AACtC,YAAMmmB,cAAc,KAAK0qB,oBAAmB;AAC5C,UAAI7wC,cAAc;AAChBqyC,iBAAS;UACPvkD,GAAGkzB,eAAe/B,OAAO,KAAK9wB,OAAOqoB,SAAS,KAAKvoB,QAAQyiD,WAAW,CAAE,CAAA;UACxE3iD,GAAG,KAAKC,MAAMwoB,UAAU2P;UACxB1a,MAAM;QACR;aACK;AACL4mC,iBAAS;UACPvkD,GAAG,KAAKK,OAAOqoB;UACfzoB,GAAGizB,eAAe/B,OAAO,KAAKjxB,MAAMm4B,cAAc3P,SAAS,KAAKtoB,SAASuiD,YAAY,CAAA,EAAGruC,MAAM;UAC9FqJ,MAAM;QACR;;AAGFsnC,4BAAsB,KAAKj/C,KAAKtG,KAAKwlD,aAAa;AAElD,YAAMxyB,aAAayvB,aAAaz5B;AAChC,WAAKg6B,YAAYnrD,QAAQ,CAACyjB,YAAYviB,OAAM;AAC1CuN,YAAI4U,cAAcI,WAAWb;AAC7BnU,YAAIiU,YAAYe,WAAWb;AAE3B,cAAMgrC,YAAYn/C,IAAIs9C,YAAYtoC,WAAWhB,IAAI,EAAEzF;AACnD,cAAMoF,YAAYqqC,UAAUrqC,UAAUqB,WAAWrB,cAAcqB,WAAWrB,YAAYmoC,UAAUnoC,UAAQ;AACxG,cAAMpF,QAAQytC,WAAWsC,eAAea;AACxC,YAAInlD,IAAIukD,OAAOvkD;AACf,YAAIC,KAAIskD,OAAOtkD;AAEf+jD,kBAAUoB,SAAS,KAAK7wC,KAAK;AAE7B,YAAIrC,cAAc;AAChB,cAAIzZ,KAAI,KAAKuH,IAAIuU,QAAQmU,UAAU,KAAKvoB,OAAO;AAC7CF,YAAAA,KAAIskD,OAAOtkD,KAAKyyB;AAChB6xB,mBAAO5mC;AACP3d,gBAAIukD,OAAOvkD,IAAIkzB,eAAe/B,OAAO,KAAK9wB,OAAOqoB,SAAS,KAAKvoB,QAAQyiD,WAAW2B,OAAO5mC,IAAI,CAAC;;mBAEvFllB,KAAI,KAAKwH,KAAIyyB,aAAa,KAAKtyB,QAAQ;AAChDJ,cAAIukD,OAAOvkD,IAAIA,IAAI2iD,YAAY4B,OAAO5mC,IAAI,EAAEpJ,QAAQmU;AACpD67B,iBAAO5mC;AACP1d,UAAAA,KAAIskD,OAAOtkD,IAAIizB,eAAe/B,OAAO,KAAKjxB,MAAMm4B,cAAc3P,SAAS,KAAKtoB,SAASuiD,YAAY4B,OAAO5mC,IAAI,EAAErJ,MAAM;;AAGtH,cAAM+wC,QAAQrB,UAAUhkD,EAAEA,CAAAA;AAE1BwkD,sBAAca,OAAOplD,IAAG+a,UAAAA;AAExBhb,YAAIslD,OAAO3rC,WAAW3Z,IAAIgiD,WAAWsC,cAAcpyC,eAAelS,IAAIuU,QAAQ,KAAKpU,OAAOT,KAAKqkD,GAAG;AAGlGgB,iBAASf,UAAUhkD,EAAEA,CAAAA,GAAIC,IAAG+a,UAAAA;AAE5B,YAAI9I,cAAc;AAChBqyC,iBAAOvkD,KAAKuU,QAAQmU;QACtB,WAAW,OAAO1N,WAAWhB,SAAS,UAAU;AAC9C,gBAAMurC,iBAAiBzC,UAAUpwB;AACjC6xB,iBAAOtkD,KAAKulD,0BAA0BxqC,YAAYuqC,cAAkB78B,IAAAA;eAC/D;AACL67B,iBAAOtkD,KAAKyyB;;MAEhB,CAAA;AAEA+yB,2BAAqB,KAAKz/C,KAAKtG,KAAKwlD,aAAa;IACnD;IAKApmB,YAAY;AACV,YAAMp/B,OAAO,KAAKnB;AAClB,YAAM45B,YAAYz4B,KAAKs4B;AACvB,YAAM0tB,YAAYlzB,OAAO2F,UAAU5F,IAAI;AACvC,YAAMozB,eAAe18B,UAAUkP,UAAUzP,OAAO;AAEhD,UAAI,CAACyP,UAAUnZ,SAAS;AACtB;;AAGF,YAAMglC,YAAYC,cAAcvkD,KAAKqkD,KAAK,KAAK1jD,MAAM,KAAKkU,KAAK;AAC/D,YAAMvO,MAAM,KAAKA;AACjB,YAAMwc,WAAW2V,UAAU3V;AAC3B,YAAM8hC,eAAeoB,UAAUxmD,OAAO;AACtC,YAAM0mD,6BAA6BD,aAAazlD,MAAMokD;AACtD,UAAIrkD;AAIJ,UAAII,QAAO,KAAKA;AAChB,UAAI4b,WAAW,KAAK1H;AAEpB,UAAI,KAAKrC,aAAY,GAAI;AAEvB+J,mBAAWtkB,KAAKoC,IAAO,GAAA,KAAK6oD,UAAU;AACtC3iD,QAAAA,KAAI,KAAKC,MAAM0lD;AACfvlD,QAAAA,QAAO6yB,eAAexzB,KAAKyxB,OAAO9wB,OAAM,KAAKF,QAAQ8b,QAAAA;aAChD;AAEL,cAAMC,YAAY,KAAKymC,YAAY/oD,OAAO,CAACC,KAAKqF,SAASvH,KAAKoC,IAAIF,KAAKqF,KAAKoV,MAAM,GAAG,CAAA;AACrFrU,QAAAA,KAAI2lD,6BAA6B1yB,eAAexzB,KAAKyxB,OAAO,KAAKjxB,KAAK,KAAKE,SAAS8b,YAAYxc,KAAK2K,OAAOqe,UAAU,KAAKq6B,oBAAmB,CAAA;;AAKhJ,YAAM/iD,IAAIkzB,eAAe1Q,UAAUniB,OAAMA,QAAO4b,QAAAA;AAGhDjW,UAAI2T,YAAYqqC,UAAUrqC,UAAUmZ,mBAAmBtQ,QAAAA,CAAAA;AACvDxc,UAAIw2B,eAAe;AACnBx2B,UAAI4U,cAAcud,UAAUx9B;AAC5BqL,UAAIiU,YAAYke,UAAUx9B;AAC1BqL,UAAIusB,OAAOmzB,UAAU9rB;AAErBgF,iBAAW54B,KAAKmyB,UAAUne,MAAMha,GAAGC,IAAGylD,SAAAA;IACxC;IAKA3C,sBAAsB;AACpB,YAAM5qB,YAAY,KAAK55B,QAAQy5B;AAC/B,YAAM0tB,YAAYlzB,OAAO2F,UAAU5F,IAAI;AACvC,YAAMozB,eAAe18B,UAAUkP,UAAUzP,OAAO;AAChD,aAAOyP,UAAUnZ,UAAU0mC,UAAUhzB,aAAaizB,aAAarxC,SAAS;IAC1E;IAKAuxC,iBAAiB7lD,GAAGC,IAAG;AACrB,UAAIxH,IAAGqtD,QAAQC;AAEf,UAAI7R,WAAWl0C,GAAG,KAAKK,MAAM,KAAKF,KAAK,KAClC+zC,WAAWj0C,IAAG,KAAKC,KAAK,KAAKE,MAAM,GAAG;AAEzC2lD,aAAK,KAAKxD;AACV,aAAK9pD,KAAI,GAAGA,KAAIstD,GAAGvtD,QAAQ,EAAEC,IAAG;AAC9BqtD,mBAASC,GAAGttD,EAAE;AAEd,cAAIy7C,WAAWl0C,GAAG8lD,OAAOzlD,MAAMylD,OAAOzlD,OAAOylD,OAAOvxC,KAAK,KACpD2/B,WAAWj0C,IAAG6lD,OAAO5lD,KAAK4lD,OAAO5lD,MAAM4lD,OAAOxxC,MAAM,GAAG;AAE1D,mBAAO,KAAKouC,YAAYjqD,EAAE;;QAE9B;;AAGF,aAAO;IACT;IAMAutD,YAAYjrC,IAAG;AACb,YAAMrb,OAAO,KAAKnB;AAClB,UAAI,CAAC0nD,WAAWlrC,GAAE7jB,MAAMwI,IAAO,GAAA;AAC7B;;AAIF,YAAMwmD,cAAc,KAAKL,iBAAiB9qC,GAAE/a,GAAG+a,GAAE9a,CAAC;AAElD,UAAI8a,GAAE7jB,SAAS,eAAe6jB,GAAE7jB,SAAS,YAAY;AACnD,cAAMy9C,WAAW,KAAK6N;AACtB,cAAM2D,WAAW/D,WAAWzN,UAAUuR,WAAAA;AACtC,YAAIvR,YAAY,CAACwR,UAAU;AACzBnuD,mBAAK0H,KAAK0mD,SAAS;YAACrrC;YAAG45B;YAAU;UAAK,GAAE,IAAI;;AAG9C,aAAK6N,eAAe0D;AAEpB,YAAIA,eAAe,CAACC,UAAU;AAC5BnuD,mBAAK0H,KAAKwwC,SAAS;YAACn1B;YAAGmrC;YAAa;UAAK,GAAE,IAAI;;MAEnD,WAAWA,aAAa;AACtBluD,iBAAK0H,KAAKob,SAAS;UAACC;UAAGmrC;UAAa;QAAK,GAAE,IAAI;;IAEnD;EACF;AAEA,WAASrC,kBAAkB7B,UAAUc,WAAW98C,KAAKgV,YAAYuoC,aAAa;AAC5E,UAAMF,YAAYgD,mBAAmBrrC,YAAYgnC,UAAUc,WAAW98C,GAAAA;AACtE,UAAMm8C,aAAamE,oBAAoB/C,aAAavoC,YAAY8nC,UAAUpwB,UAAU;AACpF,WAAO;MAAC2wB;MAAWlB;IAAU;EAC/B;AAEA,WAASkE,mBAAmBrrC,YAAYgnC,UAAUc,WAAW98C,KAAK;AAChE,QAAIugD,iBAAiBvrC,WAAWhB;AAChC,QAAIusC,kBAAkB,OAAOA,mBAAmB,UAAU;AACxDA,uBAAiBA,eAAe3sD,OAAO,CAACkW,IAAGrP,OAAMqP,GAAEtX,SAASiI,GAAEjI,SAASsX,KAAIrP,EAAC;;AAE9E,WAAOuhD,WAAYc,UAAU5jD,OAAO,IAAK8G,IAAIs9C,YAAYiD,cAAAA,EAAgBhyC;EAC3E;AAEA,WAAS+xC,oBAAoB/C,aAAavoC,YAAYuqC,gBAAgB;AACpE,QAAIpD,aAAaoB;AACjB,QAAI,OAAOvoC,WAAWhB,SAAS,UAAU;AACvCmoC,mBAAaqD,0BAA0BxqC,YAAYuqC,cAAAA;;AAErD,WAAOpD;EACT;AAEA,WAASqD,0BAA0BxqC,YAAYuqC,gBAAgB;AAC7D,UAAM/sB,cAAcxd,WAAWhB,OAAOgB,WAAWhB,KAAKxhB,SAAS;AAC/D,WAAO+sD,iBAAiB/sB;EAC1B;AAEA,WAASytB,WAAW/uD,MAAMwI,MAAM;AAC9B,SAAKxI,SAAS,eAAeA,SAAS,gBAAgBwI,KAAKwwC,WAAWxwC,KAAK0mD,UAAU;AACnF,aAAO;;AAET,QAAI1mD,KAAKob,YAAY5jB,SAAS,WAAWA,SAAS,YAAY;AAC5D,aAAO;;AAET,WAAO;EACT;AAEA,MAAA,gBAAe;IACbyL,IAAI;IAMJ6jD,UAAUnE;IAEVxqD,MAAMd,OAAO+jD,OAAOv8C,SAAS;AAC3B,YAAMib,SAASziB,MAAMyiB,SAAS,IAAI6oC,OAAO;QAACr8C,KAAKjP,MAAMiP;QAAKzH;QAASxH;MAAK,CAAA;AACxE0uB,cAAQloB,UAAUxG,OAAOyiB,QAAQjb,OAAAA;AACjCknB,cAAQkD,OAAO5xB,OAAOyiB,MAAAA;IACxB;IAEAvf,KAAKlD,OAAO;AACV0uB,cAAQqD,UAAU/xB,OAAOA,MAAMyiB,MAAM;AACrC,aAAOziB,MAAMyiB;IACf;IAKAyb,aAAal+B,OAAO+jD,OAAOv8C,SAAS;AAClC,YAAMib,SAASziB,MAAMyiB;AACrBiM,cAAQloB,UAAUxG,OAAOyiB,QAAQjb,OAAAA;AACjCib,aAAOjb,UAAUA;IACnB;IAIAk4B,YAAY1/B,OAAO;AACjB,YAAMyiB,SAASziB,MAAMyiB;AACrBA,aAAOqpC,YAAW;AAClBrpC,aAAOsqC,eAAc;IACvB;IAGA2C,WAAW1vD,OAAO+X,MAAM;AACtB,UAAI,CAACA,KAAK2gC,QAAQ;AAChB14C,cAAMyiB,OAAOwsC,YAAYl3C,KAAKvV,KAAK;;IAEvC;IAEAqE,UAAU;MACRohB,SAAS;MACTwD,UAAU;MACV2O,OAAO;MACPhL,UAAU;MACVxmB,SAAS;MACT4d,QAAQ;MAGRzC,QAAQC,IAAGC,YAAYxB,QAAQ;AAC7B,cAAMvY,SAAQ+Z,WAAWzZ;AACzB,cAAMmlD,KAAKltC,OAAOziB;AAClB,YAAI2vD,GAAGjrC,iBAAiBxa,MAAQ,GAAA;AAC9BylD,aAAGpY,KAAKrtC,MAAAA;AACR+Z,qBAAWtV,SAAS;eACf;AACLghD,aAAGnY,KAAKttC,MAAAA;AACR+Z,qBAAWtV,SAAS;;MAExB;MAEAwqC,SAAS;MACTkW,SAAS;MAET/7C,QAAQ;QACN1P,OAAO,CAACqL,QAAQA,IAAIjP,MAAMwH,QAAQ5D;QAClCqnD,UAAU;QACVt5B,SAAS;QAYTjP,eAAe1iB,OAAO;AACpB,gBAAMuR,WAAWvR,MAAM8K,KAAKyG;AAC5B,gBAAM,EAAC+B,QAAQ,EAAC43C,eAAevoC,YAAYC,WAAWhf,OAAAA,QAAOif,iBAAiBC,aAAAA,EAAa,IAAI9iB,MAAMyiB,OAAOjb;AAE5G,iBAAOxH,MAAMgK,uBAAsB,EAAG+Y,IAAI,CAAChY,SAAS;AAClD,kBAAMiY,QAAQjY,KAAK6B,WAAWsI,SAASg2C,gBAAgB,IAAIprD,MAAS;AACpE,kBAAM8jB,cAAcsO,UAAUlP,MAAMY,WAAW;AAE/C,mBAAO;cACLX,MAAM1R,SAASxG,KAAKb,KAAK,EAAEwK;cAC3BwO,WAAWF,MAAMG;cACjBC,WAAWxf;cACX+K,QAAQ,CAAC5D,KAAKsqC;cACdqI,SAAS16B,MAAM26B;cACft6B,UAAUL,MAAMM;cAChBC,gBAAgBP,MAAMQ;cACtBC,UAAUT,MAAMU;cAChBC,YAAYC,YAAYpG,QAAQoG,YAAYrG,UAAU;cACtDsG,aAAab,MAAMc;cACnBnB,YAAYA,cAAcK,MAAML;cAChCtC,UAAU2C,MAAM3C;cAChBuC,WAAWA,aAAaI,MAAMJ;cAC9BE,cAAcD,oBAAoBC,gBAAgBE,MAAMF;cAGxDtY,cAAcO,KAAKb;YACrB;UACF,GAAG,IAAI;QACT;MACF;MAEA+2B,OAAO;QACLr9B,OAAO,CAACqL,QAAQA,IAAIjP,MAAMwH,QAAQ5D;QAClCqkB,SAAS;QACTwD,UAAU;QACVxI,MAAM;MACR;IACF;IAEAd,aAAa;MACXC,aAAa,CAAC3D,SAAS,CAACA,KAAK6D,WAAW,IAAA;MACxChP,QAAQ;QACN8O,aAAa,CAAC3D,SAAS,CAAC;UAAC;UAAkB;UAAU;QAAO,EAACmQ,SAASnQ,IAAAA;MACxE;IACF;EACF;ACzsBO,MAAMmxC,QAAN,cAAoB73B,SAAAA;IAIzBv4B,YAAY6G,SAAQ;AAClB,YAAK;AAEL,WAAKrG,QAAQqG,QAAOrG;AACpB,WAAKwH,UAAUnB,QAAOmB;AACtB,WAAKyH,MAAM5I,QAAO4I;AAClB,WAAK4gD,WAAW/vD;AAChB,WAAKqJ,MAAMrJ;AACX,WAAKuJ,SAASvJ;AACd,WAAKwJ,OAAOxJ;AACZ,WAAKsJ,QAAQtJ;AACb,WAAK0d,QAAQ1d;AACb,WAAKyd,SAASzd;AACd,WAAK2rB,WAAW3rB;AAChB,WAAK0mB,SAAS1mB;AACd,WAAKsvB,WAAWtvB;IAClB;IAEA4F,OAAOwf,UAAUC,WAAW;AAC1B,YAAMxc,OAAO,KAAKnB;AAElB,WAAK8B,OAAO;AACZ,WAAKH,MAAM;AAEX,UAAI,CAACR,KAAKsf,SAAS;AACjB,aAAKzK,QAAQ,KAAKD,SAAS,KAAKnU,QAAQ,KAAKC,SAAS;AACtD;;AAGF,WAAKmU,QAAQ,KAAKpU,QAAQ8b;AAC1B,WAAK3H,SAAS,KAAKlU,SAAS8b;AAE5B,YAAMogB,YAAYp+B,QAAQwB,KAAKsa,IAAI,IAAIta,KAAKsa,KAAKxhB,SAAS;AAC1D,WAAKouD,WAAW39B,UAAUvpB,KAAKgpB,OAAO;AACtC,YAAMm+B,WAAWvqB,YAAY9J,OAAO9yB,KAAK6yB,IAAI,EAAEG,aAAa,KAAKk0B,SAAStyC;AAE1E,UAAI,KAAKpC,aAAY,GAAI;AACvB,aAAKoC,SAASuyC;aACT;AACL,aAAKtyC,QAAQsyC;;IAEjB;IAEA30C,eAAe;AACb,YAAM6S,MAAM,KAAKxmB,QAAQikB;AACzB,aAAOuC,QAAQ,SAASA,QAAQ;IAClC;IAEA+hC,UAAUtzC,SAAQ;AAChB,YAAM,EAACtT,KAAAA,MAAKG,MAAAA,OAAMD,QAAAA,SAAQD,OAAAA,QAAO5B,QAAAA,IAAW;AAC5C,YAAM4yB,QAAQ5yB,QAAQ4yB;AACtB,UAAI/Z,WAAW;AACf,UAAI6E,UAAU+W,QAAQC;AAEtB,UAAI,KAAK/gB,aAAY,GAAI;AACvB8gB,iBAASE,eAAe/B,OAAO9wB,OAAMF,MAAAA;AACrC8yB,iBAAS/yB,OAAMsT;AACfyI,mBAAW9b,SAAQE;aACd;AACL,YAAI9B,QAAQikB,aAAa,QAAQ;AAC/BwQ,mBAAS3yB,QAAOmT;AAChByf,mBAASC,eAAe/B,OAAO/wB,SAAQF,IAAAA;AACvCkX,qBAAWwB,KAAK;eACX;AACLoa,mBAAS7yB,SAAQqT;AACjByf,mBAASC,eAAe/B,OAAOjxB,MAAKE,OAAAA;AACpCgX,qBAAWwB,KAAK;;AAElBqD,mBAAW7b,UAASF;;AAEtB,aAAO;QAAC8yB;QAAQC;QAAQhX;QAAU7E;MAAQ;IAC5C;IAEA1e,OAAO;AACL,YAAMsN,MAAM,KAAKA;AACjB,YAAMtG,OAAO,KAAKnB;AAElB,UAAI,CAACmB,KAAKsf,SAAS;AACjB;;AAGF,YAAM+nC,WAAWv0B,OAAO9yB,KAAK6yB,IAAI;AACjC,YAAMG,aAAaq0B,SAASr0B;AAC5B,YAAMlf,UAASkf,aAAa,IAAI,KAAKk0B,SAAS1mD;AAC9C,YAAM,EAAC8yB,QAAQC,QAAQhX,UAAU7E,SAAAA,IAAY,KAAK0vC,UAAUtzC,OAAAA;AAE5DorB,iBAAW54B,KAAKtG,KAAKsa,MAAM,GAAG,GAAG+sC,UAAU;QACzCpsD,OAAO+E,KAAK/E;QACZshB;QACA7E;QACAuC,WAAWmZ,mBAAmBpzB,KAAKyxB,KAAK;QACxCqL,cAAc;QACde,aAAa;UAACvK;UAAQC;QAAO;MAC/B,CAAA;IACF;EACF;AAEA,WAAS+zB,YAAYjwD,OAAOohC,WAAW;AACrC,UAAMH,QAAQ,IAAI2uB,MAAM;MACtB3gD,KAAKjP,MAAMiP;MACXzH,SAAS45B;MACTphC;IACF,CAAA;AAEA0uB,YAAQloB,UAAUxG,OAAOihC,OAAOG,SAAAA;AAChC1S,YAAQkD,OAAO5xB,OAAOihC,KAAAA;AACtBjhC,UAAMkwD,aAAajvB;EACrB;AAEA,MAAA,eAAe;IACbr1B,IAAI;IAMJ6jD,UAAUG;IAEV9uD,MAAMd,OAAO+jD,OAAOv8C,SAAS;AAC3ByoD,kBAAYjwD,OAAOwH,OAAAA;IACrB;IAEAtE,KAAKlD,OAAO;AACV,YAAMkwD,aAAalwD,MAAMkwD;AACzBxhC,cAAQqD,UAAU/xB,OAAOkwD,UAAAA;AACzB,aAAOlwD,MAAMkwD;IACf;IAEAhyB,aAAal+B,OAAO+jD,OAAOv8C,SAAS;AAClC,YAAMy5B,QAAQjhC,MAAMkwD;AACpBxhC,cAAQloB,UAAUxG,OAAOihC,OAAOz5B,OAAAA;AAChCy5B,YAAMz5B,UAAUA;IAClB;IAEAX,UAAU;MACRuzB,OAAO;MACPnS,SAAS;MACTuT,MAAM;QACJhV,QAAQ;MACV;MACA4I,UAAU;MACVuC,SAAS;MACTlG,UAAU;MACVxI,MAAM;MACNuD,QAAQ;IACV;IAEAwR,eAAe;MACbp0B,OAAO;IACT;IAEAue,aAAa;MACXC,aAAa;MACbC,YAAY;IACd;EACF;AClKA,MAAMU,OAAM,oBAAIotC,QAAAA;AAEhB,MAAA,kBAAe;IACbvkD,IAAI;IAEJ9K,MAAMd,OAAO+jD,OAAOv8C,SAAS;AAC3B,YAAMy5B,QAAQ,IAAI2uB,MAAM;QACtB3gD,KAAKjP,MAAMiP;QACXzH;QACAxH;MACF,CAAA;AAEA0uB,cAAQloB,UAAUxG,OAAOihC,OAAOz5B,OAAAA;AAChCknB,cAAQkD,OAAO5xB,OAAOihC,KAAAA;AACtBle,MAAAA,KAAIzgB,IAAItC,OAAOihC,KAAAA;IACjB;IAEA/9B,KAAKlD,OAAO;AACV0uB,cAAQqD,UAAU/xB,OAAO+iB,KAAI5gB,IAAInC,KAAAA,CAAAA;AACjC+iB,MAAAA,KAAI1f,OAAOrD,KAAAA;IACb;IAEAk+B,aAAal+B,OAAO+jD,OAAOv8C,SAAS;AAClC,YAAMy5B,QAAQle,KAAI5gB,IAAInC,KAAAA;AACtB0uB,cAAQloB,UAAUxG,OAAOihC,OAAOz5B,OAAAA;AAChCy5B,YAAMz5B,UAAUA;IAClB;IAEAX,UAAU;MACRuzB,OAAO;MACPnS,SAAS;MACTuT,MAAM;QACJhV,QAAQ;MACV;MACA4I,UAAU;MACVuC,SAAS;MACTlG,UAAU;MACVxI,MAAM;MACNuD,QAAQ;IACV;IAEAwR,eAAe;MACbp0B,OAAO;IACT;IAEAue,aAAa;MACXC,aAAa;MACbC,YAAY;IACd;EACF;ACpCA,MAAM+tC,cAAc;IAIlBC,QAAQ7uD,OAAO;AACb,UAAI,CAACA,MAAMC,QAAQ;AACjB,eAAO;;AAGT,UAAIC,IAAGw4B;AACP,UAAIo2B,OAAO,oBAAIvhB,IAAAA;AACf,UAAI7lC,KAAI;AACR,UAAI4J,QAAQ;AAEZ,WAAKpR,KAAI,GAAGw4B,MAAM14B,MAAMC,QAAQC,KAAIw4B,KAAK,EAAEx4B,IAAG;AAC5C,cAAM4pB,KAAK9pB,MAAME,EAAAA,EAAGsM;AACpB,YAAIsd,MAAMA,GAAG4M,SAAQ,GAAI;AACvB,gBAAMlK,MAAM1C,GAAG2M,gBAAe;AAC9Bq4B,eAAK3tD,IAAIqrB,IAAI/kB,CAAC;AACdC,UAAAA,MAAK8kB,IAAI9kB;AACT,YAAE4J;;MAEN;AAGA,UAAIA,UAAU,KAAKw9C,KAAKnoD,SAAS,GAAG;AAClC,eAAO;;AAGT,YAAMooD,WAAW;QAAID,GAAAA;QAAMztD,OAAO,CAACkW,IAAGrP,OAAMqP,KAAIrP,EAAAA,IAAK4mD,KAAKnoD;AAE1D,aAAO;QACLc,GAAGsnD;QACHrnD,GAAGA,KAAI4J;MACT;IACF;IAKA8a,QAAQpsB,OAAOgvD,eAAe;AAC5B,UAAI,CAAChvD,MAAMC,QAAQ;AACjB,eAAO;;AAGT,UAAIwH,IAAIunD,cAAcvnD;AACtB,UAAIC,KAAIsnD,cAActnD;AACtB,UAAIgkB,cAAclhB,OAAOE;AACzB,UAAIxK,IAAGw4B,KAAKu2B;AAEZ,WAAK/uD,KAAI,GAAGw4B,MAAM14B,MAAMC,QAAQC,KAAIw4B,KAAK,EAAEx4B,IAAG;AAC5C,cAAM4pB,KAAK9pB,MAAME,EAAAA,EAAGsM;AACpB,YAAIsd,MAAMA,GAAG4M,SAAQ,GAAI;AACvB,gBAAM5a,SAASgO,GAAG6B,eAAc;AAChC,gBAAM2gB,KAAI4iB,sBAAsBF,eAAelzC,MAAAA;AAE/C,cAAIwwB,KAAI5gB,aAAa;AACnBA,0BAAc4gB;AACd2iB,6BAAiBnlC;;;MAGvB;AAEA,UAAImlC,gBAAgB;AAClB,cAAME,KAAKF,eAAex4B,gBAAe;AACzChvB,YAAI0nD,GAAG1nD;AACPC,QAAAA,KAAIynD,GAAGznD;;AAGT,aAAO;QACLD;QACAC,GAAAA;MACF;IACF;EACF;AAGA,WAAS0nD,aAAat1C,MAAMu1C,QAAQ;AAClC,QAAIA,QAAQ;AACV,UAAI1pD,QAAQ0pD,MAAS,GAAA;AAEnBvlD,cAAM0e,UAAUtnB,KAAKouD,MAAMx1C,MAAMu1C,MAAAA;aAC5B;AACLv1C,aAAK5Y,KAAKmuD,MAAAA;;;AAId,WAAOv1C;EACT;AAQA,WAASy1C,cAAcC,KAAK;AAC1B,SAAK,OAAOA,QAAQ,YAAYA,eAAeC,WAAWD,IAAI/yC,QAAQ,IAAA,IAAQ,IAAI;AAChF,aAAO+yC,IAAIxnB,MAAM,IAAA;;AAEnB,WAAOwnB;EACT;AASA,WAASE,kBAAkBlxD,OAAO4B,MAAM;AACtC,UAAM,EAACoM,SAASxD,cAAcN,OAAAA,OAAAA,IAAStI;AACvC,UAAMgL,aAAa5M,MAAMwR,eAAehH,YAAAA,EAAcoC;AACtD,UAAM,EAAC8H,OAAOxM,MAAAA,IAAS0E,WAAW6H,iBAAiBvK,MAAAA;AAEnD,WAAO;MACLlK;MACA0U;MACA7H,QAAQD,WAAWgH,UAAU1J,MAAAA;MAC7BgE,KAAKlO,MAAM8K,KAAKyG,SAAS/G,YAAa,EAACM,KAAKZ,MAAM;MAClDinD,gBAAgBjpD;MAChB4F,SAASlB,WAAW2D,WAAU;MAC9BtC,WAAW/D;MACXM;MACAwD;IACF;EACF;AAKA,WAASojD,eAAeC,SAAS7pD,SAAS;AACxC,UAAMyH,MAAMoiD,QAAQrxD,MAAMiP;AAC1B,UAAM,EAACqiD,MAAMC,QAAQtwB,MAAAA,IAASowB;AAC9B,UAAM,EAACpG,UAAUD,UAAAA,IAAaxjD;AAC9B,UAAMgqD,WAAW/1B,OAAOj0B,QAAQgqD,QAAQ;AACxC,UAAM7C,YAAYlzB,OAAOj0B,QAAQmnD,SAAS;AAC1C,UAAM8C,aAAah2B,OAAOj0B,QAAQiqD,UAAU;AAC5C,UAAMC,iBAAiBzwB,MAAMx/B;AAC7B,UAAMkwD,kBAAkBJ,OAAO9vD;AAC/B,UAAMmwD,oBAAoBN,KAAK7vD;AAE/B,UAAMkwB,UAAUO,UAAU1qB,QAAQmqB,OAAO;AACzC,QAAIpU,SAASoU,QAAQpU;AACrB,QAAIC,QAAQ;AAGZ,QAAIq0C,qBAAqBP,KAAKzuD,OAAO,CAACiQ,OAAOg/C,aAAah/C,QAAQg/C,SAASC,OAAOtwD,SAASqwD,SAASp2B,MAAMj6B,SAASqwD,SAASE,MAAMvwD,QAAQ,CAAA;AAC1IowD,0BAAsBR,QAAQY,WAAWxwD,SAAS4vD,QAAQa,UAAUzwD;AAEpE,QAAIiwD,gBAAgB;AAClBn0C,gBAAUm0C,iBAAiB/C,UAAUhzB,cACnC+1B,iBAAiB,KAAKlqD,QAAQ2qD,eAC/B3qD,QAAQ4qD;;AAEX,QAAIP,oBAAoB;AAEtB,YAAMQ,iBAAiB7qD,QAAQ8qD,gBAAgB1xD,KAAKoC,IAAIgoD,WAAWwG,SAAS71B,UAAU,IAAI61B,SAAS71B;AACnGpe,gBAAUq0C,oBAAoBS,kBAC5BR,qBAAqBD,qBAAqBJ,SAAS71B,cACnDk2B,qBAAqB,KAAKrqD,QAAQ+qD;;AAEtC,QAAIZ,iBAAiB;AACnBp0C,gBAAU/V,QAAQgrD,kBACjBb,kBAAkBF,WAAW91B,cAC5Bg2B,kBAAkB,KAAKnqD,QAAQirD;;AAInC,QAAIC,eAAe;AACnB,UAAMC,eAAe,SAAS/rC,MAAM;AAClCpJ,cAAQ5c,KAAKoC,IAAIwa,OAAOvO,IAAIs9C,YAAY3lC,IAAMpJ,EAAAA,QAAQk1C,YAAAA;IACxD;AAEAzjD,QAAI03B,KAAI;AAER13B,QAAIusB,OAAOmzB,UAAU9rB;AACrBxQ,SAAKg/B,QAAQpwB,OAAO0xB,YAAAA;AAGpB1jD,QAAIusB,OAAOg2B,SAAS3uB;AACpBxQ,SAAKg/B,QAAQY,WAAWr5C,OAAOy4C,QAAQa,SAAS,GAAGS,YAAAA;AAGnDD,mBAAelrD,QAAQ8qD,gBAAiBrH,WAAW,IAAIzjD,QAAQwoB,aAAc;AAC7EqC,SAAKi/B,MAAM,CAACQ,aAAa;AACvBz/B,WAAKy/B,SAASC,QAAQY,YAAAA;AACtBtgC,WAAKy/B,SAASp2B,OAAOi3B,YAAAA;AACrBtgC,WAAKy/B,SAASE,OAAOW,YAAAA;IACvB,CAAA;AAGAD,mBAAe;AAGfzjD,QAAIusB,OAAOi2B,WAAW5uB;AACtBxQ,SAAKg/B,QAAQE,QAAQoB,YAAAA;AAErB1jD,QAAI43B,QAAO;AAGXrpB,aAASmU,QAAQnU;AAEjB,WAAO;MAACA;MAAOD;IAAM;EACvB;AAEA,WAASq1C,gBAAgB5yD,OAAOmI,MAAM;AACpC,UAAM,EAACe,GAAAA,IAAGqU,OAAAA,IAAUpV;AAEpB,QAAIe,KAAIqU,SAAS,GAAG;AAClB,aAAO;IACT,WAAWrU,KAAKlJ,MAAMud,SAASA,SAAS,GAAI;AAC1C,aAAO;;AAET,WAAO;EACT;AAEA,WAASs1C,oBAAoBC,QAAQ9yD,OAAOwH,SAASW,MAAM;AACzD,UAAM,EAACc,GAAGuU,MAAAA,IAASrV;AACnB,UAAM4qD,QAAQvrD,QAAQwrD,YAAYxrD,QAAQyrD;AAC1C,QAAIH,WAAW,UAAU7pD,IAAIuU,QAAQu1C,QAAQ/yD,MAAMwd,OAAO;AACxD,aAAO;;AAGT,QAAIs1C,WAAW,WAAW7pD,IAAIuU,QAAQu1C,QAAQ,GAAG;AAC/C,aAAO;;EAEX;AAEA,WAASG,gBAAgBlzD,OAAOwH,SAASW,MAAMgrD,QAAQ;AACrD,UAAM,EAAClqD,GAAGuU,MAAAA,IAASrV;AACnB,UAAM,EAACqV,OAAO41C,YAAYp+C,WAAW,EAAC1L,MAAAA,OAAMF,OAAAA,OAAK,EAAC,IAAIpJ;AACtD,QAAI8yD,SAAS;AAEb,QAAIK,WAAW,UAAU;AACvBL,eAAS7pD,MAAMK,QAAOF,UAAS,IAAI,SAAS;eACnCH,KAAKuU,QAAQ,GAAG;AACzBs1C,eAAS;IACX,WAAW7pD,KAAKmqD,aAAa51C,QAAQ,GAAG;AACtCs1C,eAAS;;AAGX,QAAID,oBAAoBC,QAAQ9yD,OAAOwH,SAASW,IAAO,GAAA;AACrD2qD,eAAS;;AAGX,WAAOA;EACT;AAKA,WAASO,mBAAmBrzD,OAAOwH,SAASW,MAAM;AAChD,UAAMgrD,SAAShrD,KAAKgrD,UAAU3rD,QAAQ2rD,UAAUP,gBAAgB5yD,OAAOmI,IAAAA;AAEvE,WAAO;MACL2qD,QAAQ3qD,KAAK2qD,UAAUtrD,QAAQsrD,UAAUI,gBAAgBlzD,OAAOwH,SAASW,MAAMgrD,MAAAA;MAC/EA;IACF;EACF;AAEA,WAASG,OAAOnrD,MAAM2qD,QAAQ;AAC5B,QAAI,EAAC7pD,GAAGuU,MAAAA,IAASrV;AACjB,QAAI2qD,WAAW,SAAS;AACtB7pD,WAAKuU;eACIs1C,WAAW,UAAU;AAC9B7pD,WAAMuU,QAAQ;;AAEhB,WAAOvU;EACT;AAEA,WAASsqD,OAAOprD,MAAMgrD,QAAQK,gBAAgB;AAE5C,QAAI,EAACtqD,GAAAA,IAAGqU,OAAAA,IAAUpV;AAClB,QAAIgrD,WAAW,OAAO;AACpBjqD,MAAAA,MAAKsqD;eACIL,WAAW,UAAU;AAC9BjqD,MAAAA,MAAKqU,SAASi2C;WACT;AACLtqD,MAAAA,MAAMqU,SAAS;;AAEjB,WAAOrU;EACT;AAKA,WAASuqD,mBAAmBjsD,SAASW,MAAMurD,WAAW1zD,OAAO;AAC3D,UAAM,EAACgzD,WAAWC,cAAcU,aAAAA,IAAgBnsD;AAChD,UAAM,EAACsrD,QAAQK,OAAAA,IAAUO;AACzB,UAAMF,iBAAiBR,YAAYC;AACnC,UAAM,EAAClR,SAASC,UAAUC,YAAYC,YAAAA,IAAeN,cAAc+R,YAAAA;AAEnE,QAAI1qD,IAAIqqD,OAAOnrD,MAAM2qD,MAAAA;AACrB,UAAM5pD,KAAIqqD,OAAOprD,MAAMgrD,QAAQK,cAAAA;AAE/B,QAAIL,WAAW,UAAU;AACvB,UAAIL,WAAW,QAAQ;AACrB7pD,aAAKuqD;iBACIV,WAAW,SAAS;AAC7B7pD,aAAKuqD;;eAEEV,WAAW,QAAQ;AAC5B7pD,WAAKrI,KAAKoC,IAAI++C,SAASE,UAAc+Q,IAAAA;eAC5BF,WAAW,SAAS;AAC7B7pD,WAAKrI,KAAKoC,IAAIg/C,UAAUE,WAAe8Q,IAAAA;;AAGzC,WAAO;MACL/pD,GAAG+3B,YAAY/3B,GAAG,GAAGjJ,MAAMwd,QAAQrV,KAAKqV,KAAK;MAC7CtU,GAAG83B,YAAY93B,IAAG,GAAGlJ,MAAMud,SAASpV,KAAKoV,MAAM;IACjD;EACF;AAEA,WAASq2C,YAAYvC,SAASj3B,OAAO5yB,SAAS;AAC5C,UAAMmqB,UAAUO,UAAU1qB,QAAQmqB,OAAO;AAEzC,WAAOyI,UAAU,WACbi3B,QAAQpoD,IAAIooD,QAAQ7zC,QAAQ,IAC5B4c,UAAU,UACRi3B,QAAQpoD,IAAIooD,QAAQ7zC,QAAQmU,QAAQvoB,QACpCioD,QAAQpoD,IAAI0oB,QAAQroB;EAC5B;AAKA,WAASuqD,wBAAwB3zB,WAAU;AACzC,WAAO0wB,aAAa,CAAA,GAAIG,cAAc7wB,SAAAA,CAAAA;EACxC;AAEA,WAAS4zB,qBAAqBlmD,QAAQyjD,SAAS0C,cAAc;AAC3D,WAAOlmD,cAAcD,QAAQ;MAC3ByjD;MACA0C;MACA5zD,MAAM;IACR,CAAA;EACF;AAEA,WAAS6zD,kBAAkB5zD,WAAWiV,SAAS;AAC7C,UAAMyU,YAAWzU,WAAWA,QAAQvH,WAAWuH,QAAQvH,QAAQujD,WAAWh8C,QAAQvH,QAAQujD,QAAQjxD;AAClG,WAAO0pB,YAAW1pB,UAAU0pB,SAASA,SAAAA,IAAY1pB;EACnD;AAEA,MAAM6zD,mBAAmB;IAEvBC,aAAaC;IACblzB,MAAM8yB,cAAc;AAClB,UAAIA,aAAatyD,SAAS,GAAG;AAC3B,cAAMG,OAAOmyD,aAAa,CAAE;AAC5B,cAAMzgD,SAAS1R,KAAK5B,MAAM8K,KAAKwI;AAC/B,cAAM8gD,aAAa9gD,SAASA,OAAO7R,SAAS;AAE5C,YAAI,QAAQ,KAAK+F,WAAW,KAAKA,QAAQ+C,SAAS,WAAW;AAC3D,iBAAO3I,KAAKkM,QAAQ4G,SAAS;mBACpB9S,KAAK8S,OAAO;AACrB,iBAAO9S,KAAK8S;QACd,WAAW0/C,aAAa,KAAKxyD,KAAKqM,YAAYmmD,YAAY;AACxD,iBAAO9gD,OAAO1R,KAAKqM,SAAS;;;AAIhC,aAAO;IACT;IACAomD,YAAYF;IAGZlC,YAAYkC;IAGZG,aAAaH;IACbz/C,MAAM6/C,aAAa;AACjB,UAAI,QAAQ,KAAK/sD,WAAW,KAAKA,QAAQ+C,SAAS,WAAW;AAC3D,eAAOgqD,YAAY7/C,QAAQ,OAAO6/C,YAAYpD,kBAAkBoD,YAAYpD;;AAG9E,UAAIz8C,QAAQ6/C,YAAYzmD,QAAQ4G,SAAS;AAEzC,UAAIA,OAAO;AACTA,iBAAS;;AAEX,YAAMxM,QAAQqsD,YAAYpD;AAC1B,UAAI,CAACr3C,cAAc5R,KAAQ,GAAA;AACzBwM,iBAASxM;;AAEX,aAAOwM;IACT;IACA8/C,WAAWD,aAAa;AACtB,YAAMxpD,OAAOwpD,YAAYv0D,MAAMwR,eAAe+iD,YAAY/pD,YAAY;AACtE,YAAMhD,UAAUuD,KAAK6B,WAAWsI,SAASq/C,YAAYtmD,SAAS;AAC9D,aAAO;QACL6V,aAAatc,QAAQsc;QACrBX,iBAAiB3b,QAAQ2b;QACzBS,aAAapc,QAAQoc;QACrBN,YAAY9b,QAAQ8b;QACpBE,kBAAkBhc,QAAQgc;QAC1BV,cAAc;MAChB;IACF;IACA2xC,iBAAiB;AACf,aAAO,KAAKjtD,QAAQktD;IACtB;IACAC,gBAAgBJ,aAAa;AAC3B,YAAMxpD,OAAOwpD,YAAYv0D,MAAMwR,eAAe+iD,YAAY/pD,YAAY;AACtE,YAAMhD,UAAUuD,KAAK6B,WAAWsI,SAASq/C,YAAYtmD,SAAS;AAC9D,aAAO;QACL0U,YAAYnb,QAAQmb;QACpBtC,UAAU7Y,QAAQ6Y;MACpB;IACF;IACAu0C,YAAYT;IAGZjC,WAAWiC;IAGXU,cAAcV;IACd5C,QAAQ4C;IACRW,aAAaX;EACf;AAWA,WAASY,2BAA2B30D,WAAWqe,MAAMxP,KAAK+7B,KAAK;AAC7D,UAAMjgB,SAAS3qB,UAAUqe,IAAAA,EAAMxd,KAAKgO,KAAK+7B,GAAAA;AAEzC,QAAI,OAAOjgB,WAAW,aAAa;AACjC,aAAOkpC,iBAAiBx1C,IAAAA,EAAMxd,KAAKgO,KAAK+7B,GAAAA;;AAG1C,WAAOjgB;EACT;AAEO,MAAMiqC,WAAN,cAAsBj9B,SAAAA;IAK3B,OAAOq4B,cAAcA;IAErB5wD,YAAY6G,SAAQ;AAClB,YAAK;AAEL,WAAK4uD,UAAU;AACf,WAAKpzD,UAAU,CAAA;AACf,WAAKqzD,iBAAiBp1D;AACtB,WAAKq1D,QAAQr1D;AACb,WAAKs1D,oBAAoBt1D;AACzB,WAAKu1D,gBAAgB,CAAA;AACrB,WAAKvtD,cAAchI;AACnB,WAAK+P,WAAW/P;AAChB,WAAKE,QAAQqG,QAAOrG;AACpB,WAAKwH,UAAUnB,QAAOmB;AACtB,WAAK8tD,aAAax1D;AAClB,WAAKmhC,QAAQnhC;AACb,WAAKmyD,aAAanyD;AAClB,WAAKwxD,OAAOxxD;AACZ,WAAKoyD,YAAYpyD;AACjB,WAAKyxD,SAASzxD;AACd,WAAKgzD,SAAShzD;AACd,WAAKqzD,SAASrzD;AACd,WAAKmJ,IAAInJ;AACT,WAAKoJ,IAAIpJ;AACT,WAAKyd,SAASzd;AACd,WAAK0d,QAAQ1d;AACb,WAAKy1D,SAASz1D;AACd,WAAK01D,SAAS11D;AAGd,WAAK21D,cAAc31D;AACnB,WAAK41D,mBAAmB51D;AACxB,WAAK61D,kBAAkB71D;IACzB;IAEAiQ,WAAWvI,SAAS;AAClB,WAAKA,UAAUA;AACf,WAAK4tD,oBAAoBt1D;AACzB,WAAK+P,WAAW/P;IAClB;IAKAmW,qBAAqB;AACnB,YAAM1H,SAAS,KAAK6mD;AAEpB,UAAI7mD,QAAQ;AACV,eAAOA;;AAGT,YAAMvO,QAAQ,KAAKA;AACnB,YAAMwH,UAAU,KAAKA,QAAQg2B,WAAW,KAAK7qB,WAAU,CAAA;AACvD,YAAMhK,OAAOnB,QAAQqxB,WAAW74B,MAAMwH,QAAQV,aAAaU,QAAQE;AACnE,YAAMA,aAAa,IAAItB,WAAW,KAAKpG,OAAO2I,IAAAA;AAC9C,UAAIA,KAAKyN,YAAY;AACnB,aAAKg/C,oBAAoBzuD,OAAOqP,OAAOtO,UAAAA;;AAGzC,aAAOA;IACT;IAKAiL,aAAa;AACX,aAAO,KAAK9C,aACZ,KAAKA,WAAWikD,qBAAqB,KAAK9zD,MAAM2S,WAAU,GAAI,MAAM,KAAK0iD,aAAa;IACxF;IAEAO,SAASvgD,SAAS7N,SAAS;AACzB,YAAM,EAACpH,UAAS,IAAIoH;AAEpB,YAAM0sD,cAAca,2BAA2B30D,WAAW,eAAe,MAAMiV,OAAAA;AAC/E,YAAM4rB,QAAQ8zB,2BAA2B30D,WAAW,SAAS,MAAMiV,OAAAA;AACnE,YAAMg/C,aAAaU,2BAA2B30D,WAAW,cAAc,MAAMiV,OAAAA;AAE7E,UAAIqmB,QAAQ,CAAA;AACZA,cAAQk1B,aAAal1B,OAAOq1B,cAAcmD,WAAAA,CAAAA;AAC1Cx4B,cAAQk1B,aAAal1B,OAAOq1B,cAAc9vB,KAAAA,CAAAA;AAC1CvF,cAAQk1B,aAAal1B,OAAOq1B,cAAcsD,UAAAA,CAAAA;AAE1C,aAAO34B;IACT;IAEAm6B,cAAc9B,cAAcvsD,SAAS;AACnC,aAAOqsD,wBACLkB,2BAA2BvtD,QAAQpH,WAAW,cAAc,MAAM2zD,YAAAA,CAAAA;IAEtE;IAEA+B,QAAQ/B,cAAcvsD,SAAS;AAC7B,YAAM,EAACpH,UAAS,IAAIoH;AACpB,YAAMuuD,YAAY,CAAA;AAElB1jC,WAAK0hC,cAAc,CAAC1+C,YAAY;AAC9B,cAAMy8C,WAAW;UACfC,QAAQ,CAAA;UACRr2B,OAAO,CAAA;UACPs2B,OAAO,CAAA;QACT;AACA,cAAMgE,SAAShC,kBAAkB5zD,WAAWiV,OAAAA;AAC5Cu7C,qBAAakB,SAASC,QAAQhB,cAAcgE,2BAA2BiB,QAAQ,eAAe,MAAM3gD,OAAAA,CAAAA,CAAAA;AACpGu7C,qBAAakB,SAASp2B,OAAOq5B,2BAA2BiB,QAAQ,SAAS,MAAM3gD,OAAAA,CAAAA;AAC/Eu7C,qBAAakB,SAASE,OAAOjB,cAAcgE,2BAA2BiB,QAAQ,cAAc,MAAM3gD,OAAAA,CAAAA,CAAAA;AAElG0gD,kBAAUrzD,KAAKovD,QAAAA;MACjB,CAAA;AAEA,aAAOiE;IACT;IAEAE,aAAalC,cAAcvsD,SAAS;AAClC,aAAOqsD,wBACLkB,2BAA2BvtD,QAAQpH,WAAW,aAAa,MAAM2zD,YAAAA,CAAAA;IAErE;IAGAmC,UAAUnC,cAAcvsD,SAAS;AAC/B,YAAM,EAACpH,UAAS,IAAIoH;AAEpB,YAAMqtD,eAAeE,2BAA2B30D,WAAW,gBAAgB,MAAM2zD,YAAAA;AACjF,YAAMxC,SAASwD,2BAA2B30D,WAAW,UAAU,MAAM2zD,YAAAA;AACrE,YAAMe,cAAcC,2BAA2B30D,WAAW,eAAe,MAAM2zD,YAAAA;AAE/E,UAAIr4B,QAAQ,CAAA;AACZA,cAAQk1B,aAAal1B,OAAOq1B,cAAc8D,YAAAA,CAAAA;AAC1Cn5B,cAAQk1B,aAAal1B,OAAOq1B,cAAcQ,MAAAA,CAAAA;AAC1C71B,cAAQk1B,aAAal1B,OAAOq1B,cAAc+D,WAAAA,CAAAA;AAE1C,aAAOp5B;IACT;IAKAy6B,aAAa3uD,SAAS;AACpB,YAAM/B,SAAS,KAAK5D;AACpB,YAAMiJ,OAAO,KAAK9K,MAAM8K;AACxB,YAAM2qD,cAAc,CAAA;AACpB,YAAMC,mBAAmB,CAAA;AACzB,YAAMC,kBAAkB,CAAA;AACxB,UAAI5B,eAAe,CAAA;AACnB,UAAIryD,IAAGw4B;AAEP,WAAKx4B,KAAI,GAAGw4B,MAAMz0B,OAAOhE,QAAQC,KAAIw4B,KAAK,EAAEx4B,IAAG;AAC7CqyD,qBAAarxD,KAAKwuD,kBAAkB,KAAKlxD,OAAOyF,OAAO/D,EAAE,CAAA,CAAA;MAC3D;AAGA,UAAI8F,QAAQiG,QAAQ;AAClBsmD,uBAAeA,aAAatmD,OAAO,CAACO,SAAS9D,QAAO6jB,UAAUvmB,QAAQiG,OAAOO,SAAS9D,QAAO6jB,OAAOjjB,IAAAA,CAAAA;;AAItG,UAAItD,QAAQ4uD,UAAU;AACpBrC,uBAAeA,aAAaj7C,KAAK,CAACC,IAAGrP,OAAMlC,QAAQ4uD,SAASr9C,IAAGrP,IAAGoB,IAAAA,CAAAA;;AAIpEunB,WAAK0hC,cAAc,CAAC1+C,YAAY;AAC9B,cAAM2gD,SAAShC,kBAAkBxsD,QAAQpH,WAAWiV,OAAAA;AACpDogD,oBAAY/yD,KAAKqyD,2BAA2BiB,QAAQ,cAAc,MAAM3gD,OAAAA,CAAAA;AACxEqgD,yBAAiBhzD,KAAKqyD,2BAA2BiB,QAAQ,mBAAmB,MAAM3gD,OAAAA,CAAAA;AAClFsgD,wBAAgBjzD,KAAKqyD,2BAA2BiB,QAAQ,kBAAkB,MAAM3gD,OAAAA,CAAAA;MAClF,CAAA;AAEA,WAAKogD,cAAcA;AACnB,WAAKC,mBAAmBA;AACxB,WAAKC,kBAAkBA;AACvB,WAAKL,aAAavB;AAClB,aAAOA;IACT;IAEAruD,OAAO6rB,SAASmnB,QAAQ;AACtB,YAAMlxC,UAAU,KAAKA,QAAQg2B,WAAW,KAAK7qB,WAAU,CAAA;AACvD,YAAMlN,SAAS,KAAK5D;AACpB,UAAIuF;AACJ,UAAI2sD,eAAe,CAAA;AAEnB,UAAI,CAACtuD,OAAOhE,QAAQ;AAClB,YAAI,KAAKwzD,YAAY,GAAG;AACtB7tD,uBAAa;YACX6tD,SAAS;UACX;;aAEG;AACL,cAAMxpC,WAAW2kC,YAAY5oD,QAAQikB,QAAQ,EAAExqB,KAAK,MAAMwE,QAAQ,KAAKyvD,cAAc;AACrFnB,uBAAe,KAAKoC,aAAa3uD,OAAAA;AAEjC,aAAKy5B,QAAQ,KAAK20B,SAAS7B,cAAcvsD,OAAAA;AACzC,aAAKyqD,aAAa,KAAK4D,cAAc9B,cAAcvsD,OAAAA;AACnD,aAAK8pD,OAAO,KAAKwE,QAAQ/B,cAAcvsD,OAAAA;AACvC,aAAK0qD,YAAY,KAAK+D,aAAalC,cAAcvsD,OAAAA;AACjD,aAAK+pD,SAAS,KAAK2E,UAAUnC,cAAcvsD,OAAAA;AAE3C,cAAMW,OAAO,KAAKgtD,QAAQ/D,eAAe,MAAM5pD,OAAAA;AAC/C,cAAM6uD,kBAAkB1vD,OAAOyB,OAAO,CAAA,GAAIqjB,UAAUtjB,IAAAA;AACpD,cAAMurD,YAAYL,mBAAmB,KAAKrzD,OAAOwH,SAAS6uD,eAAAA;AAC1D,cAAMC,kBAAkB7C,mBAAmBjsD,SAAS6uD,iBAAiB3C,WAAW,KAAK1zD,KAAK;AAE1F,aAAK8yD,SAASY,UAAUZ;AACxB,aAAKK,SAASO,UAAUP;AAExB/rD,qBAAa;UACX6tD,SAAS;UACThsD,GAAGqtD,gBAAgBrtD;UACnBC,GAAGotD,gBAAgBptD;UACnBsU,OAAOrV,KAAKqV;UACZD,QAAQpV,KAAKoV;UACbg4C,QAAQ9pC,SAASxiB;UACjBusD,QAAQ/pC,SAASviB;QACnB;;AAGF,WAAKmsD,gBAAgBtB;AACrB,WAAKlkD,WAAW/P;AAEhB,UAAIsH,YAAY;AACd,aAAK6O,mBAAkB,EAAGvQ,OAAO,MAAM0B,UAAAA;;AAGzC,UAAImqB,WAAW/pB,QAAQ+uD,UAAU;AAC/B/uD,gBAAQ+uD,SAASt1D,KAAK,MAAM;UAACjB,OAAO,KAAKA;UAAOqxD,SAAS;UAAM3Y;QAAM,CAAA;;IAEzE;IAEA8d,UAAUC,cAAcxnD,KAAK9G,MAAMX,SAAS;AAC1C,YAAMkvD,gBAAgB,KAAKC,iBAAiBF,cAActuD,MAAMX,OAAAA;AAEhEyH,UAAIo4B,OAAOqvB,cAAcpyB,IAAIoyB,cAAcnyB,EAAE;AAC7Ct1B,UAAIo4B,OAAOqvB,cAAclyB,IAAIkyB,cAAcjyB,EAAE;AAC7Cx1B,UAAIo4B,OAAOqvB,cAAcE,IAAIF,cAAcG,EAAE;IAC/C;IAEAF,iBAAiBF,cAActuD,MAAMX,SAAS;AAC5C,YAAM,EAACsrD,QAAQK,OAAM,IAAI;AACzB,YAAM,EAACH,WAAWW,aAAAA,IAAgBnsD;AAClC,YAAM,EAACu6C,SAASC,UAAUC,YAAYC,YAAAA,IAAeN,cAAc+R,YAAAA;AACnE,YAAM,EAAC1qD,GAAG6tD,KAAK5tD,GAAG6tD,IAAAA,IAAON;AACzB,YAAM,EAACj5C,OAAOD,OAAAA,IAAUpV;AACxB,UAAIm8B,IAAIE,IAAIoyB,IAAIryB,IAAIE,KAAIoyB;AAExB,UAAI1D,WAAW,UAAU;AACvB1uB,QAAAA,MAAKsyB,MAAOx5C,SAAS;AAErB,YAAIu1C,WAAW,QAAQ;AACrBxuB,eAAKwyB;AACLtyB,eAAKF,KAAK0uB;AAGVzuB,eAAKE,MAAKuuB;AACV6D,eAAKpyB,MAAKuuB;eACL;AACL1uB,eAAKwyB,MAAMt5C;AACXgnB,eAAKF,KAAK0uB;AAGVzuB,eAAKE,MAAKuuB;AACV6D,eAAKpyB,MAAKuuB;;AAGZ4D,aAAKtyB;aACA;AACL,YAAIwuB,WAAW,QAAQ;AACrBtuB,eAAKsyB,MAAMl2D,KAAKoC,IAAI++C,SAASE,UAAe+Q,IAAAA;mBACnCF,WAAW,SAAS;AAC7BtuB,eAAKsyB,MAAMt5C,QAAQ5c,KAAKoC,IAAIg/C,UAAUE,WAAe8Q,IAAAA;eAChD;AACLxuB,eAAK,KAAK+wB;;AAGZ,YAAIpC,WAAW,OAAO;AACpB5uB,eAAKwyB;AACLtyB,UAAAA,MAAKF,KAAKyuB;AAGV1uB,eAAKE,KAAKwuB;AACV4D,eAAKpyB,KAAKwuB;eACL;AACLzuB,eAAKwyB,MAAMx5C;AACXknB,UAAAA,MAAKF,KAAKyuB;AAGV1uB,eAAKE,KAAKwuB;AACV4D,eAAKpyB,KAAKwuB;;AAEZ6D,aAAKtyB;;AAEP,aAAO;QAACD;QAAIE;QAAIoyB;QAAIryB;QAAIE,IAAAA;QAAIoyB;MAAE;IAChC;IAEA9uB,UAAUivB,IAAI/nD,KAAKzH,SAAS;AAC1B,YAAMy5B,QAAQ,KAAKA;AACnB,YAAMx/B,SAASw/B,MAAMx/B;AACrB,UAAIktD,WAAWwD,cAAczwD;AAE7B,UAAID,QAAQ;AACV,cAAMwrD,YAAYC,cAAc1lD,QAAQwlD,KAAK,KAAK/jD,GAAG,KAAKuU,KAAK;AAE/Dw5C,WAAG/tD,IAAI2qD,YAAY,MAAMpsD,QAAQs0B,YAAYt0B,OAAAA;AAE7CyH,YAAI2T,YAAYqqC,UAAUrqC,UAAUpb,QAAQs0B,UAAU;AACtD7sB,YAAIw2B,eAAe;AAEnBkpB,oBAAYlzB,OAAOj0B,QAAQmnD,SAAS;AACpCwD,uBAAe3qD,QAAQ2qD;AAEvBljD,YAAIiU,YAAY1b,QAAQyvD;AACxBhoD,YAAIusB,OAAOmzB,UAAU9rB;AAErB,aAAKnhC,KAAI,GAAGA,KAAID,QAAQ,EAAEC,IAAG;AAC3BuN,cAAI++C,SAAS/sB,MAAMv/B,EAAAA,GAAIurD,UAAUhkD,EAAE+tD,GAAG/tD,CAAC,GAAG+tD,GAAG9tD,IAAIylD,UAAUhzB,aAAa,CAAA;AACxEq7B,aAAG9tD,KAAKylD,UAAUhzB,aAAaw2B;AAE/B,cAAIzwD,KAAI,MAAMD,QAAQ;AACpBu1D,eAAG9tD,KAAK1B,QAAQ4qD,oBAAoBD;;QAExC;;IAEJ;IAKA+E,cAAcjoD,KAAK+nD,IAAIt1D,IAAGurD,WAAWzlD,SAAS;AAC5C,YAAMgtD,aAAa,KAAKiB,YAAY/zD,EAAE;AACtC,YAAMizD,kBAAkB,KAAKe,iBAAiBh0D,EAAE;AAChD,YAAM,EAACspD,WAAWC,SAAAA,IAAYzjD;AAC9B,YAAMgqD,WAAW/1B,OAAOj0B,QAAQgqD,QAAQ;AACxC,YAAM2F,SAASvD,YAAY,MAAM,QAAQpsD,OAAAA;AACzC,YAAM4vD,YAAYnK,UAAUhkD,EAAEkuD,MAAAA;AAC9B,YAAME,UAAUrM,YAAYwG,SAAS71B,cAAc61B,SAAS71B,aAAaqvB,aAAa,IAAI;AAC1F,YAAMsM,SAASN,GAAG9tD,IAAImuD;AAEtB,UAAI7vD,QAAQ0jD,eAAe;AACzB,cAAMwC,cAAc;UAClB5tC,QAAQlf,KAAKC,IAAIoqD,UAAUD,SAAa,IAAA;UACxCroC,YAAYgyC,gBAAgBhyC;UAC5BtC,UAAUs0C,gBAAgBt0C;UAC1BuD,aAAa;QACf;AAGA,cAAMkC,UAAUmnC,UAAUG,WAAWgK,WAAWnM,QAAAA,IAAYA,WAAW;AACvE,cAAMllC,UAAUuxC,SAAStM,YAAY;AAGrC/7C,YAAI4U,cAAcrc,QAAQ+vD;AAC1BtoD,YAAIiU,YAAY1b,QAAQ+vD;AACxBpW,kBAAUlyC,KAAKy+C,aAAa5nC,SAASC,OAAAA;AAGrC9W,YAAI4U,cAAc2wC,WAAW1wC;AAC7B7U,YAAIiU,YAAYsxC,WAAWrxC;AAC3Bg+B,kBAAUlyC,KAAKy+C,aAAa5nC,SAASC,OAAAA;aAChC;AAEL9W,YAAI0U,YAAYld,SAAS+tD,WAAW5wC,WAAW,IAAIhjB,KAAKoC,IAAO2D,GAAAA,OAAOW,OAAOktD,WAAW5wC,WAAW,CAAM4wC,IAAAA,WAAW5wC,eAAe;AACnI3U,YAAI4U,cAAc2wC,WAAW1wC;AAC7B7U,YAAIi4B,YAAYstB,WAAWlxC,cAAc,CAAA,CAAE;AAC3CrU,YAAIsU,iBAAiBixC,WAAWhxC,oBAAoB;AAGpD,cAAMg0C,SAASvK,UAAUG,WAAWgK,WAAWnM,QAAAA;AAC/C,cAAMwM,SAASxK,UAAUG,WAAWH,UAAUW,MAAMwJ,WAAW,CAAA,GAAInM,WAAW,CAAA;AAC9E,cAAMnoC,eAAe8+B,cAAc4S,WAAW1xC,YAAY;AAE1D,YAAInc,OAAOW,OAAOwb,YAAAA,EAAc0pB,KAAKvwB,CAAAA,MAAKA,MAAM,CAAI,GAAA;AAClDhN,cAAIk4B,UAAS;AACbl4B,cAAIiU,YAAY1b,QAAQ+vD;AACxBvU,6BAAmB/zC,KAAK;YACtBhG,GAAGuuD;YACHtuD,GAAGouD;YACH9mC,GAAGy6B;YACHv6B,GAAGs6B;YACHlrC,QAAQgD;UACV,CAAA;AACA7T,cAAIiB,KAAI;AACRjB,cAAIq4B,OAAM;AAGVr4B,cAAIiU,YAAYsxC,WAAWrxC;AAC3BlU,cAAIk4B,UAAS;AACb6b,6BAAmB/zC,KAAK;YACtBhG,GAAGwuD;YACHvuD,GAAGouD,SAAS;YACZ9mC,GAAGy6B,WAAW;YACdv6B,GAAGs6B,YAAY;YACflrC,QAAQgD;UACV,CAAA;AACA7T,cAAIiB,KAAI;eACH;AAELjB,cAAIiU,YAAY1b,QAAQ+vD;AACxBtoD,cAAI23B,SAAS4wB,QAAQF,QAAQrM,UAAUD,SAAAA;AACvC/7C,cAAIyoD,WAAWF,QAAQF,QAAQrM,UAAUD,SAAAA;AAEzC/7C,cAAIiU,YAAYsxC,WAAWrxC;AAC3BlU,cAAI23B,SAAS6wB,QAAQH,SAAS,GAAGrM,WAAW,GAAGD,YAAY,CAAA;;;AAK/D/7C,UAAIiU,YAAY,KAAKyyC,gBAAgBj0D,EAAE;IACzC;IAEAi2D,SAASX,IAAI/nD,KAAKzH,SAAS;AACzB,YAAM,EAAC8pD,KAAAA,IAAQ;AACf,YAAM,EAACiB,aAAaqF,WAAWtF,eAAetH,WAAWC,UAAUj7B,WAAAA,IAAcxoB;AACjF,YAAMgqD,WAAW/1B,OAAOj0B,QAAQgqD,QAAQ;AACxC,UAAIa,iBAAiBb,SAAS71B;AAC9B,UAAIk8B,eAAe;AAEnB,YAAM5K,YAAYC,cAAc1lD,QAAQwlD,KAAK,KAAK/jD,GAAG,KAAKuU,KAAK;AAE/D,YAAMs6C,iBAAiB,SAASlxC,MAAM;AACpC3X,YAAI++C,SAASpnC,MAAMqmC,UAAUhkD,EAAE+tD,GAAG/tD,IAAI4uD,YAAAA,GAAeb,GAAG9tD,IAAImpD,iBAAiB,CAAA;AAC7E2E,WAAG9tD,KAAKmpD,iBAAiBE;MAC3B;AAEA,YAAMwF,0BAA0B9K,UAAUrqC,UAAUg1C,SAAAA;AACpD,UAAI9F,UAAUkG,WAAWt8B,OAAOh6B,IAAGkqB,GAAG3hB,MAAMu4B;AAE5CvzB,UAAI2T,YAAYg1C;AAChB3oD,UAAIw2B,eAAe;AACnBx2B,UAAIusB,OAAOg2B,SAAS3uB;AAEpBm0B,SAAG/tD,IAAI2qD,YAAY,MAAMmE,yBAAyBvwD,OAAAA;AAGlDyH,UAAIiU,YAAY1b,QAAQktD;AACxBriC,WAAK,KAAK4/B,YAAY6F,cAAAA;AAEtBD,qBAAevF,iBAAiByF,4BAA4B,UACxDH,cAAc,WAAY3M,WAAW,IAAIj7B,aAAei7B,WAAW,IAAIj7B,aACvE;AAGJ,WAAKtuB,KAAI,GAAGuI,OAAOqnD,KAAK7vD,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AAC7CowD,mBAAWR,KAAK5vD,EAAE;AAClBs2D,oBAAY,KAAKrC,gBAAgBj0D,EAAE;AAEnCuN,YAAIiU,YAAY80C;AAChB3lC,aAAKy/B,SAASC,QAAQ+F,cAAAA;AAEtBp8B,gBAAQo2B,SAASp2B;AAEjB,YAAI42B,iBAAiB52B,MAAMj6B,QAAQ;AACjC,eAAKy1D,cAAcjoD,KAAK+nD,IAAIt1D,IAAGurD,WAAWzlD,OAAAA;AAC1C6qD,2BAAiBzxD,KAAKoC,IAAIwuD,SAAS71B,YAAYqvB,SAAAA;;AAGjD,aAAKp/B,IAAI,GAAG4W,OAAO9G,MAAMj6B,QAAQmqB,IAAI4W,MAAM,EAAE5W,GAAG;AAC9CksC,yBAAep8B,MAAM9P,CAAE,CAAA;AAEvBymC,2BAAiBb,SAAS71B;QAC5B;AAEAtJ,aAAKy/B,SAASE,OAAO8F,cAAAA;MACvB;AAGAD,qBAAe;AACfxF,uBAAiBb,SAAS71B;AAG1BtJ,WAAK,KAAK6/B,WAAW4F,cAAAA;AACrBd,SAAG9tD,KAAKqpD;IACV;IAEA0F,WAAWjB,IAAI/nD,KAAKzH,SAAS;AAC3B,YAAM+pD,SAAS,KAAKA;AACpB,YAAM9vD,SAAS8vD,OAAO9vD;AACtB,UAAIgwD,YAAY/vD;AAEhB,UAAID,QAAQ;AACV,cAAMwrD,YAAYC,cAAc1lD,QAAQwlD,KAAK,KAAK/jD,GAAG,KAAKuU,KAAK;AAE/Dw5C,WAAG/tD,IAAI2qD,YAAY,MAAMpsD,QAAQ0wD,aAAa1wD,OAAAA;AAC9CwvD,WAAG9tD,KAAK1B,QAAQgrD;AAEhBvjD,YAAI2T,YAAYqqC,UAAUrqC,UAAUpb,QAAQ0wD,WAAW;AACvDjpD,YAAIw2B,eAAe;AAEnBgsB,qBAAah2B,OAAOj0B,QAAQiqD,UAAU;AAEtCxiD,YAAIiU,YAAY1b,QAAQ2wD;AACxBlpD,YAAIusB,OAAOi2B,WAAW5uB;AAEtB,aAAKnhC,KAAI,GAAGA,KAAID,QAAQ,EAAEC,IAAG;AAC3BuN,cAAI++C,SAASuD,OAAO7vD,EAAAA,GAAIurD,UAAUhkD,EAAE+tD,GAAG/tD,CAAC,GAAG+tD,GAAG9tD,IAAIuoD,WAAW91B,aAAa,CAAA;AAC1Eq7B,aAAG9tD,KAAKuoD,WAAW91B,aAAan0B,QAAQirD;QAC1C;;IAEJ;IAEA/rB,eAAeswB,IAAI/nD,KAAKmpD,aAAa5wD,SAAS;AAC5C,YAAM,EAACsrD,QAAQK,OAAM,IAAI;AACzB,YAAM,EAAClqD,GAAGC,GAAAA,GAAAA,IAAK8tD;AACf,YAAM,EAACx5C,OAAOD,OAAAA,IAAU66C;AACxB,YAAM,EAACrW,SAASC,UAAUC,YAAYC,YAAAA,IAAeN,cAAcp6C,QAAQmsD,YAAY;AAEvF1kD,UAAIiU,YAAY1b,QAAQ2b;AACxBlU,UAAI4U,cAAcrc,QAAQsc;AAC1B7U,UAAI0U,YAAYnc,QAAQoc;AAExB3U,UAAIk4B,UAAS;AACbl4B,UAAIm4B,OAAOn+B,IAAI84C,SAAS74C,EAAAA;AACxB,UAAIiqD,WAAW,OAAO;AACpB,aAAKqD,UAAUQ,IAAI/nD,KAAKmpD,aAAa5wD,OAAAA;;AAEvCyH,UAAIo4B,OAAOp+B,IAAIuU,QAAQwkC,UAAU94C,EAAAA;AACjC+F,UAAIopD,iBAAiBpvD,IAAIuU,OAAOtU,IAAGD,IAAIuU,OAAOtU,KAAI84C,QAAAA;AAClD,UAAImR,WAAW,YAAYL,WAAW,SAAS;AAC7C,aAAK0D,UAAUQ,IAAI/nD,KAAKmpD,aAAa5wD,OAAAA;;AAEvCyH,UAAIo4B,OAAOp+B,IAAIuU,OAAOtU,KAAIqU,SAAS2kC,WAAAA;AACnCjzC,UAAIopD,iBAAiBpvD,IAAIuU,OAAOtU,KAAIqU,QAAQtU,IAAIuU,QAAQ0kC,aAAah5C,KAAIqU,MAAAA;AACzE,UAAI41C,WAAW,UAAU;AACvB,aAAKqD,UAAUQ,IAAI/nD,KAAKmpD,aAAa5wD,OAAAA;;AAEvCyH,UAAIo4B,OAAOp+B,IAAIg5C,YAAY/4C,KAAIqU,MAAAA;AAC/BtO,UAAIopD,iBAAiBpvD,GAAGC,KAAIqU,QAAQtU,GAAGC,KAAIqU,SAAS0kC,UAAAA;AACpD,UAAIkR,WAAW,YAAYL,WAAW,QAAQ;AAC5C,aAAK0D,UAAUQ,IAAI/nD,KAAKmpD,aAAa5wD,OAAAA;;AAEvCyH,UAAIo4B,OAAOp+B,GAAGC,KAAI64C,OAAAA;AAClB9yC,UAAIopD,iBAAiBpvD,GAAGC,IAAGD,IAAI84C,SAAS74C,EAAAA;AACxC+F,UAAIwqC,UAAS;AAEbxqC,UAAIiB,KAAI;AAER,UAAI1I,QAAQoc,cAAc,GAAG;AAC3B3U,YAAIq4B,OAAM;;IAEd;IAMAgxB,uBAAuB9wD,SAAS;AAC9B,YAAMxH,QAAQ,KAAKA;AACnB,YAAMC,QAAQ,KAAK6H;AACnB,YAAMywD,QAAQt4D,SAASA,MAAMgJ;AAC7B,YAAMuvD,QAAQv4D,SAASA,MAAMiJ;AAC7B,UAAIqvD,SAASC,OAAO;AAClB,cAAM/sC,WAAW2kC,YAAY5oD,QAAQikB,QAAQ,EAAExqB,KAAK,MAAM,KAAKY,SAAS,KAAKqzD,cAAc;AAC3F,YAAI,CAACzpC,UAAU;AACb;;AAEF,cAAMtjB,OAAO,KAAKgtD,QAAQ/D,eAAe,MAAM5pD,OAAAA;AAC/C,cAAM6uD,kBAAkB1vD,OAAOyB,OAAO,CAAA,GAAIqjB,UAAU,KAAK0pC,KAAK;AAC9D,cAAMzB,YAAYL,mBAAmBrzD,OAAOwH,SAAS6uD,eAAAA;AACrD,cAAMr2C,QAAQyzC,mBAAmBjsD,SAAS6uD,iBAAiB3C,WAAW1zD,KAAAA;AACtE,YAAIu4D,MAAMhzD,QAAQya,MAAM/W,KAAKuvD,MAAMjzD,QAAQya,MAAM9W,GAAG;AAClD,eAAK4pD,SAASY,UAAUZ;AACxB,eAAKK,SAASO,UAAUP;AACxB,eAAK31C,QAAQrV,KAAKqV;AAClB,eAAKD,SAASpV,KAAKoV;AACnB,eAAKg4C,SAAS9pC,SAASxiB;AACvB,eAAKusD,SAAS/pC,SAASviB;AACvB,eAAK+M,mBAAkB,EAAGvQ,OAAO,MAAMsa,KAAAA;;;IAG7C;IAMAy4C,cAAc;AACZ,aAAO,CAAC,CAAC,KAAKxD;IAChB;IAEAtzD,KAAKsN,KAAK;AACR,YAAMzH,UAAU,KAAKA,QAAQg2B,WAAW,KAAK7qB,WAAU,CAAA;AACvD,UAAIsiD,UAAU,KAAKA;AAEnB,UAAI,CAACA,SAAS;AACZ;;AAGF,WAAKqD,uBAAuB9wD,OAAAA;AAE5B,YAAM4wD,cAAc;QAClB56C,OAAO,KAAKA;QACZD,QAAQ,KAAKA;MACf;AACA,YAAMy5C,KAAK;QACT/tD,GAAG,KAAKA;QACRC,GAAG,KAAKA;MACV;AAGA+rD,gBAAUr0D,KAAKwY,IAAI67C,OAAW,IAAA,OAAO,IAAIA;AAEzC,YAAMtjC,UAAUO,UAAU1qB,QAAQmqB,OAAO;AAGzC,YAAM+mC,oBAAoB,KAAKz3B,MAAMx/B,UAAU,KAAKwwD,WAAWxwD,UAAU,KAAK6vD,KAAK7vD,UAAU,KAAKywD,UAAUzwD,UAAU,KAAK8vD,OAAO9vD;AAElI,UAAI+F,QAAQqxB,WAAW6/B,mBAAmB;AACxCzpD,YAAI03B,KAAI;AACR13B,YAAI0pD,cAAc1D;AAGlB,aAAKvuB,eAAeswB,IAAI/nD,KAAKmpD,aAAa5wD,OAAAA;AAE1C0mD,8BAAsBj/C,KAAKzH,QAAQ2mD,aAAa;AAEhD6I,WAAG9tD,KAAKyoB,QAAQxoB;AAGhB,aAAK4+B,UAAUivB,IAAI/nD,KAAKzH,OAAAA;AAGxB,aAAKmwD,SAASX,IAAI/nD,KAAKzH,OAAAA;AAGvB,aAAKywD,WAAWjB,IAAI/nD,KAAKzH,OAAAA;AAEzBknD,6BAAqBz/C,KAAKzH,QAAQ2mD,aAAa;AAE/Cl/C,YAAI43B,QAAO;;IAEf;IAMAuR,oBAAoB;AAClB,aAAO,KAAKv2C,WAAW,CAAA;IACzB;IAOAw2C,kBAAkBC,gBAAgBkY,eAAe;AAC/C,YAAMjY,aAAa,KAAK12C;AACxB,YAAM4D,SAAS6yC,eAAev1B,IAAI,CAAC,EAACvY,cAAcN,OAAAA,OAAK,MAAM;AAC3D,cAAMa,OAAO,KAAK/K,MAAMwR,eAAehH,YAAAA;AAEvC,YAAI,CAACO,MAAM;AACT,gBAAM,IAAI6e,MAAM,oCAAoCpf,YAAc;;AAGpE,eAAO;UACLA;UACAwD,SAASjD,KAAKD,KAAKZ,MAAM;UACzBA,OAAAA;QACF;MACF,CAAA;AACA,YAAMqnB,UAAU,CAACinB,eAAeD,YAAY9yC,MAAAA;AAC5C,YAAMmzD,kBAAkB,KAAKC,iBAAiBpzD,QAAQ+qD,aAAAA;AAEtD,UAAIj/B,WAAWqnC,iBAAiB;AAC9B,aAAK/2D,UAAU4D;AACf,aAAKyvD,iBAAiB1E;AACtB,aAAKsI,sBAAsB;AAC3B,aAAKpzD,OAAO,IAAI;;IAEpB;IASAupD,YAAYjrC,IAAG00B,QAAQzG,cAAc,MAAM;AACzC,UAAIyG,UAAU,KAAKogB,qBAAqB;AACtC,eAAO;;AAET,WAAKA,sBAAsB;AAE3B,YAAMtxD,UAAU,KAAKA;AACrB,YAAM+wC,aAAa,KAAK12C,WAAW,CAAA;AACnC,YAAM4D,SAAS,KAAKwzC,mBAAmBj1B,IAAGu0B,YAAYG,QAAQzG,WAAAA;AAK9D,YAAM2mB,kBAAkB,KAAKC,iBAAiBpzD,QAAQue,EAAAA;AAGtD,YAAMuN,UAAUmnB,UAAU,CAACF,eAAe/yC,QAAQ8yC,UAAeqgB,KAAAA;AAGjE,UAAIrnC,SAAS;AACX,aAAK1vB,UAAU4D;AAEf,YAAI+B,QAAQqxB,WAAWrxB,QAAQ+uD,UAAU;AACvC,eAAKrB,iBAAiB;YACpBjsD,GAAG+a,GAAE/a;YACLC,GAAG8a,GAAE9a;UACP;AAEA,eAAKxD,OAAO,MAAMgzC,MAAAA;;;AAItB,aAAOnnB;IACT;IAWA0nB,mBAAmBj1B,IAAGu0B,YAAYG,QAAQzG,aAAa;AACrD,YAAMzqC,UAAU,KAAKA;AAErB,UAAIwc,GAAE7jB,SAAS,YAAY;AACzB,eAAO,CAAA;;AAGT,UAAI,CAAC8xC,aAAa;AAGhB,eAAOsG,WAAW9qC,OAAO/L,CAAAA,OACvB,KAAK1B,MAAM8K,KAAKyG,SAAS7P,GAAE8I,YAAY,KACvC,KAAKxK,MAAMwR,eAAe9P,GAAE8I,YAAY,EAAEoC,WAAWgH,UAAUlS,GAAEwI,KAAK,MAAMpK,MAAAA;;AAKhF,YAAM2F,SAAS,KAAKzF,MAAMm3C,0BAA0BnzB,IAAGxc,QAAQ+C,MAAM/C,SAASkxC,MAAAA;AAE9E,UAAIlxC,QAAQoB,SAAS;AACnBnD,eAAOmD,QAAO;;AAGhB,aAAOnD;IACT;IASAozD,iBAAiBpzD,QAAQue,IAAG;AAC1B,YAAM,EAACuxC,QAAQC,QAAQhuD,QAAO,IAAI;AAClC,YAAMikB,WAAW2kC,YAAY5oD,QAAQikB,QAAQ,EAAExqB,KAAK,MAAMwE,QAAQue,EAAAA;AAClE,aAAOyH,aAAa,UAAU8pC,WAAW9pC,SAASxiB,KAAKusD,WAAW/pC,SAASviB;IAC7E;EACF;AAEA,MAAA,iBAAe;IACb0C,IAAI;IACJ6jD,UAAUuF;IACV5E;IAEA2I,UAAU/4D,OAAO+jD,OAAOv8C,SAAS;AAC/B,UAAIA,SAAS;AACXxH,cAAMqxD,UAAU,IAAI2D,SAAQ;UAACh1D;UAAOwH;QAAO,CAAA;;IAE/C;IAEA02B,aAAal+B,OAAO+jD,OAAOv8C,SAAS;AAClC,UAAIxH,MAAMqxD,SAAS;AACjBrxD,cAAMqxD,QAAQthD,WAAWvI,OAAAA;;IAE7B;IAEAmK,MAAM3R,OAAO+jD,OAAOv8C,SAAS;AAC3B,UAAIxH,MAAMqxD,SAAS;AACjBrxD,cAAMqxD,QAAQthD,WAAWvI,OAAAA;;IAE7B;IAEAwxD,UAAUh5D,OAAO;AACf,YAAMqxD,UAAUrxD,MAAMqxD;AAEtB,UAAIA,WAAWA,QAAQoH,YAAW,GAAI;AACpC,cAAM1gD,OAAO;UACXs5C;QACF;AAEA,YAAIrxD,MAAM+/B,cAAc,qBAAqB;UAAC,GAAGhoB;UAAMk0B,YAAY;QAAI,CAAA,MAAO,OAAO;AACnF;;AAGFolB,gBAAQ1vD,KAAK3B,MAAMiP,GAAG;AAEtBjP,cAAM+/B,cAAc,oBAAoBhoB,IAAAA;;IAE5C;IAEA23C,WAAW1vD,OAAO+X,MAAM;AACtB,UAAI/X,MAAMqxD,SAAS;AAEjB,cAAM9kC,mBAAmBxU,KAAK2gC;AAC9B,YAAI14C,MAAMqxD,QAAQpC,YAAYl3C,KAAKvV,OAAO+pB,kBAAkBxU,KAAKk6B,WAAW,GAAG;AAE7El6B,eAAKwZ,UAAU;;;IAGrB;IAEA1qB,UAAU;MACRgyB,SAAS;MACT09B,UAAU;MACV9qC,UAAU;MACVtI,iBAAiB;MACjB8zC,YAAY;MACZtI,WAAW;QACTnoC,QAAQ;MACV;MACA2rC,cAAc;MACdC,mBAAmB;MACnBt2B,YAAY;MACZ44B,WAAW;MACXnC,aAAa;MACbf,UAAU,CAAA;MAEVoG,WAAW;MACXO,aAAa;MACb1F,eAAe;MACfD,iBAAiB;MACjBf,YAAY;QACVjrC,QAAQ;MACV;MACA0xC,aAAa;MACbvmC,SAAS;MACTshC,cAAc;MACdD,WAAW;MACXW,cAAc;MACd3I,WAAW,CAAC/7C,KAAKtG,SAASA,KAAK6oD,SAASrpD;MACxC8iD,UAAU,CAACh8C,KAAKtG,SAASA,KAAK6oD,SAASrpD;MACvCovD,oBAAoB;MACpBjF,eAAe;MACftiC,YAAY;MACZlM,aAAa;MACbF,aAAa;MACb9c,WAAW;QACTvG,UAAU;QACVsE,QAAQ;MACV;MACA6C,YAAY;QACV4U,SAAS;UACPnc,MAAM;UACNiH,YAAY;YAAC;YAAK;YAAK;YAAS;YAAU;YAAU;UAAS;QAC/D;QACA6tD,SAAS;UACPpwD,QAAQ;UACRtE,UAAU;QACZ;MACF;MACAH,WAAW6zD;IACb;IAEAj8B,eAAe;MACbw5B,UAAU;MACVC,YAAY;MACZ9C,WAAW;IACb;IAEAxsC,aAAa;MACXC,aAAa,CAAC3D,SAASA,SAAS,YAAYA,SAAS,cAAcA,SAAS;MAC5E4D,YAAY;MACZjiB,WAAW;QACTgiB,aAAa;QACbC,YAAY;MACd;MACAvb,WAAW;QACTmyD,WAAW;MACb;MACAvxD,YAAY;QACVuxD,WAAW;MACb;IACF;IAGAtpB,wBAAwB;MAAC;IAAc;EACzC;;;;;;;;;;;ACl0CA,MAAMupB,cAAc,CAAC5lD,QAAQpF,KAAKhE,QAAOivD,gBAAgB;AACvD,QAAI,OAAOjrD,QAAQ,UAAU;AAC3BhE,MAAAA,SAAQoJ,OAAO5Q,KAAKwL,GAAO,IAAA;AAC3BirD,kBAAYxQ,QAAQ;QAACz+C,OAAAA;QAAOwK,OAAOxG;MAAG,CAAA;eAC7B8P,MAAM9P,GAAM,GAAA;AACrBhE,MAAAA,SAAQ;;AAEV,WAAOA;EACT;AAEA,WAASkvD,eAAe9lD,QAAQpF,KAAKhE,QAAOivD,aAAa;AACvD,UAAMngC,SAAQ1lB,OAAO2K,QAAQ/P,GAAAA;AAC7B,QAAI8qB,WAAU,IAAI;AAChB,aAAOkgC,YAAY5lD,QAAQpF,KAAKhE,QAAOivD,WAAAA;;AAEzC,UAAMz7C,OAAOpK,OAAO+lD,YAAYnrD,GAAAA;AAChC,WAAO8qB,WAAUtb,OAAOxT,SAAQ8uB;EAClC;AAEA,MAAM6B,aAAa,CAAC3wB,QAAOlH,SAAQkH,WAAU,OAAO,OAAO82B,YAAYpgC,KAAKy4B,MAAMnvB,MAAAA,GAAQ,GAAGlH,IAAI;AAEjG,WAASs2D,kBAAkBpxD,OAAO;AAChC,UAAMoL,SAAS,KAAKC,UAAS;AAE7B,QAAIrL,SAAS,KAAKA,QAAQoL,OAAO7R,QAAQ;AACvC,aAAO6R,OAAOpL,KAAM;;AAEtB,WAAOA;EACT;AAEe,MAAMqxD,gBAAN,cAA4Bl9B,MAAAA;IAEzC,OAAOzwB,KAAK;IAKZ,OAAO/E,WAAW;MAChByS,OAAO;QACL4mB,UAAUo5B;MACZ;;IAGF95D,YAAY6E,KAAK;AACf,YAAMA,GAAAA;AAGN,WAAKm1D,cAAc15D;AACnB,WAAK25D,cAAc;AACnB,WAAKC,eAAe,CAAA;IACtB;IAEAzvC,KAAKwjB,cAAc;AACjB,YAAMksB,QAAQ,KAAKD;AACnB,UAAIC,MAAMl4D,QAAQ;AAChB,cAAM6R,SAAS,KAAKC,UAAS;AAC7B,mBAAW,EAACrJ,OAAAA,QAAOwK,MAAK,KAAKilD,OAAO;AAClC,cAAIrmD,OAAOpJ,MAAM,MAAKwK,OAAO;AAC3BpB,mBAAOuE,OAAO3N,QAAO,CAAA;;QAEzB;AACA,aAAKwvD,eAAe,CAAA;;AAEtB,YAAMzvC,KAAKwjB,YAAAA;IACb;IAEA56B,MAAM3E,KAAKhE,QAAO;AAChB,UAAI4P,cAAc5L,GAAM,GAAA;AACtB,eAAO;;AAET,YAAMoF,SAAS,KAAKC,UAAS;AAC7BrJ,MAAAA,SAAQS,SAAST,MAAUoJ,KAAAA,OAAOpJ,MAAAA,MAAWgE,MAAMhE,SAC/CkvD,eAAe9lD,QAAQpF,KAAKyC,eAAezG,QAAOgE,GAAAA,GAAM,KAAKwrD,YAAY;AAC7E,aAAO7+B,WAAW3wB,QAAOoJ,OAAO7R,SAAS,CAAA;IAC3C;IAEAi9B,sBAAsB;AACpB,YAAM,EAAC5yB,YAAYC,WAAAA,IAAc,KAAKF,cAAa;AACnD,UAAI,EAAChL,KAAAA,MAAKmC,KAAAA,KAAG,IAAI,KAAKkR,UAAU,IAAI;AAEpC,UAAI,KAAK1M,QAAQ46C,WAAW,SAAS;AACnC,YAAI,CAACt2C,YAAY;AACfjL,UAAAA,OAAM;;AAER,YAAI,CAACkL,YAAY;AACf/I,UAAAA,OAAM,KAAKuQ,UAAS,EAAG9R,SAAS;;;AAIpC,WAAKZ,MAAMA;AACX,WAAKmC,MAAMA;IACb;IAEA87B,aAAa;AACX,YAAMj+B,OAAM,KAAKA;AACjB,YAAMmC,OAAM,KAAKA;AACjB,YAAMyZ,UAAS,KAAKjV,QAAQiV;AAC5B,YAAMnD,QAAQ,CAAA;AACd,UAAIhG,SAAS,KAAKC,UAAS;AAG3BD,eAASzS,SAAS,KAAKmC,SAAQsQ,OAAO7R,SAAS,IAAK6R,SAASA,OAAO2X,MAAMpqB,MAAKmC,OAAM,CAAE;AAEvF,WAAKy2D,cAAc74D,KAAKoC,IAAIsQ,OAAO7R,UAAUgb,UAAS,IAAI,IAAI,CAAA;AAC9D,WAAK+8C,cAAc,KAAK34D,OAAO4b,UAAS,MAAM;AAE9C,eAASvU,QAAQrH,MAAKqH,SAASlF,MAAKkF,SAAS;AAC3CoR,cAAM5W,KAAK;UAACwF;QAAK,CAAA;MACnB;AACA,aAAOoR;IACT;IAEA3E,iBAAiBzM,OAAO;AACtB,aAAOoxD,kBAAkBr4D,KAAK,MAAMiH,KAAAA;IACtC;IAKA1B,YAAY;AACV,YAAMA,UAAS;AAEf,UAAI,CAAC,KAAK2U,aAAY,GAAI;AAExB,aAAKyP,iBAAiB,CAAC,KAAKA;;IAEhC;IAGAvR,iBAAiBnR,OAAO;AACtB,UAAI,OAAOA,UAAU,UAAU;AAC7BA,gBAAQ,KAAK2K,MAAM3K,KAAAA;;AAGrB,aAAOA,UAAU,OAAO+L,MAAM,KAAKgL,oBAAoB/W,QAAQ,KAAKsxD,eAAe,KAAKC,WAAW;IACrG;IAIAlgD,gBAAgBrP,QAAO;AACrB,YAAMoP,QAAQ,KAAKA;AACnB,UAAIpP,SAAQ,KAAKA,SAAQoP,MAAM7X,SAAS,GAAG;AACzC,eAAO;;AAET,aAAO,KAAK4X,iBAAiBC,MAAMpP,MAAAA,EAAOhC,KAAK;IACjD;IAEAiX,iBAAiB8jB,OAAO;AACtB,aAAOriC,KAAKy4B,MAAM,KAAKmgC,cAAc,KAAKn2B,mBAAmBJ,KAAS,IAAA,KAAKw2B,WAAW;IACxF;IAEA18C,eAAe;AACb,aAAO,KAAK1T;IACd;EACF;ACrIA,WAASuwD,gBAAcC,mBAAmBC,WAAW;AACnD,UAAMxgD,QAAQ,CAAA;AAKd,UAAMygD,cAAc;AACpB,UAAM,EAAC3X,QAAQzd,MAAM9jC,KAAAA,MAAKmC,KAAAA,MAAKg3D,WAAWlnD,OAAOmnD,UAAUC,WAAWC,cAAAA,IAAiBN;AACvF,UAAMO,OAAOz1B,QAAQ;AACrB,UAAM01B,YAAYJ,WAAW;AAC7B,UAAM,EAACp5D,KAAKy5D,MAAMt3D,KAAKu3D,KAAAA,IAAQT;AAC/B,UAAMhuD,aAAa,CAACgO,cAAcjZ,IAAAA;AAClC,UAAMkL,aAAa,CAAC+N,cAAc9W,IAAAA;AAClC,UAAMw3D,eAAe,CAAC1gD,cAAchH,KAAAA;AACpC,UAAM2nD,cAAcF,OAAOD,SAASJ,YAAY;AAChD,QAAIh4C,UAAUw4C,SAASH,OAAOD,QAAQD,YAAYD,IAAQA,IAAAA;AAC1D,QAAIz2D,QAAQg3D,SAASC,SAASC;AAI9B,QAAI34C,UAAU63C,eAAe,CAACjuD,cAAc,CAACC,YAAY;AACvD,aAAO;QAAC;UAAC7D,OAAOoyD;QAAI;QAAG;UAACpyD,OAAOqyD;QAAI;MAAE;;AAGvCM,gBAAYj6D,KAAKm5B,KAAKwgC,OAAOr4C,OAAAA,IAAWthB,KAAKoE,MAAMs1D,OAAOp4C,OAAAA;AAC1D,QAAI24C,YAAYR,WAAW;AAEzBn4C,gBAAUw4C,QAAQG,YAAY34C,UAAUm4C,YAAYD,IAAQA,IAAAA;;AAG9D,QAAI,CAACtgD,cAAckgD,SAAY,GAAA;AAE7Br2D,eAAS/C,KAAKyrB,IAAI,IAAI2tC,SAAAA;AACtB93C,gBAAUthB,KAAKm5B,KAAK7X,UAAUve,MAAUA,IAAAA;;AAG1C,QAAIy+C,WAAW,SAAS;AACtBuY,gBAAU/5D,KAAKoE,MAAMs1D,OAAOp4C,OAAWA,IAAAA;AACvC04C,gBAAUh6D,KAAKm5B,KAAKwgC,OAAOr4C,OAAWA,IAAAA;WACjC;AACLy4C,gBAAUL;AACVM,gBAAUL;;AAGZ,QAAIzuD,cAAcC,cAAc44B,QAAQm2B,aAAa93D,OAAMnC,QAAO8jC,MAAMziB,UAAU,GAAO,GAAA;AAKvF24C,kBAAYj6D,KAAKy4B,MAAMz4B,KAAKC,KAAKmC,OAAMnC,QAAOqhB,SAAS+3C,QAAAA,CAAAA;AACvD/3C,iBAAWlf,OAAMnC,QAAOg6D;AACxBF,gBAAU95D;AACV+5D,gBAAU53D;IACZ,WAAWw3D,cAAc;AAIvBG,gBAAU7uD,aAAajL,OAAM85D;AAC7BC,gBAAU7uD,aAAa/I,OAAM43D;AAC7BC,kBAAY/nD,QAAQ;AACpBoP,iBAAW04C,UAAUD,WAAWE;WAC3B;AAELA,mBAAaD,UAAUD,WAAWz4C;AAGlC,UAAI64C,aAAaF,WAAWj6D,KAAKy4B,MAAMwhC,SAAAA,GAAY34C,UAAU,GAAO,GAAA;AAClE24C,oBAAYj6D,KAAKy4B,MAAMwhC,SAAAA;aAClB;AACLA,oBAAYj6D,KAAKm5B,KAAK8gC,SAAAA;;;AAM1B,UAAMG,gBAAgBp6D,KAAKoC,IACzBi4D,eAAe/4C,OAAAA,GACf+4C,eAAeN,OAAAA,CAAAA;AAEjBh3D,aAAS/C,KAAKyrB,IAAI,IAAIvS,cAAckgD,SAAAA,IAAagB,gBAAgBhB,SAAS;AAC1EW,cAAU/5D,KAAKy4B,MAAMshC,UAAUh3D,MAAUA,IAAAA;AACzCi3D,cAAUh6D,KAAKy4B,MAAMuhC,UAAUj3D,MAAUA,IAAAA;AAEzC,QAAIioB,IAAI;AACR,QAAI9f,YAAY;AACd,UAAIquD,iBAAiBQ,YAAY95D,MAAK;AACpCyY,cAAM5W,KAAK;UAACwF,OAAOrH;QAAG,CAAA;AAEtB,YAAI85D,UAAU95D,MAAK;AACjB+qB;;AAGF,YAAImvC,aAAan6D,KAAKy4B,OAAOshC,UAAU/uC,IAAI1J,WAAWve,MAAAA,IAAUA,QAAQ9C,MAAKq6D,kBAAkBr6D,MAAK45D,YAAYZ,iBAAqB,CAAA,GAAA;AACnIjuC;;iBAEO+uC,UAAU95D,MAAK;AACxB+qB;;;AAIJ,WAAOA,IAAIivC,WAAW,EAAEjvC,GAAG;AACzB,YAAMuvC,YAAYv6D,KAAKy4B,OAAOshC,UAAU/uC,IAAI1J,WAAWve,MAAUA,IAAAA;AACjE,UAAIoI,cAAcovD,YAAYn4D,MAAK;AACjC;;AAEFsW,YAAM5W,KAAK;QAACwF,OAAOizD;MAAS,CAAA;IAC9B;AAEA,QAAIpvD,cAAcouD,iBAAiBS,YAAY53D,MAAK;AAElD,UAAIsW,MAAM7X,UAAUs5D,aAAazhD,MAAMA,MAAM7X,SAAS,CAAA,EAAGyG,OAAOlF,MAAKk4D,kBAAkBl4D,MAAKy3D,YAAYZ,iBAAqB,CAAA,GAAA;AAC3HvgD,cAAMA,MAAM7X,SAAS,CAAE,EAACyG,QAAQlF;aAC3B;AACLsW,cAAM5W,KAAK;UAACwF,OAAOlF;QAAG,CAAA;;IAE1B,WAAW,CAAC+I,cAAc6uD,YAAY53D,MAAK;AACzCsW,YAAM5W,KAAK;QAACwF,OAAO0yD;MAAO,CAAA;;AAG5B,WAAOthD;EACT;AAEA,WAAS4hD,kBAAkBhzD,OAAOuyD,YAAY,EAACp/C,YAAYglB,YAAW,GAAG;AACvE,UAAM+6B,MAAM72C,UAAU8b,WAAAA;AACtB,UAAMxmB,SAASwB,aAAaza,KAAKsgB,IAAIk6C,GAAAA,IAAOx6D,KAAKogB,IAAIo6C,GAAAA,MAAS;AAC9D,UAAM35D,SAAS,OAAOg5D,cAAc,KAAKvyD,OAAOzG;AAChD,WAAOb,KAAKC,IAAI45D,aAAa5gD,OAAOpY,MAAAA;EACtC;AAEe,MAAM45D,kBAAN,cAA8Bh/B,MAAAA;IAE3C78B,YAAY6E,KAAK;AACf,YAAMA,GAAAA;AAGN,WAAKvD,QAAQhB;AAEb,WAAK+I,MAAM/I;AAEX,WAAK05D,cAAc15D;AAEnB,WAAKw7D,YAAYx7D;AACjB,WAAK25D,cAAc;IACrB;IAEA5mD,MAAM3E,KAAKhE,QAAO;AAChB,UAAI4P,cAAc5L,GAAM,GAAA;AACtB,eAAO;;AAET,WAAK,OAAOA,QAAQ,YAAYA,eAAelC,WAAW,CAACrB,SAAS,CAACuD,GAAM,GAAA;AACzE,eAAO;;AAGT,aAAO,CAACA;IACV;IAEAqtD,yBAAyB;AACvB,YAAM,EAAC3+C,YAAW,IAAI,KAAKpV;AAC3B,YAAM,EAACsE,YAAYC,WAAAA,IAAc,KAAKF,cAAa;AACnD,UAAI,EAAChL,KAAAA,MAAKmC,KAAAA,KAAG,IAAI;AAEjB,YAAMw4D,SAASv/C,CAAAA,MAAMpb,OAAMiL,aAAajL,OAAMob;AAC9C,YAAMw/C,SAASx/C,CAAAA,MAAMjZ,OAAM+I,aAAa/I,OAAMiZ;AAE9C,UAAIW,aAAa;AACf,cAAM8+C,UAAU9wD,KAAK/J,IAAAA;AACrB,cAAM86D,UAAU/wD,KAAK5H,IAAAA;AAErB,YAAI04D,UAAU,KAAKC,UAAU,GAAG;AAC9BF,iBAAO,CAAA;QACT,WAAWC,UAAU,KAAKC,UAAU,GAAG;AACrCH,iBAAO,CAAA;;;AAIX,UAAI36D,SAAQmC,MAAK;AACf,YAAIyZ,UAASzZ,SAAQ,IAAI,IAAIpC,KAAKwY,IAAIpW,OAAM,IAAK;AAEjDy4D,eAAOz4D,OAAMyZ,OAAAA;AAEb,YAAI,CAACG,aAAa;AAChB4+C,iBAAO36D,OAAM4b,OAAAA;;;AAGjB,WAAK5b,MAAMA;AACX,WAAKmC,MAAMA;IACb;IAEA44D,eAAe;AACb,YAAMtjC,WAAW,KAAK9wB,QAAQ8R;AAE9B,UAAI,EAACof,eAAemjC,SAAAA,IAAYvjC;AAChC,UAAI2hC;AAEJ,UAAI4B,UAAU;AACZ5B,mBAAWr5D,KAAKm5B,KAAK,KAAK/2B,MAAM64D,QAAYj7D,IAAAA,KAAKoE,MAAM,KAAKnE,MAAMg7D,QAAY,IAAA;AAC9E,YAAI5B,WAAW,KAAM;AACnB7pD,kBAAQC,KAAK,UAAU,KAAKzE,EAAE,oBAAoBiwD,QAAS,kCAAiC5B,QAAAA,2BAAmC;AAC/HA,qBAAW;;aAER;AACLA,mBAAW,KAAK6B,iBAAgB;AAChCpjC,wBAAgBA,iBAAiB;;AAGnC,UAAIA,eAAe;AACjBuhC,mBAAWr5D,KAAKC,IAAI63B,eAAeuhC,QAAAA;;AAGrC,aAAOA;IACT;IAKA6B,mBAAmB;AACjB,aAAO9vD,OAAOE;IAChB;IAEA4yB,aAAa;AACX,YAAMn2B,OAAO,KAAKnB;AAClB,YAAM8wB,WAAW3vB,KAAK2Q;AAMtB,UAAI2gD,WAAW,KAAK2B,aAAY;AAChC3B,iBAAWr5D,KAAKoC,IAAI,GAAGi3D,QAAAA;AAEvB,YAAM8B,0BAA0B;QAC9B9B;QACA7X,QAAQz5C,KAAKy5C;QACbvhD,KAAK8H,KAAK9H;QACVmC,KAAK2F,KAAK3F;QACVg3D,WAAW1hC,SAAS0hC;QACpBr1B,MAAMrM,SAASujC;QACf/oD,OAAOwlB,SAASxlB;QAChBonD,WAAW,KAAK/xB,WAAU;QAC1B9sB,YAAY,KAAKF,aAAY;QAC7BklB,aAAa/H,SAAS+H,eAAe;QACrC85B,eAAe7hC,SAAS6hC,kBAAkB;MAC5C;AACA,YAAML,YAAY,KAAKl9B,UAAU;AACjC,YAAMtjB,QAAQsgD,gBAAcmC,yBAAyBjC,SAAAA;AAIrD,UAAInxD,KAAKy5C,WAAW,SAAS;AAC3B4Z,2BAAmB1iD,OAAO,MAAM,OAAA;;AAGlC,UAAI3Q,KAAKC,SAAS;AAChB0Q,cAAM1Q,QAAO;AAEb,aAAK9H,QAAQ,KAAKkC;AAClB,aAAK6F,MAAM,KAAKhI;aACX;AACL,aAAKC,QAAQ,KAAKD;AAClB,aAAKgI,MAAM,KAAK7F;;AAGlB,aAAOsW;IACT;IAKA9S,YAAY;AACV,YAAM8S,QAAQ,KAAKA;AACnB,UAAIxY,SAAQ,KAAKD;AACjB,UAAIgI,OAAM,KAAK7F;AAEf,YAAMwD,UAAS;AAEf,UAAI,KAAKgB,QAAQiV,UAAUnD,MAAM7X,QAAQ;AACvC,cAAMgb,WAAU5T,OAAM/H,UAASF,KAAKoC,IAAIsW,MAAM7X,SAAS,GAAG,CAAK,IAAA;AAC/DX,QAAAA,UAAS2b;AACT5T,QAAAA,QAAO4T;;AAET,WAAK+8C,cAAc14D;AACnB,WAAKw6D,YAAYzyD;AACjB,WAAK4wD,cAAc5wD,OAAM/H;IAC3B;IAEA6T,iBAAiBzM,OAAO;AACtB,aAAOge,cAAahe,OAAO,KAAKlI,MAAMwH,QAAQ2e,QAAQ,KAAK3e,QAAQ8R,MAAM6Q,MAAM;IACjF;EACF;ACnTe,MAAM8xC,cAAN,cAA0BZ,gBAAAA;IAEvC,OAAOzvD,KAAK;IAKZ,OAAO/E,WAAW;MAChByS,OAAO;QACL4mB,UAAUg8B,MAAMC,WAAWC;MAC7B;;IAIF19B,sBAAsB;AACpB,YAAM,EAAC79B,KAAAA,MAAKmC,KAAAA,KAAG,IAAI,KAAKkR,UAAU,IAAI;AAEtC,WAAKrT,MAAM8J,eAAS9J,IAAAA,IAAOA,OAAM;AACjC,WAAKmC,MAAM2H,eAAS3H,IAAAA,IAAOA,OAAM;AAGjC,WAAKu4D,uBAAsB;IAC7B;IAMAO,mBAAmB;AACjB,YAAMzgD,aAAa,KAAKF,aAAY;AACpC,YAAM1Z,SAAS4Z,aAAa,KAAKmC,QAAQ,KAAKD;AAC9C,YAAM8iB,cAAc9b,UAAU,KAAK/c,QAAQ8R,MAAM+mB,WAAW;AAC5D,YAAMxmB,SAASwB,aAAaza,KAAKsgB,IAAImf,WAAAA,IAAez/B,KAAKogB,IAAIqf,WAAAA,MAAiB;AAC9E,YAAMoC,WAAW,KAAKG,wBAAwB,CAAA;AAC9C,aAAOhiC,KAAKm5B,KAAKt4B,SAASb,KAAKC,IAAI,IAAI4hC,SAAS9G,aAAa9hB,KAAAA,CAAAA;IAC/D;IAGAR,iBAAiBnR,OAAO;AACtB,aAAOA,UAAU,OAAO+L,MAAM,KAAKgL,oBAAoB/W,QAAQ,KAAKsxD,eAAe,KAAKC,WAAW;IACrG;IAEAt6C,iBAAiB8jB,OAAO;AACtB,aAAO,KAAKu2B,cAAc,KAAKn2B,mBAAmBJ,KAAAA,IAAS,KAAKw2B;IAClE;EACF;AC3CA,MAAM4C,aAAapgD,CAAAA,MAAKrb,KAAKoE,MAAMs3D,MAAMrgD,CAAAA,CAAAA;AACzC,MAAMsgD,iBAAiB,CAACtgD,GAAGugD,OAAM57D,KAAKyrB,IAAI,IAAIgwC,WAAWpgD,CAAKugD,IAAAA,EAAAA;AAE9D,WAASC,QAAQC,SAAS;AACxB,UAAM92D,SAAS82D,UAAW97D,KAAKyrB,IAAI,IAAIgwC,WAAWK,OAAAA,CAAAA;AAClD,WAAO92D,WAAW;EACpB;AAEA,WAAS+2D,MAAM97D,MAAKmC,MAAK45D,UAAU;AACjC,UAAMC,YAAYj8D,KAAKyrB,IAAI,IAAIuwC,QAAAA;AAC/B,UAAM97D,SAAQF,KAAKoE,MAAMnE,OAAMg8D,SAAAA;AAC/B,UAAMh0D,OAAMjI,KAAKm5B,KAAK/2B,OAAM65D,SAAAA;AAC5B,WAAOh0D,OAAM/H;EACf;AAEA,WAASg8D,SAASj8D,MAAKmC,MAAK;AAC1B,UAAM+Q,SAAQ/Q,OAAMnC;AACpB,QAAI+7D,WAAWP,WAAWtoD,MAAAA;AAC1B,WAAO4oD,MAAM97D,MAAKmC,MAAK45D,QAAAA,IAAY,IAAI;AACrCA;IACF;AACA,WAAOD,MAAM97D,MAAKmC,MAAK45D,QAAAA,IAAY,IAAI;AACrCA;IACF;AACA,WAAOh8D,KAAKC,IAAI+7D,UAAUP,WAAWx7D,IAAAA,CAAAA;EACvC;AASA,WAAS+4D,cAAcC,mBAAmB,EAACh5D,KAAAA,MAAKmC,KAAAA,KAAG,GAAG;AACpDnC,IAAAA,OAAM88B,gBAAgBk8B,kBAAkBh5D,KAAKA,IAAAA;AAC7C,UAAMyY,QAAQ,CAAA;AACd,UAAMyjD,SAASV,WAAWx7D,IAAAA;AAC1B,QAAIm8D,MAAMF,SAASj8D,MAAKmC,IAAAA;AACxB,QAAIg3D,YAAYgD,MAAM,IAAIp8D,KAAKyrB,IAAI,IAAIzrB,KAAKwY,IAAI4jD,GAAAA,CAAAA,IAAQ;AACxD,UAAMnB,WAAWj7D,KAAKyrB,IAAI,IAAI2wC,GAAAA;AAC9B,UAAM1hD,OAAOyhD,SAASC,MAAMp8D,KAAKyrB,IAAI,IAAI0wC,MAAAA,IAAU;AACnD,UAAMj8D,SAAQF,KAAKy4B,OAAOx4B,OAAMya,QAAQ0+C,SAAaA,IAAAA;AACrD,UAAMv9C,UAAS7b,KAAKoE,OAAOnE,OAAMya,QAAQugD,WAAW,EAAA,IAAMA,WAAW;AACrE,QAAIoB,cAAcr8D,KAAKoE,OAAOlE,SAAQ2b,WAAU7b,KAAKyrB,IAAI,IAAI2wC,GAAAA,CAAAA;AAC7D,QAAI90D,QAAQy1B,gBAAgBk8B,kBAAkBh5D,KAAKD,KAAKy4B,OAAO/d,OAAOmB,UAASwgD,cAAcr8D,KAAKyrB,IAAI,IAAI2wC,GAAAA,KAAQhD,SAAaA,IAAAA,SAAAA;AAC/H,WAAO9xD,QAAQlF,MAAK;AAClBsW,YAAM5W,KAAK;QAACwF;QAAO0wB,OAAO6jC,QAAQv0D,KAAAA;QAAQ+0D;MAAW,CAAA;AACrD,UAAIA,eAAe,IAAI;AACrBA,sBAAcA,cAAc,KAAK,KAAK;aACjC;AACLA;;AAEF,UAAIA,eAAe,IAAI;AACrBD;AACAC,sBAAc;AACdjD,oBAAYgD,OAAO,IAAI,IAAIhD;;AAE7B9xD,cAAQtH,KAAKy4B,OAAO/d,OAAOmB,UAASwgD,cAAcr8D,KAAKyrB,IAAI,IAAI2wC,GAAAA,KAAQhD,SAAaA,IAAAA;IACtF;AACA,UAAMkD,WAAWv/B,gBAAgBk8B,kBAAkB72D,KAAKkF,KAAAA;AACxDoR,UAAM5W,KAAK;MAACwF,OAAOg1D;MAAUtkC,OAAO6jC,QAAQS,QAAAA;MAAWD;IAAW,CAAA;AAElE,WAAO3jD;EACT;AAEe,MAAM6jD,mBAAN,cAA+B9gC,MAAAA;IAE5C,OAAOzwB,KAAK;IAKZ,OAAO/E,WAAW;MAChByS,OAAO;QACL4mB,UAAUg8B,MAAMC,WAAWiB;QAC3BxkC,OAAO;UACLC,SAAS;QACX;MACF;;IAIFr5B,YAAY6E,KAAK;AACf,YAAMA,GAAAA;AAGN,WAAKvD,QAAQhB;AAEb,WAAK+I,MAAM/I;AAEX,WAAK05D,cAAc15D;AACnB,WAAK25D,cAAc;IACrB;IAEA5mD,MAAM3E,KAAKhE,QAAO;AAChB,YAAMhC,QAAQmzD,gBAAgBrxC,UAAUnX,MAAMi+C,MAAM,MAAM;QAAC5iD;QAAKhE;MAAM,CAAA;AACtE,UAAIhC,UAAU,GAAG;AACf,aAAKm1D,QAAQ;AACb,eAAOv9D;;AAET,aAAO6K,eAASzC,KAAAA,KAAUA,QAAQ,IAAIA,QAAQ;IAChD;IAEAw2B,sBAAsB;AACpB,YAAM,EAAC79B,KAAAA,MAAKmC,KAAAA,KAAG,IAAI,KAAKkR,UAAU,IAAI;AAEtC,WAAKrT,MAAM8J,eAAS9J,IAAAA,IAAOD,KAAKoC,IAAI,GAAGnC,IAAAA,IAAO;AAC9C,WAAKmC,MAAM2H,eAAS3H,IAAAA,IAAOpC,KAAKoC,IAAI,GAAGA,IAAAA,IAAO;AAE9C,UAAI,KAAKwE,QAAQoV,aAAa;AAC5B,aAAKygD,QAAQ;;AAKf,UAAI,KAAKA,SAAS,KAAKx8D,QAAQ,KAAKu8B,iBAAiB,CAACzyB,eAAS,KAAKuyB,QAAQ,GAAG;AAC7E,aAAKr8B,MAAMA,SAAQ07D,eAAe,KAAK17D,KAAK,CAAK07D,IAAAA,eAAe,KAAK17D,KAAK,EAAC,IAAK07D,eAAe,KAAK17D,KAAK,CAAE;;AAG7G,WAAK06D,uBAAsB;IAC7B;IAEAA,yBAAyB;AACvB,YAAM,EAACzvD,YAAYC,WAAAA,IAAc,KAAKF,cAAa;AACnD,UAAIhL,OAAM,KAAKA;AACf,UAAImC,OAAM,KAAKA;AAEf,YAAMw4D,SAASv/C,CAAAA,MAAMpb,OAAMiL,aAAajL,OAAMob;AAC9C,YAAMw/C,SAASx/C,CAAAA,MAAMjZ,OAAM+I,aAAa/I,OAAMiZ;AAE9C,UAAIpb,SAAQmC,MAAK;AACf,YAAInC,QAAO,GAAG;AACZ26D,iBAAO,CAAA;AACPC,iBAAO,EAAA;eACF;AACLD,iBAAOe,eAAe17D,MAAK,EAAC,CAAA;AAC5B46D,iBAAOc,eAAev5D,MAAK,CAAC,CAAA;;;AAGhC,UAAInC,QAAO,GAAG;AACZ26D,eAAOe,eAAev5D,MAAK,EAAC,CAAA;;AAE9B,UAAIA,QAAO,GAAG;AAEZy4D,eAAOc,eAAe17D,MAAK,CAAC,CAAA;;AAG9B,WAAKA,MAAMA;AACX,WAAKmC,MAAMA;IACb;IAEA87B,aAAa;AACX,YAAMn2B,OAAO,KAAKnB;AAElB,YAAMqyD,oBAAoB;QACxBh5D,KAAK,KAAKq8B;QACVl6B,KAAK,KAAKi6B;MACZ;AACA,YAAM3jB,QAAQsgD,cAAcC,mBAAmB,IAAI;AAInD,UAAIlxD,KAAKy5C,WAAW,SAAS;AAC3B4Z,2BAAmB1iD,OAAO,MAAM,OAAA;;AAGlC,UAAI3Q,KAAKC,SAAS;AAChB0Q,cAAM1Q,QAAO;AAEb,aAAK9H,QAAQ,KAAKkC;AAClB,aAAK6F,MAAM,KAAKhI;aACX;AACL,aAAKC,QAAQ,KAAKD;AAClB,aAAKgI,MAAM,KAAK7F;;AAGlB,aAAOsW;IACT;IAMA3E,iBAAiBzM,OAAO;AACtB,aAAOA,UAAUpI,SACb,MACAomB,cAAahe,OAAO,KAAKlI,MAAMwH,QAAQ2e,QAAQ,KAAK3e,QAAQ8R,MAAM6Q,MAAM;IAC9E;IAKA3jB,YAAY;AACV,YAAM1F,SAAQ,KAAKD;AAEnB,YAAM2F,UAAS;AAEf,WAAKgzD,cAAc8C,MAAMx7D,MAAAA;AACzB,WAAK24D,cAAc6C,MAAM,KAAKt5D,GAAG,IAAIs5D,MAAMx7D,MAAAA;IAC7C;IAEAuY,iBAAiBnR,OAAO;AACtB,UAAIA,UAAUpI,UAAaoI,UAAU,GAAG;AACtCA,gBAAQ,KAAKrH;;AAEf,UAAIqH,UAAU,QAAQ8V,MAAM9V,KAAQ,GAAA;AAClC,eAAO+L;;AAET,aAAO,KAAKgL,mBAAmB/W,UAAU,KAAKrH,MAC1C,KACCy7D,MAAMp0D,KAAAA,IAAS,KAAKsxD,eAAe,KAAKC,WAAW;IAC1D;IAEAt6C,iBAAiB8jB,OAAO;AACtB,YAAMC,UAAU,KAAKG,mBAAmBJ,KAAAA;AACxC,aAAOriC,KAAKyrB,IAAI,IAAI,KAAKmtC,cAAct2B,UAAU,KAAKu2B,WAAW;IACnE;EACF;ACzNA,WAAS6D,sBAAsB30D,MAAM;AACnC,UAAM2vB,WAAW3vB,KAAK2Q;AAEtB,QAAIgf,SAASrQ,WAAWtf,KAAKsf,SAAS;AACpC,YAAM0J,UAAUO,UAAUoG,SAASgO,eAAe;AAClD,aAAO31B,eAAe2nB,SAASkD,QAAQlD,SAASkD,KAAKrzB,MAAMtB,UAAS20B,KAAKrzB,IAAI,IAAIwpB,QAAQpU;;AAE3F,WAAO;EACT;AAEA,WAASggD,iBAAiBtuD,KAAKusB,MAAM9mB,OAAO;AAC1CA,YAAQvN,QAAQuN,KAAAA,IAASA,QAAQ;MAACA;IAAM;AACxC,WAAO;MACL8b,GAAGgtC,aAAavuD,KAAKusB,KAAKqH,QAAQnuB,KAAAA;MAClCgc,GAAGhc,MAAMjT,SAAS+5B,KAAKG;IACzB;EACF;AAEA,WAAS8hC,gBAAgBn8C,OAAO0M,KAAK7lB,MAAMtH,MAAKmC,MAAK;AACnD,QAAIse,UAAUzgB,QAAOygB,UAAUte,MAAK;AAClC,aAAO;QACLlC,OAAOktB,MAAO7lB,OAAO;QACrBU,KAAKmlB,MAAO7lB,OAAO;MACrB;IACF,WAAWmZ,QAAQzgB,QAAOygB,QAAQte,MAAK;AACrC,aAAO;QACLlC,OAAOktB,MAAM7lB;QACbU,KAAKmlB;MACP;;AAGF,WAAO;MACLltB,OAAOktB;MACPnlB,KAAKmlB,MAAM7lB;IACb;EACF;AAKA,WAASu1D,mBAAmBj1D,OAAO;AA8BjC,UAAMqT,OAAO;MACXnS,GAAGlB,MAAMa,OAAOb,MAAMonD,SAASvmD;MAC/BG,GAAGhB,MAAMW,QAAQX,MAAMonD,SAASzmD;MAChCI,GAAGf,MAAMU,MAAMV,MAAMonD,SAAS1mD;MAC9BO,GAAGjB,MAAMY,SAASZ,MAAMonD,SAASxmD;IACnC;AACA,UAAMs0D,SAASh3D,OAAOyB,OAAO,CAAA,GAAI0T,IAAAA;AACjC,UAAM4kB,aAAa,CAAA;AACnB,UAAM/O,UAAU,CAAA;AAChB,UAAMisC,aAAan1D,MAAMo1D,aAAap8D;AACtC,UAAMq8D,iBAAiBr1D,MAAMjB,QAAQ2gB;AACrC,UAAM41C,kBAAkBD,eAAeE,oBAAoBn8C,KAAK+7C,aAAa;AAE7E,aAASl8D,KAAI,GAAGA,KAAIk8D,YAAYl8D,MAAK;AACnC,YAAMiH,OAAOm1D,eAAetgC,WAAW/0B,MAAMw1D,qBAAqBv8D,EAAAA,CAAAA;AAClEiwB,cAAQjwB,EAAAA,IAAKiH,KAAKgpB;AAClB,YAAMtI,gBAAgB5gB,MAAMy1D,iBAAiBx8D,IAAG+G,MAAM01D,cAAcxsC,QAAQjwB,EAAAA,GAAIq8D,eAAAA;AAChF,YAAMK,SAAS3iC,OAAO9yB,KAAK6yB,IAAI;AAC/B,YAAMs0B,WAAWyN,iBAAiB90D,MAAMwG,KAAKmvD,QAAQ31D,MAAMo1D,aAAan8D,EAAE,CAAA;AAC1Eg/B,iBAAWh/B,EAAAA,IAAKouD;AAEhB,YAAMtuB,eAAe8X,gBAAgB7wC,MAAMogB,cAAcnnB,EAAKq8D,IAAAA,eAAAA;AAC9D,YAAMz8C,QAAQ1gB,KAAKy4B,MAAM6H,UAAUM,YAAAA,CAAAA;AACnC,YAAM68B,UAAUZ,gBAAgBn8C,OAAO+H,cAAcpgB,GAAG6mD,SAASt/B,GAAG,GAAG,GAAA;AACvE,YAAM8tC,UAAUb,gBAAgBn8C,OAAO+H,cAAcngB,GAAG4mD,SAASp/B,GAAG,IAAI,GAAA;AACxE6tC,mBAAaZ,QAAQ7hD,MAAM0lB,cAAc68B,SAASC,OAAAA;IACpD;AAEA71D,UAAM+1D,eACJ1iD,KAAKnS,IAAIg0D,OAAOh0D,GAChBg0D,OAAOl0D,IAAIqS,KAAKrS,GAChBqS,KAAKtS,IAAIm0D,OAAOn0D,GAChBm0D,OAAOj0D,IAAIoS,KAAKpS,CAAC;AAInBjB,UAAMg2D,mBAAmBC,qBAAqBj2D,OAAOi4B,YAAY/O,OAAAA;EACnE;AAEA,WAAS4sC,aAAaZ,QAAQ7hD,MAAMwF,OAAO+8C,SAASC,SAAS;AAC3D,UAAMp9C,MAAMtgB,KAAKwY,IAAIxY,KAAKsgB,IAAII,KAAAA,CAAAA;AAC9B,UAAMN,MAAMpgB,KAAKwY,IAAIxY,KAAKogB,IAAIM,KAAAA,CAAAA;AAC9B,QAAIrY,IAAI;AACR,QAAIC,KAAI;AACR,QAAIm1D,QAAQv9D,QAAQgb,KAAKnS,GAAG;AAC1BV,WAAK6S,KAAKnS,IAAI00D,QAAQv9D,SAASogB;AAC/By8C,aAAOh0D,IAAI/I,KAAKC,IAAI88D,OAAOh0D,GAAGmS,KAAKnS,IAAIV,CAAAA;IACzC,WAAWo1D,QAAQx1D,MAAMiT,KAAKrS,GAAG;AAC/BR,WAAKo1D,QAAQx1D,MAAMiT,KAAKrS,KAAKyX;AAC7By8C,aAAOl0D,IAAI7I,KAAKoC,IAAI26D,OAAOl0D,GAAGqS,KAAKrS,IAAIR,CAAAA;;AAEzC,QAAIq1D,QAAQx9D,QAAQgb,KAAKtS,GAAG;AAC1BN,MAAAA,MAAK4S,KAAKtS,IAAI80D,QAAQx9D,SAASkgB;AAC/B28C,aAAOn0D,IAAI5I,KAAKC,IAAI88D,OAAOn0D,GAAGsS,KAAKtS,IAAIN,EAAAA;IACzC,WAAWo1D,QAAQz1D,MAAMiT,KAAKpS,GAAG;AAC/BR,MAAAA,MAAKo1D,QAAQz1D,MAAMiT,KAAKpS,KAAKsX;AAC7B28C,aAAOj0D,IAAI9I,KAAKoC,IAAI26D,OAAOj0D,GAAGoS,KAAKpS,IAAIR,EAAAA;;EAE3C;AAEA,WAASy1D,qBAAqBl2D,OAAOyB,QAAO00D,UAAU;AACpD,UAAMC,gBAAgBp2D,MAAM01D;AAC5B,UAAM,EAACW,OAAOf,iBAAiBpsC,SAASxpB,KAAI,IAAIy2D;AAChD,UAAMG,qBAAqBt2D,MAAMy1D,iBAAiBh0D,QAAO20D,gBAAgBC,QAAQntC,SAASosC,eAAAA;AAC1F,UAAMz8C,QAAQ1gB,KAAKy4B,MAAM6H,UAAUoY,gBAAgBylB,mBAAmBz9C,QAAQK,OAAAA,CAAAA,CAAAA;AAC9E,UAAMzY,KAAI81D,UAAUD,mBAAmB71D,GAAGf,KAAKuoB,GAAGpP,KAAAA;AAClD,UAAMsB,YAAYq8C,qBAAqB39C,KAAAA;AACvC,UAAMhY,QAAO41D,iBAAiBH,mBAAmB91D,GAAGd,KAAKqoB,GAAG5N,SAAAA;AAC5D,WAAO;MAELyyB,SAAS;MAGTpsC,GAAG81D,mBAAmB91D;MACtBC,GAAAA;MAGA0Z;MAGAtZ,MAAAA;MACAH,KAAKD;MACLE,OAAOE,QAAOnB,KAAKqoB;MACnBnnB,QAAQH,KAAIf,KAAKuoB;IACnB;EACF;AAEA,WAASyuC,gBAAgBv9D,MAAMmT,MAAM;AACnC,QAAI,CAACA,MAAM;AACT,aAAO;;AAET,UAAM,EAACzL,MAAAA,OAAMH,KAAAA,MAAKC,OAAAA,QAAOC,QAAAA,QAAM,IAAIzH;AACnC,UAAMw9D,eAAezyC,eAAe;MAAC1jB,GAAGK;MAAMJ,GAAGC;IAAG,GAAG4L,IAAAA,KAAS4X,eAAe;MAAC1jB,GAAGK;MAAMJ,GAAGG;IAAM,GAAG0L,IAAAA,KACnG4X,eAAe;MAAC1jB,GAAGG;MAAOF,GAAGC;IAAG,GAAG4L,IAAAA,KAAS4X,eAAe;MAAC1jB,GAAGG;MAAOF,GAAGG;OAAS0L,IAAAA;AACpF,WAAO,CAACqqD;EACV;AAEA,WAASV,qBAAqBj2D,OAAOi4B,YAAY/O,SAAS;AACxD,UAAMnwB,QAAQ,CAAA;AACd,UAAMo8D,aAAan1D,MAAMo1D,aAAap8D;AACtC,UAAMkH,OAAOF,MAAMjB;AACnB,UAAM,EAACw2D,mBAAmB/1C,QAAAA,IAAWtf,KAAKwf;AAC1C,UAAMy2C,WAAW;MACfE,OAAOxB,sBAAsB30D,IAAQ,IAAA;MACrCo1D,iBAAiBC,oBAAoBn8C,KAAK+7C,aAAa;IACzD;AACA,QAAI7oD;AAEJ,aAASrT,KAAI,GAAGA,KAAIk8D,YAAYl8D,MAAK;AACnCk9D,eAASjtC,UAAUA,QAAQjwB,EAAE;AAC7Bk9D,eAASz2D,OAAOu4B,WAAWh/B,EAAE;AAE7B,YAAME,OAAO+8D,qBAAqBl2D,OAAO/G,IAAGk9D,QAAAA;AAC5Cp9D,YAAMkB,KAAKd,IAAAA;AACX,UAAIqmB,YAAY,QAAQ;AACtBrmB,aAAKyzC,UAAU8pB,gBAAgBv9D,MAAMmT,IAAAA;AACrC,YAAInT,KAAKyzC,SAAS;AAChBtgC,iBAAOnT;;;IAGb;AACA,WAAOJ;EACT;AAEA,WAASy9D,qBAAqB39C,OAAO;AACnC,QAAIA,UAAU,KAAKA,UAAU,KAAK;AAChC,aAAO;eACEA,QAAQ,KAAK;AACtB,aAAO;;AAGT,WAAO;EACT;AAEA,WAAS49C,iBAAiBj2D,GAAGunB,GAAG4J,OAAO;AACrC,QAAIA,UAAU,SAAS;AACrBnxB,WAAKunB;eACI4J,UAAU,UAAU;AAC7BnxB,WAAMunB,IAAI;;AAEZ,WAAOvnB;EACT;AAEA,WAAS+1D,UAAU91D,IAAGwnB,IAAGpP,OAAO;AAC9B,QAAIA,UAAU,MAAMA,UAAU,KAAK;AACjCpY,MAAAA,MAAMwnB,KAAI;IACZ,WAAWpP,QAAQ,OAAOA,QAAQ,IAAI;AACpCpY,MAAAA,MAAKwnB;;AAEP,WAAOxnB;EACT;AAEA,WAASm2D,kBAAkBpwD,KAAKtG,MAAM/G,MAAM;AAC1C,UAAM,EAAC0H,MAAAA,OAAMH,KAAAA,MAAKC,OAAAA,QAAOC,QAAAA,QAAM,IAAIzH;AACnC,UAAM,EAAC2kC,cAAa,IAAI59B;AAExB,QAAI,CAACmR,cAAcysB,aAAgB,GAAA;AACjC,YAAMzjB,eAAe8+B,cAAcj5C,KAAKma,YAAY;AACpD,YAAM6O,UAAUO,UAAUvpB,KAAK29B,eAAe;AAC9Cr3B,UAAIiU,YAAYqjB;AAEhB,YAAM+4B,eAAeh2D,QAAOqoB,QAAQroB;AACpC,YAAMi2D,cAAcp2D,OAAMwoB,QAAQxoB;AAClC,YAAMq2D,gBAAgBp2D,SAAQE,QAAOqoB,QAAQnU;AAC7C,YAAMiiD,iBAAiBp2D,UAASF,OAAMwoB,QAAQpU;AAE9C,UAAI5W,OAAOW,OAAOwb,YAAAA,EAAc0pB,KAAKvwB,CAAAA,MAAKA,MAAM,CAAI,GAAA;AAClDhN,YAAIk4B,UAAS;AACb6b,2BAAmB/zC,KAAK;UACtBhG,GAAGq2D;UACHp2D,GAAGq2D;UACH/uC,GAAGgvC;UACH9uC,GAAG+uC;UACH3/C,QAAQgD;QACV,CAAA;AACA7T,YAAIiB,KAAI;aACH;AACLjB,YAAI23B,SAAS04B,cAAcC,aAAaC,eAAeC,cAAAA;;;EAG7D;AAEA,WAASC,gBAAgBj3D,OAAO2rD,YAAY;AAC1C,UAAM,EAACnlD,KAAKzH,SAAS,EAAC2gB,YAAW,EAAC,IAAI1f;AAEtC,aAAS/G,KAAI0yD,aAAa,GAAG1yD,MAAK,GAAGA,MAAK;AACxC,YAAME,OAAO6G,MAAMg2D,iBAAiB/8D,EAAE;AACtC,UAAI,CAACE,KAAKyzC,SAAS;AAEjB;;AAEF,YAAMzQ,cAAczc,YAAYqV,WAAW/0B,MAAMw1D,qBAAqBv8D,EAAAA,CAAAA;AACtE29D,wBAAkBpwD,KAAK21B,aAAahjC,IAAAA;AACpC,YAAMw8D,SAAS3iC,OAAOmJ,YAAYpJ,IAAI;AACtC,YAAM,EAACvyB,GAAGC,GAAAA,IAAG0Z,UAAAA,IAAahhB;AAE1BimC,iBACE54B,KACAxG,MAAMo1D,aAAan8D,EAAE,GACrBuH,GACAC,KAAKk1D,OAAOziC,aAAa,GACzByiC,QACA;QACEx6D,OAAOghC,YAAYhhC;QACnBgf;QACA6iB,cAAc;MAChB,CAAA;IAEJ;EACF;AAEA,WAASk6B,eAAel3D,OAAOqX,QAAQoI,UAAUksC,YAAY;AAC3D,UAAM,EAACnlD,IAAG,IAAIxG;AACd,QAAIyf,UAAU;AAEZjZ,UAAI+W,IAAIvd,MAAMigB,SAASjgB,MAAMkgB,SAAS7I,QAAQ,GAAGc,GAAAA;WAC5C;AAEL,UAAIyI,gBAAgB5gB,MAAMy1D,iBAAiB,GAAGp+C,MAAAA;AAC9C7Q,UAAIm4B,OAAO/d,cAAcpgB,GAAGogB,cAAcngB,CAAC;AAE3C,eAASxH,KAAI,GAAGA,KAAI0yD,YAAY1yD,MAAK;AACnC2nB,wBAAgB5gB,MAAMy1D,iBAAiBx8D,IAAGoe,MAAAA;AAC1C7Q,YAAIo4B,OAAOhe,cAAcpgB,GAAGogB,cAAcngB,CAAC;MAC7C;;EAEJ;AAEA,WAAS02D,eAAen3D,OAAOo3D,cAAc//C,QAAQs0C,YAAYxwB,YAAY;AAC3E,UAAM30B,MAAMxG,MAAMwG;AAClB,UAAMiZ,WAAW23C,aAAa33C;AAE9B,UAAM,EAACtkB,OAAAA,QAAO+f,UAAAA,IAAak8C;AAE3B,QAAK,CAAC33C,YAAY,CAACksC,cAAe,CAACxwD,UAAS,CAAC+f,aAAa7D,SAAS,GAAG;AACpE;;AAGF7Q,QAAI03B,KAAI;AACR13B,QAAI4U,cAAcjgB;AAClBqL,QAAI0U,YAAYA;AAChB1U,QAAIi4B,YAAYtD,WAAWmB,QAAQ,CAAA,CAAE;AACrC91B,QAAIsU,iBAAiBqgB,WAAWoB;AAEhC/1B,QAAIk4B,UAAS;AACbw4B,mBAAel3D,OAAOqX,QAAQoI,UAAUksC,UAAAA;AACxCnlD,QAAIwqC,UAAS;AACbxqC,QAAIq4B,OAAM;AACVr4B,QAAI43B,QAAO;EACb;AAEA,WAASi5B,wBAAwBlyD,QAAQ1D,QAAOwK,OAAO;AACrD,WAAO7G,cAAcD,QAAQ;MAC3B8G;MACAxK,OAAAA;MACA/J,MAAM;IACR,CAAA;EACF;AAEe,MAAM4/D,oBAAN,cAAgC1E,gBAAAA;IAE7C,OAAOzvD,KAAK;IAKZ,OAAO/E,WAAW;MAChBohB,SAAS;MAGT+3C,SAAS;MACTv0C,UAAU;MAEVzD,YAAY;QACVC,SAAS;QACTtE,WAAW;QACXL,YAAY,CAAA;QACZE,kBAAkB;MACpB;MAEA9G,MAAM;QACJwL,UAAU;MACZ;MAEArH,YAAY;MAGZvH,OAAO;QAEL6sB,mBAAmB;QAEnBjG,UAAUg8B,MAAMC,WAAWC;MAC7B;MAEAj0C,aAAa;QACXoe,eAAezmC;QAGfwmC,iBAAiB;QAGjBre,SAAS;QAGTuT,MAAM;UACJrzB,MAAM;QACR;QAGA+3B,SAASxrB,OAAO;AACd,iBAAOA;QACT;QAGAid,SAAS;QAGTqsC,mBAAmB;MACrB;;IAGF,OAAOhmC,gBAAgB;MACrB,oBAAoB;MACpB,qBAAqB;MACrB,eAAe;;IAGjB,OAAO7V,cAAc;MACnB6F,YAAY;QACVixC,WAAW;MACb;;IAGFz5D,YAAY6E,KAAK;AACf,YAAMA,GAAAA;AAGN,WAAKqkB,UAAU5oB;AAEf,WAAK6oB,UAAU7oB;AAEf,WAAKq+D,cAAcr+D;AAEnB,WAAK+9D,eAAe,CAAA;AACpB,WAAKY,mBAAmB,CAAA;IAC1B;IAEAlgC,gBAAgB;AAEd,YAAM5M,UAAU,KAAKk+B,WAAW39B,UAAUorC,sBAAsB,KAAK91D,OAAO,IAAI,CAAA;AAChF,YAAMgpB,IAAI,KAAKhT,QAAQ,KAAK0H,WAAWyM,QAAQnU;AAC/C,YAAMkT,KAAI,KAAKnT,SAAS,KAAK4H,YAAYwM,QAAQpU;AACjD,WAAKmL,UAAU9nB,KAAKoE,MAAM,KAAKsE,OAAOknB,IAAI,IAAImB,QAAQroB,IAAI;AAC1D,WAAKqf,UAAU/nB,KAAKoE,MAAM,KAAKmE,MAAMunB,KAAI,IAAIiB,QAAQxoB,GAAG;AACxD,WAAKg1D,cAAcv9D,KAAKoE,MAAMpE,KAAKC,IAAI2vB,GAAGE,EAAK,IAAA,CAAA;IACjD;IAEAgO,sBAAsB;AACpB,YAAM,EAAC79B,KAAAA,MAAKmC,KAAAA,KAAG,IAAI,KAAKkR,UAAU,KAAK;AAEvC,WAAKrT,MAAM8J,eAAS9J,IAAAA,KAAQ,CAACmd,MAAMnd,IAAOA,IAAAA,OAAM;AAChD,WAAKmC,MAAM2H,eAAS3H,IAAAA,KAAQ,CAACgb,MAAMhb,IAAOA,IAAAA,OAAM;AAGhD,WAAKu4D,uBAAsB;IAC7B;IAMAO,mBAAmB;AACjB,aAAOl7D,KAAKm5B,KAAK,KAAKokC,cAAcb,sBAAsB,KAAK91D,OAAO,CAAA;IACxE;IAEAy4B,mBAAmB3mB,OAAO;AACxB+hD,sBAAgBrxC,UAAUiW,mBAAmBh/B,KAAK,MAAMqY,KAAAA;AAGxD,WAAKukD,eAAe,KAAKtqD,UAAS,EAC/BwP,IAAI,CAAC7a,OAAOgC,WAAU;AACrB,cAAMwK,QAAQs3B,SAAa,KAAKxkC,QAAQ2gB,YAAY+X,UAAU;UAACh4B;UAAOgC;QAAM,GAAE,IAAI;AAClF,eAAOwK,SAASA,UAAU,IAAIA,QAAQ;OAEvCjH,EAAAA,OAAO,CAACwO,GAAGva,OAAM,KAAK1B,MAAM+e,kBAAkBrd,EAAAA,CAAAA;IACnD;IAEA89B,MAAM;AACJ,YAAM72B,OAAO,KAAKnB;AAElB,UAAImB,KAAKsf,WAAWtf,KAAKwf,YAAYF,SAAS;AAC5Cy1C,2BAAmB,IAAI;aAClB;AACL,aAAKc,eAAe,GAAG,GAAG,GAAG,CAAA;;IAEjC;IAEAA,eAAeyB,cAAcC,eAAeC,aAAaC,gBAAgB;AACvE,WAAK13C,WAAW9nB,KAAKoE,OAAOi7D,eAAeC,iBAAiB,CAAA;AAC5D,WAAKv3C,WAAW/nB,KAAKoE,OAAOm7D,cAAcC,kBAAkB,CAAA;AAC5D,WAAKjC,eAAev9D,KAAKC,IAAI,KAAKs9D,cAAc,GAAGv9D,KAAKoC,IAAIi9D,cAAcC,eAAeC,aAAaC,cAAAA,CAAAA;IACxG;IAEAv3C,cAAc3e,QAAO;AACnB,YAAMm2D,kBAAkBz/C,OAAO,KAAKi9C,aAAap8D,UAAU;AAC3D,YAAMof,aAAa,KAAKrZ,QAAQqZ,cAAc;AAE9C,aAAOy4B,gBAAgBpvC,SAAQm2D,kBAAkB97C,UAAU1D,UAAAA,CAAAA;IAC7D;IAEAoI,8BAA8B/gB,OAAO;AACnC,UAAI4R,cAAc5R,KAAQ,GAAA;AACxB,eAAO+L;;AAIT,YAAMqsD,gBAAgB,KAAKnC,eAAe,KAAKn7D,MAAM,KAAKnC;AAC1D,UAAI,KAAK2G,QAAQoB,SAAS;AACxB,gBAAQ,KAAK5F,MAAMkF,SAASo4D;;AAE9B,cAAQp4D,QAAQ,KAAKrH,OAAOy/D;IAC9B;IAEAC,8BAA8BlzC,UAAU;AACtC,UAAIvT,cAAcuT,QAAW,GAAA;AAC3B,eAAOpZ;;AAGT,YAAMusD,iBAAiBnzC,YAAY,KAAK8wC,eAAe,KAAKn7D,MAAM,KAAKnC;AACvE,aAAO,KAAK2G,QAAQoB,UAAU,KAAK5F,MAAMw9D,iBAAiB,KAAK3/D,MAAM2/D;IACvE;IAEAvC,qBAAqB/zD,QAAO;AAC1B,YAAMie,cAAc,KAAK01C,gBAAgB,CAAA;AAEzC,UAAI3zD,UAAS,KAAKA,SAAQie,YAAY1mB,QAAQ;AAC5C,cAAMg/D,aAAat4C,YAAYje,MAAM;AACrC,eAAO41D,wBAAwB,KAAKntD,WAAU,GAAIzI,QAAOu2D,UAAAA;;IAE7D;IAEAvC,iBAAiBh0D,QAAOw2D,oBAAoB3C,kBAAkB,GAAG;AAC/D,YAAMz8C,QAAQ,KAAKuH,cAAc3e,MAAAA,IAASyX,UAAUo8C;AACpD,aAAO;QACL90D,GAAGrI,KAAKogB,IAAIM,KAAAA,IAASo/C,qBAAqB,KAAKh4C;QAC/Cxf,GAAGtI,KAAKsgB,IAAII,KAAAA,IAASo/C,qBAAqB,KAAK/3C;QAC/CrH;MACF;IACF;IAEAgI,yBAAyBpf,QAAOhC,OAAO;AACrC,aAAO,KAAKg2D,iBAAiBh0D,QAAO,KAAK+e,8BAA8B/gB,KAAAA,CAAAA;IACzE;IAEAy4D,gBAAgBz2D,QAAO;AACrB,aAAO,KAAKof,yBAAyBpf,UAAS,GAAG,KAAKo5B,aAAY,CAAA;IACpE;IAEAs9B,sBAAsB12D,QAAO;AAC3B,YAAM,EAACZ,MAAAA,OAAMH,KAAAA,MAAKC,OAAAA,QAAOC,QAAAA,QAAM,IAAI,KAAKo1D,iBAAiBv0D,MAAM;AAC/D,aAAO;QACLZ,MAAAA;QACAH,KAAAA;QACAC,OAAAA;QACAC,QAAAA;MACF;IACF;IAKAq9B,iBAAiB;AACf,YAAM,EAACvjB,iBAAiBzG,MAAM,EAACwL,SAAAA,EAAS,IAAI,KAAK1gB;AACjD,UAAI2b,iBAAiB;AACnB,cAAMlU,MAAM,KAAKA;AACjBA,YAAI03B,KAAI;AACR13B,YAAIk4B,UAAS;AACbw4B,uBAAe,MAAM,KAAK12C,8BAA8B,KAAKqyC,SAAS,GAAGpzC,UAAU,KAAK21C,aAAap8D,MAAM;AAC3GwN,YAAIwqC,UAAS;AACbxqC,YAAIiU,YAAYC;AAChBlU,YAAIiB,KAAI;AACRjB,YAAI43B,QAAO;;IAEf;IAKAC,WAAW;AACT,YAAM73B,MAAM,KAAKA;AACjB,YAAMtG,OAAO,KAAKnB;AAClB,YAAM,EAACwgB,YAAYtL,MAAMiL,OAAAA,IAAUhf;AACnC,YAAMyrD,aAAa,KAAKyJ,aAAap8D;AAErC,UAAIC,IAAG+a,SAAQgP;AAEf,UAAI9iB,KAAKwf,YAAYF,SAAS;AAC5By3C,wBAAgB,MAAMtL,UAAAA;;AAGxB,UAAI13C,KAAKuL,SAAS;AAChB,aAAK3O,MAAM9Y,QAAQ,CAACuB,MAAMmI,WAAU;AAClC,cAAIA,WAAU,KAAMA,WAAU,KAAK,KAAKrJ,MAAM,GAAI;AAChD4b,YAAAA,UAAS,KAAKwM,8BAA8BlnB,KAAKmG,KAAK;AACtD,kBAAMmN,UAAU,KAAK1C,WAAWzI,MAAAA;AAChC,kBAAM06B,cAAcloB,KAAK8gB,WAAWnoB,OAAAA;AACpC,kBAAMwvB,oBAAoBld,OAAO6V,WAAWnoB,OAAAA;AAE5CuqD,2BAAe,MAAMh7B,aAAanoB,SAAQ23C,YAAYvvB,iBAAAA;;QAE1D,CAAA;;AAGF,UAAI7c,WAAWC,SAAS;AACtBhZ,YAAI03B,KAAI;AAER,aAAKjlC,KAAI0yD,aAAa,GAAG1yD,MAAK,GAAGA,MAAK;AACpC,gBAAMkjC,cAAc5c,WAAWwV,WAAW,KAAKygC,qBAAqBv8D,EAAAA,CAAAA;AACpE,gBAAM,EAACkC,OAAAA,QAAO+f,UAAAA,IAAaihB;AAE3B,cAAI,CAACjhB,aAAa,CAAC/f,QAAO;AACxB;;AAGFqL,cAAI0U,YAAYA;AAChB1U,cAAI4U,cAAcjgB;AAElBqL,cAAIi4B,YAAYtC,YAAYthB,UAAU;AACtCrU,cAAIsU,iBAAiBqhB,YAAYphB;AAEjC/G,UAAAA,UAAS,KAAKwM,8BAA8BtgB,KAAKC,UAAU,KAAK/H,MAAM,KAAKmC,GAAG;AAC9EyoB,qBAAW,KAAKyyC,iBAAiBx8D,IAAG+a,OAAAA;AACpCxN,cAAIk4B,UAAS;AACbl4B,cAAIm4B,OAAO,KAAK1e,SAAS,KAAKC,OAAO;AACrC1Z,cAAIo4B,OAAO5b,SAASxiB,GAAGwiB,SAASviB,CAAC;AACjC+F,cAAIq4B,OAAM;QACZ;AAEAr4B,YAAI43B,QAAO;;IAEf;IAKAW,aAAa;IAAA;IAKbE,aAAa;AACX,YAAMz4B,MAAM,KAAKA;AACjB,YAAMtG,OAAO,KAAKnB;AAClB,YAAM8wB,WAAW3vB,KAAK2Q;AAEtB,UAAI,CAACgf,SAASrQ,SAAS;AACrB;;AAGF,YAAMpH,aAAa,KAAKgI,cAAc,CAAA;AACtC,UAAIpM,SAAQe;AAEZvO,UAAI03B,KAAI;AACR13B,UAAIquC,UAAU,KAAK50B,SAAS,KAAKC,OAAO;AACxC1Z,UAAI4xD,OAAOhgD,UAAAA;AACX5R,UAAI2T,YAAY;AAChB3T,UAAIw2B,eAAe;AAEnB,WAAKnsB,MAAM9Y,QAAQ,CAACuB,MAAMmI,WAAU;AAClC,YAAKA,WAAU,KAAK,KAAKrJ,OAAO,KAAM,CAAC8H,KAAKC,SAAS;AACnD;;AAGF,cAAMg8B,cAActM,SAASkF,WAAW,KAAK7qB,WAAWzI,MAAAA,CAAAA;AACxD,cAAMu4B,WAAWhH,OAAOmJ,YAAYpJ,IAAI;AACxC/e,QAAAA,UAAS,KAAKwM,8BAA8B,KAAK3P,MAAMpP,MAAM,EAAChC,KAAK;AAEnE,YAAI08B,YAAYuB,mBAAmB;AACjCl3B,cAAIusB,OAAOiH,SAASI;AACpBrlB,kBAAQvO,IAAIs9C,YAAYxqD,KAAK2S,KAAK,EAAE8I;AACpCvO,cAAIiU,YAAY0hB,YAAY2B;AAE5B,gBAAM5U,UAAUO,UAAU0S,YAAY0B,eAAe;AACrDr3B,cAAI23B,SACF,CAACppB,QAAQ,IAAImU,QAAQroB,MACrB,CAACmT,UAASgmB,SAASt6B,OAAO,IAAIwpB,QAAQxoB,KACtCqU,QAAQmU,QAAQnU,OAChBilB,SAASt6B,OAAOwpB,QAAQpU,MAAM;;AAIlCsqB,mBAAW54B,KAAKlN,KAAK2S,OAAO,GAAG,CAAC+H,SAAQgmB,UAAU;UAChD7+B,OAAOghC,YAAYhhC;UACnBkiC,aAAalB,YAAYmB;UACzBC,aAAapB,YAAYqB;QAC3B,CAAA;MACF,CAAA;AAEAh3B,UAAI43B,QAAO;IACb;IAKAkB,YAAY;IAAA;EACd;AC5pBA,MAAM+4B,YAAY;IAChBC,aAAa;MAACC,QAAQ;MAAM74D,MAAM;MAAGw0D,OAAO;IAAI;IAChDsE,QAAQ;MAACD,QAAQ;MAAM74D,MAAM;MAAMw0D,OAAO;IAAE;IAC5CuE,QAAQ;MAACF,QAAQ;MAAM74D,MAAM;MAAOw0D,OAAO;IAAE;IAC7CwE,MAAM;MAACH,QAAQ;MAAM74D,MAAM;MAASw0D,OAAO;IAAE;IAC7CyE,KAAK;MAACJ,QAAQ;MAAM74D,MAAM;MAAUw0D,OAAO;IAAE;IAC7C0E,MAAM;MAACL,QAAQ;MAAO74D,MAAM;MAAWw0D,OAAO;IAAC;IAC/C2E,OAAO;MAACN,QAAQ;MAAM74D,MAAM;MAASw0D,OAAO;IAAE;IAC9C4E,SAAS;MAACP,QAAQ;MAAO74D,MAAM;MAASw0D,OAAO;IAAC;IAChD6E,MAAM;MAACR,QAAQ;MAAM74D,MAAM;IAAQ;EACrC;AAKA,MAAMs5D,QAA6C96D,uBAAOC,KAAKk6D,SAAAA;AAM/D,WAASY,OAAO3oD,IAAGrP,IAAG;AACpB,WAAOqP,KAAIrP;EACb;AAOA,WAASmJ,MAAMpK,OAAOk5D,OAAO;AAC3B,QAAI7nD,cAAc6nD,KAAQ,GAAA;AACxB,aAAO;;AAGT,UAAMC,UAAUn5D,MAAMo5D;AACtB,UAAM,EAACC,QAAQzoC,OAAAA,QAAO0oC,WAAU,IAAIt5D,MAAMu5D;AAC1C,QAAI95D,QAAQy5D;AAEZ,QAAI,OAAOG,WAAW,YAAY;AAChC55D,cAAQ45D,OAAO55D,KAAAA;;AAIjB,QAAI,CAACyC,eAASzC,KAAQ,GAAA;AACpBA,cAAQ,OAAO45D,WAAW,WACtBF,QAAQ/uD,MAAM3K,OAAO45D,MACrBF,IAAAA,QAAQ/uD,MAAM3K,KAAM;;AAG1B,QAAIA,UAAU,MAAM;AAClB,aAAO;;AAGT,QAAImxB,QAAO;AACTnxB,cAAQmxB,WAAU,WAAW/R,SAASy6C,UAAeA,KAAAA,eAAe,QAChEH,QAAQv3C,QAAQniB,OAAO,WAAW65D,UAAAA,IAClCH,QAAQv3C,QAAQniB,OAAOmxB,MAAM;;AAGnC,WAAO,CAACnxB;EACV;AAUA,WAAS+5D,0BAA0BC,SAASrhE,MAAKmC,MAAKm/D,UAAU;AAC9D,UAAMl4D,OAAOw3D,MAAMhgE;AAEnB,aAASC,KAAI+/D,MAAMxjD,QAAQikD,OAAAA,GAAUxgE,KAAIuI,OAAO,GAAG,EAAEvI,IAAG;AACtD,YAAM0gE,WAAWtB,UAAUW,MAAM//D,EAAAA,CAAE;AACnC,YAAMiC,SAASy+D,SAASzF,QAAQyF,SAASzF,QAAQ3wD,OAAOq2D;AAExD,UAAID,SAASpB,UAAUpgE,KAAKm5B,MAAM/2B,OAAMnC,SAAQ8C,SAASy+D,SAASj6D,KAAG,KAAOg6D,UAAU;AACpF,eAAOV,MAAM//D,EAAE;;IAEnB;AAEA,WAAO+/D,MAAMx3D,OAAO,CAAE;EACxB;AAWA,WAASq4D,2BAA2B75D,OAAO23B,UAAU8hC,SAASrhE,MAAKmC,MAAK;AACtE,aAAStB,KAAI+/D,MAAMhgE,SAAS,GAAGC,MAAK+/D,MAAMxjD,QAAQikD,OAAAA,GAAUxgE,MAAK;AAC/D,YAAM04D,OAAOqH,MAAM//D,EAAE;AACrB,UAAIo/D,UAAU1G,IAAK,EAAC4G,UAAUv4D,MAAMo5D,SAASz3C,KAAKpnB,MAAKnC,MAAKu5D,IAAAA,KAASh6B,WAAW,GAAG;AACjF,eAAOg6B;;IAEX;AAEA,WAAOqH,MAAMS,UAAUT,MAAMxjD,QAAQikD,OAAAA,IAAW,CAAC;EACnD;AAMA,WAASK,mBAAmBnI,MAAM;AAChC,aAAS14D,KAAI+/D,MAAMxjD,QAAQm8C,IAAQ,IAAA,GAAGnwD,OAAOw3D,MAAMhgE,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AACxE,UAAIo/D,UAAUW,MAAM//D,EAAAA,CAAE,EAAEs/D,QAAQ;AAC9B,eAAOS,MAAM//D,EAAE;;IAEnB;EACF;AAOA,WAAS8gE,QAAQlpD,OAAOmpD,MAAMC,YAAY;AACxC,QAAI,CAACA,YAAY;AACfppD,YAAMmpD,IAAK,IAAG;eACLC,WAAWjhE,QAAQ;AAC5B,YAAM,EAACypB,IAAIG,GAAAA,IAAMs3C,QAAQD,YAAYD,IAAAA;AACrC,YAAMG,YAAYF,WAAWx3C,EAAAA,KAAOu3C,OAAOC,WAAWx3C,EAAG,IAAGw3C,WAAWr3C,EAAG;AAC1E/R,YAAMspD,SAAU,IAAG;;EAEvB;AASA,WAASC,cAAcp6D,OAAO6Q,OAAOyJ,MAAK+/C,WAAW;AACnD,UAAMlB,UAAUn5D,MAAMo5D;AACtB,UAAM7oC,SAAQ,CAAC4oC,QAAQv3C,QAAQ/Q,MAAM,CAAA,EAAGpR,OAAO46D,SAAAA;AAC/C,UAAMplD,OAAOpE,MAAMA,MAAM7X,SAAS,CAAA,EAAGyG;AACrC,QAAI0wB,OAAO1uB;AAEX,SAAK0uB,QAAQI,QAAOJ,SAASlb,MAAMkb,QAAQ,CAACgpC,QAAQj/D,IAAIi2B,OAAO,GAAGkqC,SAAY,GAAA;AAC5E54D,MAAAA,SAAQ6Y,KAAI6V,KAAM;AAClB,UAAI1uB,UAAS,GAAG;AACdoP,cAAMpP,MAAAA,EAAO0uB,QAAQ;;IAEzB;AACA,WAAOtf;EACT;AAQA,WAASypD,oBAAoBt6D,OAAOnB,QAAQw7D,WAAW;AACrD,UAAMxpD,QAAQ,CAAA;AAEd,UAAMyJ,OAAM,CAAA;AACZ,UAAM9Y,OAAO3C,OAAO7F;AACpB,QAAIC,IAAGwG;AAEP,SAAKxG,KAAI,GAAGA,KAAIuI,MAAM,EAAEvI,IAAG;AACzBwG,cAAQZ,OAAO5F,EAAE;AACjBqhB,MAAAA,KAAI7a,KAAAA,IAASxG;AAEb4X,YAAM5W,KAAK;QACTwF;QACA0wB,OAAO;MACT,CAAA;IACF;AAIA,WAAQ3uB,SAAS,KAAK,CAAC64D,YAAaxpD,QAAQupD,cAAcp6D,OAAO6Q,OAAOyJ,MAAK+/C,SAAU;EACzF;AAEe,MAAME,YAAN,cAAwB3mC,MAAAA;IAErC,OAAOzwB,KAAK;IAKZ,OAAO/E,WAAW;MAQhBu7C,QAAQ;MAER6gB,UAAU,CAAA;MACVR,MAAM;QACJX,QAAQ;QACR1H,MAAM;QACN/gC,OAAO;QACP0oC,YAAY;QACZG,SAAS;QACTgB,gBAAgB,CAAA;MAClB;MACA5pD,OAAO;QASL+lB,QAAQ;QAERa,UAAU;QAEVtH,OAAO;UACLC,SAAS;QACX;MACF;;IAMFr5B,YAAYwI,OAAO;AACjB,YAAMA,KAAAA;AAGN,WAAKyQ,SAAS;QACZ3N,MAAM,CAAA;QACNwI,QAAQ,CAAA;QACR/K,KAAK,CAAA;MACP;AAGA,WAAK46D,QAAQ;AAEb,WAAKC,aAAatjE;AAClB,WAAKujE,WAAW,CAAA;AAChB,WAAKC,cAAc;AACnB,WAAKtB,aAAaliE;IACpB;IAEAmqB,KAAKsqB,WAAW5rC,OAAO,CAAA,GAAI;AACzB,YAAM85D,OAAOluB,UAAUkuB,SAASluB,UAAUkuB,OAAO,CAAA;AAEjD,YAAMb,UAAU,KAAKC,WAAW,IAAIoB,SAAS14C,MAAMgqB,UAAU0uB,SAAS/iE,IAAI;AAE1E0hE,cAAQ33C,KAAKthB,IAAAA;AAMb6lC,cAAQi0B,KAAKS,gBAAgBtB,QAAQ13C,QAAO,CAAA;AAE5C,WAAK83C,aAAa;QAChBF,QAAQW,KAAKX;QACbzoC,OAAOopC,KAAKppC;QACZ0oC,YAAYU,KAAKV;MACnB;AAEA,YAAM93C,KAAKsqB,SAAAA;AAEX,WAAK+uB,cAAc36D,KAAK46D;IAC1B;IAOA1wD,MAAM3E,KAAKhE,QAAO;AAChB,UAAIgE,QAAQpO,QAAW;AACrB,eAAO;;AAET,aAAO+S,MAAM,MAAM3E,GAAAA;IACrB;IAEAokB,eAAe;AACb,YAAMA,aAAY;AAClB,WAAK7Z,SAAS;QACZ3N,MAAM,CAAA;QACNwI,QAAQ,CAAA;QACR/K,KAAK,CAAA;MACP;IACF;IAEAm2B,sBAAsB;AACpB,YAAMl3B,UAAU,KAAKA;AACrB,YAAMo6D,UAAU,KAAKC;AACrB,YAAMzH,OAAO5yD,QAAQi7D,KAAKrI,QAAQ;AAElC,UAAI,EAACv5D,KAAAA,MAAKmC,KAAAA,MAAK8I,YAAYC,WAAAA,IAAc,KAAKF,cAAa;AAK3D,eAAS23D,aAAaphB,QAAQ;AAC5B,YAAI,CAACt2C,cAAc,CAACkS,MAAMokC,OAAOvhD,GAAG,GAAG;AACrCA,UAAAA,OAAMD,KAAKC,IAAIA,MAAKuhD,OAAOvhD,GAAG;;AAEhC,YAAI,CAACkL,cAAc,CAACiS,MAAMokC,OAAOp/C,GAAG,GAAG;AACrCA,UAAAA,OAAMpC,KAAKoC,IAAIA,MAAKo/C,OAAOp/C,GAAG;;MAElC;AAGA,UAAI,CAAC8I,cAAc,CAACC,YAAY;AAE9By3D,qBAAa,KAAKC,gBAAe,CAAA;AAIjC,YAAIj8D,QAAQ46C,WAAW,WAAW56C,QAAQ8R,MAAM+lB,WAAW,UAAU;AACnEmkC,uBAAa,KAAKtvD,UAAU,KAAK,CAAA;;;AAIrCrT,MAAAA,OAAM8J,eAAS9J,IAAAA,KAAQ,CAACmd,MAAMnd,IAAOA,IAAAA,OAAM,CAAC+gE,QAAQv3C,QAAQjpB,KAAKC,IAAG,GAAI+4D,IAAK;AAC7Ep3D,MAAAA,OAAM2H,eAAS3H,IAAAA,KAAQ,CAACgb,MAAMhb,IAAAA,IAAOA,OAAM,CAAC4+D,QAAQt3C,MAAMlpB,KAAKC,IAAG,GAAI+4D,IAAAA,IAAQ;AAG9E,WAAKv5D,MAAMD,KAAKC,IAAIA,MAAKmC,OAAM,CAAA;AAC/B,WAAKA,MAAMpC,KAAKoC,IAAInC,OAAM,GAAGmC,IAAAA;IAC/B;IAKAygE,kBAAkB;AAChB,YAAM/rD,MAAM,KAAKgsD,mBAAkB;AACnC,UAAI7iE,OAAMmL,OAAOE;AACjB,UAAIlJ,OAAMgJ,OAAOC;AAEjB,UAAIyL,IAAIjW,QAAQ;AACdZ,QAAAA,OAAM6W,IAAI,CAAE;AACZ1U,QAAAA,OAAM0U,IAAIA,IAAIjW,SAAS,CAAE;;AAE3B,aAAO;QAACZ,KAAAA;QAAKmC,KAAAA;MAAG;IAClB;IAKA87B,aAAa;AACX,YAAMt3B,UAAU,KAAKA;AACrB,YAAMm8D,WAAWn8D,QAAQi7D;AACzB,YAAMnqC,WAAW9wB,QAAQ8R;AACzB,YAAMopD,aAAapqC,SAAS+G,WAAW,WAAW,KAAKqkC,mBAAkB,IAAK,KAAKE,UAAS;AAE5F,UAAIp8D,QAAQ46C,WAAW,WAAWsgB,WAAWjhE,QAAQ;AACnD,aAAKZ,MAAM,KAAKq8B,YAAYwlC,WAAW,CAAE;AACzC,aAAK1/D,MAAM,KAAKi6B,YAAYylC,WAAWA,WAAWjhE,SAAS,CAAE;;AAG/D,YAAMZ,OAAM,KAAKA;AACjB,YAAMmC,OAAM,KAAKA;AAEjB,YAAMsW,QAAQuqD,eAAenB,YAAY7hE,MAAKmC,IAAAA;AAK9C,WAAKmgE,QAAQQ,SAASvJ,SAAS9hC,SAASD,WACpC4pC,0BAA0B0B,SAASzB,SAAS,KAAKrhE,KAAK,KAAKmC,KAAK,KAAK8gE,kBAAkBjjE,IACvFyhE,CAAAA,IAAAA,2BAA2B,MAAMhpD,MAAM7X,QAAQkiE,SAASzB,SAAS,KAAKrhE,KAAK,KAAKmC,GAAG;AACvF,WAAKogE,aAAa,CAAC9qC,SAASM,MAAMC,WAAW,KAAKsqC,UAAU,SAASrjE,SACjEyiE,mBAAmB,KAAKY,KAAK;AACjC,WAAKY,YAAYrB,UAAAA;AAEjB,UAAIl7D,QAAQoB,SAAS;AACnB0Q,cAAM1Q,QAAO;;AAGf,aAAOm6D,oBAAoB,MAAMzpD,OAAO,KAAK8pD,UAAU;IACzD;IAEA9jC,gBAAgB;AAGd,UAAI,KAAK93B,QAAQw8D,qBAAqB;AACpC,aAAKD,YAAY,KAAKzqD,MAAMyJ,IAAIhhB,CAAAA,SAAQ,CAACA,KAAKmG,KAAK,CAAA;;IAEvD;IAUA67D,YAAYrB,aAAa,CAAA,GAAI;AAC3B,UAAI5hE,SAAQ;AACZ,UAAI+H,OAAM;AACV,UAAImwB,QAAOtb;AAEX,UAAI,KAAKlW,QAAQiV,UAAUimD,WAAWjhE,QAAQ;AAC5Cu3B,QAAAA,SAAQ,KAAKirC,mBAAmBvB,WAAW,CAAE,CAAA;AAC7C,YAAIA,WAAWjhE,WAAW,GAAG;AAC3BX,UAAAA,SAAQ,IAAIk4B;eACP;AACLl4B,UAAAA,UAAS,KAAKmjE,mBAAmBvB,WAAW,CAAA,CAAE,IAAI1pC,UAAS;;AAE7Dtb,eAAO,KAAKumD,mBAAmBvB,WAAWA,WAAWjhE,SAAS,CAAE,CAAA;AAChE,YAAIihE,WAAWjhE,WAAW,GAAG;AAC3BoH,UAAAA,OAAM6U;eACD;AACL7U,UAAAA,QAAO6U,OAAO,KAAKumD,mBAAmBvB,WAAWA,WAAWjhE,SAAS,CAAA,CAAE,KAAK;;;AAGhF,YAAMijC,QAAQg+B,WAAWjhE,SAAS,IAAI,MAAM;AAC5CX,MAAAA,SAAQkgC,YAAYlgC,QAAO,GAAG4jC,KAAAA;AAC9B77B,MAAAA,OAAMm4B,YAAYn4B,MAAK,GAAG67B,KAAAA;AAE1B,WAAK2+B,WAAW;QAACviE,OAAAA;QAAO+H,KAAAA;QAAKlF,QAAQ,KAAK7C,SAAQ,IAAI+H;MAAI;IAC5D;IASA+6D,YAAY;AACV,YAAMhC,UAAU,KAAKC;AACrB,YAAMhhE,OAAM,KAAKA;AACjB,YAAMmC,OAAM,KAAKA;AACjB,YAAMwE,UAAU,KAAKA;AACrB,YAAMm8D,WAAWn8D,QAAQi7D;AAEzB,YAAMyB,QAAQP,SAASvJ,QAAQ6H,0BAA0B0B,SAASzB,SAASrhE,MAAKmC,MAAK,KAAK8gE,kBAAkBjjE,IAAAA,CAAAA;AAC5G,YAAMg7D,WAAWlrD,eAAenJ,QAAQ8R,MAAMuiD,UAAU,CAAA;AACxD,YAAMsI,UAAUD,UAAU,SAASP,SAAS5B,aAAa;AACzD,YAAMqC,aAAa98C,SAAS68C,OAAYA,KAAAA,YAAY;AACpD,YAAM7qD,QAAQ,CAAA;AACd,UAAI0f,SAAQn4B;AACZ,UAAI4hE,MAAM3vD;AAGV,UAAIsxD,YAAY;AACdprC,QAAAA,SAAQ,CAAC4oC,QAAQv3C,QAAQ2O,QAAO,WAAWmrC,OAAAA;;AAI7CnrC,MAAAA,SAAQ,CAAC4oC,QAAQv3C,QAAQ2O,QAAOorC,aAAa,QAAQF,KAAK;AAG1D,UAAItC,QAAQx3C,KAAKpnB,MAAKnC,MAAKqjE,KAAAA,IAAS,MAASrI,UAAU;AACrD,cAAM,IAAIjyC,MAAM/oB,OAAM,UAAUmC,OAAM,yCAAyC64D,WAAW,MAAMqI,KAAO;;AAGzG,YAAMxB,aAAal7D,QAAQ8R,MAAM+lB,WAAW,UAAU,KAAKglC,kBAAiB;AAC5E,WAAK5B,OAAOzpC,QAAOlmB,QAAQ,GAAG2vD,OAAOz/D,MAAKy/D,OAAO,CAACb,QAAQj/D,IAAI8/D,MAAM5G,UAAUqI,KAAAA,GAAQpxD,SAAS;AAC7F0vD,gBAAQlpD,OAAOmpD,MAAMC,UAAAA;MACvB;AAEA,UAAID,SAASz/D,QAAOwE,QAAQ46C,WAAW,WAAWtvC,UAAU,GAAG;AAC7D0vD,gBAAQlpD,OAAOmpD,MAAMC,UAAAA;;AAIvB,aAAO/7D,OAAOC,KAAK0S,KAAOR,EAAAA,KAAK4oD,MAAAA,EAAQ3+C,IAAI9Z,CAAAA,MAAK,CAACA,CAAAA;IACnD;IAMA0L,iBAAiBzM,OAAO;AACtB,YAAM05D,UAAU,KAAKC;AACrB,YAAM8B,WAAW,KAAKn8D,QAAQi7D;AAE9B,UAAIkB,SAASW,eAAe;AAC1B,eAAO1C,QAAQz3C,OAAOjiB,OAAOy7D,SAASW,aAAa;;AAErD,aAAO1C,QAAQz3C,OAAOjiB,OAAOy7D,SAAST,eAAeqB,QAAQ;IAC/D;IAOAp6C,OAAOjiB,OAAOiiB,QAAQ;AACpB,YAAM3iB,UAAU,KAAKA;AACrB,YAAM0iB,UAAU1iB,QAAQi7D,KAAKS;AAC7B,YAAM9I,OAAO,KAAK+I;AAClB,YAAMqB,MAAMr6C,UAAUD,QAAQkwC,IAAK;AACnC,aAAO,KAAKyH,SAAS13C,OAAOjiB,OAAOs8D,GAAAA;IACrC;IAWAC,oBAAoBhC,MAAMv4D,QAAOoP,OAAO6Q,QAAQ;AAC9C,YAAM3iB,UAAU,KAAKA;AACrB,YAAMk9D,YAAYl9D,QAAQ8R,MAAM4mB;AAEhC,UAAIwkC,WAAW;AACb,eAAOzjE,SAAKyjE,WAAW;UAACjC;UAAMv4D;UAAOoP;QAAM,GAAE,IAAI;;AAGnD,YAAM4Q,UAAU1iB,QAAQi7D,KAAKS;AAC7B,YAAM9I,OAAO,KAAK+I;AAClB,YAAML,YAAY,KAAKM;AACvB,YAAMuB,cAAcvK,QAAQlwC,QAAQkwC,IAAK;AACzC,YAAMwK,cAAc9B,aAAa54C,QAAQ44C,SAAU;AACnD,YAAM/gE,OAAOuX,MAAMpP,MAAM;AACzB,YAAM0uB,QAAQkqC,aAAa8B,eAAe7iE,QAAQA,KAAK62B;AAEvD,aAAO,KAAKipC,SAAS13C,OAAOs4C,MAAMt4C,WAAWyO,QAAQgsC,cAAcD,YAAU;IAC/E;IAKA1kC,mBAAmB3mB,OAAO;AACxB,UAAI5X,IAAGuI,MAAMlI;AAEb,WAAKL,KAAI,GAAGuI,OAAOqP,MAAM7X,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AAC9CK,eAAOuX,MAAM5X,EAAE;AACfK,aAAK2S,QAAQ,KAAK+vD,oBAAoB1iE,KAAKmG,OAAOxG,IAAG4X,KAAAA;MACvD;IACF;IAMA2qD,mBAAmB/7D,OAAO;AACxB,aAAOA,UAAU,OAAO+L,OAAO/L,QAAQ,KAAKrH,QAAQ,KAAKmC,MAAM,KAAKnC;IACtE;IAMAwY,iBAAiBnR,OAAO;AACtB,YAAM28D,UAAU,KAAKxB;AACrB,YAAMr1C,MAAM,KAAKi2C,mBAAmB/7D,KAAAA;AACpC,aAAO,KAAK+W,oBAAoB4lD,QAAQ/jE,QAAQktB,OAAO62C,QAAQlhE,MAAM;IACvE;IAMAwb,iBAAiB8jB,OAAO;AACtB,YAAM4hC,UAAU,KAAKxB;AACrB,YAAMr1C,MAAM,KAAKqV,mBAAmBJ,KAAAA,IAAS4hC,QAAQlhE,SAASkhE,QAAQh8D;AACtE,aAAO,KAAKhI,MAAMmtB,OAAO,KAAKhrB,MAAM,KAAKnC;IAC3C;IAOAikE,cAAcpwD,OAAO;AACnB,YAAMqwD,YAAY,KAAKv9D,QAAQ8R;AAC/B,YAAM0rD,iBAAiB,KAAK/1D,IAAIs9C,YAAY73C,KAAAA,EAAO8I;AACnD,YAAM8D,QAAQiD,UAAU,KAAKpJ,aAAY,IAAK4pD,UAAUzkC,cAAcykC,UAAU1kC,WAAW;AAC3F,YAAM4kC,cAAcrkE,KAAKogB,IAAIM,KAAAA;AAC7B,YAAM4jD,cAActkE,KAAKsgB,IAAII,KAAAA;AAC7B,YAAM6jD,eAAe,KAAKviC,wBAAwB,CAAA,EAAGz6B;AAErD,aAAO;QACLqoB,GAAIw0C,iBAAiBC,cAAgBE,eAAeD;QACpDx0C,GAAIs0C,iBAAiBE,cAAgBC,eAAeF;MACtD;IACF;IAOAnB,kBAAkBsB,aAAa;AAC7B,YAAMzB,WAAW,KAAKn8D,QAAQi7D;AAC9B,YAAMS,iBAAiBS,SAAST;AAGhC,YAAM/4C,SAAS+4C,eAAeS,SAASvJ,IAAI,KAAK8I,eAAenC;AAC/D,YAAMsE,eAAe,KAAKZ,oBAAoBW,aAAa,GAAGrC,oBAAoB,MAAM;QAACqC;SAAc,KAAKhC,UAAU,GAAGj5C,MAAAA;AACzH,YAAMhiB,OAAO,KAAK28D,cAAcO,YAAAA;AAGhC,YAAMlD,WAAWvhE,KAAKoE,MAAM,KAAKmW,aAAY,IAAK,KAAKqC,QAAQrV,KAAKqoB,IAAI,KAAKjT,SAASpV,KAAKuoB,CAAC,IAAI;AAChG,aAAOyxC,WAAW,IAAIA,WAAW;IACnC;IAKAkC,oBAAoB;AAClB,UAAI3B,aAAa,KAAKjqD,OAAO3N,QAAQ,CAAA;AACrC,UAAIpJ,IAAGuI;AAEP,UAAIy4D,WAAWjhE,QAAQ;AACrB,eAAOihE;;AAGT,YAAM9kC,QAAQ,KAAKlxB,wBAAuB;AAE1C,UAAI,KAAK42D,eAAe1lC,MAAMn8B,QAAQ;AACpC,eAAQ,KAAKgX,OAAO3N,OAAO8yB,MAAM,CAAA,EAAGhxB,WAAW2H,mBAAmB,IAAI;;AAGxE,WAAK7S,KAAI,GAAGuI,OAAO2zB,MAAMn8B,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AAC9CghE,qBAAaA,WAAW9pD,OAAOglB,MAAMl8B,EAAE,EAACkL,WAAW2H,mBAAmB,IAAI,CAAA;MAC5E;AAEA,aAAQ,KAAKkE,OAAO3N,OAAO,KAAKw6D,UAAU5C,UAAAA;IAC5C;IAKAgB,qBAAqB;AACnB,YAAMhB,aAAa,KAAKjqD,OAAOnF,UAAU,CAAA;AACzC,UAAI5R,IAAGuI;AAEP,UAAIy4D,WAAWjhE,QAAQ;AACrB,eAAOihE;;AAGT,YAAMpvD,SAAS,KAAKC,UAAS;AAC7B,WAAK7R,KAAI,GAAGuI,OAAOqJ,OAAO7R,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AAC/CghE,mBAAWhgE,KAAKmQ,MAAM,MAAMS,OAAO5R,EAAE,CAAA,CAAA;MACvC;AAEA,aAAQ,KAAK+W,OAAOnF,SAAS,KAAKgwD,cAAcZ,aAAa,KAAK4C,UAAU5C,UAAW;IACzF;IAMA4C,UAAUh+D,QAAQ;AAEhB,aAAOuR,aAAavR,OAAOwR,KAAK4oD,MAAAA,CAAAA;IAClC;EACF;ACvpBA,WAASlhB,aAAY+kB,OAAOxnD,KAAKnV,SAAS;AACxC,QAAIsiB,KAAK;AACT,QAAIG,KAAKk6C,MAAM9jE,SAAS;AACxB,QAAI+jE,YAAYC,YAAYC,YAAYC;AACxC,QAAI/8D,SAAS;AACX,UAAImV,OAAOwnD,MAAMr6C,EAAAA,EAAI8C,OAAOjQ,OAAOwnD,MAAMl6C,EAAG,EAAC2C,KAAK;AAC/C,SAAA,EAAC9C,IAAIG,GAAAA,IAAMP,aAAay6C,OAAO,OAAOxnD,GAAG;;AAE3C,OAAA,EAACiQ,KAAKw3C,YAAY/C,MAAMiD,WAAU,IAAIH,MAAMr6C,EAAAA;AAC5C,OAAA,EAAC8C,KAAKy3C,YAAYhD,MAAMkD,WAAU,IAAIJ,MAAMl6C,EAAAA;WACxC;AACL,UAAItN,OAAOwnD,MAAMr6C,EAAAA,EAAIu3C,QAAQ1kD,OAAOwnD,MAAMl6C,EAAG,EAACo3C,MAAM;AACjD,SAAA,EAACv3C,IAAIG,GAAAA,IAAMP,aAAay6C,OAAO,QAAQxnD,GAAG;;AAE5C,OAAA,EAAC0kD,MAAM+C,YAAYx3C,KAAK03C,WAAU,IAAIH,MAAMr6C,EAAAA;AAC5C,OAAA,EAACu3C,MAAMgD,YAAYz3C,KAAK23C,WAAU,IAAIJ,MAAMl6C,EAAAA;;AAG/C,UAAMu6C,OAAOH,aAAaD;AAC1B,WAAOI,OAAOF,cAAcC,aAAaD,eAAe3nD,MAAMynD,cAAcI,OAAOF;EACrF;AAEA,MAAMG,kBAAN,cAA8B7C,UAAAA;IAE5B,OAAOp3D,KAAK;IAKZ,OAAO/E,WAAWm8D,UAAUn8D;IAK5BrH,YAAYwI,OAAO;AACjB,YAAMA,KAAAA;AAGN,WAAK89D,SAAS,CAAA;AAEd,WAAKC,UAAUjmE;AAEf,WAAKkmE,cAAclmE;IACrB;IAKAikE,cAAc;AACZ,YAAMrB,aAAa,KAAKuD,uBAAsB;AAC9C,YAAMV,QAAQ,KAAKO,SAAS,KAAKI,iBAAiBxD,UAAAA;AAClD,WAAKqD,UAAUvlB,aAAY+kB,OAAO,KAAK1kE,GAAG;AAC1C,WAAKmlE,cAAcxlB,aAAY+kB,OAAO,KAAKviE,GAAG,IAAI,KAAK+iE;AACvD,YAAMhC,YAAYrB,UAAAA;IACpB;IAaAwD,iBAAiBxD,YAAY;AAC3B,YAAM,EAAC7hE,KAAAA,MAAKmC,KAAAA,KAAG,IAAI;AACnB,YAAMxB,QAAQ,CAAA;AACd,YAAM+jE,QAAQ,CAAA;AACd,UAAI7jE,IAAGuI,MAAMgJ,MAAMiG,MAAMkB;AAEzB,WAAK1Y,KAAI,GAAGuI,OAAOy4D,WAAWjhE,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AACnDwX,eAAOwpD,WAAWhhE,EAAE;AACpB,YAAIwX,QAAQrY,QAAOqY,QAAQlW,MAAK;AAC9BxB,gBAAMkB,KAAKwW,IAAAA;;MAEf;AAEA,UAAI1X,MAAMC,SAAS,GAAG;AAEpB,eAAO;UACL;YAACghE,MAAM5hE;YAAKmtB,KAAK;UAAC;UAClB;YAACy0C,MAAMz/D;YAAKgrB,KAAK;UAAC;QACnB;;AAGH,WAAKtsB,KAAI,GAAGuI,OAAOzI,MAAMC,QAAQC,KAAIuI,MAAM,EAAEvI,IAAG;AAC9C0Y,eAAO5Y,MAAME,KAAI,CAAE;AACnBuR,eAAOzR,MAAME,KAAI,CAAE;AACnBwX,eAAO1X,MAAME,EAAE;AAGf,YAAId,KAAKy4B,OAAOjf,OAAOnH,QAAQ,CAAA,MAAOiG,MAAM;AAC1CqsD,gBAAM7iE,KAAK;YAAC+/D,MAAMvpD;YAAM8U,KAAKtsB,MAAKuI,OAAO;UAAE,CAAA;;MAE/C;AACA,aAAOs7D;IACT;IAQA3B,YAAY;AACV,YAAM/iE,OAAM,KAAKA;AACjB,YAAMmC,OAAM,KAAKA;AACjB,UAAI0/D,aAAa,MAAM2B,kBAAiB;AACxC,UAAI,CAAC3B,WAAW9zC,SAAS/tB,IAAAA,KAAQ,CAAC6hE,WAAWjhE,QAAQ;AACnDihE,mBAAW7qD,OAAO,GAAG,GAAGhX,IAAAA;;AAE1B,UAAI,CAAC6hE,WAAW9zC,SAAS5rB,IAAAA,KAAQ0/D,WAAWjhE,WAAW,GAAG;AACxDihE,mBAAWhgE,KAAKM,IAAAA;;AAElB,aAAO0/D,WAAW5pD,KAAK,CAACC,IAAGrP,OAAMqP,KAAIrP,EAAAA;IACvC;IAOAu8D,yBAAyB;AACvB,UAAIvD,aAAa,KAAKjqD,OAAOlQ,OAAO,CAAA;AAEpC,UAAIm6D,WAAWjhE,QAAQ;AACrB,eAAOihE;;AAGT,YAAM53D,OAAO,KAAKu5D,kBAAiB;AACnC,YAAM3vD,QAAQ,KAAKgvD,mBAAkB;AACrC,UAAI54D,KAAKrJ,UAAUiT,MAAMjT,QAAQ;AAG/BihE,qBAAa,KAAK4C,UAAUx6D,KAAK8N,OAAOlE,KAAAA,CAAAA;aACnC;AACLguD,qBAAa53D,KAAKrJ,SAASqJ,OAAO4J;;AAEpCguD,mBAAa,KAAKjqD,OAAOlQ,MAAMm6D;AAE/B,aAAOA;IACT;IAMAuB,mBAAmB/7D,OAAO;AACxB,cAAQs4C,aAAY,KAAKslB,QAAQ59D,KAAS,IAAA,KAAK69D,WAAW,KAAKC;IACjE;IAMA7mD,iBAAiB8jB,OAAO;AACtB,YAAM4hC,UAAU,KAAKxB;AACrB,YAAMngC,UAAU,KAAKG,mBAAmBJ,KAAAA,IAAS4hC,QAAQlhE,SAASkhE,QAAQh8D;AAC1E,aAAO23C,aAAY,KAAKslB,QAAQ5iC,UAAU,KAAK8iC,cAAc,KAAKD,SAAS,IAAI;IACjF;EACF;;;;;;;;;;MC3JaI,gBAAgB;IAC3Bl8B;IACAn1B;IACA0N;IACAhV;;;;ACrBF,QAAM,SAAS,GAAG,aAAa;AAG/B,MAAO,eAAQ;;;ACDf,MAAO,uCAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,UAAU,CAAE,+BAAgC;AAAA,IAEnD,UAAU;AACR;AAAA,QAAM;AAAA,QACA,EAAE,QAAQ,OAAO,SAAS,EAAE,gBAAgB,iCAAgC,EAAE;AAAA,MAAC,EAClF,KAAK,cAAY,SAAS,KAAK,CAAC,EAChC,KAAK,kBAAgB;AACpB,aAAK,gBAAgB,KAAK;AAAA,UACxB,KAAK;AAAA,UACL;AAAA,UACA,CAAC,eAAe;AAAA,QAClB;AAAA,MACF,CAAC,EACA,MAAM,SAAO;AAAA,MAAC,CAAC;AAAA,IACpB;AAAA,IAEA,WAAW,QAAQ,MAAM,QAAQ;AAC/B,aAAO,IAAI;AAAA,QACT;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,QAAQ,KAAK,IAAI,SAAO,IAAI,OAAO;AAAA,YACnC,UAAU;AAAA,cACR;AAAA,gBACE,OAAO,OAAO,CAAC;AAAA,gBACf;AAAA,gBACA,SAAS;AAAA,kBACP,UAAU;AAAA,kBACV,UAAU;AAAA,gBACZ;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA,aAAa;AAAA,YACX,MAAM;AAAA,YACN,MAAM;AAAA,YACN,WAAW;AAAA,UACb;AAAA,UACA,SAAS;AAAA,YACP,QAAQ,KAAK;AAAA,UACf;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;;;AChDA,mBAA4B;AAC5B,2BAAwB;AAGxB,MAAO,+BAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,UAAU;AAAA,MACf;AAAA,MAAwB;AAAA,MACxB;AAAA,MAAyB;AAAA,MAAuB;AAAA,MAChD;AAAA,MAAwB;AAAA,MAAsB;AAAA,MAC9C;AAAA,MAA6B;AAAA,MAA2B;AAAA,MACxD;AAAA,MAAkC;AAAA,MAAgC;AAAA,MAClE;AAAA,MAAuC;AAAA,MAAqC;AAAA,MAC5E;AAAA,MAA8B;AAAA,MAC9B;AAAA,MAAoC;AAAA,MACpC;AAAA,MAAoC;AAAA,MACpC;AAAA,MAA0C;AAAA,IAC5C;AAAA,IAEA,oBAAoB;AAAA,MAAE;AAAA,MAAa;AAAA,MAAa;AAAA,MAC1B;AAAA,IAAY;AAAA,IAElC,UAAU;AACR,UAAI,KAAK,+BAA+B;AACtC,YAAI,CAAC,mBAAA44D,QAAY,KAAK,KAAK,0BAA0B,GAAG;AACtD,gBAAM,UAAU;AAAA,YACd,qBAA6B;AAAA,YAC7B,kBAA6B;AAAA,YAC7B,6BAA6B;AAAA,YAC7B,gBAA6B;AAAA,YAC7B,yBAA6B,mBAAAA,QAAY,QAAQ,wBAAwB;AAAA,YACzE,gBAA6B,mBAAAA,QAAY,QAAQ,eAAe;AAAA,YAChE,cAAe;AAAA,UACjB;AACA,cAAI,mBAAAA,QAAY,KAAK,4BAA4B,OAAO;AAAA,QAC1D;AAAA,MACF;AACA,UAAI,KAAK,6BAA6B;AACpC,UAAE,OAAO,EAAE,WAAW;AAAA,UAClB,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,WAAW;AAAA,UACX,UAAU;AAAA,UACV,gBAAgB;AAAA,QAClB,CAAC;AAAA,MACL;AAAA,IACF;AAAA,IAEA,eAAeC,QAAO;AACpB,WAAK,2BAA2B,YAAY,KAAK,2BAA2B;AAC5E,WAAK,yBAAyB,YAAY,KAAK,yBAAyB;AACxE,WAAK,4BAA4B,YAAY,KAAK,4BAA4B;AAC9E,WAAK,gCAAgC,QAAQ,KAAK,2BAA2B;AAC7E,WAAK,8BAA8B,QAAQ,KAAK,yBAAyB;AACzE,WAAK,iCAAiC,QAAQ,KAAK,4BAA4B;AAC/E,UAAI,CAAC,KAAK,qBAAqB;AAC7B,aAAK,sBAAsB,IAAc,MAAM,KAAK,2BAA2B,EAAE,UAAU,MAAM,CAAC;AAAA,MACpG;AACA,UAAI,KAAK,qBAAqB;AAC5B,aAAK,oBAAoB,KAAK;AAAA,MAChC;AAAA,IACF;AAAA,IAEA,yBAAyBA,QAAO;AAC9B,WAAK,qCAAqC,YAAY,KAAK,2BAA2B;AACtF,WAAK,mCAAmC,YAAY,KAAK,yBAAyB;AAClF,WAAK,sCAAsC,YAAY,KAAK,4BAA4B;AACxF,WAAK,0CAA0C,QAAQ,KAAK,2BAA2B;AACvF,WAAK,wCAAwC,QAAQ,KAAK,yBAAyB;AACnF,WAAK,2CAA2C,QAAQ,KAAK,4BAA4B;AACzF,UAAI,CAAC,KAAK,+BAA+B;AACvC,aAAK,gCAAgC,IAAc,MAAM,KAAK,qCAAqC,EAAE,UAAU,MAAM,CAAC;AAAA,MACxH;AACA,UAAI,KAAK,+BAA+B;AACtC,aAAK,8BAA8B,KAAK;AAAA,MAC1C;AAAA,IACF;AAAA,IAEA,sBAAsBA,QAAO;AAC3B,WAAK,mCAAmC,YAAYA,OAAM,OAAO,YAAY,IAAI,QAAQA,OAAM,OAAO,UAAU;AAChH,WAAK,uCAAuC,QAAQA,OAAM,OAAO,YAAY;AAC7E,UAAI,CAAC,KAAK,4BAA4B;AACpC,aAAK,6BAA6B,IAAc,MAAM,KAAK,kCAAkC,EAAE,UAAU,MAAM,CAAC;AAAA,MAClH;AACA,UAAI,KAAK,4BAA4B;AACnC,aAAK,2BAA2B,KAAK;AAAA,MACvC;AAAA,IACF;AAAA,IAEA,4BAA4BA,QAAO;AACjC,WAAK,yCAAyC,YAAYA,OAAM,OAAO,YAAY,IAAI,QAAQA,OAAM,OAAO,gBAAgB;AAC5H,WAAK,6CAA6C,QAAQA,OAAM,OAAO,YAAY;AACnF,WAAK,6CAA6C,QAAQA,OAAM,OAAO,cAAc;AACrF,UAAI,CAAC,KAAK,kCAAkC;AAC1C,aAAK,mCAAmC,IAAc,MAAM,KAAK,wCAAwC,EAAE,UAAU,MAAM,CAAC;AAAA,MAC9H;AACA,UAAI,KAAK,kCAAkC;AACzC,aAAK,iCAAiC,KAAK;AAAA,MAC7C;AAAA,IACF;AAAA,IAEA,sBAAsBA,QAAO;AAC3B,WAAK,0CAA0C,QAAQA,OAAM,OAAO;AAAA,IACtE;AAAA,IAEA,wBAAwBA,QAAO;AAC7B,YAAM,KAAK,SAAS,iBAAiB,kBAAkB,CAAC,EAAE,OAAO,aAAW;AAC1E,YAAI,KAAK,kBAAkB,SAAS,QAAQ,EAAE,GAAG;AAC/C,kBAAQ,UAAU,OAAO,QAAQ;AAAA,QACnC;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;;;AC5GA,MAAM,aAAN,cAAyB,MAAM;EAAA;AAKxB,MAAM,uBAAN,cAAmC,WAAW;IACnD,YAAY,QAAQ;AAClB,YAAM,qBAAqB,OAAO,UAAS,CAAE,EAAE;IACnD;EACA;AAKO,MAAM,uBAAN,cAAmC,WAAW;IACnD,YAAY,QAAQ;AAClB,YAAM,qBAAqB,OAAO,UAAS,CAAE,EAAE;IACnD;EACA;AAKO,MAAM,uBAAN,cAAmC,WAAW;IACnD,YAAY,QAAQ;AAClB,YAAM,qBAAqB,OAAO,UAAS,CAAE,EAAE;IACnD;EACA;AAKO,MAAM,gCAAN,cAA4C,WAAW;EAAA;AAKvD,MAAM,mBAAN,cAA+B,WAAW;IAC/C,YAAY,MAAM;AAChB,YAAM,gBAAgB,IAAI,EAAE;IAChC;EACA;AAKO,MAAM,uBAAN,cAAmC,WAAW;EAAA;AAK9C,MAAM,sBAAN,cAAkC,WAAW;IAClD,cAAc;AACZ,YAAM,2BAA2B;IACrC;EACA;ACxDA,MAAMC,KAAI;AAAV,MACEC,KAAI;AADN,MAEEC,KAAI;AAEC,MAAM,aAAa;IACxB,MAAMF;IACN,OAAOA;IACP,KAAKA;EACP;AAEO,MAAM,WAAW;IACtB,MAAMA;IACN,OAAOC;IACP,KAAKD;EACP;AAEO,MAAM,wBAAwB;IACnC,MAAMA;IACN,OAAOC;IACP,KAAKD;IACL,SAASC;EACX;AAEO,MAAM,YAAY;IACvB,MAAMD;IACN,OAAOE;IACP,KAAKF;EACP;AAEO,MAAM,YAAY;IACvB,MAAMA;IACN,OAAOE;IACP,KAAKF;IACL,SAASE;EACX;AAEO,MAAM,cAAc;IACzB,MAAMF;IACN,QAAQA;EACV;AAEO,MAAM,oBAAoB;IAC/B,MAAMA;IACN,QAAQA;IACR,QAAQA;EACV;AAEO,MAAM,yBAAyB;IACpC,MAAMA;IACN,QAAQA;IACR,QAAQA;IACR,cAAcC;EAChB;AAEO,MAAM,wBAAwB;IACnC,MAAMD;IACN,QAAQA;IACR,QAAQA;IACR,cAAcE;EAChB;AAEO,MAAM,iBAAiB;IAC5B,MAAMF;IACN,QAAQA;IACR,WAAW;EACb;AAEO,MAAM,uBAAuB;IAClC,MAAMA;IACN,QAAQA;IACR,QAAQA;IACR,WAAW;EACb;AAEO,MAAM,4BAA4B;IACvC,MAAMA;IACN,QAAQA;IACR,QAAQA;IACR,WAAW;IACX,cAAcC;EAChB;AAEO,MAAM,2BAA2B;IACtC,MAAMD;IACN,QAAQA;IACR,QAAQA;IACR,WAAW;IACX,cAAcE;EAChB;AAEO,MAAM,iBAAiB;IAC5B,MAAMF;IACN,OAAOA;IACP,KAAKA;IACL,MAAMA;IACN,QAAQA;EACV;AAEO,MAAM,8BAA8B;IACzC,MAAMA;IACN,OAAOA;IACP,KAAKA;IACL,MAAMA;IACN,QAAQA;IACR,QAAQA;EACV;AAEO,MAAM,eAAe;IAC1B,MAAMA;IACN,OAAOC;IACP,KAAKD;IACL,MAAMA;IACN,QAAQA;EACV;AAEO,MAAM,4BAA4B;IACvC,MAAMA;IACN,OAAOC;IACP,KAAKD;IACL,MAAMA;IACN,QAAQA;IACR,QAAQA;EACV;AAEO,MAAM,4BAA4B;IACvC,MAAMA;IACN,OAAOC;IACP,KAAKD;IACL,SAASC;IACT,MAAMD;IACN,QAAQA;EACV;AAEO,MAAM,gBAAgB;IAC3B,MAAMA;IACN,OAAOE;IACP,KAAKF;IACL,MAAMA;IACN,QAAQA;IACR,cAAcC;EAChB;AAEO,MAAM,6BAA6B;IACxC,MAAMD;IACN,OAAOE;IACP,KAAKF;IACL,MAAMA;IACN,QAAQA;IACR,QAAQA;IACR,cAAcC;EAChB;AAEO,MAAM,gBAAgB;IAC3B,MAAMD;IACN,OAAOE;IACP,KAAKF;IACL,SAASE;IACT,MAAMF;IACN,QAAQA;IACR,cAAcE;EAChB;AAEO,MAAM,6BAA6B;IACxC,MAAMF;IACN,OAAOE;IACP,KAAKF;IACL,SAASE;IACT,MAAMF;IACN,QAAQA;IACR,QAAQA;IACR,cAAcE;EAChB;AC1Ke,MAAM,OAAN,MAAW;;;;;;IAMxB,IAAI,OAAO;AACT,YAAM,IAAI,oBAAmB;IACjC;;;;;;IAOE,IAAI,OAAO;AACT,YAAM,IAAI,oBAAmB;IACjC;;;;;;;IAQE,IAAI,WAAW;AACb,aAAO,KAAK;IAChB;;;;;;IAOE,IAAI,cAAc;AAChB,YAAM,IAAI,oBAAmB;IACjC;;;;;;;;;;IAWE,WAAW,IAAI,MAAM;AACnB,YAAM,IAAI,oBAAmB;IACjC;;;;;;;;;IAUE,aAAa,IAAI,QAAQ;AACvB,YAAM,IAAI,oBAAmB;IACjC;;;;;;;IAQE,OAAO,IAAI;AACT,YAAM,IAAI,oBAAmB;IACjC;;;;;;;IAQE,OAAO,WAAW;AAChB,YAAM,IAAI,oBAAmB;IACjC;;;;;;IAOE,IAAI,UAAU;AACZ,YAAM,IAAI,oBAAmB;IACjC;EACA;AC7FA,MAAIC,cAAY;AAMD,MAAM,aAAN,MAAM,oBAAmB,KAAK;;;;;IAK3C,WAAW,WAAW;AACpB,UAAIA,gBAAc,MAAM;AACtBA,sBAAY,IAAI,YAAU;MAChC;AACI,aAAOA;IACX;;IAGE,IAAI,OAAO;AACT,aAAO;IACX;;IAGE,IAAI,OAAO;AACT,aAAO,IAAI,KAAK,eAAc,EAAG,gBAAe,EAAG;IACvD;;IAGE,IAAI,cAAc;AAChB,aAAO;IACX;;IAGE,WAAW,IAAI,EAAE,QAAQ,OAAM,GAAI;AACjC,aAAO,cAAc,IAAI,QAAQ,MAAM;IAC3C;;IAGE,aAAa,IAAI,QAAQ;AACvB,aAAO,aAAa,KAAK,OAAO,EAAE,GAAG,MAAM;IAC/C;;IAGE,OAAO,IAAI;AACT,aAAO,CAAC,IAAI,KAAK,EAAE,EAAE,kBAAiB;IAC1C;;IAGE,OAAO,WAAW;AAChB,aAAO,UAAU,SAAS;IAC9B;;IAGE,IAAI,UAAU;AACZ,aAAO;IACX;EACA;ACzDA,MAAM,WAAW,oBAAI,IAAG;AACxB,WAAS,QAAQ,UAAU;AACzB,QAAI,MAAM,SAAS,IAAI,QAAQ;AAC/B,QAAI,QAAQ,QAAW;AACrB,YAAM,IAAI,KAAK,eAAe,SAAS;QACrC,QAAQ;QACR,UAAU;QACV,MAAM;QACN,OAAO;QACP,KAAK;QACL,MAAM;QACN,QAAQ;QACR,QAAQ;QACR,KAAK;MACX,CAAK;AACD,eAAS,IAAI,UAAU,GAAG;IAC9B;AACE,WAAO;EACT;AAEA,MAAM,YAAY;IAChB,MAAM;IACN,OAAO;IACP,KAAK;IACL,KAAK;IACL,MAAM;IACN,QAAQ;IACR,QAAQ;EACV;AAEA,WAAS,YAAY,KAAK,MAAM;AAC9B,UAAM,YAAY,IAAI,OAAO,IAAI,EAAE,QAAQ,WAAW,EAAE,GACtD,SAAS,kDAAkD,KAAK,SAAS,GACzE,CAAA,EAAG,QAAQ,MAAM,OAAO,SAAS,OAAO,SAAS,OAAO,IAAI;AAC9D,WAAO,CAAC,OAAO,QAAQ,MAAM,SAAS,OAAO,SAAS,OAAO;EAC/D;AAEA,WAAS,YAAY,KAAK,MAAM;AAC9B,UAAM,YAAY,IAAI,cAAc,IAAI;AACxC,UAAM,SAAS,CAAA;AACf,aAASC,KAAI,GAAGA,KAAI,UAAU,QAAQA,MAAK;AACzC,YAAM,EAAE,MAAM,MAAK,IAAK,UAAUA,EAAC;AACnC,YAAM,MAAM,UAAU,IAAI;AAE1B,UAAI,SAAS,OAAO;AAClB,eAAO,GAAG,IAAI;MACpB,WAAe,CAAC,YAAY,GAAG,GAAG;AAC5B,eAAO,GAAG,IAAI,SAAS,OAAO,EAAE;MACtC;IACA;AACE,WAAO;EACT;AAEA,MAAM,gBAAgB,oBAAI,IAAG;AAKd,MAAM,WAAN,MAAM,kBAAiB,KAAK;;;;;IAKzC,OAAO,OAAO,MAAM;AAClB,UAAI,OAAO,cAAc,IAAI,IAAI;AACjC,UAAI,SAAS,QAAW;AACtB,sBAAc,IAAI,MAAO,OAAO,IAAI,UAAS,IAAI,CAAC;MACxD;AACI,aAAO;IACX;;;;;IAME,OAAO,aAAa;AAClB,oBAAc,MAAK;AACnB,eAAS,MAAK;IAClB;;;;;;;;;IAUE,OAAO,iBAAiBH,IAAG;AACzB,aAAO,KAAK,YAAYA,EAAC;IAC7B;;;;;;;;;IAUE,OAAO,YAAY,MAAM;AACvB,UAAI,CAAC,MAAM;AACT,eAAO;MACb;AACI,UAAI;AACF,YAAI,KAAK,eAAe,SAAS,EAAE,UAAU,KAAI,CAAE,EAAE,OAAM;AAC3D,eAAO;MACb,SAAaI,IAAG;AACV,eAAO;MACb;IACA;IAEE,YAAY,MAAM;AAChB,YAAK;AAEL,WAAK,WAAW;AAEhB,WAAK,QAAQ,UAAS,YAAY,IAAI;IAC1C;;;;;;IAOE,IAAI,OAAO;AACT,aAAO;IACX;;;;;;IAOE,IAAI,OAAO;AACT,aAAO,KAAK;IAChB;;;;;;;IAQE,IAAI,cAAc;AAChB,aAAO;IACX;;;;;;;;;;IAWE,WAAW,IAAI,EAAE,QAAQ,OAAM,GAAI;AACjC,aAAO,cAAc,IAAI,QAAQ,QAAQ,KAAK,IAAI;IACtD;;;;;;;;;IAUE,aAAa,IAAI,QAAQ;AACvB,aAAO,aAAa,KAAK,OAAO,EAAE,GAAG,MAAM;IAC/C;;;;;;;IAQE,OAAO,IAAI;AACT,UAAI,CAAC,KAAK,MAAO,QAAO;AACxB,YAAM,OAAO,IAAI,KAAK,EAAE;AAExB,UAAI,MAAM,IAAI,EAAG,QAAO;AAExB,YAAM,MAAM,QAAQ,KAAK,IAAI;AAC7B,UAAI,CAAC,MAAM,OAAO,KAAK,QAAQ,MAAM,QAAQC,OAAM,IAAI,IAAI,gBACvD,YAAY,KAAK,IAAI,IACrB,YAAY,KAAK,IAAI;AAEzB,UAAI,WAAW,MAAM;AACnB,eAAO,CAAC,KAAK,IAAI,IAAI,IAAI;MAC/B;AAGI,YAAM,eAAe,SAAS,KAAK,IAAI;AAEvC,YAAM,QAAQ,aAAa;QACzB;QACA;QACA;QACA,MAAM;QACN;QACA,QAAAA;QACA,aAAa;MACnB,CAAK;AAED,UAAI,OAAO,CAAC;AACZ,YAAM,OAAO,OAAO;AACpB,cAAQ,QAAQ,IAAI,OAAO,MAAO;AAClC,cAAQ,QAAQ,SAAS,KAAK;IAClC;;;;;;;IAQE,OAAO,WAAW;AAChB,aAAO,UAAU,SAAS,UAAU,UAAU,SAAS,KAAK;IAChE;;;;;;IAOE,IAAI,UAAU;AACZ,aAAO,KAAK;IAChB;EACA;AClOA,MAAI,cAAc,CAAA;AAClB,WAAS,YAAY,WAAW,OAAO,CAAA,GAAI;AACzC,UAAM,MAAM,KAAK,UAAU,CAAC,WAAW,IAAI,CAAC;AAC5C,QAAI,MAAM,YAAY,GAAG;AACzB,QAAI,CAAC,KAAK;AACR,YAAM,IAAI,KAAK,WAAW,WAAW,IAAI;AACzC,kBAAY,GAAG,IAAI;IACvB;AACE,WAAO;EACT;AAEA,MAAM,cAAc,oBAAI,IAAG;AAC3B,WAAS,aAAa,WAAW,OAAO,CAAA,GAAI;AAC1C,UAAM,MAAM,KAAK,UAAU,CAAC,WAAW,IAAI,CAAC;AAC5C,QAAI,MAAM,YAAY,IAAI,GAAG;AAC7B,QAAI,QAAQ,QAAW;AACrB,YAAM,IAAI,KAAK,eAAe,WAAW,IAAI;AAC7C,kBAAY,IAAI,KAAK,GAAG;IAC5B;AACE,WAAO;EACT;AAEA,MAAM,eAAe,oBAAI,IAAG;AAC5B,WAAS,aAAa,WAAW,OAAO,CAAA,GAAI;AAC1C,UAAM,MAAM,KAAK,UAAU,CAAC,WAAW,IAAI,CAAC;AAC5C,QAAI,MAAM,aAAa,IAAI,GAAG;AAC9B,QAAI,QAAQ,QAAW;AACrB,YAAM,IAAI,KAAK,aAAa,WAAW,IAAI;AAC3C,mBAAa,IAAI,KAAK,GAAG;IAC7B;AACE,WAAO;EACT;AAEA,MAAM,eAAe,oBAAI,IAAG;AAC5B,WAAS,aAAa,WAAW,OAAO,CAAA,GAAI;AAC1C,UAAM,EAAE,MAAM,GAAG,aAAY,IAAK;AAClC,UAAM,MAAM,KAAK,UAAU,CAAC,WAAW,YAAY,CAAC;AACpD,QAAI,MAAM,aAAa,IAAI,GAAG;AAC9B,QAAI,QAAQ,QAAW;AACrB,YAAM,IAAI,KAAK,mBAAmB,WAAW,IAAI;AACjD,mBAAa,IAAI,KAAK,GAAG;IAC7B;AACE,WAAO;EACT;AAEA,MAAI,iBAAiB;AACrB,WAAS,eAAe;AACtB,QAAI,gBAAgB;AAClB,aAAO;IACX,OAAS;AACL,uBAAiB,IAAI,KAAK,eAAc,EAAG,gBAAe,EAAG;AAC7D,aAAO;IACX;EACA;AAEA,MAAM,2BAA2B,oBAAI,IAAG;AACxC,WAAS,4BAA4B,WAAW;AAC9C,QAAI,OAAO,yBAAyB,IAAI,SAAS;AACjD,QAAI,SAAS,QAAW;AACtB,aAAO,IAAI,KAAK,eAAe,SAAS,EAAE,gBAAe;AACzD,+BAAyB,IAAI,WAAW,IAAI;IAChD;AACE,WAAO;EACT;AAEA,MAAM,gBAAgB,oBAAI,IAAG;AAC7B,WAAS,kBAAkB,WAAW;AACpC,QAAI,OAAO,cAAc,IAAI,SAAS;AACtC,QAAI,CAAC,MAAM;AACT,YAAM,SAAS,IAAI,KAAK,OAAO,SAAS;AAExC,aAAO,iBAAiB,SAAS,OAAO,YAAW,IAAK,OAAO;AAE/D,UAAI,EAAE,iBAAiB,OAAO;AAC5B,eAAO,EAAE,GAAG,sBAAsB,GAAG,KAAI;MAC/C;AACI,oBAAc,IAAI,WAAW,IAAI;IACrC;AACE,WAAO;EACT;AAEA,WAAS,kBAAkB,WAAW;AAYpC,UAAM,SAAS,UAAU,QAAQ,KAAK;AACtC,QAAI,WAAW,IAAI;AACjB,kBAAY,UAAU,UAAU,GAAG,MAAM;IAC7C;AAEE,UAAM,SAAS,UAAU,QAAQ,KAAK;AACtC,QAAI,WAAW,IAAI;AACjB,aAAO,CAAC,SAAS;IACrB,OAAS;AACL,UAAI;AACJ,UAAI;AACJ,UAAI;AACF,kBAAU,aAAa,SAAS,EAAE,gBAAe;AACjD,sBAAc;MACpB,SAAaD,IAAG;AACV,cAAM,UAAU,UAAU,UAAU,GAAG,MAAM;AAC7C,kBAAU,aAAa,OAAO,EAAE,gBAAe;AAC/C,sBAAc;MACpB;AAEI,YAAM,EAAE,iBAAiB,SAAQ,IAAK;AACtC,aAAO,CAAC,aAAa,iBAAiB,QAAQ;IAClD;EACA;AAEA,WAAS,iBAAiB,WAAW,iBAAiB,gBAAgB;AACpE,QAAI,kBAAkB,iBAAiB;AACrC,UAAI,CAAC,UAAU,SAAS,KAAK,GAAG;AAC9B,qBAAa;MACnB;AAEI,UAAI,gBAAgB;AAClB,qBAAa,OAAO,cAAc;MACxC;AAEI,UAAI,iBAAiB;AACnB,qBAAa,OAAO,eAAe;MACzC;AACI,aAAO;IACX,OAAS;AACL,aAAO;IACX;EACA;AAEA,WAAS,UAAUE,IAAG;AACpB,UAAM,KAAK,CAAA;AACX,aAASH,KAAI,GAAGA,MAAK,IAAIA,MAAK;AAC5B,YAAM,KAAK,SAAS,IAAI,MAAMA,IAAG,CAAC;AAClC,SAAG,KAAKG,GAAE,EAAE,CAAC;IACjB;AACE,WAAO;EACT;AAEA,WAAS,YAAYA,IAAG;AACtB,UAAM,KAAK,CAAA;AACX,aAASH,KAAI,GAAGA,MAAK,GAAGA,MAAK;AAC3B,YAAM,KAAK,SAAS,IAAI,MAAM,IAAI,KAAKA,EAAC;AACxC,SAAG,KAAKG,GAAE,EAAE,CAAC;IACjB;AACE,WAAO;EACT;AAEA,WAAS,UAAU,KAAK,QAAQ,WAAW,QAAQ;AACjD,UAAM,OAAO,IAAI,YAAW;AAE5B,QAAI,SAAS,SAAS;AACpB,aAAO;IACX,WAAa,SAAS,MAAM;AACxB,aAAO,UAAU,MAAM;IAC3B,OAAS;AACL,aAAO,OAAO,MAAM;IACxB;EACA;AAEA,WAAS,oBAAoB,KAAK;AAChC,QAAI,IAAI,mBAAmB,IAAI,oBAAoB,QAAQ;AACzD,aAAO;IACX,OAAS;AACL,aACE,IAAI,oBAAoB,UACxB,CAAC,IAAI,UACL,IAAI,OAAO,WAAW,IAAI,KAC1B,4BAA4B,IAAI,MAAM,EAAE,oBAAoB;IAElE;EACA;AAMA,MAAM,sBAAN,MAA0B;IACxB,YAAY,MAAM,aAAa,MAAM;AACnC,WAAK,QAAQ,KAAK,SAAS;AAC3B,WAAK,QAAQ,KAAK,SAAS;AAE3B,YAAM,EAAE,OAAO,OAAO,GAAG,UAAS,IAAK;AAEvC,UAAI,CAAC,eAAe,OAAO,KAAK,SAAS,EAAE,SAAS,GAAG;AACrD,cAAM,WAAW,EAAE,aAAa,OAAO,GAAG,KAAI;AAC9C,YAAI,KAAK,QAAQ,EAAG,UAAS,uBAAuB,KAAK;AACzD,aAAK,MAAM,aAAa,MAAM,QAAQ;MAC5C;IACA;IAEE,OAAOH,IAAG;AACR,UAAI,KAAK,KAAK;AACZ,cAAM,QAAQ,KAAK,QAAQ,KAAK,MAAMA,EAAC,IAAIA;AAC3C,eAAO,KAAK,IAAI,OAAO,KAAK;MAClC,OAAW;AAEL,cAAM,QAAQ,KAAK,QAAQ,KAAK,MAAMA,EAAC,IAAI,QAAQA,IAAG,CAAC;AACvD,eAAO,SAAS,OAAO,KAAK,KAAK;MACvC;IACA;EACA;AAMA,MAAM,oBAAN,MAAwB;IACtB,YAAY,IAAI,MAAM,MAAM;AAC1B,WAAK,OAAO;AACZ,WAAK,eAAe;AAEpB,UAAI,IAAI;AACR,UAAI,KAAK,KAAK,UAAU;AAEtB,aAAK,KAAK;MAChB,WAAe,GAAG,KAAK,SAAS,SAAS;AAOnC,cAAM,YAAY,MAAM,GAAG,SAAS;AACpC,cAAM,UAAU,aAAa,IAAI,WAAW,SAAS,KAAK,UAAU,SAAS;AAC7E,YAAI,GAAG,WAAW,KAAK,SAAS,OAAO,OAAO,EAAE,OAAO;AACrD,cAAI;AACJ,eAAK,KAAK;QAClB,OAAa;AAGL,cAAI;AACJ,eAAK,KAAK,GAAG,WAAW,IAAI,KAAK,GAAG,QAAQ,KAAK,EAAE,KAAK,EAAE,SAAS,GAAG,OAAM,CAAE;AAC9E,eAAK,eAAe,GAAG;QAC/B;MACA,WAAe,GAAG,KAAK,SAAS,UAAU;AACpC,aAAK,KAAK;MAChB,WAAe,GAAG,KAAK,SAAS,QAAQ;AAClC,aAAK,KAAK;AACV,YAAI,GAAG,KAAK;MAClB,OAAW;AAGL,YAAI;AACJ,aAAK,KAAK,GAAG,QAAQ,KAAK,EAAE,KAAK,EAAE,SAAS,GAAG,OAAM,CAAE;AACvD,aAAK,eAAe,GAAG;MAC7B;AAEI,YAAM,WAAW,EAAE,GAAG,KAAK,KAAI;AAC/B,eAAS,WAAW,SAAS,YAAY;AACzC,WAAK,MAAM,aAAa,MAAM,QAAQ;IAC1C;IAEE,SAAS;AACP,UAAI,KAAK,cAAc;AAGrB,eAAO,KAAK,cAAa,EACtB,IAAI,CAAC,EAAE,MAAK,MAAO,KAAK,EACxB,KAAK,EAAE;MAChB;AACI,aAAO,KAAK,IAAI,OAAO,KAAK,GAAG,SAAQ,CAAE;IAC7C;IAEE,gBAAgB;AACd,YAAM,QAAQ,KAAK,IAAI,cAAc,KAAK,GAAG,SAAQ,CAAE;AACvD,UAAI,KAAK,cAAc;AACrB,eAAO,MAAM,IAAI,CAAC,SAAS;AACzB,cAAI,KAAK,SAAS,gBAAgB;AAChC,kBAAM,aAAa,KAAK,aAAa,WAAW,KAAK,GAAG,IAAI;cAC1D,QAAQ,KAAK,GAAG;cAChB,QAAQ,KAAK,KAAK;YAC9B,CAAW;AACD,mBAAO;cACL,GAAG;cACH,OAAO;YACnB;UACA,OAAe;AACL,mBAAO;UACjB;QACA,CAAO;MACP;AACI,aAAO;IACX;IAEE,kBAAkB;AAChB,aAAO,KAAK,IAAI,gBAAe;IACnC;EACA;AAKA,MAAM,mBAAN,MAAuB;IACrB,YAAY,MAAM,WAAW,MAAM;AACjC,WAAK,OAAO,EAAE,OAAO,QAAQ,GAAG,KAAI;AACpC,UAAI,CAAC,aAAa,YAAW,GAAI;AAC/B,aAAK,MAAM,aAAa,MAAM,IAAI;MACxC;IACA;IAEE,OAAO,OAAO,MAAM;AAClB,UAAI,KAAK,KAAK;AACZ,eAAO,KAAK,IAAI,OAAO,OAAO,IAAI;MACxC,OAAW;AACL,eAAOI,mBAA2B,MAAM,OAAO,KAAK,KAAK,SAAS,KAAK,KAAK,UAAU,MAAM;MAClG;IACA;IAEE,cAAc,OAAO,MAAM;AACzB,UAAI,KAAK,KAAK;AACZ,eAAO,KAAK,IAAI,cAAc,OAAO,IAAI;MAC/C,OAAW;AACL,eAAO,CAAA;MACb;IACA;EACA;AAEA,MAAM,uBAAuB;IAC3B,UAAU;IACV,aAAa;IACb,SAAS,CAAC,GAAG,CAAC;EAChB;AAKe,MAAM,SAAN,MAAM,QAAO;IAC1B,OAAO,SAAS,MAAM;AACpB,aAAO,QAAO;QACZ,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;MACX;IACA;IAEE,OAAO,OAAO,QAAQ,iBAAiB,gBAAgB,cAAc,cAAc,OAAO;AACxF,YAAM,kBAAkB,UAAU,SAAS;AAE3C,YAAM,UAAU,oBAAoB,cAAc,UAAU,aAAY;AACxE,YAAM,mBAAmB,mBAAmB,SAAS;AACrD,YAAM,kBAAkB,kBAAkB,SAAS;AACnD,YAAM,gBAAgB,qBAAqB,YAAY,KAAK,SAAS;AACrE,aAAO,IAAI,QAAO,SAAS,kBAAkB,iBAAiB,eAAe,eAAe;IAChG;IAEE,OAAO,aAAa;AAClB,uBAAiB;AACjB,kBAAY,MAAK;AACjB,mBAAa,MAAK;AAClB,mBAAa,MAAK;AAClB,+BAAyB,MAAK;AAC9B,oBAAc,MAAK;IACvB;IAEE,OAAO,WAAW,EAAE,QAAQ,iBAAiB,gBAAgB,aAAY,IAAK,CAAA,GAAI;AAChF,aAAO,QAAO,OAAO,QAAQ,iBAAiB,gBAAgB,YAAY;IAC9E;IAEE,YAAY,QAAQ,WAAW,gBAAgB,cAAc,iBAAiB;AAC5E,YAAM,CAAC,cAAc,uBAAuB,oBAAoB,IAAI,kBAAkB,MAAM;AAE5F,WAAK,SAAS;AACd,WAAK,kBAAkB,aAAa,yBAAyB;AAC7D,WAAK,iBAAiB,kBAAkB,wBAAwB;AAChE,WAAK,eAAe;AACpB,WAAK,OAAO,iBAAiB,KAAK,QAAQ,KAAK,iBAAiB,KAAK,cAAc;AAEnF,WAAK,gBAAgB,EAAE,QAAQ,CAAA,GAAI,YAAY,CAAA,EAAE;AACjD,WAAK,cAAc,EAAE,QAAQ,CAAA,GAAI,YAAY,CAAA,EAAE;AAC/C,WAAK,gBAAgB;AACrB,WAAK,WAAW,CAAA;AAEhB,WAAK,kBAAkB;AACvB,WAAK,oBAAoB;IAC7B;IAEE,IAAI,cAAc;AAChB,UAAI,KAAK,qBAAqB,MAAM;AAClC,aAAK,oBAAoB,oBAAoB,IAAI;MACvD;AAEI,aAAO,KAAK;IAChB;IAEE,cAAc;AACZ,YAAM,eAAe,KAAK,UAAS;AACnC,YAAM,kBACH,KAAK,oBAAoB,QAAQ,KAAK,oBAAoB,YAC1D,KAAK,mBAAmB,QAAQ,KAAK,mBAAmB;AAC3D,aAAO,gBAAgB,iBAAiB,OAAO;IACnD;IAEE,MAAM,MAAM;AACV,UAAI,CAAC,QAAQ,OAAO,oBAAoB,IAAI,EAAE,WAAW,GAAG;AAC1D,eAAO;MACb,OAAW;AACL,eAAO,QAAO;UACZ,KAAK,UAAU,KAAK;UACpB,KAAK,mBAAmB,KAAK;UAC7B,KAAK,kBAAkB,KAAK;UAC5B,qBAAqB,KAAK,YAAY,KAAK,KAAK;UAChD,KAAK,eAAe;QAC5B;MACA;IACA;IAEE,cAAc,OAAO,CAAA,GAAI;AACvB,aAAO,KAAK,MAAM,EAAE,GAAG,MAAM,aAAa,KAAI,CAAE;IACpD;IAEE,kBAAkB,OAAO,CAAA,GAAI;AAC3B,aAAO,KAAK,MAAM,EAAE,GAAG,MAAM,aAAa,MAAK,CAAE;IACrD;IAEE,OAAO,QAAQ,SAAS,OAAO;AAC7B,aAAO,UAAU,MAAM,QAAQC,QAAgB,MAAM;AAInD,cAAM,mBAAmB,KAAK,SAAS,QAAQ,KAAK,KAAK,WAAW,KAAK;AACzE,kBAAU,CAAC;AACX,cAAM,OAAO,SAAS,EAAE,OAAO,QAAQ,KAAK,UAAS,IAAK,EAAE,OAAO,OAAM,GACvE,YAAY,SAAS,WAAW;AAClC,YAAI,CAAC,KAAK,YAAY,SAAS,EAAE,MAAM,GAAG;AACxC,gBAAM,SAAS,CAAC,mBACZ,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,OAAO,IACtC,CAAC,OAAO,KAAK,YAAY,IAAI,IAAI,EAAE,OAAM;AAC7C,eAAK,YAAY,SAAS,EAAE,MAAM,IAAI,UAAU,MAAM;QAC9D;AACM,eAAO,KAAK,YAAY,SAAS,EAAE,MAAM;MAC/C,CAAK;IACL;IAEE,SAAS,QAAQ,SAAS,OAAO;AAC/B,aAAO,UAAU,MAAM,QAAQC,UAAkB,MAAM;AACrD,cAAM,OAAO,SACP,EAAE,SAAS,QAAQ,MAAM,WAAW,OAAO,QAAQ,KAAK,UAAS,IACjE,EAAE,SAAS,OAAM,GACrB,YAAY,SAAS,WAAW;AAClC,YAAI,CAAC,KAAK,cAAc,SAAS,EAAE,MAAM,GAAG;AAC1C,eAAK,cAAc,SAAS,EAAE,MAAM,IAAI;YAAY,CAAC,OACnD,KAAK,QAAQ,IAAI,MAAM,SAAS;UAC1C;QACA;AACM,eAAO,KAAK,cAAc,SAAS,EAAE,MAAM;MACjD,CAAK;IACL;IAEE,YAAY;AACV,aAAO;QACL;QACA;QACA,MAAMC;QACN,MAAM;AAGJ,cAAI,CAAC,KAAK,eAAe;AACvB,kBAAM,OAAO,EAAE,MAAM,WAAW,WAAW,MAAK;AAChD,iBAAK,gBAAgB,CAAC,SAAS,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,SAAS,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC,EAAE;cACnF,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,WAAW;YACtD;UACA;AAEQ,iBAAO,KAAK;QACpB;MACA;IACA;IAEE,KAAK,QAAQ;AACX,aAAO,UAAU,MAAM,QAAQC,MAAc,MAAM;AACjD,cAAM,OAAO,EAAE,KAAK,OAAM;AAI1B,YAAI,CAAC,KAAK,SAAS,MAAM,GAAG;AAC1B,eAAK,SAAS,MAAM,IAAI,CAAC,SAAS,IAAI,KAAK,GAAG,CAAC,GAAG,SAAS,IAAI,MAAM,GAAG,CAAC,CAAC,EAAE;YAAI,CAAC,OAC/E,KAAK,QAAQ,IAAI,MAAM,KAAK;UACtC;QACA;AAEM,eAAO,KAAK,SAAS,MAAM;MACjC,CAAK;IACL;IAEE,QAAQ,IAAI,UAAU,OAAO;AAC3B,YAAM,KAAK,KAAK,YAAY,IAAI,QAAQ,GACtC,UAAU,GAAG,cAAa,GAC1B,WAAW,QAAQ,KAAK,CAACC,OAAMA,GAAE,KAAK,YAAW,MAAO,KAAK;AAC/D,aAAO,WAAW,SAAS,QAAQ;IACvC;IAEE,gBAAgB,OAAO,CAAA,GAAI;AAGzB,aAAO,IAAI,oBAAoB,KAAK,MAAM,KAAK,eAAe,KAAK,aAAa,IAAI;IACxF;IAEE,YAAY,IAAI,WAAW,CAAA,GAAI;AAC7B,aAAO,IAAI,kBAAkB,IAAI,KAAK,MAAM,QAAQ;IACxD;IAEE,aAAa,OAAO,CAAA,GAAI;AACtB,aAAO,IAAI,iBAAiB,KAAK,MAAM,KAAK,UAAS,GAAI,IAAI;IACjE;IAEE,cAAc,OAAO,CAAA,GAAI;AACvB,aAAO,YAAY,KAAK,MAAM,IAAI;IACtC;IAEE,YAAY;AACV,aACE,KAAK,WAAW,QAChB,KAAK,OAAO,YAAW,MAAO,WAC9B,4BAA4B,KAAK,IAAI,EAAE,OAAO,WAAW,OAAO;IAEtE;IAEE,kBAAkB;AAChB,UAAI,KAAK,cAAc;AACrB,eAAO,KAAK;MAClB,WAAe,CAAC,kBAAiB,GAAI;AAC/B,eAAO;MACb,OAAW;AACL,eAAO,kBAAkB,KAAK,MAAM;MAC1C;IACA;IAEE,iBAAiB;AACf,aAAO,KAAK,gBAAe,EAAG;IAClC;IAEE,wBAAwB;AACtB,aAAO,KAAK,gBAAe,EAAG;IAClC;IAEE,iBAAiB;AACf,aAAO,KAAK,gBAAe,EAAG;IAClC;IAEE,OAAO,OAAO;AACZ,aACE,KAAK,WAAW,MAAM,UACtB,KAAK,oBAAoB,MAAM,mBAC/B,KAAK,mBAAmB,MAAM;IAEpC;IAEE,WAAW;AACT,aAAO,UAAU,KAAK,MAAM,KAAK,KAAK,eAAe,KAAK,KAAK,cAAc;IACjF;EACA;ACrjBA,MAAI,YAAY;AAMD,MAAM,kBAAN,MAAM,yBAAwB,KAAK;;;;;IAKhD,WAAW,cAAc;AACvB,UAAI,cAAc,MAAM;AACtB,oBAAY,IAAI,iBAAgB,CAAC;MACvC;AACI,aAAO;IACX;;;;;;IAOE,OAAO,SAASC,SAAQ;AACtB,aAAOA,YAAW,IAAI,iBAAgB,cAAc,IAAI,iBAAgBA,OAAM;IAClF;;;;;;;;;IAUE,OAAO,eAAeb,IAAG;AACvB,UAAIA,IAAG;AACL,cAAMc,KAAId,GAAE,MAAM,uCAAuC;AACzD,YAAIc,IAAG;AACL,iBAAO,IAAI,iBAAgB,aAAaA,GAAE,CAAC,GAAGA,GAAE,CAAC,CAAC,CAAC;QAC3D;MACA;AACI,aAAO;IACX;IAEE,YAAYD,SAAQ;AAClB,YAAK;AAEL,WAAK,QAAQA;IACjB;;;;;;IAOE,IAAI,OAAO;AACT,aAAO;IACX;;;;;;;IAQE,IAAI,OAAO;AACT,aAAO,KAAK,UAAU,IAAI,QAAQ,MAAM,aAAa,KAAK,OAAO,QAAQ,CAAC;IAC9E;;;;;;;IAQE,IAAI,WAAW;AACb,UAAI,KAAK,UAAU,GAAG;AACpB,eAAO;MACb,OAAW;AACL,eAAO,UAAU,aAAa,CAAC,KAAK,OAAO,QAAQ,CAAC;MAC1D;IACA;;;;;;;IAQE,aAAa;AACX,aAAO,KAAK;IAChB;;;;;;;;;IAUE,aAAa,IAAI,QAAQ;AACvB,aAAO,aAAa,KAAK,OAAO,MAAM;IAC1C;;;;;;;IAQE,IAAI,cAAc;AAChB,aAAO;IACX;;;;;;;;IASE,SAAS;AACP,aAAO,KAAK;IAChB;;;;;;;IAQE,OAAO,WAAW;AAChB,aAAO,UAAU,SAAS,WAAW,UAAU,UAAU,KAAK;IAClE;;;;;;;IAQE,IAAI,UAAU;AACZ,aAAO;IACX;EACA;AC/Ie,MAAM,cAAN,cAA0B,KAAK;IAC5C,YAAY,UAAU;AACpB,YAAK;AAEL,WAAK,WAAW;IACpB;;IAGE,IAAI,OAAO;AACT,aAAO;IACX;;IAGE,IAAI,OAAO;AACT,aAAO,KAAK;IAChB;;IAGE,IAAI,cAAc;AAChB,aAAO;IACX;;IAGE,aAAa;AACX,aAAO;IACX;;IAGE,eAAe;AACb,aAAO;IACX;;IAGE,SAAS;AACP,aAAO;IACX;;IAGE,SAAS;AACP,aAAO;IACX;;IAGE,IAAI,UAAU;AACZ,aAAO;IACX;EACA;ACxCO,WAAS,cAAc,OAAOE,cAAa;AAEhD,QAAI,YAAY,KAAK,KAAK,UAAU,MAAM;AACxC,aAAOA;IACX,WAAa,iBAAiB,MAAM;AAChC,aAAO;IACX,WAAa,SAAS,KAAK,GAAG;AAC1B,YAAM,UAAU,MAAM,YAAW;AACjC,UAAI,YAAY,UAAW,QAAOA;eACzB,YAAY,WAAW,YAAY,SAAU,QAAO,WAAW;eAC/D,YAAY,SAAS,YAAY,MAAO,QAAO,gBAAgB;UACnE,QAAO,gBAAgB,eAAe,OAAO,KAAK,SAAS,OAAO,KAAK;IAChF,WAAaC,UAAS,KAAK,GAAG;AAC1B,aAAO,gBAAgB,SAAS,KAAK;IACzC,WAAa,OAAO,UAAU,YAAY,YAAY,SAAS,OAAO,MAAM,WAAW,YAAY;AAG/F,aAAO;IACX,OAAS;AACL,aAAO,IAAI,YAAY,KAAK;IAChC;EACA;ACjCA,MAAM,mBAAmB;IACvB,MAAM;IACN,SAAS;IACT,MAAM;IACN,MAAM;IACN,MAAM;IACN,UAAU;IACV,MAAM;IACN,SAAS;IACT,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,SAAS;IACT,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;EACR;AAEA,MAAM,wBAAwB;IAC5B,MAAM,CAAC,MAAM,IAAI;IACjB,SAAS,CAAC,MAAM,IAAI;IACpB,MAAM,CAAC,MAAM,IAAI;IACjB,MAAM,CAAC,MAAM,IAAI;IACjB,MAAM,CAAC,MAAM,IAAI;IACjB,UAAU,CAAC,OAAO,KAAK;IACvB,MAAM,CAAC,MAAM,IAAI;IACjB,MAAM,CAAC,MAAM,IAAI;IACjB,MAAM,CAAC,MAAM,IAAI;IACjB,MAAM,CAAC,MAAM,IAAI;IACjB,MAAM,CAAC,MAAM,IAAI;IACjB,MAAM,CAAC,MAAM,IAAI;IACjB,MAAM,CAAC,MAAM,IAAI;IACjB,MAAM,CAAC,MAAM,IAAI;IACjB,MAAM,CAAC,MAAM,IAAI;IACjB,SAAS,CAAC,MAAM,IAAI;IACpB,MAAM,CAAC,MAAM,IAAI;IACjB,MAAM,CAAC,MAAM,IAAI;IACjB,MAAM,CAAC,MAAM,IAAI;EACnB;AAEA,MAAM,eAAe,iBAAiB,QAAQ,QAAQ,YAAY,EAAE,EAAE,MAAM,EAAE;AAEvE,WAAS,YAAY,KAAK;AAC/B,QAAI,QAAQ,SAAS,KAAK,EAAE;AAC5B,QAAI,MAAM,KAAK,GAAG;AAChB,cAAQ;AACR,eAASb,KAAI,GAAGA,KAAI,IAAI,QAAQA,MAAK;AACnC,cAAM,OAAO,IAAI,WAAWA,EAAC;AAE7B,YAAI,IAAIA,EAAC,EAAE,OAAO,iBAAiB,OAAO,MAAM,IAAI;AAClD,mBAAS,aAAa,QAAQ,IAAIA,EAAC,CAAC;QAC5C,OAAa;AACL,qBAAW,OAAO,uBAAuB;AACvC,kBAAM,CAACc,MAAKC,IAAG,IAAI,sBAAsB,GAAG;AAC5C,gBAAI,QAAQD,QAAO,QAAQC,MAAK;AAC9B,uBAAS,OAAOD;YAC5B;UACA;QACA;MACA;AACI,aAAO,SAAS,OAAO,EAAE;IAC7B,OAAS;AACL,aAAO;IACX;EACA;AAGA,MAAM,kBAAkB,oBAAI,IAAG;AACxB,WAAS,uBAAuB;AACrC,oBAAgB,MAAK;EACvB;AAEO,WAAS,WAAW,EAAE,gBAAe,GAAI,SAAS,IAAI;AAC3D,UAAM,KAAK,mBAAmB;AAE9B,QAAI,cAAc,gBAAgB,IAAI,EAAE;AACxC,QAAI,gBAAgB,QAAW;AAC7B,oBAAc,oBAAI,IAAG;AACrB,sBAAgB,IAAI,IAAI,WAAW;IACvC;AACE,QAAI,QAAQ,YAAY,IAAI,MAAM;AAClC,QAAI,UAAU,QAAW;AACvB,cAAQ,IAAI,OAAO,GAAG,iBAAiB,EAAE,CAAC,GAAG,MAAM,EAAE;AACrD,kBAAY,IAAI,QAAQ,KAAK;IACjC;AAEE,WAAO;EACT;ACpFA,MAAIE,OAAM,MAAM,KAAK,IAAG;AAAxB,MACE,cAAc;AADhB,MAEE,gBAAgB;AAFlB,MAGE,yBAAyB;AAH3B,MAIE,wBAAwB;AAJ1B,MAKE,qBAAqB;AALvB,MAME;AANF,MAOE,sBAAsB;AAKT,MAAM,WAAN,MAAe;;;;;IAK5B,WAAW,MAAM;AACf,aAAOA;IACX;;;;;;;;IASE,WAAW,IAAIpB,IAAG;AAChB,MAAAoB,OAAMpB;IACV;;;;;;IAOE,WAAW,YAAY,MAAM;AAC3B,oBAAc;IAClB;;;;;;IAOE,WAAW,cAAc;AACvB,aAAO,cAAc,aAAa,WAAW,QAAQ;IACzD;;;;;IAME,WAAW,gBAAgB;AACzB,aAAO;IACX;;;;;IAME,WAAW,cAAc,QAAQ;AAC/B,sBAAgB;IACpB;;;;;IAME,WAAW,yBAAyB;AAClC,aAAO;IACX;;;;;IAME,WAAW,uBAAuB,iBAAiB;AACjD,+BAAyB;IAC7B;;;;;IAME,WAAW,wBAAwB;AACjC,aAAO;IACX;;;;;IAME,WAAW,sBAAsB,gBAAgB;AAC/C,8BAAwB;IAC5B;;;;;;;;;;IAYE,WAAW,sBAAsB;AAC/B,aAAO;IACX;;;;;;;;IASE,WAAW,oBAAoB,cAAc;AAC3C,4BAAsB,qBAAqB,YAAY;IAC3D;;;;;IAME,WAAW,qBAAqB;AAC9B,aAAO;IACX;;;;;;;;;;IAWE,WAAW,mBAAmB,YAAY;AACxC,2BAAqB,aAAa;IACtC;;;;;IAME,WAAW,iBAAiB;AAC1B,aAAO;IACX;;;;;IAME,WAAW,eAAeqB,IAAG;AAC3B,uBAAiBA;IACrB;;;;;IAME,OAAO,cAAc;AACnB,aAAO,WAAU;AACjB,eAAS,WAAU;AACnB,eAAS,WAAU;AACnB,2BAAoB;IACxB;EACA;ACnLe,MAAM,UAAN,MAAc;IAC3B,YAAY,QAAQ,aAAa;AAC/B,WAAK,SAAS;AACd,WAAK,cAAc;IACvB;IAEE,YAAY;AACV,UAAI,KAAK,aAAa;AACpB,eAAO,GAAG,KAAK,MAAM,KAAK,KAAK,WAAW;MAChD,OAAW;AACL,eAAO,KAAK;MAClB;IACA;EACA;ACAA,MAAM,gBAAgB,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAA5E,MACE,aAAa,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAErE,WAAS,eAAe,MAAM,OAAO;AACnC,WAAO,IAAI;MACT;MACA,iBAAiB,KAAK,aAAa,OAAO,KAAK,UAAU,IAAI;IACjE;EACA;AAEO,WAAS,UAAU,MAAM,OAAO,KAAK;AAC1C,UAAMC,KAAI,IAAI,KAAK,KAAK,IAAI,MAAM,QAAQ,GAAG,GAAG,CAAC;AAEjD,QAAI,OAAO,OAAO,QAAQ,GAAG;AAC3B,MAAAA,GAAE,eAAeA,GAAE,eAAc,IAAK,IAAI;IAC9C;AAEE,UAAM,KAAKA,GAAE,UAAS;AAEtB,WAAO,OAAO,IAAI,IAAI;EACxB;AAEA,WAAS,eAAe,MAAM,OAAO,KAAK;AACxC,WAAO,OAAO,WAAW,IAAI,IAAI,aAAa,eAAe,QAAQ,CAAC;EACxE;AAEA,WAAS,iBAAiB,MAAM,SAAS;AACvC,UAAM,QAAQ,WAAW,IAAI,IAAI,aAAa,eAC5C,SAAS,MAAM,UAAU,CAAClB,OAAMA,KAAI,OAAO,GAC3C,MAAM,UAAU,MAAM,MAAM;AAC9B,WAAO,EAAE,OAAO,SAAS,GAAG,IAAG;EACjC;AAEO,WAAS,kBAAkB,YAAY,aAAa;AACzD,YAAS,aAAa,cAAc,KAAK,IAAK;EAChD;AAMO,WAAS,gBAAgB,SAAS,qBAAqB,GAAG,cAAc,GAAG;AAChF,UAAM,EAAE,MAAM,OAAO,IAAG,IAAK,SAC3B,UAAU,eAAe,MAAM,OAAO,GAAG,GACzC,UAAU,kBAAkB,UAAU,MAAM,OAAO,GAAG,GAAG,WAAW;AAEtE,QAAI,aAAa,KAAK,OAAO,UAAU,UAAU,KAAK,sBAAsB,CAAC,GAC3E;AAEF,QAAI,aAAa,GAAG;AAClB,iBAAW,OAAO;AAClB,mBAAa,gBAAgB,UAAU,oBAAoB,WAAW;IAC1E,WAAa,aAAa,gBAAgB,MAAM,oBAAoB,WAAW,GAAG;AAC9E,iBAAW,OAAO;AAClB,mBAAa;IACjB,OAAS;AACL,iBAAW;IACf;AAEE,WAAO,EAAE,UAAU,YAAY,SAAS,GAAG,WAAW,OAAO,EAAC;EAChE;AAEO,WAAS,gBAAgB,UAAU,qBAAqB,GAAG,cAAc,GAAG;AACjF,UAAM,EAAE,UAAU,YAAY,QAAO,IAAK,UACxC,gBAAgB,kBAAkB,UAAU,UAAU,GAAG,kBAAkB,GAAG,WAAW,GACzF,aAAa,WAAW,QAAQ;AAElC,QAAI,UAAU,aAAa,IAAI,UAAU,gBAAgB,IAAI,oBAC3D;AAEF,QAAI,UAAU,GAAG;AACf,aAAO,WAAW;AAClB,iBAAW,WAAW,IAAI;IAC9B,WAAa,UAAU,YAAY;AAC/B,aAAO,WAAW;AAClB,iBAAW,WAAW,QAAQ;IAClC,OAAS;AACL,aAAO;IACX;AAEE,UAAM,EAAE,OAAO,IAAG,IAAK,iBAAiB,MAAM,OAAO;AACrD,WAAO,EAAE,MAAM,OAAO,KAAK,GAAG,WAAW,QAAQ,EAAC;EACpD;AAEO,WAAS,mBAAmB,UAAU;AAC3C,UAAM,EAAE,MAAM,OAAO,IAAG,IAAK;AAC7B,UAAM,UAAU,eAAe,MAAM,OAAO,GAAG;AAC/C,WAAO,EAAE,MAAM,SAAS,GAAG,WAAW,QAAQ,EAAC;EACjD;AAEO,WAAS,mBAAmB,aAAa;AAC9C,UAAM,EAAE,MAAM,QAAO,IAAK;AAC1B,UAAM,EAAE,OAAO,IAAG,IAAK,iBAAiB,MAAM,OAAO;AACrD,WAAO,EAAE,MAAM,OAAO,KAAK,GAAG,WAAW,WAAW,EAAC;EACvD;AAQO,WAAS,oBAAoB,KAAK,KAAK;AAC5C,UAAM,oBACJ,CAAC,YAAY,IAAI,YAAY,KAC7B,CAAC,YAAY,IAAI,eAAe,KAChC,CAAC,YAAY,IAAI,aAAa;AAChC,QAAI,mBAAmB;AACrB,YAAM,iBACJ,CAAC,YAAY,IAAI,OAAO,KAAK,CAAC,YAAY,IAAI,UAAU,KAAK,CAAC,YAAY,IAAI,QAAQ;AAExF,UAAI,gBAAgB;AAClB,cAAM,IAAI;UACR;QACR;MACA;AACI,UAAI,CAAC,YAAY,IAAI,YAAY,EAAG,KAAI,UAAU,IAAI;AACtD,UAAI,CAAC,YAAY,IAAI,eAAe,EAAG,KAAI,aAAa,IAAI;AAC5D,UAAI,CAAC,YAAY,IAAI,aAAa,EAAG,KAAI,WAAW,IAAI;AACxD,aAAO,IAAI;AACX,aAAO,IAAI;AACX,aAAO,IAAI;AACX,aAAO;QACL,oBAAoB,IAAI,sBAAqB;QAC7C,aAAa,IAAI,eAAc;MACrC;IACA,OAAS;AACL,aAAO,EAAE,oBAAoB,GAAG,aAAa,EAAC;IAClD;EACA;AAEO,WAAS,mBAAmB,KAAK,qBAAqB,GAAG,cAAc,GAAG;AAC/E,UAAM,YAAY,UAAU,IAAI,QAAQ,GACtC,YAAY;MACV,IAAI;MACJ;MACA,gBAAgB,IAAI,UAAU,oBAAoB,WAAW;IACnE,GACI,eAAe,eAAe,IAAI,SAAS,GAAG,CAAC;AAEjD,QAAI,CAAC,WAAW;AACd,aAAO,eAAe,YAAY,IAAI,QAAQ;IAClD,WAAa,CAAC,WAAW;AACrB,aAAO,eAAe,QAAQ,IAAI,UAAU;IAChD,WAAa,CAAC,cAAc;AACxB,aAAO,eAAe,WAAW,IAAI,OAAO;IAChD,MAAS,QAAO;EAChB;AAEO,WAAS,sBAAsB,KAAK;AACzC,UAAM,YAAY,UAAU,IAAI,IAAI,GAClC,eAAe,eAAe,IAAI,SAAS,GAAG,WAAW,IAAI,IAAI,CAAC;AAEpE,QAAI,CAAC,WAAW;AACd,aAAO,eAAe,QAAQ,IAAI,IAAI;IAC1C,WAAa,CAAC,cAAc;AACxB,aAAO,eAAe,WAAW,IAAI,OAAO;IAChD,MAAS,QAAO;EAChB;AAEO,WAAS,wBAAwB,KAAK;AAC3C,UAAM,YAAY,UAAU,IAAI,IAAI,GAClC,aAAa,eAAe,IAAI,OAAO,GAAG,EAAE,GAC5C,WAAW,eAAe,IAAI,KAAK,GAAG,YAAY,IAAI,MAAM,IAAI,KAAK,CAAC;AAExE,QAAI,CAAC,WAAW;AACd,aAAO,eAAe,QAAQ,IAAI,IAAI;IAC1C,WAAa,CAAC,YAAY;AACtB,aAAO,eAAe,SAAS,IAAI,KAAK;IAC5C,WAAa,CAAC,UAAU;AACpB,aAAO,eAAe,OAAO,IAAI,GAAG;IACxC,MAAS,QAAO;EAChB;AAEO,WAAS,mBAAmB,KAAK;AACtC,UAAM,EAAE,MAAM,QAAQ,QAAAE,SAAQ,YAAW,IAAK;AAC9C,UAAM,YACF,eAAe,MAAM,GAAG,EAAE,KACzB,SAAS,MAAM,WAAW,KAAKA,YAAW,KAAK,gBAAgB,GAClE,cAAc,eAAe,QAAQ,GAAG,EAAE,GAC1C,cAAc,eAAeA,SAAQ,GAAG,EAAE,GAC1C,mBAAmB,eAAe,aAAa,GAAG,GAAG;AAEvD,QAAI,CAAC,WAAW;AACd,aAAO,eAAe,QAAQ,IAAI;IACtC,WAAa,CAAC,aAAa;AACvB,aAAO,eAAe,UAAU,MAAM;IAC1C,WAAa,CAAC,aAAa;AACvB,aAAO,eAAe,UAAUA,OAAM;IAC1C,WAAa,CAAC,kBAAkB;AAC5B,aAAO,eAAe,eAAe,WAAW;IACpD,MAAS,QAAO;EAChB;AC7LO,WAAS,YAAYiB,IAAG;AAC7B,WAAO,OAAOA,OAAM;EACtB;AAEO,WAASN,UAASM,IAAG;AAC1B,WAAO,OAAOA,OAAM;EACtB;AAEO,WAAS,UAAUA,IAAG;AAC3B,WAAO,OAAOA,OAAM,YAAYA,KAAI,MAAM;EAC5C;AAEO,WAAS,SAASA,IAAG;AAC1B,WAAO,OAAOA,OAAM;EACtB;AAEO,WAAS,OAAOA,IAAG;AACxB,WAAO,OAAO,UAAU,SAAS,KAAKA,EAAC,MAAM;EAC/C;AAIO,WAAS,cAAc;AAC5B,QAAI;AACF,aAAO,OAAO,SAAS,eAAe,CAAC,CAAC,KAAK;IACjD,SAAWlB,IAAG;AACV,aAAO;IACX;EACA;AAEO,WAAS,oBAAoB;AAClC,QAAI;AACF,aACE,OAAO,SAAS,eAChB,CAAC,CAAC,KAAK,WACN,cAAc,KAAK,OAAO,aAAa,iBAAiB,KAAK,OAAO;IAE3E,SAAWA,IAAG;AACV,aAAO;IACX;EACA;AAIO,WAAS,WAAW,OAAO;AAChC,WAAO,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;EAC9C;AAEO,WAAS,OAAO,KAAK,IAAImB,UAAS;AACvC,QAAI,IAAI,WAAW,GAAG;AACpB,aAAO;IACX;AACE,WAAO,IAAI,OAAO,CAAC,MAAM,SAAS;AAChC,YAAM,OAAO,CAAC,GAAG,IAAI,GAAG,IAAI;AAC5B,UAAI,CAAC,MAAM;AACT,eAAO;MACb,WAAeA,SAAQ,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG;AAChD,eAAO;MACb,OAAW;AACL,eAAO;MACb;IACA,GAAK,IAAI,EAAE,CAAC;EACZ;AAEO,WAAS,KAAK,KAAK,MAAM;AAC9B,WAAO,KAAK,OAAO,CAACC,IAAG,MAAM;AAC3B,MAAAA,GAAE,CAAC,IAAI,IAAI,CAAC;AACZ,aAAOA;IACX,GAAK,CAAA,CAAE;EACP;AAEO,WAAS,eAAe,KAAK,MAAM;AACxC,WAAO,OAAO,UAAU,eAAe,KAAK,KAAK,IAAI;EACvD;AAEO,WAAS,qBAAqB,UAAU;AAC7C,QAAI,YAAY,MAAM;AACpB,aAAO;IACX,WAAa,OAAO,aAAa,UAAU;AACvC,YAAM,IAAI,qBAAqB,iCAAiC;IACpE,OAAS;AACL,UACE,CAAC,eAAe,SAAS,UAAU,GAAG,CAAC,KACvC,CAAC,eAAe,SAAS,aAAa,GAAG,CAAC,KAC1C,CAAC,MAAM,QAAQ,SAAS,OAAO,KAC/B,SAAS,QAAQ,KAAK,CAAC,MAAM,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC,GACrD;AACA,cAAM,IAAI,qBAAqB,uBAAuB;MAC5D;AACI,aAAO;QACL,UAAU,SAAS;QACnB,aAAa,SAAS;QACtB,SAAS,MAAM,KAAK,SAAS,OAAO;MAC1C;IACA;EACA;AAIO,WAAS,eAAe,OAAOC,SAAQC,MAAK;AACjD,WAAO,UAAU,KAAK,KAAK,SAASD,WAAU,SAASC;EACzD;AAGO,WAAS,SAAS,GAAG3B,IAAG;AAC7B,WAAO,IAAIA,KAAI,KAAK,MAAM,IAAIA,EAAC;EACjC;AAEO,WAAS,SAAS,OAAOA,KAAI,GAAG;AACrC,UAAM,QAAQ,QAAQ;AACtB,QAAI;AACJ,QAAI,OAAO;AACT,eAAS,OAAO,KAAK,CAAC,OAAO,SAASA,IAAG,GAAG;IAChD,OAAS;AACL,gBAAU,KAAK,OAAO,SAASA,IAAG,GAAG;IACzC;AACE,WAAO;EACT;AAEO,WAAS,aAAa,QAAQ;AACnC,QAAI,YAAY,MAAM,KAAK,WAAW,QAAQ,WAAW,IAAI;AAC3D,aAAO;IACX,OAAS;AACL,aAAO,SAAS,QAAQ,EAAE;IAC9B;EACA;AAEO,WAAS,cAAc,QAAQ;AACpC,QAAI,YAAY,MAAM,KAAK,WAAW,QAAQ,WAAW,IAAI;AAC3D,aAAO;IACX,OAAS;AACL,aAAO,WAAW,MAAM;IAC5B;EACA;AAEO,WAAS,YAAY,UAAU;AAEpC,QAAI,YAAY,QAAQ,KAAK,aAAa,QAAQ,aAAa,IAAI;AACjE,aAAO;IACX,OAAS;AACL,YAAMO,KAAI,WAAW,OAAO,QAAQ,IAAI;AACxC,aAAO,KAAK,MAAMA,EAAC;IACvB;EACA;AAEO,WAAS,QAAQ,QAAQ,QAAQ,WAAW,SAAS;AAC1D,UAAM,SAAS,MAAM;AACrB,YAAQ,UAAQ;MACd,KAAK;AACH,eAAO,SAAS,IACZ,KAAK,KAAK,SAAS,MAAM,IAAI,SAC7B,KAAK,MAAM,SAAS,MAAM,IAAI;MACpC,KAAK;AACH,eAAO,KAAK,MAAM,SAAS,MAAM,IAAI;MACvC,KAAK;AACH,eAAO,KAAK,MAAM,SAAS,MAAM,IAAI;MACvC,KAAK;AACH,eAAO,KAAK,MAAM,SAAS,MAAM,IAAI;MACvC,KAAK;AACH,eAAO,KAAK,KAAK,SAAS,MAAM,IAAI;MACtC;AACE,cAAM,IAAI,WAAW,kBAAkB,QAAQ,kBAAkB;IACvE;EACA;AAIO,WAAS,WAAW,MAAM;AAC/B,WAAO,OAAO,MAAM,MAAM,OAAO,QAAQ,KAAK,OAAO,QAAQ;EAC/D;AAEO,WAAS,WAAW,MAAM;AAC/B,WAAO,WAAW,IAAI,IAAI,MAAM;EAClC;AAEO,WAAS,YAAY,MAAM,OAAO;AACvC,UAAM,WAAW,SAAS,QAAQ,GAAG,EAAE,IAAI,GACzC,UAAU,QAAQ,QAAQ,YAAY;AAExC,QAAI,aAAa,GAAG;AAClB,aAAO,WAAW,OAAO,IAAI,KAAK;IACtC,OAAS;AACL,aAAO,CAAC,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,WAAW,CAAC;IAC1E;EACA;AAGO,WAAS,aAAa,KAAK;AAChC,QAAIe,KAAI,KAAK;MACX,IAAI;MACJ,IAAI,QAAQ;MACZ,IAAI;MACJ,IAAI;MACJ,IAAI;MACJ,IAAI;MACJ,IAAI;IACR;AAGE,QAAI,IAAI,OAAO,OAAO,IAAI,QAAQ,GAAG;AACnC,MAAAA,KAAI,IAAI,KAAKA,EAAC;AAId,MAAAA,GAAE,eAAe,IAAI,MAAM,IAAI,QAAQ,GAAG,IAAI,GAAG;IACrD;AACE,WAAO,CAACA;EACV;AAGA,WAAS,gBAAgB,MAAM,oBAAoB,aAAa;AAC9D,UAAM,QAAQ,kBAAkB,UAAU,MAAM,GAAG,kBAAkB,GAAG,WAAW;AACnF,WAAO,CAAC,QAAQ,qBAAqB;EACvC;AAEO,WAAS,gBAAgB,UAAU,qBAAqB,GAAG,cAAc,GAAG;AACjF,UAAM,aAAa,gBAAgB,UAAU,oBAAoB,WAAW;AAC5E,UAAM,iBAAiB,gBAAgB,WAAW,GAAG,oBAAoB,WAAW;AACpF,YAAQ,WAAW,QAAQ,IAAI,aAAa,kBAAkB;EAChE;AAEO,WAAS,eAAe,MAAM;AACnC,QAAI,OAAO,IAAI;AACb,aAAO;IACX,MAAS,QAAO,OAAO,SAAS,qBAAqB,OAAO,OAAO,MAAO;EAC1E;AAIO,WAAS,cAAc,IAAI,cAAc,QAAQ,WAAW,MAAM;AACvE,UAAM,OAAO,IAAI,KAAK,EAAE,GACtB,WAAW;MACT,WAAW;MACX,MAAM;MACN,OAAO;MACP,KAAK;MACL,MAAM;MACN,QAAQ;IACd;AAEE,QAAI,UAAU;AACZ,eAAS,WAAW;IACxB;AAEE,UAAM,WAAW,EAAE,cAAc,cAAc,GAAG,SAAQ;AAE1D,UAAM,SAAS,IAAI,KAAK,eAAe,QAAQ,QAAQ,EACpD,cAAc,IAAI,EAClB,KAAK,CAACT,OAAMA,GAAE,KAAK,YAAW,MAAO,cAAc;AACtD,WAAO,SAAS,OAAO,QAAQ;EACjC;AAGO,WAAS,aAAa,YAAY,cAAc;AACrD,QAAI,UAAU,SAAS,YAAY,EAAE;AAGrC,QAAI,OAAO,MAAM,OAAO,GAAG;AACzB,gBAAU;IACd;AAEE,UAAM,SAAS,SAAS,cAAc,EAAE,KAAK,GAC3C,eAAe,UAAU,KAAK,OAAO,GAAG,SAAS,EAAE,IAAI,CAAC,SAAS;AACnE,WAAO,UAAU,KAAK;EACxB;AAIO,WAAS,SAAS,OAAO;AAC9B,UAAM,eAAe,OAAO,KAAK;AACjC,QAAI,OAAO,UAAU,aAAa,UAAU,MAAM,CAAC,OAAO,SAAS,YAAY;AAC7E,YAAM,IAAI,qBAAqB,sBAAsB,KAAK,EAAE;AAC9D,WAAO;EACT;AAEO,WAAS,gBAAgB,KAAK,YAAY;AAC/C,UAAM,aAAa,CAAA;AACnB,eAAWe,MAAK,KAAK;AACnB,UAAI,eAAe,KAAKA,EAAC,GAAG;AAC1B,cAAM,IAAI,IAAIA,EAAC;AACf,YAAI,MAAM,UAAa,MAAM,KAAM;AACnC,mBAAW,WAAWA,EAAC,CAAC,IAAI,SAAS,CAAC;MAC5C;IACA;AACE,WAAO;EACT;AASO,WAAS,aAAad,SAAQ,QAAQ;AAC3C,UAAM,QAAQ,KAAK,MAAM,KAAK,IAAIA,UAAS,EAAE,CAAC,GAC5C,UAAU,KAAK,MAAM,KAAK,IAAIA,UAAS,EAAE,CAAC,GAC1Ce,QAAOf,WAAU,IAAI,MAAM;AAE7B,YAAQ,QAAM;MACZ,KAAK;AACH,eAAO,GAAGe,KAAI,GAAG,SAAS,OAAO,CAAC,CAAC,IAAI,SAAS,SAAS,CAAC,CAAC;MAC7D,KAAK;AACH,eAAO,GAAGA,KAAI,GAAG,KAAK,GAAG,UAAU,IAAI,IAAI,OAAO,KAAK,EAAE;MAC3D,KAAK;AACH,eAAO,GAAGA,KAAI,GAAG,SAAS,OAAO,CAAC,CAAC,GAAG,SAAS,SAAS,CAAC,CAAC;MAC5D;AACE,cAAM,IAAI,WAAW,gBAAgB,MAAM,sCAAsC;IACvF;EACA;AAEO,WAAS,WAAW,KAAK;AAC9B,WAAO,KAAK,KAAK,CAAC,QAAQ,UAAU,UAAU,aAAa,CAAC;EAC9D;AC9TO,MAAM,aAAa;IACxB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;EACF;AAEO,MAAM,cAAc;IACzB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;EACF;AAEO,MAAM,eAAe,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAEhF,WAAS,OAAO,QAAQ;AAC7B,YAAQ,QAAM;MACZ,KAAK;AACH,eAAO,CAAC,GAAG,YAAY;MACzB,KAAK;AACH,eAAO,CAAC,GAAG,WAAW;MACxB,KAAK;AACH,eAAO,CAAC,GAAG,UAAU;MACvB,KAAK;AACH,eAAO,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,IAAI;MACvE,KAAK;AACH,eAAO,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;MAChF;AACE,eAAO;IACb;EACA;AAEO,MAAM,eAAe;IAC1B;IACA;IACA;IACA;IACA;IACA;IACA;EACF;AAEO,MAAM,gBAAgB,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAEtE,MAAM,iBAAiB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAEzD,WAAS,SAAS,QAAQ;AAC/B,YAAQ,QAAM;MACZ,KAAK;AACH,eAAO,CAAC,GAAG,cAAc;MAC3B,KAAK;AACH,eAAO,CAAC,GAAG,aAAa;MAC1B,KAAK;AACH,eAAO,CAAC,GAAG,YAAY;MACzB,KAAK;AACH,eAAO,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;MAC3C;AACE,eAAO;IACb;EACA;AAEO,MAAM,YAAY,CAAC,MAAM,IAAI;AAE7B,MAAM,WAAW,CAAC,iBAAiB,aAAa;AAEhD,MAAM,YAAY,CAAC,MAAM,IAAI;AAE7B,MAAM,aAAa,CAAC,KAAK,GAAG;AAE5B,WAAS,KAAK,QAAQ;AAC3B,YAAQ,QAAM;MACZ,KAAK;AACH,eAAO,CAAC,GAAG,UAAU;MACvB,KAAK;AACH,eAAO,CAAC,GAAG,SAAS;MACtB,KAAK;AACH,eAAO,CAAC,GAAG,QAAQ;MACrB;AACE,eAAO;IACb;EACA;AAEO,WAAS,oBAAoB,IAAI;AACtC,WAAO,UAAU,GAAG,OAAO,KAAK,IAAI,CAAC;EACvC;AAEO,WAAS,mBAAmB,IAAI,QAAQ;AAC7C,WAAO,SAAS,MAAM,EAAE,GAAG,UAAU,CAAC;EACxC;AAEO,WAAS,iBAAiB,IAAI,QAAQ;AAC3C,WAAO,OAAO,MAAM,EAAE,GAAG,QAAQ,CAAC;EACpC;AAEO,WAAS,eAAe,IAAI,QAAQ;AACzC,WAAO,KAAK,MAAM,EAAE,GAAG,OAAO,IAAI,IAAI,CAAC;EACzC;AAEO,WAAS,mBAAmB,MAAM,OAAO,UAAU,UAAU,SAAS,OAAO;AAClF,UAAM,QAAQ;MACZ,OAAO,CAAC,QAAQ,KAAK;MACrB,UAAU,CAAC,WAAW,MAAM;MAC5B,QAAQ,CAAC,SAAS,KAAK;MACvB,OAAO,CAAC,QAAQ,KAAK;MACrB,MAAM,CAAC,OAAO,OAAO,MAAM;MAC3B,OAAO,CAAC,QAAQ,KAAK;MACrB,SAAS,CAAC,UAAU,MAAM;MAC1B,SAAS,CAAC,UAAU,MAAM;IAC9B;AAEE,UAAM,WAAW,CAAC,SAAS,WAAW,SAAS,EAAE,QAAQ,IAAI,MAAM;AAEnE,QAAI,YAAY,UAAU,UAAU;AAClC,YAAM,QAAQ,SAAS;AACvB,cAAQ,OAAK;QACX,KAAK;AACH,iBAAO,QAAQ,aAAa,QAAQ,MAAM,IAAI,EAAE,CAAC,CAAC;QACpD,KAAK;AACH,iBAAO,QAAQ,cAAc,QAAQ,MAAM,IAAI,EAAE,CAAC,CAAC;QACrD,KAAK;AACH,iBAAO,QAAQ,UAAU,QAAQ,MAAM,IAAI,EAAE,CAAC,CAAC;MAEvD;IACA;AAEE,UAAM,WAAW,OAAO,GAAG,OAAO,EAAE,KAAK,QAAQ,GAC/C,WAAW,KAAK,IAAI,KAAK,GACzB,WAAW,aAAa,GACxB,WAAW,MAAM,IAAI,GACrB,UAAU,SACN,WACE,SAAS,CAAC,IACV,SAAS,CAAC,KAAK,SAAS,CAAC,IAC3B,WACA,MAAM,IAAI,EAAE,CAAC,IACb;AACN,WAAO,WAAW,GAAG,QAAQ,IAAI,OAAO,SAAS,MAAM,QAAQ,IAAI,OAAO;EAC5E;ACjKA,WAAS,gBAAgB,QAAQ,eAAe;AAC9C,QAAI5B,KAAI;AACR,eAAW,SAAS,QAAQ;AAC1B,UAAI,MAAM,SAAS;AACjB,QAAAA,MAAK,MAAM;MACjB,OAAW;AACL,QAAAA,MAAK,cAAc,MAAM,GAAG;MAClC;IACA;AACE,WAAOA;EACT;AAEA,MAAM,yBAAyB;IAC7B,GAAG6B;IACH,IAAIC;IACJ,KAAKC;IACL,MAAMC;IACN,GAAGC;IACH,IAAIC;IACJ,KAAKC;IACL,MAAMC;IACN,GAAGC;IACH,IAAIC;IACJ,KAAKC;IACL,MAAMC;IACN,GAAGC;IACH,IAAIC;IACJ,KAAKC;IACL,MAAMC;IACN,GAAGC;IACH,IAAIC;IACJ,KAAKC;IACL,MAAMC;EACR;AAMe,MAAM,YAAN,MAAM,WAAU;IAC7B,OAAO,OAAO,QAAQ,OAAO,CAAA,GAAI;AAC/B,aAAO,IAAI,WAAU,QAAQ,IAAI;IACrC;IAEE,OAAO,YAAY,KAAK;AAItB,UAAI,UAAU,MACZ,cAAc,IACd,YAAY;AACd,YAAM,SAAS,CAAA;AACf,eAAS7C,KAAI,GAAGA,KAAI,IAAI,QAAQA,MAAK;AACnC,cAAM8C,KAAI,IAAI,OAAO9C,EAAC;AACtB,YAAI8C,OAAM,KAAK;AAEb,cAAI,YAAY,SAAS,KAAK,WAAW;AACvC,mBAAO,KAAK;cACV,SAAS,aAAa,QAAQ,KAAK,WAAW;cAC9C,KAAK,gBAAgB,KAAK,MAAM;YAC5C,CAAW;UACX;AACQ,oBAAU;AACV,wBAAc;AACd,sBAAY,CAAC;QACrB,WAAiB,WAAW;AACpB,yBAAeA;QACvB,WAAiBA,OAAM,SAAS;AACxB,yBAAeA;QACvB,OAAa;AACL,cAAI,YAAY,SAAS,GAAG;AAC1B,mBAAO,KAAK,EAAE,SAAS,QAAQ,KAAK,WAAW,GAAG,KAAK,YAAW,CAAE;UAC9E;AACQ,wBAAcA;AACd,oBAAUA;QAClB;MACA;AAEI,UAAI,YAAY,SAAS,GAAG;AAC1B,eAAO,KAAK,EAAE,SAAS,aAAa,QAAQ,KAAK,WAAW,GAAG,KAAK,YAAW,CAAE;MACvF;AAEI,aAAO;IACX;IAEE,OAAO,uBAAuB,OAAO;AACnC,aAAO,uBAAuB,KAAK;IACvC;IAEE,YAAY,QAAQ,YAAY;AAC9B,WAAK,OAAO;AACZ,WAAK,MAAM;AACX,WAAK,YAAY;IACrB;IAEE,wBAAwB,IAAI,MAAM;AAChC,UAAI,KAAK,cAAc,MAAM;AAC3B,aAAK,YAAY,KAAK,IAAI,kBAAiB;MACjD;AACI,YAAM,KAAK,KAAK,UAAU,YAAY,IAAI,EAAE,GAAG,KAAK,MAAM,GAAG,KAAI,CAAE;AACnE,aAAO,GAAG,OAAM;IACpB;IAEE,YAAY,IAAI,OAAO,CAAA,GAAI;AACzB,aAAO,KAAK,IAAI,YAAY,IAAI,EAAE,GAAG,KAAK,MAAM,GAAG,KAAI,CAAE;IAC7D;IAEE,eAAe,IAAI,MAAM;AACvB,aAAO,KAAK,YAAY,IAAI,IAAI,EAAE,OAAM;IAC5C;IAEE,oBAAoB,IAAI,MAAM;AAC5B,aAAO,KAAK,YAAY,IAAI,IAAI,EAAE,cAAa;IACnD;IAEE,eAAe,UAAU,MAAM;AAC7B,YAAM,KAAK,KAAK,YAAY,SAAS,OAAO,IAAI;AAChD,aAAO,GAAG,IAAI,YAAY,SAAS,MAAM,SAAQ,GAAI,SAAS,IAAI,SAAQ,CAAE;IAChF;IAEE,gBAAgB,IAAI,MAAM;AACxB,aAAO,KAAK,YAAY,IAAI,IAAI,EAAE,gBAAe;IACrD;IAEE,IAAIlD,IAAGmD,KAAI,GAAG,cAAc,QAAW;AAErC,UAAI,KAAK,KAAK,aAAa;AACzB,eAAO,SAASnD,IAAGmD,EAAC;MAC1B;AAEI,YAAM,OAAO,EAAE,GAAG,KAAK,KAAI;AAE3B,UAAIA,KAAI,GAAG;AACT,aAAK,QAAQA;MACnB;AACI,UAAI,aAAa;AACf,aAAK,cAAc;MACzB;AAEI,aAAO,KAAK,IAAI,gBAAgB,IAAI,EAAE,OAAOnD,EAAC;IAClD;IAEE,yBAAyB,IAAI,KAAK;AAChC,YAAM,eAAe,KAAK,IAAI,YAAW,MAAO,MAC9C,uBAAuB,KAAK,IAAI,kBAAkB,KAAK,IAAI,mBAAmB,WAC9E,SAAS,CAAC,MAAM,YAAY,KAAK,IAAI,QAAQ,IAAI,MAAM,OAAO,GAC9DoD,gBAAe,CAAC,SAAS;AACvB,YAAI,GAAG,iBAAiB,GAAG,WAAW,KAAK,KAAK,QAAQ;AACtD,iBAAO;QACjB;AAEQ,eAAO,GAAG,UAAU,GAAG,KAAK,aAAa,GAAG,IAAI,KAAK,MAAM,IAAI;MACvE,GACM,WAAW,MACT,eACIC,oBAA4B,EAAE,IAC9B,OAAO,EAAE,MAAM,WAAW,WAAW,MAAK,GAAI,WAAW,GAC/D,QAAQ,CAAC,QAAQ,eACf,eACIC,iBAAyB,IAAI,MAAM,IACnC,OAAO,aAAa,EAAE,OAAO,OAAM,IAAK,EAAE,OAAO,QAAQ,KAAK,UAAS,GAAI,OAAO,GACxF,UAAU,CAAC,QAAQ,eACjB,eACIC,mBAA2B,IAAI,MAAM,IACrC;QACE,aAAa,EAAE,SAAS,OAAM,IAAK,EAAE,SAAS,QAAQ,OAAO,QAAQ,KAAK,UAAS;QACnF;MACd,GACM,aAAa,CAAC,UAAU;AACtB,cAAM,aAAa,WAAU,uBAAuB,KAAK;AACzD,YAAI,YAAY;AACd,iBAAO,KAAK,wBAAwB,IAAI,UAAU;QAC5D,OAAe;AACL,iBAAO;QACjB;MACA,GACM,MAAM,CAAC,WACL,eAAeC,eAAuB,IAAI,MAAM,IAAI,OAAO,EAAE,KAAK,OAAM,GAAI,KAAK,GACnF,gBAAgB,CAAC,UAAU;AAEzB,gBAAQ,OAAK;;UAEX,KAAK;AACH,mBAAO,KAAK,IAAI,GAAG,WAAW;UAChC,KAAK;;UAEL,KAAK;AACH,mBAAO,KAAK,IAAI,GAAG,aAAa,CAAC;;UAEnC,KAAK;AACH,mBAAO,KAAK,IAAI,GAAG,MAAM;UAC3B,KAAK;AACH,mBAAO,KAAK,IAAI,GAAG,QAAQ,CAAC;;UAE9B,KAAK;AACH,mBAAO,KAAK,IAAI,KAAK,MAAM,GAAG,cAAc,EAAE,GAAG,CAAC;UACpD,KAAK;AACH,mBAAO,KAAK,IAAI,KAAK,MAAM,GAAG,cAAc,GAAG,CAAC;;UAElD,KAAK;AACH,mBAAO,KAAK,IAAI,GAAG,MAAM;UAC3B,KAAK;AACH,mBAAO,KAAK,IAAI,GAAG,QAAQ,CAAC;;UAE9B,KAAK;AACH,mBAAO,KAAK,IAAI,GAAG,OAAO,OAAO,IAAI,KAAK,GAAG,OAAO,EAAE;UACxD,KAAK;AACH,mBAAO,KAAK,IAAI,GAAG,OAAO,OAAO,IAAI,KAAK,GAAG,OAAO,IAAI,CAAC;UAC3D,KAAK;AACH,mBAAO,KAAK,IAAI,GAAG,IAAI;UACzB,KAAK;AACH,mBAAO,KAAK,IAAI,GAAG,MAAM,CAAC;;UAE5B,KAAK;AAEH,mBAAOJ,cAAa,EAAE,QAAQ,UAAU,QAAQ,KAAK,KAAK,OAAM,CAAE;UACpE,KAAK;AAEH,mBAAOA,cAAa,EAAE,QAAQ,SAAS,QAAQ,KAAK,KAAK,OAAM,CAAE;UACnE,KAAK;AAEH,mBAAOA,cAAa,EAAE,QAAQ,UAAU,QAAQ,KAAK,KAAK,OAAM,CAAE;UACpE,KAAK;AAEH,mBAAO,GAAG,KAAK,WAAW,GAAG,IAAI,EAAE,QAAQ,SAAS,QAAQ,KAAK,IAAI,OAAM,CAAE;UAC/E,KAAK;AAEH,mBAAO,GAAG,KAAK,WAAW,GAAG,IAAI,EAAE,QAAQ,QAAQ,QAAQ,KAAK,IAAI,OAAM,CAAE;;UAE9E,KAAK;AAEH,mBAAO,GAAG;;UAEZ,KAAK;AACH,mBAAO,SAAQ;;UAEjB,KAAK;AACH,mBAAO,uBAAuB,OAAO,EAAE,KAAK,UAAS,GAAI,KAAK,IAAI,KAAK,IAAI,GAAG,GAAG;UACnF,KAAK;AACH,mBAAO,uBAAuB,OAAO,EAAE,KAAK,UAAS,GAAI,KAAK,IAAI,KAAK,IAAI,GAAG,KAAK,CAAC;;UAEtF,KAAK;AAEH,mBAAO,KAAK,IAAI,GAAG,OAAO;UAC5B,KAAK;AAEH,mBAAO,QAAQ,SAAS,IAAI;UAC9B,KAAK;AAEH,mBAAO,QAAQ,QAAQ,IAAI;UAC7B,KAAK;AAEH,mBAAO,QAAQ,UAAU,IAAI;;UAE/B,KAAK;AAEH,mBAAO,KAAK,IAAI,GAAG,OAAO;UAC5B,KAAK;AAEH,mBAAO,QAAQ,SAAS,KAAK;UAC/B,KAAK;AAEH,mBAAO,QAAQ,QAAQ,KAAK;UAC9B,KAAK;AAEH,mBAAO,QAAQ,UAAU,KAAK;;UAEhC,KAAK;AAEH,mBAAO,uBACH,OAAO,EAAE,OAAO,WAAW,KAAK,UAAS,GAAI,OAAO,IACpD,KAAK,IAAI,GAAG,KAAK;UACvB,KAAK;AAEH,mBAAO,uBACH,OAAO,EAAE,OAAO,WAAW,KAAK,UAAS,GAAI,OAAO,IACpD,KAAK,IAAI,GAAG,OAAO,CAAC;UAC1B,KAAK;AAEH,mBAAO,MAAM,SAAS,IAAI;UAC5B,KAAK;AAEH,mBAAO,MAAM,QAAQ,IAAI;UAC3B,KAAK;AAEH,mBAAO,MAAM,UAAU,IAAI;;UAE7B,KAAK;AAEH,mBAAO,uBACH,OAAO,EAAE,OAAO,UAAS,GAAI,OAAO,IACpC,KAAK,IAAI,GAAG,KAAK;UACvB,KAAK;AAEH,mBAAO,uBACH,OAAO,EAAE,OAAO,UAAS,GAAI,OAAO,IACpC,KAAK,IAAI,GAAG,OAAO,CAAC;UAC1B,KAAK;AAEH,mBAAO,MAAM,SAAS,KAAK;UAC7B,KAAK;AAEH,mBAAO,MAAM,QAAQ,KAAK;UAC5B,KAAK;AAEH,mBAAO,MAAM,UAAU,KAAK;;UAE9B,KAAK;AAEH,mBAAO,uBAAuB,OAAO,EAAE,MAAM,UAAS,GAAI,MAAM,IAAI,KAAK,IAAI,GAAG,IAAI;UACtF,KAAK;AAEH,mBAAO,uBACH,OAAO,EAAE,MAAM,UAAS,GAAI,MAAM,IAClC,KAAK,IAAI,GAAG,KAAK,SAAQ,EAAG,MAAM,EAAE,GAAG,CAAC;UAC9C,KAAK;AAEH,mBAAO,uBACH,OAAO,EAAE,MAAM,UAAS,GAAI,MAAM,IAClC,KAAK,IAAI,GAAG,MAAM,CAAC;UACzB,KAAK;AAEH,mBAAO,uBACH,OAAO,EAAE,MAAM,UAAS,GAAI,MAAM,IAClC,KAAK,IAAI,GAAG,MAAM,CAAC;;UAEzB,KAAK;AAEH,mBAAO,IAAI,OAAO;UACpB,KAAK;AAEH,mBAAO,IAAI,MAAM;UACnB,KAAK;AACH,mBAAO,IAAI,QAAQ;UACrB,KAAK;AACH,mBAAO,KAAK,IAAI,GAAG,SAAS,SAAQ,EAAG,MAAM,EAAE,GAAG,CAAC;UACrD,KAAK;AACH,mBAAO,KAAK,IAAI,GAAG,UAAU,CAAC;UAChC,KAAK;AACH,mBAAO,KAAK,IAAI,GAAG,UAAU;UAC/B,KAAK;AACH,mBAAO,KAAK,IAAI,GAAG,YAAY,CAAC;UAClC,KAAK;AACH,mBAAO,KAAK,IAAI,GAAG,eAAe;UACpC,KAAK;AACH,mBAAO,KAAK,IAAI,GAAG,iBAAiB,CAAC;UACvC,KAAK;AACH,mBAAO,KAAK,IAAI,GAAG,cAAc,SAAQ,EAAG,MAAM,EAAE,GAAG,CAAC;UAC1D,KAAK;AACH,mBAAO,KAAK,IAAI,GAAG,eAAe,CAAC;UACrC,KAAK;AACH,mBAAO,KAAK,IAAI,GAAG,OAAO;UAC5B,KAAK;AACH,mBAAO,KAAK,IAAI,GAAG,SAAS,CAAC;UAC/B,KAAK;AAEH,mBAAO,KAAK,IAAI,GAAG,OAAO;UAC5B,KAAK;AAEH,mBAAO,KAAK,IAAI,GAAG,SAAS,CAAC;UAC/B,KAAK;AACH,mBAAO,KAAK,IAAI,KAAK,MAAM,GAAG,KAAK,GAAI,CAAC;UAC1C,KAAK;AACH,mBAAO,KAAK,IAAI,GAAG,EAAE;UACvB;AACE,mBAAO,WAAW,KAAK;QACnC;MACA;AAEI,aAAO,gBAAgB,WAAU,YAAY,GAAG,GAAG,aAAa;IACpE;IAEE,yBAAyB,KAAK,KAAK;AACjC,YAAM,gBAAgB,KAAK,KAAK,aAAa,wBAAwB,KAAK;AAC1E,YAAM,eAAe,CAAC,UAAU;AAC5B,gBAAQ,MAAM,CAAC,GAAC;UACd,KAAK;AACH,mBAAO;UACT,KAAK;AACH,mBAAO;UACT,KAAK;AACH,mBAAO;UACT,KAAK;AACH,mBAAO;UACT,KAAK;AACH,mBAAO;UACT,KAAK;AACH,mBAAO;UACT,KAAK;AACH,mBAAO;UACT,KAAK;AACH,mBAAO;UACT;AACE,mBAAO;QACnB;MACA,GACM,gBAAgB,CAAC,QAAQ,SAAS,CAAC,UAAU;AAC3C,cAAM,SAAS,aAAa,KAAK;AACjC,YAAI,QAAQ;AACV,gBAAM,kBACJ,KAAK,sBAAsB,WAAW,KAAK,cAAc,gBAAgB;AAC3E,cAAI;AACJ,cAAI,KAAK,KAAK,aAAa,yBAAyB,WAAW,KAAK,aAAa;AAC/E,0BAAc;UAC1B,WAAqB,KAAK,KAAK,aAAa,OAAO;AACvC,0BAAc;UAC1B,OAAiB;AAEL,0BAAc;UAC1B;AACU,iBAAO,KAAK,IAAI,OAAO,IAAI,MAAM,IAAI,iBAAiB,MAAM,QAAQ,WAAW;QACzF,OAAe;AACL,iBAAO;QACjB;MACA,GACM,SAAS,WAAU,YAAY,GAAG,GAClC,aAAa,OAAO;QAClB,CAAC,OAAO,EAAE,SAAS,IAAG,MAAQ,UAAU,QAAQ,MAAM,OAAO,GAAG;QAChE,CAAA;MACR,GACM,YAAY,IAAI,QAAQ,GAAG,WAAW,IAAI,YAAY,EAAE,OAAO,CAAC/B,OAAMA,EAAC,CAAC,GACxE,eAAe;QACb,oBAAoB,YAAY;;;QAGhC,aAAa,OAAO,KAAK,UAAU,MAAM,EAAE,CAAC;MACpD;AACI,aAAO,gBAAgB,QAAQ,cAAc,WAAW,YAAY,CAAC;IACzE;EACA;AC3ZA,MAAM,YAAY;AAElB,WAAS,kBAAkB,SAAS;AAClC,UAAM,OAAO,QAAQ,OAAO,CAACd,IAAGQ,OAAMR,KAAIQ,GAAE,QAAQ,EAAE;AACtD,WAAO,OAAO,IAAI,IAAI,GAAG;EAC3B;AAEA,WAAS,qBAAqB,YAAY;AACxC,WAAO,CAACF,OACN,WACG;MACC,CAAC,CAAC,YAAY,YAAY,MAAM,GAAG,OAAO;AACxC,cAAM,CAAC,KAAK,MAAM,IAAI,IAAI,GAAGA,IAAG,MAAM;AACtC,eAAO,CAAC,EAAE,GAAG,YAAY,GAAG,IAAG,GAAI,QAAQ,YAAY,IAAI;MACrE;MACQ,CAAC,CAAA,GAAI,MAAM,CAAC;IACpB,EACO,MAAM,GAAG,CAAC;EACjB;AAEA,WAAS4C,OAAMxD,OAAM,UAAU;AAC7B,QAAIA,MAAK,MAAM;AACb,aAAO,CAAC,MAAM,IAAI;IACtB;AAEE,eAAW,CAAC,OAAO,SAAS,KAAK,UAAU;AACzC,YAAMY,KAAI,MAAM,KAAKZ,EAAC;AACtB,UAAIY,IAAG;AACL,eAAO,UAAUA,EAAC;MACxB;IACA;AACE,WAAO,CAAC,MAAM,IAAI;EACpB;AAEA,WAAS,eAAe,MAAM;AAC5B,WAAO,CAAC6C,QAAO,WAAW;AACxB,YAAM,MAAM,CAAA;AACZ,UAAItD;AAEJ,WAAKA,KAAI,GAAGA,KAAI,KAAK,QAAQA,MAAK;AAChC,YAAI,KAAKA,EAAC,CAAC,IAAI,aAAasD,OAAM,SAAStD,EAAC,CAAC;MACnD;AACI,aAAO,CAAC,KAAK,MAAM,SAASA,EAAC;IACjC;EACA;AAGA,MAAM,cAAc;AACpB,MAAM,kBAAkB,MAAM,YAAY,MAAM,WAAW,UAAU,MAAM;AAC3E,MAAM,mBAAmB;AACzB,MAAM,eAAe,OAAO,GAAG,iBAAiB,MAAM,GAAG,eAAe,EAAE;AAC1E,MAAM,wBAAwB,OAAO,UAAU,aAAa,MAAM,IAAI;AACtE,MAAM,cAAc;AACpB,MAAM,eAAe;AACrB,MAAM,kBAAkB;AACxB,MAAM,qBAAqB,YAAY,YAAY,cAAc,SAAS;AAC1E,MAAM,wBAAwB,YAAY,QAAQ,SAAS;AAC3D,MAAM,cAAc;AACpB,MAAM,eAAe;IACnB,GAAG,iBAAiB,MAAM,QAAQ,YAAY,MAAM,KAAK,UAAU,MAAM;EAC3E;AACA,MAAM,wBAAwB,OAAO,OAAO,aAAa,MAAM,IAAI;AAEnE,WAAS,IAAIsD,QAAO,KAAK,UAAU;AACjC,UAAM7C,KAAI6C,OAAM,GAAG;AACnB,WAAO,YAAY7C,EAAC,IAAI,WAAW,aAAaA,EAAC;EACnD;AAEA,WAAS,cAAc6C,QAAO,QAAQ;AACpC,UAAM,OAAO;MACX,MAAM,IAAIA,QAAO,MAAM;MACvB,OAAO,IAAIA,QAAO,SAAS,GAAG,CAAC;MAC/B,KAAK,IAAIA,QAAO,SAAS,GAAG,CAAC;IACjC;AAEE,WAAO,CAAC,MAAM,MAAM,SAAS,CAAC;EAChC;AAEA,WAAS,eAAeA,QAAO,QAAQ;AACrC,UAAM,OAAO;MACX,OAAO,IAAIA,QAAO,QAAQ,CAAC;MAC3B,SAAS,IAAIA,QAAO,SAAS,GAAG,CAAC;MACjC,SAAS,IAAIA,QAAO,SAAS,GAAG,CAAC;MACjC,cAAc,YAAYA,OAAM,SAAS,CAAC,CAAC;IAC/C;AAEE,WAAO,CAAC,MAAM,MAAM,SAAS,CAAC;EAChC;AAEA,WAAS,iBAAiBA,QAAO,QAAQ;AACvC,UAAM,QAAQ,CAACA,OAAM,MAAM,KAAK,CAACA,OAAM,SAAS,CAAC,GAC/C,aAAa,aAAaA,OAAM,SAAS,CAAC,GAAGA,OAAM,SAAS,CAAC,CAAC,GAC9D,OAAO,QAAQ,OAAO,gBAAgB,SAAS,UAAU;AAC3D,WAAO,CAAC,CAAA,GAAI,MAAM,SAAS,CAAC;EAC9B;AAEA,WAAS,gBAAgBA,QAAO,QAAQ;AACtC,UAAM,OAAOA,OAAM,MAAM,IAAI,SAAS,OAAOA,OAAM,MAAM,CAAC,IAAI;AAC9D,WAAO,CAAC,CAAA,GAAI,MAAM,SAAS,CAAC;EAC9B;AAIA,MAAM,cAAc,OAAO,MAAM,iBAAiB,MAAM,GAAG;AAI3D,MAAM,cACJ;AAEF,WAAS,mBAAmBA,QAAO;AACjC,UAAM,CAACzD,IAAG,SAAS,UAAU,SAAS,QAAQ,SAAS,WAAW,WAAW,eAAe,IAC1FyD;AAEF,UAAM,oBAAoBzD,GAAE,CAAC,MAAM;AACnC,UAAM,kBAAkB,aAAa,UAAU,CAAC,MAAM;AAEtD,UAAM,cAAc,CAAC,KAAK,QAAQ,UAChC,QAAQ,WAAc,SAAU,OAAO,qBAAsB,CAAC,MAAM;AAEtE,WAAO;MACL;QACE,OAAO,YAAY,cAAc,OAAO,CAAC;QACzC,QAAQ,YAAY,cAAc,QAAQ,CAAC;QAC3C,OAAO,YAAY,cAAc,OAAO,CAAC;QACzC,MAAM,YAAY,cAAc,MAAM,CAAC;QACvC,OAAO,YAAY,cAAc,OAAO,CAAC;QACzC,SAAS,YAAY,cAAc,SAAS,CAAC;QAC7C,SAAS,YAAY,cAAc,SAAS,GAAG,cAAc,IAAI;QACjE,cAAc,YAAY,YAAY,eAAe,GAAG,eAAe;MAC7E;IACA;EACA;AAKA,MAAM,aAAa;IACjB,KAAK;IACL,KAAK,KAAK;IACV,KAAK,KAAK;IACV,KAAK,KAAK;IACV,KAAK,KAAK;IACV,KAAK,KAAK;IACV,KAAK,KAAK;IACV,KAAK,KAAK;IACV,KAAK,KAAK;EACZ;AAEA,WAAS,YAAY,YAAY,SAAS,UAAU,QAAQ,SAAS,WAAW,WAAW;AACzF,UAAM,SAAS;MACb,MAAM,QAAQ,WAAW,IAAI,eAAe,aAAa,OAAO,CAAC,IAAI,aAAa,OAAO;MACzF,OAAO0D,YAAoB,QAAQ,QAAQ,IAAI;MAC/C,KAAK,aAAa,MAAM;MACxB,MAAM,aAAa,OAAO;MAC1B,QAAQ,aAAa,SAAS;IAClC;AAEE,QAAI,UAAW,QAAO,SAAS,aAAa,SAAS;AACrD,QAAI,YAAY;AACd,aAAO,UACL,WAAW,SAAS,IAChBC,aAAqB,QAAQ,UAAU,IAAI,IAC3CC,cAAsB,QAAQ,UAAU,IAAI;IACtD;AAEE,WAAO;EACT;AAGA,MAAM,UACJ;AAEF,WAAS,eAAeH,QAAO;AAC7B,UAAM;MACR;MACM;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;IACN,IAAQA,QACJ,SAAS,YAAY,YAAY,SAAS,UAAU,QAAQ,SAAS,WAAW,SAAS;AAE3F,QAAI5C;AACJ,QAAI,WAAW;AACb,MAAAA,UAAS,WAAW,SAAS;IACjC,WAAa,WAAW;AACpB,MAAAA,UAAS;IACb,OAAS;AACL,MAAAA,UAAS,aAAa,YAAY,YAAY;IAClD;AAEE,WAAO,CAAC,QAAQ,IAAI,gBAAgBA,OAAM,CAAC;EAC7C;AAEA,WAAS,kBAAkBb,IAAG;AAE5B,WAAOA,GACJ,QAAQ,sBAAsB,GAAG,EACjC,QAAQ,YAAY,GAAG,EACvB,KAAI;EACT;AAIA,MAAM,UACF;AADJ,MAEE,SACE;AAHJ,MAIE,QACE;AAEJ,WAAS,oBAAoByD,QAAO;AAClC,UAAM,CAAA,EAAG,YAAY,QAAQ,UAAU,SAAS,SAAS,WAAW,SAAS,IAAIA,QAC/E,SAAS,YAAY,YAAY,SAAS,UAAU,QAAQ,SAAS,WAAW,SAAS;AAC3F,WAAO,CAAC,QAAQ,gBAAgB,WAAW;EAC7C;AAEA,WAAS,aAAaA,QAAO;AAC3B,UAAM,CAAA,EAAG,YAAY,UAAU,QAAQ,SAAS,WAAW,WAAW,OAAO,IAAIA,QAC/E,SAAS,YAAY,YAAY,SAAS,UAAU,QAAQ,SAAS,WAAW,SAAS;AAC3F,WAAO,CAAC,QAAQ,gBAAgB,WAAW;EAC7C;AAEA,MAAM,+BAA+B,eAAe,aAAa,qBAAqB;AACtF,MAAM,gCAAgC,eAAe,cAAc,qBAAqB;AACxF,MAAM,mCAAmC,eAAe,iBAAiB,qBAAqB;AAC9F,MAAM,uBAAuB,eAAe,YAAY;AAExD,MAAM,6BAA6B;IACjC;IACA;IACA;IACA;EACF;AACA,MAAM,8BAA8B;IAClC;IACA;IACA;IACA;EACF;AACA,MAAM,+BAA+B;IACnC;IACA;IACA;IACA;EACF;AACA,MAAM,0BAA0B;IAC9B;IACA;IACA;EACF;AAMO,WAAS,aAAazD,IAAG;AAC9B,WAAOwD;MACLxD;MACA,CAAC,8BAA8B,0BAA0B;MACzD,CAAC,+BAA+B,2BAA2B;MAC3D,CAAC,kCAAkC,4BAA4B;MAC/D,CAAC,sBAAsB,uBAAuB;IAClD;EACA;AAEO,WAAS,iBAAiBA,IAAG;AAClC,WAAOwD,OAAM,kBAAkBxD,EAAC,GAAG,CAAC,SAAS,cAAc,CAAC;EAC9D;AAEO,WAAS,cAAcA,IAAG;AAC/B,WAAOwD;MACLxD;MACA,CAAC,SAAS,mBAAmB;MAC7B,CAAC,QAAQ,mBAAmB;MAC5B,CAAC,OAAO,YAAY;IACxB;EACA;AAEO,WAAS,iBAAiBA,IAAG;AAClC,WAAOwD,OAAMxD,IAAG,CAAC,aAAa,kBAAkB,CAAC;EACnD;AAEA,MAAM,qBAAqB,kBAAkB,cAAc;AAEpD,WAAS,iBAAiBA,IAAG;AAClC,WAAOwD,OAAMxD,IAAG,CAAC,aAAa,kBAAkB,CAAC;EACnD;AAEA,MAAM,+BAA+B,eAAe,aAAa,qBAAqB;AACtF,MAAM,uBAAuB,eAAe,YAAY;AAExD,MAAM,kCAAkC;IACtC;IACA;IACA;EACF;AAEO,WAAS,SAASA,IAAG;AAC1B,WAAOwD;MACLxD;MACA,CAAC,8BAA8B,0BAA0B;MACzD,CAAC,sBAAsB,+BAA+B;IAC1D;EACA;AC9TA,MAAM6D,YAAU;AAGT,MAAM,iBAAiB;IAC1B,OAAO;MACL,MAAM;MACN,OAAO,IAAI;MACX,SAAS,IAAI,KAAK;MAClB,SAAS,IAAI,KAAK,KAAK;MACvB,cAAc,IAAI,KAAK,KAAK,KAAK;IACvC;IACI,MAAM;MACJ,OAAO;MACP,SAAS,KAAK;MACd,SAAS,KAAK,KAAK;MACnB,cAAc,KAAK,KAAK,KAAK;IACnC;IACI,OAAO,EAAE,SAAS,IAAI,SAAS,KAAK,IAAI,cAAc,KAAK,KAAK,IAAI;IACpE,SAAS,EAAE,SAAS,IAAI,cAAc,KAAK,IAAI;IAC/C,SAAS,EAAE,cAAc,IAAI;EACjC;AAjBO,MAkBL,eAAe;IACb,OAAO;MACL,UAAU;MACV,QAAQ;MACR,OAAO;MACP,MAAM;MACN,OAAO,MAAM;MACb,SAAS,MAAM,KAAK;MACpB,SAAS,MAAM,KAAK,KAAK;MACzB,cAAc,MAAM,KAAK,KAAK,KAAK;IACzC;IACI,UAAU;MACR,QAAQ;MACR,OAAO;MACP,MAAM;MACN,OAAO,KAAK;MACZ,SAAS,KAAK,KAAK;MACnB,SAAS,KAAK,KAAK,KAAK;MACxB,cAAc,KAAK,KAAK,KAAK,KAAK;IACxC;IACI,QAAQ;MACN,OAAO;MACP,MAAM;MACN,OAAO,KAAK;MACZ,SAAS,KAAK,KAAK;MACnB,SAAS,KAAK,KAAK,KAAK;MACxB,cAAc,KAAK,KAAK,KAAK,KAAK;IACxC;IAEI,GAAG;EACP;AAhDO,MAiDL,qBAAqB,SAAW;AAjD3B,MAkDL,sBAAsB,SAAW;AAlD5B,MAmDL,iBAAiB;IACf,OAAO;MACL,UAAU;MACV,QAAQ;MACR,OAAO,qBAAqB;MAC5B,MAAM;MACN,OAAO,qBAAqB;MAC5B,SAAS,qBAAqB,KAAK;MACnC,SAAS,qBAAqB,KAAK,KAAK;MACxC,cAAc,qBAAqB,KAAK,KAAK,KAAK;IACxD;IACI,UAAU;MACR,QAAQ;MACR,OAAO,qBAAqB;MAC5B,MAAM,qBAAqB;MAC3B,OAAQ,qBAAqB,KAAM;MACnC,SAAU,qBAAqB,KAAK,KAAM;MAC1C,SAAU,qBAAqB,KAAK,KAAK,KAAM;MAC/C,cAAe,qBAAqB,KAAK,KAAK,KAAK,MAAQ;IACjE;IACI,QAAQ;MACN,OAAO,sBAAsB;MAC7B,MAAM;MACN,OAAO,sBAAsB;MAC7B,SAAS,sBAAsB,KAAK;MACpC,SAAS,sBAAsB,KAAK,KAAK;MACzC,cAAc,sBAAsB,KAAK,KAAK,KAAK;IACzD;IACI,GAAG;EACP;AAGA,MAAMC,iBAAe;IACnB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;EACF;AAEA,MAAM,eAAeA,eAAa,MAAM,CAAC,EAAE,QAAO;AAGlD,WAASC,QAAM,KAAK,MAAM,QAAQ,OAAO;AAEvC,UAAM,OAAO;MACX,QAAQ,QAAQ,KAAK,SAAS,EAAE,GAAG,IAAI,QAAQ,GAAI,KAAK,UAAU,CAAA,EAAG;MACrE,KAAK,IAAI,IAAI,MAAM,KAAK,GAAG;MAC3B,oBAAoB,KAAK,sBAAsB,IAAI;MACnD,QAAQ,KAAK,UAAU,IAAI;IAC/B;AACE,WAAO,IAAI,SAAS,IAAI;EAC1B;AAEA,WAAS,iBAAiB,QAAQ,MAAM;AACtC,QAAI,MAAM,KAAK,gBAAgB;AAC/B,eAAW,QAAQ,aAAa,MAAM,CAAC,GAAG;AACxC,UAAI,KAAK,IAAI,GAAG;AACd,eAAO,KAAK,IAAI,IAAI,OAAO,IAAI,EAAE,cAAc;MACrD;IACA;AACE,WAAO;EACT;AAGA,WAAS,gBAAgB,QAAQ,MAAM;AAGrC,UAAM,SAAS,iBAAiB,QAAQ,IAAI,IAAI,IAAI,KAAK;AAEzDD,mBAAa,YAAY,CAAC,UAAU,YAAY;AAC9C,UAAI,CAAC,YAAY,KAAK,OAAO,CAAC,GAAG;AAC/B,YAAI,UAAU;AACZ,gBAAM,cAAc,KAAK,QAAQ,IAAI;AACrC,gBAAM,OAAO,OAAO,OAAO,EAAE,QAAQ;AAiBrC,gBAAM,SAAS,KAAK,MAAM,cAAc,IAAI;AAC5C,eAAK,OAAO,KAAK,SAAS;AAC1B,eAAK,QAAQ,KAAK,SAAS,OAAO;QAC1C;AACM,eAAO;MACb,OAAW;AACL,eAAO;MACb;IACA,GAAK,IAAI;AAIPA,mBAAa,OAAO,CAAC,UAAU,YAAY;AACzC,UAAI,CAAC,YAAY,KAAK,OAAO,CAAC,GAAG;AAC/B,YAAI,UAAU;AACZ,gBAAM,WAAW,KAAK,QAAQ,IAAI;AAClC,eAAK,QAAQ,KAAK;AAClB,eAAK,OAAO,KAAK,WAAW,OAAO,QAAQ,EAAE,OAAO;QAC5D;AACM,eAAO;MACb,OAAW;AACL,eAAO;MACb;IACA,GAAK,IAAI;EACT;AAGA,WAAS,aAAa,MAAM;AAC1B,UAAM,UAAU,CAAA;AAChB,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,IAAI,GAAG;AAC/C,UAAI,UAAU,GAAG;AACf,gBAAQ,GAAG,IAAI;MACrB;IACA;AACE,WAAO;EACT;AAee,MAAM,WAAN,MAAM,UAAS;;;;IAI5B,YAAYE,SAAQ;AAClB,YAAM,WAAWA,QAAO,uBAAuB,cAAc;AAC7D,UAAI,SAAS,WAAW,iBAAiB;AAEzC,UAAIA,QAAO,QAAQ;AACjB,iBAASA,QAAO;MACtB;AAKI,WAAK,SAASA,QAAO;AAIrB,WAAK,MAAMA,QAAO,OAAO,OAAO,OAAM;AAItC,WAAK,qBAAqB,WAAW,aAAa;AAIlD,WAAK,UAAUA,QAAO,WAAW;AAIjC,WAAK,SAAS;AAId,WAAK,kBAAkB;IAC3B;;;;;;;;;;IAWE,OAAO,WAAW,OAAO,MAAM;AAC7B,aAAO,UAAS,WAAW,EAAE,cAAc,MAAK,GAAI,IAAI;IAC5D;;;;;;;;;;;;;;;;;;;;;IAsBE,OAAO,WAAW,KAAK,OAAO,CAAA,GAAI;AAChC,UAAI,OAAO,QAAQ,OAAO,QAAQ,UAAU;AAC1C,cAAM,IAAI;UACR,+DACE,QAAQ,OAAO,SAAS,OAAO,GACzC;QACA;MACA;AAEI,aAAO,IAAI,UAAS;QAClB,QAAQ,gBAAgB,KAAK,UAAS,aAAa;QACnD,KAAK,OAAO,WAAW,IAAI;QAC3B,oBAAoB,KAAK;QACzB,QAAQ,KAAK;MACnB,CAAK;IACL;;;;;;;;;;;IAYE,OAAO,iBAAiB,cAAc;AACpC,UAAIhD,UAAS,YAAY,GAAG;AAC1B,eAAO,UAAS,WAAW,YAAY;MAC7C,WAAe,UAAS,WAAW,YAAY,GAAG;AAC5C,eAAO;MACb,WAAe,OAAO,iBAAiB,UAAU;AAC3C,eAAO,UAAS,WAAW,YAAY;MAC7C,OAAW;AACL,cAAM,IAAI;UACR,6BAA6B,YAAY,YAAY,OAAO,YAAY;QAChF;MACA;IACA;;;;;;;;;;;;;;;IAgBE,OAAO,QAAQiD,OAAM,MAAM;AACzB,YAAM,CAAC,MAAM,IAAI,iBAAiBA,KAAI;AACtC,UAAI,QAAQ;AACV,eAAO,UAAS,WAAW,QAAQ,IAAI;MAC7C,OAAW;AACL,eAAO,UAAS,QAAQ,cAAc,cAAcA,KAAI,+BAA+B;MAC7F;IACA;;;;;;;;;;;;;;;;;IAkBE,OAAO,YAAYA,OAAM,MAAM;AAC7B,YAAM,CAAC,MAAM,IAAI,iBAAiBA,KAAI;AACtC,UAAI,QAAQ;AACV,eAAO,UAAS,WAAW,QAAQ,IAAI;MAC7C,OAAW;AACL,eAAO,UAAS,QAAQ,cAAc,cAAcA,KAAI,+BAA+B;MAC7F;IACA;;;;;;;IAQE,OAAO,QAAQ,QAAQ,cAAc,MAAM;AACzC,UAAI,CAAC,QAAQ;AACX,cAAM,IAAI,qBAAqB,kDAAkD;MACvF;AAEI,YAAM,UAAU,kBAAkB,UAAU,SAAS,IAAI,QAAQ,QAAQ,WAAW;AAEpF,UAAI,SAAS,gBAAgB;AAC3B,cAAM,IAAI,qBAAqB,OAAO;MAC5C,OAAW;AACL,eAAO,IAAI,UAAS,EAAE,QAAO,CAAE;MACrC;IACA;;;;IAKE,OAAO,cAAc,MAAM;AACzB,YAAM,aAAa;QACjB,MAAM;QACN,OAAO;QACP,SAAS;QACT,UAAU;QACV,OAAO;QACP,QAAQ;QACR,MAAM;QACN,OAAO;QACP,KAAK;QACL,MAAM;QACN,MAAM;QACN,OAAO;QACP,QAAQ;QACR,SAAS;QACT,QAAQ;QACR,SAAS;QACT,aAAa;QACb,cAAc;MACpB,EAAM,OAAO,KAAK,YAAW,IAAK,IAAI;AAElC,UAAI,CAAC,WAAY,OAAM,IAAI,iBAAiB,IAAI;AAEhD,aAAO;IACX;;;;;;IAOE,OAAO,WAAW3C,IAAG;AACnB,aAAQA,MAAKA,GAAE,mBAAoB;IACvC;;;;;IAME,IAAI,SAAS;AACX,aAAO,KAAK,UAAU,KAAK,IAAI,SAAS;IAC5C;;;;;;IAOE,IAAI,kBAAkB;AACpB,aAAO,KAAK,UAAU,KAAK,IAAI,kBAAkB;IACrD;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4BE,SAAS,KAAK,OAAO,CAAA,GAAI;AAEvB,YAAM,UAAU;QACd,GAAG;QACH,OAAO,KAAK,UAAU,SAAS,KAAK,UAAU;MACpD;AACI,aAAO,KAAK,UACR,UAAU,OAAO,KAAK,KAAK,OAAO,EAAE,yBAAyB,MAAM,GAAG,IACtEuC;IACR;;;;;;;;;;;;;;;;;IAkBE,QAAQ,OAAO,CAAA,GAAI;AACjB,UAAI,CAAC,KAAK,QAAS,QAAOA;AAE1B,YAAM,YAAY,KAAK,cAAc;AAErC,YAAM5D,KAAI6D,eACP,IAAI,CAAC,SAAS;AACb,cAAM,MAAM,KAAK,OAAO,IAAI;AAC5B,YAAI,YAAY,GAAG,KAAM,QAAQ,KAAK,CAAC,WAAY;AACjD,iBAAO;QACjB;AACQ,eAAO,KAAK,IACT,gBAAgB,EAAE,OAAO,QAAQ,aAAa,QAAQ,GAAG,MAAM,MAAM,KAAK,MAAM,GAAG,EAAE,EAAC,CAAE,EACxF,OAAO,GAAG;MACrB,CAAO,EACA,OAAO,CAAC/D,OAAMA,EAAC;AAElB,aAAO,KAAK,IACT,cAAc,EAAE,MAAM,eAAe,OAAO,KAAK,aAAa,UAAU,GAAG,KAAI,CAAE,EACjF,OAAOE,EAAC;IACf;;;;;;IAOE,WAAW;AACT,UAAI,CAAC,KAAK,QAAS,QAAO,CAAA;AAC1B,aAAO,EAAE,GAAG,KAAK,OAAM;IAC3B;;;;;;;;;;;IAYE,QAAQ;AAEN,UAAI,CAAC,KAAK,QAAS,QAAO;AAE1B,UAAID,KAAI;AACR,UAAI,KAAK,UAAU,EAAG,CAAAA,MAAK,KAAK,QAAQ;AACxC,UAAI,KAAK,WAAW,KAAK,KAAK,aAAa,EAAG,CAAAA,MAAK,KAAK,SAAS,KAAK,WAAW,IAAI;AACrF,UAAI,KAAK,UAAU,EAAG,CAAAA,MAAK,KAAK,QAAQ;AACxC,UAAI,KAAK,SAAS,EAAG,CAAAA,MAAK,KAAK,OAAO;AACtC,UAAI,KAAK,UAAU,KAAK,KAAK,YAAY,KAAK,KAAK,YAAY,KAAK,KAAK,iBAAiB;AACxF,QAAAA,MAAK;AACP,UAAI,KAAK,UAAU,EAAG,CAAAA,MAAK,KAAK,QAAQ;AACxC,UAAI,KAAK,YAAY,EAAG,CAAAA,MAAK,KAAK,UAAU;AAC5C,UAAI,KAAK,YAAY,KAAK,KAAK,iBAAiB;AAG9C,QAAAA,MAAK,QAAQ,KAAK,UAAU,KAAK,eAAe,KAAM,CAAC,IAAI;AAC7D,UAAIA,OAAM,IAAK,CAAAA,MAAK;AACpB,aAAOA;IACX;;;;;;;;;;;;;;;;;IAkBE,UAAU,OAAO,CAAA,GAAI;AACnB,UAAI,CAAC,KAAK,QAAS,QAAO;AAE1B,YAAM,SAAS,KAAK,SAAQ;AAC5B,UAAI,SAAS,KAAK,UAAU,MAAU,QAAO;AAE7C,aAAO;QACL,sBAAsB;QACtB,iBAAiB;QACjB,eAAe;QACf,QAAQ;QACR,GAAG;QACH,eAAe;MACrB;AAEI,YAAM,WAAW,SAAS,WAAW,QAAQ,EAAE,MAAM,MAAK,CAAE;AAC5D,aAAO,SAAS,UAAU,IAAI;IAClC;;;;;IAME,SAAS;AACP,aAAO,KAAK,MAAK;IACrB;;;;;IAME,WAAW;AACT,aAAO,KAAK,MAAK;IACrB;;;;;IAME,CAAC,uBAAO,IAAI,4BAA4B,CAAC,IAAI;AAC3C,UAAI,KAAK,SAAS;AAChB,eAAO,sBAAsB,KAAK,UAAU,KAAK,MAAM,CAAC;MAC9D,OAAW;AACL,eAAO,+BAA+B,KAAK,aAAa;MAC9D;IACA;;;;;IAME,WAAW;AACT,UAAI,CAAC,KAAK,QAAS,QAAO;AAE1B,aAAO,iBAAiB,KAAK,QAAQ,KAAK,MAAM;IACpD;;;;;IAME,UAAU;AACR,aAAO,KAAK,SAAQ;IACxB;;;;;;IAOE,KAAK,UAAU;AACb,UAAI,CAAC,KAAK,QAAS,QAAO;AAE1B,YAAM,MAAM,UAAS,iBAAiB,QAAQ,GAC5C,SAAS,CAAA;AAEX,iBAAW,KAAK8D,gBAAc;AAC5B,YAAI,eAAe,IAAI,QAAQ,CAAC,KAAK,eAAe,KAAK,QAAQ,CAAC,GAAG;AACnE,iBAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;QAC3C;MACA;AAEI,aAAOC,QAAM,MAAM,EAAE,QAAQ,OAAM,GAAI,IAAI;IAC/C;;;;;;IAOE,MAAM,UAAU;AACd,UAAI,CAAC,KAAK,QAAS,QAAO;AAE1B,YAAM,MAAM,UAAS,iBAAiB,QAAQ;AAC9C,aAAO,KAAK,KAAK,IAAI,OAAM,CAAE;IACjC;;;;;;;;IASE,SAASG,KAAI;AACX,UAAI,CAAC,KAAK,QAAS,QAAO;AAC1B,YAAM,SAAS,CAAA;AACf,iBAAW,KAAK,OAAO,KAAK,KAAK,MAAM,GAAG;AACxC,eAAO,CAAC,IAAI,SAASA,IAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;MAChD;AACI,aAAOH,QAAM,MAAM,EAAE,QAAQ,OAAM,GAAI,IAAI;IAC/C;;;;;;;;;IAUE,IAAI,MAAM;AACR,aAAO,KAAK,UAAS,cAAc,IAAI,CAAC;IAC5C;;;;;;;;IASE,IAAI,QAAQ;AACV,UAAI,CAAC,KAAK,QAAS,QAAO;AAE1B,YAAM,QAAQ,EAAE,GAAG,KAAK,QAAQ,GAAG,gBAAgB,QAAQ,UAAS,aAAa,EAAC;AAClF,aAAOA,QAAM,MAAM,EAAE,QAAQ,MAAK,CAAE;IACxC;;;;;;IAOE,YAAY,EAAE,QAAQ,iBAAiB,oBAAoB,OAAM,IAAK,CAAA,GAAI;AACxE,YAAM,MAAM,KAAK,IAAI,MAAM,EAAE,QAAQ,gBAAe,CAAE;AACtD,YAAM,OAAO,EAAE,KAAK,QAAQ,mBAAkB;AAC9C,aAAOA,QAAM,MAAM,IAAI;IAC3B;;;;;;;;;IAUE,GAAG,MAAM;AACP,aAAO,KAAK,UAAU,KAAK,QAAQ,IAAI,EAAE,IAAI,IAAI,IAAI;IACzD;;;;;;;;;;;;;;;;IAiBE,YAAY;AACV,UAAI,CAAC,KAAK,QAAS,QAAO;AAC1B,YAAM,OAAO,KAAK,SAAQ;AAC1B,sBAAgB,KAAK,QAAQ,IAAI;AACjC,aAAOA,QAAM,MAAM,EAAE,QAAQ,KAAI,GAAI,IAAI;IAC7C;;;;;;IAOE,UAAU;AACR,UAAI,CAAC,KAAK,QAAS,QAAO;AAC1B,YAAM,OAAO,aAAa,KAAK,UAAS,EAAG,WAAU,EAAG,SAAQ,CAAE;AAClE,aAAOA,QAAM,MAAM,EAAE,QAAQ,KAAI,GAAI,IAAI;IAC7C;;;;;;IAOE,WAAW,OAAO;AAChB,UAAI,CAAC,KAAK,QAAS,QAAO;AAE1B,UAAI,MAAM,WAAW,GAAG;AACtB,eAAO;MACb;AAEI,cAAQ,MAAM,IAAI,CAACpC,OAAM,UAAS,cAAcA,EAAC,CAAC;AAElD,YAAM,QAAQ,CAAA,GACZ,cAAc,CAAA,GACd,OAAO,KAAK,SAAQ;AACtB,UAAI;AAEJ,iBAAW,KAAKmC,gBAAc;AAC5B,YAAI,MAAM,QAAQ,CAAC,KAAK,GAAG;AACzB,qBAAW;AAEX,cAAI,MAAM;AAGV,qBAAW,MAAM,aAAa;AAC5B,mBAAO,KAAK,OAAO,EAAE,EAAE,CAAC,IAAI,YAAY,EAAE;AAC1C,wBAAY,EAAE,IAAI;UAC5B;AAGQ,cAAI9C,UAAS,KAAK,CAAC,CAAC,GAAG;AACrB,mBAAO,KAAK,CAAC;UACvB;AAIQ,gBAAMb,KAAI,KAAK,MAAM,GAAG;AACxB,gBAAM,CAAC,IAAIA;AACX,sBAAY,CAAC,KAAK,MAAM,MAAOA,KAAI,OAAQ;QAGnD,WAAiBa,UAAS,KAAK,CAAC,CAAC,GAAG;AAC5B,sBAAY,CAAC,IAAI,KAAK,CAAC;QAC/B;MACA;AAII,iBAAW,OAAO,aAAa;AAC7B,YAAI,YAAY,GAAG,MAAM,GAAG;AAC1B,gBAAM,QAAQ,KACZ,QAAQ,WAAW,YAAY,GAAG,IAAI,YAAY,GAAG,IAAI,KAAK,OAAO,QAAQ,EAAE,GAAG;QAC5F;MACA;AAEI,sBAAgB,KAAK,QAAQ,KAAK;AAClC,aAAO+C,QAAM,MAAM,EAAE,QAAQ,MAAK,GAAI,IAAI;IAC9C;;;;;;IAOE,aAAa;AACX,UAAI,CAAC,KAAK,QAAS,QAAO;AAC1B,aAAO,KAAK;QACV;QACA;QACA;QACA;QACA;QACA;QACA;QACA;MACN;IACA;;;;;;IAOE,SAAS;AACP,UAAI,CAAC,KAAK,QAAS,QAAO;AAC1B,YAAM,UAAU,CAAA;AAChB,iBAAW,KAAK,OAAO,KAAK,KAAK,MAAM,GAAG;AACxC,gBAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,OAAO,CAAC;MAC5D;AACI,aAAOA,QAAM,MAAM,EAAE,QAAQ,QAAO,GAAI,IAAI;IAChD;;;;;;IAOE,cAAc;AACZ,UAAI,CAAC,KAAK,QAAS,QAAO;AAC1B,YAAM,OAAO,aAAa,KAAK,MAAM;AACrC,aAAOA,QAAM,MAAM,EAAE,QAAQ,KAAI,GAAI,IAAI;IAC7C;;;;;IAME,IAAI,QAAQ;AACV,aAAO,KAAK,UAAU,KAAK,OAAO,SAAS,IAAI;IACnD;;;;;IAME,IAAI,WAAW;AACb,aAAO,KAAK,UAAU,KAAK,OAAO,YAAY,IAAI;IACtD;;;;;IAME,IAAI,SAAS;AACX,aAAO,KAAK,UAAU,KAAK,OAAO,UAAU,IAAI;IACpD;;;;;IAME,IAAI,QAAQ;AACV,aAAO,KAAK,UAAU,KAAK,OAAO,SAAS,IAAI;IACnD;;;;;IAME,IAAI,OAAO;AACT,aAAO,KAAK,UAAU,KAAK,OAAO,QAAQ,IAAI;IAClD;;;;;IAME,IAAI,QAAQ;AACV,aAAO,KAAK,UAAU,KAAK,OAAO,SAAS,IAAI;IACnD;;;;;IAME,IAAI,UAAU;AACZ,aAAO,KAAK,UAAU,KAAK,OAAO,WAAW,IAAI;IACrD;;;;;IAME,IAAI,UAAU;AACZ,aAAO,KAAK,UAAU,KAAK,OAAO,WAAW,IAAI;IACrD;;;;;IAME,IAAI,eAAe;AACjB,aAAO,KAAK,UAAU,KAAK,OAAO,gBAAgB,IAAI;IAC1D;;;;;;IAOE,IAAI,UAAU;AACZ,aAAO,KAAK,YAAY;IAC5B;;;;;IAME,IAAI,gBAAgB;AAClB,aAAO,KAAK,UAAU,KAAK,QAAQ,SAAS;IAChD;;;;;IAME,IAAI,qBAAqB;AACvB,aAAO,KAAK,UAAU,KAAK,QAAQ,cAAc;IACrD;;;;;;;IAQE,OAAO,OAAO;AACZ,UAAI,CAAC,KAAK,WAAW,CAAC,MAAM,SAAS;AACnC,eAAO;MACb;AAEI,UAAI,CAAC,KAAK,IAAI,OAAO,MAAM,GAAG,GAAG;AAC/B,eAAO;MACb;AAEI,eAASI,IAAG,IAAI,IAAI;AAElB,YAAI,OAAO,UAAa,OAAO,EAAG,QAAO,OAAO,UAAa,OAAO;AACpE,eAAO,OAAO;MACpB;AAEI,iBAAWxC,MAAKmC,gBAAc;AAC5B,YAAI,CAACK,IAAG,KAAK,OAAOxC,EAAC,GAAG,MAAM,OAAOA,EAAC,CAAC,GAAG;AACxC,iBAAO;QACf;MACA;AACI,aAAO;IACX;EACA;ACx+BA,MAAMkC,YAAU;AAGhB,WAAS,iBAAiBO,QAAOC,MAAK;AACpC,QAAI,CAACD,UAAS,CAACA,OAAM,SAAS;AAC5B,aAAO,SAAS,QAAQ,0BAA0B;IACtD,WAAa,CAACC,QAAO,CAACA,KAAI,SAAS;AAC/B,aAAO,SAAS,QAAQ,wBAAwB;IACpD,WAAaA,OAAMD,QAAO;AACtB,aAAO,SAAS;QACd;QACA,qEAAqEA,OAAM,MAAK,CAAE,YAAYC,KAAI,MAAK,CAAE;MAC/G;IACA,OAAS;AACL,aAAO;IACX;EACA;AAce,MAAM,WAAN,MAAM,UAAS;;;;IAI5B,YAAYL,SAAQ;AAIlB,WAAK,IAAIA,QAAO;AAIhB,WAAK,IAAIA,QAAO;AAIhB,WAAK,UAAUA,QAAO,WAAW;AAIjC,WAAK,kBAAkB;IAC3B;;;;;;;IAQE,OAAO,QAAQ,QAAQ,cAAc,MAAM;AACzC,UAAI,CAAC,QAAQ;AACX,cAAM,IAAI,qBAAqB,kDAAkD;MACvF;AAEI,YAAM,UAAU,kBAAkB,UAAU,SAAS,IAAI,QAAQ,QAAQ,WAAW;AAEpF,UAAI,SAAS,gBAAgB;AAC3B,cAAM,IAAI,qBAAqB,OAAO;MAC5C,OAAW;AACL,eAAO,IAAI,UAAS,EAAE,QAAO,CAAE;MACrC;IACA;;;;;;;IAQE,OAAO,cAAcI,QAAOC,MAAK;AAC/B,YAAM,aAAa,iBAAiBD,MAAK,GACvC,WAAW,iBAAiBC,IAAG;AAEjC,YAAM,gBAAgB,iBAAiB,YAAY,QAAQ;AAE3D,UAAI,iBAAiB,MAAM;AACzB,eAAO,IAAI,UAAS;UAClB,OAAO;UACP,KAAK;QACb,CAAO;MACP,OAAW;AACL,eAAO;MACb;IACA;;;;;;;IAQE,OAAO,MAAMD,QAAO,UAAU;AAC5B,YAAM,MAAM,SAAS,iBAAiB,QAAQ,GAC5C,KAAK,iBAAiBA,MAAK;AAC7B,aAAO,UAAS,cAAc,IAAI,GAAG,KAAK,GAAG,CAAC;IAClD;;;;;;;IAQE,OAAO,OAAOC,MAAK,UAAU;AAC3B,YAAM,MAAM,SAAS,iBAAiB,QAAQ,GAC5C,KAAK,iBAAiBA,IAAG;AAC3B,aAAO,UAAS,cAAc,GAAG,MAAM,GAAG,GAAG,EAAE;IACnD;;;;;;;;;IAUE,OAAO,QAAQJ,OAAM,MAAM;AACzB,YAAM,CAACjE,IAAGI,EAAC,KAAK6D,SAAQ,IAAI,MAAM,KAAK,CAAC;AACxC,UAAIjE,MAAKI,IAAG;AACV,YAAIgE,QAAO;AACX,YAAI;AACF,UAAAA,SAAQ,SAAS,QAAQpE,IAAG,IAAI;AAChC,yBAAeoE,OAAM;QAC7B,SAAehE,IAAG;AACV,yBAAe;QACvB;AAEM,YAAIiE,MAAK;AACT,YAAI;AACF,UAAAA,OAAM,SAAS,QAAQjE,IAAG,IAAI;AAC9B,uBAAaiE,KAAI;QACzB,SAAejE,IAAG;AACV,uBAAa;QACrB;AAEM,YAAI,gBAAgB,YAAY;AAC9B,iBAAO,UAAS,cAAcgE,QAAOC,IAAG;QAChD;AAEM,YAAI,cAAc;AAChB,gBAAM,MAAM,SAAS,QAAQjE,IAAG,IAAI;AACpC,cAAI,IAAI,SAAS;AACf,mBAAO,UAAS,MAAMgE,QAAO,GAAG;UAC1C;QACA,WAAiB,YAAY;AACrB,gBAAM,MAAM,SAAS,QAAQpE,IAAG,IAAI;AACpC,cAAI,IAAI,SAAS;AACf,mBAAO,UAAS,OAAOqE,MAAK,GAAG;UACzC;QACA;MACA;AACI,aAAO,UAAS,QAAQ,cAAc,cAAcJ,KAAI,+BAA+B;IAC3F;;;;;;IAOE,OAAO,WAAW3C,IAAG;AACnB,aAAQA,MAAKA,GAAE,mBAAoB;IACvC;;;;;IAME,IAAI,QAAQ;AACV,aAAO,KAAK,UAAU,KAAK,IAAI;IACnC;;;;;;IAOE,IAAI,MAAM;AACR,aAAO,KAAK,UAAU,KAAK,IAAI;IACnC;;;;;IAME,IAAI,eAAe;AACjB,aAAO,KAAK,UAAW,KAAK,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,OAAQ;IAC9D;;;;;IAME,IAAI,UAAU;AACZ,aAAO,KAAK,kBAAkB;IAClC;;;;;IAME,IAAI,gBAAgB;AAClB,aAAO,KAAK,UAAU,KAAK,QAAQ,SAAS;IAChD;;;;;IAME,IAAI,qBAAqB;AACvB,aAAO,KAAK,UAAU,KAAK,QAAQ,cAAc;IACrD;;;;;;IAOE,OAAO,OAAO,gBAAgB;AAC5B,aAAO,KAAK,UAAU,KAAK,WAAW,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,IAAI;IACjE;;;;;;;;;;IAWE,MAAM,OAAO,gBAAgB,MAAM;AACjC,UAAI,CAAC,KAAK,QAAS,QAAO;AAC1B,YAAM8C,SAAQ,KAAK,MAAM,QAAQ,MAAM,IAAI;AAC3C,UAAIC;AACJ,UAAI,MAAM,gBAAgB;AACxB,QAAAA,OAAM,KAAK,IAAI,YAAY,EAAE,QAAQD,OAAM,OAAM,CAAE;MACzD,OAAW;AACL,QAAAC,OAAM,KAAK;MACjB;AACI,MAAAA,OAAMA,KAAI,QAAQ,MAAM,IAAI;AAC5B,aAAO,KAAK,MAAMA,KAAI,KAAKD,QAAO,IAAI,EAAE,IAAI,IAAI,CAAC,KAAKC,KAAI,QAAO,MAAO,KAAK,IAAI,QAAO;IAC5F;;;;;;IAOE,QAAQ,MAAM;AACZ,aAAO,KAAK,UAAU,KAAK,QAAO,KAAM,KAAK,EAAE,MAAM,CAAC,EAAE,QAAQ,KAAK,GAAG,IAAI,IAAI;IACpF;;;;;IAME,UAAU;AACR,aAAO,KAAK,EAAE,QAAO,MAAO,KAAK,EAAE,QAAO;IAC9C;;;;;;IAOE,QAAQ,UAAU;AAChB,UAAI,CAAC,KAAK,QAAS,QAAO;AAC1B,aAAO,KAAK,IAAI;IACpB;;;;;;IAOE,SAAS,UAAU;AACjB,UAAI,CAAC,KAAK,QAAS,QAAO;AAC1B,aAAO,KAAK,KAAK;IACrB;;;;;;IAOE,SAAS,UAAU;AACjB,UAAI,CAAC,KAAK,QAAS,QAAO;AAC1B,aAAO,KAAK,KAAK,YAAY,KAAK,IAAI;IAC1C;;;;;;;;IASE,IAAI,EAAE,OAAAD,QAAO,KAAAC,KAAG,IAAK,CAAA,GAAI;AACvB,UAAI,CAAC,KAAK,QAAS,QAAO;AAC1B,aAAO,UAAS,cAAcD,UAAS,KAAK,GAAGC,QAAO,KAAK,CAAC;IAChE;;;;;;IAOE,WAAW,WAAW;AACpB,UAAI,CAAC,KAAK,QAAS,QAAO,CAAA;AAC1B,YAAM,SAAS,UACV,IAAI,gBAAgB,EACpB,OAAO,CAAChD,OAAM,KAAK,SAASA,EAAC,CAAC,EAC9B,KAAK,CAACG,IAAG8C,OAAM9C,GAAE,SAAQ,IAAK8C,GAAE,SAAQ,CAAE,GAC7C,UAAU,CAAA;AACZ,UAAI,EAAE,GAAAtE,GAAC,IAAK,MACVG,KAAI;AAEN,aAAOH,KAAI,KAAK,GAAG;AACjB,cAAM,QAAQ,OAAOG,EAAC,KAAK,KAAK,GAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,KAAK,IAAI;AACrC,gBAAQ,KAAK,UAAS,cAAcH,IAAG,IAAI,CAAC;AAC5C,QAAAA,KAAI;AACJ,QAAAG,MAAK;MACX;AAEI,aAAO;IACX;;;;;;;IAQE,QAAQ,UAAU;AAChB,YAAM,MAAM,SAAS,iBAAiB,QAAQ;AAE9C,UAAI,CAAC,KAAK,WAAW,CAAC,IAAI,WAAW,IAAI,GAAG,cAAc,MAAM,GAAG;AACjE,eAAO,CAAA;MACb;AAEI,UAAI,EAAE,GAAAH,GAAC,IAAK,MACV,MAAM,GACN;AAEF,YAAM,UAAU,CAAA;AAChB,aAAOA,KAAI,KAAK,GAAG;AACjB,cAAM,QAAQ,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM,IAAI,GAAG,CAAC;AAC1D,eAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,KAAK,IAAI;AACnC,gBAAQ,KAAK,UAAS,cAAcA,IAAG,IAAI,CAAC;AAC5C,QAAAA,KAAI;AACJ,eAAO;MACb;AAEI,aAAO;IACX;;;;;;IAOE,cAAc,eAAe;AAC3B,UAAI,CAAC,KAAK,QAAS,QAAO,CAAA;AAC1B,aAAO,KAAK,QAAQ,KAAK,OAAM,IAAK,aAAa,EAAE,MAAM,GAAG,aAAa;IAC7E;;;;;;IAOE,SAAS,OAAO;AACd,aAAO,KAAK,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM;IAC9C;;;;;;IAOE,WAAW,OAAO;AAChB,UAAI,CAAC,KAAK,QAAS,QAAO;AAC1B,aAAO,CAAC,KAAK,MAAM,CAAC,MAAM;IAC9B;;;;;;IAOE,SAAS,OAAO;AACd,UAAI,CAAC,KAAK,QAAS,QAAO;AAC1B,aAAO,CAAC,MAAM,MAAM,CAAC,KAAK;IAC9B;;;;;;IAOE,QAAQ,OAAO;AACb,UAAI,CAAC,KAAK,QAAS,QAAO;AAC1B,aAAO,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK,MAAM;IAChD;;;;;;IAOE,OAAO,OAAO;AACZ,UAAI,CAAC,KAAK,WAAW,CAAC,MAAM,SAAS;AACnC,eAAO;MACb;AAEI,aAAO,KAAK,EAAE,OAAO,MAAM,CAAC,KAAK,KAAK,EAAE,OAAO,MAAM,CAAC;IAC1D;;;;;;;;IASE,aAAa,OAAO;AAClB,UAAI,CAAC,KAAK,QAAS,QAAO;AAC1B,YAAMA,KAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,GAC1CI,KAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM;AAExC,UAAIJ,MAAKI,IAAG;AACV,eAAO;MACb,OAAW;AACL,eAAO,UAAS,cAAcJ,IAAGI,EAAC;MACxC;IACA;;;;;;;IAQE,MAAM,OAAO;AACX,UAAI,CAAC,KAAK,QAAS,QAAO;AAC1B,YAAMJ,KAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,GAC1CI,KAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM;AACxC,aAAO,UAAS,cAAcJ,IAAGI,EAAC;IACtC;;;;;;;;;;IAWE,OAAO,MAAM,WAAW;AACtB,YAAM,CAAC,OAAO,KAAK,IAAI,UACpB,KAAK,CAACoB,IAAG8C,OAAM9C,GAAE,IAAI8C,GAAE,CAAC,EACxB;QACC,CAAC,CAAC,OAAO,OAAO,GAAG,SAAS;AAC1B,cAAI,CAAC,SAAS;AACZ,mBAAO,CAAC,OAAO,IAAI;UAC/B,WAAqB,QAAQ,SAAS,IAAI,KAAK,QAAQ,WAAW,IAAI,GAAG;AAC7D,mBAAO,CAAC,OAAO,QAAQ,MAAM,IAAI,CAAC;UAC9C,OAAiB;AACL,mBAAO,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI;UACjD;QACA;QACQ,CAAC,CAAA,GAAI,IAAI;MACjB;AACI,UAAI,OAAO;AACT,cAAM,KAAK,KAAK;MACtB;AACI,aAAO;IACX;;;;;;IAOE,OAAO,IAAI,WAAW;AACpB,UAAIF,SAAQ,MACV,eAAe;AACjB,YAAM,UAAU,CAAA,GACd,OAAO,UAAU,IAAI,CAACjE,OAAM;QAC1B,EAAE,MAAMA,GAAE,GAAG,MAAM,IAAG;QACtB,EAAE,MAAMA,GAAE,GAAG,MAAM,IAAG;MAC9B,CAAO,GACD,YAAY,MAAM,UAAU,OAAO,GAAG,IAAI,GAC1C,MAAM,UAAU,KAAK,CAACqB,IAAG8C,OAAM9C,GAAE,OAAO8C,GAAE,IAAI;AAEhD,iBAAWnE,MAAK,KAAK;AACnB,wBAAgBA,GAAE,SAAS,MAAM,IAAI;AAErC,YAAI,iBAAiB,GAAG;AACtB,UAAAiE,SAAQjE,GAAE;QAClB,OAAa;AACL,cAAIiE,UAAS,CAACA,WAAU,CAACjE,GAAE,MAAM;AAC/B,oBAAQ,KAAK,UAAS,cAAciE,QAAOjE,GAAE,IAAI,CAAC;UAC5D;AAEQ,UAAAiE,SAAQ;QAChB;MACA;AAEI,aAAO,UAAS,MAAM,OAAO;IACjC;;;;;;IAOE,cAAc,WAAW;AACvB,aAAO,UAAS,IAAI,CAAC,IAAI,EAAE,OAAO,SAAS,CAAC,EACzC,IAAI,CAACjE,OAAM,KAAK,aAAaA,EAAC,CAAC,EAC/B,OAAO,CAACA,OAAMA,MAAK,CAACA,GAAE,QAAO,CAAE;IACtC;;;;;IAME,WAAW;AACT,UAAI,CAAC,KAAK,QAAS,QAAO0D;AAC1B,aAAO,IAAI,KAAK,EAAE,MAAK,CAAE,WAAM,KAAK,EAAE,MAAK,CAAE;IACjD;;;;;IAME,CAAC,uBAAO,IAAI,4BAA4B,CAAC,IAAI;AAC3C,UAAI,KAAK,SAAS;AAChB,eAAO,qBAAqB,KAAK,EAAE,MAAK,CAAE,UAAU,KAAK,EAAE,MAAK,CAAE;MACxE,OAAW;AACL,eAAO,+BAA+B,KAAK,aAAa;MAC9D;IACA;;;;;;;;;;;;;;;;;;;IAoBE,eAAe,aAAahC,YAAoB,OAAO,CAAA,GAAI;AACzD,aAAO,KAAK,UACR,UAAU,OAAO,KAAK,EAAE,IAAI,MAAM,IAAI,GAAG,UAAU,EAAE,eAAe,IAAI,IACxEgC;IACR;;;;;;;IAQE,MAAM,MAAM;AACV,UAAI,CAAC,KAAK,QAAS,QAAOA;AAC1B,aAAO,GAAG,KAAK,EAAE,MAAM,IAAI,CAAC,IAAI,KAAK,EAAE,MAAM,IAAI,CAAC;IACtD;;;;;;;IAQE,YAAY;AACV,UAAI,CAAC,KAAK,QAAS,QAAOA;AAC1B,aAAO,GAAG,KAAK,EAAE,UAAS,CAAE,IAAI,KAAK,EAAE,UAAS,CAAE;IACtD;;;;;;;;IASE,UAAU,MAAM;AACd,UAAI,CAAC,KAAK,QAAS,QAAOA;AAC1B,aAAO,GAAG,KAAK,EAAE,UAAU,IAAI,CAAC,IAAI,KAAK,EAAE,UAAU,IAAI,CAAC;IAC9D;;;;;;;;;;;;IAaE,SAAS,YAAY,EAAE,YAAY,WAAK,IAAK,CAAA,GAAI;AAC/C,UAAI,CAAC,KAAK,QAAS,QAAOA;AAC1B,aAAO,GAAG,KAAK,EAAE,SAAS,UAAU,CAAC,GAAG,SAAS,GAAG,KAAK,EAAE,SAAS,UAAU,CAAC;IACnF;;;;;;;;;;;;;IAcE,WAAW,MAAM,MAAM;AACrB,UAAI,CAAC,KAAK,SAAS;AACjB,eAAO,SAAS,QAAQ,KAAK,aAAa;MAChD;AACI,aAAO,KAAK,EAAE,KAAK,KAAK,GAAG,MAAM,IAAI;IACzC;;;;;;;;IASE,aAAa,OAAO;AAClB,aAAO,UAAS,cAAc,MAAM,KAAK,CAAC,GAAG,MAAM,KAAK,CAAC,CAAC;IAC9D;EACA;ACjpBe,MAAM,OAAN,MAAW;;;;;;IAMxB,OAAO,OAAO,OAAO,SAAS,aAAa;AACzC,YAAM,QAAQ,SAAS,IAAG,EAAG,QAAQ,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE,CAAE;AAE5D,aAAO,CAAC,KAAK,eAAe,MAAM,WAAW,MAAM,IAAI,EAAE,OAAO,EAAC,CAAE,EAAE;IACzE;;;;;;IAOE,OAAO,gBAAgB,MAAM;AAC3B,aAAO,SAAS,YAAY,IAAI;IACpC;;;;;;;;;;;;;;;IAgBE,OAAO,cAAc,OAAO;AAC1B,aAAO,cAAc,OAAO,SAAS,WAAW;IACpD;;;;;;;;IASE,OAAO,eAAe,EAAE,SAAS,MAAM,SAAS,KAAI,IAAK,CAAA,GAAI;AAC3D,cAAQ,UAAU,OAAO,OAAO,MAAM,GAAG,eAAc;IAC3D;;;;;;;;;IAUE,OAAO,0BAA0B,EAAE,SAAS,MAAM,SAAS,KAAI,IAAK,CAAA,GAAI;AACtE,cAAQ,UAAU,OAAO,OAAO,MAAM,GAAG,sBAAqB;IAClE;;;;;;;;IASE,OAAO,mBAAmB,EAAE,SAAS,MAAM,SAAS,KAAI,IAAK,CAAA,GAAI;AAE/D,cAAQ,UAAU,OAAO,OAAO,MAAM,GAAG,eAAc,EAAG,MAAK;IACnE;;;;;;;;;;;;;;;;;;IAmBE,OAAO,OACL,SAAS,QACT,EAAE,SAAS,MAAM,kBAAkB,MAAM,SAAS,MAAM,iBAAiB,UAAS,IAAK,CAAA,GACvF;AACA,cAAQ,UAAU,OAAO,OAAO,QAAQ,iBAAiB,cAAc,GAAG,OAAO,MAAM;IAC3F;;;;;;;;;;;;;;IAeE,OAAO,aACL,SAAS,QACT,EAAE,SAAS,MAAM,kBAAkB,MAAM,SAAS,MAAM,iBAAiB,UAAS,IAAK,CAAA,GACvF;AACA,cAAQ,UAAU,OAAO,OAAO,QAAQ,iBAAiB,cAAc,GAAG,OAAO,QAAQ,IAAI;IACjG;;;;;;;;;;;;;;;IAgBE,OAAO,SAAS,SAAS,QAAQ,EAAE,SAAS,MAAM,kBAAkB,MAAM,SAAS,KAAI,IAAK,CAAA,GAAI;AAC9F,cAAQ,UAAU,OAAO,OAAO,QAAQ,iBAAiB,IAAI,GAAG,SAAS,MAAM;IACnF;;;;;;;;;;;;;IAcE,OAAO,eACL,SAAS,QACT,EAAE,SAAS,MAAM,kBAAkB,MAAM,SAAS,KAAI,IAAK,CAAA,GAC3D;AACA,cAAQ,UAAU,OAAO,OAAO,QAAQ,iBAAiB,IAAI,GAAG,SAAS,QAAQ,IAAI;IACzF;;;;;;;;;IAUE,OAAO,UAAU,EAAE,SAAS,KAAI,IAAK,CAAA,GAAI;AACvC,aAAO,OAAO,OAAO,MAAM,EAAE,UAAS;IAC1C;;;;;;;;;;;IAYE,OAAO,KAAK,SAAS,SAAS,EAAE,SAAS,KAAI,IAAK,CAAA,GAAI;AACpD,aAAO,OAAO,OAAO,QAAQ,MAAM,SAAS,EAAE,KAAK,MAAM;IAC7D;;;;;;;;;;IAWE,OAAO,WAAW;AAChB,aAAO,EAAE,UAAU,YAAW,GAAI,YAAY,kBAAiB,EAAE;IACrE;EACA;AC1MA,WAAS,QAAQ,SAAS,OAAO;AAC/B,UAAM,cAAc,CAAC,OAAO,GAAG,MAAM,GAAG,EAAE,eAAe,KAAI,CAAE,EAAE,QAAQ,KAAK,EAAE,QAAO,GACrF,KAAK,YAAY,KAAK,IAAI,YAAY,OAAO;AAC/C,WAAO,KAAK,MAAM,SAAS,WAAW,EAAE,EAAE,GAAG,MAAM,CAAC;EACtD;AAEA,WAAS,eAAe,QAAQ,OAAO,OAAO;AAC5C,UAAM,UAAU;MACd,CAAC,SAAS,CAACrC,IAAG8C,OAAMA,GAAE,OAAO9C,GAAE,IAAI;MACnC,CAAC,YAAY,CAACA,IAAG8C,OAAMA,GAAE,UAAU9C,GAAE,WAAW8C,GAAE,OAAO9C,GAAE,QAAQ,CAAC;MACpE,CAAC,UAAU,CAACA,IAAG8C,OAAMA,GAAE,QAAQ9C,GAAE,SAAS8C,GAAE,OAAO9C,GAAE,QAAQ,EAAE;MAC/D;QACE;QACA,CAACA,IAAG8C,OAAM;AACR,gBAAM,OAAO,QAAQ9C,IAAG8C,EAAC;AACzB,kBAAQ,OAAQ,OAAO,KAAM;QACrC;MACA;MACI,CAAC,QAAQ,OAAO;IACpB;AAEE,UAAM,UAAU,CAAA;AAChB,UAAM,UAAU;AAChB,QAAI,aAAa;AAUjB,eAAW,CAAC,MAAM,MAAM,KAAK,SAAS;AACpC,UAAI,MAAM,QAAQ,IAAI,KAAK,GAAG;AAC5B,sBAAc;AAEd,gBAAQ,IAAI,IAAI,OAAO,QAAQ,KAAK;AACpC,oBAAY,QAAQ,KAAK,OAAO;AAEhC,YAAI,YAAY,OAAO;AAErB,kBAAQ,IAAI;AACZ,mBAAS,QAAQ,KAAK,OAAO;AAK7B,cAAI,SAAS,OAAO;AAElB,wBAAY;AAEZ,oBAAQ,IAAI;AACZ,qBAAS,QAAQ,KAAK,OAAO;UACvC;QACA,OAAa;AACL,mBAAS;QACjB;MACA;IACA;AAEE,WAAO,CAAC,QAAQ,SAAS,WAAW,WAAW;EACjD;AAEe,WAAA,KAAU,SAAS,OAAO,OAAO,MAAM;AACpD,QAAI,CAAC,QAAQ,SAAS,WAAW,WAAW,IAAI,eAAe,SAAS,OAAO,KAAK;AAEpF,UAAM,kBAAkB,QAAQ;AAEhC,UAAM,kBAAkB,MAAM;MAC5B,CAAC3C,OAAM,CAAC,SAAS,WAAW,WAAW,cAAc,EAAE,QAAQA,EAAC,KAAK;IACzE;AAEE,QAAI,gBAAgB,WAAW,GAAG;AAChC,UAAI,YAAY,OAAO;AACrB,oBAAY,OAAO,KAAK,EAAE,CAAC,WAAW,GAAG,EAAC,CAAE;MAClD;AAEI,UAAI,cAAc,QAAQ;AACxB,gBAAQ,WAAW,KAAK,QAAQ,WAAW,KAAK,KAAK,mBAAmB,YAAY;MAC1F;IACA;AAEE,UAAM,WAAW,SAAS,WAAW,SAAS,IAAI;AAElD,QAAI,gBAAgB,SAAS,GAAG;AAC9B,aAAO,SAAS,WAAW,iBAAiB,IAAI,EAC7C,QAAQ,GAAG,eAAe,EAC1B,KAAK,QAAQ;IACpB,OAAS;AACL,aAAO;IACX;EACA;ACtFA,MAAM,cAAc;AAEpB,WAAS,QAAQ,OAAO,OAAO,CAACxB,OAAMA,IAAG;AACvC,WAAO,EAAE,OAAO,OAAO,CAAC,CAACH,EAAC,MAAM,KAAK,YAAYA,EAAC,CAAC,EAAC;EACtD;AAEA,MAAM,OAAO,OAAO,aAAa,GAAG;AACpC,MAAM,cAAc,KAAK,IAAI;AAC7B,MAAM,oBAAoB,IAAI,OAAO,aAAa,GAAG;AAErD,WAAS,aAAaA,IAAG;AAGvB,WAAOA,GAAE,QAAQ,OAAO,MAAM,EAAE,QAAQ,mBAAmB,WAAW;EACxE;AAEA,WAAS,qBAAqBA,IAAG;AAC/B,WAAOA,GACJ,QAAQ,OAAO,EAAE,EACjB,QAAQ,mBAAmB,GAAG,EAC9B,YAAW;EAChB;AAEA,WAAS,MAAM,SAAS,YAAY;AAClC,QAAI,YAAY,MAAM;AACpB,aAAO;IACX,OAAS;AACL,aAAO;QACL,OAAO,OAAO,QAAQ,IAAI,YAAY,EAAE,KAAK,GAAG,CAAC;QACjD,OAAO,CAAC,CAACA,EAAC,MACR,QAAQ,UAAU,CAACG,OAAM,qBAAqBH,EAAC,MAAM,qBAAqBG,EAAC,CAAC,IAAI;MACxF;IACA;EACA;AAEA,WAASU,QAAO,OAAO,QAAQ;AAC7B,WAAO,EAAE,OAAO,OAAO,CAAC,CAAA,EAAG0D,IAAG3D,EAAC,MAAM,aAAa2D,IAAG3D,EAAC,GAAG,OAAM;EACjE;AAEA,WAAS,OAAO,OAAO;AACrB,WAAO,EAAE,OAAO,OAAO,CAAC,CAACZ,EAAC,MAAMA,GAAC;EACnC;AAEA,WAAS,YAAY,OAAO;AAC1B,WAAO,MAAM,QAAQ,+BAA+B,MAAM;EAC5D;AAMA,WAAS,aAAa,OAAO,KAAK;AAChC,UAAM,MAAM,WAAW,GAAG,GACxB,MAAM,WAAW,KAAK,KAAK,GAC3B,QAAQ,WAAW,KAAK,KAAK,GAC7B,OAAO,WAAW,KAAK,KAAK,GAC5B,MAAM,WAAW,KAAK,KAAK,GAC3B,WAAW,WAAW,KAAK,OAAO,GAClC,aAAa,WAAW,KAAK,OAAO,GACpC,WAAW,WAAW,KAAK,OAAO,GAClC,YAAY,WAAW,KAAK,OAAO,GACnC,YAAY,WAAW,KAAK,OAAO,GACnC,YAAY,WAAW,KAAK,OAAO,GACnC,UAAU,CAACoB,QAAO,EAAE,OAAO,OAAO,YAAYA,GAAE,GAAG,CAAC,GAAG,OAAO,CAAC,CAACpB,EAAC,MAAMA,IAAG,SAAS,KAAI,IACvF,UAAU,CAACoB,OAAM;AACf,UAAI,MAAM,SAAS;AACjB,eAAO,QAAQA,EAAC;MACxB;AACM,cAAQA,GAAE,KAAG;;QAEX,KAAK;AACH,iBAAO,MAAM,IAAI,KAAK,OAAO,GAAG,CAAC;QACnC,KAAK;AACH,iBAAO,MAAM,IAAI,KAAK,MAAM,GAAG,CAAC;;QAElC,KAAK;AACH,iBAAO,QAAQ,QAAQ;QACzB,KAAK;AACH,iBAAO,QAAQ,WAAW,cAAc;QAC1C,KAAK;AACH,iBAAO,QAAQ,IAAI;QACrB,KAAK;AACH,iBAAO,QAAQ,SAAS;QAC1B,KAAK;AACH,iBAAO,QAAQ,GAAG;;QAEpB,KAAK;AACH,iBAAO,QAAQ,QAAQ;QACzB,KAAK;AACH,iBAAO,QAAQ,GAAG;QACpB,KAAK;AACH,iBAAO,MAAM,IAAI,OAAO,SAAS,IAAI,GAAG,CAAC;QAC3C,KAAK;AACH,iBAAO,MAAM,IAAI,OAAO,QAAQ,IAAI,GAAG,CAAC;QAC1C,KAAK;AACH,iBAAO,QAAQ,QAAQ;QACzB,KAAK;AACH,iBAAO,QAAQ,GAAG;QACpB,KAAK;AACH,iBAAO,MAAM,IAAI,OAAO,SAAS,KAAK,GAAG,CAAC;QAC5C,KAAK;AACH,iBAAO,MAAM,IAAI,OAAO,QAAQ,KAAK,GAAG,CAAC;;QAE3C,KAAK;AACH,iBAAO,QAAQ,QAAQ;QACzB,KAAK;AACH,iBAAO,QAAQ,GAAG;;QAEpB,KAAK;AACH,iBAAO,QAAQ,UAAU;QAC3B,KAAK;AACH,iBAAO,QAAQ,KAAK;;QAEtB,KAAK;AACH,iBAAO,QAAQ,GAAG;QACpB,KAAK;AACH,iBAAO,QAAQ,QAAQ;QACzB,KAAK;AACH,iBAAO,QAAQ,GAAG;QACpB,KAAK;AACH,iBAAO,QAAQ,QAAQ;QACzB,KAAK;AACH,iBAAO,QAAQ,GAAG;QACpB,KAAK;AACH,iBAAO,QAAQ,QAAQ;QACzB,KAAK;AACH,iBAAO,QAAQ,QAAQ;QACzB,KAAK;AACH,iBAAO,QAAQ,GAAG;QACpB,KAAK;AACH,iBAAO,QAAQ,QAAQ;QACzB,KAAK;AACH,iBAAO,QAAQ,GAAG;QACpB,KAAK;AACH,iBAAO,QAAQ,UAAU;QAC3B,KAAK;AACH,iBAAO,QAAQ,KAAK;QACtB,KAAK;AACH,iBAAO,OAAO,SAAS;QACzB,KAAK;AACH,iBAAO,OAAO,QAAQ;QACxB,KAAK;AACH,iBAAO,QAAQ,GAAG;;QAEpB,KAAK;AACH,iBAAO,MAAM,IAAI,UAAS,GAAI,CAAC;;QAEjC,KAAK;AACH,iBAAO,QAAQ,IAAI;QACrB,KAAK;AACH,iBAAO,QAAQ,WAAW,cAAc;;QAE1C,KAAK;AACH,iBAAO,QAAQ,QAAQ;QACzB,KAAK;AACH,iBAAO,QAAQ,GAAG;;QAEpB,KAAK;QACL,KAAK;AACH,iBAAO,QAAQ,GAAG;QACpB,KAAK;AACH,iBAAO,MAAM,IAAI,SAAS,SAAS,KAAK,GAAG,CAAC;QAC9C,KAAK;AACH,iBAAO,MAAM,IAAI,SAAS,QAAQ,KAAK,GAAG,CAAC;QAC7C,KAAK;AACH,iBAAO,MAAM,IAAI,SAAS,SAAS,IAAI,GAAG,CAAC;QAC7C,KAAK;AACH,iBAAO,MAAM,IAAI,SAAS,QAAQ,IAAI,GAAG,CAAC;;QAE5C,KAAK;QACL,KAAK;AACH,iBAAOP,QAAO,IAAI,OAAO,QAAQ,SAAS,MAAM,SAAS,IAAI,MAAM,KAAK,GAAG,CAAC;QAC9E,KAAK;AACH,iBAAOA,QAAO,IAAI,OAAO,QAAQ,SAAS,MAAM,KAAK,IAAI,MAAM,IAAI,GAAG,CAAC;;;QAGzE,KAAK;AACH,iBAAO,OAAO,oBAAoB;;;QAGpC,KAAK;AACH,iBAAO,OAAO,WAAW;QAC3B;AACE,iBAAO,QAAQO,EAAC;MAC1B;IACA;AAEE,UAAM,OAAO,QAAQ,KAAK,KAAK;MAC7B,eAAe;IACnB;AAEE,SAAK,QAAQ;AAEb,WAAO;EACT;AAEA,MAAM,0BAA0B;IAC9B,MAAM;MACJ,WAAW;MACX,SAAS;IACb;IACE,OAAO;MACL,SAAS;MACT,WAAW;MACX,OAAO;MACP,MAAM;IACV;IACE,KAAK;MACH,SAAS;MACT,WAAW;IACf;IACE,SAAS;MACP,OAAO;MACP,MAAM;IACV;IACE,WAAW;IACX,WAAW;IACX,QAAQ;MACN,SAAS;MACT,WAAW;IACf;IACE,QAAQ;MACN,SAAS;MACT,WAAW;IACf;IACE,QAAQ;MACN,SAAS;MACT,WAAW;IACf;IACE,QAAQ;MACN,SAAS;MACT,WAAW;IACf;IACE,cAAc;MACZ,MAAM;MACN,OAAO;IACX;EACA;AAEA,WAAS,aAAa,MAAM,YAAY,cAAc;AACpD,UAAM,EAAE,MAAM,MAAK,IAAK;AAExB,QAAI,SAAS,WAAW;AACtB,YAAM,UAAU,QAAQ,KAAK,KAAK;AAClC,aAAO;QACL,SAAS,CAAC;QACV,KAAK,UAAU,MAAM;MAC3B;IACA;AAEE,UAAM,QAAQ,WAAW,IAAI;AAK7B,QAAI,aAAa;AACjB,QAAI,SAAS,QAAQ;AACnB,UAAI,WAAW,UAAU,MAAM;AAC7B,qBAAa,WAAW,SAAS,WAAW;MAClD,WAAe,WAAW,aAAa,MAAM;AACvC,YAAI,WAAW,cAAc,SAAS,WAAW,cAAc,OAAO;AACpE,uBAAa;QACrB,OAAa;AACL,uBAAa;QACrB;MACA,OAAW;AAGL,qBAAa,aAAa,SAAS,WAAW;MACpD;IACA;AACE,QAAI,MAAM,wBAAwB,UAAU;AAC5C,QAAI,OAAO,QAAQ,UAAU;AAC3B,YAAM,IAAI,KAAK;IACnB;AAEE,QAAI,KAAK;AACP,aAAO;QACL,SAAS;QACT;MACN;IACA;AAEE,WAAO;EACT;AAEA,WAAS,WAAW,OAAO;AACzB,UAAM,KAAK,MAAM,IAAI,CAACO,OAAMA,GAAE,KAAK,EAAE,OAAO,CAACrB,IAAGQ,OAAM,GAAGR,EAAC,IAAIQ,GAAE,MAAM,KAAK,EAAE;AAC7E,WAAO,CAAC,IAAI,EAAE,KAAK,KAAK;EAC1B;AAEA,WAAS,MAAM,OAAO,OAAO,UAAU;AACrC,UAAM,UAAU,MAAM,MAAM,KAAK;AAEjC,QAAI,SAAS;AACX,YAAM,MAAM,CAAA;AACZ,UAAI,aAAa;AACjB,iBAAWX,MAAK,UAAU;AACxB,YAAI,eAAe,UAAUA,EAAC,GAAG;AAC/B,gBAAMoE,KAAI,SAASpE,EAAC,GAClB,SAASoE,GAAE,SAASA,GAAE,SAAS,IAAI;AACrC,cAAI,CAACA,GAAE,WAAWA,GAAE,OAAO;AACzB,gBAAIA,GAAE,MAAM,IAAI,CAAC,CAAC,IAAIA,GAAE,MAAM,QAAQ,MAAM,YAAY,aAAa,MAAM,CAAC;UACtF;AACQ,wBAAc;QACtB;MACA;AACI,aAAO,CAAC,SAAS,GAAG;IACxB,OAAS;AACL,aAAO,CAAC,SAAS,CAAA,CAAE;IACvB;EACA;AAEA,WAAS,oBAAoB,SAAS;AACpC,UAAM,UAAU,CAAC,UAAU;AACzB,cAAQ,OAAK;QACX,KAAK;AACH,iBAAO;QACT,KAAK;AACH,iBAAO;QACT,KAAK;AACH,iBAAO;QACT,KAAK;QACL,KAAK;AACH,iBAAO;QACT,KAAK;AACH,iBAAO;QACT,KAAK;AACH,iBAAO;QACT,KAAK;QACL,KAAK;AACH,iBAAO;QACT,KAAK;AACH,iBAAO;QACT,KAAK;QACL,KAAK;AACH,iBAAO;QACT,KAAK;AACH,iBAAO;QACT,KAAK;AACH,iBAAO;QACT,KAAK;AACH,iBAAO;QACT;AACE,iBAAO;MACf;IACA;AAEE,QAAI,OAAO;AACX,QAAI;AACJ,QAAI,CAAC,YAAY,QAAQ,CAAC,GAAG;AAC3B,aAAO,SAAS,OAAO,QAAQ,CAAC;IACpC;AAEE,QAAI,CAAC,YAAY,QAAQ,CAAC,GAAG;AAC3B,UAAI,CAAC,MAAM;AACT,eAAO,IAAI,gBAAgB,QAAQ,CAAC;MAC1C;AACI,uBAAiB,QAAQ;IAC7B;AAEE,QAAI,CAAC,YAAY,QAAQ,CAAC,GAAG;AAC3B,cAAQ,KAAK,QAAQ,IAAI,KAAK,IAAI;IACtC;AAEE,QAAI,CAAC,YAAY,QAAQ,CAAC,GAAG;AAC3B,UAAI,QAAQ,IAAI,MAAM,QAAQ,MAAM,GAAG;AACrC,gBAAQ,KAAK;MACnB,WAAe,QAAQ,MAAM,MAAM,QAAQ,MAAM,GAAG;AAC9C,gBAAQ,IAAI;MAClB;IACA;AAEE,QAAI,QAAQ,MAAM,KAAK,QAAQ,GAAG;AAChC,cAAQ,IAAI,CAAC,QAAQ;IACzB;AAEE,QAAI,CAAC,YAAY,QAAQ,CAAC,GAAG;AAC3B,cAAQ,IAAI,YAAY,QAAQ,CAAC;IACrC;AAEE,UAAM,OAAO,OAAO,KAAK,OAAO,EAAE,OAAO,CAACzD,IAAG,MAAM;AACjD,YAAMR,KAAI,QAAQ,CAAC;AACnB,UAAIA,IAAG;AACL,QAAAQ,GAAER,EAAC,IAAI,QAAQ,CAAC;MACtB;AAEI,aAAOQ;IACX,GAAK,CAAA,CAAE;AAEL,WAAO,CAAC,MAAM,MAAM,cAAc;EACpC;AAEA,MAAI,qBAAqB;AAEzB,WAAS,mBAAmB;AAC1B,QAAI,CAAC,oBAAoB;AACvB,2BAAqB,SAAS,WAAW,aAAa;IAC1D;AAEE,WAAO;EACT;AAEA,WAAS,sBAAsB,OAAO,QAAQ;AAC5C,QAAI,MAAM,SAAS;AACjB,aAAO;IACX;AAEE,UAAM,aAAa,UAAU,uBAAuB,MAAM,GAAG;AAC7D,UAAM,SAAS,mBAAmB,YAAY,MAAM;AAEpD,QAAI,UAAU,QAAQ,OAAO,SAAS,MAAS,GAAG;AAChD,aAAO;IACX;AAEE,WAAO;EACT;AAEO,WAAS,kBAAkB,QAAQ,QAAQ;AAChD,WAAO,MAAM,UAAU,OAAO,GAAG,OAAO,IAAI,CAACM,OAAM,sBAAsBA,IAAG,MAAM,CAAC,CAAC;EACtF;AAMO,MAAM,cAAN,MAAkB;IACvB,YAAY,QAAQ,QAAQ;AAC1B,WAAK,SAAS;AACd,WAAK,SAAS;AACd,WAAK,SAAS,kBAAkB,UAAU,YAAY,MAAM,GAAG,MAAM;AACrE,WAAK,QAAQ,KAAK,OAAO,IAAI,CAACA,OAAM,aAAaA,IAAG,MAAM,CAAC;AAC3D,WAAK,oBAAoB,KAAK,MAAM,KAAK,CAACA,OAAMA,GAAE,aAAa;AAE/D,UAAI,CAAC,KAAK,mBAAmB;AAC3B,cAAM,CAAC,aAAa,QAAQ,IAAI,WAAW,KAAK,KAAK;AACrD,aAAK,QAAQ,OAAO,aAAa,GAAG;AACpC,aAAK,WAAW;MACtB;IACA;IAEE,kBAAkB,OAAO;AACvB,UAAI,CAAC,KAAK,SAAS;AACjB,eAAO,EAAE,OAAO,QAAQ,KAAK,QAAQ,eAAe,KAAK,cAAa;MAC5E,OAAW;AACL,cAAM,CAAC,YAAY,OAAO,IAAI,MAAM,OAAO,KAAK,OAAO,KAAK,QAAQ,GAClE,CAAC,QAAQ,MAAM,cAAc,IAAI,UAC7B,oBAAoB,OAAO,IAC3B,CAAC,MAAM,MAAM,MAAS;AAC5B,YAAI,eAAe,SAAS,GAAG,KAAK,eAAe,SAAS,GAAG,GAAG;AAChE,gBAAM,IAAI;YACR;UACV;QACA;AACM,eAAO;UACL;UACA,QAAQ,KAAK;UACb,OAAO,KAAK;UACZ;UACA;UACA;UACA;UACA;QACR;MACA;IACA;IAEE,IAAI,UAAU;AACZ,aAAO,CAAC,KAAK;IACjB;IAEE,IAAI,gBAAgB;AAClB,aAAO,KAAK,oBAAoB,KAAK,kBAAkB,gBAAgB;IAC3E;EACA;AAEO,WAAS,kBAAkB,QAAQ,OAAO,QAAQ;AACvD,UAAM,SAAS,IAAI,YAAY,QAAQ,MAAM;AAC7C,WAAO,OAAO,kBAAkB,KAAK;EACvC;AAEO,WAAS,gBAAgB,QAAQ,OAAO,QAAQ;AACrD,UAAM,EAAE,QAAQ,MAAM,gBAAgB,cAAa,IAAK,kBAAkB,QAAQ,OAAO,MAAM;AAC/F,WAAO,CAAC,QAAQ,MAAM,gBAAgB,aAAa;EACrD;AAEO,WAAS,mBAAmB,YAAY,QAAQ;AACrD,QAAI,CAAC,YAAY;AACf,aAAO;IACX;AAEE,UAAM,YAAY,UAAU,OAAO,QAAQ,UAAU;AACrD,UAAM,KAAK,UAAU,YAAY,iBAAgB,CAAE;AACnD,UAAM,QAAQ,GAAG,cAAa;AAC9B,UAAM,eAAe,GAAG,gBAAe;AACvC,WAAO,MAAM,IAAI,CAAC8B,OAAM,aAAaA,IAAG,YAAY,YAAY,CAAC;EACnE;ACncA,MAAM,UAAU;AAChB,MAAM,WAAW;AAEjB,WAAS,gBAAgB,MAAM;AAC7B,WAAO,IAAI,QAAQ,oBAAoB,aAAa,KAAK,IAAI,oBAAoB;EACnF;AAMA,WAAS,uBAAuB,IAAI;AAClC,QAAI,GAAG,aAAa,MAAM;AACxB,SAAG,WAAW,gBAAgB,GAAG,CAAC;IACtC;AACE,WAAO,GAAG;EACZ;AAKA,WAAS,4BAA4B,IAAI;AACvC,QAAI,GAAG,kBAAkB,MAAM;AAC7B,SAAG,gBAAgB;QACjB,GAAG;QACH,GAAG,IAAI,sBAAqB;QAC5B,GAAG,IAAI,eAAc;MAC3B;IACA;AACE,WAAO,GAAG;EACZ;AAIA,WAASa,OAAM,MAAM,MAAM;AACzB,UAAM,UAAU;MACd,IAAI,KAAK;MACT,MAAM,KAAK;MACX,GAAG,KAAK;MACR,GAAG,KAAK;MACR,KAAK,KAAK;MACV,SAAS,KAAK;IAClB;AACE,WAAO,IAAI,SAAS,EAAE,GAAG,SAAS,GAAG,MAAM,KAAK,QAAO,CAAE;EAC3D;AAIA,WAAS,UAAU,SAASzC,IAAG,IAAI;AAEjC,QAAI,WAAW,UAAUA,KAAI,KAAK;AAGlC,UAAMkD,MAAK,GAAG,OAAO,QAAQ;AAG7B,QAAIlD,OAAMkD,KAAI;AACZ,aAAO,CAAC,UAAUlD,EAAC;IACvB;AAGE,iBAAakD,MAAKlD,MAAK,KAAK;AAG5B,UAAM,KAAK,GAAG,OAAO,QAAQ;AAC7B,QAAIkD,QAAO,IAAI;AACb,aAAO,CAAC,UAAUA,GAAE;IACxB;AAGE,WAAO,CAAC,UAAU,KAAK,IAAIA,KAAI,EAAE,IAAI,KAAK,KAAM,KAAK,IAAIA,KAAI,EAAE,CAAC;EAClE;AAGA,WAAS,QAAQ,IAAI3D,SAAQ;AAC3B,UAAMA,UAAS,KAAK;AAEpB,UAAMQ,KAAI,IAAI,KAAK,EAAE;AAErB,WAAO;MACL,MAAMA,GAAE,eAAc;MACtB,OAAOA,GAAE,YAAW,IAAK;MACzB,KAAKA,GAAE,WAAU;MACjB,MAAMA,GAAE,YAAW;MACnB,QAAQA,GAAE,cAAa;MACvB,QAAQA,GAAE,cAAa;MACvB,aAAaA,GAAE,mBAAkB;IACrC;EACA;AAGA,WAAS,QAAQ,KAAKR,SAAQ,MAAM;AAClC,WAAO,UAAU,aAAa,GAAG,GAAGA,SAAQ,IAAI;EAClD;AAGA,WAAS,WAAW,MAAM,KAAK;AAC7B,UAAM,OAAO,KAAK,GAChB,OAAO,KAAK,EAAE,OAAO,KAAK,MAAM,IAAI,KAAK,GACzC,QAAQ,KAAK,EAAE,QAAQ,KAAK,MAAM,IAAI,MAAM,IAAI,KAAK,MAAM,IAAI,QAAQ,IAAI,GAC3EoC,KAAI;MACF,GAAG,KAAK;MACR;MACA;MACA,KACE,KAAK,IAAI,KAAK,EAAE,KAAK,YAAY,MAAM,KAAK,CAAC,IAC7C,KAAK,MAAM,IAAI,IAAI,IACnB,KAAK,MAAM,IAAI,KAAK,IAAI;IAChC,GACI,cAAc,SAAS,WAAW;MAChC,OAAO,IAAI,QAAQ,KAAK,MAAM,IAAI,KAAK;MACvC,UAAU,IAAI,WAAW,KAAK,MAAM,IAAI,QAAQ;MAChD,QAAQ,IAAI,SAAS,KAAK,MAAM,IAAI,MAAM;MAC1C,OAAO,IAAI,QAAQ,KAAK,MAAM,IAAI,KAAK;MACvC,MAAM,IAAI,OAAO,KAAK,MAAM,IAAI,IAAI;MACpC,OAAO,IAAI;MACX,SAAS,IAAI;MACb,SAAS,IAAI;MACb,cAAc,IAAI;IACxB,CAAK,EAAE,GAAG,cAAc,GACpB,UAAU,aAAaA,EAAC;AAE1B,QAAI,CAAC,IAAI3B,EAAC,IAAI,UAAU,SAAS,MAAM,KAAK,IAAI;AAEhD,QAAI,gBAAgB,GAAG;AACrB,YAAM;AAEN,MAAAA,KAAI,KAAK,KAAK,OAAO,EAAE;IAC3B;AAEE,WAAO,EAAE,IAAI,GAAAA,GAAC;EAChB;AAIA,WAAS,oBAAoB,QAAQ,YAAY,MAAM,QAAQ2C,OAAM,gBAAgB;AACnF,UAAM,EAAE,SAAS,KAAI,IAAK;AAC1B,QAAK,UAAU,OAAO,KAAK,MAAM,EAAE,WAAW,KAAM,YAAY;AAC9D,YAAM,qBAAqB,cAAc,MACvC,OAAO,SAAS,WAAW,QAAQ;QACjC,GAAG;QACH,MAAM;QACN;MACR,CAAO;AACH,aAAO,UAAU,OAAO,KAAK,QAAQ,IAAI;IAC7C,OAAS;AACL,aAAO,SAAS;QACd,IAAI,QAAQ,cAAc,cAAcA,KAAI,wBAAwB,MAAM,EAAE;MAClF;IACA;EACA;AAIA,WAAS,aAAa,IAAI,QAAQ,SAAS,MAAM;AAC/C,WAAO,GAAG,UACN,UAAU,OAAO,OAAO,OAAO,OAAO,GAAG;MACvC;MACA,aAAa;IACrB,CAAO,EAAE,yBAAyB,IAAI,MAAM,IACtC;EACN;AAEA,WAAS,UAAU3C,IAAG,UAAU,WAAW;AACzC,UAAM,aAAaA,GAAE,EAAE,OAAO,QAAQA,GAAE,EAAE,OAAO;AACjD,QAAI2B,KAAI;AACR,QAAI,cAAc3B,GAAE,EAAE,QAAQ,EAAG,CAAA2B,MAAK;AACtC,IAAAA,MAAK,SAAS3B,GAAE,EAAE,MAAM,aAAa,IAAI,CAAC;AAC1C,QAAI,cAAc,OAAQ,QAAO2B;AACjC,QAAI,UAAU;AACZ,MAAAA,MAAK;AACL,MAAAA,MAAK,SAAS3B,GAAE,EAAE,KAAK;AACvB,UAAI,cAAc,QAAS,QAAO2B;AAClC,MAAAA,MAAK;IACT,OAAS;AACL,MAAAA,MAAK,SAAS3B,GAAE,EAAE,KAAK;AACvB,UAAI,cAAc,QAAS,QAAO2B;IACtC;AACE,IAAAA,MAAK,SAAS3B,GAAE,EAAE,GAAG;AACrB,WAAO2B;EACT;AAEA,WAAS,UACP3B,IACA,UACA,iBACA,sBACA,eACA,cACA,WACA;AACA,QAAI,cAAc,CAAC,mBAAmBA,GAAE,EAAE,gBAAgB,KAAKA,GAAE,EAAE,WAAW,GAC5E2B,KAAI;AACN,YAAQ,WAAS;MACf,KAAK;MACL,KAAK;MACL,KAAK;AACH;MACF;AACE,QAAAA,MAAK,SAAS3B,GAAE,EAAE,IAAI;AACtB,YAAI,cAAc,OAAQ;AAC1B,YAAI,UAAU;AACZ,UAAA2B,MAAK;AACL,UAAAA,MAAK,SAAS3B,GAAE,EAAE,MAAM;AACxB,cAAI,cAAc,SAAU;AAC5B,cAAI,aAAa;AACf,YAAA2B,MAAK;AACL,YAAAA,MAAK,SAAS3B,GAAE,EAAE,MAAM;UAClC;QACA,OAAa;AACL,UAAA2B,MAAK,SAAS3B,GAAE,EAAE,MAAM;AACxB,cAAI,cAAc,SAAU;AAC5B,cAAI,aAAa;AACf,YAAA2B,MAAK,SAAS3B,GAAE,EAAE,MAAM;UAClC;QACA;AACM,YAAI,cAAc,SAAU;AAC5B,YAAI,gBAAgB,CAAC,wBAAwBA,GAAE,EAAE,gBAAgB,IAAI;AACnE,UAAA2B,MAAK;AACL,UAAAA,MAAK,SAAS3B,GAAE,EAAE,aAAa,CAAC;QACxC;IACA;AAEE,QAAI,eAAe;AACjB,UAAIA,GAAE,iBAAiBA,GAAE,WAAW,KAAK,CAAC,cAAc;AACtD,QAAA2B,MAAK;MACX,WAAe3B,GAAE,IAAI,GAAG;AAClB,QAAA2B,MAAK;AACL,QAAAA,MAAK,SAAS,KAAK,MAAM,CAAC3B,GAAE,IAAI,EAAE,CAAC;AACnC,QAAA2B,MAAK;AACL,QAAAA,MAAK,SAAS,KAAK,MAAM,CAAC3B,GAAE,IAAI,EAAE,CAAC;MACzC,OAAW;AACL,QAAA2B,MAAK;AACL,QAAAA,MAAK,SAAS,KAAK,MAAM3B,GAAE,IAAI,EAAE,CAAC;AAClC,QAAA2B,MAAK;AACL,QAAAA,MAAK,SAAS,KAAK,MAAM3B,GAAE,IAAI,EAAE,CAAC;MACxC;IACA;AAEE,QAAI,cAAc;AAChB,MAAA2B,MAAK,MAAM3B,GAAE,KAAK,WAAW;IACjC;AACE,WAAO2B;EACT;AAGA,MAAM,oBAAoB;IACtB,OAAO;IACP,KAAK;IACL,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,aAAa;EACjB;AAPA,MAQE,wBAAwB;IACtB,YAAY;IACZ,SAAS;IACT,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,aAAa;EACjB;AAfA,MAgBE,2BAA2B;IACzB,SAAS;IACT,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,aAAa;EACjB;AAGA,MAAM,eAAe,CAAC,QAAQ,SAAS,OAAO,QAAQ,UAAU,UAAU,aAAa;AAAvF,MACE,mBAAmB;IACjB;IACA;IACA;IACA;IACA;IACA;IACA;EACJ;AATA,MAUE,sBAAsB,CAAC,QAAQ,WAAW,QAAQ,UAAU,UAAU,aAAa;AAGrF,WAAS,cAAc,MAAM;AAC3B,UAAM,aAAa;MACjB,MAAM;MACN,OAAO;MACP,OAAO;MACP,QAAQ;MACR,KAAK;MACL,MAAM;MACN,MAAM;MACN,OAAO;MACP,QAAQ;MACR,SAAS;MACT,SAAS;MACT,UAAU;MACV,QAAQ;MACR,SAAS;MACT,aAAa;MACb,cAAc;MACd,SAAS;MACT,UAAU;MACV,YAAY;MACZ,aAAa;MACb,aAAa;MACb,UAAU;MACV,WAAW;MACX,SAAS;IACb,EAAI,KAAK,YAAW,CAAE;AAEpB,QAAI,CAAC,WAAY,OAAM,IAAI,iBAAiB,IAAI;AAEhD,WAAO;EACT;AAEA,WAAS,4BAA4B,MAAM;AACzC,YAAQ,KAAK,YAAW,GAAE;MACxB,KAAK;MACL,KAAK;AACH,eAAO;MACT,KAAK;MACL,KAAK;AACH,eAAO;MACT,KAAK;MACL,KAAK;AACH,eAAO;MACT;AACE,eAAO,cAAc,IAAI;IAC/B;EACA;AAyBA,WAAS,mBAAmB,MAAM;AAChC,QAAI,iBAAiB,QAAW;AAC9B,qBAAe,SAAS,IAAG;IAC/B;AAIE,QAAI,KAAK,SAAS,QAAQ;AACxB,aAAO,KAAK,OAAO,YAAY;IACnC;AACE,UAAM,WAAW,KAAK;AACtB,QAAI,cAAc,qBAAqB,IAAI,QAAQ;AACnD,QAAI,gBAAgB,QAAW;AAC7B,oBAAc,KAAK,OAAO,YAAY;AACtC,2BAAqB,IAAI,UAAU,WAAW;IAClD;AACE,WAAO;EACT;AAKA,WAAS,QAAQ,KAAK,MAAM;AAC1B,UAAM,OAAO,cAAc,KAAK,MAAM,SAAS,WAAW;AAC1D,QAAI,CAAC,KAAK,SAAS;AACjB,aAAO,SAAS,QAAQ,gBAAgB,IAAI,CAAC;IACjD;AAEE,UAAM,MAAM,OAAO,WAAW,IAAI;AAElC,QAAI,IAAI3B;AAGR,QAAI,CAAC,YAAY,IAAI,IAAI,GAAG;AAC1B,iBAAWK,MAAK,cAAc;AAC5B,YAAI,YAAY,IAAIA,EAAC,CAAC,GAAG;AACvB,cAAIA,EAAC,IAAI,kBAAkBA,EAAC;QACpC;MACA;AAEI,YAAM,UAAU,wBAAwB,GAAG,KAAK,mBAAmB,GAAG;AACtE,UAAI,SAAS;AACX,eAAO,SAAS,QAAQ,OAAO;MACrC;AAEI,YAAM,eAAe,mBAAmB,IAAI;AAC5C,OAAC,IAAIL,EAAC,IAAI,QAAQ,KAAK,cAAc,IAAI;IAC7C,OAAS;AACL,WAAK,SAAS,IAAG;IACrB;AAEE,WAAO,IAAI,SAAS,EAAE,IAAI,MAAM,KAAK,GAAAA,GAAC,CAAE;EAC1C;AAEA,WAAS,aAAa8C,QAAOC,MAAK,MAAM;AACtC,UAAMI,SAAQ,YAAY,KAAK,KAAK,IAAI,OAAO,KAAK,OAClD,WAAW,YAAY,KAAK,QAAQ,IAAI,UAAU,KAAK,UACvD,SAAS,CAACxB,IAAG,SAAS;AACpB,MAAAA,KAAI,QAAQA,IAAGwB,UAAS,KAAK,YAAY,IAAI,GAAG,KAAK,YAAY,UAAU,QAAQ;AACnF,YAAM,YAAYJ,KAAI,IAAI,MAAM,IAAI,EAAE,aAAa,IAAI;AACvD,aAAO,UAAU,OAAOpB,IAAG,IAAI;IACrC,GACI,SAAS,CAAC,SAAS;AACjB,UAAI,KAAK,WAAW;AAClB,YAAI,CAACoB,KAAI,QAAQD,QAAO,IAAI,GAAG;AAC7B,iBAAOC,KAAI,QAAQ,IAAI,EAAE,KAAKD,OAAM,QAAQ,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI;QAC3E,MAAe,QAAO;MACtB,OAAa;AACL,eAAOC,KAAI,KAAKD,QAAO,IAAI,EAAE,IAAI,IAAI;MAC7C;IACA;AAEE,QAAI,KAAK,MAAM;AACb,aAAO,OAAO,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI;IAC9C;AAEE,eAAW,QAAQ,KAAK,OAAO;AAC7B,YAAM,QAAQ,OAAO,IAAI;AACzB,UAAI,KAAK,IAAI,KAAK,KAAK,GAAG;AACxB,eAAO,OAAO,OAAO,IAAI;MAC/B;IACA;AACE,WAAO,OAAOA,SAAQC,OAAM,KAAK,GAAG,KAAK,MAAM,KAAK,MAAM,SAAS,CAAC,CAAC;EACvE;AAEA,WAAS,SAAS,SAAS;AACzB,QAAI,OAAO,CAAA,GACT;AACF,QAAI,QAAQ,SAAS,KAAK,OAAO,QAAQ,QAAQ,SAAS,CAAC,MAAM,UAAU;AACzE,aAAO,QAAQ,QAAQ,SAAS,CAAC;AACjC,aAAO,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,QAAQ,SAAS,CAAC;IAC1D,OAAS;AACL,aAAO,MAAM,KAAK,OAAO;IAC7B;AACE,WAAO,CAAC,MAAM,IAAI;EACpB;AAKA,MAAI;AAOJ,MAAM,uBAAuB,oBAAI,IAAG;AAsBrB,MAAM,WAAN,MAAM,UAAS;;;;IAI5B,YAAYL,SAAQ;AAClB,YAAM,OAAOA,QAAO,QAAQ,SAAS;AAErC,UAAI,UACFA,QAAO,YACN,OAAO,MAAMA,QAAO,EAAE,IAAI,IAAI,QAAQ,eAAe,IAAI,UACzD,CAAC,KAAK,UAAU,gBAAgB,IAAI,IAAI;AAI3C,WAAK,KAAK,YAAYA,QAAO,EAAE,IAAI,SAAS,IAAG,IAAKA,QAAO;AAE3D,UAAIf,KAAI,MACN3B,KAAI;AACN,UAAI,CAAC,SAAS;AACZ,cAAM,YAAY0C,QAAO,OAAOA,QAAO,IAAI,OAAO,KAAK,MAAMA,QAAO,IAAI,KAAK,OAAO,IAAI;AAExF,YAAI,WAAW;AACb,WAACf,IAAG3B,EAAC,IAAI,CAAC0C,QAAO,IAAI,GAAGA,QAAO,IAAI,CAAC;QAC5C,OAAa;AAGL,gBAAM,KAAKhD,UAASgD,QAAO,CAAC,KAAK,CAACA,QAAO,MAAMA,QAAO,IAAI,KAAK,OAAO,KAAK,EAAE;AAC7E,UAAAf,KAAI,QAAQ,KAAK,IAAI,EAAE;AACvB,oBAAU,OAAO,MAAMA,GAAE,IAAI,IAAI,IAAI,QAAQ,eAAe,IAAI;AAChE,UAAAA,KAAI,UAAU,OAAOA;AACrB,UAAA3B,KAAI,UAAU,OAAO;QAC7B;MACA;AAKI,WAAK,QAAQ;AAIb,WAAK,MAAM0C,QAAO,OAAO,OAAO,OAAM;AAItC,WAAK,UAAU;AAIf,WAAK,WAAW;AAIhB,WAAK,gBAAgB;AAIrB,WAAK,IAAIf;AAIT,WAAK,IAAI3B;AAIT,WAAK,kBAAkB;IAC3B;;;;;;;;;IAWE,OAAO,MAAM;AACX,aAAO,IAAI,UAAS,CAAA,CAAE;IAC1B;;;;;;;;;;;;;;;;;;;;;;IAuBE,OAAO,QAAQ;AACb,YAAM,CAAC,MAAM,IAAI,IAAI,SAAS,SAAS,GACrC,CAAC,MAAM,OAAO,KAAK,MAAM,QAAQjB,SAAQ,WAAW,IAAI;AAC1D,aAAO,QAAQ,EAAE,MAAM,OAAO,KAAK,MAAM,QAAQ,QAAAA,SAAQ,YAAW,GAAI,IAAI;IAChF;;;;;;;;;;;;;;;;;;;;;;;;;;IA2BE,OAAO,MAAM;AACX,YAAM,CAAC,MAAM,IAAI,IAAI,SAAS,SAAS,GACrC,CAAC,MAAM,OAAO,KAAK,MAAM,QAAQA,SAAQ,WAAW,IAAI;AAE1D,WAAK,OAAO,gBAAgB;AAC5B,aAAO,QAAQ,EAAE,MAAM,OAAO,KAAK,MAAM,QAAQ,QAAAA,SAAQ,YAAW,GAAI,IAAI;IAChF;;;;;;;;IASE,OAAO,WAAW,MAAM,UAAU,CAAA,GAAI;AACpC,YAAM,KAAK,OAAO,IAAI,IAAI,KAAK,QAAO,IAAK;AAC3C,UAAI,OAAO,MAAM,EAAE,GAAG;AACpB,eAAO,UAAS,QAAQ,eAAe;MAC7C;AAEI,YAAM,YAAY,cAAc,QAAQ,MAAM,SAAS,WAAW;AAClE,UAAI,CAAC,UAAU,SAAS;AACtB,eAAO,UAAS,QAAQ,gBAAgB,SAAS,CAAC;MACxD;AAEI,aAAO,IAAI,UAAS;QAClB;QACA,MAAM;QACN,KAAK,OAAO,WAAW,OAAO;MACpC,CAAK;IACL;;;;;;;;;;;;IAaE,OAAO,WAAW,cAAc,UAAU,CAAA,GAAI;AAC5C,UAAI,CAACW,UAAS,YAAY,GAAG;AAC3B,cAAM,IAAI;UACR,yDAAyD,OAAO,YAAY,eAAe,YAAY;QAC/G;MACA,WAAe,eAAe,CAAC,YAAY,eAAe,UAAU;AAE9D,eAAO,UAAS,QAAQ,wBAAwB;MACtD,OAAW;AACL,eAAO,IAAI,UAAS;UAClB,IAAI;UACJ,MAAM,cAAc,QAAQ,MAAM,SAAS,WAAW;UACtD,KAAK,OAAO,WAAW,OAAO;QACtC,CAAO;MACP;IACA;;;;;;;;;;;;IAaE,OAAO,YAAY,SAAS,UAAU,CAAA,GAAI;AACxC,UAAI,CAACA,UAAS,OAAO,GAAG;AACtB,cAAM,IAAI,qBAAqB,wCAAwC;MAC7E,OAAW;AACL,eAAO,IAAI,UAAS;UAClB,IAAI,UAAU;UACd,MAAM,cAAc,QAAQ,MAAM,SAAS,WAAW;UACtD,KAAK,OAAO,WAAW,OAAO;QACtC,CAAO;MACP;IACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAmCE,OAAO,WAAW,KAAK,OAAO,CAAA,GAAI;AAChC,YAAM,OAAO,CAAA;AACb,YAAM,YAAY,cAAc,KAAK,MAAM,SAAS,WAAW;AAC/D,UAAI,CAAC,UAAU,SAAS;AACtB,eAAO,UAAS,QAAQ,gBAAgB,SAAS,CAAC;MACxD;AAEI,YAAM,MAAM,OAAO,WAAW,IAAI;AAClC,YAAM,aAAa,gBAAgB,KAAK,2BAA2B;AACnE,YAAM,EAAE,oBAAoB,YAAW,IAAK,oBAAoB,YAAY,GAAG;AAE/E,YAAM,QAAQ,SAAS,IAAG,GACxB,eAAe,CAAC,YAAY,KAAK,cAAc,IAC3C,KAAK,iBACL,UAAU,OAAO,KAAK,GAC1B,kBAAkB,CAAC,YAAY,WAAW,OAAO,GACjD,qBAAqB,CAAC,YAAY,WAAW,IAAI,GACjD,mBAAmB,CAAC,YAAY,WAAW,KAAK,KAAK,CAAC,YAAY,WAAW,GAAG,GAChF,iBAAiB,sBAAsB,kBACvC,kBAAkB,WAAW,YAAY,WAAW;AAQtD,WAAK,kBAAkB,oBAAoB,iBAAiB;AAC1D,cAAM,IAAI;UACR;QACR;MACA;AAEI,UAAI,oBAAoB,iBAAiB;AACvC,cAAM,IAAI,8BAA8B,wCAAwC;MACtF;AAEI,YAAM,cAAc,mBAAoB,WAAW,WAAW,CAAC;AAG/D,UAAI,OACF,eACA,SAAS,QAAQ,OAAO,YAAY;AACtC,UAAI,aAAa;AACf,gBAAQ;AACR,wBAAgB;AAChB,iBAAS,gBAAgB,QAAQ,oBAAoB,WAAW;MACtE,WAAe,iBAAiB;AAC1B,gBAAQ;AACR,wBAAgB;AAChB,iBAAS,mBAAmB,MAAM;MACxC,OAAW;AACL,gBAAQ;AACR,wBAAgB;MACtB;AAGI,UAAI,aAAa;AACjB,iBAAWW,MAAK,OAAO;AACrB,cAAM,IAAI,WAAWA,EAAC;AACtB,YAAI,CAAC,YAAY,CAAC,GAAG;AACnB,uBAAa;QACrB,WAAiB,YAAY;AACrB,qBAAWA,EAAC,IAAI,cAAcA,EAAC;QACvC,OAAa;AACL,qBAAWA,EAAC,IAAI,OAAOA,EAAC;QAChC;MACA;AAGI,YAAM,qBAAqB,cACrB,mBAAmB,YAAY,oBAAoB,WAAW,IAC9D,kBACA,sBAAsB,UAAU,IAChC,wBAAwB,UAAU,GACtC,UAAU,sBAAsB,mBAAmB,UAAU;AAE/D,UAAI,SAAS;AACX,eAAO,UAAS,QAAQ,OAAO;MACrC;AAGI,YAAM,YAAY,cACZ,gBAAgB,YAAY,oBAAoB,WAAW,IAC3D,kBACA,mBAAmB,UAAU,IAC7B,YACJ,CAAC,SAAS,WAAW,IAAI,QAAQ,WAAW,cAAc,SAAS,GACnE,OAAO,IAAI,UAAS;QAClB,IAAI;QACJ,MAAM;QACN,GAAG;QACH;MACR,CAAO;AAGH,UAAI,WAAW,WAAW,kBAAkB,IAAI,YAAY,KAAK,SAAS;AACxE,eAAO,UAAS;UACd;UACA,uCAAuC,WAAW,OAAO,kBAAkB,KAAK,MAAK,CAAE;QAC/F;MACA;AAEI,UAAI,CAAC,KAAK,SAAS;AACjB,eAAO,UAAS,QAAQ,KAAK,OAAO;MAC1C;AAEI,aAAO;IACX;;;;;;;;;;;;;;;;;;IAmBE,OAAO,QAAQsC,OAAM,OAAO,CAAA,GAAI;AAC9B,YAAM,CAAC,MAAM,UAAU,IAAI,aAAaA,KAAI;AAC5C,aAAO,oBAAoB,MAAM,YAAY,MAAM,YAAYA,KAAI;IACvE;;;;;;;;;;;;;;;;IAiBE,OAAO,YAAYA,OAAM,OAAO,CAAA,GAAI;AAClC,YAAM,CAAC,MAAM,UAAU,IAAI,iBAAiBA,KAAI;AAChD,aAAO,oBAAoB,MAAM,YAAY,MAAM,YAAYA,KAAI;IACvE;;;;;;;;;;;;;;;;;IAkBE,OAAO,SAASA,OAAM,OAAO,CAAA,GAAI;AAC/B,YAAM,CAAC,MAAM,UAAU,IAAI,cAAcA,KAAI;AAC7C,aAAO,oBAAoB,MAAM,YAAY,MAAM,QAAQ,IAAI;IACnE;;;;;;;;;;;;;;;IAgBE,OAAO,WAAWA,OAAM,KAAK,OAAO,CAAA,GAAI;AACtC,UAAI,YAAYA,KAAI,KAAK,YAAY,GAAG,GAAG;AACzC,cAAM,IAAI,qBAAqB,kDAAkD;MACvF;AAEI,YAAM,EAAE,SAAS,MAAM,kBAAkB,KAAI,IAAK,MAChD,cAAc,OAAO,SAAS;QAC5B;QACA;QACA,aAAa;MACrB,CAAO,GACD,CAAC,MAAM,YAAY,gBAAgB,OAAO,IAAI,gBAAgB,aAAaA,OAAM,GAAG;AACtF,UAAI,SAAS;AACX,eAAO,UAAS,QAAQ,OAAO;MACrC,OAAW;AACL,eAAO,oBAAoB,MAAM,YAAY,MAAM,UAAU,GAAG,IAAIA,OAAM,cAAc;MAC9F;IACA;;;;IAKE,OAAO,WAAWA,OAAM,KAAK,OAAO,CAAA,GAAI;AACtC,aAAO,UAAS,WAAWA,OAAM,KAAK,IAAI;IAC9C;;;;;;;;;;;;;;;;;;;;;;IAuBE,OAAO,QAAQA,OAAM,OAAO,CAAA,GAAI;AAC9B,YAAM,CAAC,MAAM,UAAU,IAAI,SAASA,KAAI;AACxC,aAAO,oBAAoB,MAAM,YAAY,MAAM,OAAOA,KAAI;IAClE;;;;;;;IAQE,OAAO,QAAQ,QAAQ,cAAc,MAAM;AACzC,UAAI,CAAC,QAAQ;AACX,cAAM,IAAI,qBAAqB,kDAAkD;MACvF;AAEI,YAAM,UAAU,kBAAkB,UAAU,SAAS,IAAI,QAAQ,QAAQ,WAAW;AAEpF,UAAI,SAAS,gBAAgB;AAC3B,cAAM,IAAI,qBAAqB,OAAO;MAC5C,OAAW;AACL,eAAO,IAAI,UAAS,EAAE,QAAO,CAAE;MACrC;IACA;;;;;;IAOE,OAAO,WAAW3C,IAAG;AACnB,aAAQA,MAAKA,GAAE,mBAAoB;IACvC;;;;;;;IAQE,OAAO,mBAAmB,YAAY,aAAa,CAAA,GAAI;AACrD,YAAM,YAAY,mBAAmB,YAAY,OAAO,WAAW,UAAU,CAAC;AAC9E,aAAO,CAAC,YAAY,OAAO,UAAU,IAAI,CAACF,OAAOA,KAAIA,GAAE,MAAM,IAAK,EAAE,KAAK,EAAE;IAC/E;;;;;;;;IASE,OAAO,aAAa,KAAK,aAAa,CAAA,GAAI;AACxC,YAAM,WAAW,kBAAkB,UAAU,YAAY,GAAG,GAAG,OAAO,WAAW,UAAU,CAAC;AAC5F,aAAO,SAAS,IAAI,CAACA,OAAMA,GAAE,GAAG,EAAE,KAAK,EAAE;IAC7C;IAEE,OAAO,aAAa;AAClB,qBAAe;AACf,2BAAqB,MAAK;IAC9B;;;;;;;;;IAWE,IAAI,MAAM;AACR,aAAO,KAAK,IAAI;IACpB;;;;;;;IAQE,IAAI,UAAU;AACZ,aAAO,KAAK,YAAY;IAC5B;;;;;IAME,IAAI,gBAAgB;AAClB,aAAO,KAAK,UAAU,KAAK,QAAQ,SAAS;IAChD;;;;;IAME,IAAI,qBAAqB;AACvB,aAAO,KAAK,UAAU,KAAK,QAAQ,cAAc;IACrD;;;;;;IAOE,IAAI,SAAS;AACX,aAAO,KAAK,UAAU,KAAK,IAAI,SAAS;IAC5C;;;;;;IAOE,IAAI,kBAAkB;AACpB,aAAO,KAAK,UAAU,KAAK,IAAI,kBAAkB;IACrD;;;;;;IAOE,IAAI,iBAAiB;AACnB,aAAO,KAAK,UAAU,KAAK,IAAI,iBAAiB;IACpD;;;;;IAME,IAAI,OAAO;AACT,aAAO,KAAK;IAChB;;;;;IAME,IAAI,WAAW;AACb,aAAO,KAAK,UAAU,KAAK,KAAK,OAAO;IAC3C;;;;;;IAOE,IAAI,OAAO;AACT,aAAO,KAAK,UAAU,KAAK,EAAE,OAAO;IACxC;;;;;;IAOE,IAAI,UAAU;AACZ,aAAO,KAAK,UAAU,KAAK,KAAK,KAAK,EAAE,QAAQ,CAAC,IAAI;IACxD;;;;;;IAOE,IAAI,QAAQ;AACV,aAAO,KAAK,UAAU,KAAK,EAAE,QAAQ;IACzC;;;;;;IAOE,IAAI,MAAM;AACR,aAAO,KAAK,UAAU,KAAK,EAAE,MAAM;IACvC;;;;;;IAOE,IAAI,OAAO;AACT,aAAO,KAAK,UAAU,KAAK,EAAE,OAAO;IACxC;;;;;;IAOE,IAAI,SAAS;AACX,aAAO,KAAK,UAAU,KAAK,EAAE,SAAS;IAC1C;;;;;;IAOE,IAAI,SAAS;AACX,aAAO,KAAK,UAAU,KAAK,EAAE,SAAS;IAC1C;;;;;;IAOE,IAAI,cAAc;AAChB,aAAO,KAAK,UAAU,KAAK,EAAE,cAAc;IAC/C;;;;;;;IAQE,IAAI,WAAW;AACb,aAAO,KAAK,UAAU,uBAAuB,IAAI,EAAE,WAAW;IAClE;;;;;;;IAQE,IAAI,aAAa;AACf,aAAO,KAAK,UAAU,uBAAuB,IAAI,EAAE,aAAa;IACpE;;;;;;;;IASE,IAAI,UAAU;AACZ,aAAO,KAAK,UAAU,uBAAuB,IAAI,EAAE,UAAU;IACjE;;;;;IAME,IAAI,YAAY;AACd,aAAO,KAAK,WAAW,KAAK,IAAI,eAAc,EAAG,SAAS,KAAK,OAAO;IAC1E;;;;;;;IAQE,IAAI,eAAe;AACjB,aAAO,KAAK,UAAU,4BAA4B,IAAI,EAAE,UAAU;IACtE;;;;;;;IAQE,IAAI,kBAAkB;AACpB,aAAO,KAAK,UAAU,4BAA4B,IAAI,EAAE,aAAa;IACzE;;;;;;IAOE,IAAI,gBAAgB;AAClB,aAAO,KAAK,UAAU,4BAA4B,IAAI,EAAE,WAAW;IACvE;;;;;;IAOE,IAAI,UAAU;AACZ,aAAO,KAAK,UAAU,mBAAmB,KAAK,CAAC,EAAE,UAAU;IAC/D;;;;;;;IAQE,IAAI,aAAa;AACf,aAAO,KAAK,UAAU,KAAK,OAAO,SAAS,EAAE,QAAQ,KAAK,IAAG,CAAE,EAAE,KAAK,QAAQ,CAAC,IAAI;IACvF;;;;;;;IAQE,IAAI,YAAY;AACd,aAAO,KAAK,UAAU,KAAK,OAAO,QAAQ,EAAE,QAAQ,KAAK,IAAG,CAAE,EAAE,KAAK,QAAQ,CAAC,IAAI;IACtF;;;;;;;IAQE,IAAI,eAAe;AACjB,aAAO,KAAK,UAAU,KAAK,SAAS,SAAS,EAAE,QAAQ,KAAK,IAAG,CAAE,EAAE,KAAK,UAAU,CAAC,IAAI;IAC3F;;;;;;;IAQE,IAAI,cAAc;AAChB,aAAO,KAAK,UAAU,KAAK,SAAS,QAAQ,EAAE,QAAQ,KAAK,IAAG,CAAE,EAAE,KAAK,UAAU,CAAC,IAAI;IAC1F;;;;;;;IAQE,IAAI,SAAS;AACX,aAAO,KAAK,UAAU,CAAC,KAAK,IAAI;IACpC;;;;;;IAOE,IAAI,kBAAkB;AACpB,UAAI,KAAK,SAAS;AAChB,eAAO,KAAK,KAAK,WAAW,KAAK,IAAI;UACnC,QAAQ;UACR,QAAQ,KAAK;QACrB,CAAO;MACP,OAAW;AACL,eAAO;MACb;IACA;;;;;;IAOE,IAAI,iBAAiB;AACnB,UAAI,KAAK,SAAS;AAChB,eAAO,KAAK,KAAK,WAAW,KAAK,IAAI;UACnC,QAAQ;UACR,QAAQ,KAAK;QACrB,CAAO;MACP,OAAW;AACL,eAAO;MACb;IACA;;;;;IAME,IAAI,gBAAgB;AAClB,aAAO,KAAK,UAAU,KAAK,KAAK,cAAc;IAClD;;;;;IAME,IAAI,UAAU;AACZ,UAAI,KAAK,eAAe;AACtB,eAAO;MACb,OAAW;AACL,eACE,KAAK,SAAS,KAAK,IAAI,EAAE,OAAO,GAAG,KAAK,EAAC,CAAE,EAAE,UAC7C,KAAK,SAAS,KAAK,IAAI,EAAE,OAAO,EAAC,CAAE,EAAE;MAE7C;IACA;;;;;;;;IASE,qBAAqB;AACnB,UAAI,CAAC,KAAK,WAAW,KAAK,eAAe;AACvC,eAAO,CAAC,IAAI;MAClB;AACI,YAAM,QAAQ;AACd,YAAM,WAAW;AACjB,YAAM,UAAU,aAAa,KAAK,CAAC;AACnC,YAAM,WAAW,KAAK,KAAK,OAAO,UAAU,KAAK;AACjD,YAAM,SAAS,KAAK,KAAK,OAAO,UAAU,KAAK;AAE/C,YAAM,KAAK,KAAK,KAAK,OAAO,UAAU,WAAW,QAAQ;AACzD,YAAM,KAAK,KAAK,KAAK,OAAO,UAAU,SAAS,QAAQ;AACvD,UAAI,OAAO,IAAI;AACb,eAAO,CAAC,IAAI;MAClB;AACI,YAAM,MAAM,UAAU,KAAK;AAC3B,YAAM,MAAM,UAAU,KAAK;AAC3B,YAAM,KAAK,QAAQ,KAAK,EAAE;AAC1B,YAAM,KAAK,QAAQ,KAAK,EAAE;AAC1B,UACE,GAAG,SAAS,GAAG,QACf,GAAG,WAAW,GAAG,UACjB,GAAG,WAAW,GAAG,UACjB,GAAG,gBAAgB,GAAG,aACtB;AACA,eAAO,CAAC2C,OAAM,MAAM,EAAE,IAAI,IAAG,CAAE,GAAGA,OAAM,MAAM,EAAE,IAAI,IAAG,CAAE,CAAC;MAChE;AACI,aAAO,CAAC,IAAI;IAChB;;;;;;;IAQE,IAAI,eAAe;AACjB,aAAO,WAAW,KAAK,IAAI;IAC/B;;;;;;;IAQE,IAAI,cAAc;AAChB,aAAO,YAAY,KAAK,MAAM,KAAK,KAAK;IAC5C;;;;;;;IAQE,IAAI,aAAa;AACf,aAAO,KAAK,UAAU,WAAW,KAAK,IAAI,IAAI;IAClD;;;;;;;;IASE,IAAI,kBAAkB;AACpB,aAAO,KAAK,UAAU,gBAAgB,KAAK,QAAQ,IAAI;IAC3D;;;;;;;IAQE,IAAI,uBAAuB;AACzB,aAAO,KAAK,UACR;QACE,KAAK;QACL,KAAK,IAAI,sBAAqB;QAC9B,KAAK,IAAI,eAAc;MACjC,IACQ;IACR;;;;;;;IAQE,sBAAsB,OAAO,CAAA,GAAI;AAC/B,YAAM,EAAE,QAAQ,iBAAiB,SAAQ,IAAK,UAAU;QACtD,KAAK,IAAI,MAAM,IAAI;QACnB;MACN,EAAM,gBAAgB,IAAI;AACtB,aAAO,EAAE,QAAQ,iBAAiB,gBAAgB,SAAQ;IAC9D;;;;;;;;;;IAYE,MAAMlD,UAAS,GAAG,OAAO,CAAA,GAAI;AAC3B,aAAO,KAAK,QAAQ,gBAAgB,SAASA,OAAM,GAAG,IAAI;IAC9D;;;;;;;IAQE,UAAU;AACR,aAAO,KAAK,QAAQ,SAAS,WAAW;IAC5C;;;;;;;;;;IAWE,QAAQ,MAAM,EAAE,gBAAgB,OAAO,mBAAmB,MAAK,IAAK,CAAA,GAAI;AACtE,aAAO,cAAc,MAAM,SAAS,WAAW;AAC/C,UAAI,KAAK,OAAO,KAAK,IAAI,GAAG;AAC1B,eAAO;MACb,WAAe,CAAC,KAAK,SAAS;AACxB,eAAO,UAAS,QAAQ,gBAAgB,IAAI,CAAC;MACnD,OAAW;AACL,YAAI,QAAQ,KAAK;AACjB,YAAI,iBAAiB,kBAAkB;AACrC,gBAAM,cAAc,KAAK,OAAO,KAAK,EAAE;AACvC,gBAAM,QAAQ,KAAK,SAAQ;AAC3B,WAAC,KAAK,IAAI,QAAQ,OAAO,aAAa,IAAI;QAClD;AACM,eAAOkD,OAAM,MAAM,EAAE,IAAI,OAAO,KAAI,CAAE;MAC5C;IACA;;;;;;;IAQE,YAAY,EAAE,QAAQ,iBAAiB,eAAc,IAAK,CAAA,GAAI;AAC5D,YAAM,MAAM,KAAK,IAAI,MAAM,EAAE,QAAQ,iBAAiB,eAAc,CAAE;AACtE,aAAOA,OAAM,MAAM,EAAE,IAAG,CAAE;IAC9B;;;;;;;IAQE,UAAU,QAAQ;AAChB,aAAO,KAAK,YAAY,EAAE,OAAM,CAAE;IACtC;;;;;;;;;;;;;;IAeE,IAAI,QAAQ;AACV,UAAI,CAAC,KAAK,QAAS,QAAO;AAE1B,YAAM,aAAa,gBAAgB,QAAQ,2BAA2B;AACtE,YAAM,EAAE,oBAAoB,YAAW,IAAK,oBAAoB,YAAY,KAAK,GAAG;AAEpF,YAAM,mBACF,CAAC,YAAY,WAAW,QAAQ,KAChC,CAAC,YAAY,WAAW,UAAU,KAClC,CAAC,YAAY,WAAW,OAAO,GACjC,kBAAkB,CAAC,YAAY,WAAW,OAAO,GACjD,qBAAqB,CAAC,YAAY,WAAW,IAAI,GACjD,mBAAmB,CAAC,YAAY,WAAW,KAAK,KAAK,CAAC,YAAY,WAAW,GAAG,GAChF,iBAAiB,sBAAsB,kBACvC,kBAAkB,WAAW,YAAY,WAAW;AAEtD,WAAK,kBAAkB,oBAAoB,iBAAiB;AAC1D,cAAM,IAAI;UACR;QACR;MACA;AAEI,UAAI,oBAAoB,iBAAiB;AACvC,cAAM,IAAI,8BAA8B,wCAAwC;MACtF;AAEI,UAAI;AACJ,UAAI,kBAAkB;AACpB,gBAAQ;UACN,EAAE,GAAG,gBAAgB,KAAK,GAAG,oBAAoB,WAAW,GAAG,GAAG,WAAU;UAC5E;UACA;QACR;MACA,WAAe,CAAC,YAAY,WAAW,OAAO,GAAG;AAC3C,gBAAQ,mBAAmB,EAAE,GAAG,mBAAmB,KAAK,CAAC,GAAG,GAAG,WAAU,CAAE;MACjF,OAAW;AACL,gBAAQ,EAAE,GAAG,KAAK,SAAQ,GAAI,GAAG,WAAU;AAI3C,YAAI,YAAY,WAAW,GAAG,GAAG;AAC/B,gBAAM,MAAM,KAAK,IAAI,YAAY,MAAM,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG;QAC5E;MACA;AAEI,YAAM,CAAC,IAAIzC,EAAC,IAAI,QAAQ,OAAO,KAAK,GAAG,KAAK,IAAI;AAChD,aAAOyC,OAAM,MAAM,EAAE,IAAI,GAAAzC,GAAC,CAAE;IAChC;;;;;;;;;;;;;;IAeE,KAAK,UAAU;AACb,UAAI,CAAC,KAAK,QAAS,QAAO;AAC1B,YAAM,MAAM,SAAS,iBAAiB,QAAQ;AAC9C,aAAOyC,OAAM,MAAM,WAAW,MAAM,GAAG,CAAC;IAC5C;;;;;;;IAQE,MAAM,UAAU;AACd,UAAI,CAAC,KAAK,QAAS,QAAO;AAC1B,YAAM,MAAM,SAAS,iBAAiB,QAAQ,EAAE,OAAM;AACtD,aAAOA,OAAM,MAAM,WAAW,MAAM,GAAG,CAAC;IAC5C;;;;;;;;;;;;;IAcE,QAAQ,MAAM,EAAE,iBAAiB,MAAK,IAAK,CAAA,GAAI;AAC7C,UAAI,CAAC,KAAK,QAAS,QAAO;AAE1B,YAAMzC,KAAI,CAAA,GACR,iBAAiB,SAAS,cAAc,IAAI;AAC9C,cAAQ,gBAAc;QACpB,KAAK;AACH,UAAAA,GAAE,QAAQ;;QAEZ,KAAK;QACL,KAAK;AACH,UAAAA,GAAE,MAAM;;QAEV,KAAK;QACL,KAAK;AACH,UAAAA,GAAE,OAAO;;QAEX,KAAK;AACH,UAAAA,GAAE,SAAS;;QAEb,KAAK;AACH,UAAAA,GAAE,SAAS;;QAEb,KAAK;AACH,UAAAA,GAAE,cAAc;AAChB;MAIR;AAEI,UAAI,mBAAmB,SAAS;AAC9B,YAAI,gBAAgB;AAClB,gBAAM,cAAc,KAAK,IAAI,eAAc;AAC3C,gBAAM,EAAE,QAAO,IAAK;AACpB,cAAI,UAAU,aAAa;AACzB,YAAAA,GAAE,aAAa,KAAK,aAAa;UAC3C;AACQ,UAAAA,GAAE,UAAU;QACpB,OAAa;AACL,UAAAA,GAAE,UAAU;QACpB;MACA;AAEI,UAAI,mBAAmB,YAAY;AACjC,cAAM,IAAI,KAAK,KAAK,KAAK,QAAQ,CAAC;AAClC,QAAAA,GAAE,SAAS,IAAI,KAAK,IAAI;MAC9B;AAEI,aAAO,KAAK,IAAIA,EAAC;IACrB;;;;;;;;;;;;;IAcE,MAAM,MAAM,MAAM;AAChB,aAAO,KAAK,UACR,KAAK,KAAK,EAAE,CAAC,IAAI,GAAG,EAAC,CAAE,EACpB,QAAQ,MAAM,IAAI,EAClB,MAAM,CAAC,IACV;IACR;;;;;;;;;;;;;;IAgBE,SAAS,KAAK,OAAO,CAAA,GAAI;AACvB,aAAO,KAAK,UACR,UAAU,OAAO,KAAK,IAAI,cAAc,IAAI,CAAC,EAAE,yBAAyB,MAAM,GAAG,IACjF;IACR;;;;;;;;;;;;;;;;;;;;IAqBE,eAAe,aAAaO,YAAoB,OAAO,CAAA,GAAI;AACzD,aAAO,KAAK,UACR,UAAU,OAAO,KAAK,IAAI,MAAM,IAAI,GAAG,UAAU,EAAE,eAAe,IAAI,IACtE;IACR;;;;;;;;;;;;;;IAeE,cAAc,OAAO,CAAA,GAAI;AACvB,aAAO,KAAK,UACR,UAAU,OAAO,KAAK,IAAI,MAAM,IAAI,GAAG,IAAI,EAAE,oBAAoB,IAAI,IACrE,CAAA;IACR;;;;;;;;;;;;;;;;;;IAmBE,MAAM;MACJ,SAAS;MACT,kBAAkB;MAClB,uBAAuB;MACvB,gBAAgB;MAChB,eAAe;MACf,YAAY;IAChB,IAAM,CAAA,GAAI;AACN,UAAI,CAAC,KAAK,SAAS;AACjB,eAAO;MACb;AAEI,kBAAY,cAAc,SAAS;AACnC,YAAM,MAAM,WAAW;AAEvB,UAAIoB,KAAI,UAAU,MAAM,KAAK,SAAS;AACtC,UAAI,aAAa,QAAQ,SAAS,KAAK,EAAG,CAAAA,MAAK;AAC/C,MAAAA,MAAK;QACH;QACA;QACA;QACA;QACA;QACA;QACA;MACN;AACI,aAAOA;IACX;;;;;;;;;;;IAYE,UAAU,EAAE,SAAS,YAAY,YAAY,MAAK,IAAK,CAAA,GAAI;AACzD,UAAI,CAAC,KAAK,SAAS;AACjB,eAAO;MACb;AACI,aAAO,UAAU,MAAM,WAAW,YAAY,cAAc,SAAS,CAAC;IAC1E;;;;;;IAOE,gBAAgB;AACd,aAAO,aAAa,MAAM,cAAc;IAC5C;;;;;;;;;;;;;;;;;;IAmBE,UAAU;MACR,uBAAuB;MACvB,kBAAkB;MAClB,gBAAgB;MAChB,gBAAgB;MAChB,eAAe;MACf,SAAS;MACT,YAAY;IAChB,IAAM,CAAA,GAAI;AACN,UAAI,CAAC,KAAK,SAAS;AACjB,eAAO;MACb;AAEI,kBAAY,cAAc,SAAS;AACnC,UAAIA,KAAI,iBAAiB,aAAa,QAAQ,SAAS,KAAK,IAAI,MAAM;AACtE,aACEA,KACA;QACE;QACA,WAAW;QACX;QACA;QACA;QACA;QACA;MACR;IAEA;;;;;;;IAQE,YAAY;AACV,aAAO,aAAa,MAAM,iCAAiC,KAAK;IACpE;;;;;;;;;IAUE,SAAS;AACP,aAAO,aAAa,KAAK,MAAK,GAAI,iCAAiC;IACvE;;;;;;IAOE,YAAY;AACV,UAAI,CAAC,KAAK,SAAS;AACjB,eAAO;MACb;AACI,aAAO,UAAU,MAAM,IAAI;IAC/B;;;;;;;;;;;;;IAcE,UAAU,EAAE,gBAAgB,MAAM,cAAc,OAAO,qBAAqB,KAAI,IAAK,CAAA,GAAI;AACvF,UAAI,MAAM;AAEV,UAAI,eAAe,eAAe;AAChC,YAAI,oBAAoB;AACtB,iBAAO;QACf;AACM,YAAI,aAAa;AACf,iBAAO;QACf,WAAiB,eAAe;AACxB,iBAAO;QACf;MACA;AAEI,aAAO,aAAa,MAAM,KAAK,IAAI;IACvC;;;;;;;;;;;;;IAcE,MAAM,OAAO,CAAA,GAAI;AACf,UAAI,CAAC,KAAK,SAAS;AACjB,eAAO;MACb;AAEI,aAAO,GAAG,KAAK,UAAS,CAAE,IAAI,KAAK,UAAU,IAAI,CAAC;IACtD;;;;;IAME,WAAW;AACT,aAAO,KAAK,UAAU,KAAK,MAAK,IAAK;IACzC;;;;;IAME,CAAC,uBAAO,IAAI,4BAA4B,CAAC,IAAI;AAC3C,UAAI,KAAK,SAAS;AAChB,eAAO,kBAAkB,KAAK,MAAK,CAAE,WAAW,KAAK,KAAK,IAAI,aAAa,KAAK,MAAM;MAC5F,OAAW;AACL,eAAO,+BAA+B,KAAK,aAAa;MAC9D;IACA;;;;;IAME,UAAU;AACR,aAAO,KAAK,SAAQ;IACxB;;;;;IAME,WAAW;AACT,aAAO,KAAK,UAAU,KAAK,KAAK;IACpC;;;;;IAME,YAAY;AACV,aAAO,KAAK,UAAU,KAAK,KAAK,MAAO;IAC3C;;;;;IAME,gBAAgB;AACd,aAAO,KAAK,UAAU,KAAK,MAAM,KAAK,KAAK,GAAI,IAAI;IACvD;;;;;IAME,SAAS;AACP,aAAO,KAAK,MAAK;IACrB;;;;;IAME,SAAS;AACP,aAAO,KAAK,SAAQ;IACxB;;;;;;;;IASE,SAAS,OAAO,CAAA,GAAI;AAClB,UAAI,CAAC,KAAK,QAAS,QAAO,CAAA;AAE1B,YAAM,OAAO,EAAE,GAAG,KAAK,EAAC;AAExB,UAAI,KAAK,eAAe;AACtB,aAAK,iBAAiB,KAAK;AAC3B,aAAK,kBAAkB,KAAK,IAAI;AAChC,aAAK,SAAS,KAAK,IAAI;MAC7B;AACI,aAAO;IACX;;;;;IAME,WAAW;AACT,aAAO,IAAI,KAAK,KAAK,UAAU,KAAK,KAAK,GAAG;IAChD;;;;;;;;;;;;;;;;;IAmBE,KAAK,eAAe,OAAO,gBAAgB,OAAO,CAAA,GAAI;AACpD,UAAI,CAAC,KAAK,WAAW,CAAC,cAAc,SAAS;AAC3C,eAAO,SAAS,QAAQ,wCAAwC;MACtE;AAEI,YAAM,UAAU,EAAE,QAAQ,KAAK,QAAQ,iBAAiB,KAAK,iBAAiB,GAAG,KAAI;AAErF,YAAM,QAAQ,WAAW,IAAI,EAAE,IAAI,SAAS,aAAa,GACvD,eAAe,cAAc,QAAO,IAAK,KAAK,QAAO,GACrD,UAAU,eAAe,OAAO,eAChC,QAAQ,eAAe,gBAAgB,MACvC,SAAS,KAAK,SAAS,OAAO,OAAO,OAAO;AAE9C,aAAO,eAAe,OAAO,OAAM,IAAK;IAC5C;;;;;;;;;IAUE,QAAQ,OAAO,gBAAgB,OAAO,CAAA,GAAI;AACxC,aAAO,KAAK,KAAK,UAAS,IAAG,GAAI,MAAM,IAAI;IAC/C;;;;;;IAOE,MAAM,eAAe;AACnB,aAAO,KAAK,UAAU,SAAS,cAAc,MAAM,aAAa,IAAI;IACxE;;;;;;;;;;;;IAaE,QAAQ,eAAe,MAAM,MAAM;AACjC,UAAI,CAAC,KAAK,QAAS,QAAO;AAE1B,YAAM,UAAU,cAAc,QAAO;AACrC,YAAM,iBAAiB,KAAK,QAAQ,cAAc,MAAM,EAAE,eAAe,KAAI,CAAE;AAC/E,aACE,eAAe,QAAQ,MAAM,IAAI,KAAK,WAAW,WAAW,eAAe,MAAM,MAAM,IAAI;IAEjG;;;;;;;;IASE,OAAO,OAAO;AACZ,aACE,KAAK,WACL,MAAM,WACN,KAAK,QAAO,MAAO,MAAM,QAAO,KAChC,KAAK,KAAK,OAAO,MAAM,IAAI,KAC3B,KAAK,IAAI,OAAO,MAAM,GAAG;IAE/B;;;;;;;;;;;;;;;;;;;;IAqBE,WAAW,UAAU,CAAA,GAAI;AACvB,UAAI,CAAC,KAAK,QAAS,QAAO;AAC1B,YAAM,OAAO,QAAQ,QAAQ,UAAS,WAAW,CAAA,GAAI,EAAE,MAAM,KAAK,KAAI,CAAE,GACtE,UAAU,QAAQ,UAAW,OAAO,OAAO,CAAC,QAAQ,UAAU,QAAQ,UAAW;AACnF,UAAI,QAAQ,CAAC,SAAS,UAAU,QAAQ,SAAS,WAAW,SAAS;AACrE,UAAI,OAAO,QAAQ;AACnB,UAAI,MAAM,QAAQ,QAAQ,IAAI,GAAG;AAC/B,gBAAQ,QAAQ;AAChB,eAAO;MACb;AACI,aAAO,aAAa,MAAM,KAAK,KAAK,OAAO,GAAG;QAC5C,GAAG;QACH,SAAS;QACT;QACA;MACN,CAAK;IACL;;;;;;;;;;;;;;IAeE,mBAAmB,UAAU,CAAA,GAAI;AAC/B,UAAI,CAAC,KAAK,QAAS,QAAO;AAE1B,aAAO,aAAa,QAAQ,QAAQ,UAAS,WAAW,CAAA,GAAI,EAAE,MAAM,KAAK,KAAI,CAAE,GAAG,MAAM;QACtF,GAAG;QACH,SAAS;QACT,OAAO,CAAC,SAAS,UAAU,MAAM;QACjC,WAAW;MACjB,CAAK;IACL;;;;;;IAOE,OAAO,OAAO,WAAW;AACvB,UAAI,CAAC,UAAU,MAAM,UAAS,UAAU,GAAG;AACzC,cAAM,IAAI,qBAAqB,yCAAyC;MAC9E;AACI,aAAO,OAAO,WAAW,CAAC9C,OAAMA,GAAE,QAAO,GAAI,KAAK,GAAG;IACzD;;;;;;IAOE,OAAO,OAAO,WAAW;AACvB,UAAI,CAAC,UAAU,MAAM,UAAS,UAAU,GAAG;AACzC,cAAM,IAAI,qBAAqB,yCAAyC;MAC9E;AACI,aAAO,OAAO,WAAW,CAACA,OAAMA,GAAE,QAAO,GAAI,KAAK,GAAG;IACzD;;;;;;;;;IAWE,OAAO,kBAAkB8D,OAAM,KAAK,UAAU,CAAA,GAAI;AAChD,YAAM,EAAE,SAAS,MAAM,kBAAkB,KAAI,IAAK,SAChD,cAAc,OAAO,SAAS;QAC5B;QACA;QACA,aAAa;MACrB,CAAO;AACH,aAAO,kBAAkB,aAAaA,OAAM,GAAG;IACnD;;;;IAKE,OAAO,kBAAkBA,OAAM,KAAK,UAAU,CAAA,GAAI;AAChD,aAAO,UAAS,kBAAkBA,OAAM,KAAK,OAAO;IACxD;;;;;;;;;;;;;IAcE,OAAO,kBAAkB,KAAK,UAAU,CAAA,GAAI;AAC1C,YAAM,EAAE,SAAS,MAAM,kBAAkB,KAAI,IAAK,SAChD,cAAc,OAAO,SAAS;QAC5B;QACA;QACA,aAAa;MACrB,CAAO;AACH,aAAO,IAAI,YAAY,aAAa,GAAG;IAC3C;;;;;;;;;;;IAYE,OAAO,iBAAiBA,OAAM,cAAc,OAAO,CAAA,GAAI;AACrD,UAAI,YAAYA,KAAI,KAAK,YAAY,YAAY,GAAG;AAClD,cAAM,IAAI;UACR;QACR;MACA;AACI,YAAM,EAAE,SAAS,MAAM,kBAAkB,KAAI,IAAK,MAChD,cAAc,OAAO,SAAS;QAC5B;QACA;QACA,aAAa;MACrB,CAAO;AAEH,UAAI,CAAC,YAAY,OAAO,aAAa,MAAM,GAAG;AAC5C,cAAM,IAAI;UACR,4CAA4C,WAAW,2CACZ,aAAa,MAAM;QACtE;MACA;AAEI,YAAM,EAAE,QAAQ,MAAM,gBAAgB,cAAa,IAAK,aAAa,kBAAkBA,KAAI;AAE3F,UAAI,eAAe;AACjB,eAAO,UAAS,QAAQ,aAAa;MAC3C,OAAW;AACL,eAAO;UACL;UACA;UACA;UACA,UAAU,aAAa,MAAM;UAC7BA;UACA;QACR;MACA;IACA;;;;;;IAQE,WAAW,aAAa;AACtB,aAAOpC;IACX;;;;;IAME,WAAW,WAAW;AACpB,aAAOC;IACX;;;;;IAME,WAAW,wBAAwB;AACjC,aAAO4C;IACX;;;;;IAME,WAAW,YAAY;AACrB,aAAO3C;IACX;;;;;IAME,WAAW,YAAY;AACrB,aAAOC;IACX;;;;;IAME,WAAW,cAAc;AACvB,aAAOC;IACX;;;;;IAME,WAAW,oBAAoB;AAC7B,aAAOC;IACX;;;;;IAME,WAAW,yBAAyB;AAClC,aAAOC;IACX;;;;;IAME,WAAW,wBAAwB;AACjC,aAAOC;IACX;;;;;IAME,WAAW,iBAAiB;AAC1B,aAAOC;IACX;;;;;IAME,WAAW,uBAAuB;AAChC,aAAOC;IACX;;;;;IAME,WAAW,4BAA4B;AACrC,aAAOC;IACX;;;;;IAME,WAAW,2BAA2B;AACpC,aAAOC;IACX;;;;;IAME,WAAW,iBAAiB;AAC1B,aAAOC;IACX;;;;;IAME,WAAW,8BAA8B;AACvC,aAAOI;IACX;;;;;IAME,WAAW,eAAe;AACxB,aAAOH;IACX;;;;;IAME,WAAW,4BAA4B;AACrC,aAAOI;IACX;;;;;IAME,WAAW,4BAA4B;AACrC,aAAO6B;IACX;;;;;IAME,WAAW,gBAAgB;AACzB,aAAOhC;IACX;;;;;IAME,WAAW,6BAA6B;AACtC,aAAOI;IACX;;;;;IAME,WAAW,gBAAgB;AACzB,aAAOH;IACX;;;;;IAME,WAAW,6BAA6B;AACtC,aAAOI;IACX;EACA;AAKO,WAAS,iBAAiB,aAAa;AAC5C,QAAI,SAAS,WAAW,WAAW,GAAG;AACpC,aAAO;IACX,WAAa,eAAe,YAAY,WAAWhC,UAAS,YAAY,QAAO,CAAE,GAAG;AAChF,aAAO,SAAS,WAAW,WAAW;IAC1C,WAAa,eAAe,OAAO,gBAAgB,UAAU;AACzD,aAAO,SAAS,WAAW,WAAW;IAC1C,OAAS;AACL,YAAM,IAAI;QACR,8BAA8B,WAAW,aAAa,OAAO,WAAW;MAC9E;IACA;EACA;;;AEjiFA,MAAM,UAAU;AAAA,IACd,UAAU,SAAS;AAAA,IACnB,aAAa;AAAA,IACb,QAAQ,SAAS;AAAA,IACjB,QAAQ,SAAS;AAAA,IACjB,MAAM,EAAC,MAAM,UAAS;AAAA,IACtB,KAAK,EAAC,KAAK,WAAW,OAAO,QAAO;AAAA,IACpC,MAAM;AAAA,IACN,OAAO,EAAC,OAAO,SAAS,MAAM,UAAS;AAAA,IACvC,SAAS;AAAA,IACT,MAAM,EAAC,MAAM,UAAS;AAAA,EACxB;AAEA,WAAU,MAAM,SAAS;AAAA,IACvB,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,IAKL,SAAS,SAAS,MAAM;AACtB,aAAO,SAAS,WAAW,MAAM,KAAK,OAAO;AAAA,IAC/C;AAAA,IAEA,KAAK,cAAc;AACjB,UAAI,CAAC,KAAK,QAAQ,QAAQ;AACxB,aAAK,QAAQ,SAAS,aAAa;AAAA,MACrC;AAAA,IACF;AAAA,IAEA,SAAS,WAAW;AAClB,aAAO;AAAA,IACT;AAAA,IAEA,OAAO,SAAS,OAAO,QAAQ;AAC7B,YAAM,UAAU,KAAK;AAErB,YAAM,OAAO,OAAO;AACpB,UAAI,UAAU,QAAQ,SAAS,aAAa;AAC1C,eAAO;AAAA,MACT;AAEA,UAAI,SAAS,UAAU;AACrB,gBAAQ,KAAK,QAAQ,KAAK;AAAA,MAC5B,WAAW,SAAS,UAAU;AAC5B,YAAI,OAAO,WAAW,UAAU;AAC9B,kBAAQ,SAAS,WAAW,OAAO,QAAQ,OAAO;AAAA,QACpD,OAAO;AACL,kBAAQ,SAAS,QAAQ,OAAO,OAAO;AAAA,QACzC;AAAA,MACF,WAAW,iBAAiB,MAAM;AAChC,gBAAQ,SAAS,WAAW,OAAO,OAAO;AAAA,MAC5C,WAAW,SAAS,YAAY,EAAE,iBAAiB,WAAW;AAC5D,gBAAQ,SAAS,WAAW,OAAO,OAAO;AAAA,MAC5C;AAEA,aAAO,MAAM,UAAU,MAAM,QAAQ,IAAI;AAAA,IAC3C;AAAA,IAEA,QAAQ,SAAS,MAAM,QAAQ;AAC7B,YAAM,WAAW,KAAK,QAAQ,IAAI;AAClC,aAAO,OAAO,WAAW,WACrB,SAAS,SAAS,MAAM,IACxB,SAAS,eAAe,MAAM;AAAA,IACpC;AAAA,IAEA,KAAK,SAAS,MAAM,QAAQ,MAAM;AAChC,YAAM,OAAO,CAAC;AACd,WAAK,IAAI,IAAI;AACb,aAAO,KAAK,QAAQ,IAAI,EAAE,KAAK,IAAI,EAAE,QAAQ;AAAA,IAC/C;AAAA,IAEA,MAAM,SAAS4D,MAAKC,MAAK,MAAM;AAC7B,aAAO,KAAK,QAAQD,IAAG,EAAE,KAAK,KAAK,QAAQC,IAAG,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ;AAAA,IACpE;AAAA,IAEA,SAAS,SAAS,MAAM,MAAM,SAAS;AACrC,UAAI,SAAS,WAAW;AACtB,kBAAU,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC;AACtD,cAAM,WAAW,KAAK,QAAQ,IAAI;AAClC,eAAO,SAAS,MAAM,EAAC,OAAO,SAAS,UAAU,UAAU,KAAK,EAAC,CAAC,EAAE,QAAQ,KAAK,EAAE,QAAQ;AAAA,MAC7F;AACA,aAAO,OAAO,KAAK,QAAQ,IAAI,EAAE,QAAQ,IAAI,EAAE,QAAQ,IAAI;AAAA,IAC7D;AAAA,IAEA,OAAO,SAAS,MAAM,MAAM;AAC1B,aAAO,KAAK,QAAQ,IAAI,EAAE,MAAM,IAAI,EAAE,QAAQ;AAAA,IAChD;AAAA,EACF,CAAC;;;AC1FD,wBAAmB;AAGnB,MAAM,iBAAiB,UAAQ,QAAQ,KAAK,WAAW,KAAK;AAC5D,MAAM,aAAa,CAAC,KAAKC,WAAU,OAAOA,OAAM,MAAM,KAAK;AAC3D,MAAM,gBAAgB,CAAC,KAAKA,WAAU,OAAO,CAACA,OAAM,MAAM,KAAK;AAC/D,WAAS,iBAAiB,MAAM,KAAK,OAAO;AAC1C,QAAI,SAAS,QAAW;AACtB,aAAO;AAAA,IACT,WAAW,OAAO,SAAS,UAAU;AACnC,aAAO,KAAK,QAAQ,GAAG,MAAM;AAAA,IAC/B,WAAW,OAAO,SAAS,YAAY;AACrC,aAAO,KAAK,EAAC,MAAK,CAAC,EAAE,QAAQ,GAAG,MAAM;AAAA,IACxC;AACA,WAAO;AAAA,EACT;AACA,WAAS,kBAAkB,MAAM,OAAO;AACtC,QAAI,OAAO,SAAS,YAAY;AAC9B,aAAO,KAAK,EAAC,MAAK,CAAC;AAAA,IACrB;AACA,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO,EAAC,GAAG,KAAK,QAAQ,GAAG,MAAM,IAAI,GAAG,KAAK,QAAQ,GAAG,MAAM,GAAE;AAAA,IAClE;AACA,WAAO,EAAC,GAAG,OAAO,GAAG,MAAK;AAAA,EAC5B;AACA,WAASC,UAASC,KAAI,OAAO;AAC3B,QAAI;AACJ,WAAO,WAAW;AAChB,mBAAa,OAAO;AACpB,gBAAU,WAAWA,KAAI,KAAK;AAC9B,aAAO;AAAA,IACT;AAAA,EACF;AACA,WAAS,mBAAmB,EAAC,GAAG,GAAAC,GAAC,GAAG,OAAO;AACzC,UAAMC,UAAS,MAAM;AACrB,UAAM,WAAW,OAAO,KAAKA,OAAM;AACnC,aAASC,KAAI,GAAGA,KAAI,SAAS,QAAQA,MAAK;AACxC,YAAM,QAAQD,QAAO,SAASC,EAAC,CAAC;AAChC,UAAIF,MAAK,MAAM,OAAOA,MAAK,MAAM,UAAU,KAAK,MAAM,QAAQ,KAAK,MAAM,OAAO;AAC9E,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,WAAS,wBAAwB,SAAS,OAAO,OAAO;AACtD,UAAM,EAAC,OAAO,MAAM,WAAW,cAAa,IAAI,WAAW,CAAC;AAC5D,UAAM,QAAQ,mBAAmB,OAAO,KAAK;AAC7C,UAAM,UAAU,kBAAkB,MAAM,KAAK;AAC7C,UAAM,eAAe,kBAAkB,WAAW,KAAK;AACvD,QAAI,eAAe;AACjB,YAAM,mBAAmB,kBAAkB,eAAe,KAAK;AAC/D,iBAAW,QAAQ,CAAC,KAAK,GAAG,GAAG;AAC7B,YAAI,iBAAiB,IAAI,GAAG;AAC1B,uBAAa,IAAI,IAAI,QAAQ,IAAI;AACjC,kBAAQ,IAAI,IAAI;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AACA,QAAI,SAAS,aAAa,MAAM,IAAI,GAAG;AACrC,aAAO,CAAC,KAAK;AAAA,IACf;AACA,UAAM,gBAAgB,CAAC;AACvB,SAAK,MAAM,QAAQ,SAAS,WAAW;AACrC,UAAI,QAAQ,UAAU,IAAI,GAAG;AAC3B,sBAAc,KAAK,SAAS;AAAA,MAC9B;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAEA,MAAM,cAAc,oBAAI,QAAQ;AAChC,WAAS,SAAS,OAAO;AACvB,QAAI,QAAQ,YAAY,IAAI,KAAK;AACjC,QAAI,CAAC,OAAO;AACV,cAAQ;AAAA,QACN,qBAAqB,CAAC;AAAA,QACtB,oBAAoB,CAAC;AAAA,QACrB,UAAU,CAAC;AAAA,QACX,UAAU,CAAC;AAAA,QACX,UAAU;AAAA,QACV,SAAS;AAAA,MACX;AACA,kBAAY,IAAI,OAAO,KAAK;AAAA,IAC9B;AACA,WAAO;AAAA,EACT;AACA,WAAS,YAAY,OAAO;AAC1B,gBAAY,OAAO,KAAK;AAAA,EAC1B;AAEA,WAAS,UAAU,KAAKG,MAAKC,QAAO,UAAU;AAC5C,UAAM,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,MAAMD,QAAOC,UAAS,CAAC,CAAC;AACpE,UAAM,aAAa,IAAI;AACvB,WAAO;AAAA,MACL,KAAK,WAAW;AAAA,MAChB,KAAK,WAAW;AAAA,IAClB;AAAA,EACF;AACA,WAAS,gBAAgB,OAAO,OAAO;AACrC,UAAM,QAAQ,MAAM,aAAa,IAAI,MAAM,IAAI,MAAM;AACrD,WAAO,MAAM,iBAAiB,KAAK;AAAA,EACrC;AACA,WAAS,gBAAgB,OAAOC,OAAM,QAAQ;AAC5C,UAAMD,SAAQ,MAAM,MAAM,MAAM;AAChC,UAAM,WAAWA,UAASC,QAAO;AACjC,UAAM,cAAc,gBAAgB,OAAO,MAAM;AACjD,WAAO,UAAU,aAAa,MAAM,KAAKD,QAAO,QAAQ;AAAA,EAC1D;AACA,WAAS,qBAAqB,OAAOC,OAAM,QAAQ;AACjD,UAAM,cAAc,gBAAgB,OAAO,MAAM;AACjD,QAAI,gBAAgB,QAAW;AAC7B,aAAO,EAAC,KAAK,MAAM,KAAK,KAAK,MAAM,IAAG;AAAA,IACxC;AACA,UAAM,SAAS,KAAK,MAAM,MAAM,GAAG;AACnC,UAAM,SAAS,KAAK,MAAM,MAAM,GAAG;AACnC,UAAM,YAAY,KAAK,MAAM,WAAW;AACxC,UAAM,WAAW,SAAS;AAC1B,UAAM,cAAc,YAAYA,QAAO;AACvC,UAAM,QAAQ,UAAU,WAAW,QAAQ,UAAU,WAAW;AAChE,WAAO;AAAA,MACL,KAAK,KAAK,IAAI,IAAI,SAAS,MAAM,GAAG;AAAA,MACpC,KAAK,KAAK,IAAI,IAAI,SAAS,MAAM,GAAG;AAAA,IACtC;AAAA,EACF;AACA,WAAS,eAAe,OAAO,QAAQ;AACrC,WAAO,WAAW,OAAO,MAAM,EAAE,KAAK,OAAO,MAAM,IAAI,MAAM,CAAC;AAAA,EAChE;AACA,WAAS,SAAS,OAAO,OAAO,aAAa,MAAM,UAAU;AAC3D,QAAI,QAAQ,YAAY,IAAI;AAC5B,QAAI,UAAU,YAAY;AACxB,YAAM,WAAW,MAAM,oBAAoB,MAAM,EAAE,EAAE,IAAI;AACzD,cAAQ,eAAe,SAAS,SAAS,SAAS,KAAK;AAAA,IACzD;AACA,WAAO,eAAe,OAAO,QAAQ;AAAA,EACvC;AACA,WAAS,YAAY,OAAO,QAAQ,QAAQ;AAC1C,UAAM,KAAK,MAAM,iBAAiB,MAAM;AACxC,UAAM,KAAK,MAAM,iBAAiB,MAAM;AACxC,WAAO;AAAA,MACL,KAAK,KAAK,IAAI,IAAI,EAAE;AAAA,MACpB,KAAK,KAAK,IAAI,IAAI,EAAE;AAAA,IACtB;AAAA,EACF;AACA,WAAS,SAASD,QAAO,EAAC,KAAAD,MAAK,KAAAG,MAAK,UAAU,SAAQ,GAAG,gBAAgB;AACvE,UAAMC,WAAUH,SAAQE,OAAMH,QAAO;AACrC,IAAAA,QAAOI;AACP,IAAAD,QAAOC;AACP,UAAM,UAAU,eAAe,IAAI,WAAW,eAAe,IAAI;AACjE,UAAM,UAAU,eAAe,IAAI,WAAW,eAAe,IAAI;AACjE,UAAM,UAAUH,SAAQ;AACxB,QAAI,aAAaD,MAAK,SAAS,OAAO,GAAG;AACvC,MAAAA,OAAM;AAAA,IACR;AACA,QAAI,aAAaG,MAAK,SAAS,OAAO,GAAG;AACvC,MAAAA,OAAM;AAAA,IACR;AACA,QAAIH,OAAM,UAAU;AAClB,MAAAA,OAAM;AACN,MAAAG,OAAM,KAAK,IAAI,WAAWF,QAAO,QAAQ;AAAA,IAC3C,WAAWE,OAAM,UAAU;AACzB,MAAAA,OAAM;AACN,MAAAH,OAAM,KAAK,IAAI,WAAWC,QAAO,QAAQ;AAAA,IAC3C;AACA,WAAO,EAAC,KAAAD,MAAK,KAAAG,KAAG;AAAA,EAClB;AACA,WAAS,YAAY,OAAO,EAAC,KAAAH,MAAK,KAAAG,KAAG,GAAG,QAAQD,QAAO,OAAO;AAC5D,UAAM,QAAQ,SAAS,MAAM,KAAK;AAClC,UAAM,EAAC,SAAS,UAAS,IAAI;AAC7B,UAAM,cAAc,eAAe,OAAO,MAAM;AAChD,UAAM,EAAC,WAAW,EAAC,IAAI;AACvB,UAAM,WAAW,SAAS,OAAO,OAAO,aAAa,OAAO,SAAS;AACrE,UAAM,WAAW,SAAS,OAAO,OAAO,aAAa,OAAO,QAAQ;AACpE,QAAIA,UAAS,UAAUF,OAAM,YAAYG,OAAM,WAAW;AACxD,aAAO;AAAA,IACT;AACA,UAAM,aAAa,MAAM,MAAM,MAAM;AACrC,UAAMF,SAAQC,QAAO,KAAK,IAAIC,OAAMH,MAAK,QAAQ,IAAI;AACrD,QAAIE,SAAQD,WAAU,YAAY,cAAc,UAAU;AACxD,aAAO;AAAA,IACT;AACA,UAAM,WAAW,SAASA,QAAO,EAAC,KAAAD,MAAK,KAAAG,MAAK,UAAU,SAAQ,GAAG,MAAM,oBAAoB,MAAM,EAAE,CAAC;AACpG,cAAU,MAAM,SAAS;AACzB,cAAU,MAAM,SAAS;AACzB,UAAM,mBAAmB,MAAM,EAAE,IAAI;AACrC,WAAO,MAAM,MAAM,SAAS,GAAG,MAAM,MAAM,OAAO,MAAM,MAAM,SAAS,GAAG,MAAM,MAAM;AAAA,EACxF;AACA,WAAS,mBAAmB,OAAOD,OAAM,QAAQ,QAAQ;AACvD,UAAM,QAAQ,gBAAgB,OAAOA,OAAM,MAAM;AACjD,UAAM,WAAW,EAAC,KAAK,MAAM,MAAM,MAAM,KAAK,KAAK,MAAM,MAAM,MAAM,IAAG;AACxE,WAAO,YAAY,OAAO,UAAU,QAAQ,IAAI;AAAA,EAClD;AACA,WAAS,qBAAqB,OAAOA,OAAM,QAAQ,QAAQ;AACzD,UAAM,WAAW,qBAAqB,OAAOA,OAAM,MAAM;AACzD,WAAO,YAAY,OAAO,UAAU,QAAQ,IAAI;AAAA,EAClD;AACA,WAAS,uBAAuB,OAAOG,OAAMC,KAAI,QAAQ;AACvD,gBAAY,OAAO,YAAY,OAAOD,OAAMC,GAAE,GAAG,QAAQ,IAAI;AAAA,EAC/D;AACA,MAAM,gBAAgB,CAAC,MAAM,MAAM,KAAK,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,KAAK,MAAM,CAAC,GAAG,CAAC;AACtH,WAAS,yBAAyB,OAAO;AACvC,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,WAAW,OAAO,SAAS;AACjC,QAAI,MAAM,MAAM,GAAG;AACjB,YAAM,OAAO;AAAA,IACf;AACA,QAAI,MAAM,MAAM,UAAU;AACxB,YAAM,OAAO;AAAA,IACf;AAAA,EACF;AACA,WAAS,kBAAkB,OAAOJ,OAAM,QAAQ,QAAQ;AACtD,UAAM,QAAQ,gBAAgB,OAAOA,OAAM,MAAM;AACjD,QAAI,MAAM,QAAQ,MAAM,OAAOA,QAAO,GAAG;AACvC,+BAAyB,KAAK;AAAA,IAChC;AACA,UAAM,WAAW,EAAC,KAAK,MAAM,MAAM,cAAc,MAAM,GAAG,GAAG,KAAK,MAAM,MAAM,cAAc,MAAM,GAAG,EAAC;AACtG,WAAO,YAAY,OAAO,UAAU,QAAQ,IAAI;AAAA,EAClD;AACA,WAAS,YAAY,OAAO;AAC1B,WAAO,MAAM,aAAa,IAAI,MAAM,QAAQ,MAAM;AAAA,EACpD;AACA,WAAS,iBAAiB,OAAO,OAAO,QAAQ;AAC9C,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,iBAAiB,OAAO,SAAS;AACvC,QAAI,EAAC,KAAAF,MAAK,KAAAG,KAAG,IAAI;AACjB,UAAMF,SAAQ,KAAK,IAAIE,OAAMH,MAAK,CAAC;AACnC,UAAM,YAAY,KAAK,MAAM,YAAY,KAAK,IAAI,KAAK,IAAIC,QAAO,EAAE,CAAC;AACrE,UAAM,WAAW,KAAK,MAAM,KAAK,IAAI,QAAQ,SAAS,CAAC;AACvD,QAAI;AACJ,QAAI,QAAQ,CAAC,WAAW;AACtB,MAAAE,OAAM,KAAK,IAAIA,OAAM,UAAU,cAAc;AAC7C,MAAAH,OAAMC,WAAU,IAAIE,OAAMA,OAAMF;AAChC,gBAAUE,SAAQ;AAAA,IACpB,WAAW,QAAQ,WAAW;AAC5B,MAAAH,OAAM,KAAK,IAAI,GAAGA,OAAM,QAAQ;AAChC,MAAAG,OAAMF,WAAU,IAAID,OAAMA,OAAMC;AAChC,gBAAUD,SAAQ;AAAA,IACpB;AACA,WAAO,YAAY,OAAO,EAAC,KAAAA,MAAK,KAAAG,KAAG,GAAG,MAAM,KAAK;AAAA,EACnD;AACA,MAAM,UAAU;AAAA,IACd,QAAQ;AAAA,IACR,QAAQ,KAAK;AAAA,IACb,MAAM,KAAK,KAAK;AAAA,IAChB,KAAK,KAAK,KAAK,KAAK;AAAA,IACpB,MAAM,MAAM,KAAK,KAAK,KAAK;AAAA,IAC3B,OAAO,KAAK,KAAK,KAAK,KAAK;AAAA,IAC3B,SAAS,KAAK,KAAK,KAAK,KAAK;AAAA,IAC7B,MAAM,MAAM,KAAK,KAAK,KAAK;AAAA,EAC7B;AACA,WAAS,kBAAkB,OAAO,OAAO,QAAQI,OAAM,OAAO;AAC5D,UAAM,EAAC,KAAK,WAAW,KAAK,SAAS,QAAO,IAAI;AAChD,UAAMC,SAAQ,QAAQ,QAAQ,QAAQ,KAAK;AAC3C,UAAMJ,UAAS,QAAQI,MAAK,KAAK;AACjC,UAAM,SAAS,MAAM,iBAAiB,MAAM,iBAAiB,YAAYJ,OAAM,IAAI,KAAK;AACxF,UAAM,SAAS,MAAM,iBAAiB,MAAM,iBAAiB,UAAUA,OAAM,IAAI,KAAK;AACtF,QAAI,MAAM,MAAM,KAAK,MAAM,MAAM,GAAG;AAClC,aAAO;AAAA,IACT;AACA,WAAO,YAAY,OAAO,EAAC,KAAK,QAAQ,KAAK,OAAM,GAAG,QAAQG,OAAM,QAAQ,KAAK;AAAA,EACnF;AACA,WAAS,kBAAkB,OAAO,OAAO,QAAQ;AAC/C,WAAO,kBAAkB,OAAO,OAAO,QAAQ,IAAI;AAAA,EACrD;AACA,MAAM,gBAAgB;AAAA,IACpB,UAAU;AAAA,IACV,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AACA,MAAM,oBAAoB;AAAA,IACxB,SAAS;AAAA,EACX;AACA,MAAM,eAAe;AAAA,IACnB,UAAU;AAAA,IACV,SAAS;AAAA,IACT,aAAa;AAAA,IACb,YAAY;AAAA,EACd;AAEA,WAAS,wBAAwB,OAAO,qBAAqB,oBAAoB;AAC/E,UAAM,EAAC,IAAI,SAAS,EAAC,KAAAP,MAAK,KAAAG,KAAG,EAAC,IAAI;AAClC,QAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,mBAAmB,EAAE,GAAG;AACvD,aAAO;AAAA,IACT;AACA,UAAM,WAAW,mBAAmB,EAAE;AACtC,WAAO,SAAS,QAAQH,QAAO,SAAS,QAAQG;AAAA,EAClD;AACA,WAAS,oBAAoB,QAAQL,SAAQ;AAC3C,SAAK,QAAQ,CAAC,KAAK,QAAQ;AACzB,UAAI,CAACA,QAAO,GAAG,GAAG;AAChB,eAAO,OAAO,GAAG;AAAA,MACnB;AAAA,IACF,CAAC;AAAA,EACH;AACA,WAAS,yBAAyB,OAAO,OAAO;AAC9C,UAAM,EAAC,QAAAA,QAAM,IAAI;AACjB,UAAM,EAAC,qBAAqB,mBAAkB,IAAI;AAClD,SAAKA,SAAQ,SAAS,OAAO;AAC3B,UAAI,wBAAwB,OAAO,qBAAqB,kBAAkB,GAAG;AAC3E,4BAAoB,MAAM,EAAE,IAAI;AAAA,UAC9B,KAAK,EAAC,OAAO,MAAM,KAAK,SAAS,MAAM,QAAQ,IAAG;AAAA,UAClD,KAAK,EAAC,OAAO,MAAM,KAAK,SAAS,MAAM,QAAQ,IAAG;AAAA,QACpD;AAAA,MACF;AAAA,IACF,CAAC;AACD,wBAAoB,qBAAqBA,OAAM;AAC/C,wBAAoB,oBAAoBA,OAAM;AAC9C,WAAO;AAAA,EACT;AACA,WAAS,OAAO,OAAO,QAAQ,QAAQ,QAAQ;AAC7C,UAAMF,MAAK,cAAc,MAAM,IAAI,KAAK,cAAc;AACtD,aAASA,KAAI,CAAC,OAAO,QAAQ,QAAQ,MAAM,CAAC;AAAA,EAC9C;AACA,WAAS,WAAW,OAAOS,OAAMC,KAAI,QAAQ;AAC3C,UAAMV,MAAK,kBAAkB,MAAM,IAAI,KAAK,kBAAkB;AAC9D,aAASA,KAAI,CAAC,OAAOS,OAAMC,KAAI,MAAM,CAAC;AAAA,EACxC;AACA,WAAS,UAAU,OAAO;AACxB,UAAM,KAAK,MAAM;AACjB,WAAO;AAAA,MACL,IAAI,GAAG,OAAO,GAAG,SAAS;AAAA,MAC1B,IAAI,GAAG,MAAM,GAAG,UAAU;AAAA,IAC5B;AAAA,EACF;AACA,WAAS,KAAK,OAAO,QAAQ,aAAa,QAAQ,UAAU,OAAO;AACjE,UAAM,EAAC,IAAI,GAAG,GAAAT,KAAI,GAAG,aAAa,UAAU,KAAK,EAAC,IAAI,OAAO,WAAW,WAAW,EAAC,GAAG,QAAQ,GAAG,OAAM,IAAI;AAC5G,UAAM,QAAQ,SAAS,KAAK;AAC5B,UAAM,EAAC,SAAS,EAAC,QAAQ,MAAM,YAAW,EAAC,IAAI;AAC/C,6BAAyB,OAAO,KAAK;AACrC,UAAM,WAAW,MAAM;AACvB,UAAM,WAAWA,OAAM;AACvB,UAAM,gBAAgB,wBAAwB,aAAa,YAAY,KAAK;AAC5E,SAAK,iBAAiB,MAAM,QAAQ,SAAS,OAAO;AAClD,UAAI,MAAM,aAAa,KAAK,UAAU;AACpC,eAAO,OAAO,GAAG,YAAY,MAAM;AAAA,MACrC,WAAW,CAAC,MAAM,aAAa,KAAK,UAAU;AAC5C,eAAO,OAAOA,IAAG,YAAY,MAAM;AAAA,MACrC;AAAA,IACF,CAAC;AACD,UAAM,OAAO,UAAU;AACvB,aAAS,YAAY,QAAQ,CAAC,EAAC,OAAO,QAAO,CAAC,CAAC;AAAA,EACjD;AACA,WAAS,SAAS,OAAO,IAAI,IAAI,aAAa,QAAQ,UAAU,OAAO;AACrE,UAAM,QAAQ,SAAS,KAAK;AAC5B,UAAM,EAAC,SAAS,EAAC,QAAQ,MAAM,YAAW,EAAC,IAAI;AAC/C,UAAM,EAAC,OAAO,KAAI,IAAI;AACtB,6BAAyB,OAAO,KAAK;AACrC,UAAM,WAAW,iBAAiB,MAAM,KAAK,KAAK;AAClD,UAAM,WAAW,iBAAiB,MAAM,KAAK,KAAK;AAClD,SAAK,MAAM,QAAQ,SAAS,OAAO;AACjC,UAAI,MAAM,aAAa,KAAK,UAAU;AACpC,mBAAW,OAAO,GAAG,GAAG,GAAG,GAAG,MAAM;AAAA,MACtC,WAAW,CAAC,MAAM,aAAa,KAAK,UAAU;AAC5C,mBAAW,OAAO,GAAG,GAAG,GAAG,GAAG,MAAM;AAAA,MACtC;AAAA,IACF,CAAC;AACD,UAAM,OAAO,UAAU;AACvB,aAAS,YAAY,QAAQ,CAAC,EAAC,OAAO,QAAO,CAAC,CAAC;AAAA,EACjD;AACA,WAAS,UAAU,OAAO,SAASI,QAAO,aAAa,QAAQ,UAAU,OAAO;AAC9E,UAAM,QAAQ,SAAS,KAAK;AAC5B,6BAAyB,OAAO,KAAK;AACrC,UAAM,QAAQ,MAAM,OAAO,OAAO;AAClC,gBAAY,OAAOA,QAAO,QAAW,IAAI;AACzC,UAAM,OAAO,UAAU;AACvB,aAAS,MAAM,QAAQ,MAAM,QAAQ,CAAC,EAAC,OAAO,QAAO,CAAC,CAAC;AAAA,EACzD;AACA,WAAS,UAAU,OAAO,aAAa,WAAW;AAChD,UAAM,QAAQ,SAAS,KAAK;AAC5B,UAAM,sBAAsB,yBAAyB,OAAO,KAAK;AACjE,SAAK,MAAM,QAAQ,SAAS,OAAO;AACjC,YAAM,eAAe,MAAM;AAC3B,UAAI,oBAAoB,MAAM,EAAE,GAAG;AACjC,qBAAa,MAAM,oBAAoB,MAAM,EAAE,EAAE,IAAI;AACrD,qBAAa,MAAM,oBAAoB,MAAM,EAAE,EAAE,IAAI;AAAA,MACvD,OAAO;AACL,eAAO,aAAa;AACpB,eAAO,aAAa;AAAA,MACtB;AACA,aAAO,MAAM,mBAAmB,MAAM,EAAE;AAAA,IAC1C,CAAC;AACD,UAAM,OAAO,UAAU;AACvB,aAAS,MAAM,QAAQ,KAAK,gBAAgB,CAAC,EAAC,MAAK,CAAC,CAAC;AAAA,EACvD;AACA,WAAS,iBAAiB,OAAO,SAAS;AACxC,UAAM,WAAW,MAAM,oBAAoB,OAAO;AAClD,QAAI,CAAC,UAAU;AACb;AAAA,IACF;AACA,UAAM,EAAC,KAAAD,MAAK,KAAAG,KAAG,IAAI;AACnB,WAAO,eAAeA,KAAI,SAASA,KAAI,KAAK,IAAI,eAAeH,KAAI,SAASA,KAAI,KAAK;AAAA,EACvF;AACA,WAAS,aAAa,OAAO;AAC3B,UAAM,QAAQ,SAAS,KAAK;AAC5B,QAAIA,OAAM;AACV,QAAIG,OAAM;AACV,SAAK,MAAM,QAAQ,SAAS,OAAO;AACjC,YAAM,YAAY,iBAAiB,OAAO,MAAM,EAAE;AAClD,UAAI,WAAW;AACb,cAAM,QAAQ,KAAK,MAAM,aAAa,MAAM,MAAM,MAAM,OAAO,GAAG,IAAI;AACtE,QAAAH,OAAM,KAAK,IAAIA,MAAK,KAAK;AACzB,QAAAG,OAAM,KAAK,IAAIA,MAAK,KAAK;AAAA,MAC3B;AAAA,IACF,CAAC;AACD,WAAOH,OAAM,IAAIA,OAAMG;AAAA,EACzB;AACA,WAAS,SAAS,OAAO,OAAO,QAAQ,OAAO;AAC7C,UAAM,EAAC,SAAQ,IAAI;AACnB,UAAM,cAAc,SAAS,MAAM,EAAE,KAAK;AAC1C,QAAI,KAAK,WAAW,MAAM,KAAK,KAAK,GAAG;AACrC,eAAS;AAAA,IACX;AACA,UAAMP,MAAK,aAAa,MAAM,IAAI,KAAK,aAAa;AACpD,QAAI,SAASA,KAAI,CAAC,OAAO,OAAO,MAAM,CAAC,GAAG;AACxC,eAAS,MAAM,EAAE,IAAI;AAAA,IACvB,OAAO;AACL,eAAS,MAAM,EAAE,IAAI;AAAA,IACvB;AAAA,EACF;AACA,WAAS,IAAI,OAAO,OAAO,eAAe,aAAa,QAAQ;AAC7D,UAAM,EAAC,IAAI,GAAG,GAAAC,KAAI,EAAC,IAAI,OAAO,UAAU,WAAW,EAAC,GAAG,OAAO,GAAG,MAAK,IAAI;AAC1E,UAAM,QAAQ,SAAS,KAAK;AAC5B,UAAM,EAAC,SAAS,EAAC,KAAK,YAAY,OAAM,EAAC,IAAI;AAC7C,UAAM,EAAC,MAAK,IAAI,cAAc,CAAC;AAC/B,6BAAyB,OAAO,KAAK;AACrC,UAAM,WAAW,MAAM;AACvB,UAAM,WAAWA,OAAM;AACvB,SAAK,iBAAiB,MAAM,QAAQ,SAAS,OAAO;AAClD,UAAI,MAAM,aAAa,KAAK,UAAU;AACpC,iBAAS,OAAO,GAAG,QAAQ,KAAK;AAAA,MAClC,WAAW,CAAC,MAAM,aAAa,KAAK,UAAU;AAC5C,iBAAS,OAAOA,IAAG,QAAQ,KAAK;AAAA,MAClC;AAAA,IACF,CAAC;AACD,UAAM,OAAO,UAAU;AACvB,aAAS,OAAO,CAAC,EAAC,MAAK,CAAC,CAAC;AAAA,EAC3B;AACA,WAAS,sBAAsB,OAAO;AACpC,UAAM,QAAQ,SAAS,KAAK;AAC5B,6BAAyB,OAAO,KAAK;AACrC,UAAM,cAAc,CAAC;AACrB,eAAW,WAAW,OAAO,KAAK,MAAM,MAAM,GAAG;AAC/C,YAAM,EAAC,KAAAG,MAAK,KAAAG,KAAG,IAAI,MAAM,oBAAoB,OAAO,KAAK,EAAC,KAAK,CAAC,GAAG,KAAK,CAAC,EAAC;AAC1E,kBAAY,OAAO,IAAI,EAAC,KAAKH,KAAI,OAAO,KAAKG,KAAI,MAAK;AAAA,IACxD;AACA,WAAO;AAAA,EACT;AACA,WAAS,qBAAqB,OAAO;AACnC,UAAM,QAAQ,SAAS,KAAK;AAC5B,UAAM,cAAc,CAAC;AACrB,eAAW,WAAW,OAAO,KAAK,MAAM,MAAM,GAAG;AAC/C,kBAAY,OAAO,IAAI,MAAM,mBAAmB,OAAO;AAAA,IACzD;AACA,WAAO;AAAA,EACT;AACA,WAAS,iBAAiB,OAAO;AAC/B,UAAM,cAAc,sBAAsB,KAAK;AAC/C,eAAW,WAAW,OAAO,KAAK,MAAM,MAAM,GAAG;AAC/C,YAAM,EAAC,KAAK,aAAa,KAAK,YAAW,IAAI,YAAY,OAAO;AAChE,UAAI,gBAAgB,UAAa,MAAM,OAAO,OAAO,EAAE,QAAQ,aAAa;AAC1E,eAAO;AAAA,MACT;AACA,UAAI,gBAAgB,UAAa,MAAM,OAAO,OAAO,EAAE,QAAQ,aAAa;AAC1E,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,WAAS,mBAAmB,OAAO;AACjC,UAAM,QAAQ,SAAS,KAAK;AAC5B,WAAO,MAAM,WAAW,MAAM;AAAA,EAChC;AAEA,MAAM,QAAQ,CAAC,GAAGE,OAAMC,QAAO,KAAK,IAAIA,KAAI,KAAK,IAAID,OAAM,CAAC,CAAC;AAC7D,WAASI,eAAc,OAAO,MAAM;AAClC,UAAM,EAAC,SAAQ,IAAI,SAAS,KAAK;AACjC,UAAM,UAAU,SAAS,IAAI;AAC7B,QAAI,WAAW,QAAQ,QAAQ;AAC7B,cAAQ,OAAO,oBAAoB,MAAM,OAAO;AAChD,aAAO,SAAS,IAAI;AAAA,IACtB;AAAA,EACF;AACA,WAASC,YAAW,OAAO,QAAQ,MAAM,SAAS;AAChD,UAAM,EAAC,UAAU,QAAO,IAAI,SAAS,KAAK;AAC1C,UAAM,aAAa,SAAS,IAAI;AAChC,QAAI,cAAc,WAAW,WAAW,QAAQ;AAC9C;AAAA,IACF;AACA,IAAAD,eAAc,OAAO,IAAI;AACzB,aAAS,IAAI,IAAI,CAACf,WAAU,QAAQ,OAAOA,QAAO,OAAO;AACzD,aAAS,IAAI,EAAE,SAAS;AACxB,UAAMiB,WAAU,SAAS,UAAU,QAAQ;AAC3C,WAAO,iBAAiB,MAAM,SAAS,IAAI,GAAG,EAAC,SAAAA,SAAO,CAAC;AAAA,EACzD;AACA,WAAS,UAAU,OAAOjB,QAAO;AAC/B,UAAM,QAAQ,SAAS,KAAK;AAC5B,QAAI,MAAM,WAAW;AACnB,YAAM,WAAW;AACjB,YAAM,UAAUA;AAChB,YAAM,OAAO,MAAM;AAAA,IACrB;AAAA,EACF;AACA,WAAS,QAAQ,OAAOA,QAAO;AAC7B,UAAM,QAAQ,SAAS,KAAK;AAC5B,QAAI,CAAC,MAAM,aAAaA,OAAM,QAAQ,UAAU;AAC9C;AAAA,IACF;AACA,IAAAe,eAAc,OAAO,SAAS;AAC9B,UAAM,WAAW;AACjB,UAAM,YAAY,MAAM,UAAU;AAClC,UAAM,OAAO,MAAM;AAAA,EACrB;AACA,WAAS,iBAAiBf,QAAO,OAAO;AACtC,QAAIA,OAAM,WAAW,MAAM,QAAQ;AACjC,YAAM,aAAa,MAAM,OAAO,sBAAsB;AACtD,aAAO;AAAA,QACL,GAAGA,OAAM,UAAU,WAAW;AAAA,QAC9B,GAAGA,OAAM,UAAU,WAAW;AAAA,MAChC;AAAA,IACF;AACA,WAAO,oBAAoBA,QAAO,KAAK;AAAA,EACzC;AACA,WAAS,UAAU,OAAOA,QAAO,aAAa;AAC5C,UAAM,EAAC,aAAa,eAAc,IAAI;AACtC,QAAI,aAAa;AACf,YAAM,QAAQ,iBAAiBA,QAAO,KAAK;AAC3C,UAAI,SAAS,aAAa,CAAC,EAAC,OAAO,OAAAA,QAAO,MAAK,CAAC,CAAC,MAAM,OAAO;AAC5D,iBAAS,gBAAgB,CAAC,EAAC,OAAO,OAAAA,OAAK,CAAC,CAAC;AACzC,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,WAAS,UAAU,OAAOA,QAAO;AAC/B,QAAI,MAAM,QAAQ;AAChB,YAAM,QAAQ,oBAAoBA,QAAO,KAAK;AAC9C,UAAI,eAAe,OAAO,MAAM,MAAM,GAAG;AACvC;AAAA,MACF;AAAA,IACF;AACA,UAAM,QAAQ,SAAS,KAAK;AAC5B,UAAM,EAAC,KAAK,YAAY,MAAM,cAAc,CAAC,EAAC,IAAI,MAAM;AACxD,QACEA,OAAM,WAAW,KACjB,WAAW,eAAe,UAAU,GAAGA,MAAK,KAC5C,cAAc,eAAe,YAAY,IAAI,GAAGA,MAAK,GACrD;AACA,aAAO,SAAS,YAAY,gBAAgB,CAAC,EAAC,OAAO,OAAAA,OAAK,CAAC,CAAC;AAAA,IAC9D;AACA,QAAI,UAAU,OAAOA,QAAO,WAAW,MAAM,OAAO;AAClD;AAAA,IACF;AACA,UAAM,YAAYA;AAClB,IAAAgB,YAAW,OAAO,MAAM,OAAO,eAAe,aAAa,SAAS;AACpE,IAAAA,YAAW,OAAO,OAAO,UAAU,WAAW,OAAO;AAAA,EACvD;AACA,WAAS,iBAAiB,EAAC,OAAO,KAAAE,KAAG,GAAG,aAAa;AACnD,QAAI,QAAQA,KAAI,IAAI,MAAM;AAC1B,QAAI,SAASA,KAAI,IAAI,MAAM;AAC3B,UAAM,QAAQ,KAAK,IAAI,QAAQ,MAAM;AACrC,QAAI,QAAQ,aAAa;AACvB,cAAQ,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,SAAS,WAAW;AAAA,IAC1D,WAAW,QAAQ,aAAa;AAC9B,eAAS,KAAK,KAAK,MAAM,IAAI,KAAK,IAAI,QAAQ,WAAW;AAAA,IAC3D;AACA,IAAAA,KAAI,IAAI,MAAM,IAAI;AAClB,IAAAA,KAAI,IAAI,MAAM,IAAI;AAAA,EACpB;AACA,WAAS,iBAAiB,MAAM,WAAW,QAAQ,EAAC,KAAAZ,MAAK,KAAAG,MAAK,KAAI,GAAG;AACnE,SAAKH,IAAG,IAAI,MAAM,KAAK,IAAI,OAAO,MAAM,IAAI,GAAG,OAAO,IAAI,IAAI,CAAC,GAAG,UAAUA,IAAG,GAAG,UAAUG,IAAG,CAAC;AAChG,SAAKA,IAAG,IAAI,MAAM,KAAK,IAAI,OAAO,MAAM,IAAI,GAAG,OAAO,IAAI,IAAI,CAAC,GAAG,UAAUH,IAAG,GAAG,UAAUG,IAAG,CAAC;AAAA,EAClG;AACA,WAAS,kBAAkB,OAAO,aAAa,qBAAqB;AAClE,UAAM,SAAS;AAAA,MACb,OAAO,iBAAiB,YAAY,WAAW,KAAK;AAAA,MACpD,KAAK,iBAAiB,YAAY,SAAS,KAAK;AAAA,IAClD;AACA,QAAI,qBAAqB;AACvB,YAAM,cAAc,MAAM,UAAU,QAAQ,MAAM,UAAU;AAC5D,uBAAiB,QAAQ,WAAW;AAAA,IACtC;AACA,WAAO;AAAA,EACT;AACA,WAAS,gBAAgB,OAAO,MAAM,aAAa,qBAAqB;AACtE,UAAM,WAAW,iBAAiB,MAAM,KAAK,KAAK;AAClD,UAAM,WAAW,iBAAiB,MAAM,KAAK,KAAK;AAClD,UAAM,EAAC,KAAAU,MAAK,MAAAC,OAAM,OAAAC,QAAO,QAAAC,SAAQ,OAAO,YAAY,QAAQ,YAAW,IAAI,MAAM;AACjF,UAAM,OAAO,EAAC,KAAAH,MAAK,MAAAC,OAAM,OAAAC,QAAO,QAAAC,QAAM;AACtC,UAAM,SAAS,kBAAkB,OAAO,aAAa,uBAAuB,YAAY,QAAQ;AAChG,QAAI,UAAU;AACZ,uBAAiB,MAAM,MAAM,WAAW,QAAQ,EAAC,KAAK,QAAQ,KAAK,SAAS,MAAM,IAAG,CAAC;AAAA,IACxF;AACA,QAAI,UAAU;AACZ,uBAAiB,MAAM,MAAM,WAAW,QAAQ,EAAC,KAAK,OAAO,KAAK,UAAU,MAAM,IAAG,CAAC;AAAA,IACxF;AACA,UAAM,QAAQ,KAAK,QAAQ,KAAK;AAChC,UAAM,SAAS,KAAK,SAAS,KAAK;AAClC,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,MACA;AAAA,MACA,OAAO,YAAY,QAAQ,KAAM,aAAa,SAAS,aAAc;AAAA,MACrE,OAAO,YAAY,SAAS,KAAM,cAAc,UAAU,cAAe;AAAA,IAC3E;AAAA,EACF;AACA,WAAS,QAAQ,OAAOtB,QAAO;AAC7B,UAAM,QAAQ,SAAS,KAAK;AAC5B,QAAI,CAAC,MAAM,WAAW;AACpB;AAAA,IACF;AACA,IAAAe,eAAc,OAAO,WAAW;AAChC,UAAM,EAAC,MAAM,gBAAgB,MAAM,EAAC,YAAY,GAAG,oBAAmB,EAAC,IAAI,MAAM,QAAQ;AACzF,UAAM,OAAO,gBAAgB,OAAO,MAAM,EAAC,WAAW,MAAM,WAAW,SAASf,OAAK,GAAG,mBAAmB;AAC3G,UAAM,YAAY,iBAAiB,MAAM,KAAK,KAAK,IAAI,KAAK,QAAQ;AACpE,UAAM,YAAY,iBAAiB,MAAM,KAAK,KAAK,IAAI,KAAK,SAAS;AACrE,UAAM,WAAW,KAAK,KAAK,YAAY,YAAY,YAAY,SAAS;AACxE,UAAM,YAAY,MAAM,UAAU;AAClC,QAAI,YAAY,WAAW;AACzB,YAAM,WAAW;AACjB,YAAM,OAAO,MAAM;AACnB;AAAA,IACF;AACA,aAAS,OAAO,EAAC,GAAG,KAAK,MAAM,GAAG,KAAK,IAAG,GAAG,EAAC,GAAG,KAAK,OAAO,GAAG,KAAK,OAAM,GAAG,QAAQ,MAAM;AAC5F,UAAM,WAAW;AACjB,UAAM,kBAAkB;AACxB,aAAS,gBAAgB,CAAC,EAAC,MAAK,CAAC,CAAC;AAAA,EACpC;AACA,WAAS,mBAAmB,OAAOA,QAAO,aAAa;AACrD,QAAI,cAAc,eAAe,YAAY,KAAK,GAAGA,MAAK,GAAG;AAC3D,eAAS,YAAY,gBAAgB,CAAC,EAAC,OAAO,OAAAA,OAAK,CAAC,CAAC;AACrD;AAAA,IACF;AACA,QAAI,UAAU,OAAOA,QAAO,WAAW,MAAM,OAAO;AAClD;AAAA,IACF;AACA,QAAIA,OAAM,YAAY;AACpB,MAAAA,OAAM,eAAe;AAAA,IACvB;AACA,QAAIA,OAAM,WAAW,QAAW;AAC9B;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,WAAS,MAAM,OAAOA,QAAO;AAC3B,UAAM,EAAC,UAAU,EAAC,eAAc,GAAG,SAAS,EAAC,MAAM,YAAW,EAAC,IAAI,SAAS,KAAK;AACjF,QAAI,CAAC,mBAAmB,OAAOA,QAAO,WAAW,GAAG;AAClD;AAAA,IACF;AACA,UAAM,OAAOA,OAAM,OAAO,sBAAsB;AAChD,UAAM,QAAQ,YAAY,MAAM;AAChC,UAAM,aAAaA,OAAM,UAAU,IAAI,IAAI,KAAK,IAAI,SAAS,IAAI;AACjE,UAAM,SAAS;AAAA,MACb,GAAG;AAAA,MACH,GAAG;AAAA,MACH,YAAY;AAAA,QACV,GAAGA,OAAM,UAAU,KAAK;AAAA,QACxB,GAAGA,OAAM,UAAU,KAAK;AAAA,MAC1B;AAAA,IACF;AACA,SAAK,OAAO,QAAQ,QAAQ,OAAO;AACnC,aAAS,gBAAgB,CAAC,EAAC,MAAK,CAAC,CAAC;AAAA,EACpC;AACA,WAAS,oBAAoB,OAAO,MAAM,SAAS,OAAO;AACxD,QAAI,SAAS;AACX,eAAS,KAAK,EAAE,SAAS,IAAI,IAAIC,UAAS,MAAM,SAAS,SAAS,CAAC,EAAC,MAAK,CAAC,CAAC,GAAG,KAAK;AAAA,IACrF;AAAA,EACF;AACA,WAAS,aAAa,OAAO,SAAS;AACpC,UAAM,SAAS,MAAM;AACrB,UAAM,EAAC,OAAO,cAAc,MAAM,aAAa,eAAc,IAAI,QAAQ;AACzE,QAAI,aAAa,SAAS;AACxB,MAAAe,YAAW,OAAO,QAAQ,SAAS,KAAK;AACxC,0BAAoB,OAAO,kBAAkB,gBAAgB,GAAG;AAAA,IAClE,OAAO;AACL,MAAAD,eAAc,OAAO,OAAO;AAAA,IAC9B;AACA,QAAI,YAAY,SAAS;AACvB,MAAAC,YAAW,OAAO,QAAQ,aAAa,SAAS;AAChD,MAAAA,YAAW,OAAO,OAAO,eAAe,WAAW,OAAO;AAAA,IAC5D,OAAO;AACL,MAAAD,eAAc,OAAO,WAAW;AAChC,MAAAA,eAAc,OAAO,WAAW;AAChC,MAAAA,eAAc,OAAO,SAAS;AAC9B,MAAAA,eAAc,OAAO,SAAS;AAAA,IAChC;AAAA,EACF;AACA,WAAS,gBAAgB,OAAO;AAC9B,IAAAA,eAAc,OAAO,WAAW;AAChC,IAAAA,eAAc,OAAO,WAAW;AAChC,IAAAA,eAAc,OAAO,SAAS;AAC9B,IAAAA,eAAc,OAAO,OAAO;AAC5B,IAAAA,eAAc,OAAO,OAAO;AAC5B,IAAAA,eAAc,OAAO,SAAS;AAAA,EAChC;AAEA,WAAS,cAAc,OAAO,OAAO;AACnC,WAAO,SAAS,YAAYf,QAAO;AACjC,YAAM,EAAC,KAAK,YAAY,MAAM,cAAc,CAAC,EAAC,IAAI,MAAM;AACxD,UAAI,CAAC,cAAc,CAAC,WAAW,SAAS;AACtC,eAAO;AAAA,MACT;AACA,YAAM,WAAWA,UAASA,OAAM;AAChC,UAAI,CAAC,UAAU;AACb,eAAO;AAAA,MACT;AACA,UAAI,CAAC,MAAM,WAAWA,OAAM,gBAAgB,YAC1C,cAAc,eAAe,UAAU,GAAG,QAAQ,KAAK,WAAW,eAAe,YAAY,IAAI,GAAG,QAAQ,IAC5G;AACA,iBAAS,WAAW,eAAe,CAAC,EAAC,OAAO,OAAAA,OAAK,CAAC,CAAC;AACnD,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACA,WAAS,UAAU,IAAI,IAAI;AACzB,UAAM,SAAS,KAAK,IAAI,GAAG,UAAU,GAAG,OAAO;AAC/C,UAAM,SAAS,KAAK,IAAI,GAAG,UAAU,GAAG,OAAO;AAC/C,UAAMuB,KAAI,SAAS;AACnB,QAAI,GAAGpB;AACP,QAAIoB,KAAI,OAAOA,KAAI,KAAK;AACtB,UAAIpB,KAAI;AAAA,IACV,WAAW,SAAS,QAAQ;AAC1B,UAAI;AAAA,IACN,OAAO;AACL,MAAAA,KAAI;AAAA,IACN;AACA,WAAO,EAAC,GAAG,GAAAA,GAAC;AAAA,EACd;AACA,WAAS,YAAY,OAAO,OAAOqB,IAAG;AACpC,QAAI,MAAM,OAAO;AACf,YAAM,EAAC,QAAQ,SAAQ,IAAIA;AAC3B,YAAM,cAAc,IAAI,MAAM,QAAQA,GAAE;AACxC,YAAM,OAAOA,GAAE,OAAO,sBAAsB;AAC5C,YAAM,QAAQ,UAAU,SAAS,CAAC,GAAG,SAAS,CAAC,CAAC;AAChD,YAAM,OAAO,MAAM,QAAQ,KAAK;AAChC,YAAM,SAAS;AAAA,QACb,GAAG,MAAM,KAAK,iBAAiB,MAAM,KAAK,KAAK,IAAI,cAAc;AAAA,QACjE,GAAG,MAAM,KAAK,iBAAiB,MAAM,KAAK,KAAK,IAAI,cAAc;AAAA,QACjE,YAAY;AAAA,UACV,GAAG,OAAO,IAAI,KAAK;AAAA,UACnB,GAAG,OAAO,IAAI,KAAK;AAAA,QACrB;AAAA,MACF;AACA,WAAK,OAAO,QAAQ,QAAQ,OAAO;AACnC,YAAM,QAAQA,GAAE;AAAA,IAClB;AAAA,EACF;AACA,WAAS,WAAW,OAAO,OAAOxB,QAAO;AACvC,QAAI,MAAM,QAAQ,KAAK,MAAM,SAAS;AACpC,YAAM,QAAQ,oBAAoBA,QAAO,KAAK;AAC9C,UAAI,SAAS,MAAM,QAAQ,KAAK,aAAa,CAAC,EAAC,OAAO,OAAAA,QAAO,MAAK,CAAC,CAAC,MAAM,OAAO;AAC/E,cAAM,QAAQ;AACd,iBAAS,MAAM,QAAQ,KAAK,gBAAgB,CAAC,EAAC,OAAO,OAAAA,OAAK,CAAC,CAAC;AAAA,MAC9D,OAAO;AACL,cAAM,QAAQ;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AACA,WAAS,SAAS,OAAO,OAAOwB,IAAG;AACjC,QAAI,MAAM,OAAO;AACf,kBAAY,OAAO,OAAOA,EAAC;AAC3B,YAAM,QAAQ;AACd,eAAS,MAAM,QAAQ,KAAK,gBAAgB,CAAC,EAAC,MAAK,CAAC,CAAC;AAAA,IACvD;AAAA,EACF;AACA,WAAS,UAAU,OAAO,OAAOA,IAAG;AAClC,UAAM,QAAQ,MAAM;AACpB,QAAI,OAAO;AACT,YAAM,UAAU;AAChB,UAAI,OAAO,EAAC,GAAGA,GAAE,SAAS,MAAM,GAAG,GAAGA,GAAE,SAAS,MAAM,EAAC,GAAG,MAAM,SAAS;AAC1E,YAAM,QAAQ,EAAC,GAAGA,GAAE,QAAQ,GAAGA,GAAE,OAAM;AAAA,IACzC;AAAA,EACF;AACA,WAAS,SAAS,OAAO,OAAOxB,QAAO;AACrC,UAAM,EAAC,SAAS,YAAY,cAAa,IAAI,MAAM,QAAQ;AAC3D,QAAI,CAAC,SAAS;AACZ;AAAA,IACF;AACA,UAAM,OAAOA,OAAM,OAAO,sBAAsB;AAChD,UAAM,QAAQ;AAAA,MACZ,GAAGA,OAAM,OAAO,IAAI,KAAK;AAAA,MACzB,GAAGA,OAAM,OAAO,IAAI,KAAK;AAAA,IAC3B;AACA,QAAI,SAAS,YAAY,CAAC,EAAC,OAAO,OAAAA,QAAO,MAAK,CAAC,CAAC,MAAM,OAAO;AAC3D,aAAO,SAAS,eAAe,CAAC,EAAC,OAAO,OAAAA,OAAK,CAAC,CAAC;AAAA,IACjD;AACA,UAAM,YAAY,wBAAwB,MAAM,QAAQ,KAAK,OAAO,KAAK;AACzE,UAAM,QAAQ,EAAC,GAAG,GAAG,GAAG,EAAC;AACzB,cAAU,OAAO,OAAOA,MAAK;AAAA,EAC/B;AACA,WAAS,OAAO,OAAO,OAAO;AAC5B,UAAM,QAAQ;AACd,QAAI,MAAM,SAAS;AACjB,YAAM,UAAU;AAChB,YAAM,kBAAkB;AACxB,eAAS,MAAM,QAAQ,IAAI,eAAe,CAAC,EAAC,MAAK,CAAC,CAAC;AAAA,IACrD;AAAA,EACF;AACA,MAAM,UAAU,oBAAI,QAAQ;AAC5B,WAAS,YAAY,OAAO,SAAS;AACnC,UAAM,QAAQ,SAAS,KAAK;AAC5B,UAAM,SAAS,MAAM;AACrB,UAAM,EAAC,KAAK,YAAY,MAAM,YAAW,IAAI;AAC7C,UAAM,KAAK,IAAI,gBAAAyB,QAAO,QAAQ,MAAM;AACpC,QAAI,eAAe,YAAY,MAAM,SAAS;AAC5C,SAAG,IAAI,IAAI,gBAAAA,QAAO,MAAM,CAAC;AACzB,SAAG,GAAG,cAAc,CAACD,OAAM,WAAW,OAAO,OAAOA,EAAC,CAAC;AACtD,SAAG,GAAG,SAAS,CAACA,OAAM,YAAY,OAAO,OAAOA,EAAC,CAAC;AAClD,SAAG,GAAG,YAAY,CAACA,OAAM,SAAS,OAAO,OAAOA,EAAC,CAAC;AAAA,IACpD;AACA,QAAI,cAAc,WAAW,SAAS;AACpC,SAAG,IAAI,IAAI,gBAAAC,QAAO,IAAI;AAAA,QACpB,WAAW,WAAW;AAAA,QACtB,QAAQ,cAAc,OAAO,KAAK;AAAA,MACpC,CAAC,CAAC;AACF,SAAG,GAAG,YAAY,CAACD,OAAM,SAAS,OAAO,OAAOA,EAAC,CAAC;AAClD,SAAG,GAAG,WAAW,CAACA,OAAM,UAAU,OAAO,OAAOA,EAAC,CAAC;AAClD,SAAG,GAAG,UAAU,MAAM,OAAO,OAAO,KAAK,CAAC;AAAA,IAC5C;AACA,YAAQ,IAAI,OAAO,EAAE;AAAA,EACvB;AACA,WAAS,WAAW,OAAO;AACzB,UAAM,KAAK,QAAQ,IAAI,KAAK;AAC5B,QAAI,IAAI;AACN,SAAG,OAAO,YAAY;AACtB,SAAG,OAAO,OAAO;AACjB,SAAG,OAAO,UAAU;AACpB,SAAG,OAAO,UAAU;AACpB,SAAG,OAAO,KAAK;AACf,SAAG,OAAO,QAAQ;AAClB,SAAG,QAAQ;AACX,cAAQ,OAAO,KAAK;AAAA,IACtB;AAAA,EACF;AACA,WAAS,qBAAqB,YAAY,YAAY;AACpD,UAAM,EAAC,KAAK,QAAQ,MAAM,QAAO,IAAI;AACrC,UAAM,EAAC,KAAK,QAAQ,MAAM,QAAO,IAAI;AACrC,QAAI,SAAS,MAAM,OAAO,YAAY,SAAS,MAAM,OAAO,SAAS;AACnE,aAAO;AAAA,IACT;AACA,QAAI,QAAQ,YAAY,QAAQ,SAAS;AACvC,aAAO;AAAA,IACT;AACA,QAAI,QAAQ,cAAc,QAAQ,WAAW;AAC3C,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAEA,MAAIE,WAAU;AAEd,WAASC,MAAK,OAAO,QAAQ,SAAS;AACpC,UAAM,cAAc,QAAQ,KAAK;AACjC,UAAM,EAAC,WAAW,QAAO,IAAI,SAAS,KAAK;AAC3C,QAAI,YAAY,aAAa,UAAU,CAAC,SAAS;AAC/C;AAAA,IACF;AACA,UAAM,EAAC,MAAAP,OAAM,KAAAD,MAAK,OAAO,OAAM,IAAI,gBAAgB,OAAO,QAAQ,KAAK,MAAM,EAAC,WAAW,QAAO,GAAG,YAAY,mBAAmB;AAClI,UAAM,MAAM,MAAM;AAClB,QAAI,KAAK;AACT,QAAI,UAAU;AACd,QAAI,YAAY,YAAY,mBAAmB;AAC/C,QAAI,SAASC,OAAMD,MAAK,OAAO,MAAM;AACrC,QAAI,YAAY,cAAc,GAAG;AAC/B,UAAI,YAAY,YAAY;AAC5B,UAAI,cAAc,YAAY,eAAe;AAC7C,UAAI,WAAWC,OAAMD,MAAK,OAAO,MAAM;AAAA,IACzC;AACA,QAAI,QAAQ;AAAA,EACd;AACA,MAAI,SAAS;AAAA,IACX,IAAI;AAAA,IACJ,SAAAO;AAAA,IACA,UAAU;AAAA,MACR,KAAK;AAAA,QACH,SAAS;AAAA,QACT,MAAM;AAAA,QACN,WAAW;AAAA,QACX,aAAa;AAAA,MACf;AAAA,MACA,MAAM;AAAA,QACJ,OAAO;AAAA,UACL,SAAS;AAAA,UACT,OAAO;AAAA,UACP,aAAa;AAAA,QACf;AAAA,QACA,MAAM;AAAA,UACJ,SAAS;AAAA,UACT,UAAU;AAAA,UACV,aAAa;AAAA,QACf;AAAA,QACA,OAAO;AAAA,UACL,SAAS;AAAA,QACX;AAAA,QACA,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,OAAO,SAAS,OAAO,OAAO,SAAS;AACrC,YAAM,QAAQ,SAAS,KAAK;AAC5B,YAAM,UAAU;AAChB,UAAI,OAAO,UAAU,eAAe,KAAK,QAAQ,MAAM,SAAS,GAAG;AACjE,gBAAQ,KAAK,kIAAkI;AAAA,MACjJ;AACA,UAAI,OAAO,UAAU,eAAe,KAAK,QAAQ,MAAM,eAAe,KACjE,OAAO,UAAU,eAAe,KAAK,QAAQ,KAAK,eAAe,GAAG;AACvE,gBAAQ,KAAK,0GAA0G;AAAA,MACzH;AACA,UAAI,gBAAAD,SAAQ;AACV,oBAAY,OAAO,OAAO;AAAA,MAC5B;AACA,YAAM,MAAM,CAAC,OAAO,WAAW,eAAe,IAAI,OAAO,OAAO,WAAW,UAAU;AACrF,YAAM,OAAO,CAAC,MAAM,eAAe,KAAK,OAAO,MAAM,UAAU;AAC/D,YAAM,WAAW,CAAC,IAAI,IAAI,eAAe,SAAS,OAAO,IAAI,IAAI,UAAU;AAC3E,YAAM,YAAY,CAAC,IAAIlB,QAAO,eAAe,UAAU,OAAO,IAAIA,QAAO,UAAU;AACnF,YAAM,YAAY,CAAC,eAAe,UAAU,OAAO,UAAU;AAC7D,YAAM,eAAe,MAAM,aAAa,KAAK;AAC7C,YAAM,wBAAwB,MAAM,sBAAsB,KAAK;AAC/D,YAAM,uBAAuB,MAAM,qBAAqB,KAAK;AAC7D,YAAM,mBAAmB,MAAM,iBAAiB,KAAK;AACrD,YAAM,qBAAqB,MAAM,mBAAmB,KAAK;AAAA,IAC3D;AAAA,IACA,YAAY,OAAO,EAAC,OAAAP,OAAK,GAAG;AAC1B,UAAI,mBAAmB,KAAK,GAAG;AAC7B,eAAO;AAAA,MACT;AACA,UAAIA,OAAM,SAAS,WAAWA,OAAM,SAAS,WAAW;AACtD,cAAM,QAAQ,SAAS,KAAK;AAC5B,YAAI,MAAM,iBAAiB;AACzB,gBAAM,kBAAkB;AACxB,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAc,SAAS,OAAO,MAAM,SAAS;AAC3C,YAAM,QAAQ,SAAS,KAAK;AAC5B,YAAM,kBAAkB,MAAM;AAC9B,YAAM,UAAU;AAChB,UAAI,qBAAqB,iBAAiB,OAAO,GAAG;AAClD,mBAAW,KAAK;AAChB,oBAAY,OAAO,OAAO;AAAA,MAC5B;AACA,mBAAa,OAAO,OAAO;AAAA,IAC7B;AAAA,IACA,mBAAmB,OAAO,OAAO,SAAS;AACxC,MAAA2B,MAAK,OAAO,sBAAsB,OAAO;AAAA,IAC3C;AAAA,IACA,kBAAkB,OAAO,OAAO,SAAS;AACvC,MAAAA,MAAK,OAAO,qBAAqB,OAAO;AAAA,IAC1C;AAAA,IACA,WAAW,OAAO,OAAO,SAAS;AAChC,MAAAA,MAAK,OAAO,cAAc,OAAO;AAAA,IACnC;AAAA,IACA,UAAU,OAAO,OAAO,SAAS;AAC/B,MAAAA,MAAK,OAAO,aAAa,OAAO;AAAA,IAClC;AAAA,IACA,MAAM,SAAS,OAAO;AACpB,sBAAgB,KAAK;AACrB,UAAI,gBAAAF,SAAQ;AACV,mBAAW,KAAK;AAAA,MAClB;AACA,kBAAY,KAAK;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;;;ACr8BA,eAAM,SAAS,MAAU;AAGzB,MAAO,wCAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,UAAU;AAAA,MACf;AAAA,IACF;AAAA,IAEA,UAAU;AACR;AAAA,QAAM;AAAA,QACA,EAAE,QAAQ,OAAO,SAAS,EAAE,gBAAgB,iCAAgC,EAAE;AAAA,MAAC,EAClF,KAAK,cAAY,SAAS,KAAK,CAAC,EAChC,KAAK,kBAAgB;AACpB,qBAAa,QAAQ,SAAO;AAC1B,cAAI,UAAU,KAAK,MAAM,IAAI,OAAO,MAAM,IAAI,QAAQ,KAAU;AAAA,QAClE,CAAC;AACD,aAAK,iBAAiB,KAAK;AAAA,UACzB,KAAK;AAAA,UACL;AAAA,UACA;AAAA,YACE;AAAA,YAAY;AAAA,YAAkB;AAAA,YAC9B;AAAA,YAAwB;AAAA,YACxB;AAAA,YAA+B;AAAA,YAC/B;AAAA,YACA;AAAA,YAAuB;AAAA,YACvB;AAAA,YAA8B;AAAA,YAC9B;AAAA,YACA;AAAA,UACF;AAAA,UACA;AAAA,YACE;AAAA,YAAkB;AAAA,YAAwB;AAAA,YAC1C;AAAA,YAAiC;AAAA,YACjC;AAAA,YAAiC;AAAA,YACjC;AAAA,YACA;AAAA,YAAgC;AAAA,YAChC;AAAA,YAAgC;AAAA,YAChC;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC,EACA,MAAM,SAAO;AAAA,MAAC,CAAC;AAAA,IACpB;AAAA,IAEA,WAAW,QAAQ,MAAM,QAAQ,eAAe;AAC9C,UAAI,WAAW,CAAC;AAChB,aAAO,QAAQ,CAAC,KAAKG,WAAU;AAC7B,iBAAS,KAAK;AAAA,UACZ,OAAO,OAAOA,MAAK;AAAA,UACnB;AAAA,UACA,SAAS;AAAA,YACP,UAAU;AAAA,YACV,UAAU,cAAcA,MAAK;AAAA,UAC/B;AAAA,UACA,QAAQ;AAAA,QACV,CAAC;AAAA,MACH,CAAC;AACD,aAAO,IAAI;AAAA,QACT;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,QAAQ,KAAK,IAAI,SAAO,IAAI,OAAO;AAAA,YACnC;AAAA,UACF;AAAA,UACA,SAAS;AAAA,YACP,QAAQ,KAAK;AAAA,YACb,WAAW;AAAA,YACX,SAAS;AAAA,YACT,aAAa;AAAA,cACX,MAAM;AAAA,cACN,MAAM;AAAA,cACN,WAAW;AAAA,YACb;AAAA,YACA,QAAQ;AAAA,cACN,GAAG;AAAA,gBACD,MAAM;AAAA,gBACN,MAAM;AAAA,kBACJ,MAAM;AAAA,gBACR;AAAA,gBACA,OAAO;AAAA,kBACL,OAAO;AAAA,oBACL,SAAS;AAAA,kBACX;AAAA,kBACA,MAAM,SAAS,SAAS;AACtB,wBAAI,QAAQ,QAAQ,QAAQ,KAAK,OAAO;AACtC,6BAAO;AAAA,wBACL,QAAQ;AAAA,sBACV;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;;;AClGA,MAAO,4CAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IAEA,UAAU;AACR;AAAA,QAAM;AAAA,QACA,EAAE,QAAQ,OAAO,SAAS,EAAE,gBAAgB,iCAAgC,EAAE;AAAA,MAAC,EAClF,KAAK,cAAY,SAAS,KAAK,CAAC,EAChC,KAAK,kBAAgB;AACpB,aAAK,mBAAmB,KAAK;AAAA,UAC3B,KAAK;AAAA,UACL,CAAC,aAAa,QAAQ,GAAG,aAAa,SAAS,GAAG,aAAa,UAAU,CAAC;AAAA,UAC1E,CAAC,iBAAiB,kBAAkB,kBAAkB;AAAA,QACxD;AACA,aAAK,6BAA6B,KAAK;AAAA,UACrC,KAAK;AAAA,UACL;AAAA,YAAC,aAAa,gBAAgB;AAAA,YAAG,aAAa,YAAY;AAAA,YACzD,aAAa,gBAAgB;AAAA,YAC7B,aAAa,oCAAoC,IAChD,aAAa,wCAAwC,IACrD,aAAa,qCAAqC;AAAA,YACnD,aAAa,gCAAgC,IAC3C,aAAa,oCAAoC,IACjD,aAAa,iCAAiC;AAAA,UAAC;AAAA,UAClD;AAAA,YAAC;AAAA,YAAmB;AAAA,YAAe;AAAA,YAClC;AAAA,YAAgC;AAAA,UAA0B;AAAA,QAC7D;AACA,aAAK,yCAAyC,KAAK;AAAA,UACjD,KAAK;AAAA,UACL,CAAC,aAAa,uBAAuB,GAAG,aAAa,2BAA2B,GAAG,aAAa,wBAAwB,CAAC;AAAA,UACzH,CAAC,0BAA0B,8BAA8B,yBAAyB;AAAA,QACpF;AACA,aAAK,qBAAqB,KAAK;AAAA,UAC7B,KAAK;AAAA,UACL,CAAC,aAAa,iBAAiB,GAAG,aAAa,kBAAkB,GAAG,aAAa,mBAAmB,CAAC;AAAA,UACrG,CAAC,0BAA0B,2BAA2B,2BAA2B;AAAA,QACnF;AACA,aAAK,iBAAiB,KAAK;AAAA,UACzB,KAAK;AAAA,UACL,CAAC,aAAa,aAAa,GAAG,aAAa,cAAc,GAAG,aAAa,eAAe,CAAC;AAAA,UACzF,CAAC,sBAAsB,uBAAuB,uBAAuB;AAAA,QACvE;AACA,aAAK,qBAAqB,KAAK;AAAA,UAC7B,KAAK;AAAA,UACL,CAAC,aAAa,iBAAiB,GAAG,aAAa,kBAAkB,GAAG,aAAa,mBAAmB,CAAC;AAAA,UACrG,CAAC,0BAA0B,2BAA2B,2BAA2B;AAAA,QACnF;AACA,aAAK,wCAAwC,KAAK;AAAA,UAChD,KAAK;AAAA,UACL;AAAA,YACE,aAAa,yCAAyC,IACtD,aAAa,6CAA6C,IAC1D,aAAa,0CAA0C;AAAA,YACvD,aAAa,0CAA0C,IACvD,aAAa,8CAA8C,IAC3D,aAAa,2CAA2C;AAAA,YACxD,aAAa,2CAA2C,IACxD,aAAa,+CAA+C,IAC5D,aAAa,4CAA4C;AAAA,UAC3D;AAAA,UACA,CAAC,uDAAuD,wDAAwD,wDAAwD;AAAA,QAC1K;AACA,aAAK,wCAAwC,KAAK;AAAA,UAChD,KAAK;AAAA,UACL;AAAA,YACE,aAAa,8CAA8C,IAC3D,aAAa,kDAAkD,IAC/D,aAAa,+CAA+C;AAAA,YAC5D,aAAa,+CAA+C,IAC5D,aAAa,mDAAmD,IAChE,aAAa,gDAAgD;AAAA,YAC7D,aAAa,gDAAgD,IAC7D,aAAa,oDAAoD,IACjE,aAAa,iDAAiD;AAAA,UAChE;AAAA,UACA,CAAC,uDAAuD,wDAAwD,wDAAwD;AAAA,QAC1K;AACA,aAAK,oCAAoC,KAAK;AAAA,UAC5C,KAAK;AAAA,UACL;AAAA,YACE,aAAa,0CAA0C,IACvD,aAAa,8CAA8C,IAC3D,aAAa,2CAA2C;AAAA,YACxD,aAAa,2CAA2C,IACxD,aAAa,+CAA+C,IAC5D,aAAa,4CAA4C;AAAA,YACzD,aAAa,4CAA4C,IACzD,aAAa,gDAAgD,IAC7D,aAAa,6CAA6C;AAAA,UAC5D;AAAA,UACA,CAAC,8CAA8C,+CAA+C,+CAA+C;AAAA,QAC/I;AACA,aAAK,oCAAoC,KAAK;AAAA,UAC5C,KAAK;AAAA,UACL;AAAA,YACE,aAAa,qCAAqC,IAClD,aAAa,sCAAsC,IACnD,aAAa,sCAAsC;AAAA,YACnD,aAAa,sCAAsC,IACnD,aAAa,0CAA0C,IACvD,aAAa,uCAAuC;AAAA,YACpD,aAAa,uCAAuC,IACpD,aAAa,2CAA2C,IACxD,aAAa,wCAAwC;AAAA,UACvD;AAAA,UACA,CAAC,mDAAmD,oDAAoD,oDAAoD;AAAA,QAC9J;AACA,aAAK,oCAAoC,KAAK;AAAA,UAC5C,KAAK;AAAA,UACL;AAAA,YACE,aAAa,0CAA0C,IACvD,aAAa,8CAA8C,IAC3D,aAAa,2CAA2C;AAAA,YACxD,aAAa,2CAA2C,IACxD,aAAa,+CAA+C,IAC5D,aAAa,4CAA4C;AAAA,YACzD,aAAa,4CAA4C,IACzD,aAAa,gDAAgD,IAC7D,aAAa,6CAA6C;AAAA,UAC5D;AAAA,UACA,CAAC,mDAAmD,oDAAoD,oDAAoD;AAAA,QAC9J;AACA,aAAK,gCAAgC,KAAK;AAAA,UACxC,KAAK;AAAA,UACL;AAAA,YACE,aAAa,sCAAsC,IACnD,aAAa,0CAA0C,IACvD,aAAa,uCAAuC;AAAA,YACpD,aAAa,uCAAuC,IACpD,aAAa,2CAA2C,IACxD,aAAa,wCAAwC;AAAA,YACrD,aAAa,wCAAwC,IACrD,aAAa,4CAA4C,IACzD,aAAa,yCAAyC;AAAA,UACxD;AAAA,UACA,CAAC,0CAA0C,2CAA2C,2CAA2C;AAAA,QACnI;AAAA,MACF,CAAC,EACA,MAAM,SAAO;AAAE,gBAAQ,IAAI,GAAG;AAAA,MAAG,CAAC;AAAA,IACvC;AAAA,IAEA,WAAW,QAAQ,MAAM,QAAQ;AAC/B,aAAO,IAAI;AAAA,QACT;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,YACJ;AAAA,YACA,UAAU;AAAA,cACR;AAAA,gBACE;AAAA,gBACA,aAAa;AAAA,cACf;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;;;AC1KA,eAAM,SAAS,MAAU;AAGzB,MAAO,qCAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,SAAS;AAAA,MACd,YAAY;AAAA,MACZ,eAAe;AAAA,IACjB;AAAA,IACA,OAAO,UAAU;AAAA,MACf;AAAA,MAAc;AAAA,MAAgB;AAAA,MAAY;AAAA,MAAc;AAAA,MACxD;AAAA,MAAkB;AAAA,MAAqB;AAAA,MAAc;AAAA,MACrD;AAAA,MAAoB;AAAA,MAA6B;AAAA,MACjD;AAAA,MAAkB;AAAA,IACpB;AAAA,IAEA,oBAAoBC,QAAO;AACzB,WAAK,kBAAkBA,OAAM,OAAO,YAAY;AAChD,UAAI,KAAK,uBAAuB;AAC9B,aAAK,mBAAmB,iBAAiB,aAAa,EAAE,QAAQ,aAAW,QAAQ,UAAU,OAAO,QAAQ,CAAC;AAAA,MAC/G;AACA,MAAAA,OAAM,OAAO,UAAU,IAAI,QAAQ;AACnC,WAAK,eAAe;AAAA,IACtB;AAAA,IAEA,6BAA6BA,QAAO;AAClC,WAAK,qBAAqBA,OAAM,OAAO,eAAe;AACtD,UAAI,KAAK,yBAAyB;AAChC,aAAK,qBAAqB,iBAAiB,6BAA6B,EAAE,QAAQ,aAAW,QAAQ,UAAU,OAAO,QAAQ,CAAC;AAAA,MACjI;AACA,MAAAA,OAAM,OAAO,UAAU,IAAI,QAAQ;AACnC,WAAK,eAAe;AAAA,IACtB;AAAA,IAEA,iBAAiB;AACf;AAAA,QAAM,+BAA+B,KAAK,kBAAkB,MAAM,KAAK;AAAA,QACjE,EAAE,QAAQ,OAAO,SAAS,EAAE,gBAAgB,iCAAgC,EAAE;AAAA,MAAC,EAClF,KAAK,cAAY,SAAS,KAAK,CAAC,EAChC,KAAK,kBAAgB;AACpB,YAAI,KAAK,QAAQ;AACf,eAAK,OAAO,QAAQ,WAAS;AAC3B,iBAAK,aAAa,OAAO,YAAY;AAAA,UACvC,CAAC;AAAA,QACH,OAAO;AACL,eAAK,SAAS,CAAC;AACf,eAAK,OAAO,KAAK,KAAK,gBAAgB,YAAY,CAAC;AACnD,eAAK,OAAO,KAAK,KAAK,kBAAkB,YAAY,CAAC;AACrD,eAAK,OAAO,KAAK,KAAK,cAAc,YAAY,CAAC;AACjD,eAAK,OAAO,KAAK,KAAK,gBAAgB,YAAY,CAAC;AACnD,eAAK,OAAO,KAAK,KAAK,cAAc,YAAY,CAAC;AACjD,eAAK,OAAO,KAAK,KAAK,oBAAoB,YAAY,CAAC;AACvD,eAAK,OAAO,KAAK,KAAK,uBAAuB,YAAY,CAAC;AAC1D,eAAK,OAAO,KAAK,KAAK,gBAAgB,YAAY,CAAC;AACnD,eAAK,OAAO,KAAK,KAAK,0BAA0B,YAAY,CAAC;AAC7D,eAAK,OAAO,KAAK,KAAK,sBAAsB,YAAY,CAAC;AACzD,eAAK,OAAO,KAAK,KAAK,+BAA+B,YAAY,CAAC;AAClE,eAAK,OAAO,KAAK,KAAK,sBAAsB,YAAY,CAAC;AAAA,QAC3D;AAAA,MACF,CAAC,EACA,MAAM,SAAO;AAAA,MAAC,CAAC;AAAA,IACpB;AAAA,IAEA,gBAAgB,MAAM;AACpB,aAAO,KAAK;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,UAAmB;AAAA,UAAoB;AAAA,QACzC;AAAA,QACA;AAAA,UACE;AAAA,UAAgB;AAAA,UAAoB;AAAA,QACtC;AAAA,QACA;AAAA,UACE;AAAA,UAAI;AAAA,UAAI;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,kBAAkB,MAAM;AACtB,aAAO,KAAK;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,UAAc;AAAA,UAAe;AAAA,UAAqB;AAAA,QACpD;AAAA,QACA;AAAA,UACE;AAAA,UAAc;AAAA,UAAe;AAAA,UAAqB;AAAA,QACpD;AAAA,QACA;AAAA,UACE;AAAA,UAAI;AAAA,UAAI;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,cAAc,MAAM;AAClB,aAAO,KAAK;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,UAAkB;AAAA,UAAkB;AAAA,QACtC;AAAA,QACA;AAAA,UACE;AAAA,UAAqB;AAAA,UAAqB;AAAA,QAC5C;AAAA,QACA;AAAA,UACE;AAAA,UAAI;AAAA,UAAI;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,gBAAgB,MAAM;AACpB,aAAO,KAAK;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,QACF;AAAA,QACA;AAAA,UACE;AAAA,QACF;AAAA,QACA;AAAA,UACE;AAAA,UAAI;AAAA,UAAI;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,cAAc,MAAM;AAClB,aAAO,KAAK;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,UAAoB;AAAA,QACtB;AAAA,QACA;AAAA,UACE;AAAA,UAAoB;AAAA,QACtB;AAAA,QACA;AAAA,UACE;AAAA,UAAI;AAAA,UAAI;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,oBAAoB,MAAM;AACxB,aAAO,KAAK;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,UAAyB;AAAA,UAAiB;AAAA,UAA6B;AAAA,QACzE;AAAA,QACA;AAAA,UACE;AAAA,UAAgB;AAAA,UAAiB;AAAA,UAA6B;AAAA,QAChE;AAAA,QACA;AAAA,UACE;AAAA,UAAI;AAAA,UAAI;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,uBAAuB,MAAM;AAC3B,aAAO,KAAK;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,UAAiB;AAAA,UAA0B;AAAA,QAC7C;AAAA,QACA;AAAA,UACE;AAAA,UAAiB;AAAA,UAA0B;AAAA,QAC7C;AAAA,QACA;AAAA,UACE;AAAA,UAAI;AAAA,UAAI;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,gBAAgB,MAAM;AACpB,aAAO,KAAK;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,UAAqB;AAAA,UAAuB;AAAA,QAC9C;AAAA,QACA;AAAA,UACE;AAAA,UAAqB;AAAA,UAAwB;AAAA,QAC/C;AAAA,QACA;AAAA,UACE;AAAA,UAAI;AAAA,UAAI;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,0BAA0B,MAAM;AAC9B,aAAO,KAAK;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,QACF;AAAA,QACA;AAAA,UACE;AAAA,QACF;AAAA,QACA;AAAA,UACE;AAAA,UAAI;AAAA,UAAI;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,sBAAsB,MAAM;AAC1B,aAAO,KAAK;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,QACF;AAAA,QACA;AAAA,UACE;AAAA,QACF;AAAA,QACA;AAAA,UACE;AAAA,UAAI;AAAA,UAAI;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,+BAA+B,MAAM;AACnC,aAAO,KAAK;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,UACE;AAAA,UAAI;AAAA,UAAI;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,sBAAsB,MAAM;AAC1B,aAAO,KAAK;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,UACE;AAAA,UAAI;AAAA,UAAI;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,aAAa,OAAO,MAAM;AACxB,YAAM,KAAK,SAAS,QAAQ,aAAW;AACrC,gBAAQ,OAAO;AAAA,MACjB,CAAC;AACD,YAAM,OAAO;AAAA,IACf;AAAA,IAEA,sBAAsB,QAAQ,MAAM,eAAe,SAAS;AAC1D,UAAI,WAAW,CAAC;AAChB,aAAO,QAAQ,CAAC,KAAKC,WAAU;AAC7B,iBAAS,KAAK;AAAA,UACZ,OAAO,OAAOA,MAAK;AAAA,UACnB;AAAA,UACA,SAAS;AAAA,YACP,UAAU;AAAA,YACV,UAAU,cAAcA,MAAK;AAAA,UAC/B;AAAA,UACA,aAAa,QAAQA,MAAK;AAAA,UAC1B,iBAAiB,QAAQA,MAAK;AAAA,UAC9B,QAAQ;AAAA,UACR,aAAa;AAAA,QACf,CAAC;AAAA,MACH,CAAC;AACD,aAAO;AAAA,IACT;AAAA,IAEA,WAAW,QAAQ,MAAM,QAAQ,eAAe,SAAS;AACvD,aAAO,IAAI;AAAA,QACT;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,QAAQ,KAAK,IAAI,SAAO,IAAI,KAAK,IAAI,YAAY,CAAC;AAAA,YAClD,UAAU,KAAK,sBAAsB,QAAQ,MAAM,eAAe,OAAO;AAAA,UAC3E;AAAA,UACA,SAAS;AAAA,YACP,QAAQ,KAAK;AAAA,YACb,WAAW;AAAA,YACX,SAAS;AAAA,YACT,aAAa;AAAA,cACX,MAAM;AAAA,cACN,MAAM;AAAA,cACN,WAAW;AAAA,YACb;AAAA,YACA,SAAS;AAAA,cACP,YAAY;AAAA,gBACV,SAAS;AAAA,gBACT,WAAW;AAAA,cACb;AAAA,cACA,MAAM;AAAA,gBACJ,KAAK;AAAA,kBACH,SAAS;AAAA,kBACT,MAAM;AAAA,kBACN,aAAa;AAAA,gBACf;AAAA,gBACA,MAAM;AAAA,kBACJ,MAAM;AAAA,oBACJ,SAAS;AAAA,kBACX;AAAA,kBACA,MAAM;AAAA,gBACR;AAAA,cACF;AAAA,YACF;AAAA,YACA,QAAQ;AAAA,cACN,GAAG;AAAA,gBACD,MAAM;AAAA,gBACN,OAAO;AAAA,kBACL,aAAa;AAAA,kBACb,UAAU;AAAA,kBACV,OAAO;AAAA,oBACL,SAAS;AAAA,kBACX;AAAA,kBACA,MAAM,SAAS,SAAS;AACtB,wBAAI,QAAQ,QAAQ,QAAQ,KAAK,OAAO;AACtC,6BAAO;AAAA,wBACL,QAAQ;AAAA,sBACV;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;;;AClXA,MAAO,wCAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,UAAU;AAAA,MACf;AAAA,MAAqC;AAAA,MACrC;AAAA,MAA6B;AAAA,MAC7B;AAAA,MAA+B;AAAA,MAC/B;AAAA,MAAiC;AAAA,IACnC;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IAEA,QAAQC,QAAO;AACb,UAAI,KAAK,4CAA4C;AACnD,aAAK,sCAAsC,QAAQA,OAAM,OAAO,aAAa;AAC7E,aAAK,wCAAwC,YAAYA,OAAM,OAAO,eAAe;AAAA,MACvF;AAAA,IACF;AAAA,IAEA,0BAA0B,QAAQ;AAChC,UAAI,KAAK,oCAAoC;AAC3C,aAAK,6CAA6C,YAAY,MAAM,OAAO,eAAe;AAE1F,cAAM,2BAA2B,MAAM,OAAO,aAAa,GAAG,EAAE,QAAQ,OAAO,SAAS,EAAE,gBAAgB,iCAAgC,EAAE,CAAC,EAC1I,KAAK,cAAY,SAAS,KAAK,CAAC,EAChC,KAAK,kBAAgB;AACpB,eAAK,gCAAgC,iBAAiB,IAAI,EAAE,QAAQ,aAAW,QAAQ,OAAO,CAAC;AAC/F,cAAI,SAAS;AACb,uBAAa,QAAQ,UAAQ;AAC3B,gBAAI,MAAM,KAAK,gCAAgC,UAAU,MAAM;AAC/D,gBAAI,WAAW,EAAE,YAAY,KAAK;AAClC,gBAAI,WAAW,EAAE,YAAY,KAAK;AAClC,gBAAI,WAAW,EAAE,YAAY,IAAI,KAAK,KAAK,OAAO,EAAE,eAAe;AACnE;AAAA,UACF,CAAC;AAAA,QACH,CAAC,EACA,MAAM,SAAO;AAAA,QAAC,CAAC;AAAA,MACpB;AAAA,IACF;AAAA,IAEA,wBAAwBA,QAAO;AAC7B,UAAI,KAAK,sCAAsC;AAC7C,aAAK,kCAAkC,YAAYA,OAAM,OAAO,eAAe;AAC/E,aAAK,oCAAoC,OAAO,6BAA6BA,OAAM,OAAO,aAAa;AAAA,MACzG;AAAA,IACF;AAAA,IAEA,iCAAiCA,QAAO;AACtC,UAAI,KAAK,4CAA4C;AACnD,aAAK,wCAAwC,YAAYA,OAAM,OAAO,eAAe;AACrF,aAAK,0CAA0C,OAAO,6BAA6BA,OAAM,OAAO,aAAa;AAAA,MAC/G;AAAA,IACF;AAAA,EACF;;;AClDA,eAAM,SAAS,MAAU;AAGzB,MAAO,oCAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,SAAS;AAAA,MACd,SAAS;AAAA,IACX;AAAA,IACA,OAAO,UAAU;AAAA,MACf;AAAA,MAA0B;AAAA,MAA4B;AAAA,MACtD;AAAA,MACA;AAAA,MAAyB;AAAA,MAA2B;AAAA,MACpD;AAAA,MAA+B;AAAA,MAC/B;AAAA,MAAwB;AAAA,MACxB;AAAA,MAAkC;AAAA,IACpC;AAAA,IAEA,UAAU;AACR,UAAI,KAAK,iBAAiB;AACxB;AAAA,UAAM,KAAK;AAAA,UACL,EAAE,QAAQ,OAAO,SAAS,EAAE,gBAAgB,iCAAgC,EAAE;AAAA,QAAC,EAClF,KAAK,cAAY,SAAS,KAAK,CAAC,EAChC,KAAK,kBAAgB;AACpB,eAAK,oBAAoB,KAAK,uBAAuB,YAAY;AACjE,eAAK,uBAAuB,KAAK,2BAA2B,YAAY;AACxE,eAAK,iBAAiB,KAAK,yBAAyB,YAAY;AAChE,eAAK,uBAAuB,KAAK,+BAA+B,YAAY;AAC5E,eAAK,wBAAwB,KAAK,4BAA4B,YAAY;AAC1E,eAAK,yBAAyB,KAAK,8BAA8B,YAAY;AAC7E,eAAK,+BAA+B,KAAK,6CAA6C,YAAY;AAClG,eAAK,6BAA6B,KAAK,kCAAkC,YAAY;AACrF,eAAK,mCAAmC,KAAK,iDAAiD,YAAY;AAC1G,eAAK,sBAAsB,KAAK,2BAA2B,YAAY;AACvE,eAAK,4BAA4B,KAAK,0CAA0C,YAAY;AAC5F,eAAK,gCAAgC,KAAK,qCAAqC,YAAY;AAC3F,eAAK,sCAAsC,KAAK,oDAAoD,YAAY;AAAA,QAClH,CAAC,EACA,MAAM,SAAO;AAAE,kBAAQ,IAAI,GAAG;AAAA,QAAE,CAAC;AAAA,MACtC;AAAA,IACF;AAAA,IAEA,uBAAuB,MAAM;AAC3B,aAAO,KAAK;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,UAAiB;AAAA,UAAkB;AAAA,QACrC;AAAA,QACA;AAAA,UACE;AAAA,UAAiB;AAAA,UAAkB;AAAA,QACrC;AAAA,QACA;AAAA,UACE;AAAA,UAAS;AAAA,UAAU;AAAA,QACrB;AAAA,MACF;AAAA,IACF;AAAA,IAEA,2BAA2B,MAAM;AAC/B,aAAO,KAAK;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,UAAwB;AAAA,UAAmB;AAAA,QAC7C;AAAA,QACA;AAAA,UACE;AAAA,UAAmB;AAAA,UAAmB;AAAA,QACxC;AAAA,QACA;AAAA,UACE;AAAA,UAAI;AAAA,UAAI;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,yBAAyB,MAAM;AAC7B,aAAO,KAAK;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,UAAkB;AAAA,UAAuB;AAAA,UACzC;AAAA,UAA8B;AAAA,UAA2B;AAAA,QAC3D;AAAA,QACA;AAAA,UACE;AAAA,UAAkB;AAAA,UAAuB;AAAA,UACzC;AAAA,UAA8B;AAAA,UAAuB;AAAA,QACvD;AAAA,QACA;AAAA,UACE;AAAA,UAAI;AAAA,UAAI;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,+BAA+B,MAAM;AACnC,aAAO,KAAK;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,UAAyB;AAAA,UAAkC;AAAA,UAC3D;AAAA,UAAmB;AAAA,UAA+D;AAAA,QACpF;AAAA,QACA;AAAA,UACE;AAAA,UAAyB;AAAA,UAA4B;AAAA,UACrD;AAAA,UAAmB;AAAA,UAAyC;AAAA,QAC9D;AAAA,QACA;AAAA,UACE;AAAA,UAAI;AAAA,UAAI;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,4BAA4B,MAAM;AAChC,aAAO,KAAK;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,UAAwB;AAAA,UAAuB;AAAA,UAAyB;AAAA,QAC1E;AAAA,QACA;AAAA,UACE;AAAA,UAA+B;AAAA,UAA8B;AAAA,UAAiC;AAAA,QAChG;AAAA,QACA;AAAA,UACE;AAAA,UAAI;AAAA,UAAI;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,8BAA8B,MAAM;AAClC,aAAO,KAAK;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,UAA0B;AAAA,QAC5B;AAAA,QACA;AAAA,UACE;AAAA,UAAiC;AAAA,QACnC;AAAA,QACA;AAAA,UACE;AAAA,UAAI;AAAA,UAAI;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,6CAA6C,MAAM;AACjD,aAAO,KAAK;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,UAA4C;AAAA,UAC5C;AAAA,QACF;AAAA,QACA;AAAA,UACE;AAAA,UAAgD;AAAA,UAChD;AAAA,QACF;AAAA,QACA;AAAA,UACE;AAAA,UAAI;AAAA,UAAI;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,kCAAkC,MAAM;AACtC,aAAO,KAAK;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,UAA+B;AAAA,QACjC;AAAA,QACA;AAAA,UACE;AAAA,UAAsC;AAAA,QACxC;AAAA,QACA;AAAA,UACE;AAAA,UAAI;AAAA,UAAI;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,iDAAiD,MAAM;AACrD,aAAO,KAAK;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,UAAiD;AAAA,UACjD;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,UACE;AAAA,UAAqD;AAAA,UACrD;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,UACE;AAAA,UAAI;AAAA,UAAI;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,2BAA2B,MAAM;AAC/B,aAAO,KAAK;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,UAAwB;AAAA,QAC1B;AAAA,QACA;AAAA,UACE;AAAA,UAA+B;AAAA,QACjC;AAAA,QACA;AAAA,UACE;AAAA,UAAI;AAAA,UAAI;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,0CAA0C,MAAM;AAC9C,aAAO,KAAK;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,UAA+C;AAAA,QACjD;AAAA,QACA;AAAA,UACE;AAAA,UAA8C;AAAA,QAChD;AAAA,QACA;AAAA,UACE;AAAA,UAAI;AAAA,UAAI;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,qCAAqC,MAAM;AACzC,aAAO,KAAK;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,UAAmC;AAAA,QACrC;AAAA,QACA;AAAA,UACE;AAAA,UAA0C;AAAA,QAC5C;AAAA,QACA;AAAA,UACE;AAAA,UAAI;AAAA,UAAI;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,oDAAoD,MAAM;AACxD,aAAO,KAAK;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,UACE;AAAA,UAAI;AAAA,UAAI;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,WAAW,QAAQ,MAAM,QAAQ,eAAe,SAAS;AACvD,UAAI,WAAW,CAAC;AAChB,aAAO,QAAQ,CAAC,KAAKC,WAAU;AAC7B,iBAAS,KAAK;AAAA,UACZ,OAAO,OAAOA,MAAK;AAAA,UACnB;AAAA,UACA,SAAS;AAAA,YACP,UAAU;AAAA,YACV,UAAU,cAAcA,MAAK;AAAA,UAC/B;AAAA,UACA,aAAa,QAAQA,MAAK;AAAA,UAC1B,iBAAiB,QAAQA,MAAK;AAAA,QAChC,CAAC;AAAA,MACH,CAAC;AACD,aAAO,IAAI;AAAA,QACT;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,QAAQ,KAAK,IAAI,SAAO,IAAI,KAAK,IAAI,OAAO,CAAC;AAAA,YAC7C;AAAA,UACF;AAAA,UACA,SAAS;AAAA,YACP,QAAQ,KAAK;AAAA,YACb,aAAa;AAAA,cACX,MAAM;AAAA,cACN,MAAM;AAAA,cACN,WAAW;AAAA,YACb;AAAA,YACA,QAAQ;AAAA,cACN,GAAG;AAAA,gBACD,MAAM;AAAA,gBACN,MAAM;AAAA,kBACJ,MAAM;AAAA,gBACR;AAAA,gBACA,OAAO;AAAA,kBACL,OAAO;AAAA,oBACL,SAAS;AAAA,kBACX;AAAA,kBACA,MAAM,SAAS,SAAS;AACtB,wBAAI,QAAQ,QAAQ,QAAQ,KAAK,OAAO;AACtC,6BAAO;AAAA,wBACL,QAAQ;AAAA,sBACV;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;;;AC/TA,eAAM,SAAS,MAAU;AAGzB,MAAO,kCAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,SAAS;AAAA,MACd,eAAe;AAAA,MACf,wBAAwB;AAAA,MACxB,sBAAsB;AAAA,MACtB,kBAAkB;AAAA,IACpB;AAAA,IACA,OAAO,UAAU;AAAA,MACf;AAAA,MAAmB;AAAA,IACrB;AAAA,IAEA,6BAA6BC,QAAO;AAClC,eAAS,iBAAiB,6BAA6B,EAAE,QAAQ,aAAW,QAAQ,UAAU,OAAO,QAAQ,CAAC;AAC9G,MAAAA,OAAM,OAAO,UAAU,IAAI,QAAQ;AACnC,WAAK,8BAA8BA,OAAM,OAAO,wBAAwB;AACxE,WAAK,qBAAqBA,OAAM,OAAO,eAAe;AACtD,WAAK,aAAa;AAAA,IACpB;AAAA,IAEA,iCAAiC;AAC/B,WAAK,aAAa;AAAA,IACpB;AAAA,IAEA,iBAAiB;AACf,UAAI,CAAC,KAAK,iBAAiB;AACzB;AAAA,MACF;AACA,WAAK,gBAAgB,UAAU;AAAA,IACjC;AAAA,IAEA,eAAe;AACb;AAAA,QAAM,KAAK;AAAA,QACL,EAAE,QAAQ,OAAO,SAAS,EAAE,gBAAgB,iCAAgC,EAAE;AAAA,MAAC,EAClF,KAAK,cAAY,SAAS,KAAK,CAAC,EAChC,KAAK,kBAAgB;AACpB,YAAI,CAAC,cAAc;AACjB,cAAI,MAAM,SAAS,cAAc,KAAK;AACtC,cAAI,KAAK,SAAS,cAAc,IAAI;AACpC,cAAI,UAAU,IAAI,aAAa;AAC/B,aAAG,YAAY,KAAK;AACpB,cAAI,YAAY,EAAE;AAClB,eAAK,4BAA4B,YAAY,GAAG;AAChD,eAAK,gBAAgB,QAAQ;AAC7B,eAAK,kBAAkB;AACvB;AAAA,QACF;AACA,YAAI,KAAK,iBAAiB;AACxB,eAAK,iBAAiB,KAAK,iBAAiB,YAAY;AAAA,QAC1D,OAAO;AACL,eAAK,kBAAkB,KAAK;AAAA,YAC1B,KAAK;AAAA,YACL,KAAK;AAAA,YACL,CAAC,KAAK,yBAAyB;AAAA,YAC/B;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC,EACA,MAAM,SAAO;AAAA,MAAE,CAAC;AAAA,IACrB;AAAA,IAEA,iBAAiB,OAAO,MAAM;AAC5B,UAAI,YAAY,IAAI,KAAK,KAAK,IAAI,IAAK,KAAK,qBAAqB,KAAK,GAAK;AAC3E,YAAM,KAAK,SAAS,CAAC,EAAE,OAAO;AAC9B,YAAM,KAAK,SAAS,KAAK,IAAI,SAAO,IAAI,KAAK,IAAI,OAAO,CAAC;AACzD,YAAM,QAAQ,OAAO,EAAE,MAAM;AAC7B,YAAM,OAAO;AAAA,IACf;AAAA,IAEA,WAAW,QAAQ,QAAQ,QAAQ,YAAY,kBAAkB,yBAAyB;AACxF,aAAO,WAAW,QAAQ,WAAS;AACjC,YAAI,MAAM,YAAY,UAAU;AAC9B,iBAAO,YAAY,KAAK;AAAA,QAC1B;AAAA,MACF,CAAC;AACD,aAAO,KAAK,eAAe,QAAQ,YAAY,QAAQ,kBAAkB,uBAAuB;AAAA,IAClG;AAAA,IAEA,eAAe,QAAQ,MAAM,QAAQ,kBAAkB,yBAAyB;AAC9E,UAAI,YAAY,IAAI,KAAK,KAAK,IAAI,IAAK,KAAK,qBAAqB,KAAK,GAAK;AAC3E,aAAO,IAAI;AAAA,QACT;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,QAAQ,KAAK,IAAI,SAAO,IAAI,KAAK,IAAI,SAAS,CAAC;AAAA,YAC/C,UAAU;AAAA,cACR;AAAA,gBACE,OAAO,OAAO,CAAC;AAAA,gBACf;AAAA,gBACA,SAAS;AAAA,kBACP,UAAU;AAAA,kBACV,UAAU;AAAA,gBACZ;AAAA,gBACA,UAAU;AAAA,gBACV,aAAa;AAAA,gBACb,iBAAiB;AAAA,gBACjB,SAAS;AAAA,cACX;AAAA,YACF;AAAA,UACF;AAAA,UACA,SAAS;AAAA,YACP,QAAQ,KAAK;AAAA,YACb,QAAQ;AAAA,cACN,GAAG;AAAA,gBACD,KAAK;AAAA,gBACL,KAAK,oBAAI,KAAK;AAAA,gBACd,MAAM;AAAA,gBACN,OAAO;AAAA,kBACL,aAAa;AAAA,kBACb,UAAU;AAAA,kBACV,OAAO;AAAA,oBACL,SAAS;AAAA,kBACX;AAAA,kBACA,MAAM,SAAS,SAAS;AACtB,wBAAI,QAAQ,QAAQ,QAAQ,KAAK,OAAO;AACtC,6BAAO;AAAA,wBACL,QAAQ;AAAA,sBACV;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,cACA,GAAG;AAAA,gBACD,KAAK;AAAA,gBACL,KAAK;AAAA,cACP;AAAA,YACF;AAAA,YACA,aAAa;AAAA,cACX,MAAM;AAAA,cACN,MAAM;AAAA,cACN,WAAW;AAAA,YACb;AAAA,YACA,SAAS;AAAA,cACP,MAAM;AAAA,gBACJ,KAAK;AAAA,kBACH,SAAS;AAAA,kBACT,MAAM;AAAA,kBACN,aAAa;AAAA,gBACf;AAAA,gBACA,MAAM;AAAA,kBACJ,MAAM;AAAA,oBACJ,SAAS;AAAA,kBACX;AAAA,kBACA,MAAM;AAAA,gBACR;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;;;AC5JA,eAAM,SAAS,MAAU;AAGzB,MAAO,qCAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,SAAS;AAAA,MACd,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,oBAAoB;AAAA,MACpB,kBAAkB;AAAA,MAClB,sBAAsB;AAAA,MACtB,8BAA8B;AAAA,IAChC;AAAA,IACA,OAAO,UAAU;AAAA,MACf;AAAA,MAA2B;AAAA,MAC3B;AAAA,MAAiC;AAAA,MACjC;AAAA,MAAsC;AAAA,MACtC;AAAA,MAAkB;AAAA,IACpB;AAAA,IAEA,6BAA6BC,QAAO;AAClC,WAAK,qBAAqBA,OAAM,OAAO,eAAe;AACtD,WAAK,qBAAqB,iBAAiB,6BAA6B,EAAE,QAAQ,aAAW,QAAQ,UAAU,OAAO,QAAQ,CAAC;AAC/H,MAAAA,OAAM,OAAO,UAAU,IAAI,QAAQ;AACnC,WAAK,qBAAqBA,OAAM,OAAO,eAAe;AACtD,WAAK,iBAAiB;AACtB,WAAK,qBAAqB;AAAA,IAC5B;AAAA,IAEA,mCAAmCA,QAAO;AACxC,WAAK,2BAA2B,iBAAiB,6BAA6B,EAAE,QAAQ,aAAW,QAAQ,UAAU,OAAO,QAAQ,CAAC;AACrI,MAAAA,OAAM,OAAO,UAAU,IAAI,QAAQ;AACnC,WAAK,sBAAsBA,OAAM,OAAO,gBAAgB;AACxD,WAAK,iBAAiB;AACtB,WAAK,qBAAqB;AAAA,IAC5B;AAAA,IAEA,yCAAyC;AACvC,WAAK,iBAAiB;AAAA,IACxB;AAAA,IAEA,6CAA6C;AAC3C,WAAK,qBAAqB;AAAA,IAC5B;AAAA,IAEA,qBAAqB;AACnB,UAAI,CAAC,KAAK,WAAW;AACnB;AAAA,MACF;AACA,WAAK,UAAU,UAAU;AAAA,IAC3B;AAAA,IAEA,yBAAyB;AACvB,UAAI,CAAC,KAAK,eAAe;AACvB;AAAA,MACF;AACA,WAAK,cAAc,UAAU;AAAA,IAC/B;AAAA,IAEA,mBAAmB;AACjB;AAAA,QAAM,+CAA+C,KAAK,kBAAkB,MAAM,KAAK,qBAAqB,MAAM,KAAK;AAAA,QACjH,EAAE,QAAQ,OAAO,SAAS,EAAE,gBAAgB,iCAAgC,EAAE;AAAA,MAAC,EAClF,KAAK,cAAY,SAAS,KAAK,CAAC,EAChC,KAAK,kBAAgB;AACpB,YAAI,CAAC,cAAc;AACjB,eAAK,oCAAoC,iBAAiB,KAAK,EAAE,QAAQ,aAAW;AAClF,iBAAK,oCAAoC,YAAY,OAAO;AAAA,UAC9D,CAAC;AACD,cAAI,MAAM,SAAS,cAAc,KAAK;AACtC,cAAI,KAAK,SAAS,cAAc,IAAI;AACpC,cAAI,UAAU,IAAI,aAAa;AAC/B,aAAG,YAAY,KAAK;AACpB,cAAI,YAAY,EAAE;AAClB,eAAK,yCAAyC,UAAU,IAAI,QAAQ;AACpE,eAAK,oCAAoC,QAAQ,GAAG;AACpD,cAAI,KAAK,WAAW;AAClB,iBAAK,UAAU,QAAQ;AACvB,iBAAK,YAAY;AAAA,UACnB;AACA;AAAA,QACF;AACA,aAAK,yCAAyC,UAAU,OAAO,QAAQ;AACvE,YAAI,KAAK,WAAW;AAClB,eAAK,iBAAiB,KAAK,WAAW,YAAY;AAAA,QACpD,OAAO;AACL,eAAK,YAAY,KAAK;AAAA,YACpB,KAAK;AAAA,YACL,KAAK;AAAA,YACL,CAAC,KAAK,qBAAqB,KAAK,iCAAiC;AAAA,YACjE;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC,EACA,MAAM,SAAO;AAAA,MAAE,CAAC;AAAA,IACrB;AAAA,IAEA,uBAAuB;AACrB;AAAA,QAAM,mDAAmD,KAAK,kBAAkB,MAAM,KAAK,qBAAqB,MAAM,KAAK;AAAA,QACrH,EAAE,QAAQ,OAAO,SAAS,EAAE,gBAAgB,iCAAgC,EAAE;AAAA,MAAC,EAClF,KAAK,cAAY,SAAS,KAAK,CAAC,EAChC,KAAK,kBAAgB;AACpB,YAAI,CAAC,cAAc;AACjB,eAAK,wCAAwC,iBAAiB,KAAK,EAAE,QAAQ,aAAW;AACtF,iBAAK,wCAAwC,YAAY,OAAO;AAAA,UAClE,CAAC;AACD,cAAI,MAAM,SAAS,cAAc,KAAK;AACtC,cAAI,KAAK,SAAS,cAAc,IAAI;AACpC,cAAI,UAAU,IAAI,aAAa;AAC/B,aAAG,YAAY,KAAK;AACpB,cAAI,YAAY,EAAE;AAClB,eAAK,6CAA6C,UAAU,IAAI,QAAQ;AACxE,eAAK,wCAAwC,QAAQ,GAAG;AACxD,cAAI,KAAK,eAAe;AACtB,iBAAK,cAAc,QAAQ;AAC3B,iBAAK,gBAAgB;AAAA,UACvB;AACA;AAAA,QACF;AACA,aAAK,6CAA6C,UAAU,OAAO,QAAQ;AAC3E,YAAI,KAAK,eAAe;AACtB,eAAK,iBAAiB,KAAK,eAAe,YAAY;AAAA,QACxD,OAAO;AACL,eAAK,gBAAgB,KAAK;AAAA,YACxB,KAAK;AAAA,YACL,KAAK;AAAA,YACL,CAAC,KAAK,yBAAyB,KAAK,iCAAiC;AAAA,YACrE;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC,EACA,MAAM,SAAO;AAAA,MAAE,CAAC;AAAA,IACrB;AAAA,IAEA,iBAAiB,OAAO,MAAM;AAC5B,UAAI,YAAY,IAAI,KAAK,KAAK,IAAI,IAAK,KAAK,qBAAqB,KAAK,GAAK;AAC3E,YAAM,KAAK,SAAS,CAAC,EAAE,OAAO;AAC9B,YAAM,KAAK,SAAS,KAAK,IAAI,SAAO,IAAI,KAAK,IAAI,SAAS,CAAC;AAC3D,YAAM,KAAK,SAAS,CAAC,EAAE,OAAO,CAAC,EAAE,WAAW,WAAW,QAAQ,MAAM,GAAG,EAAE,WAAW,oBAAI,KAAK,GAAG,QAAQ,MAAK,CAAC;AAC/G,YAAM,QAAQ,OAAO,EAAE,MAAM;AAC7B,YAAM,OAAO;AAAA,IACf;AAAA,IAEA,WAAW,QAAQ,QAAQ,QAAQ,YAAY,kBAAkB,yBAAyB;AACxF,aAAO,iBAAiB,KAAK,EAAE,QAAQ,aAAW;AAChD,eAAO,YAAY,OAAO;AAAA,MAC5B,CAAC;AACD,aAAO,KAAK,eAAe,QAAQ,YAAY,QAAQ,kBAAkB,uBAAuB;AAAA,IAClG;AAAA,IAEA,eAAe,QAAQ,MAAM,QAAQ,kBAAkB,yBAAyB;AAC9E,UAAI,YAAY,IAAI,KAAK,KAAK,IAAI,IAAK,KAAK,qBAAqB,KAAK,GAAK;AAC3E,UAAI,sBAAsB,CAAC,EAAE,WAAW,WAAW,QAAQ,MAAM,GAAG,EAAE,WAAW,oBAAI,KAAK,GAAG,QAAQ,MAAK,CAAC;AAC3G,aAAO,IAAI;AAAA,QACT;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,QAAQ,KAAK,IAAI,SAAO,IAAI,KAAK,IAAI,SAAS,CAAC;AAAA,YAC/C,UAAU;AAAA,cACR;AAAA,gBACE,OAAO,OAAO,CAAC;AAAA,gBACf;AAAA,gBACA,SAAS;AAAA,kBACP,UAAU;AAAA,kBACV,UAAU;AAAA,gBACZ;AAAA,gBACA,UAAU;AAAA,gBACV,aAAa;AAAA,gBACb,iBAAiB;AAAA,gBACjB,SAAS;AAAA,gBACT,QAAQ;AAAA,gBACR,aAAa;AAAA,cACf;AAAA,cACA;AAAA,gBACE,OAAO,OAAO,CAAC;AAAA,gBACf,MAAM;AAAA,gBACN,SAAS;AAAA,kBACP,UAAU;AAAA,kBACV,UAAU;AAAA,gBACZ;AAAA,gBACA,YAAY;AAAA,gBACZ,gBAAgB;AAAA,gBAChB,kBAAkB;AAAA,gBAClB,aAAa;AAAA,gBACb,YAAY,CAAC,IAAG,CAAC;AAAA,gBACjB,aAAa;AAAA,gBACb,UAAU;AAAA,gBACV,aAAa;AAAA,gBACb,iBAAiB;AAAA,cACnB;AAAA,YACF;AAAA,UACF;AAAA,UACA,SAAS;AAAA,YACP,QAAQ,KAAK;AAAA,YACb,WAAW;AAAA,YACX,SAAS;AAAA,YACT,QAAQ;AAAA,cACN,GAAG;AAAA,gBACD,KAAK;AAAA,gBACL,KAAK,oBAAI,KAAK;AAAA,gBACd,MAAM;AAAA,gBACN,OAAO;AAAA,kBACL,aAAa;AAAA,kBACb,UAAU;AAAA,kBACV,OAAO;AAAA,oBACL,SAAS;AAAA,kBACX;AAAA,kBACA,MAAM,SAAS,SAAS;AACtB,wBAAI,QAAQ,QAAQ,QAAQ,KAAK,OAAO;AACtC,6BAAO;AAAA,wBACL,QAAQ;AAAA,sBACV;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,cACA,GAAG;AAAA,gBACD,KAAK;AAAA,gBACL,KAAK;AAAA,cACP;AAAA,YACF;AAAA,YACA,aAAa;AAAA,cACX,MAAM;AAAA,cACN,MAAM;AAAA,cACN,WAAW;AAAA,YACb;AAAA,YACA,SAAS;AAAA,cACP,MAAM;AAAA,gBACJ,KAAK;AAAA,kBACH,SAAS;AAAA,kBACT,MAAM;AAAA,kBACN,aAAa;AAAA,gBACf;AAAA,gBACA,MAAM;AAAA,kBACJ,MAAM;AAAA,oBACJ,SAAS;AAAA,kBACX;AAAA,kBACA,MAAM;AAAA,gBACR;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;;;AC1PA,MAAO,2BAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MAAmB;AAAA,MACnB;AAAA,MAA0B;AAAA,MAA4B;AAAA,IACxD;AAAA,IAEA,4BAA4BC,QAAO;AACjC,WAAK,4BAA4B,aAAa,QAAQA,OAAM,OAAO,YAAY,CAAC;AAChF,UAAI,CAAC,KAAK,iBAAiB;AACzB,aAAK,kBAAkB,IAAc,MAAM,KAAK,uBAAuB,EAAE,UAAU,MAAM,CAAC;AAAA,MAC5F;AACA,UAAI,KAAK,iBAAiB;AACxB,aAAK,gBAAgB,KAAK;AAAA,MAC5B;AAAA,IACF;AAAA,IAEA,mBAAmBA,QAAO;AACxB,eAAS,iBAAiB,kBAAkB,EAAE,QAAQ,aAAW,QAAQ,UAAU,OAAO,QAAQ,CAAC;AAAA,IACrG;AAAA,IAEA,SAASA,QAAO;AACd,YAAM,MAAMA,OAAM,OAAO,MAAM,CAAC;AAAA,IAClC;AAAA,IAEA,YAAYA,QAAO;AACjB,UAAI,KAAK,qBAAqB;AAC5B,YAAI,aAAaA,OAAM,OAAO;AAC9B,YAAI,cAAc,IAAI;AACpB,gBAAM,KAAK,KAAK,iBAAiB,iBAAiB,YAAY,CAAC,EAAE,OAAO,SAAO;AAC7E,gBAAI,UAAU,OAAO,QAAQ;AAAA,UAC/B,CAAC;AACD;AAAA,QACF;AACA,cAAM,KAAK,KAAK,iBAAiB,iBAAiB,YAAY,CAAC,EAAE,OAAO,SAAO;AAC7E,cAAI,aAAa;AACjB,cAAI,iBAAiB,IAAI,EAAE,QAAQ,eAAa;AAC9C,gBAAI,CAAC,cAAc,UAAU,UAAU,YAAY,EAAE,QAAQ,WAAW,YAAY,CAAC,KAAK,GAAG;AAC3F,2BAAa;AAAA,YACf;AAAA,UACF,CAAC;AACD,cAAI,YAAY;AACd,gBAAI,UAAU,OAAO,QAAQ;AAAA,UAC/B,OAAO;AACL,gBAAI,UAAU,IAAI,QAAQ;AAAA,UAC5B;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IAEA,gCAAgCA,QAAO;AACrC,UAAI,KAAK,iCAAiC;AACxC,aAAK,6BAA6B,QAAQA,OAAM,OAAO,aAAa;AAAA,MACtE;AACA,UAAI,KAAK,mCAAmC;AAC1C,aAAK,+BAA+B,QAAQA,OAAM,OAAO,iBAAiB;AAAA,MAC5E;AACA,UAAI,KAAK,qCAAqC;AAC5C,aAAK,iCAAiC,QAAQA,OAAM,OAAO,aAAa;AAAA,MAC1E;AAAA,IACF;AAAA,EACF;;;AC9DA,MAAO,sCAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,UAAU,CAAC,aAAa;AAAA;AAAA;AAAA,IAI/B,OAAO,SAAS,EAAE,eAAe,OAAO;AAAA,IAExC,mBAAmBC,QAAO;AACxB,WAAK,sBAAsBA,OAAM,cAAc,KAAK;AAAA,IACtD;AAAA,IAEA,sBAAsB,mBAAmB;AACvC,YAAM,SAAS,KAAK;AACpB,YAAM,WAAW,OAAO;AACxB,YAAM,UAAU,KAAK,mBAAmB,iBAAiB,KAAK,CAAC;AAE/D,aAAO,YAAY;AACnB,aAAO,IAAI,IAAI,OAAO,KAAK,EAAE,CAAC;AAC9B,cAAQ,QAAQ,CAAAC,WAAS;AACvB,cAAM,SAAS,IAAI,OAAOA,QAAOA,MAAK;AACtC,YAAI,OAAOA,MAAK,MAAM,UAAU;AAAE,iBAAO,WAAW;AAAA,QAAK;AACzD,eAAO,IAAI,MAAM;AAAA,MACnB,CAAC;AAED,aAAO,WAAW,QAAQ,SAAS;AAAA,IACrC;AAAA,EACF;;;AC5BA,+BAAO;AAGP,MAAO,mCAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,SAAS;AAAA,MACd,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,kBAAkB;AAAA,IACpB;AAAA,IACA,OAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IAEA,UAAU;AACR,WAAK,qBAAqB;AAC1B,WAAK,wBAAwB;AAC7B,WAAK,qBAAqB;AAAA,IAC5B;AAAA,IAEA,uBAAuB;AACrB,UAAI,CAAC,KAAK,wBAAyB;AACnC,WAAK,qBAAqB,QAAQ,KAAK,eAAe,EAAE,gBAAgB,EAAE;AAAA,IAC5E;AAAA,IAEA,0BAA0B;AACxB,WAAK,eAAe,QAAQ,WAAS;AACnC,cAAM,MAAM,MAAM,QAAQ;AAC1B,YAAI,IAAK,OAAM,QAAQ,KAAK,YAAY,IAAI,KAAK,GAAG,CAAC;AAAA,MACvD,CAAC;AAAA,IACH;AAAA,IAEA,YAAY,MAAM;AAChB,YAAM,MAAM,CAAC,WAAW,OAAO,MAAM,EAAE,SAAS,GAAG,GAAG;AACtD,aAAO,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,IACrE,IAAI,KAAK,SAAS,CAAC,CAAC,IAAI,IAAI,KAAK,WAAW,CAAC,CAAC;AAAA,IAC1D;AAAA,IAEA,uBAAuB;AACrB,WAAK,eAAe,QAAQ,WAAS;AACnC,UAAE,KAAK,EAAE,gBAAgB,KAAK,uBAAuB,CAAC;AACtD,UAAE,KAAK,EAAE,GAAG,yBAAyB,SAAS,IAAI,QAAQ;AACxD,YAAE,IAAI,EAAE,IAAI,OAAO,QAAQ,OAAO,kBAAkB,CAAC;AAAA,QACvD,CAAC;AACD,UAAE,KAAK,EAAE,GAAG,0BAA0B,WAAW;AAC/C,YAAE,IAAI,EAAE,IAAI,EAAE;AAAA,QAChB,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAAA,IAEA,yBAAyB;AACvB,aAAO;AAAA,QACL,mBAAmB;AAAA,QACnB,oBAAoB;AAAA,QACpB,cAAc;AAAA,QACd,oBAAoB;AAAA,QACpB,uBAAuB;AAAA,QACvB,UAAU;AAAA,UACR,UAAU;AAAA,UACV,aAAa;AAAA,UACb,cAAc,KAAK,mBAAmB,OAAO;AAAA,UAC7C,eAAe,KAAK,mBAAmB,QAAQ;AAAA,UAC/C,oBAAoB,KAAK,mBAAmB,QAAQ;AAAA,UACpD,aAAa;AAAA,UACb,cAAc,KAAK;AAAA,UACnB,cAAc,KAAK;AAAA,UACnB,YAAY;AAAA,QACd;AAAA,QACA,mBAAmB;AAAA,QACnB,SAAS;AAAA,QACT,WAAW;AAAA,QACX,uBAAuB;AAAA,MACzB;AAAA,IACF;AAAA,IAEA,IAAI,iBAAiB;AACnB,aAAO;AAAA,QACL,KAAK,kCAAkC,KAAK;AAAA,QAC5C,KAAK,mCAAmC,KAAK;AAAA,MAC/C,EAAE,OAAO,OAAO;AAAA,IAClB;AAAA,IAEA,0BAA0B;AACxB,YAAM,QAAQ,KAAK;AACnB,YAAM,OAAO,MAAM,SAAS,aAAa,SAAS;AAClD,YAAM,OAAO;AAEb,YAAM,OAAO,KAAK;AAClB,UAAI,SAAS,YAAY;AACvB,aAAK,UAAU,OAAO,QAAQ;AAC9B,aAAK,UAAU,IAAI,cAAc;AAAA,MACnC,OAAO;AACL,aAAK,UAAU,OAAO,cAAc;AACpC,aAAK,UAAU,IAAI,QAAQ;AAAA,MAC7B;AAAA,IACF;AAAA,IAEA,wBAAwB;AACtB,YAAM,WAAW,KAAK,qBAAqB,MAAM,KAAK,EAAE,SAAS;AACjE,YAAM,aAAa,KAAK;AAExB,iBAAW,UAAU,OAAO,eAAe,QAAQ;AACnD,iBAAW,UAAU,OAAO,aAAa,CAAC,QAAQ;AAElD,UAAI,UAAU;AACZ,mBAAW,gBAAgB,UAAU;AAAA,MACvC,OAAO;AACL,mBAAW,aAAa,YAAY,UAAU;AAAA,MAChD;AAAA,IACF;AAAA,IAEA,cAAc,EAAE,QAAQ,EAAE,IAAI,MAAM,IAAI,EAAE,GAAG;AAC3C,WAAK,sBAAsB,cAAc;AACzC,WAAK,wBAAwB,cAAc;AAC3C,WAAK,YAAY;AAAA,IACnB;AAAA,IAEA,gBAAgB;AACd,UAAI,KAAK,UAAW,QAAO,SAAS,OAAO,KAAK;AAAA,IAClD;AAAA,IAEA,mBAAmBC,QAAO;AACxB,UAAI,aAAaA,OAAM,OAAO,MAAM,YAAY,EAAE,KAAK;AACvD,YAAM,QAAQ,KAAK;AACnB,YAAMC,QAAO,MAAM,KAAK,MAAM,iBAAiB,YAAY,CAAC;AAE5D,UAAI,cAAc,IAAI;AACpB,QAAAA,MAAK,QAAQ,SAAO,IAAI,UAAU,OAAO,QAAQ,CAAC;AAClD;AAAA,MACF;AAEA,MAAAA,MAAK,QAAQ,SAAO;AAClB,cAAM,YAAY,MAAM,KAAK,IAAI,iBAAiB,IAAI,CAAC,EACpD,IAAI,QAAM,GAAG,YAAY,YAAY,CAAC,EACtC,KAAK,GAAG;AACX,YAAI,UAAU,SAAS,UAAU,GAAG;AAClC,cAAI,UAAU,OAAO,QAAQ;AAAA,QAC/B,OAAO;AACL,cAAI,UAAU,IAAI,QAAQ;AAAA,QAC5B;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;;;ACpJA,MAAO,0CAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,UAAU;AAAA,MACf;AAAA,IACF;AAAA,IAEA,UAAU;AAAA,IACV;AAAA,IAEA,0BAA0BC,QAAO;AAC/B,WAAK,0BAA0B,QAAQ,CAAC,uBAAuB;AAE7D,YAAI,uBAAuBA,OAAM,QAAO;AACtC,6BAAmB,UAAU;AAAA,QAC/B;AAAA,MAEF,CAAC;AAAA,IACH;AAAA,EACF;;;ACjBA,MAAO,8BAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,SAAS;AAAA,MACd,iBAAiB;AAAA,IACnB;AAAA,IACA,OAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IAEA,wBAAwB;AAAA,IACxB,mBAAmB;AAAA,IACnB,cAAc;AAAA,IACd,uBAAuB;AAAA,IAEvB,UAAU;AACR,WAAK,cAAc;AAAA,IACrB;AAAA,IAEA,qBAAqBC,QAAO;AAC1B,UAAGA,OAAM,OAAO,SAAS;AACvB,aAAK,wBAAwB,UAAU,IAAI,MAAM;AACjD,aAAK,4BAA4B;AAAA,MAEnC,OAAO;AACL,aAAK,wBAAwB,UAAU,OAAO,MAAM;AACpD,aAAK,2BAA2B;AAAA,MAClC;AAAA,IACF;AAAA,IAEA,8BAA8B;AAG5B,iBAAW,MAAM;AACf,aAAK,gCAAgC,QAAS,WAAS;AACrD,gBAAM,WAAW;AAAA,QACnB,CAAC;AAAA,MACH,GAAG,GAAG;AAAA,IACR;AAAA,IAEA,6BAA4B;AAC1B,WAAK,gCAAgC,QAAS,WAAS;AACrD,cAAM,WAAW;AAAA,MACnB,CAAC;AAAA,IACH;AAAA,IAEA,SAASA,QAAO;AAEd,UAAI,UAAU,KAAK,0BAA0B,KAAK,wBAAsB,mBAAmB,OAAO;AAClG,UAAI,CAAC,SAAS;AACZ,QAAAA,OAAM,eAAe;AACrB,aAAK,8BAA8B,UAAU,OAAO,QAAQ;AAC5D,aAAK,8BAA8B,eAAe,EAAE,UAAU,UAAU,OAAO,SAAS,CAAC;AAAA,MAC3F,OAAO;AACL,aAAK,8BAA8B,UAAU,IAAI,QAAQ;AAAA,MAC3D;AAGA,UAAI,KAAK,aAAa;AACpB,QAAAA,OAAM,eAAe;AACrB,aAAK,wBAAwB,UAAU,OAAO,QAAQ;AACtD,aAAK,wBAAwB,eAAe,EAAE,UAAU,UAAU,OAAO,SAAS,CAAC;AAAA,MACrF,OAAO;AACL,aAAK,wBAAwB,UAAU,IAAI,QAAQ;AAAA,MACrD;AAAA,IACF;AAAA,IAEA,oBAAoBA,QAAO;AACzB,UAAI,gBAAgB;AAEpB,YAAM,WAAW;AACjB,YAAM,gBAAgBA,OAAM;AAE5B,UAAI,QAAQ,cAAc;AAG1B,cAAQ,MAAM,QAAQ,UAAU,EAAE;AAGlC,UAAI,MAAM,SAAS,GAAG;AACpB,gBAAQ,MAAM,MAAM,GAAG,CAAC;AACxB,wBAAgB;AAAA,MAClB;AACA,UAAI,cAAc,SAAS,OAAO,EAAE;AAGpC,UAAI,MAAM,WAAW,GAAG;AACtB,sBAAc;AAAA,MAChB;AACA,UAAI,cAAc,UAAU;AAC1B,sBAAc;AACd,wBAAgB;AAAA,MAClB;AACA,UAAI,cAAc,GAAE;AAClB,sBAAc;AACd,wBAAgB;AAAA,MAClB;AACA,oBAAc,QAAQ;AAEtB,WAAK,cAAc;AACnB,UAAI,cAAe,MAAK,WAAW;AAAA,IACrC;AAAA,IAEA,aAAa;AACX,UAAI,OAAO,KAAK,kBAAkB;AAClC,UAAI,CAAC,KAAM;AAEX,WAAK,cAAc;AAEnB,WAAK,oBAAoB,QAAQ,WAAS;AACxC,cAAM,eAAe,MAAM,QAAQ;AACnC,cAAM,mBAAmB,KAAK,KAAK,UAAQ,KAAK,QAAQ,YAAY;AACpE,yBAAiB,WAAW,MAAM;AAElC,cAAM,YAAY,SAAS,iBAAiB,QAAQ,GAAG;AACvD,YAAI,WAAW,GAAG;AAChB,eAAK,cAAc;AAAA,QACrB;AAAA,MACF,CAAC;AACD,WAAK,iBAAiB,IAAI;AAC1B,WAAK,qBAAqB;AAAA,IAC5B;AAAA,IAEA,eAAeA,QAAO;AACpB,YAAM,mBAAmBA,OAAM,OAAO;AACtC,UAAI;AACJ,UAAI,OAAO;AACX,UAAI,KAAK,2BAA2B,KAAK,qBAAqB,SAAS,IAAI;AACzE,sBAAc,KAAK,qBAAqB;AAAA,MAC1C,OAAO;AACL,sBAAc,KAAK,sBAAsB;AAAA,MAC3C;AAEA,UAAI,qBAAqB,wBAAwB;AAC/C,aAAK,wBAAwB;AAAA,MAC/B,WAAW,qBAAqB,uBAAuB;AACrD,aAAK,wBAAwB;AAAA,MAC/B;AACA,UAAI,KAAK,yBAAyB,IAAI;AACpC;AAAA,MACF;AACA,UAAI,SAAS,KAAK,qBAAqB,KAAM,QAAM,GAAG,QAAQ,KAAK,KAAK,yBAAyB,GAAG,cAAc,KAAK,WAAW;AAClI,aAAO,OAAO,MAAM;AAEpB,WAAK,mBAAmB,cACtB,IAAI,OAAO,KAAK,eAAe,SAAS,EAAE,OAAO,YAAY,UAAU,MAAM,CAAC,CAAC;AACjF,WAAK,cAAc;AACnB,WAAK,qBAAqB,WAAW;AAAA,IACvC;AAAA,IAEA,gBAAgB;AACd,UAAI,QAAQ;AAEZ,WAAK,oBAAoB,QAAQ,UAAQ;AAEvC,cAAM,WAAW,KAAK;AACtB,YAAI,CAAC,UAAU;AACb;AAAA,QACF;AAEA,cAAM,QAAQ,KAAK,KAAK,MAAM,IAAI;AAClC,cAAM,WAAW,MAAM,CAAC,EAAE,QAAQ,KAAK,EAAE;AACzC,cAAM,kBAAkB,KAAK,QAAQ;AACrC,YAAI,CAAC,iBAAiB;AACpB;AAAA,QACF;AAEA,YAAI,WAAW,WAAW,KAAK,QAAQ,WAAW,EAAE;AACpD,cAAM,YAAY,WAAW;AAC7B,iBAAS;AAET,cAAM,gBAAgB,KAAK,gBAAgB,KAAK,OAAK,EAAE,GAAG,WAAW,QAAQ,CAAC;AAC9E,YAAI,CAAC,eAAe;AAClB;AAAA,QACF;AACA,sBAAc,cAAc,UAAU,eAAe,SAAS;AAAA,UAC5D,OAAO;AAAA,UACP,UAAU;AAAA,UACV,uBAAuB;AAAA,QACzB,CAAC;AAAA,MACH,CAAC;AAED,YAAM,WAAW;AACjB,WAAK,mBAAmB,cAAc,SAAS,eAAe,SAAS;AAAA,QACrE,OAAO;AAAA,QACP,UAAU;AAAA,QACV,uBAAuB;AAAA,QACvB,uBAAuB;AAAA,MACzB,CAAC;AAED,YAAM,eAAe,WAAW,KAAK,mBAAmB,YAAY,KAAK,EAAE,QAAQ,KAAK,EAAE,CAAC;AAC3F,UAAI,cAAa;AACf,iBAAS;AAAA,MACX;AAEA,YAAM,gBAAgB,KAAK,QAAQ,QAAQ;AAC3C,YAAM,MAAM,QAAQ;AACpB,WAAK,cAAc,cAAc,IAAI,eAAe,SAAS;AAAA,QAC3D,OAAO;AAAA,QACP,UAAU;AAAA,QACV,uBAAuB;AAAA,QACvB,uBAAuB;AAAA,MACzB,CAAC;AAED,eAAS;AACT,WAAK,gBAAgB,cAAc,MAAM,eAAe,SAAS;AAAA,QAC/D,OAAO;AAAA,QACP,UAAU;AAAA,QACV,uBAAuB;AAAA,QACvB,uBAAuB;AAAA,MACzB,CAAC;AAAA,IACH;AAAA,IAEA,aAAaA,QAAO;AAClB,UAAI,OAAO,KAAK,kBAAkB;AAClC,UAAI,CAAC,KAAM;AAEX,YAAM,eAAeA,OAAM,cAAc,QAAQ;AACjD,aAAO,KAAK,OAAO,UAAQ,KAAK,SAAS,YAAY;AACrD,WAAK,iBAAiB,IAAI;AAE1B,YAAM,YAAYA,OAAM,cAAc,QAAQ;AAC9C,YAAM,cAAc,KAAK,uBAAuB,KAAK,SAAO,IAAI,OAAO,GAAG,SAAS,MAAM;AACzF,kBAAY,OAAO;AACnB,WAAK,cAAc;AACnB,WAAK,qBAAqB;AAC1B,MAAAA,OAAM,eAAe;AAAA,IACvB;AAAA,IAEA,sBAAsB,WAAW;AAC/B,eAAS,UAAU,MAAM,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI;AAAA,IAC5C;AAAA,IAEA,oBAAoB;AAClB,YAAM,UAAU,SAAS,OAAO,MAAM,IAAI;AAC1C,eAAS,UAAU,SAAS;AACxB,cAAM,CAAC,KAAK,KAAK,IAAI,OAAO,MAAM,GAAG;AACrC,YAAI,QAAQ,KAAK,kBAAkB;AACjC,gBAAM,kBAAkB,MAAM,QAAQ,OAAO,GAAG;AAChD,gBAAM,WAAW,KAAK,MAAM,mBAAmB,eAAe,CAAC;AAC/D,iBAAO;AAAA,QACT;AAAA,MACJ;AACA,aAAO;AAAA,IACT;AAAA,IAEA,iBAAiB,MAAM;AACrB,UAAI,KAAK,SAAS,GAAG;AACnB,cAAM,WAAW,KAAK,UAAU,IAAI;AACpC,cAAM,cAAc,mBAAmB,QAAQ;AAC/C,cAAM,aAAa,oBAAI,KAAK;AAC5B,mBAAW,QAAQ,WAAW,QAAQ,IAAI,CAAC;AAC3C,iBAAS,SAAS,GAAG,KAAK,gBAAgB,IAAI,WAAW,aAAa,WAAW,YAAY,CAAC;AAAA,MAChG,OAAO;AAEL,iBAAS,SAAS,GAAG,KAAK,gBAAgB;AAC1C,iBAAS,OAAO;AAAA,MAClB;AAAA,IACF;AAAA,IAEA,iBAAiBA,QAAO;AACtB,UAAIA,OAAM,QAAQ,SAAS;AACzB,QAAAA,OAAM,eAAe;AAAA,MACvB;AAAA,IACF;AAAA,IAEA,uBAAuB;AACrB,UAAI,KAAK,qBAAsB;AAE/B,YAAM,UAAU,KAAK;AACrB,WAAK,uBAAuB;AAG5B,cAAQ,UAAU,OAAO,WAAW;AACpC,cAAQ,UAAU,IAAI,MAAM;AAG5B,iBAAW,MAAM;AACf,gBAAQ,UAAU,OAAO,MAAM;AAC/B,gBAAQ,UAAU,IAAI,WAAW;AAEjC,mBAAW,MAAM;AACf,eAAK,uBAAuB;AAAA,QAC9B,GAAG,GAAG;AAAA,MACR,GAAG,GAAI;AAAA,IACT;AAAA,EACF;;;AC9SA,MAAO,mCAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,UAAU;AAAA,MACf;AAAA,MAAgB;AAAA,MAAkB;AAAA,MAAiB;AAAA,IACrD;AAAA,IAEA,UAAU;AAAA,IACV;AAAA,IAEA,mBAAmB;AACjB,UAAI,KAAK,uBAAuB;AAC9B,aAAK,mBAAmB,UAAU,OAAO,QAAQ;AACjD,aAAK,qBAAqB,UAAU,IAAI,QAAQ;AAAA,MAClD;AAAA,IACF;AAAA,IAEA,kBAAkBC,QAAO;AACvB,MAAAA,OAAM,OAAO,UAAU,IAAI,QAAQ;AACnC,UAAI,UAAUA,OAAM,OAAO,SAAS;AACpC,eAAS,eAAe,mBAAmB,OAAO,EAAE,UAAU,OAAO,QAAQ;AAAA,IAC/E;AAAA,IAEA,mBAAmBA,QAAO;AACxB,MAAAA,OAAM,OAAO,UAAU,IAAI,UAAU;AACrC,UAAI,UAAUA,OAAM,OAAO,SAAS;AACpC,UAAI,WAAWA,OAAM,OAAO,UAAU;AACtC,eAAS,eAAe,oBAAoB,UAAU,MAAM,QAAQ,EAAE,UAAU,OAAO,QAAQ;AAAA,IACjG;AAAA,IAEA,mBAAmBA,QAAO;AACxB,UAAI,UAAUA,OAAM,OAAO,SAAS;AACpC,UAAI,WAAWA,OAAM,OAAO,UAAU;AACtC,eAAS,eAAe,sBAAsB,UAAU,MAAM,QAAQ,EAAE,UAAU,OAAO,UAAU;AACnG,eAAS,eAAe,oBAAoB,UAAU,MAAM,QAAQ,EAAE,UAAU,IAAI,QAAQ;AAAA,IAC9F;AAAA,IAEA,kBAAkBA,QAAO;AACvB,MAAAA,OAAM,OAAO,UAAU,IAAI,UAAU;AACrC,UAAI,UAAUA,OAAM,OAAO,SAAS;AACpC,eAAS,eAAe,mBAAmB,OAAO,EAAE,UAAU,OAAO,QAAQ;AAAA,IAC/E;AAAA,IAEA,kBAAkBA,QAAO;AACvB,UAAI,UAAUA,OAAM,OAAO,SAAS;AACpC,eAAS,eAAe,qBAAqB,OAAO,EAAE,UAAU,OAAO,UAAU;AACjF,eAAS,eAAe,mBAAmB,OAAO,EAAE,UAAU,IAAI,QAAQ;AAAA,IAC5E;AAAA,EACF;;;AC9CA,MAAO,iCAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,UAAU,CAAC,YAAY,WAAW;AAAA,IACzC,OAAO,SAAS;AAAA,MACd,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,IACrB;AAAA,IAEA,UAAU;AACR,WAAK,eAAe,iBAAiB,YAAY,CAACC,OAAM;AACtD,QAAAA,GAAE,eAAe;AACjB,aAAK,eAAe,UAAU,IAAI,UAAU;AAAA,MAC9C,CAAC;AAED,WAAK,eAAe,iBAAiB,aAAa,MAAM;AACtD,aAAK,eAAe,UAAU,OAAO,UAAU;AAAA,MACjD,CAAC;AAED,WAAK,eAAe,iBAAiB,QAAQ,CAACA,OAAM;AAClD,QAAAA,GAAE,eAAe;AACjB,cAAM,OAAOA,GAAE,aAAa,MAAM,CAAC;AAGnC,YAAI,MAAM;AACR,cAAI,CAAC,KAAK,gBAAgB,IAAI,GAAG;AAC/B;AAAA,UACF;AAEA,eAAK,gBAAgB,QAAQA,GAAE,aAAa;AAC5C,eAAK,eAAe,cAAc,KAAK;AAAA,QACzC;AAAA,MACF,CAAC;AAGD,WAAK,eAAe,iBAAiB,SAAS,MAAM;AAClD,aAAK,gBAAgB,MAAM;AAAA,MAC7B,CAAC;AAGD,WAAK,gBAAgB,iBAAiB,UAAU,CAACA,OAAM;AACrD,cAAM,OAAOA,GAAE,OAAO,MAAM,CAAC;AAC7B,YAAI,MAAM;AACR,cAAI,CAAC,KAAK,gBAAgB,IAAI,GAAG;AAC/B;AAAA,UACF;AACA,eAAK,eAAe,cAAc,KAAK;AAAA,QACzC;AAAA,MACF,CAAC;AAAA,IACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,OAAOC,QAAO;AACZ,UAAI,KAAK,gBAAgB,MAAM,SAAS,GAAG;AACzC;AAAA,MACF;AAEA,MAAAA,OAAM,eAAe;AACrB,WAAK,iBAAiB,iCAAiC;AAAA,IACzD;AAAA,IAEA,iBAAiB,SAAS;AACxB,YAAM,sBAAsB,SAAS,cAAc,gBAAgB;AACnE,UAAI,qBAAqB;AACvB,4BAAoB,cAAc;AAClC,4BAAoB,UAAU,IAAI,WAAW,SAAS,cAAc;AAGpE,mBAAW,MAAM;AACf,8BAAoB,cAAc;AAClC,8BAAoB,UAAU,OAAO,WAAW,SAAS,cAAc;AAAA,QACzE,GAAG,GAAI;AAAA,MACT;AAAA,IACF;AAAA,IAEA,gBAAgB,MAAM;AACpB,UAAI,KAAK,0BAA0B,KAAK,SAAS,IAAI;AACnD,cAAM,MAAM,KAAK,KAAK,MAAM,GAAG,EAAE,IAAI,EAAE,YAAY;AACnD,YAAI,OAAO,SAAS,OAAO,OAAO;AAChC,eAAK,iBAAiB,iCAAiC;AACvD,iBAAO;AAAA,QACT;AAAA,MACF,WAAW,CAAC,KAAK,sBAAsB,SAAS,KAAK,IAAI,GAAG;AAC1D,aAAK,iBAAiB,6BAA6B;AACnD,aAAK,eAAe,UAAU,OAAO,UAAU;AAC/C,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAAA,EACF;;;AC1FA,eAAM,SAAS,MAAU;AAGzB,MAAO,8BAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,SAAS;AAAA,MACd,eAAe;AAAA,MACf,kBAAkB;AAAA,MAClB,sBAAsB;AAAA,MACtB,gBAAgB;AAAA,MAChB,oBAAoB;AAAA,MACpB,kBAAkB;AAAA,MAClB,sBAAsB;AAAA,MACtB,8BAA8B;AAAA,IAChC;AAAA,IACA,OAAO,UAAU;AAAA,MACf;AAAA,MAA2B;AAAA,MAC3B;AAAA,MAAiC;AAAA,MACjC;AAAA,MAAsC;AAAA,IACxC;AAAA,IAEA,6BAA6BC,QAAO;AAClC,eAAS,iBAAiB,6BAA6B,EAAE,QAAQ,aAAW,QAAQ,UAAU,OAAO,QAAQ,CAAC;AAC9G,MAAAA,OAAM,OAAO,UAAU,IAAI,QAAQ;AACnC,WAAK,wBAAwBA,OAAM,OAAO,kBAAkB;AAC5D,WAAK,4BAA4BA,OAAM,OAAO,sBAAsB;AACpE,WAAK,qBAAqBA,OAAM,OAAO,eAAe;AACtD,WAAK,iBAAiB;AACtB,WAAK,qBAAqB;AAAA,IAC5B;AAAA,IAEA,yCAAyC;AACvC,WAAK,iBAAiB;AAAA,IACxB;AAAA,IAEA,6CAA6C;AAC3C,WAAK,qBAAqB;AAAA,IAC5B;AAAA,IAEA,qBAAqB;AACnB,UAAI,CAAC,KAAK,WAAW;AACnB;AAAA,MACF;AACA,WAAK,UAAU,UAAU;AAAA,IAC3B;AAAA,IAEA,yBAAyB;AACvB,UAAI,CAAC,KAAK,eAAe;AACvB;AAAA,MACF;AACA,WAAK,cAAc,UAAU;AAAA,IAC/B;AAAA,IAEA,mBAAmB;AACjB;AAAA,QAAM,KAAK;AAAA,QACL,EAAE,QAAQ,OAAO,SAAS,EAAE,gBAAgB,iCAAgC,EAAE;AAAA,MAAC,EAClF,KAAK,cAAY,SAAS,KAAK,CAAC,EAChC,KAAK,kBAAgB;AACpB,YAAI,CAAC,cAAc;AACjB,eAAK,oCAAoC,iBAAiB,KAAK,EAAE,QAAQ,aAAW;AAClF,iBAAK,oCAAoC,YAAY,OAAO;AAAA,UAC9D,CAAC;AACD,cAAI,MAAM,SAAS,cAAc,KAAK;AACtC,cAAI,KAAK,SAAS,cAAc,IAAI;AACpC,cAAI,UAAU,IAAI,aAAa;AAC/B,aAAG,YAAY,KAAK;AACpB,cAAI,YAAY,EAAE;AAClB,eAAK,yCAAyC,UAAU,IAAI,QAAQ;AACpE,eAAK,oCAAoC,QAAQ,GAAG;AACpD,cAAI,KAAK,WAAW;AAClB,iBAAK,UAAU,QAAQ;AACvB,iBAAK,YAAY;AAAA,UACnB;AACA;AAAA,QACF;AACA,aAAK,yCAAyC,UAAU,OAAO,QAAQ;AACvE,YAAI,KAAK,WAAW;AAClB,eAAK,iBAAiB,KAAK,WAAW,YAAY;AAAA,QACpD,OAAO;AACL,eAAK,YAAY,KAAK;AAAA,YACpB,KAAK;AAAA,YACL,KAAK;AAAA,YACL,CAAC,KAAK,qBAAqB,KAAK,iCAAiC;AAAA,YACjE;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC,EACA,MAAM,SAAO;AAAA,MAAE,CAAC;AAAA,IACrB;AAAA,IAEA,uBAAuB;AACrB;AAAA,QAAM,KAAK;AAAA,QACL,EAAE,QAAQ,OAAO,SAAS,EAAE,gBAAgB,iCAAgC,EAAE;AAAA,MAAC,EAClF,KAAK,cAAY,SAAS,KAAK,CAAC,EAChC,KAAK,kBAAgB;AACpB,YAAI,CAAC,cAAc;AACjB,eAAK,wCAAwC,iBAAiB,KAAK,EAAE,QAAQ,aAAW;AACtF,iBAAK,wCAAwC,YAAY,OAAO;AAAA,UAClE,CAAC;AACD,cAAI,MAAM,SAAS,cAAc,KAAK;AACtC,cAAI,KAAK,SAAS,cAAc,IAAI;AACpC,cAAI,UAAU,IAAI,aAAa;AAC/B,aAAG,YAAY,KAAK;AACpB,cAAI,YAAY,EAAE;AAClB,eAAK,6CAA6C,UAAU,IAAI,QAAQ;AACxE,eAAK,wCAAwC,QAAQ,GAAG;AACxD,cAAI,KAAK,eAAe;AACtB,iBAAK,cAAc,QAAQ;AAC3B,iBAAK,gBAAgB;AAAA,UACvB;AACA;AAAA,QACF;AACA,aAAK,6CAA6C,UAAU,OAAO,QAAQ;AAC3E,YAAI,KAAK,eAAe;AACtB,eAAK,iBAAiB,KAAK,eAAe,YAAY;AAAA,QACxD,OAAO;AACL,eAAK,gBAAgB,KAAK;AAAA,YACxB,KAAK;AAAA,YACL,KAAK;AAAA,YACL,CAAC,KAAK,yBAAyB,KAAK,iCAAiC;AAAA,YACrE;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC,EACA,MAAM,SAAO;AAAA,MAAE,CAAC;AAAA,IACrB;AAAA,IAEA,iBAAiB,OAAO,MAAM;AAC5B,UAAI,YAAY,IAAI,KAAK,KAAK,IAAI,IAAK,KAAK,qBAAqB,KAAK,GAAK;AAC3E,YAAM,KAAK,SAAS,CAAC,EAAE,OAAO;AAC9B,YAAM,KAAK,SAAS,KAAK,IAAI,SAAO,IAAI,KAAK,IAAI,SAAS,CAAC;AAC3D,YAAM,KAAK,SAAS,CAAC,EAAE,OAAO,CAAC,EAAE,WAAW,WAAW,QAAQ,MAAM,GAAG,EAAE,WAAW,oBAAI,KAAK,GAAG,QAAQ,MAAK,CAAC;AAC/G,YAAM,QAAQ,OAAO,EAAE,MAAM;AAC7B,YAAM,OAAO;AAAA,IACf;AAAA,IAEA,WAAW,QAAQ,QAAQ,QAAQ,YAAY,kBAAkB,yBAAyB;AACxF,aAAO,iBAAiB,KAAK,EAAE,QAAQ,aAAW;AAChD,eAAO,YAAY,OAAO;AAAA,MAC5B,CAAC;AACD,aAAO,KAAK,eAAe,QAAQ,YAAY,QAAQ,kBAAkB,uBAAuB;AAAA,IAClG;AAAA,IAEA,eAAe,QAAQ,MAAM,QAAQ,kBAAkB,yBAAyB;AAC9E,UAAI,YAAY,IAAI,KAAK,KAAK,IAAI,IAAK,KAAK,qBAAqB,KAAK,GAAK;AAC3E,UAAI,sBAAsB,CAAC,EAAE,WAAW,WAAW,QAAQ,MAAM,GAAG,EAAE,WAAW,oBAAI,KAAK,GAAG,QAAQ,MAAK,CAAC;AAC3G,aAAO,IAAI;AAAA,QACT;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,QAAQ,KAAK,IAAI,SAAO,IAAI,KAAK,IAAI,SAAS,CAAC;AAAA,YAC/C,UAAU;AAAA,cACR;AAAA,gBACE,OAAO,OAAO,CAAC;AAAA,gBACf;AAAA,gBACA,SAAS;AAAA,kBACP,UAAU;AAAA,kBACV,UAAU;AAAA,gBACZ;AAAA,gBACA,UAAU;AAAA,gBACV,aAAa;AAAA,gBACb,iBAAiB;AAAA,gBACjB,SAAS;AAAA,gBACT,QAAQ;AAAA,gBACR,aAAa;AAAA,cACf;AAAA,cACA;AAAA,gBACE,OAAO,OAAO,CAAC;AAAA,gBACf,MAAM;AAAA,gBACN,SAAS;AAAA,kBACP,UAAU;AAAA,kBACV,UAAU;AAAA,gBACZ;AAAA,gBACA,YAAY;AAAA,gBACZ,gBAAgB;AAAA,gBAChB,kBAAkB;AAAA,gBAClB,aAAa;AAAA,gBACb,YAAY,CAAC,IAAG,CAAC;AAAA,gBACjB,aAAa;AAAA,gBACb,UAAU;AAAA,gBACV,aAAa;AAAA,gBACb,iBAAiB;AAAA,cACnB;AAAA,YACF;AAAA,UACF;AAAA,UACA,SAAS;AAAA,YACP,QAAQ,KAAK;AAAA,YACb,WAAW;AAAA,YACX,SAAS;AAAA,YACT,QAAQ;AAAA,cACN,GAAG;AAAA,gBACD,KAAK;AAAA,gBACL,KAAK,oBAAI,KAAK;AAAA,gBACd,MAAM;AAAA,gBACN,OAAO;AAAA,kBACL,aAAa;AAAA,kBACb,UAAU;AAAA,kBACV,OAAO;AAAA,oBACL,SAAS;AAAA,kBACX;AAAA,kBACA,MAAM,SAAS,SAAS;AACtB,wBAAI,QAAQ,QAAQ,QAAQ,KAAK,OAAO;AACtC,6BAAO;AAAA,wBACL,QAAQ;AAAA,sBACV;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,cACA,GAAG;AAAA,gBACD,KAAK;AAAA,gBACL,KAAK;AAAA,cACP;AAAA,YACF;AAAA,YACA,aAAa;AAAA,cACX,MAAM;AAAA,cACN,MAAM;AAAA,cACN,WAAW;AAAA,YACb;AAAA,YACA,SAAS;AAAA,cACP,MAAM;AAAA,gBACJ,KAAK;AAAA,kBACH,SAAS;AAAA,kBACT,MAAM;AAAA,kBACN,aAAa;AAAA,gBACf;AAAA,gBACA,MAAM;AAAA,kBACJ,MAAM;AAAA,oBACJ,SAAS;AAAA,kBACX;AAAA,kBACA,MAAM;AAAA,gBACR;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;;;AC9OA,MAAM,oBAAoB;AAG1B,MAAO,sCAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,SAAS;AAAA,MACd,aAAa;AAAA,IACf;AAAA,IACA,OAAO,UAAU,CAAE,cAAe;AAAA,IAElC,iBAAiBC,QAAO;AACtB,WAAK,aAAaA,OAAM,OAAO;AAC/B,UAAI,mBAAmB,KAAK,WAAW,KAAK,KAAK,yBAAyB;AAC1E,WAAK,uBAAuB,gBAAgB;AAAA,IAC9C;AAAA,IAEA,cAAcA,QAAO;AACnB,WAAK,sBAAsBA,OAAM,MAAM;AAAA,IACzC;AAAA,IAEA,MAAM,oBAAoBA,QAAO;AAC/B,MAAAA,OAAM,eAAe;AACrB,UAAI,QAAQ,SAAS,cAAc,eAAe,EAAE;AACpD,YAAM,KAAK,kBAAkB,KAAK;AAClC,aAAO;AAAA,IACT;AAAA;AAAA;AAAA,IAIA,IAAI,eAAe;AACjB,aAAO,KAAK,oBAAoB,sBAAsB,UAAU;AAAA,IAClE;AAAA,IAEA,gBAAgBA,QAAO;AACrB,WAAK,SAAS,qBAAqB,EAAE,QAAQ,EAAE,IAAIA,OAAM,OAAO,WAAW,EAAE,GAAG,QAAQ,KAAK,mBAAmB,CAAC;AAAA,IACnH;AAAA,IAEA,uBAAuB,YAAY;AACjC,UAAI,SAAS,eAAe,WAAW,GAAG;AACxC,iBAAS,eAAe,OAAO,EAAE,YAAY,SAAS,eAAe,WAAW,CAAC;AAAA,MACnF;AACA,UAAI,WAAW,UAAU,GAAG;AAC1B,YAAI,SAAS,cAAc,oBAAoB,GAAG;AAChD,mBAAS,cAAc,oBAAoB,EAAE,UAAU,OAAO,QAAQ;AAAA,QACxE;AACA;AAAA,MACF,OAAO;AACL,YAAI,SAAS,cAAc,oBAAoB,GAAG;AAChD,mBAAS,cAAc,oBAAoB,EAAE,UAAU,IAAI,QAAQ;AAAA,QACrE;AAAA,MACF;AACA,UAAI,iBAAiB,SAAS,cAAc,IAAI;AAChD,qBAAe,aAAa,SAAS,YAAY;AACjD,qBAAe,aAAa,MAAM,WAAW;AAC7C,eAAS,eAAe,OAAO,EAAE,YAAY,cAAc;AAC3D,iBAAW,QAAQ,SAAS,WAAW;AACrC,YAAI,yBAAyB,SAAS,cAAc,IAAI;AACxD,+BAAuB,aAAa,SAAS,OAAO;AACpD,YAAI,qBAAqB,SAAS,cAAc,KAAK;AACrD,2BAAmB,aAAa,MAAM,eAAe,UAAU,YAAY,EAAE,IAAI,CAAC;AAClF,2BAAmB,aAAa,eAAe,yCAAyC;AACxF,2BAAmB,aAAa,yCAAyC,UAAU,YAAY,EAAE,IAAI,CAAC;AACtG,2BAAmB,aAAa,SAAS,OAAO;AAChD,YAAI,mBAAmB;AACvB,YAAI,UAAU,YAAY,EAAE,eAAe,MAAM,KAAK,UAAU,YAAY,EAAE,MAAM,MAAM,QAAQ,UAAU,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG;AACpJ,8BAAoB;AACpB,8BAAoB,4BAA4B,UAAU,YAAY,EAAE,MAAM,IAAI;AAClF,8BAAoB;AACpB,8BAAoB;AAAA,QACtB,OAAO;AACL,8BAAoB;AAAA,QACtB;AACA,4BAAoB,wBAAwB,UAAU,YAAY,EAAE,cAAc,IAAI;AACtF,4BAAoB,0BAA0B,UAAU,YAAY,EAAE,MAAM,IAAI,MAAM,UAAU,YAAY,EAAE,OAAO,IAAI;AACzH,YAAI,UAAU,YAAY,EAAE,OAAO,MAAM,QAAQ,UAAU,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,GAAG;AACpG,8BAAoB,+BAA+B,UAAU,YAAY,EAAE,OAAO,IAAI;AAAA,QACxF;AACA,YAAI,UAAU,YAAY,EAAE,OAAO,MAAM,QAAQ,UAAU,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,GAAG;AACpG,8BAAoB,+BAA+B,UAAU,YAAY,EAAE,OAAO,IAAI;AAAA,QACxF;AACA,YAAI,UAAU,YAAY,EAAE,SAAS,MAAM,QAAQ,UAAU,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG;AACxG,8BAAoB,oDAAoD,UAAU,YAAY,EAAE,SAAS,IAAI,OAAO,UAAU,YAAY,EAAE,SAAS,IAAI;AAAA,QAC3J;AACA,2BAAmB,YAAY;AAC/B,+BAAuB,YAAY,kBAAkB;AACrD,iBAAS,eAAe,WAAW,EAAE,YAAY,sBAAsB;AAAA,MACzE,CAAC;AAAA,IACH;AAAA,IAEA,MAAM,kBAAkB,aAAa;AACnC,UAAI,SAAS,MAAM,KAAK,UAAU,WAAW;AAC7C,UAAI,CAAC,OAAQ;AACb,UAAIC,YAAW,EAAE,KAAK,WAAW,OAAO,GAAG,GAAG,KAAK,WAAW,OAAO,GAAG,EAAE;AAC1E,WAAK,SAAS,oBAAoB,EAAE,QAAQA,WAAU,QAAQ,KAAK,mBAAmB,CAAC;AAAA,IACzF;AAAA;AAAA;AAAA,IAIA,MAAM,UAAU,OAAO;AACrB,UAAI,WAAW,MAAM,KAAK,QAAQ,OAAO,KAAK,YAAY;AAC1D,UAAI,YAAY,MAAM,KAAK,QAAQ,KAAK;AACxC,UAAI,CAAC,SAAU,QAAO;AACtB,UAAI,CAAC,UAAW,QAAO;AACvB,aAAO,KAAK,WAAW,QAAQ,KAAK,KAAK,WAAW,SAAS,IAAI,oBAAoB,WAAW;AAAA,IAClG;AAAA;AAAA;AAAA;AAAA,IAKA,MAAM,QAAQ,OAAO,cAAc;AACjC,UAAI,MAAM,sEAAsE,mBAAmB,KAAK;AACxG,UAAI,aAAc,QAAO,mBAAmB;AAC5C,UAAI,WAAW,MAAM,MAAM,GAAG;AAC9B,UAAI,UAAU,MAAM,SAAS,KAAK;AAClC,aAAO,QAAQ,WAAW,IAAI,OAAO,QAAQ,CAAC;AAAA,IAChD;AAAA,IAEA,WAAW,QAAQ;AACjB,aAAO,WAAW,OAAO,UAAU,KAAK;AAAA,IAC1C;AAAA,IAEA,sBAAsB,QAAQ;AAC5B,UAAI,oBAAoB,KAAK,WAAW,OAAO,eAAa;AAC1D,YAAI,CAAC,KAAK,GAAG,IAAI,UAAU,UAAU,EAAE,aAAa;AACpD,eAAO,OAAO,OAAO,SAAS,OAAO,OAAO,SAAS,OAAO,OAAO,QAAQ,OAAO,OAAO;AAAA,MAC3F,CAAC;AACD,UAAI,mBAAmB,kBAAkB,KAAK,KAAK,yBAAyB;AAC5E,WAAK,uBAAuB,gBAAgB;AAAA,IAC9C;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,0BAA0BC,IAAGC,IAAG;AAC9B,UAAID,GAAE,YAAY,EAAE,aAAa,IAAIC,GAAE,YAAY,EAAE,aAAa,GAAG;AACnE,eAAO;AAAA,MACT,WAAWD,GAAE,YAAY,EAAE,aAAa,IAAIC,GAAE,YAAY,EAAE,aAAa,GAAG;AAC1E,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAAA,EACF;;;AClJA,MAAO,sCAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,UAAU;AAAA,MACf;AAAA,MAAU;AAAA,MAAc;AAAA,MACxB;AAAA,MAAe;AAAA,MAAS;AAAA,MACxB;AAAA,MAAuB;AAAA,MAAc;AAAA,MAAoB;AAAA,MACzD;AAAA,IACF;AAAA,IAEA,+BAA+B;AAC7B,WAAK,gBAAgB,UAAU,OAAO,QAAQ;AAC9C,WAAK,iBAAiB,UAAU,IAAI,QAAQ;AAAA,IAC9C;AAAA,IAEA,gCAAgC;AAC9B,WAAK,gBAAgB,UAAU,IAAI,QAAQ;AAC3C,WAAK,iBAAiB,UAAU,OAAO,QAAQ;AAAA,IACjD;AAAA,EACF;;;AChBA,MAAO,4BAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,UAAU,CAAE,oBAAqB;AAAA,IAExC,UAAU;AACN,WAAK,0BAA0B;AAC/B,WAAK,mBAAmB;AACxB,WAAK,cAAc;AAAA,IACvB;AAAA,IAEA,4BAA4B;AAE1B,UAAG,SAAS;AAAA,QACV;AAAA,MACF,GAAE;AACA,YAAI,YAAY,SAAS,iBAAiB,WAAW;AACrD,kBAAU,QAAQ,aAAW;AAAE,kBAAQ,MAAM,UAAU;AAAA,QAAQ,CAAC;AAChE,YAAI,QAAQ,SAAS,iBAAiB,SAAS;AAC/C,cAAM,QAAQ,aAAW;AAAE,kBAAQ,UAAU,OAAO,QAAQ;AAAA,QAAE,CAAC;AAC/D,iBAAS;AAAA,UACP;AAAA,QACF,EAAE,QAAQ,aAAW,QAAQ,MAAM,QAAQ,EAAE;AAE7C,YAAI,SAAS;AACb,YAAI,SAAS,SAAS;AAAA,UACpB;AAAA,QACF;AACA,eAAO,QAAQ,aAAW;AACxB,cAAI,SAAS,QAAQ;AACrB,cAAI,OAAO,MAAM,IAAI,OAAO,MAAM,GAAG;AACnC,qBAAS;AAAA,UACX;AAAA,QACF,CAAC;AAED,iBAAS;AAAA,UACP;AAAA,QACF,EAAE,QAAQ,aAAW,QAAQ,MAAM,QAAQ,SAAS,IAAI;AACxD,iBAAS;AAAA,UACP;AAAA,QACF,EAAE,QAAQ,aAAW,QAAQ,MAAM,UAAU,OAAO;AACpD,iBAAS;AAAA,UACP;AAAA,QACF,EAAE,QAAQ,aAAW,QAAQ,MAAM,YAAY,OAAO;AACtD,kBAAU,QAAQ,aAAW;AAAE,kBAAQ,MAAM,UAAU;AAAA,QAAG,CAAC;AAC3D,cAAM,QAAQ,aAAW;AAAE,kBAAQ,UAAU,IAAI,QAAQ;AAAA,QAAE,CAAC;AAAA,MAC9D;AAGA,UAAG,SAAS,cAAc,yDAAyD,GAAE;AAEjF,YAAI,SAAS,SAAS,iBAAiB,QAAQ;AAE/C,eAAO,QAAQ,WAAS;AAEtB,cAAIC,aAAY,MAAM,iBAAiB,WAAW;AAClD,UAAAA,WAAU,QAAQ,aAAW;AAAE,oBAAQ,MAAM,UAAU;AAAA,UAAQ,CAAC;AAChE,cAAIC,SAAQ,MAAM,iBAAiB,SAAS;AAC5C,UAAAA,OAAM,QAAQ,aAAW;AAAE,oBAAQ,UAAU,OAAO,QAAQ;AAAA,UAAE,CAAC;AAE/D,gBAAM,MAAM,UAAU;AAEtB,gBAAM,iBAAiB,yDAAyD,EAAE,QAAQ,aAAW,QAAQ,MAAM,QAAQ,EAAE;AAE7H,cAAIC,UAAS;AACb,cAAIC,UAAS,SAAS,iBAAiB,yDAAyD;AAChG,UAAAA,QAAO,QAAQ,aAAW;AACxB,gBAAI,SAAS,QAAQ;AACrB,gBAAI,OAAOD,OAAM,IAAI,OAAO,MAAM,GAAG;AACnC,cAAAA,UAAS;AAAA,YACX;AAAA,UACF,CAAC;AAED,gBAAM,iBAAiB,yEAAyE,EAC7F,QAAQ,aAAW,QAAQ,MAAM,QAAQA,UAAS,IAAI;AACzD,gBAAM,iBAAiB,yDAAyD,EAC7E,QAAQ,aAAW,QAAQ,MAAM,UAAU,OAAO;AACrD,gBAAM,iBAAiB,yDAAyD,EAC7E,QAAQ,aAAW,QAAQ,MAAM,YAAY,OAAO;AACvD,UAAAF,WAAU,QAAQ,aAAW;AAAE,oBAAQ,MAAM,UAAU;AAAA,UAAG,CAAC;AAC3D,UAAAC,OAAM,QAAQ,aAAW;AAAE,oBAAQ,UAAU,IAAI,QAAQ;AAAA,UAAE,CAAC;AAC5D,gBAAM,MAAM,UAAU;AAAA,QACxB,CAAC;AAAA,MACH;AAAA,IACJ;AAAA,IAEA,qBAAqB;AACnB,UAAI,SAAS,cAAc,sBAAsB,GAAG;AAElD,kBAAU,KAAK,OAAO;AACtB,kBAAU,KAAK;AAAA,MACjB;AAAA,IACF;AAAA,IAEA,gBAAgB;AACd,UAAI,qBAAqB,CAAC,EAAE,MAAM,KAAK,SAAS,iBAAiB,4BAA4B,CAAC;AAC9F,UAAI,cAAc,mBAAmB,IAAI,SAAU,kBAAkB;AACnE,eAAO,IAAc,QAAQ,gBAAgB;AAAA,MAC/C,CAAC;AAAA,IACH;AAAA,IAEA,eAAeG,QAAO;AACpB,UAAI,KAAK,6BAA6B;AACpC,aAAK,yBAAyB,OAAO;AAAA,MACvC;AAAA,IACF;AAAA,EACF;;;AC1GA,MAAAC,kBAAc;;;ACId,uBAAuC;AAEvC,MAAI,OAAO,aAAa,aAAa;AACpC,YAAQ,KAAK,2FAA2F;AAAA,EACzG;AAEA,MAAM,aAAa,MAAM;AACxB,UAAM,YAAY;AAAA;AAAA,MAEjB;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA;AAAA,MAEA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACD;AAEA,UAAM,WAAW,UAAU,CAAC;AAC5B,UAAM,MAAM,CAAC;AAEb,eAAW,cAAc,WAAW;AACnC,UAAI,WAAW,CAAC,KAAK,UAAU;AAC9B,iBAASC,KAAI,GAAGA,KAAI,WAAW,QAAQA,MAAK;AAC3C,cAAI,SAASA,EAAC,CAAC,IAAI,WAAWA,EAAC;AAAA,QAChC;AACA,eAAO;AAAA,MACR;AAAA,IACD;AAEA,WAAO;AAAA,EACR,GAAG;AAEH,MAAM,eAAe;AAAA,IACpB,QAAQ,UAAU;AAAA,IAClB,OAAO,UAAU;AAAA,EAClB;AAEA,MAAM,gBAAgB;AAAA;AAAA,IAErB,MAAM,QAAQ,SAAS,SAAS;AAC/B,gBAAU,WAAW,SAAS;AAC9B,YAAM,gBAAgB,UAAU;AAEhC,YAAM,KAAK,YAAY,MAAM;AAC5B,eAAO,QAAQ,aAAa,EAAE,OAAO;AAAA,MACtC,CAAC;AAAA,IACF;AAAA;AAAA,IAEA,MAAM,OAAO;AACZ,UAAI,CAAC,KAAK,cAAc;AACvB;AAAA,MACD;AACA,YAAM,aAAa,UAAU;AAE7B,YAAM,KAAK,YAAY,MAAM;AAC5B,eAAO,SAAS,UAAU,EAAE;AAAA,MAC7B,CAAC;AAAA,IACF;AAAA;AAAA,IAEA,MAAM,YAAY,QAAQ;AACzB,YAAM,SAAS,OAAO;AAGtB,UAAI,kBAAkB,SAAS;AAC9B,cAAM;AACN;AAAA,MACD;AAGA,YAAM,IAAI,QAAQ,CAACC,aAAY;AAC9B,cAAM,WAAW,MAAM;AACtB,eAAK,IAAI,UAAU,QAAQ;AAC3B,UAAAA,SAAQ;AAAA,QACT;AACA,aAAK,GAAG,UAAU,QAAQ;AAAA,MAC3B,CAAC;AAAA,IACF;AAAA;AAAA,IAEA,GAAGC,QAAOC,WAAU;AACnB,YAAM,YAAY,aAAaD,MAAK;AACpC,UAAI,WAAW;AACd,iBAAS,iBAAiB,WAAWC,SAAQ;AAAA,MAC9C;AAAA,IACD;AAAA;AAAA,IAEA,IAAID,QAAOC,WAAU;AACpB,YAAM,YAAY,aAAaD,MAAK;AACpC,UAAI,WAAW;AACd,iBAAS,oBAAoB,WAAWC,SAAQ;AAAA,MACjD;AAAA,IACD;AAAA,IACA;AAAA,EACD;AAEA,SAAO,iBAAiB,eAAe;AAAA,IACtC,cAAc;AAAA,MACb,MAAM;AACL,eAAO,QAAQ,SAAS,UAAU,iBAAiB,CAAC;AAAA,MACrD;AAAA,IACD;AAAA,IACA,WAAW;AAAA,MACV,YAAY;AAAA,MACZ,MAAM;AAEL,eAAO,QAAQ,SAAS,UAAU,iBAAiB,CAAC;AAAA,MACrD;AAAA,IACD;AAAA,EACD,CAAC;AAED,MAAM,aAAa,uBAAQ,OAAO;AAAA,IACjC,SAAS;AAAA,MACR,UAAU;AAAA,MACV,OAAO;AAAA,MACP,aAAa;AAAA,MACb,qBAAqB;AAAA,MACrB,uBAAuB;AAAA,MACvB,mBAAmB;AAAA,IACpB;AAAA,IAEA,aAAa;AAAA,IAEb,MAAMC,MAAK;AACV,UAAI,YAAY;AAChB,UAAI;AACJ,UAAI,UAAU;AAEd,UAAIA,KAAI,eAAe,CAAC,KAAK,QAAQ,qBAAqB;AACzD,oBAAYA,KAAI,YAAY;AAAA,MAC7B,OAAO;AACN,oBAAY,SAAS,cAAc,KAAK;AACxC,kBAAU,YAAY;AAAA,MACvB;AAEA,UAAI,KAAK,QAAQ,SAAS;AACzB,kBAAU,KAAK,QAAQ;AAAA,MACxB,OAAO;AACN,qBAAa;AAAA,MACd;AAEA,WAAK,cAAc,KAAK,QAAQ,OAAO,WAAW,SAAS,WAAW,KAAK,kBAAkB,IAAI;AACjG,WAAK,KAAK,oBAAoB;AAE9B,WAAK,KAAK,GAAG,kCAAkC,KAAK,cAAc,IAAI;AAEtE,aAAO;AAAA,IACR;AAAA,IAEA,WAAW;AACV,8BACE,IAAI,KAAK,MAAM,SAAS,wBAAS,IAAI,EACrC,IAAI,KAAK,MAAM,SAAS,KAAK,kBAAkB,IAAI;AAErD,UAAI,KAAK,YAAY,WAAW;AAC/B,gCACE,IAAI,UAAU,KAAK,YAAY,UAAU,kBAAkB,wBAAS,IAAI,EACxE,IAAI,UAAU,KAAK,YAAY,UAAU,kBAAkB,KAAK,yBAAyB,IAAI;AAAA,MAChG;AAAA,IACD;AAAA,IAEA,cAAc,OAAO,WAAW,SAAS,WAAWC,KAAI,SAAS;AAChE,WAAK,OAAO,SAAS,cAAc,GAAG;AACtC,WAAK,KAAK,YAAY;AACtB,gBAAU,YAAY,KAAK,IAAI;AAC/B,WAAK,KAAK,OAAO;AACjB,WAAK,KAAK,QAAQ;AAClB,WAAK,KAAK,YAAY;AAEtB,WAAK,KAAK,aAAa,QAAQ,QAAQ;AACvC,WAAK,KAAK,aAAa,cAAc,KAAK;AAE1C,8BAAS,wBAAwB,SAAS;AAE1C,8BACE,GAAG,KAAK,MAAM,SAAS,wBAAS,IAAI,EACpC,GAAG,KAAK,MAAM,SAASA,KAAI,OAAO;AAEpC,UAAI,KAAK,YAAY,WAAW;AAC/B,gCACE,GAAG,UAAU,KAAK,YAAY,UAAU,kBAAkB,wBAAS,IAAI,EACvE,GAAG,UAAU,KAAK,YAAY,UAAU,kBAAkB,KAAK,yBAAyB,OAAO;AAAA,MAClG;AAEA,aAAO,KAAK;AAAA,IACb;AAAA,IAEA,MAAM,mBAAmB;AACxB,YAAMD,OAAM,KAAK;AACjB,YAAM,EAAE,mBAAmB,sBAAsB,IAAI,KAAK;AAG1D,YAAM,YAAY,qBAAqBA,KAAI,aAAa;AAGxD,YAAM,YAAY,KAAK,YAAY,aAAa,CAAC;AAEjD,UAAIA,KAAI,eAAe;AAItB,QAAAA,KAAI,aAAa;AAEjB,YAAI,WAAW;AACd,gBAAM,KAAK,YAAY,KAAK;AAAA,QAC7B,OAAO;AACN,oBAAU,UAAU,OAAO,2BAA2B;AAAA,QACvD;AAEA,QAAAA,KAAI,eAAe;AACnB,QAAAA,KAAI,gBAAgB;AACpB,QAAAA,KAAI,KAAK,gBAAgB;AAAA,MAC1B,OAAO;AAGN,QAAAA,KAAI,aAAa;AAEjB,YAAI,WAAW;AACd,gBAAM,KAAK,YAAY,QAAQ,SAAS;AAAA,QACzC,OAAO;AACN,oBAAU,UAAU,IAAI,2BAA2B;AAAA,QACpD;AAEA,QAAAA,KAAI,eAAe;AACnB,QAAAA,KAAI,gBAAgB;AACpB,QAAAA,KAAI,KAAK,iBAAiB;AAAA,MAC3B;AAAA,IACD;AAAA,IAEA,eAAe;AACd,YAAM,EAAE,OAAO,YAAY,IAAI,KAAK;AACpC,YAAM,eAAe,KAAK,KAAK;AAG/B,WAAK,KAAK,QAAQ,eAAe,cAAc;AAC/C,WAAK,KAAK,aAAa,cAAc,KAAK,KAAK,KAAK;AACpD,WAAK,KAAK,aAAa,gBAAgB,aAAa,SAAS,CAAC;AAG9D,WAAK,KAAK,UAAU,OAAO,yBAAyB,YAAY;AAAA,IACjE;AAAA,IAEA,0BAA0B;AACzB,YAAMA,OAAM,KAAK;AAIjB,YAAM,sBAAsB,CAAC,KAAK,YAAY,gBAAgBA,KAAI,iBAAiB,CAACA,KAAI;AAExF,UAAI,qBAAqB;AAExB,QAAAA,KAAI,aAAa;AACjB,QAAAA,KAAI,gBAAgB;AAGpB,QAAAA,KAAI,KAAK,gBAAgB;AACzB,QAAAA,KAAI,eAAe;AAAA,MACpB;AAAA,IACD;AAAA,EACD,CAAC;AAED,qBAAI,QAAQ;AAAA,IACX,mBAAmB;AAClB,WAAK,kBAAkB,iBAAiB;AAAA,IACzC;AAAA,EACD,CAAC;AAED,qBAAI,aAAa;AAAA,IAChB,mBAAmB;AAAA,EACpB,CAAC;AAED,qBAAI,YAAY,WAAW;AAC1B,QAAI,KAAK,QAAQ,mBAAmB;AACnC,WAAK,WAAW,IAAI,WAAW,KAAK,QAAQ,wBAAwB,CAAC;AAAA,IACtE;AAAA,EACD,CAAC;;;AD7RD,MAAO,yBAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,SAAS;AAAA,MACd,KAAK,EAAE,MAAM,QAAQ,SAAS,WAAW;AAAA,MACzC,KAAK,EAAE,MAAM,QAAQ,SAAS,WAAW;AAAA,MACzC,MAAM,EAAE,MAAM,QAAQ,SAAS,GAAG;AAAA;AAAA;AAAA,MAGlC,QAAQ,EAAE,MAAM,OAAO,SAAS,CAAC,EAAE;AAAA,MACnC,SAAS;AAAA,MACT,eAAe;AAAA,MACf,WAAW;AAAA,IACb;AAAA,IAEA,UAAU;AACR,WAAK,cAAc,CAAC;AAGpB,WAAK,MAAM,gBAAAE,QAAE,IAAI,KAAK,SAAS;AAAA,QAC7B,mBAAmB;AAAA,QACnB,0BAA0B;AAAA,UACxB,UAAU;AAAA,QACZ;AAAA,MACF,CAAC;AAED,UAAI,KAAK,YAAY,WAAW,GAAG;AACjC,aAAK,IAAI,UAAU,KAAK,WAAW;AAAA,MACrC,OAAO;AACL,aAAK,IAAI,QAAQ,CAAC,KAAK,UAAU,KAAK,QAAQ,GAAG,KAAK,SAAS;AAAA,MACjE;AAGA,sBAAAA,QAAE,UAAU,sDAAsD;AAAA,QAChE,SAAS;AAAA,QACT,aAAa;AAAA,MACf,CAAC,EAAE,MAAM,KAAK,GAAG;AAGjB,WAAK,OAAO,gBAAAA,QAAE,KAAK;AAAA,QACjB,SAAS,KAAK;AAAA,QACd,eAAe,KAAK;AAAA,QACpB,WAAW,KAAK;AAAA,QAChB,UAAU,CAAC,IAAI,EAAE;AAAA,QACjB,YAAY,CAAC,IAAI,EAAE;AAAA,QACnB,aAAa,CAAC,GAAG,GAAG;AAAA,MACtB,CAAC;AAGD,WAAK,IAAI,GAAG,WAAW,MAAM;AAC3B,cAAM,SAAS,KAAK,IAAI,UAAU;AAClC,aAAK,SAAS,iBAAiB;AAAA,UAC7B,QAAQ;AAAA,YACN,OAAO,OAAO,SAAS;AAAA,YACvB,MAAM,OAAO,QAAQ;AAAA,YACrB,OAAO,OAAO,SAAS;AAAA,YACvB,MAAM,OAAO,QAAQ;AAAA,UACvB;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAGD,WAAK,eAAe;AAAA,IACtB;AAAA;AAAA,IAGA,aAAa;AACX,UAAI,KAAK,KAAK;AACZ,aAAK,IAAI,OAAO;AAChB,aAAK,MAAM;AAAA,MACb;AAAA,IACF;AAAA;AAAA,IAGA,MAAM,iBAAiB;AACrB,YAAM,WAAW,MAAM,MAAM,mBAAmB,EAAE,SAAS,EAAE,gBAAgB,iCAAiC,EAAE,CAAC;AACjH,YAAM,iBAAiB,MAAM,SAAS,KAAK;AAC3C,UAAI,CAAC,eAAe,SAAU;AAE9B,sBAAAA,QAAE,QAAQ,gBAAgB;AAAA,QACxB,cAAc,CAAC,UAAU,WAAW,gBAAAA,QAAE,OAAO,QAAQ,EAAE,MAAM,KAAK,KAAK,CAAC;AAAA,QACxE,eAAe,CAAC,SAAS,UAAU;AACjC,eAAK,YAAY,QAAQ,WAAW,EAAE,IAAI;AAC1C,gBAAM,UAAU,KAAK,aAAa,QAAQ,UAAU,CAAC;AAAA,QACvD;AAAA,MACF,CAAC,EAAE,MAAM,KAAK,GAAG;AAEjB,WAAK,SAAS,oBAAoB,EAAE,QAAQ,EAAE,YAAY,eAAe,SAAS,EAAE,CAAC;AAMrF,WAAK,IAAI,OAAO,EAAE,SAAS,MAAM,SAAS,GAAG,CAAC;AAAA,IAChD;AAAA;AAAA,IAGA,aAAa,YAAY;AACvB,UAAI,UAAU;AACd,UAAI,WAAW,QAAQ,WAAW,KAAK,KAAK,EAAE,WAAW,GAAG;AAC1D,mBAAW;AACX,mBAAW,4BAA4B,WAAW,OAAO;AACzD,mBAAW;AAAA,MACb;AACA,iBAAW,wBAAwB,WAAW,eAAe;AAC7D,iBAAW,0BAA0B,WAAW,OAAO,MAAM,WAAW,QAAQ;AAChF,UAAI,WAAW,SAAS,WAAW,MAAM,KAAK,EAAE,WAAW,GAAG;AAC5D,mBAAW,+BAA+B,WAAW,QAAQ;AAAA,MAC/D;AACA,UAAI,WAAW,SAAS,WAAW,MAAM,KAAK,EAAE,WAAW,GAAG;AAC5D,mBAAW,+BAA+B,WAAW,QAAQ;AAAA,MAC/D;AACA,UAAI,WAAW,WAAW,WAAW,QAAQ,KAAK,EAAE,WAAW,GAAG;AAChE,mBAAW,oDAAoD,WAAW,UAAU,OAAO,WAAW,UAAU;AAAA,MAClH;AACA,iBAAW;AACX,aAAO;AAAA,IACT;AAAA;AAAA,IAGA,eAAeC,QAAO;AACpB,YAAM,SAAS,KAAK,YAAYA,OAAM,OAAO,EAAE;AAC/C,UAAI,CAAC,OAAQ;AACb,WAAK,IAAI,QAAQ,OAAO,UAAU,GAAG,EAAE;AACvC,aAAO,UAAU;AAAA,IACnB;AAAA;AAAA,IAGA,cAAcA,QAAO;AACnB,YAAM,EAAE,KAAK,IAAI,IAAIA,OAAM;AAC3B,WAAK,IAAI,QAAQ,CAAC,KAAK,GAAG,GAAG,EAAE;AAAA,IACjC;AAAA,EACF;;;AEnIA,MAAO,6BAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,UAAU;AAAA,MACf;AAAA,MAAgB;AAAA,MAAqB;AAAA,MACrC;AAAA,MAAqB;AAAA,MAAoB;AAAA,MACzC;AAAA,MAAyB;AAAA,MACzB;AAAA,MAAyB;AAAA,MAAwB;AAAA,MACjD;AAAA,MAAwB;AAAA,MAAuB;AAAA,MAC/C;AAAA,MAAyB;AAAA,IAC3B;AAAA,IAEA,UAAU;AACR,UAAI,KAAK,uBAAuB;AAC9B,aAAK,MAAM;AAAA,MACb;AACA,UAAI,KAAK,uBAAuB;AAC9B,YAAI,CAAC,KAAK,cAAc;AACtB,eAAK,eAAe,IAAc,MAAM,KAAK,oBAAoB,EAAE,UAAU,MAAM,CAAC;AAAA,QACtF;AACA,YAAI,KAAK,cAAc;AACrB,eAAK,aAAa,KAAK;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAAA,IAEA,QAAQ;AAAA,IAER;AAAA,IAEA,kBAAkBC,QAAO;AACvB,UAAI,SAAS,eAAeA,OAAM,OAAO,EAAE,EAAE,MAAM,SAAS,GAAG;AAC7D,YAAI,cAAcA,OAAM,OAAO,aAAa;AAC5C,iBAAS,eAAe,QAAQ,cAAc,YAAY,EAAE,UAAU;AACtE,iBAAS,eAAe,QAAQ,cAAc,aAAa,EAAE,UAAU;AACvE,iBAAS,eAAe,QAAQ,cAAc,cAAc,EAAE,UAAU;AACxE,iBAAS,eAAe,QAAQ,cAAc,gBAAgB,EAAE,UAAU;AAC1E,iBAAS,eAAe,QAAQ,cAAc,eAAe,EAAE,UAAU;AACzE,iBAAS,eAAe,QAAQ,cAAc,kBAAkB,EAAE,UAAU;AAC5E,iBAAS,eAAe,QAAQ,cAAc,gBAAgB,EAAE,UAAU;AAC1E,iBAAS,eAAe,QAAQ,cAAc,eAAe,EAAE,UAAU;AACzE,iBAAS,eAAe,QAAQ,cAAc,cAAc,EAAE,UAAU;AACxE,iBAAS,eAAe,QAAQ,cAAc,WAAW,EAAE,UAAU,OAAO,QAAQ;AAAA,MACtF,WAAW,SAAS,eAAeA,OAAM,OAAO,EAAE,EAAE,MAAM,UAAU,GAAG;AACrE,YAAI,cAAcA,OAAM,OAAO,aAAa;AAC5C,iBAAS,eAAe,QAAQ,cAAc,YAAY,EAAE,UAAU;AACtE,iBAAS,eAAe,QAAQ,cAAc,aAAa,EAAE,UAAU;AACvE,iBAAS,eAAe,QAAQ,cAAc,cAAc,EAAE,UAAU;AACxE,iBAAS,eAAe,QAAQ,cAAc,gBAAgB,EAAE,UAAU;AAC1E,iBAAS,eAAe,QAAQ,cAAc,eAAe,EAAE,UAAU;AACzE,iBAAS,eAAe,QAAQ,cAAc,kBAAkB,EAAE,UAAU;AAC5E,iBAAS,eAAe,QAAQ,cAAc,gBAAgB,EAAE,UAAU;AAC1E,iBAAS,eAAe,QAAQ,cAAc,eAAe,EAAE,UAAU;AACzE,iBAAS,eAAe,QAAQ,cAAc,cAAc,EAAE,UAAU;AACxE,iBAAS,eAAe,QAAQ,cAAc,WAAW,EAAE,UAAU,IAAI,QAAQ;AAAA,MACnF;AAAA,IACF;AAAA,IAEA,aAAaA,QAAO;AAClB,UAAI,cAAcA,OAAM,OAAO,aAAa;AAC5C,UAAI,aAAaA,OAAM,OAAO,YAAY;AAC1C,UAAI,KAAK,4BAA4B;AACnC,aAAK,wBAAwB,YAAY;AACzC,aAAK,uBAAuB,YAAY;AACxC,aAAK,4BAA4B,QAAQ;AACzC,YAAI,CAAC,KAAK,mBAAmB;AAC3B,eAAK,oBAAoB,IAAc,MAAM,KAAK,yBAAyB,EAAE,UAAU,MAAM,CAAC;AAAA,QAChG;AACA,YAAI,KAAK,mBAAmB;AAC1B,eAAK,kBAAkB,KAAK;AAAA,QAC9B;AAAA,MACF;AAAA,IACF;AAAA,IAEA,iBAAiBA,QAAO;AACtB,UAAI,cAAcA,OAAM,OAAO,aAAa;AAC5C,UAAI,aAAaA,OAAM,OAAO,YAAY;AAC1C,UAAI,KAAK,gCAAgC;AACvC,aAAK,4BAA4B,YAAY;AAC7C,aAAK,2BAA2B,YAAY;AAC5C,aAAK,gCAAgC,QAAQ;AAC7C,YAAI,CAAC,KAAK,uBAAuB;AAC/B,eAAK,wBAAwB,IAAc,MAAM,KAAK,6BAA6B,EAAE,UAAU,MAAM,CAAC;AAAA,QACxG;AACA,YAAI,KAAK,uBAAuB;AAC9B,eAAK,sBAAsB,KAAK;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AAAA,IAEA,sBAAsBA,QAAO;AAC3B,UAAI,aAAaA,OAAM,OAAO,YAAY;AAC1C,UAAI,cAAcA,OAAM,OAAO,aAAa;AAC5C,UAAI,aAAaA,OAAM,OAAO,YAAY;AAC1C,UAAI,KAAK,+BAA+B;AACtC,aAAK,2BAA2B,YAAY;AAC5C,aAAK,0BAA0B,YAAY;AAC3C,aAAK,4BAA4B,OAAO,cAAc,aAAY,sBAAsB;AACxF,YAAI,CAAC,KAAK,sBAAsB;AAC9B,eAAK,uBAAuB,IAAc,MAAM,KAAK,4BAA4B,EAAE,UAAU,MAAM,CAAC;AAAA,QACtG;AACA,YAAI,KAAK,sBAAsB;AAC7B,eAAK,qBAAqB,KAAK;AAAA,QACjC;AAAA,MACF;AAAA,IACF;AAAA,IAEA,WAAWA,QAAO;AAChB,UAAI,cAAcA,OAAM,OAAO,aAAa;AAC5C,UAAI,UAAW,KAAK,MAAO,KAAK,OAAO,KAAK,SAAS,OAAU,GAAO;AACtE,UAAI,SAAS,eAAe,QAAQ,cAAc,oBAAoB,GAAG;AACvE,iBAAS,eAAe,QAAQ,cAAc,oBAAoB,EAAE,QAAQ;AAAA,MAC9E,WAAW,SAAS,eAAe,OAAO,cAAc,oBAAoB,GAAG;AAC7E,iBAAS,eAAe,OAAO,cAAc,oBAAoB,EAAE,QAAQ;AAAA,MAC7E,OAAO;AACL;AAAA,MACF;AACA,UAAI,KAAK,4BAA4B;AACnC,aAAK,wBAAwB,MAAM;AAAA,MACrC;AAAA,IACF;AAAA,EACF;;;AC3HA,MAAIC,YAAW;AAAA,IACb,QAAQ,OAAO,YAAY,cAAc,UAAU;AAAA,IACnD,WAAW,OAAO,cAAc,cAAc,YAAY;AAAA,EAC5D;AAEA,MAAI,SAAS;AAAA,IACX,OAAO,UAAU;AACf,UAAI,KAAK,SAAS;AAChB,iBAAS,KAAK,KAAK,IAAI,CAAC;AACxB,QAAAA,UAAS,OAAO,IAAI,iBAAiB,GAAG,QAAQ;AAAA,MAClD;AAAA,IACF;AAAA,EACF;AAEA,MAAMC,OAAM,OAAO,oBAAI,QAAM,QAAQ;AAErC,MAAMC,gBAAe,WAASD,KAAI,IAAI,QAAQ;AAE9C,MAAME,qBAAN,MAAwB;AAAA,IACtB,YAAY,YAAY;AACtB,WAAK,sBAAsB,KAAK,oBAAoB,KAAK,IAAI;AAC7D,WAAK,aAAa;AAClB,WAAK,oBAAoB;AAAA,IAC3B;AAAA,IACA,QAAQ;AACN,UAAI,CAAC,KAAK,UAAU,GAAG;AACrB,aAAK,YAAYF,KAAI;AACrB,eAAO,KAAK;AACZ,aAAK,aAAa;AAClB,yBAAiB,oBAAoB,KAAK,mBAAmB;AAC7D,eAAO,IAAI,gDAAgD,KAAK,YAAY,cAAc,IAAI;AAAA,MAChG;AAAA,IACF;AAAA,IACA,OAAO;AACL,UAAI,KAAK,UAAU,GAAG;AACpB,aAAK,YAAYA,KAAI;AACrB,aAAK,YAAY;AACjB,4BAAoB,oBAAoB,KAAK,mBAAmB;AAChE,eAAO,IAAI,2BAA2B;AAAA,MACxC;AAAA,IACF;AAAA,IACA,YAAY;AACV,aAAO,KAAK,aAAa,CAAC,KAAK;AAAA,IACjC;AAAA,IACA,gBAAgB;AACd,WAAK,WAAWA,KAAI;AAAA,IACtB;AAAA,IACA,gBAAgB;AACd,WAAK,oBAAoB;AACzB,aAAO,KAAK;AACZ,aAAO,IAAI,oCAAoC;AAAA,IACjD;AAAA,IACA,mBAAmB;AACjB,WAAK,iBAAiBA,KAAI;AAC1B,aAAO,IAAI,uCAAuC;AAAA,IACpD;AAAA,IACA,eAAe;AACb,WAAK,YAAY;AACjB,WAAK,KAAK;AAAA,IACZ;AAAA,IACA,cAAc;AACZ,mBAAa,KAAK,WAAW;AAAA,IAC/B;AAAA,IACA,OAAO;AACL,WAAK,cAAc,YAAY,MAAM;AACnC,aAAK,iBAAiB;AACtB,aAAK,KAAK;AAAA,MACZ,IAAI,KAAK,gBAAgB,CAAC;AAAA,IAC5B;AAAA,IACA,kBAAkB;AAChB,YAAM,EAAC,gBAAgC,wBAAgD,IAAI,KAAK;AAChG,YAAM,UAAU,KAAK,IAAI,IAAI,yBAAyB,KAAK,IAAI,KAAK,mBAAmB,EAAE,CAAC;AAC1F,YAAM,YAAY,KAAK,sBAAsB,IAAI,IAAI;AACrD,YAAM,SAAS,YAAY,KAAK,OAAO;AACvC,aAAO,iBAAiB,MAAM,WAAW,IAAI;AAAA,IAC/C;AAAA,IACA,mBAAmB;AACjB,UAAI,KAAK,kBAAkB,GAAG;AAC5B,eAAO,IAAI,oEAAoE,KAAK,iBAAiB,kBAAkBC,cAAa,KAAK,WAAW,CAAC,yBAAyB,KAAK,YAAY,cAAc,IAAI;AACjN,aAAK;AACL,YAAI,KAAK,qBAAqB,GAAG;AAC/B,iBAAO,IAAI,+EAA+EA,cAAa,KAAK,cAAc,CAAC,IAAI;AAAA,QACjI,OAAO;AACL,iBAAO,IAAI,6BAA6B;AACxC,eAAK,WAAW,OAAO;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAAA,IACA,IAAI,cAAc;AAChB,aAAO,KAAK,WAAW,KAAK,WAAW,KAAK;AAAA,IAC9C;AAAA,IACA,oBAAoB;AAClB,aAAOA,cAAa,KAAK,WAAW,IAAI,KAAK,YAAY;AAAA,IAC3D;AAAA,IACA,uBAAuB;AACrB,aAAO,KAAK,kBAAkBA,cAAa,KAAK,cAAc,IAAI,KAAK,YAAY;AAAA,IACrF;AAAA,IACA,sBAAsB;AACpB,UAAI,SAAS,oBAAoB,WAAW;AAC1C,oBAAY,MAAM;AAChB,cAAI,KAAK,kBAAkB,KAAK,CAAC,KAAK,WAAW,OAAO,GAAG;AACzD,mBAAO,IAAI,uFAAuF,SAAS,eAAe,EAAE;AAC5H,iBAAK,WAAW,OAAO;AAAA,UACzB;AAAA,QACF,IAAI,GAAG;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,EAAAC,mBAAkB,iBAAiB;AAEnC,EAAAA,mBAAkB,0BAA0B;AAE5C,MAAI,WAAW;AAAA,IACb,eAAe;AAAA,MACb,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,MAAM;AAAA,MACN,cAAc;AAAA,MACd,WAAW;AAAA,IACb;AAAA,IACA,oBAAoB;AAAA,MAClB,cAAc;AAAA,MACd,iBAAiB;AAAA,MACjB,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,IACA,oBAAoB;AAAA,IACpB,WAAW,CAAE,uBAAuB,yBAA0B;AAAA,EAChE;AAEA,MAAM,EAAC,eAAeC,gBAAe,WAAWC,WAAS,IAAI;AAE7D,MAAMC,sBAAqBD,WAAU,MAAM,GAAGA,WAAU,SAAS,CAAC;AAElE,MAAME,WAAU,CAAC,EAAE;AAEnB,MAAMC,cAAN,MAAiB;AAAA,IACf,YAAYC,WAAU;AACpB,WAAK,OAAO,KAAK,KAAK,KAAK,IAAI;AAC/B,WAAK,WAAWA;AAChB,WAAK,gBAAgB,KAAK,SAAS;AACnC,WAAK,UAAU,IAAIN,mBAAkB,IAAI;AACzC,WAAK,eAAe;AAAA,IACtB;AAAA,IACA,KAAK,MAAM;AACT,UAAI,KAAK,OAAO,GAAG;AACjB,aAAK,UAAU,KAAK,KAAK,UAAU,IAAI,CAAC;AACxC,eAAO;AAAA,MACT,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,OAAO;AACL,UAAI,KAAK,SAAS,GAAG;AACnB,eAAO,IAAI,uDAAuD,KAAK,SAAS,CAAC,EAAE;AACnF,eAAO;AAAA,MACT,OAAO;AACL,cAAM,kBAAkB,CAAE,GAAGE,YAAW,GAAG,KAAK,SAAS,gBAAgB,CAAC,CAAE;AAC5E,eAAO,IAAI,uCAAuC,KAAK,SAAS,CAAC,mBAAmB,eAAe,EAAE;AACrG,YAAI,KAAK,WAAW;AAClB,eAAK,uBAAuB;AAAA,QAC9B;AACA,aAAK,YAAY,IAAIL,UAAS,UAAU,KAAK,SAAS,KAAK,eAAe;AAC1E,aAAK,qBAAqB;AAC1B,aAAK,QAAQ,MAAM;AACnB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,MAAM,EAAC,eAA8B,IAAI;AAAA,MACvC,gBAAgB;AAAA,IAClB,GAAG;AACD,UAAI,CAAC,gBAAgB;AACnB,aAAK,QAAQ,KAAK;AAAA,MACpB;AACA,UAAI,KAAK,OAAO,GAAG;AACjB,eAAO,KAAK,UAAU,MAAM;AAAA,MAC9B;AAAA,IACF;AAAA,IACA,SAAS;AACP,aAAO,IAAI,yCAAyC,KAAK,SAAS,CAAC,EAAE;AACrE,UAAI,KAAK,SAAS,GAAG;AACnB,YAAI;AACF,iBAAO,KAAK,MAAM;AAAA,QACpB,SAASU,QAAO;AACd,iBAAO,IAAI,8BAA8BA,MAAK;AAAA,QAChD,UAAE;AACA,iBAAO,IAAI,0BAA0B,KAAK,YAAY,WAAW,IAAI;AACrE,qBAAW,KAAK,MAAM,KAAK,YAAY,WAAW;AAAA,QACpD;AAAA,MACF,OAAO;AACL,eAAO,KAAK,KAAK;AAAA,MACnB;AAAA,IACF;AAAA,IACA,cAAc;AACZ,UAAI,KAAK,WAAW;AAClB,eAAO,KAAK,UAAU;AAAA,MACxB;AAAA,IACF;AAAA,IACA,SAAS;AACP,aAAO,KAAK,QAAQ,MAAM;AAAA,IAC5B;AAAA,IACA,WAAW;AACT,aAAO,KAAK,QAAQ,QAAQ,YAAY;AAAA,IAC1C;AAAA,IACA,mBAAmB;AACjB,aAAO,KAAK,QAAQ,oBAAoB;AAAA,IAC1C;AAAA,IACA,sBAAsB;AACpB,aAAOH,SAAQ,KAAKD,qBAAoB,KAAK,YAAY,CAAC,KAAK;AAAA,IACjE;AAAA,IACA,WAAW,QAAQ;AACjB,aAAOC,SAAQ,KAAK,QAAQ,KAAK,SAAS,CAAC,KAAK;AAAA,IAClD;AAAA,IACA,WAAW;AACT,UAAI,KAAK,WAAW;AAClB,iBAAS,SAASP,UAAS,WAAW;AACpC,cAAIA,UAAS,UAAU,KAAK,MAAM,KAAK,UAAU,YAAY;AAC3D,mBAAO,MAAM,YAAY;AAAA,UAC3B;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IACA,uBAAuB;AACrB,eAAS,aAAa,KAAK,QAAQ;AACjC,cAAM,UAAU,KAAK,OAAO,SAAS,EAAE,KAAK,IAAI;AAChD,aAAK,UAAU,KAAK,SAAS,EAAE,IAAI;AAAA,MACrC;AAAA,IACF;AAAA,IACA,yBAAyB;AACvB,eAAS,aAAa,KAAK,QAAQ;AACjC,aAAK,UAAU,KAAK,SAAS,EAAE,IAAI,WAAW;AAAA,QAAC;AAAA,MACjD;AAAA,IACF;AAAA,EACF;AAEA,EAAAQ,YAAW,cAAc;AAEzB,EAAAA,YAAW,UAAU,SAAS;AAAA,IAC5B,QAAQG,QAAO;AACb,UAAI,CAAC,KAAK,oBAAoB,GAAG;AAC/B;AAAA,MACF;AACA,YAAM,EAAC,YAAwB,SAAkB,QAAgB,WAAsB,KAAU,IAAI,KAAK,MAAMA,OAAM,IAAI;AAC1H,WAAK,QAAQ,cAAc;AAC3B,cAAQ,MAAM;AAAA,QACb,KAAKP,eAAc;AAClB,cAAI,KAAK,iBAAiB,GAAG;AAC3B,iBAAK,qBAAqB;AAAA,UAC5B;AACA,eAAK,QAAQ,cAAc;AAC3B,iBAAO,KAAK,cAAc,OAAO;AAAA,QAElC,KAAKA,eAAc;AAClB,iBAAO,IAAI,0BAA0B,MAAM,EAAE;AAC7C,iBAAO,KAAK,MAAM;AAAA,YAChB,gBAAgB;AAAA,UAClB,CAAC;AAAA,QAEF,KAAKA,eAAc;AAClB,iBAAO;AAAA,QAER,KAAKA,eAAc;AAClB,eAAK,cAAc,oBAAoB,UAAU;AACjD,cAAI,KAAK,oBAAoB;AAC3B,iBAAK,qBAAqB;AAC1B,mBAAO,KAAK,cAAc,OAAO,YAAY,aAAa;AAAA,cACxD,aAAa;AAAA,YACf,CAAC;AAAA,UACH,OAAO;AACL,mBAAO,KAAK,cAAc,OAAO,YAAY,aAAa;AAAA,cACxD,aAAa;AAAA,YACf,CAAC;AAAA,UACH;AAAA,QAED,KAAKA,eAAc;AAClB,iBAAO,KAAK,cAAc,OAAO,UAAU;AAAA,QAE5C;AACC,iBAAO,KAAK,cAAc,OAAO,YAAY,YAAY,OAAO;AAAA,MAClE;AAAA,IACF;AAAA,IACA,OAAO;AACL,aAAO,IAAI,kCAAkC,KAAK,YAAY,CAAC,eAAe;AAC9E,WAAK,eAAe;AACpB,UAAI,CAAC,KAAK,oBAAoB,GAAG;AAC/B,eAAO,IAAI,8DAA8D;AACzE,eAAO,KAAK,MAAM;AAAA,UAChB,gBAAgB;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,MAAMO,QAAO;AACX,aAAO,IAAI,yBAAyB;AACpC,UAAI,KAAK,cAAc;AACrB;AAAA,MACF;AACA,WAAK,eAAe;AACpB,WAAK,QAAQ,iBAAiB;AAC9B,aAAO,KAAK,cAAc,UAAU,gBAAgB;AAAA,QAClD,sBAAsB,KAAK,QAAQ,UAAU;AAAA,MAC/C,CAAC;AAAA,IACH;AAAA,IACA,QAAQ;AACN,aAAO,IAAI,yBAAyB;AAAA,IACtC;AAAA,EACF;AAEA,MAAMC,UAAS,SAAS,QAAQ,YAAY;AAC1C,QAAI,cAAc,MAAM;AACtB,eAAS,OAAO,YAAY;AAC1B,cAAM,QAAQ,WAAW,GAAG;AAC5B,eAAO,GAAG,IAAI;AAAA,MAChB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,MAAMC,gBAAN,MAAmB;AAAA,IACjB,YAAYJ,WAAU,SAAS,CAAC,GAAG,OAAO;AACxC,WAAK,WAAWA;AAChB,WAAK,aAAa,KAAK,UAAU,MAAM;AACvC,MAAAG,QAAO,MAAM,KAAK;AAAA,IACpB;AAAA,IACA,QAAQ,QAAQ,OAAO,CAAC,GAAG;AACzB,WAAK,SAAS;AACd,aAAO,KAAK,KAAK,IAAI;AAAA,IACvB;AAAA,IACA,KAAK,MAAM;AACT,aAAO,KAAK,SAAS,KAAK;AAAA,QACxB,SAAS;AAAA,QACT,YAAY,KAAK;AAAA,QACjB,MAAM,KAAK,UAAU,IAAI;AAAA,MAC3B,CAAC;AAAA,IACH;AAAA,IACA,cAAc;AACZ,aAAO,KAAK,SAAS,cAAc,OAAO,IAAI;AAAA,IAChD;AAAA,EACF;AAEA,MAAME,yBAAN,MAA4B;AAAA,IAC1B,YAAY,eAAe;AACzB,WAAK,gBAAgB;AACrB,WAAK,uBAAuB,CAAC;AAAA,IAC/B;AAAA,IACA,UAAU,cAAc;AACtB,UAAI,KAAK,qBAAqB,QAAQ,YAAY,KAAK,IAAI;AACzD,eAAO,IAAI,sCAAsC,aAAa,UAAU,EAAE;AAC1E,aAAK,qBAAqB,KAAK,YAAY;AAAA,MAC7C,OAAO;AACL,eAAO,IAAI,8CAA8C,aAAa,UAAU,EAAE;AAAA,MACpF;AACA,WAAK,kBAAkB;AAAA,IACzB;AAAA,IACA,OAAO,cAAc;AACnB,aAAO,IAAI,oCAAoC,aAAa,UAAU,EAAE;AACxE,WAAK,uBAAuB,KAAK,qBAAqB,QAAQ,CAAAC,OAAKA,OAAM,aAAa;AAAA,IACxF;AAAA,IACA,oBAAoB;AAClB,WAAK,iBAAiB;AACtB,WAAK,iBAAiB;AAAA,IACxB;AAAA,IACA,mBAAmB;AACjB,mBAAa,KAAK,YAAY;AAAA,IAChC;AAAA,IACA,mBAAmB;AACjB,WAAK,eAAe,YAAY,MAAM;AACpC,YAAI,KAAK,iBAAiB,OAAO,KAAK,cAAc,cAAc,YAAY;AAC5E,eAAK,qBAAqB,KAAK,kBAAgB;AAC7C,mBAAO,IAAI,uCAAuC,aAAa,UAAU,EAAE;AAC3E,iBAAK,cAAc,UAAU,YAAY;AAAA,UAC3C,EAAE;AAAA,QACJ;AAAA,MACF,IAAI,GAAG;AAAA,IACT;AAAA,EACF;AAEA,MAAMC,iBAAN,MAAoB;AAAA,IAClB,YAAYP,WAAU;AACpB,WAAK,WAAWA;AAChB,WAAK,YAAY,IAAIK,uBAAsB,IAAI;AAC/C,WAAK,gBAAgB,CAAC;AAAA,IACxB;AAAA,IACA,OAAO,aAAa,OAAO;AACzB,YAAM,UAAU;AAChB,YAAM,SAAS,OAAO,YAAY,WAAW,UAAU;AAAA,QACrD;AAAA,MACF;AACA,YAAM,eAAe,IAAID,cAAa,KAAK,UAAU,QAAQ,KAAK;AAClE,aAAO,KAAK,IAAI,YAAY;AAAA,IAC9B;AAAA,IACA,IAAI,cAAc;AAChB,WAAK,cAAc,KAAK,YAAY;AACpC,WAAK,SAAS,uBAAuB;AACrC,WAAK,OAAO,cAAc,aAAa;AACvC,WAAK,UAAU,YAAY;AAC3B,aAAO;AAAA,IACT;AAAA,IACA,OAAO,cAAc;AACnB,WAAK,OAAO,YAAY;AACxB,UAAI,CAAC,KAAK,QAAQ,aAAa,UAAU,EAAE,QAAQ;AACjD,aAAK,YAAY,cAAc,aAAa;AAAA,MAC9C;AACA,aAAO;AAAA,IACT;AAAA,IACA,OAAO,YAAY;AACjB,aAAO,KAAK,QAAQ,UAAU,EAAE,KAAK,kBAAgB;AACnD,aAAK,OAAO,YAAY;AACxB,aAAK,OAAO,cAAc,UAAU;AACpC,eAAO;AAAA,MACT,EAAE;AAAA,IACJ;AAAA,IACA,OAAO,cAAc;AACnB,WAAK,UAAU,OAAO,YAAY;AAClC,WAAK,gBAAgB,KAAK,cAAc,QAAQ,CAAAE,OAAKA,OAAM,aAAa;AACxE,aAAO;AAAA,IACT;AAAA,IACA,QAAQ,YAAY;AAClB,aAAO,KAAK,cAAc,QAAQ,CAAAA,OAAKA,GAAE,eAAe,WAAW;AAAA,IACrE;AAAA,IACA,SAAS;AACP,aAAO,KAAK,cAAc,KAAK,kBAAgB,KAAK,UAAU,YAAY,EAAE;AAAA,IAC9E;AAAA,IACA,UAAU,iBAAiB,MAAM;AAC/B,aAAO,KAAK,cAAc,KAAK,kBAAgB,KAAK,OAAO,cAAc,cAAc,GAAG,IAAI,EAAE;AAAA,IAClG;AAAA,IACA,OAAO,cAAc,iBAAiB,MAAM;AAC1C,UAAI;AACJ,UAAI,OAAO,iBAAiB,UAAU;AACpC,wBAAgB,KAAK,QAAQ,YAAY;AAAA,MAC3C,OAAO;AACL,wBAAgB,CAAE,YAAa;AAAA,MACjC;AACA,aAAO,cAAc,KAAK,CAAAE,kBAAgB,OAAOA,cAAa,YAAY,MAAM,aAAaA,cAAa,YAAY,EAAE,GAAG,IAAI,IAAI,OAAU;AAAA,IAC/I;AAAA,IACA,UAAU,cAAc;AACtB,UAAI,KAAK,YAAY,cAAc,WAAW,GAAG;AAC/C,aAAK,UAAU,UAAU,YAAY;AAAA,MACvC;AAAA,IACF;AAAA,IACA,oBAAoB,YAAY;AAC9B,aAAO,IAAI,0BAA0B,UAAU,EAAE;AACjD,WAAK,QAAQ,UAAU,EAAE,KAAK,kBAAgB,KAAK,UAAU,OAAO,YAAY,EAAE;AAAA,IACpF;AAAA,IACA,YAAY,cAAc,SAAS;AACjC,YAAM,EAAC,WAAsB,IAAI;AACjC,aAAO,KAAK,SAAS,KAAK;AAAA,QACxB;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAMC,YAAN,MAAe;AAAA,IACb,YAAY,KAAK;AACf,WAAK,OAAO;AACZ,WAAK,gBAAgB,IAAIF,eAAc,IAAI;AAC3C,WAAK,aAAa,IAAIR,YAAW,IAAI;AACrC,WAAK,eAAe,CAAC;AAAA,IACvB;AAAA,IACA,IAAI,MAAM;AACR,aAAOW,oBAAmB,KAAK,IAAI;AAAA,IACrC;AAAA,IACA,KAAK,MAAM;AACT,aAAO,KAAK,WAAW,KAAK,IAAI;AAAA,IAClC;AAAA,IACA,UAAU;AACR,aAAO,KAAK,WAAW,KAAK;AAAA,IAC9B;AAAA,IACA,aAAa;AACX,aAAO,KAAK,WAAW,MAAM;AAAA,QAC3B,gBAAgB;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,IACA,yBAAyB;AACvB,UAAI,CAAC,KAAK,WAAW,SAAS,GAAG;AAC/B,eAAO,KAAK,WAAW,KAAK;AAAA,MAC9B;AAAA,IACF;AAAA,IACA,eAAe,aAAa;AAC1B,WAAK,eAAe,CAAE,GAAG,KAAK,cAAc,WAAY;AAAA,IAC1D;AAAA,EACF;AAEA,WAASA,oBAAmB,KAAK;AAC/B,QAAI,OAAO,QAAQ,YAAY;AAC7B,YAAM,IAAI;AAAA,IACZ;AACA,QAAI,OAAO,CAAC,UAAU,KAAK,GAAG,GAAG;AAC/B,YAAMC,KAAI,SAAS,cAAc,GAAG;AACpC,MAAAA,GAAE,OAAO;AACT,MAAAA,GAAE,OAAOA,GAAE;AACX,MAAAA,GAAE,WAAWA,GAAE,SAAS,QAAQ,QAAQ,IAAI;AAC5C,aAAOA,GAAE;AAAA,IACX,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AAEA,WAASC,gBAAe,MAAMC,WAAU,KAAK,KAAK,SAAS,oBAAoB;AAC7E,WAAO,IAAIJ,UAAS,GAAG;AAAA,EACzB;AAEA,WAASI,WAAU,MAAM;AACvB,UAAM,UAAU,SAAS,KAAK,cAAc,2BAA2B,IAAI,IAAI;AAC/E,QAAI,SAAS;AACX,aAAO,QAAQ,aAAa,SAAS;AAAA,IACvC;AAAA,EACF;;;ACrfC,MAAIC;AAEE,WAASC,eAAc;AAC5B,WAAOD,cAAaE,gBAAe;AAAA,EACrC;AAEO,WAAS,qBAAqB;AACnC,IAAAF,WAAU,WAAW;AACrB,IAAAA,YAAW;AAAA,EACb;;;ACbA,MAAO,8CAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,UAAU;AAAA,MACf;AAAA,IACF;AAAA,IACA,OAAO,SAAS;AAAA,MACd,OAAO;AAAA,IACT;AAAA,IAEA,UAAU;AACR,cAAQ,IAAI,WAAW;AACvB,WAAK,eAAe;AACpB,WAAK,aAAa;AAAA,IACpB;AAAA,IAEA,aAAa;AACX,cAAQ,IAAI,cAAc;AAC1B,WAAK,cAAc,YAAY;AAC/B,yBAAmB;AAAA,IACrB;AAAA,IAEA,eAAe;AACb,WAAK,gBAAgB,YAAY;AACjC,YAAM,cAAc,8BAA8B,KAAK;AACvD,cAAQ,IAAI,yBAAyB,WAAW;AAChD,WAAK,eAAeG,aAAY,EAAE,cAAc;AAAA,QAC9C,EAAE,SAAS,iCAAiC,QAAQ,KAAK,WAAW;AAAA,QACpE;AAAA,UACE,UAAU,CAAC,SAAS;AAClB,gBAAI,KAAK,QAAQ,UAAU;AACzB,sBAAQ,IAAI,KAAK,OAAO,MAAM,KAAK,OAAO,MAAM,KAAK,eAAe;AACpE,mBAAK,gBAAgB,aAAa,KAAK,OAAO;AAK9C,mBAAK,gBAAgB,YAAY,KAAK,gBAAgB;AAAA,YACxD,WAAW,KAAK,QAAQ,QAAQ;AAC9B,sBAAQ,IAAI,KAAK,OAAO,MAAM,KAAK,SAAS;AAC5C,sBAAQ,IAAI,MAAM;AAClB,mBAAK,aAAa,YAAY;AAAA,YAChC;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;;;AC9CA,MAAO,uCAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,UAAU,CAAC,UAAU;AAAA,IAE5B,UAAU;AACR,WAAK,wBAAwB;AAAA,IAC/B;AAAA,IAEA,0BAA0B;AACxB,UAAI,YAAY,KAAK,gBAAgB;AAAA,QACnC,CAACC,MAAK,oBAAqB,KAAK,IAAIA,MAAK,gBAAgB,YAAY;AAAA,QAAG;AAAA,MAC1E;AAEA,WAAK,gBAAgB,QAAQ,CAAC,aAAa;AACzC,iBAAS,MAAM,SAAS,GAAG,SAAS;AAAA,MACtC,CAAC;AAAA,IACH;AAAA,EACF;;;AChBA,MAAO,yCAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,UAAU,CAAC,SAAS,MAAM;AAAA,IAEjC,SAAS;AACP,YAAM,WAAW,KAAK,YAAY,SAAS;AAC3C,WAAK,YAAY,OAAO,WAAW,SAAS;AAE5C,UAAI,KAAK,eAAe;AACtB,aAAK,WAAW,UAAU,OAAO,QAAQ;AACzC,aAAK,WAAW,UAAU,OAAO,cAAc;AAAA,MACjD;AAAA,IACF;AAAA,EACF;;;ACdA,6BAAsB;AAItB,MAAO,8BAAP,cAA6B,WAAW;AAAA,IACtC,UAAU;AACR,WAAK,aAAa;AAClB,WAAK,iBAAiB;AAAA,IACxB;AAAA;AAAA;AAAA,IAIA,cAAc,OAAO,MAAM,WAAW,IAAI;AACxC,UAAI,KAAK,WAAY;AACrB,WAAK,aAAa;AAClB,QAAE,gBAAgB,EAAE,KAAK,YAAY,IAAI;AACzC,QAAE,QAAQ,EAAE,YAAY,QAAQ;AAChC,QAAE,+BAA+B,EAAE,IAAI,KAAK;AAC5C,QAAE,8BAA8B,EAAE,IAAI,IAAI;AAC1C,QAAE,mCAAmC,EAAE,IAAI,QAAQ;AACnD,eAAS,eAAe,cAAc,EAAE,OAAO;AAAA,IACjD;AAAA,IAEA,mBAAmB;AACjB,YAAM,wBAAwB,EAAE,QAAQ,OAAO,SAAS,EAAE,gBAAgB,iCAAgC,EAAE,CAAC,EAC1G,KAAK,cAAY,SAAS,KAAK,CAAC,EAChC,KAAK,kBAAgB,KAAK,iBAAiB,aAAa,cAAc,CAAC,CAAC,EACxE,MAAM,SAAO;AAAA,MAAC,CAAC;AAAA,IACpB;AAAA,IAEA,iBAAiB,aAAa;AAC5B,2BAAAC,QAAU,OAAO,OAAO;AAAA,QACtB,eAAe;AAAA,MACjB,CAAC,EAAE,KAAK,YAAU;AAChB,aAAK,YAAY,MAAM;AACvB,aAAK,kBAAkB,MAAM;AAAA,MAC/B,CAAC;AAAA,IACH;AAAA,IAEA,YAAY,QAAQ;AAClB,2BAAAA,QAAU,eAAe,OAAO;AAAA,QAC9B;AAAA,MACF,CAAC,EAAE,KAAK,4BAA0B;AAChC,+BAAuB,cAAc;AAAA,UACnC,QAAQ;AAAA,UACR,QAAQ,EAAE,gBAAgB,EAAE,KAAK,gBAAgB;AAAA,UACjD,UAAU,EAAE,gBAAgB,EAAE,KAAK,kBAAkB;AAAA,UACrD,QAAQ;AAAA,UACR,OAAO;AAAA,QACT,GAAE,CAAC,qBAAqB;AACpB,iBAAO,QAAQ;AAAA,YACb,eAAe,OAAO,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAO9B,SAAS,CAAC,MAAM,YAAY;AAC1B,qBAAO,KAAK,aAAa,QAAQ,OAAO,IAAI,QAAQ,QAAQ;AAAA,YAC9D;AAAA,YACA,aAAa,WAAY;AACvB,qBAAO,uBAAuB,cAAc;AAAA,gBAC1C,MAAM;AAAA,gBACN,QAAQ,EAAE,gBAAgB,EAAE,KAAK,gBAAgB;AAAA,gBACjD,UAAU,EAAE,gBAAgB,EAAE,KAAK,kBAAkB;AAAA,gBACrD,QAAQ;AAAA,cACV,CAAC;AAAA,YACH;AAAA,YACA,WAAW,CAAC,SAAS;AACnB,qBAAO,uBAAuB,gBAAgB,IAAI,EAAE,KAAK,aAAW;AAClE,qBAAK,cAAc,QAAQ,OAAO,QAAQ;AAAA,cAC5C,CAAC;AAAA,YACH;AAAA,UACF,CAAC,EAAE,OAAO,gBAAgB;AAAA,QAC9B,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAAA,IAEA,kBAAkB,QAAQ;AACxB,2BAAAA,QAAU,aAAa,OAAO;AAAA,QAC5B;AAAA,QACA,QAAQ;AAAA,UACN,SAAS;AAAA,YACP,aAAa;AAAA,YACb,SAAS;AAAA,YACT,eAAe;AAAA,YACf,eAAe;AAAA,UACjB;AAAA,UACA,UAAU;AAAA,YACR,SAAS;AAAA,UACX;AAAA,UACA,UAAU;AAAA,YACR,SAAS;AAAA,UACX;AAAA,UACA,YAAY;AAAA,YACV,SAAS;AAAA,UACX;AAAA,UACA,wCAAwC;AAAA,YACtC,SAAS;AAAA,cACP,aAAa;AAAA,YACf;AAAA,UACF;AAAA,QACF;AAAA,QACA,QAAQ;AAAA,UACN,QAAQ;AAAA,YACN,UAAU;AAAA,YACV,aAAa;AAAA,YACb,wBAAwB;AAAA,UAC1B;AAAA,UACA,KAAK;AAAA,YACH,UAAU;AAAA,YACV,aAAa;AAAA,UACf;AAAA,UACA,iBAAiB;AAAA,YACf,UAAU;AAAA,YACV,aAAa;AAAA,UACf;AAAA,UACA,gBAAgB;AAAA,YACd,UAAU;AAAA,YACV,aAAa;AAAA,UACf;AAAA,QACF;AAAA,MACF,CAAC,EAAE,KAAK,kBAAgB;AACtB,qBAAa,GAAG,kBAAkB,SAAUC,QAAO;AACjD,cAAIA,OAAM,MAAM,WAAW,GAAG;AAC5B,gBAAI,WAAW,SAAS,uBAAuB,aAAaA,OAAM,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;AACpF,gBAAI,UAAU;AACZ,uBAAS,YAAY,4BAA4BA,OAAM,MAAM,CAAC,EAAE,IAAI;AACpE,kBAAIA,OAAM,MAAM,CAAC,EAAE,SAAS,QAAQ;AAClC,uBAAO,YAAY;AACnB,oBAAI,iBAAiB,SAAS,uBAAuB,uBAAuB,EAAE,CAAC;AAC/E,oBAAI,eAAe,SAAS,uBAAuB,4BAA4B,EAAE,CAAC;AAClF,oBAAI,gBAAgB;AAClB,iCAAe,aAAa;AAAA,gBAC9B;AACA,oBAAI,cAAc;AAChB,+BAAa,aAAa;AAAA,gBAC5B;AAAA,cACF,WAAWA,OAAM,MAAM,CAAC,EAAE,SAAS,eAAe;AAChD,uBAAO,YAAY;AACnB,oBAAI,eAAe,SAAS,uBAAuB,gBAAgB,EAAE,CAAC;AACtE,oBAAI,eAAe,SAAS,uBAAuB,4BAA4B,EAAE,CAAC;AAClF,oBAAI,cAAc;AAChB,+BAAa,aAAa;AAAA,gBAC5B;AACA,oBAAI,cAAc;AAChB,+BAAa,aAAa;AAAA,gBAC5B;AAAA,cACF,WAAWA,OAAM,MAAM,CAAC,EAAE,SAAS,oBAAoB;AACrD,uBAAO,YAAY;AACnB,oBAAI,iBAAiB,SAAS,uBAAuB,uBAAuB,EAAE,CAAC;AAC/E,oBAAI,eAAe,SAAS,uBAAuB,gBAAgB,EAAE,CAAC;AACtE,oBAAI,gBAAgB;AAClB,iCAAe,aAAa;AAAA,gBAC9B;AACA,oBAAI,cAAc;AAChB,+BAAa,aAAa;AAAA,gBAC5B;AAAA,cACF;AAAA,YACF,OAAO;AACL,qBAAO,YAAY;AACnB,kBAAI,iBAAiB,SAAS,uBAAuB,uBAAuB,EAAE,CAAC;AAC/E,kBAAI,eAAe,SAAS,uBAAuB,4BAA4B,EAAE,CAAC;AAClF,kBAAI,eAAe,SAAS,uBAAuB,gBAAgB,EAAE,CAAC;AACtE,kBAAI,gBAAgB;AAClB,+BAAe,aAAa;AAAA,cAC9B;AACA,kBAAI,cAAc;AAChB,6BAAa,aAAa;AAAA,cAC5B;AACA,kBAAI,cAAc;AAChB,6BAAa,aAAa;AAAA,cAC5B;AAAA,YACF;AAAA,UACF,OAAO;AACL,mBAAO,YAAY;AACnB,gBAAI,iBAAiB,SAAS,uBAAuB,uBAAuB,EAAE,CAAC;AAC/E,gBAAI,eAAe,SAAS,uBAAuB,4BAA4B,EAAE,CAAC;AAClF,gBAAI,eAAe,SAAS,uBAAuB,gBAAgB,EAAE,CAAC;AACtE,gBAAI,gBAAgB;AAClB,6BAAe,YAAY;AAAA,YAC7B;AACA,gBAAI,cAAc;AAChB,2BAAa,YAAY;AAAA,YAC3B;AACA,gBAAI,cAAc;AAChB,2BAAa,YAAY;AAAA,YAC3B;AAAA,UACF;AAAA,QACF,CAAC;AACD,qBAAa,GAAG,kBAAkB,CAACA,WAAU;AAC3C,cAAI,QAAQA,OAAM,OAAOA,OAAM,SAAS;AAExC,cAAIA,OAAM,cAAc,UAAU;AAChC,gBAAI,MAAM,SAAS;AACjB,qBAAO,eAAe;AAAA,YACxB,OAAO;AACL,qBAAO,eAAe;AAAA,YACxB;AAAA,UACF,WAAWA,OAAM,cAAc,OAAO;AACpC,gBAAI,MAAM,SAAS;AACjB,qBAAO,cAAc;AAAA,YACvB,OAAO;AACL,qBAAO,cAAc;AAAA,YACvB;AAAA,UACF,WAAWA,OAAM,cAAc,mBAAmB;AAChD,gBAAI,MAAM,SAAS;AACjB,qBAAO,kBAAkB;AAAA,YAC3B,OAAO;AACL,qBAAO,kBAAkB;AAAA,YAC3B;AAAA,UACF,WAAWA,OAAM,cAAc,kBAAkB;AAC/C,gBAAI,MAAM,SAAS;AACjB,qBAAO,iBAAiB;AAAA,YAC1B,OAAO;AACL,qBAAO,iBAAiB;AAAA,YAC1B;AAAA,UACF;AACA,cAAI,CAAC,KAAK,cAAc,OAAO,aAAa,OAAO,gBAAgB,OAAO,eAAe,OAAO,mBAAmB,OAAO,gBAAgB;AACxI,cAAE,gBAAgB,EAAE,KAAK,YAAY,KAAK;AAAA,UAC5C,OAAO;AACL,cAAE,gBAAgB,EAAE,KAAK,YAAY,IAAI;AAAA,UAC3C;AAAA,QACF,CAAC;AACD,iBAAS,eAAe,eAAe,EAAE,iBAAiB,SAAS,CAACA,WAAU;AAC5E,cAAI,KAAK,WAAY;AACrB,YAAE,QAAQ,EAAE,YAAY,QAAQ;AAChC,uBAAa,SAAS,EAAE,KAAK,aAAW;AACtC,iBAAK,cAAc,QAAQ,OAAO,eAAe,QAAQ,QAAQ,QAAQ;AACzE,mBAAO;AAAA,UACT,CAAC;AAAA,QACH,GAAG,KAAK;AAAA,MACV,CAAC;AAAA,IACH;AAAA,EAEF;;;AC1OA,MAAM,iBAAiB;AAAA,IACrB,GAAG;AAAA;AAAA,IACH,GAAG;AAAA;AAAA,IACH,GAAG,CAAC,eAAe,kBAAkB;AAAA;AAAA,IACrC,GAAG,CAAC,eAAe,gBAAgB,mBAAmB,oBAAoB,WAAW;AAAA;AAAA,IACrF,GAAG,CAAC,eAAe,kBAAkB;AAAA;AAAA,EACvC;AAGA,MAAO,wCAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,SAAS;AAAA,MACd,eAAe;AAAA,MACf,UAAU;AAAA,MACV,eAAe;AAAA,IACjB;AAAA,IACA,OAAO,UAAU;AAAA,MACf;AAAA,MAAY;AAAA,MACZ;AAAA,MAAmC;AAAA,MAAE;AAAA,MACrC;AAAA,MAA2C;AAAA,MAC3C;AAAA,MAAgB;AAAA,MAChB;AAAA,MACA;AAAA,MAAe;AAAA,MAAe;AAAA,MAAiB;AAAA,MAAoB;AAAA,MACnE;AAAA,MAAmB;AAAA,MACnB;AAAA,MAAwB;AAAA,MACxB;AAAA,MAAS;AAAA,MAAe;AAAA,MAAQ;AAAA,MAChC;AAAA,MAAuB;AAAA,MACvB;AAAA,MAAqB;AAAA,MACrB;AAAA,MAAuB;AAAA,IACzB;AAAA,IAEA,UAAU;AACR,UAAI,KAAK,mBAAmB;AAC1B,aAAK,mBAAmB,GAAG,IAAI;AAC/B,aAAK,eAAe,QAAQ;AAAA,MAC9B;AAAA,IACF;AAAA,IAEA,4BAA4B,QAAQ;AAClC,UAAI,eAAe;AACnB,UAAI,KAAK,iBAAiB,SAAS;AACjC,uBAAe;AAAA,MACjB,WAAW,KAAK,iBAAiB,QAAQ;AACvC,uBAAe;AAAA,MACjB,WAAW,KAAK,iBAAiB,OAAO;AACtC,uBAAe;AAAA,MACjB,WAAW,KAAK,iBAAiB,SAAS;AACxC,uBAAe;AAAA,MACjB,WAAW,KAAK,iBAAiB,mBAAmB;AAClD,uBAAe;AAAA,MACjB;AACA,WAAK,mBAAmB,QAAQ;AAChC,WAAK,mBAAmB,cAAc,KAAK;AAAA,IAC7C;AAAA,IAEA,sBAAsBC,QAAO;AAC3B,UAAI,OAAO,KAAK,UAAU,EAAE,YAAY,EAAE,SAAS,KAAK,wBAAwB,MAAM,GAAG,oBAAoB,SAAS,iBAAiB,yBAAyB,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;AACjL,YAAMA,OAAM,OAAO,eAAe,GAAG,EAAE,QAAQ,QAAQ,SAAS,EAAE,gBAAgB,iCAAgC,GAAG,MAAM,KAAI,CAAC,EAC7H,KAAK,cAAY,SAAS,KAAK,CAAC,EAChC,KAAK,kBAAgB;AACpB,aAAK,8BAA8B,MAAM,aAAa,UAAU;AAChE,aAAK,8BAA8B,KAAK;AACxC,aAAK,8BAA8B,MAAM;AACzC,aAAK,8BAA8B,KAAK;AACxC,aAAK,8BAA8B,UAAU,OAAO,QAAQ;AAAA,MAC9D,CAAC,EACA,MAAM,SAAO;AAAA,MAAC,CAAC;AAAA,IACpB;AAAA,IAEA,wBAAwBA,QAAO;AAC7B,UAAI,OAAO,KAAK,UAAU,EAAE,YAAY,EAAE,SAAS,KAAK,0BAA0B,MAAM,GAAG,oBAAoB,SAAS,iBAAiB,yBAAyB,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;AACnL,YAAMA,OAAM,OAAO,cAAc,GAAG,EAAE,QAAQ,QAAQ,SAAS,EAAE,gBAAgB,iCAAgC,GAAG,MAAM,KAAI,CAAC,EAC5H,KAAK,cAAY,SAAS,KAAK,CAAC,EAChC,KAAK,kBAAgB;AACpB,aAAK,gCAAgC,MAAM,aAAa,UAAU;AAClE,aAAK,gCAAgC,KAAK;AAC1C,aAAK,gCAAgC,MAAM;AAC3C,aAAK,gCAAgC,KAAK;AAC1C,aAAK,gCAAgC,UAAU,OAAO,QAAQ;AAAA,MAChE,CAAC,EACA,MAAM,SAAO;AAAA,MAAC,CAAC;AAAA,IACpB;AAAA,IAEA,uBAAuBA,QAAO;AAC5B,UAAI,KAAK,4BAA4B;AACnC,aAAK,wBAAwB,QAAQA,OAAM,OAAO,gBAAgB;AAAA,MACpE;AAAA,IACF;AAAA,IAEA,yBAAyBA,QAAO;AAC9B,UAAI,KAAK,8BAA8B;AACrC,aAAK,0BAA0B,QAAQA,OAAM,OAAO,gBAAgB;AAAA,MACtE;AAAA,IACF;AAAA,IAEA,WAAWA,QAAO;AAChB,UAAI,KAAK,2CAA2C;AAClD,YAAI,CAAC,KAAK,kCAAkC;AAC1C,eAAK,mCAAmC,IAAc,MAAM,KAAK,wCAAwC,EAAE,UAAU,MAAM,CAAC;AAAA,QAC9H;AACA,YAAI,KAAK,kCAAkC;AACzC,eAAK,2CAA2C,YAAYA,OAAM,OAAO,MAAM;AAC/E,eAAK,8CAA8C,YAAYA,OAAM,OAAO,SAAS;AACrF,eAAK,mDAAmD,OAAOA,OAAM,OAAO,aAAa;AACzF,eAAK,iCAAiC,KAAK;AAAA,QAC7C;AAAA,MACF;AAAA,IACF;AAAA,IAEA,oBAAoBA,QAAO;AACzB,UAAI,eAAe,KAAK,kBAAkBA,MAAK;AAC/C,WAAK,mBAAmB,cAAc,IAAI;AAAA,IAC5C;AAAA,IAEA,mBAAmB,cAAc,cAAc;AAC7C,UAAI,gBAAgB,GAAG;AAErB,YAAI,KAAK,uBAAuB;AAC9B,eAAK,mBAAmB,UAAU,OAAO,QAAQ;AACjD,eAAK,wBAAwB,OAAO;AACpC,eAAK,wBAAwB,WAAW;AAAA,QAC1C;AACA,aAAK,gBAAgB;AACrB,aAAK,eAAe;AACpB,aAAK,iBAAiB;AACtB,aAAK,0BAA0B;AAAA,MACjC,WAAW,gBAAgB,GAAG;AAE5B,aAAK,iBAAiB;AACtB,aAAK,eAAe;AACpB,aAAK,iBAAiB;AACtB,aAAK,0BAA0B;AAC/B,YAAI,KAAK,0BAA0B;AACjC,eAAK,sBAAsB,UAAU,OAAO,QAAQ;AAAA,QACtD;AAAA,MACF,WAAW,gBAAgB,GAAG;AAE5B,aAAK,iBAAiB;AACtB,aAAK,gBAAgB;AACrB,aAAK,iBAAiB;AACtB,aAAK,0BAA0B;AAC/B,YAAI,KAAK,sBAAsB;AAC7B,gBAAM,kBAAkB,KAAK,YAAY,qCAAqC,KAAK,SAAS,OAAO;AACnG,cAAI,iBAAiB;AACnB,4BAAgB,gBAAgB;AAAA,UAClC;AACA,eAAK,sBAAsB,UAAU,OAAO,QAAQ;AACpD,eAAK,kBAAkB,UAAU,OAAO,QAAQ;AAChD,eAAK,kBAAkB,WAAW;AAClC,eAAK,WAAW,WAAW;AAC3B,eAAK,kBAAkB,UAAU,OAAO,QAAQ;AAChD,eAAK,kBAAkB,UAAU,OAAO,QAAQ;AAChD,cAAI,KAAK,qBAAqB;AAC5B,iBAAK,iBAAiB,WAAW;AAAA,UACnC;AAAA,QACF;AAAA,MACF,WAAW,gBAAgB,GAAG;AAE5B,aAAK,iBAAiB;AACtB,aAAK,gBAAgB;AACrB,aAAK,eAAe;AACpB,aAAK,0BAA0B;AAC/B,YAAI,KAAK,sBAAsB;AAC7B,gBAAM,kBAAkB,KAAK,YAAY,qCAAqC,KAAK,SAAS,OAAO;AACnG,cAAI,iBAAiB;AACnB,4BAAgB,UAAU;AAAA,UAC5B;AACA,eAAK,gBAAgB,UAAU,OAAO,QAAQ;AAC9C,eAAK,kBAAkB,UAAU,OAAO,QAAQ;AAChD,eAAK,YAAY,UAAU,OAAO,QAAQ;AAC1C,eAAK,WAAW,WAAW;AAC3B,cAAI,KAAK,wBAAwB;AAC/B,iBAAK,oBAAoB,UAAU,OAAO,QAAQ;AAClD,iBAAK,uBAAuB,UAAU,OAAO,QAAQ;AACrD,iBAAK,8BAA8B,UAAU,OAAO,QAAQ;AAAA,UAC9D;AACA,cAAI,KAAK,qBAAqB;AAC5B,iBAAK,iBAAiB,WAAW;AAAA,UACnC;AAAA,QACF;AAAA,MACF,WAAW,gBAAgB,GAAG;AAE5B,aAAK,iBAAiB;AACtB,aAAK,gBAAgB;AACrB,aAAK,eAAe;AACpB,aAAK,iBAAiB;AACtB,YAAI,KAAK,+BAA+B;AAEtC,eAAK,2BAA2B,UAAU,OAAO,QAAQ;AAAA,QAC3D;AACA,YAAI,KAAK,wBAAwB;AAC/B,eAAK,oBAAoB,UAAU,OAAO,QAAQ;AAClD,eAAK,uBAAuB,UAAU,OAAO,QAAQ;AACrD,eAAK,8BAA8B,UAAU,IAAI,QAAQ;AAAA,QAC3D;AAAA,MACF;AACA,UAAI,cAAc;AAChB,aAAK,mBAAmB,YAAY;AAAA,MACtC;AAAA,IACF;AAAA,IAEA,mBAAmB;AACjB,UAAI,KAAK,uBAAuB;AAC9B,aAAK,mBAAmB,UAAU,IAAI,QAAQ;AAC9C,aAAK,wBAAwB,OAAO;AACpC,aAAK,wBAAwB,gBAAgB,UAAU;AAAA,MACzD;AAAA,IACF;AAAA,IAEA,kBAAkB;AAChB,UAAI,KAAK,0BAA0B;AACjC,aAAK,sBAAsB,UAAU,IAAI,QAAQ;AAAA,MACnD;AAAA,IACF;AAAA,IAEA,iBAAiB;AACf,UAAI,KAAK,sBAAsB;AAC7B,cAAM,kBAAkB,KAAK,YAAY,qCAAqC,KAAK,SAAS,OAAO;AACnG,YAAI,iBAAiB;AACnB,0BAAgB,mBAAmB;AAAA,QACrC;AACA,aAAK,sBAAsB,UAAU,IAAI,QAAQ;AACjD,aAAK,kBAAkB,UAAU,IAAI,QAAQ;AAC7C,aAAK,kBAAkB,gBAAgB,UAAU;AACjD,aAAK,WAAW,gBAAgB,UAAU;AAC1C,aAAK,kBAAkB,UAAU,IAAI,QAAQ;AAC7C,aAAK,kBAAkB,UAAU,IAAI,QAAQ;AAC7C,YAAI,KAAK,qBAAqB;AAC5B,eAAK,iBAAiB,WAAW;AAAA,QACnC;AAAA,MACF;AAAA,IACF;AAAA,IAEA,mBAAmB;AACjB,UAAI,KAAK,sBAAsB;AAC7B,cAAM,kBAAkB,KAAK,YAAY,qCAAqC,KAAK,SAAS,OAAO;AACnG,YAAI,iBAAiB;AACnB,0BAAgB,aAAa;AAAA,QAC/B;AACA,aAAK,gBAAgB,UAAU,IAAI,QAAQ;AAC3C,aAAK,kBAAkB,UAAU,IAAI,QAAQ;AAC7C,aAAK,YAAY,UAAU,IAAI,QAAQ;AACvC,aAAK,WAAW,gBAAgB,UAAU;AAC1C,YAAI,KAAK,wBAAwB;AAC/B,eAAK,oBAAoB,UAAU,IAAI,QAAQ;AACjD,eAAK,uBAAuB,UAAU,IAAI,QAAQ;AAAA,QAClD;AACA,YAAI,KAAK,qBAAqB;AAC5B,eAAK,iBAAiB,WAAW;AAAA,QACnC;AAAA,MACF;AAAA,IACF;AAAA,IAEA,4BAA4B;AAC1B,UAAI,KAAK,+BAA+B;AACtC,aAAK,2BAA2B,UAAU,IAAI,QAAQ;AACtD,YAAI,KAAK,wBAAwB;AAC/B,eAAK,oBAAoB,UAAU,IAAI,QAAQ;AAC/C,eAAK,uBAAuB,UAAU,IAAI,QAAQ;AAAA,QACpD;AAAA,MACF;AAAA,IACF;AAAA,IAEA,mBAAmB,cAAc;AAC/B,UAAI,CAAC,GAAG,CAAC,EAAE,SAAS,YAAY,GAAG;AAEjC,iBAAS,cAAc,wBAAwB,EAAE,UAAU;AAC3D,iBAAS,cAAc,wBAAwB,EAAE,WAAW;AAC5D,iBAAS,cAAc,wBAAwB,EAAE,UAAU;AAC3D,iBAAS,cAAc,wBAAwB,EAAE,WAAW;AAC5D,iBAAS,cAAc,wBAAwB,EAAE,UAAU;AAC3D,iBAAS,cAAc,wBAAwB,EAAE,WAAW;AAC5D,iBAAS,cAAc,yBAAyB,EAAE,UAAU;AAC5D,iBAAS,cAAc,yBAAyB,EAAE,WAAW;AAC7D,iBAAS,cAAc,2BAA2B,EAAE,UAAU;AAC9D,iBAAS,cAAc,2BAA2B,EAAE,WAAW;AAC/D,iBAAS,cAAc,4BAA4B,EAAE,UAAU;AAC/D,iBAAS,cAAc,4BAA4B,EAAE,WAAW;AAChE,iBAAS,cAAc,yBAAyB,EAAE,UAAU;AAC5D,iBAAS,cAAc,yBAAyB,EAAE,WAAW;AAC7D,iBAAS,cAAc,6BAA6B,EAAE,UAAU;AAChE,iBAAS,cAAc,6BAA6B,EAAE,WAAW;AACjE,iBAAS,cAAc,0BAA0B,EAAE,UAAU;AAC7D,iBAAS,cAAc,0BAA0B,EAAE,WAAW;AAC9D,YAAI,KAAK,oBAAoB;AAC3B,mBAAS,cAAc,sBAAsB,EAAE,UAAU;AACzD,mBAAS,cAAc,sBAAsB,EAAE,WAAW;AAAA,QAC5D,OAAO;AACL,mBAAS,cAAc,sBAAsB,EAAE,UAAU;AACzD,mBAAS,cAAc,sBAAsB,EAAE,WAAW;AAAA,QAC5D;AACA,aAAK,iBAAiB,YAAY;AAClC,YAAI,KAAK,8BAA8B;AACrC,eAAK,0BAA0B,UAAU;AAAA,QAC3C;AAAA,MACF,WAAW,gBAAgB,GAAG;AAE5B,iBAAS,cAAc,wBAAwB,EAAE,UAAU;AAC3D,iBAAS,cAAc,wBAAwB,EAAE,WAAW;AAC5D,iBAAS,cAAc,wBAAwB,EAAE,UAAU;AAC3D,iBAAS,cAAc,wBAAwB,EAAE,WAAW;AAC5D,iBAAS,cAAc,wBAAwB,EAAE,UAAU;AAC3D,iBAAS,cAAc,wBAAwB,EAAE,WAAW;AAC5D,iBAAS,cAAc,yBAAyB,EAAE,UAAU;AAC5D,iBAAS,cAAc,yBAAyB,EAAE,WAAW;AAC7D,iBAAS,cAAc,2BAA2B,EAAE,UAAU;AAC9D,iBAAS,cAAc,2BAA2B,EAAE,WAAW;AAC/D,iBAAS,cAAc,4BAA4B,EAAE,UAAU;AAC/D,iBAAS,cAAc,4BAA4B,EAAE,WAAW;AAChE,iBAAS,cAAc,yBAAyB,EAAE,UAAU;AAC5D,iBAAS,cAAc,yBAAyB,EAAE,WAAW;AAC7D,iBAAS,cAAc,6BAA6B,EAAE,UAAU;AAChE,iBAAS,cAAc,6BAA6B,EAAE,WAAW;AACjE,iBAAS,cAAc,0BAA0B,EAAE,UAAU;AAC7D,iBAAS,cAAc,0BAA0B,EAAE,WAAW;AAC9D,iBAAS,cAAc,sBAAsB,EAAE,UAAU;AACzD,iBAAS,cAAc,sBAAsB,EAAE,WAAW;AAC1D,aAAK,iBAAiB,YAAY;AAClC,YAAI,KAAK,8BAA8B;AACrC,eAAK,0BAA0B,UAAU;AAAA,QAC3C;AAAA,MACF,WAAW,gBAAgB,GAAG;AAE5B,iBAAS,cAAc,wBAAwB,EAAE,UAAU;AAC3D,iBAAS,cAAc,wBAAwB,EAAE,WAAW;AAC5D,iBAAS,cAAc,wBAAwB,EAAE,UAAU;AAC3D,iBAAS,cAAc,wBAAwB,EAAE,WAAW;AAC5D,iBAAS,cAAc,wBAAwB,EAAE,UAAU;AAC3D,iBAAS,cAAc,wBAAwB,EAAE,WAAW;AAC5D,iBAAS,cAAc,yBAAyB,EAAE,UAAU;AAC5D,iBAAS,cAAc,yBAAyB,EAAE,WAAW;AAC7D,iBAAS,cAAc,2BAA2B,EAAE,UAAU;AAC9D,iBAAS,cAAc,2BAA2B,EAAE,WAAW;AAC/D,iBAAS,cAAc,4BAA4B,EAAE,UAAU;AAC/D,iBAAS,cAAc,4BAA4B,EAAE,WAAW;AAChE,iBAAS,cAAc,yBAAyB,EAAE,UAAU;AAC5D,iBAAS,cAAc,yBAAyB,EAAE,WAAW;AAC7D,iBAAS,cAAc,6BAA6B,EAAE,UAAU;AAChE,iBAAS,cAAc,6BAA6B,EAAE,WAAW;AACjE,iBAAS,cAAc,0BAA0B,EAAE,UAAU;AAC7D,iBAAS,cAAc,0BAA0B,EAAE,WAAW;AAC9D,iBAAS,cAAc,sBAAsB,EAAE,UAAU;AACzD,iBAAS,cAAc,sBAAsB,EAAE,WAAW;AAC1D,aAAK,iBAAiB,YAAY;AAClC,YAAI,KAAK,8BAA8B;AACrC,eAAK,0BAA0B,UAAU;AAAA,QAC3C;AAAA,MACF,WAAW,gBAAgB,GAAG;AAE5B,iBAAS,cAAc,wBAAwB,EAAE,UAAU;AAC3D,iBAAS,cAAc,wBAAwB,EAAE,WAAW;AAC5D,iBAAS,cAAc,wBAAwB,EAAE,UAAU;AAC3D,iBAAS,cAAc,wBAAwB,EAAE,WAAW;AAC5D,iBAAS,cAAc,wBAAwB,EAAE,UAAU;AAC3D,iBAAS,cAAc,wBAAwB,EAAE,WAAW;AAC5D,iBAAS,cAAc,yBAAyB,EAAE,UAAU;AAC5D,iBAAS,cAAc,yBAAyB,EAAE,WAAW;AAC7D,iBAAS,cAAc,2BAA2B,EAAE,UAAU;AAC9D,iBAAS,cAAc,2BAA2B,EAAE,WAAW;AAC/D,iBAAS,cAAc,4BAA4B,EAAE,UAAU;AAC/D,iBAAS,cAAc,4BAA4B,EAAE,WAAW;AAChE,iBAAS,cAAc,yBAAyB,EAAE,UAAU;AAC5D,iBAAS,cAAc,yBAAyB,EAAE,WAAW;AAC7D,iBAAS,cAAc,6BAA6B,EAAE,UAAU;AAChE,iBAAS,cAAc,6BAA6B,EAAE,WAAW;AACjE,iBAAS,cAAc,0BAA0B,EAAE,UAAU;AAC7D,iBAAS,cAAc,0BAA0B,EAAE,WAAW;AAC9D,iBAAS,cAAc,sBAAsB,EAAE,UAAU;AACzD,iBAAS,cAAc,sBAAsB,EAAE,WAAW;AAC1D,aAAK,iBAAiB,YAAY;AAClC,YAAI,KAAK,8BAA8B;AACrC,eAAK,0BAA0B,UAAU;AAAA,QAC3C;AAAA,MACF;AAAA,IACF;AAAA,IAEA,iBAAiB,cAAc;AAC7B,YAAM,UAAU,eAAe,YAAY;AAC3C,WAAK,gBAAgB,QAAQ,SAAO;AAClC,cAAMA,SAAQ,IAAI,QAAQ;AAC1B,YAAI,WAAW,QAAQ,QAAQ,SAASA,MAAK,GAAG;AAC9C,cAAI,UAAU,OAAO,QAAQ;AAAA,QAC/B,OAAO;AACL,cAAI,UAAU,IAAI,QAAQ;AAAA,QAC5B;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,4BAA4BA,QAAO;AACjC,UAAI,aAAa,KAAK,kBAAkBA,MAAK;AAC7C,UAAI,CAAC,WAAW,SAAS,EAAE,WAAW,GAAG,GAAG;AAC1C,qBAAa,MAAM;AAAA,MACrB;AACA,WAAK,gCAAgC,QAAQ;AAAA,IAC/C;AAAA,IAEA,kBAAkBA,QAAO;AACvB,eAAS,iBAAiB,uBAAuB,EAAE,QAAQ,aAAW,QAAQ,QAAQ,EAAE;AACxF,eAAS,iBAAiB,2BAA2B,EAAE,QAAQ,aAAW,QAAQ,UAAU,IAAI;AAAA,IAClG;AAAA,IAEA,kBAAkBA,QAAO;AACvB,aAAO,OAAO,CAAC,GAAGA,OAAM,OAAO,eAAe,EAAE,IAAI,YAAU,OAAO,KAAK,EAAE,CAAC,CAAC;AAAA,IAChF;AAAA,EACF;;;AClZA,MAAO,2BAAP,cAA6B,WAAW;AAAA,IACtC,OAAO,SAAS;AAAA,MACd,eAAe;AAAA,MACf,aAAa;AAAA,MACb,UAAU;AAAA,MACV,uBAAuB;AAAA,MACvB,0BAA0B;AAAA;AAAA,MAE1B,sBAAsB;AAAA,IACxB;AAAA,IACA,OAAO,UAAU;AAAA,MACf;AAAA,MAAS;AAAA,MAAkB;AAAA,MAAe;AAAA,MAC1C;AAAA,MAAY;AAAA,MACZ;AAAA,MAAsB;AAAA,MAAwB;AAAA,MAC9C;AAAA,MACA;AAAA,MAA2B;AAAA,MAC3B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,mBAAmB;AAAA,MACjB;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,MAClE;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,MAClE;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,IAClD;AAAA,IACA,eAAe;AAAA,MACb;AAAA,MAAM;AAAA,MAAM;AAAA,MAAM;AAAA,IACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,uCAAuC,QAAQ;AAC7C,WAAK,gBAAgB;AAAA,IACvB;AAAA,IAEA,kCAAkC,QAAQ;AACxC,WAAK,gBAAgB;AAAA,IACvB;AAAA,IAEA,8BAA8B;AAC5B,WAAK,gBAAgB;AAAA,IACvB;AAAA,IAEA,kCAAkC;AAChC,WAAK,gBAAgB;AAIrB,WAAK,qBAAqB,KAAK,wBAAwB,KAAK,kBAAkB,QAC1E,KAAK,uBAAuB,UAAU,IACtC;AAAA,IACN;AAAA,IAEA,qBAAqBC,QAAO;AAC1B,WAAK,yBAAyB,8BAAa,KAAK,mBAAmB;AAAA,QACjE,gBAAgB,KAAK;AAAA,QACrB,eAAe,KAAK;AAAA,QACpB,cAAc,KAAK;AAAA,MACrB,CAAC;AACD,WAAK,mBAAmB,SAAS,eAAeA,OAAM,OAAO,OAAO,CAAC,EAAE,cAAc,sBAAsB;AAAA,IAC7G;AAAA,IAEA,wBAAwB,QAAQ;AAC9B,UAAI,KAAK,mBAAmB;AAC1B,YAAI,KAAK,eAAe,SAAS,GAAG;AAClC,eAAK,gBAAgB;AAAA,QACvB,WAAW,KAAK,eAAe,SAAS,KAAK,KAAK,eAAe,SAAS,GAAG;AAC3E,eAAK,UAAU;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AAAA,IAEA,sCAAsC,QAAQ;AAC5C,WAAK,oBAAoB;AAAA,IAC3B;AAAA,IAEA,YAAY;AACV,UAAI,KAAK,gBAAgB;AACvB,aAAK,mBAAmB,8BAAa,KAAK,aAAa;AAAA,UACrD,gBAAgB,KAAK;AAAA,UACrB,eAAe,KAAK;AAAA,UACpB,cAAc,KAAK;AAAA,QACrB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IAEA,0BAA0BA,QAAO;AAC/B,UAAI,KAAK,gBAAgB;AACvB,YAAI,kBAAkB,KAAK,iBAAiB,cAAc,KAAK,8BAAa,YAAY,UAClE,KAAK,iBAAiB,cAAc,KAAK,8BAAa,YAAY,cAClE,KAAK,iBAAiB,cAAc,KAAK,8BAAa,YAAY;AACxF,YAAI,KAAK,iBAAiB,cAAc,KAAK,iBAAiB;AAC5D,eAAK,YAAY,UAAU,OAAO,eAAe;AACjD,eAAK,YAAY,UAAU,IAAI,aAAa;AAC5C,cAAI,KAAK,oBAAqB,MAAK,iBAAiB,WAAW;AAC/D,cAAI,SAAS,eAAeA,OAAM,OAAO,aAAa,CAAC,GAAG;AACxD,qBAAS,eAAeA,OAAM,OAAO,aAAa,CAAC,EAAE,QAAQ,KAAK,iBAAiB,UAAU;AAAA,UAC/F;AAAA,QACF,OAAO;AACL,eAAK,YAAY,UAAU,OAAO,aAAa;AAC/C,eAAK,YAAY,UAAU,IAAI,eAAe;AAC9C,cAAI,KAAK,oBAAqB,MAAK,iBAAiB,WAAW;AAC/D,cAAI,SAAS,eAAeA,OAAM,OAAO,aAAa,CAAC,GAAG;AACxD,qBAAS,eAAeA,OAAM,OAAO,aAAa,CAAC,EAAE,QAAQ;AAAA,UAC/D;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAEA,eAAe;AACb,UAAI,KAAK,kBAAkB;AACzB,aAAK,iBAAiB,QAAQ;AAC9B,aAAK,mBAAmB;AAAA,MAC1B;AAAA,IACF;AAAA,IAEA,kBAAkB;AAChB,UAAI,KAAK,sBAAsB;AAC7B,aAAK,yBAAyB,8BAAa,KAAK,mBAAmB;AAAA,UACjE,gBAAgB,KAAK;AAAA,UACrB,eAAe,KAAK;AAAA,UACpB,cAAc,KAAK;AAAA,QACrB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IAEA,oBAAoBA,QAAO;AACzB,UAAI,KAAK,sBAAsB;AAC7B,YAAI,kBAAkB,KAAK,uBAAuB,cAAc,KAAK,8BAAa,YAAY,UAC1E,KAAK,uBAAuB,cAAc,KAAK,8BAAa,YAAY;AAC5F,YAAI,KAAK,uBAAuB,mBAAmB,KAAK,KAAK,uBAAuB,mBAAmB,EAAE,MAAM,KAAK,MAAM;AAGxH,4BAAkB,KAAK,uBAAuB,cAAc,KAAK,8BAAa,YAAY;AAAA,QAC5F;AACA,YAAI,KAAK,uBAAuB,cAAc,KAAK,iBAAiB;AAClE,eAAK,kBAAkB,UAAU,OAAO,eAAe;AACvD,eAAK,kBAAkB,UAAU,IAAI,aAAa;AAClD,cAAI,KAAK,oBAAqB,MAAK,iBAAiB,WAAW;AAC/D,cAAI,SAAS,eAAeA,OAAM,OAAO,aAAa,CAAC,GAAG;AACxD,qBAAS,eAAeA,OAAM,OAAO,aAAa,CAAC,EAAE,QAAQ,KAAK,uBAAuB,UAAU;AAAA,UACrG;AAGA,eAAK,6BAA6B,SAAS,eAAeA,OAAM,OAAO,aAAa,CAAC,EAAE,KAAK;AAAA,QAC9F,OAAO;AAEL,cAAI,KAAK,wBAAuB;AAC9B,iBAAK,sBAAsB;AAC3B,iBAAK,oBAAoB,WAAW;AACpC,iBAAK,oBAAoB,YAAY;AAAA,UACvC;AAEA,eAAK,kBAAkB,UAAU,OAAO,aAAa;AACrD,eAAK,kBAAkB,UAAU,IAAI,eAAe;AACpD,cAAI,KAAK,oBAAqB,MAAK,iBAAiB,WAAW;AAC/D,cAAI,SAAS,eAAeA,OAAM,OAAO,aAAa,CAAC,GAAG;AACxD,qBAAS,eAAeA,OAAM,OAAO,aAAa,CAAC,EAAE,QAAQ;AAAA,UAC/D;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAEA,8BAA8BA,QAAO;AACnC,UAAI,kBAAkB,KAAK,uBAAuB,cAAc,KAAK,8BAAa,YAAY,UAC1E,KAAK,uBAAuB,cAAc,KAAK,8BAAa,YAAY;AAC5F,UAAI,KAAK,uBAAuB,mBAAmB,KAAK,KAAK,uBAAuB,mBAAmB,EAAE,MAAM,KAAK,MAAM;AAGxH,0BAAkB,KAAK,uBAAuB,cAAc,KAAK,8BAAa,YAAY;AAAA,MAC5F;AACA,UAAI,KAAK,uBAAuB,cAAc,KAAK,iBAAiB;AAClE,QAAAA,OAAM,OAAO,UAAU,OAAO,eAAe;AAC7C,QAAAA,OAAM,OAAO,UAAU,IAAI,aAAa;AACxC,aAAK,iBAAiB,WAAW;AACjC,YAAI,SAAS,eAAeA,OAAM,OAAO,aAAa,CAAC,GAAG;AACxD,mBAAS,eAAeA,OAAM,OAAO,aAAa,CAAC,EAAE,QAAQ,KAAK,uBAAuB,UAAU;AAAA,QACrG;AAAA,MACF,OAAO;AACL,QAAAA,OAAM,OAAO,UAAU,OAAO,aAAa;AAC3C,QAAAA,OAAM,OAAO,UAAU,IAAI,eAAe;AAC1C,aAAK,iBAAiB,WAAW;AACjC,YAAI,SAAS,eAAeA,OAAM,OAAO,aAAa,CAAC,GAAG;AACxD,mBAAS,eAAeA,OAAM,OAAO,aAAa,CAAC,EAAE,QAAQ;AAAA,QAC/D;AAAA,MACF;AAAA,IACF;AAAA,IAEA,qBAAqB;AACnB,UAAI,KAAK,wBAAwB;AAC/B,aAAK,uBAAuB,QAAQ;AACpC,aAAK,yBAAyB;AAAA,MAChC;AAAA,IACF;AAAA,IAEA,sBAAsB;AACpB,UAAI,UAAU;AACd,UAAI,KAAK,6BAA6B;AACpC,kBAAU,KAAK,wBAAwB,KAAK,4BAA4B,KAAK;AAAA,MAC/E;AACA,WAAK,wBAAwB,8BAAa,KAAK,aAAa;AAAA,QAC1D,gBAAgB;AAAA,QAChB,eAAe,CAAC,MAAM,MAAM,MAAM,IAAI;AAAA,QACtC,uBAAuB;AAAA,QACvB,eAAe,CAAC,KAAK;AAAA,MACvB,CAAC;AACD,UAAI,UAAU;AACd,UAAI,KAAK,+BAA+B;AACtC,kBAAU,KAAK,wBAAwB,KAAK,8BAA8B,KAAK;AAAA,MACjF;AACA,WAAK,0BAA0B,8BAAa,KAAK,sBAAsB;AAAA,QACrE,gBAAgB;AAAA,QAChB,eAAe,CAAC,MAAM,MAAM,MAAM,IAAI;AAAA,QACtC,uBAAuB;AAAA,QACvB,eAAe,CAAC,KAAK;AAAA,MACvB,CAAC;AAAA,IAIH;AAAA,IAEA,wBAAwB,kBAAkB;AACxC,UAAI,oBAAoB,QAAW;AACjC,eAAO;AAAA,MACT;AACA,UAAI,KAAK,qBAAqB;AAC5B,YAAI,KAAK,oBAAoB,qBAAqB;AAChD,cAAI,iBAAiB,WAAW,KAAK,GAAG;AACtC,mBAAO;AAAA,UACT,WAAW,iBAAiB,WAAW,KAAK,GAAG;AAC7C,mBAAO;AAAA,UACT;AAAA,QACF,OAAO;AACL,cAAI,iBAAiB,WAAW,KAAK,GAAG;AACtC,mBAAO;AAAA,UACT,WAAW,iBAAiB,WAAW,KAAK,GAAG;AAC7C,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IAEA,4BAA4B;AAC1B,UAAI,KAAK,qBAAqB;AAC5B,YAAI,KAAK,oBAAoB,qBAAqB;AAChD,iBAAO,CAAC,MAAM,IAAI;AAAA,QACpB,OAAO;AACL,iBAAO,CAAC,MAAM,IAAI;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAAA,IAEA,gCAAgC;AAC9B,UAAI,KAAK,YAAY,UAAU,SAAS,aAAa,KACnD,KAAK,qBAAqB,UAAU,SAAS,aAAa,GAAG;AAC7D,YAAI,KAAK,mCAAmC;AAC1C,eAAK,+BAA+B,WAAW;AAAA,QACjD;AACA,aAAK,iBAAiB,WAAW;AAAA,MACnC,OAAO;AACL,YAAI,KAAK,mCAAmC;AAC1C,eAAK,+BAA+B,WAAW;AAAA,QACjD;AACA,aAAK,iBAAiB,WAAW;AAAA,MACnC;AAAA,IACF;AAAA,IAEA,qCAAqCA,QAAO;AAC1C,UAAI,cAAcA,OAAM,OAAO;AAC/B,UAAI;AACJ,UAAIA,OAAM,OAAO,QAAQ,aAAa,KAAK,SAAS;AAClD,sBAAc,KAAK,sBAAsB,UAAU;AACnD,qBAAa,KAAK;AAAA,MACpB,WAAWA,OAAM,OAAO,QAAQ,aAAa,KAAK,kBAAkB;AAClE,sBAAc,KAAK,wBAAwB,UAAU;AACrD,qBAAa,KAAK;AAAA,MACpB,OAAO;AACL,eAAO;AAAA,MACT;AACA,UAAI,SAAS,KAAK,6BAA6BA,OAAM,QAAQ,YAAY,WAAW;AACpF,WAAK,8BAA8B;AACnC,aAAO;AAAA,IACT;AAAA,IAEA,6BAA6B,cAAc,iBAAiB,aAAa;AACvE,YAAM,cAAc,CAAC,KAAK,KAAK,KAAK,GAAG;AACvC,YAAM,cAAc,CAAC,KAAK,KAAK,KAAK,KAAK,GAAG;AAC5C,YAAM,cAAc,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;AACnE,UAAIC,KAAI;AACR,UAAI,MAAM,YAAY;AACtB,UAAI,cAAc;AAClB,UAAI,WAAW;AACf,UAAI,cAAc;AAClB,UAAI,SAAS;AACb,aAAOA,KAAI,KAAK;AACd,YAAIA,KAAI,KAAK,YAAY,SAAS,KAAK,EAAEA,MAAK,KAAK,YAAYA,EAAC,KAAK,MAAM;AACzE,wBAAc,cAAc,YAAYA,EAAC;AAAA,QAC3C,WAAW,eAAe,MAAM;AAC9B,cAAI,SAAS,UAAU,GAAG;AACxB,uBAAW,WAAW,YAAYA,EAAC;AAAA,UACrC,OAAO;AACL,0BAAc,cAAc,YAAYA,EAAC;AACzC,gBAAI,YAAY,UAAU,KAAK,EAAE,QAAQ,UAAU,WAAW,IAAI,IAAI;AACpE,kBAAI,EAAE,YAAY,CAAC,KAAK,OAAO,YAAY,CAAC,KAAK,MAAM;AACrD,yBAAS;AAAA,cACX;AAAA,YACF,WAAW,YAAY,UAAU,KAAK,YAAY,CAAC,KAAK,OAAO,YAAY,CAAC,KAAK,KAAK;AACpF,uBAAU,KAAK,2BAA2B,QAAQ,WAAW,IAAI;AAAA,YACnE,WAAW,YAAY,UAAU,KAAK,YAAY,CAAC,KAAK,OAAO,YAAY,CAAC,KAAK,OAAO,YAAY,CAAC,KAAK,OAAO,YAAY,CAAC,KAAK,KAAK;AACtI,uBAAU,KAAK,2BAA2B,QAAQ,WAAW,IAAI;AAAA,YACnE;AAAA,UACF;AAAA,QACF,WAAW,eAAe,MAAM;AAC9B,cAAI,SAAS,UAAU,GAAG;AACxB,uBAAW,WAAW,YAAYA,EAAC;AAAA,UACrC,OAAO;AACL,0BAAc,cAAc,YAAYA,EAAC;AACzC,gBAAI,YAAY,UAAU,KAAK,EAAE,QAAQ,UAAU,WAAW,IAAI,IAAI;AACpE,uBAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF,WAAW,eAAe,MAAM;AAC9B,cAAI,SAAS,SAAS,GAAG;AACvB,uBAAW,WAAW,YAAYA,EAAC;AAAA,UACrC,OAAO;AACL,0BAAc,cAAc,YAAYA,EAAC;AACzC,gBAAI,SAAS,UAAU,KAAK,YAAY,UAAU,KAAK,YAAY,UAAU,IAAI;AAC/E,uBAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF,WAAW,eAAe,MAAM;AAC9B,cAAI,SAAS,SAAS,GAAG;AACvB,uBAAW,WAAW,YAAYA,EAAC;AAAA,UACrC,OAAO;AACL,0BAAc,cAAc,YAAYA,EAAC;AACzC,gBAAI,SAAS,UAAU,KAAK,YAAY,UAAU,KAAK,EAAE,QAAQ,UAAU,WAAW,IAAI,IAAI;AAC5F,uBAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF;AACA,QAAAA;AAAA,MACF;AACA,UAAI,QAAQ;AACV,qBAAa,UAAU,OAAO,eAAe;AAC7C,qBAAa,UAAU,IAAI,aAAa;AACxC,wBAAgB,QAAQ;AAAA,MAC1B,OAAO;AACL,qBAAa,UAAU,OAAO,aAAa;AAC3C,qBAAa,UAAU,IAAI,eAAe;AAC1C,wBAAgB,QAAQ;AAAA,MAC1B;AACA,aAAO;AAAA,IACT;AAAA,IAEA,MAAM,6BAA6B,mBAAmB;AACpD,UAAI,CAAC,KAAK,uBAAwB;AAElC,WAAK,sBAAsB;AAE3B,UAAI;AACF,cAAM,WAAW,MAAM;AAAA,UACrB,wBAAwB,mBAAmB,iBAAiB,CAAC;AAAA,UAC7D,EAAE,SAAS,EAAE,UAAU,mBAAmB,EAAE;AAAA,QAC9C;AACA,YAAI,KAAK,wBAAwB,kBAAmB;AAEpD,YAAI,CAAC,SAAS,IAAI;AAChB,eAAK,oBAAoB,YAAY;AACrC,kBAAQ,MAAM,8CAA8C,SAAS,UAAU;AAC/E;AAAA,QACF;AAEA,cAAM,OAAO,MAAM,SAAS,KAAK;AACjC,YAAI,KAAK,wBAAwB,kBAAmB;AAEpD,aAAK,uBAAuB,KAAK,iBAAiB,iBAAiB;AAAA,MACrE,SAASC,QAAO;AACd,gBAAQ,MAAM,8CAA8CA,MAAK;AAAA,MACnE;AAAA,IACF;AAAA,IAEA,uBAAuB,gBAAgB,mBAAmB;AACxD,YAAM,SAAS,KAAK;AACpB,YAAM,MAAM,KAAK,iBAAiB,iBAAiB;AACnD,YAAMC,WAAU,OAAO,CAAC,eAAe,SAAS,GAAG,IAC/C,CAAC,GAAG,gBAAgB,GAAG,EAAE,KAAK,CAACC,IAAGC,OAAMD,KAAIC,EAAC,IAC7C;AAGJ,YAAM,WAAW,OAAO,SAAS,OAAO,OAAO,EAAE;AAEjD,aAAO,YAAY;AACnB,MAAAF,SAAQ,QAAQ,YAAU;AACxB,cAAM,SAAS,IAAI,OAAO,KAAK,mBAAmB,MAAM,GAAG,MAAM;AACjE,eAAO,WAAW,OAAO,MAAM,MAAM;AACrC,eAAO,IAAI,MAAM;AAAA,MACnB,CAAC;AACD,aAAO,WAAWA,SAAQ,WAAW;AAAA,IACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,iBAAiB,mBAAmB;AAClC,UAAI,CAAC,KAAK,0BAA2B,QAAO;AAC5C,aAAO,sBAAsB,KAAK,qBAAqB,KAAK,4BAA4B;AAAA,IAC1F;AAAA;AAAA;AAAA,IAIA,mBAAmB,eAAe;AAChC,iBAAW,CAAC,OAAO,EAAE,KAAK,OAAO,QAAQ,KAAK,6BAA6B,GAAG;AAC5E,YAAI,MAAM,cAAe,QAAO;AAAA,MAClC;AACA,aAAO,OAAO,aAAa;AAAA,IAC7B;AAAA,IAEA,2BAA2BH,QAAO;AAEhC,UAAI,KAAK,8BAA8B;AACrC,aAAK,0BAA0B,UAAU,OAAO,QAAQ;AAAA,MAC1D;AAEA,UAAI,KAAK,wBAAwB;AAC/B,aAAK,oBAAoB,UAAU,IAAI,QAAQ;AAAA,MACjD;AAAA,IACF;AAAA,EACF;;;ACtbA,MAAO,2BAAP,cAA6B,WAAW;AAAA,IACtC,sBAAsBM,QAAO;AAC3B,eAAS,iBAAiB,yBAAyB,EAAE,QAAQ,aAAW;AACtE,YAAI,QAAQ,QAAQ,gBAAgB,KAAKA,OAAM,OAAO,MAAM,GAAG;AAC7D,cAAI,CAAC,QAAQ,UAAU,SAAS,WAAW,GAAG;AAC5C,oBAAQ,MAAM;AAAA,UAChB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;;;ACZA,MAAIC,kBAAiB;AAAA,IACnB;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,MAAM,KAAK,IAAI;AAAA;AAAA;AAAA,MAGhB;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,KAAK;AAAA,MACN;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,KAAK;AAAA,MACN;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,KAAK;AAAA,MACN;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,GAAG;AAAA;AAAA,MAEJ;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,KAAK;AAAA,MACN;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,KAAK;AAAA,MACN;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,KAAK;AAAA,MACN;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,KAAK;AAAA,MACN;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,KAAK,KAAK,GAAG;AAAA,IAChB;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,KAAK;AAAA,MACN;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,KAAK,OAAO;AAAA;AAAA,MAEb;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,KAAK,OAAO;AAAA;AAAA,MAEb;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,KAAK;AAAA,MACN;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,OAAO,OAAO,KAAK;AAAA,MACpB;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,KAAK,IAAI;AAAA;AAAA,MAEV;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,KAAK;AAAA,MACN;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,KAAK;AAAA,MACN;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA;AAAA,MAEA,CAAC,QAAQ,QAAQ,QAAQ,SAAS,OAAO;AAAA,MACzC;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,QAAQ,SAAS,QAAQ,QAAQ,MAAM;AAAA,MACxC;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,GAAG;AAAA;AAAA,IAEN;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,OAAO,KAAK;AAAA,MACb;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA;AAAA,MAEA,CAAC,QAAQ,QAAQ,SAAS,SAAS,SAAS,QAAQ,QAAQ,MAAM;AAAA,MAClE;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,MAAM,GAAG;AAAA;AAAA,MAEV;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,QAAQ,OAAO,OAAO,MAAM;AAAA,MAC7B;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,KAAK;AAAA,MACN;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,KAAK,GAAG;AAAA;AAAA,MAET;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,KAAK;AAAA,MACN;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,KAAK,GAAG;AAAA;AAAA,IAEX;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,OAAO,KAAK;AAAA,MACb;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,IAAI;AAAA;AAAA,MAEL;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,KAAK;AAAA,MACN;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,KAAK;AAAA,MACN;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,CAAC,KAAK;AAAA,MACN;AA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IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,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IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAqBA,MAAI,qBAAqB;AAAA,IACvB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,I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",
  "names": ["consumer", "error", "event", "consumer", "s", "consumer", "s", "subscription", "a", "isArray", "Symbol", "Symbol", "hasOwnProperty", "e", "Symbol", "isArray", "isObject", "isObject", "isFunction", "uid", "e", "isFunction", "isObject", "hasOwnProperty", "hasOwnProperty", "hasOwnProperty", "index", "eq", "eq", "index", "index", "index", "index", "Map", "Map", "map", "index", "cache", "cache", "match", "index", "Symbol", "isArray", "INFINITY", "toString", "isArray", "toString", "INFINITY", "index", "get", "hasOwnProperty", "hasOwnProperty", "MAX_SAFE_INTEGER", "MAX_SAFE_INTEGER", "isArray", "index", "has", "Map", "e", "eq", "index", "Buffer", "Uint8Array", "Uint8Array", "index", "isObject", "isFunction", "Buffer", "hasOwnProperty", "isPlainObject", "e", "eq", "hasOwnProperty", "index", "n", "index", "isArray", "hasOwnProperty", "isObject", "hasOwnProperty", "isArray", "isFunction", "isObject", "isPlainObject", "isObject", "identity", "start", "index", "identity", "identity", "start", "eq", "isObject", "index", "index", "merge", "index", "index", "index", "index", "cache", "Set", "noop", "set", "index", "Set", "noop", "INFINITY", "index", "set", "uniq", "start", "end", "index", "start", "end", "toString", "toString", "capitalize", "index", "toString", "toString", "callback", "capitalize", "camelCase", "index", "MAX_SAFE_INTEGER", "n", "index", "isObject", "INFINITY", "sign", "toString", "repeat", "n", "index", "offset", "Symbol", "isArray", "index", "index", "index", "othValue", "map", "index", "Symbol", "Uint8Array", "eq", "isArray", "index", "hasOwnProperty", "hasOwnProperty", "index", "Promise", "WeakMap", "Map", "Promise", "Set", "WeakMap", "isArray", "hasOwnProperty", "index", "isObject", "get", "identity", "isArray", "index", "index", "collection", "index", "order", "identity", "isArray", "index", "collection", "sortBy", "index", "zipObject", "start", "end", "index", "start", "end", "range", "jQuery", "window", "indexOf", "toString", "toType", "i", "version", "callback", "clone", "arr", "a", "b", "first", "second", "matches", "cache", "tokenize", "match", "fn", "value", "compare", "document", "m", "elements", "e", "simple", "start", "dir", "diff", "text", "hash", "skip", "map", "preFilter", "find", "n", "elem", "self", "l", "add", "index", "resolve", "deferred", "error", "camelCase", "Data", "data", "nodeName", "event", "t", "swap", "col", "name", "end", "p", "Animation", "length", "to", "max", "location", "s", "val", "completed", "done", "offset", "top", "method", "type", "jQuery", "$", "undefined", "d", "i", "l", "a", "o", "defaults", "e", "event", "date", "offset", "left", "top", "right", "dates", "range", "months", "month", "before", "fn", "p", "m", "s", "console", "root", "factory", "this", "__webpack_require__", "exports", "definition", "key", "o", "Object", "defineProperty", "enumerable", "get", "obj", "prop", "prototype", "hasOwnProperty", "call", "AutoNumericEnum", "freeze", "allowedTagList", "configurable", "writable", "fromCharCodeKeyCode", "keyName", "Unidentified", "AndroidDefault", "Alt", "AltGr", "CapsLock", "Ctrl", "Fn", "FnLock", "Hyper", "Meta", "OSLeft", "OSRight", "Command", "NumLock", "ScrollLock", "Shift", "Super", "Symbol", "SymbolLock", "Enter", "Tab", "Space", "LeftArrow", "UpArrow", "RightArrow", "DownArrow", "End", "Home", "PageUp", "PageDown", "Backspace", "Clear", "Copy", "CrSel", "Cut", "Delete", "EraseEof", "ExSel", "Insert", "Paste", "Redo", "Undo", "Accept", "Again", "Attn", "Cancel", "ContextMenu", "Esc", "Execute", "Find", "Finish", "Help", "Pause", "Play", "Props", "Select", "ZoomIn", "ZoomOut", "BrightnessDown", "BrightnessUp", "Eject", "LogOff", "Power", "PowerOff", "PrintScreen", "Hibernate", "Standby", "WakeUp", "Compose", "Dead", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "Print", "num0", "num1", "num2", "num3", "num4", "num5", "num6", "num7", "num8", "num9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "Semicolon", "Equal", "Comma", "Hyphen", "Minus", "Plus", "Dot", "Slash", "Backquote", "LeftParenthesis", "RightParenthesis", "LeftBracket", "RightBracket", "Backslash", "Quote", "numpad0", "numpad1", "numpad2", "numpad3", "numpad4", "numpad5", "numpad6", "numpad7", "numpad8", "numpad9", "NumpadDot", "NumpadDotAlt", "NumpadMultiply", "NumpadPlus", "NumpadMinus", "NumpadSubtract", "NumpadSlash", "NumpadDotObsoleteBrowsers", "NumpadMultiplyObsoleteBrowsers", "NumpadPlusObsoleteBrowsers", "NumpadMinusObsoleteBrowsers", "NumpadSlashObsoleteBrowsers", "_allFnKeys", "_someNonPrintableKeys", "_directionKeys", "AutoNumericHelper", "value", "str", "String", "lowercaseValue", "toLowerCase", "reference", "_typeof", "Array", "isArray", "isNaN", "parseFloat", "isFinite", "char", "test", "latinConvertedNumber", "arabicToLatinNumbers", "isNumber", "parseInt", "func", "needle", "isString", "indexOf", "array", "isUndefined", "arr", "toString", "Error", "Element", "domElement", "isElement", "tagName", "decimalPart", "_slicedToArray", "split", "length", "Math", "abs", "result", "lastIndexOf", "event", "which", "keyCode", "isSeleniumBot", "keyCodeNumber", "potentialResult", "isUndefinedOrNullOrEmpty", "fromCharCode", "tem", "ua", "navigator", "userAgent", "match", "name", "version", "exec", "replace", "appName", "appVersion", "splice", "window", "webdriver", "numberOrNumericString", "negativeSignCharacter", "arguments", "checkEverywhere", "contains", "isNegativeStrict", "numericString", "charAt", "valueString", "leftBracket", "rightBracket", "concat", "string", "index", "newCharacter", "substr", "settings", "max", "minimumValue", "min", "maximumValue", "formattedNumberString", "caretPosition", "decimalCharacter", "numberDotOrNegativeSign", "RegExp", "numberDotAndNegativeSignCount", "rawNumberString", "caretPositionInRawValue", "formattedNumberStringIndex", "formattedNumberStringSize", "rawNumberStringSize", "rawNumberStringIndex", "character", "text", "charCounter", "characterCount", "element", "isSelectionStartUndefined", "position", "selectionStart", "error", "selectionInfo", "getSelection", "getRangeAt", "start", "startOffset", "end", "endOffset", "selectionEnd", "isInputElement", "setSelectionRange", "isNull", "firstChild", "range", "document", "createRange", "setStart", "setEnd", "selection", "removeAllRanges", "addRange", "message", "console", "warn", "WheelEvent", "wheelEvent", "isWheelEvent", "deltaY", "throwError", "type", "decimalPlaces", "_String$split4", "integerPart", "stepPlace", "round", "isAddition", "decimalPlacesRawValue", "Number", "forceDecimalPlaces", "absValue", "offset", "rawValueMinimumOffset", "pow", "minimumOffsetFirstDecimalPlaceIndex", "indexFirstNonZeroDecimalPlace", "roundToNearest", "lengthValue", "decimalPlacesLimit", "modifyAndRoundToNearestAuto", "arabicNumbers", "returnANumber", "parseDecimalCharacter", "parseThousandSeparator", "charCodeAt", "resultAsNumber", "eventName", "detail", "bubbles", "cancelable", "CustomEvent", "createEvent", "initCustomEvent", "dispatchEvent", "nL", "slice", "search", "xc", "yc", "xNeg", "strLength", "random", "domElementOrSelector", "querySelector", "textContent", "setCustomValidity", "_extends", "separator", "removeData", "skipFirstWord", "map", "word", "toUpperCase", "join", "nodeType", "Node", "ELEMENT_NODE", "DOCUMENT_NODE", "DOCUMENT_FRAGMENT_NODE", "TEXT_NODE", "nodeValue", "excludedElements", "_this", "filter", "isInArray", "_numericString$split2", "trimmedDecimalPart", "hoveredElements", "_toConsumableArray", "querySelectorAll", "arrLength", "_ref", "Set", "apply", "_len", "mapObjects", "_key", "Map", "reduce", "as", "entries", "find", "val", "numericValue", "NaN", "_val$split2", "exponent", "isNegative", "isNegativeExponent", "_value$split2", "int", "float", "insertAt", "repeat", "Evaluator", "ast", "subtree", "evaluate", "left", "right", "ASTNode", "node", "Token", "_createClass", "symbol", "Lexer", "textLength", "token", "_skipSpaces", "isDigit", "_getNumber", "startIndex", "substring", "Parser", "customDecimalCharacter", "lexer", "getNextToken", "_exp", "termNode", "_term", "exprNode", "_moreExp", "createNode", "createLeaf", "factorNode", "_factor", "termsNode", "_moreTerms", "expression", "factor", "createUnaryNode", "_match", "expected", "getIndex", "options", "AutoNumeric", "arg1", "arg2", "arg3", "_AutoNumeric$_setArgu", "_setArgumentsValues", "initialValue", "userOptions", "defaultRawValue", "_setSettings", "_checkElement", "savedCancellableValue", "historyTable", "historyTableIndex", "onGoingRedo", "parentForm", "_getParentForm", "runOnce", "formatOnPageLoad", "_formatDefaultValueOnPageLoad", "valueToSet", "emptyInputBehavior", "zero", "focus", "press", "always", "_setElementAndRawValue", "hasEventListeners", "isContentEditable", "noEventListeners", "_createEventListeners", "_setWritePermissions", "_saveInitialValues", "storageNamePrefix", "_setPersistentStorageName", "validState", "isFocused", "isDropEvent", "isEditing", "rawValueOnFocus", "internalModification", "attributeToWatch", "_getAttributeToWatch", "getterSetter", "getOwnPropertyDescriptor", "__proto__", "_addWatcher", "createLocalList", "_createLocalList", "constructor", "_addToGlobalList", "global", "set", "newValue", "autoNumericLocalList", "forEach", "aNObject", "setUnformatted", "callback", "push", "_executeCallback", "getNumericString", "getFormatted", "getNumber", "getLocalized", "reformat", "unformat", "unformatLocalized", "forcedOutputFormat", "update", "newOptions", "isPristine", "checkOnlyRawValue", "clear", "forceClearAll", "remove", "wipe", "nuke", "has", "domElementOrAutoNumericObject", "addObject", "otherAutoNumericObject", "getAutoNumericElement", "_hasLocalList", "mergedLocalLists", "otherANLocalList", "_getLocalList", "size", "mergeMaps", "_addToLocalList", "_setLocalList", "removeObject", "keepCurrentANObject", "initialCompleteLocalList", "empty", "keepEachANObjectInItsOwnList", "elements", "getList", "reset", "rawValue", "defaultSettings", "allowDecimalPadding", "alwaysAllowDecimalCharacter", "caretPositionOnFocus", "_deleteLocalList", "currencySymbol", "currencySymbolPlacement", "decimalCharacterAlternative", "warning", "showWarnings", "decimalPlacesShownOnBlur", "decimalPlacesShownOnFocus", "defaultValueOverride", "digitalGroupSpacing", "digitGroupSeparator", "divisorWhenUnfocused", "eventBubbles", "eventIsCancelable", "failOnUnknownOption", "formulaMode", "historySize", "invalidClass", "isCancellable", "leadingZero", "modifyValueOnUpDownArrow", "modifyValueOnWheel", "negativeBracketsTypeOnBlur", "negativePositiveSignPlacement", "negativePositiveSignBehavior", "noEvents", "addEvents", "_removeEventListeners", "onInvalidPaste", "outputFormat", "overrideMinMaxLimits", "positiveSignCharacter", "rawValueDivisor", "readOnly", "roundingMethod", "saveValueToSessionStorage", "symbolWhenUnfocused", "selectNumberOnly", "selectOnFocus", "serializeSpaces", "showOnlyNumbersOnFocus", "showPositiveSign", "styleRules", "suffixText", "unformatOnHover", "unformatOnSubmit", "upDownStep", "valuesToStrings", "watchExternalChanges", "wheelOn", "wheelStep", "_triggerEvent", "events", "initialized", "getElementValue", "newRawValue", "aNElement", "initialValueHtmlAttribute", "scientificToDecimal", "getAttribute", "_this2", "compositioning", "_onFocusInFunc", "_onFocusIn", "_onFocusInAndMouseEnterFunc", "_onFocusInAndMouseEnter", "_onFocusFunc", "_onFocus", "_onKeydownFunc", "_onKeydown", "_onKeypressFunc", "_onKeypress", "_onKeyupFunc", "_onKeyup", "_onFocusOutAndMouseLeaveFunc", "_onFocusOutAndMouseLeave", "_onPasteFunc", "_onPaste", "_onWheelFunc", "_onWheel", "_onDropFunc", "_onDrop", "_onKeydownGlobalFunc", "_onKeydownGlobal", "_onKeyupGlobalFunc", "_onKeyupGlobal", "_onCompositionstartFunc", "_onCompositionstart", "_onCompositionendFunc", "_onCompositionend", "addEventListener", "_setupFormListener", "_doesGlobalListExists", "removeEventListener", "_removeFormListener", "_this3", "_onFormSubmitFunc", "_onFormSubmit", "_onFormResetFunc", "_onFormReset", "_hasParentFormCounter", "_incrementParentFormCounter", "_initializeFormCounterToOne", "_storeFormHandlerFunction", "anCount", "_getParentFormCounter", "_getFormHandlerFunction", "submitFn", "resetFn", "_removeFormDataSetInfo", "_decrementParentFormCounter", "dataset", "formElement", "_getFormElement", "_doesFormHandlerListExists", "_createFormHandlerList", "formHandlerName", "randomString", "anFormHandler", "aNFormHandlerMap", "_hasFormHandlerFunction", "_getFormHandlerKey", "removeAttribute", "_setReadOnly", "_setReadWrite", "setAttribute", "_this4", "_this$getterSetter", "setter", "getter", "_this5", "_this$getterSetter2", "isEmptyHistoryTable", "_historyTableCurrentValueUsed", "addNewHistoryState", "nextHistoryStateIndex", "arrayTrim", "getElementSelection", "_historyTableForget", "check", "undoInfo", "setElementSelection", "_historyTableUndoOrRedo", "numberOfEntriesToForget", "shiftedAway", "shift", "indexToUse", "_this6", "positive", "_addCSSClass", "_removeCSSClass", "negative", "ranges", "userDefined", "userObject", "isFunction", "classes", "callbackResult", "userClass", "isInt", "cssClassName", "classList", "add", "_this7", "_len2", "_key2", "originalSettings", "cloneObject", "optionsToUse", "optionObject", "_isPreDefinedOptionValid", "_getOptionObject", "_updateEventListeners", "saveChangeToHistory", "_saveValueToPersistentStorage", "_toNumericValue", "setValue", "_this$constructor$_ch2", "_checkIfInRangeWithOverrideOption", "minTest", "maxTest", "_checkValuesToStrings", "isZeroOrHasNoValue", "forcedRawValue", "_roundRawValue", "_trimLeadingAndTrailingZeros", "_getRawValueToFormat", "_roundFormattedValueShownOnFocus", "_roundFormattedValueShownOnBlur", "_modifyNegativeSignAndDecimalCharacterForFormattedValue", "_addGroupSeparators", "_setValidOrInvalidState", "_triggerRangeEvents", "_removeValueFromPersistentStorage", "strippedValue", "_removeBrackets", "normalizedValue", "_stripAllNonNumberCharacters", "_isWithinRangeWithOverrideOption", "_this8", "oldRawValue", "_isUserManuallyEditingTheValue", "rawValueModified", "_parseStyleRules", "requestAnimationFrame", "_historyTableAdd", "newElementValue", "sendFormattedEvent", "oldElementValue", "setElementValue", "formatted", "oldValue", "isBoolean", "_setElementValue", "_setRawValue", "_checkValuesToStringsArray", "valuesToStringsKeys", "triggerEvent", "trimPaddedZerosFromDecimalPlaces", "_toLocale", "outputFormatToUse", "isEmptyString", "keep", "selectNumber", "_defaultSelectAll", "unformattedValue", "valueLen", "currencySymbolSize", "negLen", "suffixTextLen", "suffix", "prefix", "isPositive", "none", "elementValue", "decimalCount", "parentNode", "domElementToDetach", "otherAnElement", "_removeFromLocalList", "reFormat", "valueOrElement", "optionOverride", "_formatOrUnformatOther", "stringOrElement", "isFormatting", "valueOrStringOrElement", "settingsToUse", "_cloneAndMergeSettings", "format", "domElementOrArrayOrString", "_this9", "attached", "returnASingleAutoNumericObject", "domElementsArray", "currentLocalList", "autoNumericObjectsArray", "originalCreateLocalListSetting", "newAutoNumericElement", "temporaryForcedOptions", "_removeWatcher", "_removeFromGlobalList", "removeChild", "newParentForm", "oldANChildren", "_getFormAutoNumericChildren", "_this10", "inputElementsList", "nonInputContentEditableElementsList", "_getContenteditableElements", "arrayUnique", "isManagedByAutoNumeric", "hasAttribute", "elementsInside", "elementsOutside", "form", "_serializeNumericString", "_serializeFormatted", "_serializeLocalized", "_serializeNumericStringArray", "_serializeFormattedArray", "_serializeLocalizedArray", "JSON", "stringify", "formArrayNumericString", "formArrayFormatted", "formArrayLocalized", "_getChildANInputElement", "input", "formUnformat", "submit", "formReformat", "formNumericString", "formFormatted", "formUnformatLocalized", "formLocalized", "formJsonNumericString", "formJsonFormatted", "formJsonLocalized", "localList", "autoNumericObject", "_len3", "newSettings", "_key3", "_len4", "_key4", "predefinedOption", "_mergeSettings", "_updatePredefinedOptions", "getPredefinedOptions", "French", "NorthAmerican", "British", "Swiss", "Japanese", "Spanish", "Chinese", "Brazilian", "htmlAttribute", "camelize", "isTrailingNegative", "isNegativeSignAllowed", "doNotSelect", "isValueNegative", "totalLength", "valueSize", "integerSize", "hasDecimalChar", "offsetDecimalChar", "decimalLeft", "decimalRight", "signToUse", "positiveNegativeSignSize", "minRangeExceeded", "maxRangeExceeded", "setInvalidState", "invalidValue", "setValidState", "correctedValue", "invalid", "minRangeOk", "_isMinimumRangeRespected", "maxRangeOk", "_isMaximumRangeRespected", "_setValidState", "_setInvalidState", "originalDigitGroupSeparator", "originalCurrencySymbol", "originalSuffixText", "rawValueStorageName", "id", "decodeURIComponent", "sessionStorage", "setItem", "getItem", "removeItem", "altKey", "_unformatAltHovered", "hoveredWithAlt", "_reformatAltHovered", "elementValueToSet", "rawValueToFormat", "roundedValue", "_roundFormattedValueShownOnFocusOrBlur", "onlyNumbers", "valueOnFocus", "lastVal", "isEmptyValue", "_isElementValueEmptyOrOnlyTheNegativeSign", "orderedValue", "_orderValueCurrencySymbolAndSuffixText", "orderedValueTest", "target", "_saveCancellableValue", "select", "_initialCaretPosition", "formula", "invalidFormula", "validFormula", "eventKey", "getHoveredElement", "_updateEventKeyInfo", "keydownEventCounter", "initialValueOnFirstKeydown", "initialRawValueOnFirstKeydown", "_exitFormulaMode", "_acceptNonPrintableKeysInFormulaMode", "_enterFormulaMode", "upDownArrowAction", "disabled", "processed", "preventDefault", "targetValue", "change", "_updateInternalProperties", "_processNonPrintableKeysAndShortcuts", "isDeletionAllowed", "_processCharacterDeletion", "_formatValue", "throwInput", "formulaChars", "_processCharacterInsertion", "ctrlKey", "shiftKey", "_historyTableRedo", "_historyTableUndo", "metaKey", "cutNumber", "_setCaretPosition", "skip", "valuePartsBeforePaste", "_saveRawValueForAndroid", "_stripAllNonNumberCharactersExceptCustomDecimalChar", "_convertToNumericString", "isRawValueNull", "_this$constructor$_ch4", "elementValueIsAlreadySet", "_roundValue", "_modifyNegativeSignAndDecimalCharacterForRawValue", "groupedValue", "never", "floats", "_onBlur", "rawPastedText", "eventTarget", "clipboardData", "getData", "explicitOriginalTarget", "initialFormattedValue", "selectionSize", "untranslatedPastedText", "_preparePastedText", "pastedRawValue", "isPasteNegative", "pastedText", "caretPositionOnInitialTextAfterPasting", "isPasteNegativeAndInitialValueIsPositive", "isInitialValueNegative", "leftFormattedPart", "rightFormattedPart", "setRawNegativeSign", "convertCharacterCountToIndexPosition", "countNumberCharactersOnTheCaretLeftSide", "leftPart", "rightPart", "leftPartContainedADot", "negativePasteOnNegativeNumber", "truncate", "minParse", "parseStr", "maxParse", "lastGoodKnownResult", "pastedTextIndex", "modifiedLeftPart", "_checkIfInRange", "lastGoodKnownResultIndex", "lastGoodKnownResultSize", "replaceCharAt", "ignore", "clamp", "indexSelectionEndInRawValue", "selectedText", "countCharInText", "valueHasBeenSet", "valueHasBeenClamped", "clampedValue", "clampToRangeLimits", "caretPositionInFormattedNumber", "findCaretPositionInFormattedNumber", "isUp", "isDown", "step", "currentUnformattedValue", "stepToUse", "addAndRoundToNearestAuto", "subtractAndRoundToNearestAuto", "_setSelection", "_wheelAndUpDownActions", "wheelAction", "hover", "scrollBy", "isDeltaYZero", "isWheelUpEvent", "isWheelDownEvent", "isWheelEventWithZeroDeltaY", "droppedText", "dataTransfer", "cleanedValue", "unformatOther", "previousValue", "_this11", "_unformatOnSubmit", "_this12", "_getDefaultValue", "setTimeout", "hoveredElement", "anElement", "eventInitDict", "keydownEvent", "KeyboardEvent", "keypressEvent", "keyupEvent", "currentElementTag", "_isElementTagSupported", "_isInputElement", "_isInputTypeSupported", "_isContentEditable", "currentValue", "forcedInitialValue", "trim", "unLocalizedCurrentValue", "_getValueFromPersistentStorage", "toStrip", "Infinity", "maximumValueIntegerPart", "minimumValueIntegerPart", "mIntPos", "mIntNeg", "keys", "_convertOldOptionsToNewOnes", "originalDecimalPlacesRawValue", "originalDecimalPlaces", "_calculateDecimalPlacesOnUpdate", "getDefaultConfig", "caretFix", "_transformOptionsValuesToDefaultTypes", "_runCallbacksFoundInTheSettingsObject", "_correctNegativePositiveSignPlacementOption", "_correctCaretPositionOnFocusAndSelectOnFocusOptions", "_setNegativePositiveSignPermissions", "_calculateDecimalPlacesOnInit", "_calculateVMinAndVMaxIntegerSizes", "_setTrailingNegativeSignInfo", "regex", "_cachesUsualRegularExpressions", "_setBrackets", "_calculateValuesToStringsKeys", "isEmptyObj", "validate", "_keepAnOriginalSettingsCopy", "_this$_getLeftAndRigh2", "_getLeftAndRightPartAroundTheSelection", "stripZeros", "deny", "aNegRegAutoStrip", "isPaste", "_this$_normalizeParts2", "_normalizeParts", "normalizedLeft", "normalizedRight", "normalizedNewValue", "_AutoNumeric$_checkIf2", "testValue", "_truncateDecimalPlaces", "valueToSetOnEmpty", "roundedValueToShow", "currencySymbolLen", "_this$_getSignPositio2", "_getSignPosition", "signPosition", "currencySymbolPosition", "oldParts", "_this$_getLeftAndRigh4", "_setValueParts", "_checkPaste", "_shouldSkipEventKey", "_expandSelectionOnSign", "_ref3", "_ref4", "isValNegative", "_this$_getUnformatted4", "_getUnformattedLeftAndRightPartAroundTheSelection", "_this$_getUnformatted2", "_this$_processCharact2", "_processCharacterDeletionIfTrailingNegativeSign", "_this$_getUnformatted6", "_isDecimalCharacterInsertionAllowed", "eventNumber", "subParts", "negativeSign", "leftReg", "leftAr", "signParts", "escapeChr", "escapedParts", "miniParts", "newLeft", "isArg1Element", "isArg1String", "isArg2Object", "isObject", "isArg2Array", "isArg2Number", "isNumberOrArabic", "isArg2PreDefinedOptionName", "isArg2Null", "isArg2EmptyString", "isArg3Object", "isArg3Array", "isArg3Null", "isArg3PreDefinedOptionName", "mergeOptions", "optionsArray", "_this13", "mergedOptions", "optionObjectOrPredefinedOptionString", "preDefinedOptionName", "predefinedOptions", "optionObjectOrPredefinedName", "stringsArray", "values", "formNode", "_this14", "inputList", "getElementsByTagName", "autoNumericInputs", "_isInGlobalList", "weakMapName", "WeakMap", "autoNumericGlobalListName", "_createWeakMap", "_createGlobalList", "_getFromGlobalList", "getSettings", "shouldExtendDefaultOptions", "originalOptions", "isOriginalOptionAnObject", "isTrueOrFalseString", "testPositiveInteger", "testNumericalCharacters", "testFloatOrIntegerAndPossibleNegativeSign", "testPositiveFloatOrInteger", "doNoForceCaretPosition", "comma", "dot", "normalSpace", "thinSpace", "narrowNoBreakSpace", "noBreakSpace", "noSeparator", "apostrophe", "arabicThousandsSeparator", "dotAbove", "privateUseTwo", "two", "twoThree", "twoScaled", "three", "four", "middleDot", "arabicDecimalSeparator", "decimalSeparatorKeySymbol", "_ref6", "ceiling", "floor", "_validateDecimalPlacesRawValue", "halfUpSymmetric", "halfUpAsymmetric", "halfDownSymmetric", "halfDownAsymmetric", "halfEvenBankersRounding", "upRoundAwayFromZero", "downRoundTowardZero", "toCeilingTowardPositiveInfinity", "toFloorTowardNegativeInfinity", "toNearest05", "toNearest05Alt", "upToNext05", "downToNext05", "parentheses", "brackets", "chevrons", "curlyBraces", "angleBrackets", "japaneseQuotationMarks", "halfBrackets", "whiteSquareBrackets", "quotationMarks", "guillemets", "allow", "number", "negativeDot", "negativeComma", "dotNegative", "commaNegative", "plus", "percent", "rule", "isValid", "optionsResult", "_this15", "numericStringOrDomElement", "_len5", "_key5", "_generateOptionsObjectFromOptionsArray", "isPositiveSignAllowed", "_checkValuesToStringsSettings", "formattedValue", "isNumberStrict", "_len6", "_key6", "_checkStringsToValuesSettings", "objectKeyLookup", "_settings$negativeBra2", "firstBracket", "lastBracket", "localizedValue", "localize", "_get", "getFunction", "_normalizeCurrencySuffixAndNegativeSignCharacters", "allowedAutoStrip", "numRegAutoStrip", "_s$split2", "modifiedIntegerPart", "stripReg", "_addBrackets", "rearrangeSignsAndValueOrder", "_mergeCurrencySignNegativePositiveSignAndValue", "_settings$negativeBra4", "convertToNumber", "temp", "hyphen", "locale", "signOnEmpty", "inputValue", "currentRawValue", "isNegativeWithBrackets", "decimalPlacesToRoundTo", "_inputValue$split2", "_inputValue$split4", "digitalGroup", "_toggleNegativeBracket", "roundedInputValue", "decimalPlacesNeeded", "_roundCloseTo05", "temporaryDecimalPlacesOverride", "_AutoNumeric$_prepare2", "_prepareValueForRounding", "decimalCharacterPosition", "inputValueHasNoDot", "_inputValue$split6", "roundedStrLength", "decimalPositionToUse", "checkDecimalPlaces", "inputValueRounded", "zeros", "_truncateZeros", "odd", "lastDigit", "inputValueArray", "_shouldRoundUp", "ceil", "modifiedDecimalPart", "valParse", "testMinMax", "_this$_checkIfInRange2", "_cleanValueForRangeParse", "useDefault", "additionalDecimalPlacesRawValue", "currentSettings", "decimalPlacesInOptions", "negativeSignReg", "oldOptionsConverter", "aSep", "nSep", "dGroup", "aDec", "altDec", "aSign", "pSign", "pNeg", "aSuffix", "oLimits", "vMax", "vMin", "mDec", "eDec", "scaleDecimal", "aStor", "mRound", "aPad", "nBracket", "wEmpty", "lZero", "aForm", "sNumber", "anDefault", "unSetOnSubmit", "outputType", "debug", "option", "parsedMinValue", "parsedMaxValue", "parsedValue", "eventKeyName", "isFnKeys", "isOSKeys", "isContextMenu", "isSomeNonPrintableKeys", "isOtherNonPrintableKeys", "isUnrecognizableKeys", "finalResult", "_this16", "intoAnArray", "formatType", "serializedSpaceCharacter", "nodeName", "selected", "encodeURIComponent", "checked", "valueResult", "anObject", "_serialize", "_defineProperty", "multiple", "rootElement", "exclude", "filterOut", "isInitialValueArrayAndNotEmpty", "secondArgumentIsInitialValueArray", "secondArgumentIsOptionArray", "typeOfFirstArrayElement", "thirdArgumentIsOptionArray", "initialValueArraySize", "isInitialValueNumber", "native", "alwaysAllow", "doNotAllow", "createList", "doNotCreateList", "currencySign", "austral", "australCentavo", "baht", "cedi", "cent", "colon", "cruzeiro", "dollar", "dong", "drachma", "dram", "european", "euro", "florin", "franc", "guarani", "hryvnia", "kip", "att", "lepton", "lira", "liraOld", "lari", "mark", "mill", "naira", "peseta", "peso", "pfennig", "pound", "real", "riel", "ruble", "rupee", "rupeeOld", "shekel", "shekelAlt", "taka", "tenge", "togrog", "won", "yen", "one", "five", "six", "doNotOverride", "percentage", "permille", "basisPoint", "null", "doesNotBubble", "isCancelable", "isNotCancelable", "fail", "doNotFormat", "enabled", "verySmall", "small", "medium", "large", "veryLarge", "insane", "MAX_SAFE_INTEGER", "cancellable", "notCancellable", "tenTrillions", "oneBillion", "modifyValue", "doNothing", "minus", "heavyMinus", "fullWidthHyphen", "circledMinus", "squaredMinus", "triangleMinus", "plusMinus", "minusPlus", "dotMinus", "minusTilde", "not", "toggle", "doNotToggle", "fullWidthPlus", "heavyPlus", "doublePlus", "triplePlus", "circledPlus", "squaredPlus", "trianglePlus", "dotPlus", "altHebrewPlus", "readWrite", "save", "doNotSave", "selectNumbersOnly", "selectAll", "showAll", "show", "hide", "positiveNegative", "range0To100With4Steps", "class", "evenOdd", "rangeSmallAndZero", "doNotUnformat", "keepCurrentValue", "progressive", "zeroDash", "oneAroundZero", "watch", "doNotWatch", "getOwnPropertyNames", "optionName", "valuesToStringObjectName", "japanese", "euroPos", "euroNeg", "euroSpace", "euroSpacePos", "euroSpaceNeg", "percentageEU2dec", "percentageEU2decPos", "percentageEU2decNeg", "percentageEU3dec", "percentageEU3decPos", "percentageEU3decNeg", "dollarPos", "dollarNeg", "dollarNegBrackets", "percentageUS2dec", "percentageUS2decPos", "percentageUS2decNeg", "percentageUS3dec", "percentageUS3decPos", "percentageUS3decNeg", "turkish", "Turkish", "dotDecimalCharCommaSeparator", "commaDecimalCharDotSeparator", "integer", "integerPos", "integerNeg", "floatPos", "floatNeg", "numeric", "numericPos", "numericNeg", "module", "define", "amd", "window", "document", "undefined", "round", "now", "fn", "each", "i", "e", "assign", "index", "extend", "merge", "a", "b", "DIRECTION_LEFT", "DIRECTION_RIGHT", "callback", "self", "session", "getCenter", "offset", "y", "start", "end", "t", "event", "Hammer", "add", "global", "callback", "isArray", "isObject", "a", "b", "isUndefined", "isNumber", "isDate", "map", "fn", "i", "extend", "format", "locale", "m", "t", "to", "from", "config", "warn", "isFunction", "set", "Locale", "now", "sign", "token", "ordinal", "diff", "u", "isLeapYear", "get", "daysInMonth", "localeData", "s", "n", "indexOf", "o", "y", "daysInYear", "d", "h", "M", "firstWeekOffset", "weekdays", "hours", "minutes", "names", "e", "rfc2822", "obsOffsets", "l", "match", "untruncateYear", "preprocessRFC2822", "defaults", "c", "tokens", "meridiem", "min", "max", "Duration", "years", "months", "weeks", "days", "seconds", "milliseconds", "offset", "add", "isString", "clone", "toString", "eras", "index", "clone$1", "round", "thresholds", "moment", "jQuery", "$", "start", "end", "range", "second", "daysInMonth", "dayOfWeek", "i", "col", "arrow", "m", "y", "index", "e", "title", "row", "cal", "callback", "extend", "i", "create", "fn", "range", "max", "min", "d", "str", "isArray", "indexOf", "requestAnimFrame", "Util.setOptions", "Util.create", "Util.extend", "Util.isArray", "Util.splitWords", "Util.falseFn", "index", "event", "l", "Util.stamp", "e", "y", "round", "a", "b", "min2", "max2", "Util.formatNum", "c", "zoom", "scale", "s", "Util.wrapNum", "p", "canvas", "svg", "DomEvent.preventDefault", "DomEvent.getPropagationPath", "now", "TRANSITION_END", "get", "getStyle", "style", "Util.trim", "offset", "DomEvent.on", "DomEvent.off", "type", "Util.indexOf", "DomUtil.getPosition", "Util.requestAnimFrame", "DomUtil.setPosition", "Util.cancelAnimFrame", "t", "Map", "Util.bind", "DomUtil.TRANSITION", "DomUtil.TRANSITION_END", "DomUtil.addClass", "from", "to", "r", "s2", "n", "u", "start", "S", "error", "DomUtil.remove", "DomUtil.create", "DomEvent.getMousePosition", "DomUtil.get", "DomUtil.getStyle", "remove", "DomEvent.isExternalTarget", "DomUtil.preventOutline", "callback", "left", "right", "DomUtil.removeClass", "DomUtil.TRANSFORM", "DomUtil.setTransform", "Control", "map", "control", "DomEvent.disableClickPropagation", "DomEvent.disableScrollPropagation", "DomUtil.empty", "DomEvent.stop", "Scale", "text", "preventOutline", "DomUtil.hasClass", "DomUtil.disableImageDrag", "DomUtil.disableTextSelection", "first", "DomUtil.getSizedParentNode", "DomUtil.getScale", "DomUtil.enableImageDrag", "DomUtil.enableTextSelection", "edge", "LineUtil._getBitCode", "LineUtil._getEdgeIntersection", "f", "LineUtil.isFlat", "p2", "layers", "point", "match", "marker", "icon", "shadow", "latLng", "DomUtil.setOpacity", "r2", "top", "bottom", "LineUtil._sqClosestPointOnSegment", "LineUtil.polylineCenter", "LineUtil.clipSegment", "LineUtil.simplify", "LineUtil.pointToSegmentDistance", "LineUtil._flat", "PolyUtil.polygonCenter", "PolyUtil.clipPolygon", "DomUtil.toFront", "DomUtil.toBack", "DomEvent.stopPropagation", "popup", "Tooltip", "tooltip", "Util.throttle", "compare", "y2", "latLngBounds", "Util.template", "Util.emptyImageUrl", "Renderer", "m", "order", "fill", "zoomDelta", "DomEvent.getWheelDelta", "debounce", "d2", "f", "g", "define", "module", "exports", "r", "e", "n", "t", "o", "i", "c", "u", "a", "p", "error", "loadScript", "resolve", "document", "match", "version", "EventEmitter", "event", "callback", "ExtendedPromise", "config", "uuid", "hex", "fn", "global", "__awaiter", "y", "loadStylesheet", "_a", "_b", "s", "clone", "min", "max", "main", "Framebus", "self", "dispatch", "m", "VERSION", "defaults", "adapters", "overrides", "index", "elements", "shadow", "paypal", "atob", "Modal", "noop", "initOptions", "top", "left", "offset", "parse", "b", "b2", "cancelEvent", "session", "VenmoDesktop", "removeListeners", "hash", "event", "resolve", "match", "i", "elements", "callback", "fn", "submitter", "config", "location", "left", "right", "error", "toCacheKey", "index", "cookie", "y", "clone", "defaults", "ctx", "morphChildren", "findBestMatch", "e", "morphNode", "_resolve", "createMorphContext", "normalizeElement", "normalizeParent", "session", "visit", "recentRequests", "Turbo", "document", "c", "createConsumer", "m", "event", "event", "submitter", "event", "left", "right", "application", "map", "error", "index", "match", "e", "callback", "fetch", "set", "callback", "match", "oldValue", "index", "left", "right", "error", "descriptors", "constructor", "extend", "a", "b", "application", "logger", "elements", "element", "c", "n", "resolve", "read", "write", "event", "i18n", "uniq", "n", "s", "i18n", "camelCase", "i18n", "BigNumber", "FORMAT", "b", "c", "e", "i", "round", "p", "n", "s", "a", "sign", "d", "r", "y", "m", "compare", "t", "format", "d2", "l", "min", "max", "RoundingModeMap", "repeat", "i18n", "interpolate", "i18n", "i18n", "locale", "left", "right", "zipObject", "i18n", "units", "sortBy", "exponent", "i18n", "max", "date", "match", "second", "i18n", "offset", "start", "end", "i18n", "t", "range", "diff", "i18n", "i18n", "defaultLocale", "interpolate", "merge", "callback", "override", "has", "get", "t", "e", "r", "a", "s", "n", "i", "o", "c", "u", "l", "d", "m", "h", "f", "g", "p", "y", "createPopper", "start", "start", "name", "style", "y", "getComputedStyle", "getComputedStyle", "window", "within", "min", "max", "toPaddingObject", "popperOffsets", "min", "max", "offset", "within", "effect", "y", "popper", "getComputedStyle", "effect", "window", "hash", "y", "y", "getComputedStyle", "getComputedStyle", "clippingParents", "getComputedStyle", "reference", "start", "popperOffsets", "offset", "placements", "placement", "a", "b", "placements", "placement", "i", "start", "_loop", "_i", "checks", "offset", "y", "popperOffsets", "offset", "min", "max", "start", "within", "map", "debounce", "fn", "resolve", "merged", "DEFAULT_OPTIONS", "defaultModifiers", "defaultOptions", "createPopper", "reference", "popper", "options", "m", "index", "fn", "debounce", "resolve", "state", "effect", "noopFn", "createPopper", "defaultModifiers", "createPopper", "elementMap", "Map", "set", "element", "key", "instance", "has", "instanceMap", "get", "size", "console", "error", "Array", "from", "keys", "remove", "delete", "MAX_UID", "MILLISECONDS_MULTIPLIER", "TRANSITION_END", "parseSelector", "selector", "window", "CSS", "escape", "replace", "match", "id", "toType", "object", "undefined", "Object", "prototype", "toString", "call", "toLowerCase", "getUID", "prefix", "Math", "floor", "random", "document", "getElementById", "getTransitionDurationFromElement", "transitionDuration", "transitionDelay", "getComputedStyle", "floatTransitionDuration", "Number", "parseFloat", "floatTransitionDelay", "split", "triggerTransitionEnd", "dispatchEvent", "Event", "isElement", "jquery", "nodeType", "getElement", "length", "querySelector", "isVisible", "getClientRects", "elementIsVisible", "getPropertyValue", "closedDetails", "closest", "summary", "parentNode", "isDisabled", "Node", "ELEMENT_NODE", "classList", "contains", "disabled", "hasAttribute", "getAttribute", "findShadowRoot", "documentElement", "attachShadow", "getRootNode", "root", "ShadowRoot", "noop", "reflow", "offsetHeight", "getjQuery", "jQuery", "body", "DOMContentLoadedCallbacks", "onDOMContentLoaded", "callback", "readyState", "addEventListener", "push", "isRTL", "dir", "defineJQueryPlugin", "plugin", "$", "name", "NAME", "JQUERY_NO_CONFLICT", "fn", "jQueryInterface", "Constructor", "noConflict", "execute", "possibleCallback", "args", "defaultValue", "executeAfterTransition", "transitionElement", "waitForTransition", "durationPadding", "emulatedDuration", "called", "handler", "target", "removeEventListener", "setTimeout", "getNextActiveElement", "list", "activeElement", "shouldGetNext", "isCycleAllowed", "listLength", "index", "indexOf", "max", "min", "namespaceRegex", "stripNameRegex", "stripUidRegex", "eventRegistry", "uidEvent", "customEvents", "mouseenter", "mouseleave", "nativeEvents", "Set", "makeEventUid", "uid", "getElementEvents", "bootstrapHandler", "event", "hydrateObj", "delegateTarget", "oneOff", "EventHandler", "off", "type", "apply", "bootstrapDelegationHandler", "domElements", "querySelectorAll", "domElement", "findHandler", "events", "callable", "delegationSelector", "values", "find", "normalizeParameters", "originalTypeEvent", "delegationFunction", "isDelegated", "typeEvent", "getTypeEvent", "addHandler", "wrapFunction", "relatedTarget", "handlers", "previousFunction", "removeHandler", "Boolean", "removeNamespacedHandlers", "namespace", "storeElementEvent", "handlerKey", "entries", "includes", "on", "one", "inNamespace", "isNamespace", "startsWith", "elementEvent", "slice", "keyHandlers", "trigger", "jQueryEvent", "bubbles", "nativeDispatch", "defaultPrevented", "isPropagationStopped", "isImmediatePropagationStopped", "isDefaultPrevented", "evt", "cancelable", "preventDefault", "obj", "meta", "value", "_unused", "defineProperty", "configurable", "normalizeData", "JSON", "parse", "decodeURIComponent", "normalizeDataKey", "chr", "Manipulator", "setDataAttribute", "setAttribute", "removeDataAttribute", "removeAttribute", "getDataAttributes", "attributes", "bsKeys", "dataset", "filter", "pureKey", "charAt", "getDataAttribute", "Config", "Default", "DefaultType", "Error", "_getConfig", "config", "_mergeConfigObj", "_configAfterMerge", "_typeCheckConfig", "jsonConfig", "constructor", "configTypes", "property", "expectedTypes", "valueType", "RegExp", "test", "TypeError", "toUpperCase", "VERSION", "BaseComponent", "_element", "_config", "Data", "DATA_KEY", "dispose", "EVENT_KEY", "propertyName", "getOwnPropertyNames", "_queueCallback", "isAnimated", "getInstance", "getOrCreateInstance", "eventName", "getSelector", "hrefAttribute", "trim", "map", "sel", "join", "SelectorEngine", "concat", "Element", "findOne", "children", "child", "matches", "parents", "ancestor", "prev", "previous", "previousElementSibling", "next", "nextElementSibling", "focusableChildren", "focusables", "el", "getSelectorFromElement", "getElementFromSelector", "getMultipleElementsFromSelector", "enableDismissTrigger", "component", "method", "clickEvent", "tagName", "EVENT_CLOSE", "EVENT_CLOSED", "CLASS_NAME_FADE", "CLASS_NAME_SHOW", "Alert", "close", "closeEvent", "_destroyElement", "each", "data", "DATA_API_KEY", "CLASS_NAME_ACTIVE", "SELECTOR_DATA_TOGGLE", "EVENT_CLICK_DATA_API", "Button", "toggle", "button", "EVENT_TOUCHSTART", "EVENT_TOUCHMOVE", "EVENT_TOUCHEND", "EVENT_POINTERDOWN", "EVENT_POINTERUP", "POINTER_TYPE_TOUCH", "POINTER_TYPE_PEN", "CLASS_NAME_POINTER_EVENT", "SWIPE_THRESHOLD", "endCallback", "leftCallback", "rightCallback", "Swipe", "isSupported", "_deltaX", "_supportPointerEvents", "PointerEvent", "_initEvents", "_start", "touches", "clientX", "_eventIsPointerPenTouch", "_end", "_handleSwipe", "_move", "absDeltaX", "abs", "direction", "add", "pointerType", "navigator", "maxTouchPoints", "ARROW_LEFT_KEY", "ARROW_RIGHT_KEY", "TOUCHEVENT_COMPAT_WAIT", "ORDER_NEXT", "ORDER_PREV", "DIRECTION_LEFT", "DIRECTION_RIGHT", "EVENT_SLIDE", "EVENT_SLID", "EVENT_KEYDOWN", "EVENT_MOUSEENTER", "EVENT_MOUSELEAVE", "EVENT_DRAG_START", "EVENT_LOAD_DATA_API", "CLASS_NAME_CAROUSEL", "CLASS_NAME_SLIDE", "CLASS_NAME_END", "CLASS_NAME_START", "CLASS_NAME_NEXT", "CLASS_NAME_PREV", "SELECTOR_ACTIVE", "SELECTOR_ITEM", "SELECTOR_ACTIVE_ITEM", "SELECTOR_ITEM_IMG", "SELECTOR_INDICATORS", "SELECTOR_DATA_SLIDE", "SELECTOR_DATA_RIDE", "KEY_TO_DIRECTION", "interval", "keyboard", "pause", "ride", "touch", "wrap", "Carousel", "_interval", "_activeElement", "_isSliding", "touchTimeout", "_swipeHelper", "_indicatorsElement", "_addEventListeners", "cycle", "_slide", "nextWhenVisible", "hidden", "_clearInterval", "_updateInterval", "setInterval", "_maybeEnableCycle", "to", "items", "_getItems", "activeIndex", "_getItemIndex", "_getActive", "order", "defaultInterval", "_keydown", "_addTouchEventListeners", "img", "endCallBack", "clearTimeout", "swipeConfig", "_directionToOrder", "_setActiveIndicatorElement", "activeIndicator", "newActiveIndicator", "elementInterval", "parseInt", "isNext", "nextElement", "nextElementIndex", "triggerEvent", "_orderToDirection", "slideEvent", "isCycling", "directionalClassName", "orderClassName", "completeCallBack", "_isAnimated", "clearInterval", "carousel", "slideIndex", "carousels", "EVENT_SHOW", "EVENT_SHOWN", "EVENT_HIDE", "EVENT_HIDDEN", "CLASS_NAME_COLLAPSE", "CLASS_NAME_COLLAPSING", "CLASS_NAME_COLLAPSED", "CLASS_NAME_DEEPER_CHILDREN", "CLASS_NAME_HORIZONTAL", "WIDTH", "HEIGHT", "SELECTOR_ACTIVES", "parent", "Collapse", "_isTransitioning", "_triggerArray", "toggleList", "elem", "filterElement", "foundElement", "_initializeChildren", "_addAriaAndCollapsedClass", "_isShown", "hide", "show", "activeChildren", "_getFirstLevelChildren", "startEvent", "activeInstance", "dimension", "_getDimension", "style", "complete", "capitalizedDimension", "scrollSize", "getBoundingClientRect", "selected", "triggerArray", "isOpen", "ESCAPE_KEY", "TAB_KEY", "ARROW_UP_KEY", "ARROW_DOWN_KEY", "RIGHT_MOUSE_BUTTON", "EVENT_KEYDOWN_DATA_API", "EVENT_KEYUP_DATA_API", "CLASS_NAME_DROPUP", "CLASS_NAME_DROPEND", "CLASS_NAME_DROPSTART", "CLASS_NAME_DROPUP_CENTER", "CLASS_NAME_DROPDOWN_CENTER", "SELECTOR_DATA_TOGGLE_SHOWN", "SELECTOR_MENU", "SELECTOR_NAVBAR", "SELECTOR_NAVBAR_NAV", "SELECTOR_VISIBLE_ITEMS", "PLACEMENT_TOP", "PLACEMENT_TOPEND", "PLACEMENT_BOTTOM", "PLACEMENT_BOTTOMEND", "PLACEMENT_RIGHT", "PLACEMENT_LEFT", "PLACEMENT_TOPCENTER", "PLACEMENT_BOTTOMCENTER", "autoClose", "boundary", "display", "offset", "popperConfig", "reference", "Dropdown", "_popper", "_parent", "_menu", "_inNavbar", "_detectNavbar", "showEvent", "_createPopper", "focus", "_completeHide", "destroy", "update", "hideEvent", "Popper", "referenceElement", "_getPopperConfig", "createPopper", "_getPlacement", "parentDropdown", "isEnd", "_getOffset", "popperData", "defaultBsPopperConfig", "placement", "modifiers", "options", "enabled", "_selectMenuItem", "clearMenus", "openToggles", "context", "composedPath", "isMenuTarget", "dataApiKeydownHandler", "isInput", "isEscapeEvent", "isUpOrDownEvent", "getToggleButton", "stopPropagation", "EVENT_MOUSEDOWN", "className", "clickCallback", "rootElement", "Backdrop", "_isAppended", "_append", "_getElement", "_emulateAnimation", "backdrop", "createElement", "append", "EVENT_FOCUSIN", "EVENT_KEYDOWN_TAB", "TAB_NAV_FORWARD", "TAB_NAV_BACKWARD", "autofocus", "trapElement", "FocusTrap", "_isActive", "_lastTabNavDirection", "activate", "_handleFocusin", "_handleKeydown", "deactivate", "elements", "shiftKey", "SELECTOR_FIXED_CONTENT", "SELECTOR_STICKY_CONTENT", "PROPERTY_PADDING", "PROPERTY_MARGIN", "ScrollBarHelper", "getWidth", "documentWidth", "clientWidth", "innerWidth", "width", "_disableOverFlow", "_setElementAttributes", "calculatedValue", "reset", "_resetElementAttributes", "isOverflowing", "_saveInitialAttribute", "overflow", "styleProperty", "scrollbarWidth", "manipulationCallBack", "setProperty", "_applyManipulationCallback", "actualValue", "removeProperty", "callBack", "EVENT_HIDE_PREVENTED", "EVENT_RESIZE", "EVENT_CLICK_DISMISS", "EVENT_MOUSEDOWN_DISMISS", "EVENT_KEYDOWN_DISMISS", "CLASS_NAME_OPEN", "CLASS_NAME_STATIC", "OPEN_SELECTOR", "SELECTOR_DIALOG", "SELECTOR_MODAL_BODY", "Modal", "_dialog", "_backdrop", "_initializeBackDrop", "_focustrap", "_initializeFocusTrap", "_scrollBar", "_adjustDialog", "_showElement", "_hideModal", "handleUpdate", "scrollTop", "modalBody", "transitionComplete", "_triggerBackdropTransition", "event2", "_resetAdjustments", "isModalOverflowing", "scrollHeight", "clientHeight", "initialOverflowY", "overflowY", "isBodyOverflowing", "paddingLeft", "paddingRight", "alreadyOpen", "CLASS_NAME_SHOWING", "CLASS_NAME_HIDING", "CLASS_NAME_BACKDROP", "scroll", "Offcanvas", "blur", "completeCallback", "position", "ARIA_ATTRIBUTE_PATTERN", "DefaultAllowlist", "a", "area", "b", "br", "col", "code", "dd", "div", "dl", "dt", "em", "hr", "h1", "h2", "h3", "h4", "h5", "h6", "i", "li", "ol", "p", "pre", "s", "small", "span", "sub", "sup", "strong", "u", "ul", "uriAttributes", "SAFE_URL_PATTERN", "allowedAttribute", "attribute", "allowedAttributeList", "attributeName", "nodeName", "nodeValue", "attributeRegex", "some", "regex", "sanitizeHtml", "unsafeHtml", "allowList", "sanitizeFunction", "domParser", "DOMParser", "createdDocument", "parseFromString", "elementName", "attributeList", "allowedAttributes", "innerHTML", "content", "extraClass", "html", "sanitize", "sanitizeFn", "template", "DefaultContentType", "entry", "TemplateFactory", "getContent", "_resolvePossibleFunction", "hasContent", "changeContent", "_checkContent", "toHtml", "templateWrapper", "_maybeSanitize", "text", "_setContent", "arg", "templateElement", "_putElementInTemplate", "textContent", "DISALLOWED_ATTRIBUTES", "CLASS_NAME_MODAL", "SELECTOR_TOOLTIP_INNER", "SELECTOR_MODAL", "EVENT_MODAL_HIDE", "TRIGGER_HOVER", "TRIGGER_FOCUS", "TRIGGER_CLICK", "TRIGGER_MANUAL", "EVENT_INSERTED", "EVENT_CLICK", "EVENT_FOCUSOUT", "AttachmentMap", "AUTO", "TOP", "RIGHT", "BOTTOM", "LEFT", "animation", "container", "customClass", "delay", "fallbackPlacements", "title", "Tooltip", "_isEnabled", "_timeout", "_isHovered", "_activeTrigger", "_templateFactory", "_newContent", "tip", "_setListeners", "_fixTitle", "enable", "disable", "toggleEnabled", "_leave", "_enter", "_hideModalHandler", "_disposePopper", "_isWithContent", "shadowRoot", "isInTheDom", "ownerDocument", "_getTipElement", "_isWithActiveTrigger", "_getTitle", "_createTipElement", "_getContentForTemplate", "_getTemplateFactory", "tipId", "setContent", "_initializeOnDelegatedTarget", "_getDelegateConfig", "attachment", "phase", "state", "triggers", "eventIn", "eventOut", "_setTimeout", "timeout", "dataAttributes", "dataAttribute", "SELECTOR_TITLE", "SELECTOR_CONTENT", "Popover", "_getContent", "EVENT_ACTIVATE", "CLASS_NAME_DROPDOWN_ITEM", "SELECTOR_DATA_SPY", "SELECTOR_TARGET_LINKS", "SELECTOR_NAV_LIST_GROUP", "SELECTOR_NAV_LINKS", "SELECTOR_NAV_ITEMS", "SELECTOR_LIST_ITEMS", "SELECTOR_LINK_ITEMS", "SELECTOR_DROPDOWN", "SELECTOR_DROPDOWN_TOGGLE", "rootMargin", "smoothScroll", "threshold", "ScrollSpy", "_targetLinks", "_observableSections", "_rootElement", "_activeTarget", "_observer", "_previousScrollData", "visibleEntryTop", "parentScrollTop", "refresh", "_initializeTargetsAndObservables", "_maybeEnableSmoothScroll", "disconnect", "_getNewObserver", "section", "observe", "observableSection", "hash", "height", "offsetTop", "scrollTo", "top", "behavior", "IntersectionObserver", "_observerCallback", "targetElement", "_process", "userScrollsDown", "isIntersecting", "_clearActiveClass", "entryIsLowerThanPrevious", "targetLinks", "anchor", "decodeURI", "_activateParents", "listGroup", "item", "activeNodes", "node", "spy", "HOME_KEY", "END_KEY", "CLASS_DROPDOWN", "SELECTOR_DROPDOWN_MENU", "NOT_SELECTOR_DROPDOWN_TOGGLE", "SELECTOR_TAB_PANEL", "SELECTOR_OUTER", "SELECTOR_INNER", "SELECTOR_INNER_ELEM", "SELECTOR_DATA_TOGGLE_ACTIVE", "Tab", "_setInitialAttributes", "_getChildren", "innerElem", "_elemIsActive", "active", "_getActiveElem", "_deactivate", "_activate", "relatedElem", "_toggleDropDown", "nextActiveElement", "preventScroll", "_setAttributeIfNotExists", "_setInitialAttributesOnChild", "_getInnerElement", "isActive", "outerElem", "_getOuterElement", "_setInitialAttributesOnTargetPanel", "open", "EVENT_MOUSEOVER", "EVENT_MOUSEOUT", "CLASS_NAME_HIDE", "autohide", "Toast", "_hasMouseInteraction", "_hasKeyboardInteraction", "_clearTimeout", "_maybeScheduleHide", "isShown", "_onInteraction", "isInteracting", "i18n", "event", "event", "c", "error", "m", "o", "s", "t", "a", "b", "d", "names", "i", "e", "match", "start", "resolve", "isNumeric", "max", "n", "f", "g", "h", "aa", "p", "r", "u", "l", "y", "D", "L", "M", "S", "T", "bb", "tb", "event", "i", "round", "l", "h", "round", "b", "a", "f", "h", "s", "l", "n", "i", "r", "g", "d", "max", "range", "min", "c", "m", "interpolate", "t", "clone", "color", "p", "noop", "uid", "id", "isNullOrUndef", "value", "undefined", "isArray", "Array", "type", "Object", "prototype", "toString", "call", "slice", "isObject", "isNumberFinite", "Number", "isFinite", "finiteOrDefault", "defaultValue", "valueOrDefault", "toPercentage", "dimension", "endsWith", "parseFloat", "toDimension", "callback", "fn", "args", "thisArg", "apply", "each", "loopable", "reverse", "i", "len", "keys", "length", "_elementsEqual", "a0", "a1", "ilen", "v0", "v1", "datasetIndex", "index", "clone", "source", "map", "target", "create", "klen", "k", "isValidKey", "key", "indexOf", "_merger", "options", "tval", "sval", "merge", "sources", "merger", "current", "mergeIf", "_mergerIf", "hasOwnProperty", "keyResolvers", "v", "x", "o", "y", "_splitKey", "key", "parts", "split", "keys", "tmp", "part", "endsWith", "slice", "push", "_getKeyResolver", "obj", "k", "resolveObjectKey", "resolver", "_capitalize", "str", "charAt", "toUpperCase", "defined", "value", "isFunction", "setsEqual", "a", "b", "size", "item", "has", "_isClickEvent", "e", "type", "PI", "Math", "TAU", "PITAU", "INFINITY", "Number", "POSITIVE_INFINITY", "RAD_PER_DEG", "HALF_PI", "QUARTER_PI", "TWO_THIRDS_PI", "log10", "sign", "almostEquals", "epsilon", "abs", "niceNum", "range", "roundedRange", "round", "niceRange", "pow", "floor", "fraction", "niceFraction", "_factorize", "result", "sqrt", "i", "sort", "pop", "isNonPrimitive", "n", "Symbol", "toPrimitive", "isNumber", "isNaN", "parseFloat", "isFinite", "almostWhole", "rounded", "_setMinAndMaxByKey", "array", "target", "property", "ilen", "length", "min", "max", "toRadians", "degrees", "toDegrees", "radians", "_decimalPlaces", "isFiniteNumber", "p", "getAngleFromPoint", "centrePoint", "anglePoint", "distanceFromXCenter", "distanceFromYCenter", "radialDistanceFromCenter", "angle", "atan2", "distance", "distanceBetweenPoints", "pt1", "pt2", "_angleDiff", "_normalizeAngle", "_angleBetween", "start", "end", "sameAngleIsFullCircle", "s", "angleToStart", "angleToEnd", "startToAngle", "endToAngle", "_limitValue", "_int16Range", "_isBetween", "_lookup", "table", "cmp", "index", "hi", "lo", "mid", "_lookupByKey", "last", "ti", "_rlookupByKey", "_filterBetween", "values", "arrayEvents", "listenArrayEvents", "listener", "_chartjs", "listeners", "Object", "defineProperty", "configurable", "enumerable", "forEach", "method", "base", "args", "res", "apply", "object", "unlistenArrayEvents", "stub", "indexOf", "splice", "_arrayUnique", "items", "set", "Set", "Array", "from", "requestAnimFrame", "window", "callback", "requestAnimationFrame", "throttled", "fn", "thisArg", "argsToUse", "ticking", "args", "call", "apply", "debounce", "delay", "timeout", "clearTimeout", "setTimeout", "_toLeftRightCenter", "align", "_alignStartEnd", "start", "end", "_textX", "left", "right", "rtl", "check", "_getStartAndCountOfVisiblePoints", "meta", "points", "animationsDisabled", "pointCount", "length", "count", "_sorted", "iScale", "vScale", "_parsed", "spanGaps", "dataset", "options", "axis", "min", "max", "minDefined", "maxDefined", "getUserBounds", "Math", "_lookupByKey", "lo", "getPixelForValue", "distanceToDefinedLo", "slice", "reverse", "findIndex", "point", "isNullOrUndef", "_limitValue", "hi", "distanceToDefinedHi", "_scaleRangesChanged", "xScale", "yScale", "_scaleRanges", "newRanges", "xmin", "xmax", "ymin", "ymax", "changed", "Object", "assign", "atEdge", "t", "elasticIn", "s", "p", "pow", "sin", "TAU", "elasticOut", "effects", "linear", "easeInQuad", "easeOutQuad", "easeInOutQuad", "easeInCubic", "easeOutCubic", "easeInOutCubic", "easeInQuart", "easeOutQuart", "easeInOutQuart", "easeInQuint", "easeOutQuint", "easeInOutQuint", "easeInSine", "cos", "HALF_PI", "easeOutSine", "easeInOutSine", "PI", "easeInExpo", "easeOutExpo", "easeInOutExpo", "easeInCirc", "sqrt", "easeOutCirc", "easeInOutCirc", "easeInElastic", "easeOutElastic", "easeInOutElastic", "easeInBack", "easeOutBack", "easeInOutBack", "easeInBounce", "easeOutBounce", "m", "d", "easeInOutBounce", "isPatternOrGradient", "value", "type", "toString", "color", "Color", "getHoverColor", "saturate", "darken", "hexString", "numbers", "colors", "applyAnimationsDefaults", "defaults", "set", "undefined", "duration", "easing", "from", "loop", "to", "describe", "_fallback", "_indexable", "_scriptable", "name", "properties", "active", "animation", "resize", "show", "animations", "visible", "hide", "v", "applyLayoutsDefaults", "autoPadding", "padding", "top", "bottom", "intlCache", "Map", "getNumberFormat", "locale", "cacheKey", "JSON", "stringify", "formatter", "get", "Intl", "NumberFormat", "formatNumber", "num", "format", "formatters", "values", "isArray", "numeric", "tickValue", "index", "ticks", "chart", "notation", "delta", "maxTick", "abs", "calculateDelta", "logDelta", "log10", "numDecimal", "isNaN", "floor", "minimumFractionDigits", "maximumFractionDigits", "logarithmic", "remain", "significand", "includes", "applyScaleDefaults", "display", "offset", "beginAtZero", "bounds", "clip", "grace", "grid", "lineWidth", "drawOnChartArea", "drawTicks", "tickLength", "tickWidth", "_ctx", "tickColor", "border", "dash", "dashOffset", "width", "title", "text", "minRotation", "maxRotation", "mirror", "textStrokeWidth", "textStrokeColor", "autoSkip", "autoSkipPadding", "labelOffset", "Ticks", "minor", "major", "crossAlign", "showLabelBackdrop", "backdropColor", "backdropPadding", "route", "startsWith", "overrides", "create", "descriptors", "getScope", "node", "key", "keys", "split", "i", "n", "k", "root", "scope", "merge", "Defaults", "constructor", "_descriptors", "_appliers", "backgroundColor", "borderColor", "datasets", "devicePixelRatio", "context", "platform", "getDevicePixelRatio", "elements", "events", "font", "family", "size", "style", "lineHeight", "weight", "hover", "hoverBackgroundColor", "ctx", "hoverBorderColor", "hoverColor", "indexAxis", "interaction", "mode", "intersect", "includeInvisible", "maintainAspectRatio", "onHover", "onClick", "parsing", "plugins", "responsive", "scale", "scales", "showLine", "drawActiveElementsOnTop", "override", "targetScope", "targetName", "scopeObject", "targetScopeObject", "privateName", "defineProperties", "writable", "enumerable", "local", "target", "isObject", "valueOrDefault", "appliers", "forEach", "toFontString", "_measureText", "data", "gc", "longest", "string", "textWidth", "measureText", "push", "_longestText", "arrayOfThings", "cache", "garbageCollect", "save", "ilen", "j", "jlen", "thing", "nestedThing", "restore", "gcLen", "splice", "_alignPixel", "pixel", "currentDevicePixelRatio", "halfWidth", "round", "clearCanvas", "canvas", "getContext", "resetTransform", "clearRect", "height", "drawPoint", "x", "y", "drawPointLegend", "w", "xOffset", "yOffset", "cornerRadius", "xOffsetW", "yOffsetW", "pointStyle", "rotation", "radius", "rad", "RAD_PER_DEG", "translate", "rotate", "drawImage", "beginPath", "ellipse", "arc", "closePath", "moveTo", "TWO_THIRDS_PI", "lineTo", "QUARTER_PI", "SQRT1_2", "rect", "fill", "borderWidth", "stroke", "_isPointInArea", "area", "margin", "clipArea", "unclipArea", "_steppedLineTo", "previous", "flip", "midpoint", "_bezierCurveTo", "bezierCurveTo", "cp1x", "cp2x", "cp1y", "cp2y", "setRenderOpts", "opts", "translation", "fillStyle", "textAlign", "textBaseline", "decorateText", "line", "strikethrough", "underline", "metrics", "actualBoundingBoxLeft", "actualBoundingBoxRight", "actualBoundingBoxAscent", "actualBoundingBoxDescent", "yDecoration", "strokeStyle", "decorationWidth", "drawBackdrop", "oldColor", "fillRect", "renderText", "lines", "strokeWidth", "strokeColor", "backdrop", "strokeText", "maxWidth", "fillText", "Number", "addRoundedRectPath", "h", "topLeft", "bottomLeft", "bottomRight", "topRight", "LINE_HEIGHT", "FONT_STYLE", "toLineHeight", "matches", "match", "numberOrZero", "_readValueToProps", "props", "ret", "objProps", "read", "prop", "toTRBL", "toTRBLCorners", "toPadding", "obj", "toFont", "fallback", "parseInt", "console", "warn", "resolve", "inputs", "info", "cacheable", "_addGrace", "minmax", "change", "toDimension", "keepZero", "add", "createContext", "parentContext", "_createResolver", "scopes", "prefixes", "rootScopes", "getTarget", "finalRootScopes", "_resolve", "Symbol", "toStringTag", "_cacheable", "_scopes", "_rootScopes", "_getTarget", "Proxy", "deleteProperty", "_keys", "_cached", "_resolveWithPrefixes", "getOwnPropertyDescriptor", "Reflect", "getPrototypeOf", "has", "getKeysFromAllScopes", "ownKeys", "storage", "_storage", "_attachContext", "proxy", "subProxy", "descriptorDefaults", "_proxy", "_context", "_subProxy", "_stack", "Set", "setContext", "receiver", "_resolveWithContext", "allKeys", "configurable", "scriptable", "indexable", "_allKeys", "isScriptable", "isFunction", "isIndexable", "readKey", "prefix", "_capitalize", "needsSubResolver", "prototype", "hasOwnProperty", "_resolveScriptable", "_resolveArray", "getValue", "Error", "Array", "join", "delete", "createSubResolver", "arr", "filter", "item", "resolver", "resolveFallback", "parent", "resolveObjectKey", "addScopes", "parentScopes", "parentFallback", "allScopes", "addScopesFromKey", "subGetTarget", "resolveKeysFromAllScopes", "_parseObjectDataRadialScale", "_parsing", "parsed", "r", "parse", "EPSILON", "getPoint", "skip", "getValueAxis", "splineCurve", "firstPoint", "middlePoint", "afterPoint", "current", "next", "d01", "distanceBetweenPoints", "d12", "s01", "s12", "fa", "fb", "monotoneAdjust", "deltaK", "mK", "pointsLen", "alphaK", "betaK", "tauK", "squaredMagnitude", "pointCurrent", "pointAfter", "almostEquals", "monotoneCompute", "valueAxis", "pointBefore", "iPixel", "vPixel", "splineCurveMonotone", "slopeDelta", "sign", "capControlPoint", "pt", "capBezierPoints", "inArea", "inAreaPrev", "inAreaNext", "_updateBezierControlPoints", "controlPoints", "cubicInterpolationMode", "prev", "tension", "_isDomSupported", "document", "_getParentNode", "domNode", "parentNode", "host", "parseMaxStyle", "styleValue", "parentProperty", "valueInPixels", "indexOf", "getComputedStyle", "element", "ownerDocument", "defaultView", "getStyle", "el", "property", "getPropertyValue", "positions", "getPositionedStyle", "styles", "suffix", "result", "pos", "parseFloat", "useOffsetPos", "shadowRoot", "getCanvasPosition", "e", "touches", "source", "offsetX", "offsetY", "box", "getBoundingClientRect", "clientX", "clientY", "getRelativePosition", "event", "borderBox", "boxSizing", "paddings", "borders", "getContainerSize", "maxHeight", "container", "clientWidth", "clientHeight", "containerStyle", "containerBorder", "containerPadding", "INFINITY", "round1", "getMaximumSize", "bbWidth", "bbHeight", "aspectRatio", "margins", "containerSize", "maintainHeight", "retinaScale", "forceRatio", "forceStyle", "pixelRatio", "deviceHeight", "deviceWidth", "setTransform", "supportsEventListenerOptions", "passiveSupported", "passive", "addEventListener", "removeEventListener", "readUsedSize", "_pointInLine", "p1", "p2", "_steppedInterpolation", "_bezierInterpolation", "cp1", "cp2", "a", "b", "c", "getRightToLeftAdapter", "rectX", "setWidth", "xPlus", "leftForLtr", "itemWidth", "getLeftToRightAdapter", "_itemWidth", "getRtlAdapter", "overrideTextDirection", "direction", "original", "getPropertyPriority", "setProperty", "prevTextDirection", "restoreTextDirection", "propertyFn", "between", "_angleBetween", "compare", "_angleDiff", "normalize", "_normalizeAngle", "_isBetween", "normalizeSegment", "getSegment", "segment", "startBound", "endBound", "_boundSegment", "inside", "subStart", "prevValue", "startIsBefore", "endIsBefore", "shouldStart", "shouldStop", "_boundSegments", "segments", "sub", "findStartAndEnd", "solidSegments", "last", "cur", "stop", "_computeSegments", "segmentOptions", "_loop", "splitByStyles", "completeLoop", "_fullLoop", "doSplitByStyles", "chartContext", "_chart", "baseStyle", "readStyle", "_datasetIndex", "datasetIndex", "prevStyle", "addStyle", "l", "st", "dir", "p0", "p0DataIndex", "p1DataIndex", "styleChanged", "borderCapStyle", "borderDash", "borderDashOffset", "borderJoinStyle", "replacer", "getSizeForArea", "chartArea", "field", "getDatasetArea", "getDatasetClipArea", "_clip", "disabled", "Animator", "constructor", "_request", "_charts", "Map", "_running", "_lastDate", "undefined", "_notify", "chart", "anims", "date", "type", "callbacks", "listeners", "numSteps", "duration", "forEach", "fn", "initial", "currentStep", "Math", "min", "start", "_refresh", "requestAnimFrame", "call", "window", "_update", "Date", "now", "remaining", "running", "items", "length", "i", "draw", "item", "_active", "_total", "tick", "pop", "_getAnims", "charts", "get", "complete", "progress", "set", "listen", "event", "cb", "push", "add", "has", "reduce", "acc", "cur", "max", "_duration", "stop", "cancel", "remove", "delete", "transparent", "interpolators", "boolean", "from", "to", "factor", "color", "c0", "helpersColor", "c1", "valid", "mix", "hexString", "number", "Animation", "cfg", "target", "prop", "currentValue", "resolve", "_fn", "_easing", "effects", "easing", "linear", "_start", "floor", "delay", "_loop", "loop", "_target", "_prop", "_from", "_to", "_promises", "active", "update", "elapsed", "remain", "wait", "promises", "Promise", "res", "rej", "resolved", "method", "Animations", "config", "_chart", "_properties", "configure", "isObject", "animationOptions", "Object", "keys", "defaults", "animation", "animatedProps", "getOwnPropertyNames", "key", "option", "isArray", "properties", "_animateOptions", "values", "newOptions", "options", "resolveTargetOptions", "animations", "_createAnimations", "$shared", "awaitAll", "$animations", "then", "props", "charAt", "value", "size", "assign", "animator", "anim", "all", "scaleClip", "scale", "allowedOverflow", "opts", "reverse", "end", "defaultClip", "xScale", "yScale", "x", "y", "top", "right", "bottom", "left", "toClip", "t", "r", "b", "l", "disabled", "getSortedDatasetIndices", "filterVisible", "metasets", "_getSortedDatasetMetas", "ilen", "index", "applyStack", "stack", "dsIndex", "singleMode", "mode", "datasetIndex", "otherValue", "found", "isFinite", "sign", "convertObjectDataToArray", "data", "meta", "iScale", "vScale", "iAxisKey", "axis", "vAxisKey", "adata", "Array", "isStacked", "stacked", "getStackKey", "indexScale", "valueScale", "id", "getUserBounds", "minDefined", "maxDefined", "Number", "NEGATIVE_INFINITY", "POSITIVE_INFINITY", "getOrCreateStack", "stacks", "stackKey", "indexValue", "subStack", "getLastIndexInStack", "positive", "getMatchingVisibleMetas", "updateStacks", "controller", "parsed", "_cachedMeta", "_stacks", "iAxis", "vAxis", "itemStacks", "_top", "_bottom", "visualValues", "_visualValues", "getFirstScaleId", "scales", "filter", "shift", "createDatasetContext", "parent", "createContext", "dataset", "createDataContext", "element", "dataIndex", "raw", "clearStacks", "_parsed", "isDirectUpdateMode", "cloneIfNotShared", "cached", "shared", "createStack", "canStack", "hidden", "_stacked", "DatasetController", "datasetElementType", "dataElementType", "_ctx", "ctx", "_cachedDataOpts", "getMeta", "_type", "_parsing", "_data", "_objectData", "_sharedOptions", "_drawStart", "_drawCount", "enableOptionSharing", "supportsDecimation", "$context", "_syncList", "initialize", "linkScales", "addElements", "fill", "isPluginEnabled", "console", "warn", "updateIndex", "getDataset", "chooseId", "xid", "xAxisID", "valueOrDefault", "yid", "yAxisID", "rid", "rAxisID", "indexAxis", "iid", "iAxisID", "vid", "vAxisID", "getScaleForId", "rScale", "datasets", "getDatasetMeta", "scaleID", "_getOtherScale", "reset", "_destroy", "unlistenArrayEvents", "_dataCheck", "isExtensible", "listenArrayEvents", "buildOrUpdateElements", "resetNewElements", "stackChanged", "oldStacked", "_resyncElements", "scopeKeys", "datasetScopeKeys", "scopes", "getOptionScopes", "createResolver", "getContext", "parsing", "parse", "count", "sorted", "_sorted", "prev", "parseArrayData", "parseObjectData", "parsePrimitiveData", "isNotInOrderComparedToPrev", "labels", "getLabels", "singleScale", "xAxisKey", "yAxisKey", "resolveObjectKey", "getParsed", "getDataElement", "updateRangeFromParsed", "range", "parsedValue", "NaN", "getMinMax", "otherScale", "otherMin", "otherMax", "_skip", "getAllParsedValues", "getMaxOverflow", "getLabelAndValue", "label", "getLabelForValue", "_clip", "clip", "elements", "area", "chartArea", "drawActiveElementsOnTop", "getStyle", "resolveDatasetElementOptions", "resolveDataElementOptions", "context", "_resolveElementOptions", "elementType", "cache", "cacheKey", "sharing", "defined", "datasetElementScopeKeys", "prefixes", "names", "resolveNamedOptions", "freeze", "_resolveAnimations", "transition", "datasetAnimationScopeKeys", "_cacheable", "getSharedOptions", "includeOptions", "sharedOptions", "_animationsDisabled", "_getSharedOptions", "firstOpts", "previouslySharedOptions", "updateSharedOptions", "updateElement", "_setStyle", "removeHoverStyle", "setHoverStyle", "_removeDatasetHoverStyle", "_setDatasetHoverStyle", "arg1", "arg2", "numMeta", "numData", "_insertElements", "_removeElements", "move", "arr", "updateElements", "removed", "splice", "_sync", "args", "_dataChanges", "_onDataPush", "arguments", "_onDataPop", "_onDataShift", "_onDataSplice", "newCount", "_onDataUnshift", "getAllScaleValues", "_cache", "$bar", "visibleMetas", "concat", "_arrayUnique", "sort", "a", "computeMinSampleSize", "_length", "curr", "updateMinAndPrev", "abs", "getPixelForValue", "ticks", "getPixelForTick", "computeFitCategoryTraits", "ruler", "stackCount", "thickness", "barThickness", "ratio", "isNullOrUndef", "categoryPercentage", "barPercentage", "chunk", "pixels", "computeFlexCategoryTraits", "next", "percent", "parseFloatBar", "entry", "startValue", "endValue", "barStart", "barEnd", "_custom", "parseValue", "parseArrayOrPrimitive", "isFloatBar", "custom", "barSign", "actualBase", "isHorizontal", "borderProps", "horizontal", "base", "setBorderSkipped", "edge", "borderSkipped", "enableBorderRadius", "parseEdge", "swap", "startEnd", "orig", "v1", "v2", "v", "setInflateAmount", "inflateAmount", "BarController", "grouped", "numbers", "overrides", "_index_", "offset", "grid", "_value_", "beginAtZero", "obj", "bars", "getBasePixel", "_getRuler", "vpixels", "head", "_calculateBarValuePixels", "ipixels", "_calculateBarIndexPixels", "center", "height", "width", "_getStacks", "last", "currentParsed", "iScaleValue", "skipNull", "find", "val", "isNaN", "indexOf", "_getStackCount", "_getAxisCount", "_getAxis", "getFirstScaleIdForIndexAxis", "indexScaleId", "firstScaleAxisId", "_getStackIndex", "name", "_startPixel", "_endPixel", "baseValue", "minBarLength", "floating", "getDataVisibility", "startPixel", "getPixelForDecimal", "endPixel", "getValueForPixel", "halfGrid", "getLineWidthForValue", "maxBarThickness", "Infinity", "axisCount", "axisID", "axisNumber", "stackIndex", "rects", "BubbleController", "radius", "points", "point", "iPixel", "vPixel", "skip", "getRatioAndOffset", "rotation", "circumference", "cutout", "ratioX", "ratioY", "offsetX", "offsetY", "TAU", "startAngle", "endAngle", "startX", "cos", "startY", "sin", "endX", "endY", "calcMax", "angle", "_angleBetween", "calcMin", "maxX", "maxY", "HALF_PI", "minX", "PI", "minY", "DoughnutController", "animateRotate", "animateScale", "spacing", "descriptors", "_scriptable", "_indexable", "startsWith", "aspectRatio", "plugins", "legend", "generateLabels", "pointStyle", "textAlign", "useBorderRadius", "borderRadius", "map", "style", "text", "fillStyle", "backgroundColor", "fontColor", "lineDash", "borderDash", "lineDashOffset", "borderDashOffset", "lineJoin", "borderJoinStyle", "lineWidth", "borderWidth", "strokeStyle", "borderColor", "onClick", "e", "legendItem", "toggleDataVisibility", "innerRadius", "outerRadius", "getter", "_getRotation", "toRadians", "_getCircumference", "_getRotationExtents", "isDatasetVisible", "arcs", "getMaxBorderWidth", "getMaxOffset", "maxSize", "toPercentage", "chartWeight", "_getRingWeight", "maxWidth", "maxHeight", "maxRadius", "toDimension", "radiusLength", "_getVisibleDatasetWeightTotal", "total", "calculateTotal", "_getRingWeightOffset", "_circumference", "calculateCircumference", "animationOpts", "centerX", "centerY", "arc", "metaData", "formatNumber", "locale", "borderAlign", "hoverBorderWidth", "hoverOffset", "ringWeightOffset", "weight", "LineController", "showLine", "spanGaps", "line", "_dataset", "animationsDisabled", "_getStartAndCountOfVisiblePoints", "_scaleRangesChanged", "_datasetIndex", "_decimated", "segment", "animated", "maxGapLength", "isNumber", "directUpdate", "pointsCount", "prevParsed", "nullData", "border", "firstPoint", "lastPoint", "updateControlPoints", "PolarAreaController", "angleLines", "display", "circular", "pointLabels", "_parseObjectDataRadialScale", "bind", "_updateRadius", "minSize", "cutoutPercentage", "getVisibleDatasetCount", "xCenter", "yCenter", "datasetStartAngle", "getIndexAngle", "defaultAngle", "countVisibleElements", "_computeAngle", "getDistanceFromCenterForValue", "PieController", "RadarController", "_fullLoop", "pointPosition", "getPointPositionForValue", "ScatterController", "interaction", "registry", "getElement", "abstract", "Error", "DateAdapterBase", "override", "members", "prototype", "init", "formats", "format", "diff", "startOf", "endOf", "_date", "binarySearch", "metaset", "intersect", "lookupMethod", "_reversePixels", "_rlookupByKey", "_lookupByKey", "result", "distanceToDefinedLo", "slice", "lo", "findIndex", "distanceToDefinedHi", "hi", "el", "getRange", "evaluateInteractionItems", "position", "handler", "getSortedVisibleDatasetMetas", "j", "getDistanceMetricForAxis", "useX", "useY", "pt1", "pt2", "deltaX", "deltaY", "sqrt", "pow", "getIntersectItems", "useFinalPosition", "includeInvisible", "isPointInArea", "evaluationFunc", "_isPointInArea", "inRange", "getNearestRadialItems", "getProps", "getAngleFromPoint", "getNearestCartesianItems", "distanceMetric", "minDistance", "getCenterPoint", "pointInArea", "distance", "getNearestItems", "getAxisItems", "rangeMethod", "intersectsItem", "modes", "getRelativePosition", "nearest", "STATIC_POSITIONS", "filterByPosition", "array", "pos", "filterDynamicPositionByAxis", "box", "sortByWeight", "v0", "wrapBoxes", "boxes", "layoutBoxes", "stackWeight", "buildStacks", "layouts", "wrap", "includes", "_stack", "placed", "setLayoutDims", "params", "vBoxMaxWidth", "hBoxMaxHeight", "layout", "fullSize", "availableWidth", "availableHeight", "buildLayoutBoxes", "centerHorizontal", "centerVertical", "leftAndTop", "rightAndBottom", "vertical", "getCombinedMax", "maxPadding", "updateMaxPadding", "boxPadding", "updateDims", "getPadding", "newWidth", "outerWidth", "newHeight", "outerHeight", "widthChanged", "w", "heightChanged", "h", "same", "other", "handleMaxPadding", "updatePos", "change", "getMargins", "marginForPositions", "positions", "margin", "fitBoxes", "refitBoxes", "refit", "changed", "setBoxDims", "placeBoxes", "userPadding", "padding", "addBox", "_layers", "z", "removeBox", "layoutItem", "minPadding", "toPadding", "verticalBoxes", "horizontalBoxes", "each", "beforeLayout", "visibleVerticalBoxCount", "BasePlatform", "acquireContext", "canvas", "releaseContext", "addEventListener", "listener", "removeEventListener", "getDevicePixelRatio", "getMaximumSize", "isAttached", "updateConfig", "BasicPlatform", "EXPANDO_KEY", "EVENT_TYPES", "touchstart", "touchmove", "touchend", "pointerenter", "pointerdown", "pointermove", "pointerup", "pointerleave", "pointerout", "isNullOrEmpty", "initCanvas", "renderHeight", "getAttribute", "renderWidth", "boxSizing", "displayWidth", "readUsedSize", "displayHeight", "eventListenerOptions", "supportsEventListenerOptions", "passive", "addListener", "node", "removeListener", "fromNativeEvent", "native", "nodeListContains", "nodeList", "contains", "createAttachObserver", "observer", "MutationObserver", "entries", "trigger", "addedNodes", "removedNodes", "observe", "document", "childList", "subtree", "createDetachObserver", "drpListeningCharts", "oldDevicePixelRatio", "onWindowResize", "dpr", "devicePixelRatio", "resize", "currentDevicePixelRatio", "listenDevicePixelRatioChanges", "unlistenDevicePixelRatioChanges", "createResizeObserver", "container", "_getParentNode", "throttled", "clientWidth", "ResizeObserver", "contentRect", "releaseObserver", "disconnect", "createProxyAndListen", "proxy", "DomPlatform", "removeAttribute", "setAttribute", "proxies", "$proxies", "handlers", "attach", "detach", "isConnected", "_detectPlatform", "_isDomSupported", "OffscreenCanvas", "Element", "defaultRoutes", "tooltipPosition", "hasValue", "final", "ret", "autoSkip", "tickOpts", "determinedMaxTicks", "determineMaxTicks", "ticksLimit", "maxTicksLimit", "majorIndices", "major", "enabled", "getMajorIndices", "numMajorIndices", "first", "newTicks", "skipMajors", "calculateSpacing", "avgMajorSpacing", "round", "tickLength", "_tickSize", "maxScale", "maxChart", "_maxLength", "evenMajorSpacing", "getEvenSpacing", "factors", "_factorize", "ceil", "majorStart", "majorEnd", "len", "reverseAlign", "align", "offsetFromEdge", "getTicksLimit", "ticksLength", "sample", "numItems", "increment", "getPixelForGridLine", "offsetGridLines", "validIndex", "epsilon", "lineValue", "garbageCollect", "caches", "gc", "gcLen", "getTickMarkLength", "drawTicks", "getTitleHeight", "fallback", "font", "toFont", "lines", "lineHeight", "createScaleContext", "createTickContext", "titleAlign", "_toLeftRightCenter", "titleArgs", "titleX", "titleY", "_alignStartEnd", "positionAxisID", "Scale", "_margins", "paddingTop", "paddingBottom", "paddingLeft", "paddingRight", "labelRotation", "_range", "_gridLineItems", "_labelItems", "_labelSizes", "_longestTextCache", "_userMax", "_userMin", "_suggestedMax", "_suggestedMin", "_ticksLength", "_borderValue", "_dataLimitsCached", "setContext", "suggestedMin", "suggestedMax", "finiteOrDefault", "metas", "getTicks", "xLabels", "yLabels", "getLabelItems", "_computeLabelItems", "beforeUpdate", "margins", "grace", "sampleSize", "beforeSetDimensions", "setDimensions", "afterSetDimensions", "beforeDataLimits", "determineDataLimits", "afterDataLimits", "_addGrace", "beforeBuildTicks", "buildTicks", "afterBuildTicks", "samplingEnabled", "_convertTicksToLabels", "beforeCalculateLabelRotation", "calculateLabelRotation", "afterCalculateLabelRotation", "source", "afterAutoSkip", "beforeFit", "fit", "afterFit", "afterUpdate", "reversePixels", "_alignToPixels", "alignToPixels", "_callHooks", "notifyPlugins", "beforeTickToLabelConversion", "generateTickLabels", "callback", "afterTickToLabelConversion", "numTicks", "minRotation", "maxRotation", "tickWidth", "maxLabelDiagonal", "_isVisible", "labelSizes", "_getLabelSizes", "maxLabelWidth", "widest", "maxLabelHeight", "highest", "_limitValue", "title", "toDegrees", "asin", "titleOpts", "gridOpts", "titleHeight", "tickPadding", "angleRadians", "labelHeight", "mirror", "labelWidth", "_calculatePadding", "_handleMargins", "isRotated", "labelsBelowTicks", "offsetLeft", "offsetRight", "isFullSize", "_computeLabelSizes", "widths", "heights", "widestLabelSize", "highestLabelSize", "jlen", "tickFont", "fontString", "nestedLabel", "_resolveTickFontOptions", "string", "_measureText", "valueAt", "idx", "pixel", "decimal", "_int16Range", "_alignPixel", "getDecimalForPixel", "getBaseValue", "optionTicks", "rot", "autoSkipPadding", "_computeGridLineItems", "tl", "borderOpts", "axisWidth", "axisHalfWidth", "alignBorderValue", "borderValue", "alignedLineValue", "tx1", "ty1", "tx2", "ty2", "x1", "y1", "x2", "y2", "limit", "step", "optsAtIndex", "optsAtIndexBorder", "lineColor", "dash", "dashOffset", "tickColor", "tickBorderDash", "tickBorderDashOffset", "crossAlign", "tickAndPadding", "hTickAndPadding", "lineCount", "textOffset", "textBaseline", "_getXAxisLabelAlignment", "_getYAxisLabelAlignment", "labelOffset", "halfCount", "strokeColor", "textStrokeColor", "strokeWidth", "textStrokeWidth", "tickTextAlign", "showLabelBackdrop", "backdrop", "labelPadding", "backdropPadding", "backdropColor", "translation", "_computeLabelArea", "drawBackground", "save", "fillRect", "restore", "drawGrid", "drawLine", "p1", "p2", "setLineDash", "beginPath", "moveTo", "lineTo", "stroke", "drawOnChartArea", "drawBorder", "lastLineWidth", "drawLabels", "clipArea", "renderTextOptions", "renderText", "unclipArea", "drawTitle", "tz", "gz", "bz", "_maxDigits", "fontSize", "TypedRegistry", "scope", "create", "isForType", "isPrototypeOf", "register", "proto", "getPrototypeOf", "parentScope", "isIChartComponent", "registerDefaults", "unregister", "itemDefaults", "merge", "routeDefaults", "describe", "routes", "property", "propertyParts", "split", "sourceName", "sourceScope", "join", "parts", "targetName", "targetScope", "route", "Registry", "controllers", "_typedRegistries", "_each", "addControllers", "addPlugins", "addScales", "getController", "_get", "getPlugin", "getScale", "removeControllers", "removeElements", "removePlugins", "removeScales", "typedRegistry", "arg", "reg", "_getRegistryForType", "_exec", "itemReg", "component", "camelMethod", "_capitalize", "PluginService", "_init", "notify", "hook", "_createDescriptors", "_descriptors", "descriptor", "plugin", "callCallback", "cancelable", "invalidate", "_oldCache", "_notifyStateChanges", "allPlugins", "createDescriptors", "previousDescriptors", "some", "localIds", "local", "getOpts", "pluginOpts", "pluginScopeKeys", "scriptable", "indexable", "allKeys", "getIndexAxis", "datasetDefaults", "datasetOptions", "getAxisFromDefaultScaleID", "getDefaultScaleIDFromAxis", "idMatchesAxis", "axisFromPosition", "determineAxis", "scaleOptions", "toLowerCase", "getAxisFromDataset", "retrieveAxisFromDatasets", "boundDs", "d", "mergeScaleConfig", "chartDefaults", "configScales", "chartIndexAxis", "scaleConf", "error", "_proxy", "defaultId", "defaultScaleOptions", "mergeIf", "defaultID", "initOptions", "initData", "initConfig", "keyCache", "keysCached", "Set", "cachedKeys", "generate", "addIfFound", "Config", "_config", "_scopeCache", "_resolverCache", "platform", "clearCache", "clear", "datasetType", "additionalOptionScopes", "_cachedScopes", "mainScope", "resetCache", "keyLists", "chartOptionScopes", "resolver", "subPrefixes", "getResolver", "needContext", "isFunction", "subResolver", "_attachContext", "descriptorDefaults", "resolverCache", "_createResolver", "p", "hasFunction", "isScriptable", "isIndexable", "KNOWN_POSITIONS", "positionIsHorizontal", "compare2Level", "l1", "l2", "onAnimationsComplete", "onComplete", "onAnimationProgress", "onProgress", "getCanvas", "getElementById", "instances", "getChart", "c", "moveNumericKeys", "intKey", "determineLastEvent", "lastEvent", "inChartArea", "isClick", "Chart", "version", "invalidatePlugins", "userConfig", "initialCanvas", "existingChart", "uid", "_options", "_aspectRatio", "_metasets", "_lastEvent", "_listeners", "_responsiveListeners", "_sortedMetasets", "_plugins", "_hiddenIndices", "attached", "_doResize", "debounce", "resizeDelay", "_initialize", "maintainAspectRatio", "responsive", "retinaScale", "bindEvents", "clearCanvas", "_resize", "_resizeBeforeDraw", "newSize", "newRatio", "onResize", "render", "ensureScalesHaveIDs", "scalesOptions", "axisOptions", "buildOrUpdateScales", "scaleOpts", "updated", "isRadial", "dposition", "dtype", "scaleType", "scaleClass", "hasUpdated", "_updateMetasets", "_destroyDatasetMeta", "_removeUnreferencedMetasets", "buildOrUpdateControllers", "newControllers", "order", "visible", "ControllerClass", "_resetElements", "animsDisabled", "_updateScales", "_checkEventBindings", "_updateHiddenIndices", "_minPadding", "autoPadding", "_updateLayout", "_updateDatasets", "_eventHandler", "_updateHoverStyles", "existingEvents", "newEvents", "events", "setsEqual", "unbindEvents", "changes", "_getUniformDataChanges", "datasetCount", "makeSet", "changeSet", "noArea", "_idx", "_updateDataset", "layers", "_drawDatasets", "_drawDataset", "getDatasetClipArea", "getElementsAtEventForMode", "Interaction", "setDatasetVisibility", "_updateVisibility", "hide", "show", "_stop", "destroy", "toBase64Image", "toDataURL", "bindUserEvents", "bindResponsiveEvents", "_add", "_remove", "detached", "updateHoverStyle", "prefix", "getActiveElements", "setActiveElements", "activeElements", "lastActive", "_elementsEqual", "pluginId", "replay", "hoverOptions", "hover", "deactivated", "activated", "eventFilter", "_handleEvent", "_getActiveElements", "_isClickEvent", "onHover", "clipSelf", "outerAngleClip", "_normalizeAngle", "innerAngleClip", "clipWidth", "closePath", "rect", "clipArc", "pixelMargin", "angleMargin", "toRadiusCorners", "_readValueToProps", "parseBorderRadius", "angleDelta", "o", "halfThickness", "innerLimit", "computeOuterLimit", "outerArcLimit", "outerStart", "outerEnd", "innerStart", "innerEnd", "rThetaToXY", "theta", "pathArc", "innerR", "spacingOffset", "alpha", "noSpacingInnerRadius", "noSpacingOuterRadius", "avNogSpacingRadius", "adjustedAngle", "beta", "angleOffset", "outerStartAdjustedRadius", "outerEndAdjustedRadius", "outerStartAdjustedAngle", "outerEndAdjustedAngle", "innerStartAdjustedRadius", "innerEndAdjustedRadius", "innerStartAdjustedAngle", "innerEndAdjustedAngle", "outerMidAdjustedAngle", "pCenter", "p4", "innerMidAdjustedAngle", "p8", "outerStartX", "outerStartY", "outerEndX", "outerEndY", "drawArc", "fullCircles", "inner", "selfJoin", "ArcElement", "chartX", "chartY", "rAdjust", "nonZeroBetween", "betweenAngles", "withinRadius", "_isBetween", "halfAngle", "halfRadius", "translate", "fix", "radiusOffset", "setStyle", "lineCap", "borderCapStyle", "previous", "getLineMethod", "stepped", "_steppedLineTo", "tension", "cubicInterpolationMode", "_bezierCurveTo", "pathVars", "paramsStart", "paramsEnd", "segmentStart", "segmentEnd", "outside", "pathSegment", "lineMethod", "fastPathSegment", "avgX", "countX", "prevX", "lastY", "pointIndex", "drawX", "truncX", "_getSegmentMethod", "useFastPath", "_getInterpolationMethod", "_steppedInterpolation", "_bezierInterpolation", "_pointInLine", "strokePathWithCache", "path", "_path", "Path2D", "strokePathDirect", "segments", "segmentMethod", "usePath2D", "LineElement", "capBezierPoints", "_points", "_segments", "_pointsUpdated", "_updateBezierControlPoints", "_computeSegments", "interpolate", "_boundSegments", "_interpolate", "interpolated", "hitRadius", "PointElement", "hoverRadius", "mouseX", "mouseY", "inXRange", "inYRange", "drawPoint", "getBarBounds", "bar", "half", "skipOrLimit", "parseBorderWidth", "maxW", "maxH", "toTRBL", "toTRBLCorners", "maxR", "enableBorder", "topLeft", "topRight", "bottomLeft", "bottomRight", "boundingRects", "bounds", "outer", "skipX", "skipY", "skipBoth", "hasRadius", "addNormalRectPath", "inflateRect", "amount", "refRect", "BarElement", "addRectPath", "addRoundedRectPath", "BORDER_COLORS", "BACKGROUND_COLORS", "replace", "getBorderColor", "getBackgroundColor", "colorizeDefaultDataset", "colorizeDoughnutDataset", "colorizePolarAreaDataset", "getColorizer", "containsColorsDefinitions", "k", "containsColorsDefinition", "containsDefaultColorsDefenitions", "forceOverride", "_args", "chartOptions", "containsColorDefenition", "colorizer", "lttbDecimation", "samples", "decimated", "bucketWidth", "sampledIndex", "endIndex", "maxAreaPoint", "maxArea", "nextA", "avgY", "avgRangeStart", "avgRangeEnd", "avgRangeLength", "rangeOffs", "rangeTo", "pointAx", "pointAy", "minMaxDecimation", "minIndex", "maxIndex", "startIndex", "xMin", "xMax", "dx", "lastIndex", "intermediateIndex1", "intermediateIndex2", "cleanDecimatedDataset", "defineProperty", "configurable", "enumerable", "writable", "cleanDecimatedData", "getStartAndCountOfVisiblePointsSimplified", "pointCount", "algorithm", "beforeElementsUpdate", "xAxis", "threshold", "tpoints", "_findSegmentEnd", "_getBounds", "targetSegments", "tgt", "subBounds", "fillSources", "_boundSegment", "fillSource", "_getEdge", "_pointsFromSegments", "boundary", "linePoints", "_createBoundaryLine", "_shouldApplyFill", "_resolveTarget", "sources", "propagate", "visited", "_decodeFill", "parseFillOption", "parseFloat", "decodeTargetIndex", "firstCh", "_getTargetPixel", "_getTargetValue", "fillOption", "_buildStackLine", "sourcePoints", "linesBelow", "getLinesBelow", "addPointsBelow", "below", "unshift", "sourcePoint", "postponed", "findPoint", "pointValue", "firstValue", "lastValue", "simpleArc", "_getTarget", "getLineByIndex", "computeBoundary", "computeCircularBoundary", "computeLinearBoundary", "_drawfill", "lineOpts", "above", "doFill", "fillColor", "clipVertical", "clipHorizontal", "clipY", "lineLoop", "clipX", "src", "notShape", "clipBounds", "interpolatedLineTo", "targetLoop", "interpolatedPoint", "afterDatasetsUpdate", "$filler", "beforeDraw", "drawTime", "beforeDatasetsDraw", "beforeDatasetDraw", "getBoxSize", "labelOpts", "boxHeight", "boxWidth", "usePointStyle", "pointStyleWidth", "itemHeight", "itemsEqual", "Legend", "_added", "legendHitBoxes", "_hoveredItem", "doughnutMode", "legendItems", "columnSizes", "lineWidths", "buildLabels", "labelFont", "_computeTitleHeight", "_fitRows", "_fitCols", "hitboxes", "totalHeight", "row", "itemWidth", "measureText", "_itemHeight", "heightLimit", "totalWidth", "currentColWidth", "currentColHeight", "col", "calculateItemSize", "adjustHitBoxes", "rtl", "rtlHelper", "getRtlAdapter", "hitbox", "leftForLtr", "_draw", "defaultColor", "halfFontSize", "cursor", "drawLegendBox", "drawOptions", "SQRT2", "xPlus", "drawPointLegend", "yBoxTop", "xBoxLeft", "fillText", "strikethrough", "overrideTextDirection", "textDirection", "textWidth", "setWidth", "realX", "_textX", "fontLineHeight", "calculateLegendItemHeight", "restoreTextDirection", "titleFont", "titlePadding", "topPaddingPlusHalfFontSize", "_getLegendItemAt", "hitBox", "lh", "handleEvent", "isListened", "hoveredItem", "sameItem", "onLeave", "calculateItemWidth", "calculateItemHeight", "legendItemText", "_element", "afterEvent", "ci", "Title", "_padding", "textSize", "_drawArgs", "fontOpts", "createTitle", "titleBlock", "WeakMap", "positioners", "average", "xSet", "xAverage", "eventPosition", "nearestElement", "distanceBetweenPoints", "tp", "pushOrConcat", "toPush", "apply", "splitNewlines", "str", "String", "createTooltipItem", "formattedValue", "getTooltipSize", "tooltip", "body", "footer", "bodyFont", "footerFont", "titleLineCount", "footerLineCount", "bodyLineItemCount", "combinedBodyLength", "bodyItem", "before", "after", "beforeBody", "afterBody", "titleSpacing", "titleMarginBottom", "bodyLineHeight", "displayColors", "bodySpacing", "footerMarginTop", "footerSpacing", "widthPadding", "maxLineWidth", "determineYAlign", "doesNotFitWithAlign", "xAlign", "caret", "caretSize", "caretPadding", "determineXAlign", "yAlign", "chartWidth", "determineAlignment", "alignX", "alignY", "paddingAndSize", "getBackgroundPoint", "alignment", "cornerRadius", "getAlignedX", "getBeforeAfterBodyLines", "createTooltipContext", "tooltipItems", "overrideCallbacks", "defaultCallbacks", "beforeTitle", "noop", "labelCount", "afterTitle", "beforeLabel", "tooltipItem", "labelColor", "labelTextColor", "bodyColor", "labelPointStyle", "afterLabel", "beforeFooter", "afterFooter", "invokeCallbackWithFallback", "Tooltip", "opacity", "_eventPosition", "_size", "_cachedAnimations", "_tooltipItems", "dataPoints", "caretX", "caretY", "labelColors", "labelPointStyles", "labelTextColors", "getTitle", "getBeforeBody", "getBody", "bodyItems", "scoped", "getAfterBody", "getFooter", "_createItems", "itemSort", "positionAndSize", "backgroundPoint", "external", "drawCaret", "tooltipPoint", "caretPosition", "getCaretPosition", "x3", "y3", "ptX", "ptY", "pt", "titleColor", "_drawColorBox", "colorX", "rtlColorX", "yOffSet", "colorY", "multiKeyBackground", "outerX", "innerX", "strokeRect", "drawBody", "bodyAlign", "xLinePadding", "fillLineOfText", "bodyAlignForCalculation", "textColor", "drawFooter", "footerAlign", "footerColor", "tooltipSize", "quadraticCurveTo", "_updateAnimationTarget", "animX", "animY", "_willRender", "hasTooltipContent", "globalAlpha", "positionChanged", "_positionChanged", "_ignoreReplayEvents", "afterInit", "afterDraw", "_fallback", "addIfString", "addedLabels", "findOrAddLabel", "lastIndexOf", "_getLabelForValue", "CategoryScale", "_startValue", "_valueRange", "_addedLabels", "added", "generateTicks", "generationOptions", "dataRange", "MIN_SPACING", "precision", "maxTicks", "maxDigits", "includeBounds", "unit", "maxSpaces", "rmin", "rmax", "countDefined", "minSpacing", "niceNum", "niceMin", "niceMax", "numSpaces", "almostWhole", "almostEquals", "decimalPlaces", "_decimalPlaces", "relativeLabelSize", "tickValue", "rad", "LinearScaleBase", "_endValue", "handleTickRangeOptions", "setMin", "setMax", "minSign", "maxSign", "getTickLimit", "stepSize", "computeTickLimit", "numericGeneratorOptions", "_setMinAndMaxByKey", "LinearScale", "Ticks", "formatters", "numeric", "log10Floor", "log10", "changeExponent", "m", "isMajor", "tickVal", "steps", "rangeExp", "rangeStep", "startExp", "minExp", "exp", "significand", "lastTick", "LogarithmicScale", "logarithmic", "_zero", "getTickBackdropHeight", "measureLabelSize", "_longestText", "determineLimits", "fitWithPointLabels", "limits", "valueCount", "_pointLabels", "pointLabelOpts", "additionalAngle", "centerPointLabels", "getPointLabelContext", "getPointPosition", "drawingArea", "plFont", "hLimits", "vLimits", "updateLimits", "setCenterPoint", "_pointLabelItems", "buildPointLabelItems", "createPointLabelItem", "itemOpts", "outerDistance", "extra", "pointLabelPosition", "yForAngle", "getTextAlignForAngle", "leftForTextAlign", "isNotOverlapped", "apexesInArea", "drawPointLabelBox", "backdropLeft", "backdropTop", "backdropWidth", "backdropHeight", "drawPointLabels", "pathRadiusLine", "drawRadiusLine", "gridLineOpts", "createPointLabelContext", "RadialLinearScale", "animate", "leftMovement", "rightMovement", "topMovement", "bottomMovement", "angleMultiplier", "scalingFactor", "getValueForDistanceFromCenter", "scaledDistance", "pointLabel", "distanceFromCenter", "getBasePosition", "getPointLabelPosition", "rotate", "INTERVALS", "millisecond", "common", "second", "minute", "hour", "day", "week", "month", "quarter", "year", "UNITS", "sorter", "input", "adapter", "_adapter", "parser", "isoWeekday", "_parseOpts", "determineUnitForAutoTicks", "minUnit", "capacity", "interval", "MAX_SAFE_INTEGER", "determineUnitForFormatting", "determineMajorUnit", "addTick", "time", "timestamps", "_lookup", "timestamp", "setMajorTicks", "majorUnit", "ticksFromTimestamps", "TimeScale", "adapters", "displayFormats", "_unit", "_majorUnit", "_offsets", "_normalized", "normalized", "_applyBounds", "_getLabelBounds", "getLabelTimestamps", "timeOpts", "_generate", "_filterBetween", "_getLabelCapacity", "initOffsets", "offsetAfterAutoskip", "getDecimalForValue", "minor", "weekday", "hasWeekday", "getDataTimestamps", "tooltipFormat", "datetime", "fmt", "_tickFormatFunction", "formatter", "minorFormat", "majorFormat", "offsets", "_getLabelSize", "ticksOpts", "tickLabelWidth", "cosRotation", "sinRotation", "tickFontSize", "exampleTime", "exampleLabel", "normalize", "table", "prevSource", "nextSource", "prevTarget", "nextTarget", "span", "TimeSeriesScale", "_table", "_minPos", "_tableRange", "_getTimestampsForTable", "buildLookupTable", "registerables", "AutoNumeric", "event", "n", "s", "l", "singleton", "i", "e", "second", "f", "English.formatRelativeTime", "English.months", "English.weekdays", "English.meridiems", "English.eras", "m", "offset", "r", "defaultZone", "isNumber", "min", "max", "now", "t", "d", "o", "compare", "a", "bottom", "top", "u", "sign", "Formats.DATE_SHORT", "Formats.DATE_MED", "Formats.DATE_FULL", "Formats.DATE_HUGE", "Formats.TIME_SIMPLE", "Formats.TIME_WITH_SECONDS", "Formats.TIME_WITH_SHORT_OFFSET", "Formats.TIME_WITH_LONG_OFFSET", "Formats.TIME_24_SIMPLE", "Formats.TIME_24_WITH_SECONDS", "Formats.TIME_24_WITH_SHORT_OFFSET", "Formats.TIME_24_WITH_LONG_OFFSET", "Formats.DATETIME_SHORT", "Formats.DATETIME_MED", "Formats.DATETIME_FULL", "Formats.DATETIME_HUGE", "Formats.DATETIME_SHORT_WITH_SECONDS", "Formats.DATETIME_MED_WITH_SECONDS", "Formats.DATETIME_FULL_WITH_SECONDS", "Formats.DATETIME_HUGE_WITH_SECONDS", "c", "p", "formatOffset", "English.meridiemForDateTime", "English.monthForDateTime", "English.weekdayForDateTime", "English.eraForDateTime", "parse", "match", "English.monthsShort", "English.weekdaysLong", "English.weekdaysShort", "INVALID", "orderedUnits", "clone", "config", "text", "fn", "eq", "start", "end", "b", "h", "o2", "round", "Formats.DATE_MED_WITH_WEEKDAY", "Formats.DATETIME_MED_WITH_WEEKDAY", "max", "min", "event", "debounce", "fn", "y", "scales", "i", "min", "range", "zoom", "max", "offset", "from", "to", "pan", "round", "removeHandler", "addHandler", "passive", "end", "top", "left", "right", "bottom", "p", "e", "Hammer", "version", "draw", "index", "event", "index", "event", "index", "event", "event", "event", "event", "index", "event", "rows", "event", "event", "event", "e", "event", "event", "event", "location", "a", "b", "collapsed", "dNone", "mWidth", "inputs", "event", "import_leaflet", "i", "resolve", "event", "callback", "map", "fn", "L", "event", "event", "adapters", "now", "secondsSince", "ConnectionMonitor", "message_types", "protocols", "supportedProtocols", "indexOf", "Connection", "consumer", "error", "event", "extend", "Subscription", "SubscriptionGuarantor", "s", "Subscriptions", "subscription", "Consumer", "createWebSocketURL", "a", "createConsumer", "getConfig", "consumer", "getConsumer", "createConsumer", "getConsumer", "max", "braintree", "event", "event", "event", "i", "error", "numbers", "a", "b", "event", "rawCountryData", "allCountries", "c", "iso2Set", "isIso2", "data_default", "EVENTS", "ITI_SLOTS", "CLASSES", "KEYS", "INPUT_TYPES", "REGEX", "TIMINGS", "LAYOUT", "DIAL_CODE", "E164_MAX_DIGITS", "UK", "US", "PLACEHOLDER_POLICY", "COUNTRY_SELECTOR_MODES", "NUMBER_FORMATS", "NUMBER_TYPES", "VALIDATION_ERRORS", "toEnumObject", "NUMBER_FORMAT", "NUMBER_TYPE", "VALIDATION_ERROR", "COUNTRY_SELECTOR_MODE", "DATA_KEYS", "ARIA", "interfaceTranslations", "en_default", "mediaQuery", "isNarrowViewport", "resolveAutoCountrySelectorMode", "defaults", "toString", "isPlainObject", "isFunction", "isElLike", "placeholderPolicySet", "slotSet", "warn", "warnOption", "validateIso2Array", "validateOptions", "error", "m", "normaliseOptions", "o", "applyOptionSideEffects", "getNumeric", "s", "normaliseString", "buildClassNames", "createEl", "SVG_NS", "buildSvg", "buildSearchIcon", "buildClearIcon", "buildCheckIcon", "buildGlobeIcon", "normaliseName", "buildSearchTokens", "getMatchedCountries", "t", "a", "b", "findFirstCountryStartingWith", "Numerals", "_Numerals", "d", "supportsCssAnchor", "UI", "names", "i", "e", "match", "processAllCountries", "generateCountryNames", "processDialCodes", "sortCountries", "regionlessDialCodes", "hasRegionlessDialCode", "stripSeparateDialCode", "start", "formatNumberAsYouType", "computeNewCaretPosition", "regionlessNanpAreaCodes", "isRegionlessNanp", "nextId", "ensureUtils", "intlTelInput", "createDeferred", "resolve", "Iti", "_Iti", "isNumeric", "max", "attachUtils", "event", "session", "a", "b", "event", "event", "event", "index", "o", "event", "rows", "daterangepicker", "event", "sites_controller_default", "event", "event", "event", "e", "account_recovery_controller_default", "event", "event", "event", "sites_controller_default", "account_recovery_controller_default", "$", "e", "c", "hex", "r", "g", "b", "a", "formatNumber", "index", "left", "right", "i", "e", "a", "b", "t", "swap", "event", "i", "index", "resolve"]
}
